diff --git a/src/loaders/lottie/tvgLottieExpressions.cpp b/src/loaders/lottie/tvgLottieExpressions.cpp index c83961c1..5d48c3f3 100644 --- a/src/loaders/lottie/tvgLottieExpressions.cpp +++ b/src/loaders/lottie/tvgLottieExpressions.cpp @@ -1355,7 +1355,7 @@ 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) || jerry_value_is_undefined(eval)) { + if (jerry_value_is_exception(eval)) { TVGERR("LOTTIE", "Failed to dispatch the expressions!"); exp->disabled = true; return jerry_undefined(); diff --git a/src/loaders/lottie/tvgLottieModel.h b/src/loaders/lottie/tvgLottieModel.h index e8837aac..934ecfb1 100644 --- a/src/loaders/lottie/tvgLottieModel.h +++ b/src/loaders/lottie/tvgLottieModel.h @@ -934,6 +934,9 @@ struct LottieSlot Array pairs; LottieProperty::Type type; bool overridden = false; + + // used for expression + LottieLayer* layer = nullptr; }; diff --git a/src/loaders/lottie/tvgLottieParser.cpp b/src/loaders/lottie/tvgLottieParser.cpp index 6e5f5380..05b06b52 100644 --- a/src/loaders/lottie/tvgLottieParser.cpp +++ b/src/loaders/lottie/tvgLottieParser.cpp @@ -466,7 +466,10 @@ void LottieParser::registerSlot(LottieObject* obj, const char* sid) (*p)->pairs.push({obj}); return; } - comp->slots.push(new LottieSlot(strdup(sid), obj, type)); + + auto slot = new LottieSlot(strdup(sid), obj, type); + slot->layer = context.layer; + comp->slots.push(slot); } @@ -1497,6 +1500,7 @@ bool LottieParser::apply(LottieSlot* slot, bool byDefault) //OPTIMIZE: we can create the property directly, without object LottieObject* obj = nullptr; //slot object + context.layer = slot->layer; switch (slot->type) { case LottieProperty::Type::Position: { @@ -1562,7 +1566,7 @@ bool LottieParser::apply(LottieSlot* slot, bool byDefault) slot->assign(obj, byDefault); - delete(obj); + // delete(obj); // 여기서 expression을 위한 property가 free 됨 (수정필요) return true; } diff --git a/src/loaders/lottie/tvgLottieProperty.h b/src/loaders/lottie/tvgLottieProperty.h index 1c49ff7b..763c5535 100644 --- a/src/loaders/lottie/tvgLottieProperty.h +++ b/src/loaders/lottie/tvgLottieProperty.h @@ -365,6 +365,12 @@ struct LottieGenericProperty : LottieProperty *frames = *rhs.frames; } } else value = rhs.value; + + // TODO: 슬롯 데이터 이전 로직에 expression에 대한 정보 추가 필요 + if (rhs.exp) { + exp = rhs.exp; + const_cast&>(rhs).exp = nullptr; + } } float angle(float frameNo)