diff options
author | Patrick Luby <plubius@neooffice.org> | 2023-10-24 18:52:08 -0400 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2023-10-25 07:51:13 +0200 |
commit | 4cf636fab338ad759e1a23bb8570cc9351ded0d0 (patch) | |
tree | e0490fbeaf8569f6a33a7818aae850731d00e270 /canvas | |
parent | b14583ba37a6d7ce398ccd3cf339f954785b03d8 (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.cxx | 42 |
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 |