From a61f0f73dcc504fac52a556a5745ea9dd8624fb8 Mon Sep 17 00:00:00 2001 From: Florin Malita Date: Mon, 10 Sep 2018 11:25:35 -0400 Subject: [skottie] Add support for explicit image asset sizing TBR= Change-Id: Ie1c8a30ebc6a7c647265f05fe39b39b53758f016 Reviewed-on: https://skia-review.googlesource.com/153004 Reviewed-by: Florin Malita Commit-Queue: Florin Malita --- modules/skottie/src/SkottieLayer.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'modules') 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 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(jimage["w"], image->width()), + height = ParseDefault(jimage["h"], image->height()); + + sk_sp 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(width) / image->width(), + static_cast(height) / image->height())); + } + + return *fAssetCache.set(res_id, std::move(image_node)); } sk_sp AnimationBuilder::attachImageLayer(const skjson::ObjectValue& jlayer, -- cgit v1.2.3