From e95f80c18fd3718f5fbddef70aeda74d534ba1bd 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 3ef06934..00ee2245 100644 --- a/src/loaders/lottie/tvgLottieBuilder.cpp +++ b/src/loaders/lottie/tvgLottieBuilder.cpp @@ -1308,7 +1308,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 739f3303..9083accc 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 003c7d3b..f3311f6c 100644 --- a/src/renderer/tvgRender.h +++ b/src/renderer/tvgRender.h @@ -309,7 +309,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);