diff options
-rw-r--r-- | modules/skottie/include/Skottie.h | 6 | ||||
-rw-r--r-- | modules/skottie/src/Skottie.cpp | 22 | ||||
-rw-r--r-- | tools/viewer/SkottieSlide.cpp | 5 |
3 files changed, 16 insertions, 17 deletions
diff --git a/modules/skottie/include/Skottie.h b/modules/skottie/include/Skottie.h index 5114ae4578..a1993832f6 100644 --- a/modules/skottie/include/Skottie.h +++ b/modules/skottie/include/Skottie.h @@ -59,7 +59,8 @@ public: /** * Updates the animation state for |t|. * - * @param t normalized [0..1] frame selector, where 0 == inPoint and 1 == outPoint. + * @param t normalized [0..1] frame selector (0 -> first frame, 1 -> final frame) + * */ void seek(SkScalar t); @@ -72,9 +73,6 @@ public: const SkString& version() const { return fVersion; } const SkSize& size() const { return fSize; } - SkScalar frameRate() const { return fFrameRate; } - SkScalar inPoint() const { return fInPoint; } - SkScalar outPoint() const { return fOutPoint; } void setShowInval(bool show); diff --git a/modules/skottie/src/Skottie.cpp b/modules/skottie/src/Skottie.cpp index 250aa2e8d3..d2c2cceb5a 100644 --- a/modules/skottie/src/Skottie.cpp +++ b/modules/skottie/src/Skottie.cpp @@ -62,7 +62,7 @@ using AssetMap = SkTHashMap<SkString, AssetInfo>; struct AttachContext { const ResourceProvider& fResources; const AssetMap& fAssets; - const float fFrameRate; + const float fDuration; sksg::AnimatorList& fAnimators; }; @@ -724,21 +724,21 @@ sk_sp<sksg::RenderNode> AttachNestedAnimation(const char* path, AttachContext* c class SkottieAnimatorAdapter final : public sksg::Animator { public: - SkottieAnimatorAdapter(sk_sp<Animation> animation, float frameRate) + SkottieAnimatorAdapter(sk_sp<Animation> animation, float time_scale) : fAnimation(std::move(animation)) - , fFrameRate(frameRate) { + , fTimeScale(time_scale) { SkASSERT(fAnimation); - SkASSERT(fFrameRate > 0); } protected: void onTick(float t) { - fAnimation->seek(t * fFrameRate / fAnimation->frameRate()); + // TODO: we prolly need more sophisticated timeline mapping for nested animations. + fAnimation->seek(t * fTimeScale); } private: const sk_sp<Animation> fAnimation; - const float fFrameRate; + const float fTimeScale; }; const auto resStream = ctx->fResources.openStream(path); @@ -753,8 +753,10 @@ sk_sp<sksg::RenderNode> AttachNestedAnimation(const char* path, AttachContext* c return nullptr; } - ctx->fAnimators.push_back(skstd::make_unique<SkottieAnimatorAdapter>(animation, - ctx->fFrameRate)); + + ctx->fAnimators.push_back( + skstd::make_unique<SkottieAnimatorAdapter>(animation, + animation->duration() / ctx->fDuration)); return sk_make_sp<SkottieSGAdapter>(std::move(animation)); } @@ -1051,7 +1053,7 @@ sk_sp<sksg::RenderNode> AttachLayer(const json::ValueRef& jlayer, AttachLayerCon sksg::AnimatorList layer_animators; AttachContext local_ctx = { layerCtx->fCtx->fResources, layerCtx->fCtx->fAssets, - layerCtx->fCtx->fFrameRate, + layerCtx->fCtx->fDuration, layer_animators}; // Layer attachers may adjust these. @@ -1283,7 +1285,7 @@ Animation::Animation(const ResourceProvider& resources, } sksg::AnimatorList animators; - AttachContext ctx = { resources, assets, fFrameRate, animators }; + AttachContext ctx = { resources, assets, this->duration(), animators }; auto root = AttachComposition(json, &ctx); stats->fAnimatorCount = animators.size(); diff --git a/tools/viewer/SkottieSlide.cpp b/tools/viewer/SkottieSlide.cpp index 8eecf43c98..aa085336f9 100644 --- a/tools/viewer/SkottieSlide.cpp +++ b/tools/viewer/SkottieSlide.cpp @@ -65,11 +65,10 @@ void SkottieSlide::load(SkScalar w, SkScalar h) { if (fAnimation) { fAnimation->setShowInval(fShowAnimationInval); - SkDebugf("loaded Bodymovin animation v: %s, size: [%f %f], fr: %f\n", + SkDebugf("loaded Bodymovin animation v: %s, size: [%f %f]\n", fAnimation->version().c_str(), fAnimation->size().width(), - fAnimation->size().height(), - fAnimation->frameRate()); + fAnimation->size().height()); } else { SkDebugf("failed to load Bodymovin animation: %s\n", fPath.c_str()); } |