Fix the issue that the imageScaleModes is not effective with editable image#2684
Fix the issue that the imageScaleModes is not effective with editable image#2684domchen merged 6 commits intoTencent:mainfrom
Conversation
| auto file = pagFile->getFile(); | ||
| if (file && file->imageScaleModes && !file->imageScaleModes->empty()) { | ||
| auto editableImages = pagFile->getEditableIndices(LayerType::Image); | ||
| for (size_t i = 0; i < editableImages.size(); i++) { | ||
| bool found = false; | ||
| auto imageLayers = file->getImageAt(editableImages.at(i)); | ||
| for (size_t j = 0; j < imageLayers.size(); j++) { | ||
| auto tmpImageLayer = imageLayers.at(j); | ||
| if (imageLayer == tmpImageLayer) { | ||
| defaultScaleMode = file->imageScaleModes->at(i); | ||
| found = true; | ||
| break; | ||
| } | ||
| } | ||
| if (found) { | ||
| break; | ||
| } | ||
| } | ||
| } |
There was a problem hiding this comment.
不用这么复杂。imageLayer本身就有editableIndex, 用来作为imageScaleModes的索引就行了。
| delete replacement; | ||
| if (image != nullptr) { | ||
| replacement = new ImageReplacement(static_cast<ImageLayer*>(layer), image); | ||
| replacement = new ImageReplacement(rootFile, static_cast<ImageLayer*>(layer), image); |
There was a problem hiding this comment.
不用传递rootFile, imageLayer->getFile()就行。
There was a problem hiding this comment.
imageLayer好像没有getFile这个方法
…ponding to imageLayer
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #2684 +/- ##
==========================================
- Coverage 77.30% 77.25% -0.06%
==========================================
Files 425 425
Lines 22461 22467 +6
Branches 6356 6357 +1
==========================================
- Hits 17364 17357 -7
- Misses 3805 3813 +8
- Partials 1292 1297 +5 ☔ View full report in Codecov by Sentry. |
…ponding to imageLayer
| int defaultScaleMode = PAGScaleMode::LetterBox; | ||
| int index = editableIndex(); | ||
| if (index >= 0 && file && file->imageScaleModes && !file->imageScaleModes->empty()) { | ||
| defaultScaleMode = file->imageScaleModes->at(index); | ||
| } | ||
| auto imageLayer = static_cast<ImageLayer*>(layer); | ||
| if (imageLayer && imageLayer->imageFillRule) { | ||
| defaultScaleMode = imageLayer->imageFillRule->scaleMode; | ||
| } | ||
|
|
||
| return defaultScaleMode; |
There was a problem hiding this comment.
要避免重复计算,应该是最先判断ImageFillRule上的scaleMode,如果存在就直接return。然后再判断editableIndex,return。最后return letterbox。if-return 这是推荐的代码写法。逻辑更清晰,代码执行也没有重复。
| defaultScaleMode = imageFillRule ? imageFillRule->scaleMode : PAGScaleMode::LetterBox; | ||
| contentWidth = imageLayer->imageBytes->width; | ||
| contentHeight = imageLayer->imageBytes->height; | ||
| defaultScaleMode = scaleMode; |
There was a problem hiding this comment.
这几个参数已经不需要判断或者计算了,可以直接在构造函数初始化的地方赋值。类似pagImage(std::move(pagImage)),defaultScaleMode(scale), contentWidth...
|
|
||
| namespace pag { | ||
| ImageReplacement::ImageReplacement(ImageLayer* imageLayer, std::shared_ptr<PAGImage> pagImage) | ||
| ImageReplacement::ImageReplacement(int scaleMode, ImageBytes* bytes, |
There was a problem hiding this comment.
ImageBytes* bytes 改成:ImageBytes* imageBytes, 避免含义误解。另外参数列表顺序调整一下,PAGImage调整到第一个。
…ponding to imageLayer
…ponding to imageLayer

Fix the issue that the imageScaleModes is not effective with editable image