From 51a3d60ec4e068fbfee4c3d699257263ac8a0a1c Mon Sep 17 00:00:00 2001 From: Mira Grudzinska Date: Mon, 25 Nov 2024 02:41:39 +0100 Subject: [PATCH] lottie: expressions++ @Issue: https://github.com/thorvg/thorvg/issues/2989 --- src/loaders/lottie/tvgLottieExpressions.cpp | 6 +++--- src/loaders/lottie/tvgLottieProperty.h | 9 +++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/loaders/lottie/tvgLottieExpressions.cpp b/src/loaders/lottie/tvgLottieExpressions.cpp index f4e06d46..42d80b0f 100644 --- a/src/loaders/lottie/tvgLottieExpressions.cpp +++ b/src/loaders/lottie/tvgLottieExpressions.cpp @@ -231,13 +231,13 @@ static jerry_value_t _buildPolystar(LottiePolyStar* polystar, float frameNo) static jerry_value_t _buildTrimpath(LottieTrimpath* trimpath, float frameNo) { jerry_value_t obj = jerry_object(); - auto start = jerry_number(trimpath->start(frameNo)); + auto start = jerry_number(trimpath->start.curValue); jerry_object_set_sz(obj, "start", start); jerry_value_free(start); - auto end = jerry_number(trimpath->end(frameNo)); + auto end = jerry_number(trimpath->end.curValue); jerry_object_set_sz(obj, "end", end); jerry_value_free(end); - auto offset = jerry_number(trimpath->offset(frameNo)); + auto offset = jerry_number(trimpath->offset.curValue); jerry_object_set_sz(obj, EXP_OFFSET, offset); jerry_value_free(offset); diff --git a/src/loaders/lottie/tvgLottieProperty.h b/src/loaders/lottie/tvgLottieProperty.h index 4b3517b5..35cd56ee 100644 --- a/src/loaders/lottie/tvgLottieProperty.h +++ b/src/loaders/lottie/tvgLottieProperty.h @@ -259,8 +259,9 @@ struct LottieGenericProperty : LottieProperty //Property has an either keyframes or single value. Array>* frames = nullptr; T value; + T curValue; - LottieGenericProperty(T v) : value(v) {} + LottieGenericProperty(T v) : value(v), curValue(v) {} LottieGenericProperty() {} LottieGenericProperty(const LottieGenericProperty& rhs) @@ -330,11 +331,11 @@ struct LottieGenericProperty : LottieProperty T operator()(float frameNo, LottieExpressions* exps) { if (exps && exp) { - T out{}; frameNo = _loop(frames, frameNo, exp); - if (exps->result>(frameNo, out, exp)) return out; + if (exps->result>(frameNo, curValue, exp)) return curValue; } - return operator()(frameNo); + curValue = operator()(frameNo); + return curValue; } void copy(const LottieGenericProperty& rhs, bool shallow = true)