[Libreoffice-commits] core.git: vcl/source

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Wed Sep 15 07:43:43 UTC 2021


 vcl/source/outdev/textline.cxx |    9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

New commits:
commit e1a5bcb20e15400320f926165b6d798fa36c564e
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Tue Sep 14 20:30:58 2021 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Wed Sep 15 09:43:09 2021 +0200

    tdf#143831 fix black background appearing on spellchecking wavy lines
    
    SetBackground() doesn't fill the outputdevice automatically, Erase()
    has to be called to do that.
    
    Then the way the horrible transparency split 24bit rgb + 8bit alpha
    thing works is that the same thing has to be drawn into the 24bit
    surface and the 8bit surface with black used as the line/fill color
    in the 8bit surface.
    
    OutputDevice::SetAntialiasing only mirrors its arg to the secondary
    mpAlphaVDev if it exists, and it doesn't exist until the size is set so
    move that call down a bit (this is probably another preexisting bug
    maybe worth following up on to set that when mpAlphaVDev is created)
    
    Change-Id: I39f71def6b51d78746b41ed2e30a36dc150370bc
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122097
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/vcl/source/outdev/textline.cxx b/vcl/source/outdev/textline.cxx
index 9fd82541262f..f9153d823fe4 100644
--- a/vcl/source/outdev/textline.cxx
+++ b/vcl/source/outdev/textline.cxx
@@ -1049,10 +1049,11 @@ void OutputDevice::DrawWaveLine(const Point& rStartPos, const Point& rEndPos, to
             nWordLength = nWordLength < 1024 ? 1024 : nWordLength;
             ScopedVclPtrInstance< VirtualDevice > pVirtDev( *this, DeviceFormat::DEFAULT,
                                                            DeviceFormat::DEFAULT );
-            pVirtDev->SetAntialiasing( AntialiasingFlags::Enable );
             pVirtDev->SetOutputSizePixel( Size( nWordLength, nWaveHeight * 2 ), false );
             pVirtDev->SetLineColor( GetLineColor() );
             pVirtDev->SetBackground( Wallpaper( COL_TRANSPARENT ) );
+            pVirtDev->Erase();
+            pVirtDev->SetAntialiasing( AntialiasingFlags::Enable );
             pVirtDev->ImplDrawWaveLineBezier( 0, 0, nWordLength, 0, nWaveHeight, fOrientation, nLineWidth );
             rLineCache.insert( pVirtDev->GetBitmapEx( Point( 0, 0 ), pVirtDev->GetOutputSize() ), GetLineColor(), nLineWidth, nWaveHeight, nWordLength, aWavylinebmp );
         }
@@ -1065,9 +1066,6 @@ void OutputDevice::DrawWaveLine(const Point& rStartPos, const Point& rEndPos, to
     }
 
     ImplDrawWaveLineBezier( nStartX, nStartY, nEndX, nEndY, nWaveHeight, fOrientation, nLineWidth );
-
-    if( mpAlphaVDev )
-        mpAlphaVDev->DrawWaveLine( rStartPos, rEndPos, nLineWidth );
 }
 
 void OutputDevice::ImplDrawWaveLineBezier(tools::Long nStartX, tools::Long nStartY, tools::Long nEndX, tools::Long nEndY, tools::Long nWaveHeight, double fOrientation, tools::Long nLineWidth)
@@ -1089,6 +1087,9 @@ void OutputDevice::ImplDrawWaveLineBezier(tools::Long nStartX, tools::Long nStar
             basegfx::deg2rad(15.0),
             bPixelSnapHairline,
             *this);
+
+    if( mpAlphaVDev )
+        mpAlphaVDev->ImplDrawWaveLineBezier(nStartX, nStartY, nEndX, nEndY, nWaveHeight, fOrientation, nLineWidth);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list