diff --git a/src/loaders/lottie/tvgLottieBuilder.cpp b/src/loaders/lottie/tvgLottieBuilder.cpp index b8f0abfc..2617b52f 100644 --- a/src/loaders/lottie/tvgLottieBuilder.cpp +++ b/src/loaders/lottie/tvgLottieBuilder.cpp @@ -241,6 +241,7 @@ static Shape* _updateFill(LottieGradientFill* fill, int32_t frameNo, RenderConte //TODO: reuse the fill instance? ctx.propagator->fill(unique_ptr(fill->fill(frameNo))); ctx.propagator->fill(fill->rule); + ctx.propagator->opacity(MULTIPLY(fill->opacity(frameNo), PP(ctx.propagator)->opacity)); if (ctx.propagator->strokeWidth() > 0) ctx.propagator->order(true); @@ -595,7 +596,7 @@ static void _updateImage(LottieGroup* parent, LottieImage* image, int32_t frameN if (auto matrix = PP(ctx.propagator)->transform()) { picture->transform(*matrix); } - picture->opacity(ctx.propagator->opacity()); + picture->opacity(PP(ctx.propagator)->opacity); } //TODO: remove duplicate. diff --git a/src/loaders/lottie/tvgLottieModel.h b/src/loaders/lottie/tvgLottieModel.h index 947960a6..f37c4ca2 100644 --- a/src/loaders/lottie/tvgLottieModel.h +++ b/src/loaders/lottie/tvgLottieModel.h @@ -94,6 +94,7 @@ struct LottieGradient LottiePoint end = Point{0.0f, 0.0f}; LottieFloat height = 0.0f; LottieFloat angle = 0.0f; + LottieOpacity opacity = 255; LottieColorStop colorStops; uint8_t id = 0; //1: linear, 2: radial }; diff --git a/src/loaders/lottie/tvgLottieParser.cpp b/src/loaders/lottie/tvgLottieParser.cpp index 2bc6f723..c10277d2 100644 --- a/src/loaders/lottie/tvgLottieParser.cpp +++ b/src/loaders/lottie/tvgLottieParser.cpp @@ -684,6 +684,7 @@ LottieRoundedCorner* LottieParser::parseRoundedCorner() void LottieParser::parseGradient(LottieGradient* gradient, const char* key) { if (!strcmp(key, "t")) gradient->id = getInt(); + else if (!strcmp(key, "o")) parseProperty(gradient->opacity); else if (!strcmp(key, "g")) { enterObject();