drawinglayer/source/processor2d/vclpixelprocessor2d.cxx | 19 ++++++++++++++++ 1 file changed, 19 insertions(+)
New commits: commit 0be0b4e57cbeaab3e73f1d12ef2ad9b55fd1c885 Author: Armin Le Grand (allotropia) <[email protected]> AuthorDate: Tue Jun 28 11:16:56 2022 +0200 Commit: Armin Le Grand <[email protected]> CommitDate: Tue Jun 28 17:48:08 2022 +0200 tdf#149754 correct gradient paint for outside definition range Change-Id: I45fc0a7a024a4288f698eb5f0abf6b0d1440edfc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136561 Tested-by: Jenkins Reviewed-by: Armin Le Grand <[email protected]> diff --git a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx index 362d0ddf9cab..f2bf82a9ce7b 100644 --- a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx +++ b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx @@ -1211,6 +1211,25 @@ void VclPixelProcessor2D::processFillGradientPrimitive2D( return; } + // tdf#149754 VCL gradient draw is not capable to handle all primitive gradient definitions, + // what should be clear due to being developed to ectend/replace them in + // capabilities & precision. + // It is e.g. not capable to correctly paint if the OutputRange is not completely + // inside the DefinitionRange, thus forcing to paint gradent parts *outside* the + // DefinitionRange. + // This happens for Writer with Frames anchored in Frames (and was broken due to + // falling back to VCL Gradient paint here), and for the new SlideBackgroundFill + // Fill mode for objects using it that reach outside the page (which is the + // DefinitionRange in that case). + // I see no real reason to fallback here to OutputDevice::DrawGradient and VCL + // gradient paint at all (system-dependent renderers wouldn't in the future), but + // will for convenience only add that needed additional correcting case + if (!rPrimitive.getDefinitionRange().isInside(rPrimitive.getOutputRange())) + { + process(rPrimitive); + return; + } + GradientStyle eGradientStyle = convertGradientStyle(rFillGradient.getStyle()); Gradient aGradient(eGradientStyle, Color(rFillGradient.getStartColor()),
