canvas/source/vcl/canvashelper.cxx | 42 ++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-)
New commits: commit 4cf636fab338ad759e1a23bb8570cc9351ded0d0 Author: Patrick Luby <plub...@neooffice.org> AuthorDate: Tue Oct 24 18:52:08 2023 -0400 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Wed Oct 25 07:51:13 2023 +0200 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.gran...@collabora.co.uk> 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