From 2b32c24712887f013aa3f65df0530d985f9102b6 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Fri, 8 Nov 2024 00:43:14 +0900 Subject: [PATCH] lottie: corrected drop-shadow handling opacity value type should be float with range 0 ~ 256 --- src/loaders/lottie/tvgLottieBuilder.cpp | 2 +- src/loaders/lottie/tvgLottieModel.h | 2 +- src/renderer/tvgRender.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/loaders/lottie/tvgLottieBuilder.cpp b/src/loaders/lottie/tvgLottieBuilder.cpp index 41af4740..9c67a8ad 100644 --- a/src/loaders/lottie/tvgLottieBuilder.cpp +++ b/src/loaders/lottie/tvgLottieBuilder.cpp @@ -1279,7 +1279,7 @@ void LottieBuilder::updateEffect(LottieLayer* layer, float frameNo) case LottieEffect::DropShadow: { auto effect = static_cast(*ef); auto color = effect->color(frameNo); - layer->scene->push(SceneEffect::DropShadow, color.rgb[0], color.rgb[1], color.rgb[2], effect->opacity(frameNo), effect->angle(frameNo), effect->distance(frameNo), effect->blurness(frameNo), QUALITY); + layer->scene->push(SceneEffect::DropShadow, color.rgb[0], color.rgb[1], color.rgb[2], (int)effect->opacity(frameNo), effect->angle(frameNo), effect->distance(frameNo), effect->blurness(frameNo) * BLUR_TO_SIGMA, QUALITY); break; } case LottieEffect::GaussianBlur: { diff --git a/src/loaders/lottie/tvgLottieModel.h b/src/loaders/lottie/tvgLottieModel.h index b2ef68c2..e0b44b2a 100644 --- a/src/loaders/lottie/tvgLottieModel.h +++ b/src/loaders/lottie/tvgLottieModel.h @@ -95,7 +95,7 @@ struct LottieEffect struct LottieDropShadow : LottieEffect { LottieColor color; - LottieOpacity opacity = 0; + LottieFloat opacity = 0; LottieAngle angle = 0.0f; LottieSlider distance = 0.0f; LottieSlider blurness = 0.0f; diff --git a/src/renderer/tvgRender.h b/src/renderer/tvgRender.h index c717d61a..bc0e56fb 100644 --- a/src/renderer/tvgRender.h +++ b/src/renderer/tvgRender.h @@ -296,7 +296,7 @@ struct RenderEffectDropShadow : RenderEffect inst->color[0] = va_arg(args, int); inst->color[1] = va_arg(args, int); inst->color[2] = va_arg(args, int); - inst->color[3] = va_arg(args, int); + inst->color[3] = std::min(va_arg(args, int), 255); inst->angle = (float) va_arg(args, double); inst->distance = (float) va_arg(args, double); inst->sigma = std::max((float) va_arg(args, double), 0.0f);