aboutsummaryrefslogtreecommitdiffhomepage
path: root/modules
diff options
context:
space:
mode:
authorGravatar Florin Malita <fmalita@chromium.org>2018-05-29 13:46:54 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-05-29 18:58:16 +0000
commita33447dab9b9ebdc0bd636b6ec7721557d21feac (patch)
treec549453a952ab1b888e1392f42d64bb29f5e516e /modules
parentaec79e6f85cf40af1c784a7b5b40ba0d67be1727 (diff)
[skottie] Animation::animationTick() -> Animation::seek()
Replace poorly defined animationTick() with a normalized seek() method. TBR= Change-Id: Id2ea17bb426fe86fede0d6c8a3d93236902f10af Reviewed-on: https://skia-review.googlesource.com/130508 Reviewed-by: Florin Malita <fmalita@chromium.org> Commit-Queue: Florin Malita <fmalita@chromium.org>
Diffstat (limited to 'modules')
-rw-r--r--modules/skottie/fuzz/FuzzSkottieJSON.cpp2
-rw-r--r--modules/skottie/include/Skottie.h24
-rw-r--r--modules/skottie/src/Skottie.cpp15
3 files changed, 26 insertions, 15 deletions
diff --git a/modules/skottie/fuzz/FuzzSkottieJSON.cpp b/modules/skottie/fuzz/FuzzSkottieJSON.cpp
index e4f19ccad7..35135f133f 100644
--- a/modules/skottie/fuzz/FuzzSkottieJSON.cpp
+++ b/modules/skottie/fuzz/FuzzSkottieJSON.cpp
@@ -23,7 +23,7 @@ void FuzzSkottieJSON(sk_sp<SkData> bytes) {
if (!animation) {
return;
}
- animation->animationTick(1337); // A "nothing up my sleeve" number
+ animation->seek(0.1337f); // A "nothing up my sleeve" number
}
#if defined(IS_FUZZING_WITH_LIBFUZZER)
diff --git a/modules/skottie/include/Skottie.h b/modules/skottie/include/Skottie.h
index 0a89ca0438..906ea82b68 100644
--- a/modules/skottie/include/Skottie.h
+++ b/modules/skottie/include/Skottie.h
@@ -48,9 +48,27 @@ public:
~Animation() override;
- void render(SkCanvas*, const SkRect* dst = nullptr) const;
-
- void animationTick(SkMSec);
+ /**
+ * Draws the current animation frame.
+ *
+ * @param canvas destination canvas
+ * @param dst optional destination rect
+ */
+ void render(SkCanvas* canvas, const SkRect* dst = nullptr) const;
+
+ /**
+ * Updates the animation state for |t|.
+ *
+ * @param t normalized [0..1] frame selector, where 0 == inPoint and 1 == outPoint.
+ */
+ void seek(SkScalar t);
+
+ /**
+ * Returns the animation duration in seconds.
+ */
+ SkScalar duration() const {
+ return (fOutPoint - fInPoint) / fFrameRate;
+ }
const SkString& version() const { return fVersion; }
const SkSize& size() const { return fSize; }
diff --git a/modules/skottie/src/Skottie.cpp b/modules/skottie/src/Skottie.cpp
index 8396b5ba90..ddea1be18b 100644
--- a/modules/skottie/src/Skottie.cpp
+++ b/modules/skottie/src/Skottie.cpp
@@ -733,9 +733,7 @@ sk_sp<sksg::RenderNode> AttachNestedAnimation(const char* path, AttachContext* c
protected:
void onTick(float t) {
- // map back from frame # to ms.
- const auto t_ms = t * 1000 / fFrameRate;
- fAnimation->animationTick(t_ms);
+ fAnimation->seek(t * fFrameRate / fAnimation->frameRate());
}
private:
@@ -1288,7 +1286,7 @@ Animation::Animation(const ResourceProvider& resources,
fScene = sksg::Scene::Make(std::move(root), std::move(animators));
// In case the client calls render before the first tick.
- this->animationTick(0);
+ this->seek(0);
}
Animation::~Animation() = default;
@@ -1312,16 +1310,11 @@ void Animation::render(SkCanvas* canvas, const SkRect* dstR) const {
fScene->render(canvas);
}
-void Animation::animationTick(SkMSec ms) {
+void Animation::seek(SkScalar t) {
if (!fScene)
return;
- // 't' in the BM model really means 'frame #'
- auto t = static_cast<float>(ms) * fFrameRate / 1000;
-
- t = fInPoint + std::fmod(t, fOutPoint - fInPoint);
-
- fScene->animate(t);
+ fScene->animate(fInPoint + SkTPin(t, 0.0f, 1.0f) * (fOutPoint - fInPoint));
}
} // namespace skottie