diff --git a/src/loaders/lottie/tvgLottieExpressions.cpp b/src/loaders/lottie/tvgLottieExpressions.cpp index 4b7e1177..a8494a49 100644 --- a/src/loaders/lottie/tvgLottieExpressions.cpp +++ b/src/loaders/lottie/tvgLottieExpressions.cpp @@ -1219,7 +1219,10 @@ jerry_value_t LottieExpressions::evaluate(float frameNo, LottieExpression* exp) //evaluate the code auto eval = jerry_eval((jerry_char_t *) exp->code, strlen(exp->code), JERRY_PARSE_NO_OPTS); - if (jerry_value_is_exception(eval)) return jerry_undefined(); + if (jerry_value_is_exception(eval)) { + exp->enabled = false; // The feature is experimental, it will be forcely turned off if it's incompatible. + return jerry_undefined(); + } jerry_value_free(eval); diff --git a/src/loaders/lottie/tvgLottieParser.cpp b/src/loaders/lottie/tvgLottieParser.cpp index ca1175ce..159ef2a3 100644 --- a/src/loaders/lottie/tvgLottieParser.cpp +++ b/src/loaders/lottie/tvgLottieParser.cpp @@ -45,6 +45,7 @@ static LottieExpression* _expression(char* code, LottieComposition* comp, Lottie inst->object = object; inst->property = property; inst->type = type; + inst->enabled = true; return inst; } diff --git a/src/loaders/lottie/tvgLottieProperty.h b/src/loaders/lottie/tvgLottieProperty.h index f7aea077..85720c8a 100644 --- a/src/loaders/lottie/tvgLottieProperty.h +++ b/src/loaders/lottie/tvgLottieProperty.h @@ -194,6 +194,8 @@ struct LottieExpression LottieProperty* property; LottieProperty::Type type; + bool enabled; + struct { uint32_t key = 0; //the keyframe number repeating to float in = FLT_MAX; //looping duration in frame number @@ -367,7 +369,7 @@ struct LottieGenericProperty : LottieProperty T operator()(float frameNo, LottieExpressions* exps) { T out{}; - if (exps && exp) { + if (exps && (exp && exp->enabled)) { if (exp->loop.mode != LottieExpression::LoopMode::None) frameNo = _loop(frames, frameNo, exp); if (exps->result>(frameNo, out, exp)) return out; } @@ -507,7 +509,7 @@ struct LottiePathSet : LottieProperty bool operator()(float frameNo, Array& cmds, Array& pts, Matrix* transform, LottieExpressions* exps) { - if (exps && exp) { + if (exps && (exp && exp->enabled)) { if (exp->loop.mode != LottieExpression::LoopMode::None) frameNo = _loop(frames, frameNo, exp); if (exps->result(frameNo, cmds, pts, transform, exp)) return true; } @@ -588,7 +590,7 @@ struct LottieColorStop : LottieProperty Result operator()(float frameNo, Fill* fill, LottieExpressions* exps) { - if (exps && exp) { + if (exps && (exp && exp->enabled)) { if (exp->loop.mode != LottieExpression::LoopMode::None) frameNo = _loop(frames, frameNo, exp); if (exps->result(frameNo, fill, exp)) return Result::Success; } @@ -724,7 +726,7 @@ struct LottiePosition : LottieProperty Point operator()(float frameNo, LottieExpressions* exps) { Point out{}; - if (exps && exp) { + if (exps && (exp && exp->enabled)) { if (exp->loop.mode != LottieExpression::LoopMode::None) frameNo = _loop(frames, frameNo, exp); if (exps->result(frameNo, out, exp)) return out; }