summaryrefslogtreecommitdiff
path: root/canvas
diff options
context:
space:
mode:
authorPatrick Luby <plubius@neooffice.org>2023-10-24 18:52:08 -0400
committerNoel Grandin <noel.grandin@collabora.co.uk>2023-10-25 07:51:13 +0200
commit4cf636fab338ad759e1a23bb8570cc9351ded0d0 (patch)
treee0490fbeaf8569f6a33a7818aae850731d00e270 /canvas
parentb14583ba37a6d7ce398ccd3cf339f954785b03d8 (diff)
tdf#157790 invert alpha mask
Due to commit 81994cb2b8b32453a92bcb011830fcb884f22ff3, the alpha mask needs to be inverted. Change-Id: I4771c5f6f3a08fb210b62a0533df895a4a476058 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158410 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'canvas')
-rw-r--r--canvas/source/vcl/canvashelper.cxx42
1 files changed, 35 insertions, 7 deletions
diff --git a/canvas/source/vcl/canvashelper.cxx b/canvas/source/vcl/canvashelper.cxx
index cbbd18a376d9..0e4dfdbf633f 100644
--- a/canvas/source/vcl/canvashelper.cxx
+++ b/canvas/source/vcl/canvashelper.cxx
@@ -731,13 +731,25 @@ namespace vclcanvas
mpOutDevProvider->getOutDev().DrawTransformedBitmapEx( aMatrix, aBmpEx, fAlpha );
if( mp2ndOutDevProvider )
{
- // HACK. Normally, CanvasHelper does not care about
- // actually what mp2ndOutDev is... well, here we do &
- // assume a 1bpp target - everything beyond 97%
- // transparency is fully transparent
- if( aBmpEx.IsAlpha() && !SkiaHelper::isVCLSkiaEnabled())
+ if( aBmpEx.IsAlpha() )
{
- BitmapFilter::Filter(aBmpEx, BitmapAlphaClampFilter(253));
+ // tdf#157790 invert alpha mask
+ // Due to commit 81994cb2b8b32453a92bcb011830fcb884f22ff3,
+ // the alpha mask needs to be inverted. Note: when
+ // testing tdf#157790, this code only gets executed
+ // when Skia is enabled.
+ AlphaMask aAlpha( aBmpEx.GetAlphaMask() );
+ aAlpha.Invert();
+ aBmpEx = BitmapEx( aBmpEx.GetBitmap(), aAlpha );
+
+ // HACK. Normally, CanvasHelper does not care about
+ // actually what mp2ndOutDev is... well, here we do &
+ // assume a 1bpp target - everything beyond 97%
+ // transparency is fully transparent
+ if( !SkiaHelper::isVCLSkiaEnabled())
+ {
+ BitmapFilter::Filter(aBmpEx, BitmapAlphaClampFilter(253));
+ }
}
mp2ndOutDevProvider->getOutDev().DrawTransformedBitmapEx( aMatrix, aBmpEx );
@@ -839,10 +851,26 @@ namespace vclcanvas
&aGrfAttr);
if( mp2ndOutDevProvider )
- pGrfObj->Draw(mp2ndOutDevProvider->getOutDev(),
+ {
+ GraphicObjectSharedPtr p2ndGrfObj = pGrfObj;
+ if( aBmpEx.IsAlpha() )
+ {
+ // tdf#157790 invert alpha mask
+ // Due to commit 81994cb2b8b32453a92bcb011830fcb884f22ff3,
+ // the alpha mask needs to be inverted. Note: when
+ // testing tdf#157790, this code only gets executed
+ // when Skia is disabled.
+ AlphaMask aAlpha( aBmpEx.GetAlphaMask() );
+ aAlpha.Invert();
+ BitmapEx a2ndBmpEx( aBmpEx.GetBitmap(), aAlpha );
+ p2ndGrfObj = std::make_shared<GraphicObject>( a2ndBmpEx );
+ }
+
+ p2ndGrfObj->Draw(mp2ndOutDevProvider->getOutDev(),
aPt,
aSz,
&aGrfAttr);
+ }
// created GraphicObject, which possibly cached
// display bitmap - return cache object, to retain