diff --git a/include/pag/pag.h b/include/pag/pag.h index c8850efdd0..af838dcfbb 100644 --- a/include/pag/pag.h +++ b/include/pag/pag.h @@ -808,6 +808,7 @@ class PAG_API PAGImageLayer : public PAGLayer { Frame getFrameFromTimeRemap(Frame value); void measureBounds(tgfx::Rect* bounds) override; int64_t contentDurationInternal(); + int getDefaultScaleMode(); friend class RenderCache; diff --git a/src/rendering/editing/ImageReplacement.cpp b/src/rendering/editing/ImageReplacement.cpp index 87aabf12fb..bc9352e875 100644 --- a/src/rendering/editing/ImageReplacement.cpp +++ b/src/rendering/editing/ImageReplacement.cpp @@ -22,12 +22,10 @@ #include "rendering/graphics/Recorder.h" namespace pag { -ImageReplacement::ImageReplacement(ImageLayer* imageLayer, std::shared_ptr pagImage) - : pagImage(std::move(pagImage)) { - auto imageFillRule = imageLayer->imageFillRule; - defaultScaleMode = imageFillRule ? imageFillRule->scaleMode : PAGScaleMode::LetterBox; - contentWidth = imageLayer->imageBytes->width; - contentHeight = imageLayer->imageBytes->height; +ImageReplacement::ImageReplacement(std::shared_ptr pagImage, int scaleMode, + ImageBytes* imageBytes) + : pagImage(std::move(pagImage)), defaultScaleMode(scaleMode), contentWidth(imageBytes->width), + contentHeight(imageBytes->height) { } void ImageReplacement::measureBounds(tgfx::Rect* bounds) { diff --git a/src/rendering/editing/ImageReplacement.h b/src/rendering/editing/ImageReplacement.h index 49787dc354..1fd1b70b43 100644 --- a/src/rendering/editing/ImageReplacement.h +++ b/src/rendering/editing/ImageReplacement.h @@ -22,7 +22,7 @@ namespace pag { class ImageReplacement : public Content { public: - ImageReplacement(ImageLayer* imageLayer, std::shared_ptr pagImage); + ImageReplacement(std::shared_ptr pagImage, int scaleMode, ImageBytes* imageBytes); void measureBounds(tgfx::Rect* bounds) override; void draw(Recorder* recorder) override; diff --git a/src/rendering/layers/PAGImageLayer.cpp b/src/rendering/layers/PAGImageLayer.cpp index 7c1a141e5d..40636644b8 100644 --- a/src/rendering/layers/PAGImageLayer.cpp +++ b/src/rendering/layers/PAGImageLayer.cpp @@ -202,7 +202,8 @@ void PAGImageLayer::setImageInternal(std::shared_ptr image) { } delete replacement; if (image != nullptr) { - replacement = new ImageReplacement(static_cast(layer), image); + replacement = new ImageReplacement(image, getDefaultScaleMode(), + static_cast(layer)->imageBytes); } else { replacement = nullptr; } @@ -676,4 +677,17 @@ int64_t PAGImageLayer::contentDurationInternal() { return FrameToTime(maxFrame + 1, frameRate); } +int PAGImageLayer::getDefaultScaleMode() { + auto imageLayer = static_cast(layer); + if (imageLayer && imageLayer->imageFillRule) { + return imageLayer->imageFillRule->scaleMode; + } + int index = editableIndex(); + if (index >= 0 && file && file->imageScaleModes && !file->imageScaleModes->empty()) { + return file->imageScaleModes->at(index); + } + + return PAGScaleMode::LetterBox; +} + } // namespace pag