aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--modules/skottie/include/Skottie.h6
-rw-r--r--modules/skottie/src/Skottie.cpp22
-rw-r--r--tools/viewer/SkottieSlide.cpp5
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());
}