aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/skottie/src/SkottieLayer.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/modules/skottie/src/SkottieLayer.cpp b/modules/skottie/src/SkottieLayer.cpp
index b3a88ea41c..b01acbac55 100644
--- a/modules/skottie/src/SkottieLayer.cpp
+++ b/modules/skottie/src/SkottieLayer.cpp
@@ -311,8 +311,22 @@ sk_sp<sksg::RenderNode> AnimationBuilder::attachImageAsset(const skjson::ObjectV
return nullptr;
}
- // TODO: non-intrisic image sizing
- return *fAssetCache.set(res_id, sksg::Image::Make(SkImage::MakeFromEncoded(data)));
+ auto image = SkImage::MakeFromEncoded(data);
+ if (!image) {
+ return nullptr;
+ }
+
+ const auto width = ParseDefault<int>(jimage["w"], image->width()),
+ height = ParseDefault<int>(jimage["h"], image->height());
+
+ sk_sp<sksg::RenderNode> image_node = sksg::Image::Make(image);
+ if (width != image->width() || height != image->height()) {
+ image_node = sksg::Transform::Make(std::move(image_node),
+ SkMatrix::MakeScale(static_cast<float>(width) / image->width(),
+ static_cast<float>(height) / image->height()));
+ }
+
+ return *fAssetCache.set(res_id, std::move(image_node));
}
sk_sp<sksg::RenderNode> AnimationBuilder::attachImageLayer(const skjson::ObjectValue& jlayer,