diff --git a/src/loaders/lottie/tvgLottieExpressions.cpp b/src/loaders/lottie/tvgLottieExpressions.cpp index 81dc2d29..846b5ca3 100644 --- a/src/loaders/lottie/tvgLottieExpressions.cpp +++ b/src/loaders/lottie/tvgLottieExpressions.cpp @@ -175,9 +175,8 @@ static unsigned long _idByName(jerry_value_t args) static jerry_value_t _toComp(const jerry_call_info_t* info, const jerry_value_t args[], const jerry_length_t argsCnt) { - TVGLOG("LOTTIE", "toComp is not supported in expressions!"); - - return jerry_undefined(); + auto layer = static_cast(jerry_object_get_native_ptr(info->function, nullptr)); + return _point2d(_point2d(args[0]) * layer->cache.matrix); } @@ -469,8 +468,6 @@ static jerry_value_t _addsub(const jerry_value_t args[], float addsub) } - - static jerry_value_t _muldiv(const jerry_value_t arg1, float arg2) { //1d @@ -637,7 +634,7 @@ static jerry_value_t _content(const jerry_call_info_t* info, const jerry_value_t switch (target->type) { case LottieObject::Group: return _buildGroup(static_cast(target), data->frameNo); case LottieObject::Path: { - jerry_value_t obj = jerry_object(); + auto obj = jerry_object(); jerry_object_set_native_ptr(obj, nullptr, &static_cast(target)->pathset); jerry_object_set_sz(obj, "path", obj); return obj; @@ -690,6 +687,7 @@ static jerry_value_t _nearestKey(const jerry_call_info_t* info, const jerry_valu return obj; } + static jerry_value_t _property(const jerry_call_info_t* info, const jerry_value_t args[], const jerry_length_t argsCnt) { auto data = static_cast(jerry_object_get_native_ptr(info->function, &freeCb)); diff --git a/src/loaders/lottie/tvgLottieModel.h b/src/loaders/lottie/tvgLottieModel.h index b4bd467f..9769a773 100644 --- a/src/loaders/lottie/tvgLottieModel.h +++ b/src/loaders/lottie/tvgLottieModel.h @@ -88,6 +88,7 @@ struct LottieEffect virtual ~LottieEffect() {} unsigned long nm; //encoded by djb2 + unsigned long mn; //encoded by djb2 int16_t ix; Type type; bool enable = false; @@ -1007,7 +1008,7 @@ struct LottieLayer : LottieGroup LottieEffect* effectById(unsigned long id) { ARRAY_FOREACH(p, effects) { - if (id == (*p)->nm) return *p; + if (id == (*p)->nm || id == (*p)->mn) return *p; } return nullptr; } diff --git a/src/loaders/lottie/tvgLottieParser.cpp b/src/loaders/lottie/tvgLottieParser.cpp index 6d0704c8..04e06f23 100644 --- a/src/loaders/lottie/tvgLottieParser.cpp +++ b/src/loaders/lottie/tvgLottieParser.cpp @@ -1416,6 +1416,7 @@ void LottieParser::parseEffects(LottieLayer* layer) else invalid = false; } else if (effect && KEY_AS("nm")) effect->nm = djb2Encode(getString()); + else if (effect && KEY_AS("mn")) effect->mn = djb2Encode(getString()); else if (effect && KEY_AS("ix")) effect->ix = getInt(); else if (effect && KEY_AS("en")) effect->enable = getInt(); else if (effect && KEY_AS("ef")) parseEffect(effect);