diff options
author | Vasily Melenchuk <Vasily.Melenchuk@cib.de> | 2018-03-06 16:23:40 +0300 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-03-14 11:13:52 +0100 |
commit | ae11dec72099fafc807d13b7169bd3177e9d539f (patch) | |
tree | 7932676b0e627e7a7045985aeb2259187c4b738a | |
parent | 1008cd6b0aa96cfbb2a681a055380b54c3d53bf5 (diff) |
tdf#115297: 1bit images displaying fixed (again)
Previous fix 25cd843664919974f0d21ca7a0b02cc43e9eeabb like any
other before it have some regressions, so reverted.
The root of most problems: fix for tdf#104141
d148340babf6c973f7d463909d7a51e16c953248, where mask drawing
was implemented in bitmap drawing code.
So instead of guessing for type of bitmap, mask is drawn with
DrawBitmapEx resolving all known problems (tdf#114726, tdf#115297,
tdf#113918 and tdf#104141).
Change-Id: Ie00f7552d667e237b3c0f9505ee09cb51e85c43c
Reviewed-on: https://gerrit.libreoffice.org/50828
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r-- | drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx | 6 | ||||
-rw-r--r-- | vcl/headless/svpgdi.cxx | 31 |
2 files changed, 4 insertions, 33 deletions
diff --git a/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx b/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx index 2d9f1612b1f0..ba5cc8441122 100644 --- a/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx +++ b/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx @@ -271,7 +271,8 @@ namespace drawinglayer } else { - maVirtualDeviceMask->DrawBitmap(rAnimBitmap.aPosPix, aMask); + BitmapEx aExpandVisibilityMask = BitmapEx(aMask, aMask); + maVirtualDeviceMask->DrawBitmapEx(rAnimBitmap.aPosPix, aExpandVisibilityMask); } break; @@ -279,7 +280,8 @@ namespace drawinglayer case Disposal::Previous: { maVirtualDevice->DrawBitmapEx(rAnimBitmap.aPosPix, rAnimBitmap.aBmpEx); - maVirtualDeviceMask->DrawBitmap(rAnimBitmap.aPosPix, rAnimBitmap.aBmpEx.GetMask()); + BitmapEx aExpandVisibilityMask = BitmapEx(rAnimBitmap.aBmpEx.GetMask(), rAnimBitmap.aBmpEx.GetMask()); + maVirtualDeviceMask->DrawBitmapEx(rAnimBitmap.aPosPix, aExpandVisibilityMask); break; } } diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx index 3618a185ce12..2d9694cc7a88 100644 --- a/vcl/headless/svpgdi.cxx +++ b/vcl/headless/svpgdi.cxx @@ -1200,39 +1200,8 @@ void SvpSalGraphics::copyBits( const SalTwoRect& rTR, cairo_surface_destroy(pCopy); } -namespace -{ - bool isBlackWhite(const SalBitmap& rBitmap) - { - const SvpSalBitmap& rSrcBmp = static_cast<const SvpSalBitmap&>(rBitmap); - const BitmapBuffer * pSourceBuffer = rSrcBmp.GetBuffer(); - const BitmapPalette & rPalette = pSourceBuffer->maPalette; - - return ( - rPalette.GetEntryCount() < 2 || - - (rPalette.GetEntryCount() == 2 && - rPalette[0] == COL_BLACK && - rPalette[1] == COL_WHITE ) || - - (rPalette.GetEntryCount() == 2 && - rPalette[1] == COL_BLACK && - rPalette[0] == COL_WHITE ) - ); - } -} - void SvpSalGraphics::drawBitmap(const SalTwoRect& rTR, const SalBitmap& rSourceBitmap) { - if (rSourceBitmap.GetBitCount() == 1 && isBlackWhite(rSourceBitmap)) - { - // This way we draw only monochrome b/w bitmaps - MaskHelper aMask(rSourceBitmap); - cairo_surface_t* source = aMask.getMask(); - copySource(rTR, source); - return; - } - SourceHelper aSurface(rSourceBitmap); cairo_surface_t* source = aSurface.getSurface(); copySource(rTR, source); |