adjust gradient drawing in vclcanvas (tdf#144073)
For whatever strange reason the drawing does not use the given
geometry, but something bigger. When I added direct drawing using
VCL in a46cb5dc60
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 <l.lunak@collabora.com>
This commit is contained in:
@@ -154,6 +154,12 @@ namespace vclcanvas
|
|||||||
// 2 colors and 2 stops (at 0 and 1) is a linear gradient:
|
// 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)
|
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 ] );
|
Gradient vclGradient( GradientStyle::Linear, rColors[ 0 ], rColors[ 1 ] );
|
||||||
::tools::Polygon aTempPoly( static_cast<sal_uInt16>(5) );
|
::tools::Polygon aTempPoly( static_cast<sal_uInt16>(5) );
|
||||||
aTempPoly[0] = ::Point( ::basegfx::fround( aLeftTop.getX() ),
|
aTempPoly[0] = ::Point( ::basegfx::fround( aLeftTop.getX() ),
|
||||||
@@ -173,6 +179,12 @@ namespace vclcanvas
|
|||||||
&& rValues.maStops.size() == 3 && rValues.maStops[0] == 0
|
&& rValues.maStops.size() == 3 && rValues.maStops[0] == 0
|
||||||
&& rValues.maStops[1] == 0.5 && rValues.maStops[2] == 1)
|
&& 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 ] );
|
Gradient vclGradient( GradientStyle::Axial, rColors[ 1 ], rColors[ 0 ] );
|
||||||
::tools::Polygon aTempPoly( static_cast<sal_uInt16>(5) );
|
::tools::Polygon aTempPoly( static_cast<sal_uInt16>(5) );
|
||||||
aTempPoly[0] = ::Point( ::basegfx::fround( aLeftTop.getX() ),
|
aTempPoly[0] = ::Point( ::basegfx::fround( aLeftTop.getX() ),
|
||||||
|
Reference in New Issue
Block a user