Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/pag/pag.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
10 changes: 5 additions & 5 deletions src/rendering/editing/ImageReplacement.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@
#include "rendering/graphics/Recorder.h"

namespace pag {
ImageReplacement::ImageReplacement(ImageLayer* imageLayer, std::shared_ptr<PAGImage> pagImage)
ImageReplacement::ImageReplacement(int scaleMode, ImageBytes* bytes,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ImageBytes* bytes 改成:ImageBytes* imageBytes, 避免含义误解。另外参数列表顺序调整一下,PAGImage调整到第一个。

std::shared_ptr<PAGImage> pagImage)
: pagImage(std::move(pagImage)) {
auto imageFillRule = imageLayer->imageFillRule;
defaultScaleMode = imageFillRule ? imageFillRule->scaleMode : PAGScaleMode::LetterBox;
contentWidth = imageLayer->imageBytes->width;
contentHeight = imageLayer->imageBytes->height;
defaultScaleMode = scaleMode;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这几个参数已经不需要判断或者计算了,可以直接在构造函数初始化的地方赋值。类似pagImage(std::move(pagImage)),defaultScaleMode(scale), contentWidth...

contentWidth = bytes->width;
contentHeight = bytes->height;
}

void ImageReplacement::measureBounds(tgfx::Rect* bounds) {
Expand Down
2 changes: 1 addition & 1 deletion src/rendering/editing/ImageReplacement.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
namespace pag {
class ImageReplacement : public Content {
public:
ImageReplacement(ImageLayer* imageLayer, std::shared_ptr<PAGImage> pagImage);
ImageReplacement(int scaleMode, ImageBytes* bytes, std::shared_ptr<PAGImage> pagImage);

void measureBounds(tgfx::Rect* bounds) override;
void draw(Recorder* recorder) override;
Expand Down
17 changes: 16 additions & 1 deletion src/rendering/layers/PAGImageLayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,8 @@ void PAGImageLayer::setImageInternal(std::shared_ptr<PAGImage> image) {
}
delete replacement;
if (image != nullptr) {
replacement = new ImageReplacement(static_cast<ImageLayer*>(layer), image);
replacement = new ImageReplacement(getDefaultScaleMode(),
static_cast<ImageLayer*>(layer)->imageBytes, image);
} else {
replacement = nullptr;
}
Expand Down Expand Up @@ -676,4 +677,18 @@ int64_t PAGImageLayer::contentDurationInternal() {
return FrameToTime(maxFrame + 1, frameRate);
}

int PAGImageLayer::getDefaultScaleMode() {
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;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

要避免重复计算,应该是最先判断ImageFillRule上的scaleMode,如果存在就直接return。然后再判断editableIndex,return。最后return letterbox。if-return 这是推荐的代码写法。逻辑更清晰,代码执行也没有重复。

}

} // namespace pag