From 07c42cb32db1103df3bb5200701a77909a99e1ad Mon Sep 17 00:00:00 2001 From: Mira Grudzinska Date: Sat, 23 Oct 2021 15:20:43 +0200 Subject: [PATCH] sw_engine: gradient transformation combined with the shape transformation The gradient transformation has to be included in the last step of gradient preparation (and combined with a shape transformation). --- src/lib/sw_engine/tvgSwFill.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/lib/sw_engine/tvgSwFill.cpp b/src/lib/sw_engine/tvgSwFill.cpp index c2330513..4a3b1f30 100644 --- a/src/lib/sw_engine/tvgSwFill.cpp +++ b/src/lib/sw_engine/tvgSwFill.cpp @@ -155,9 +155,19 @@ bool _prepareRadial(SwFill* fill, const RadialGradient* radial, const Matrix* tr fill->radial.shiftY = -cy; fill->radial.a = radius; - if (transform) { + auto gradTransform = radial->transform(); + bool isTransformation = !mathIdentity(&gradTransform); + + if (isTransformation) { + if (transform) mathMultiply(transform, &gradTransform); + } else if (transform) { + gradTransform = *transform; + isTransformation = true; + } + + if (isTransformation) { Matrix invTransform; - if (!mathInverse(transform, &invTransform)) return false; + if (!mathInverse(&gradTransform, &invTransform)) return false; fill->radial.a11 = invTransform.e11 * invR; fill->radial.a12 = invTransform.e12 * invR;