From adc2ac31fb2763077e48658756946a39d91c8e12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= Date: Tue, 1 Feb 2022 18:07:51 +0100 Subject: [PATCH] adjust gradient drawing in vclcanvas (tdf#144073) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For whatever strange reason the drawing does not use the given geometry, but something bigger. When I added direct drawing using VCL in a46cb5dc607d1d1af402ff3e8fce731e7427854d I naively assumed that the drawing area for the gradient would be the given area. Change-Id: Ia62cb0e5046e622679143eef56a3c6782781bf59 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129298 Tested-by: Jenkins Reviewed-by: Luboš Luňák --- canvas/source/vcl/canvashelper_texturefill.cxx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/canvas/source/vcl/canvashelper_texturefill.cxx b/canvas/source/vcl/canvashelper_texturefill.cxx index 33f4f5c5318c..fa8b97395cfe 100644 --- a/canvas/source/vcl/canvashelper_texturefill.cxx +++ b/canvas/source/vcl/canvashelper_texturefill.cxx @@ -154,6 +154,12 @@ namespace vclcanvas // 2 colors and 2 stops (at 0 and 1) is a linear gradient: if( rColors.size() == 2 && rValues.maStops.size() == 2 && rValues.maStops[0] == 0 && rValues.maStops[1] == 1) { + // tdf#144073: Note that the code below adjusts the gradient area this way. + // No, I have no idea why. + aLeftTop -= 2.0*nDiagonalLength*aDirection; + aLeftBottom -= 2.0*nDiagonalLength*aDirection; + aRightTop += 2.0*nDiagonalLength*aDirection; + aRightBottom += 2.0*nDiagonalLength*aDirection; Gradient vclGradient( GradientStyle::Linear, rColors[ 0 ], rColors[ 1 ] ); ::tools::Polygon aTempPoly( static_cast(5) ); aTempPoly[0] = ::Point( ::basegfx::fround( aLeftTop.getX() ), @@ -173,6 +179,12 @@ namespace vclcanvas && rValues.maStops.size() == 3 && rValues.maStops[0] == 0 && rValues.maStops[1] == 0.5 && rValues.maStops[2] == 1) { + // tdf#144073: Note that the code below adjusts the gradient area this way. + // No, I have no idea why. + aLeftTop -= 2.0*nDiagonalLength*aDirection; + aLeftBottom -= 2.0*nDiagonalLength*aDirection; + aRightTop += 2.0*nDiagonalLength*aDirection; + aRightBottom += 2.0*nDiagonalLength*aDirection; Gradient vclGradient( GradientStyle::Axial, rColors[ 1 ], rColors[ 0 ] ); ::tools::Polygon aTempPoly( static_cast(5) ); aTempPoly[0] = ::Point( ::basegfx::fround( aLeftTop.getX() ),