diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2025-01-14 08:17:07 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2025-01-14 12:33:31 +0100 |
commit | 94e9c45d9a82d917738f46243173b4521e1ccd09 (patch) | |
tree | 1b976d2831a40c89e02fdc07ffac57b693dbc3b8 | |
parent | 1f1ac2464e7b7002b285bcd254b8cb21b90eb495 (diff) |
we never actually erase device in SetOutputSizePixelScaleOffsetAndLOKBuffer
So simplify the code.
The reason this currently "works" is that we always set the
background to COL_TRANSPARENT, and when we do that,
the DrawRect() logic will short-circuit and do nothing.
Which also means we can inline ImplSetOutputSizePixel
into SetOutputSizePixel, since it has only one call site.
Change-Id: I0ae000e187fb7d18801ccfb61d1066f71f0c6cad
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180213
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r-- | include/vcl/virdev.hxx | 2 | ||||
-rw-r--r-- | vcl/source/gdi/virdev.cxx | 27 |
2 files changed, 18 insertions, 11 deletions
diff --git a/include/vcl/virdev.hxx b/include/vcl/virdev.hxx index 40cf445f0390..6025658ce099 100644 --- a/include/vcl/virdev.hxx +++ b/include/vcl/virdev.hxx @@ -57,8 +57,6 @@ private: SAL_DLLPRIVATE void ImplInitVirDev( const OutputDevice* pOutDev, tools::Long nDX, tools::Long nDY, const SystemGraphicsData *pData = nullptr ); SAL_DLLPRIVATE bool InnerImplSetOutputSizePixel( const Size& rNewSize, bool bErase, sal_uInt8* pBuffer ); - SAL_DLLPRIVATE bool ImplSetOutputSizePixel( const Size& rNewSize, bool bErase, - sal_uInt8* pBuffer, bool bAlphaMaskTransparent = false ); VirtualDevice (const VirtualDevice &) = delete; VirtualDevice & operator= (const VirtualDevice &) = delete; diff --git a/vcl/source/gdi/virdev.cxx b/vcl/source/gdi/virdev.cxx index b16cdb764a2b..9615cb8fa01e 100644 --- a/vcl/source/gdi/virdev.cxx +++ b/vcl/source/gdi/virdev.cxx @@ -351,10 +351,9 @@ void VirtualDevice::ImplFillOpaqueRectangle( const tools::Rectangle& rRect ) Pop(); } -bool VirtualDevice::ImplSetOutputSizePixel( const Size& rNewSize, bool bErase, - sal_uInt8 *const pBuffer, bool bAlphaMaskTransparent ) +bool VirtualDevice::SetOutputSizePixel( const Size& rNewSize, bool bErase, bool bAlphaMaskTransparent ) { - if( InnerImplSetOutputSizePixel(rNewSize, bErase, pBuffer) ) + if( InnerImplSetOutputSizePixel(rNewSize, bErase, /*pBuffer*/nullptr) ) { if (meFormatAndAlpha != DeviceFormat::WITHOUT_ALPHA) { @@ -402,11 +401,6 @@ void VirtualDevice::EnableRTL( bool bEnable ) OutputDevice::EnableRTL(bEnable); } -bool VirtualDevice::SetOutputSizePixel( const Size& rNewSize, bool bErase, bool bAlphaMaskTransparent ) -{ - return ImplSetOutputSizePixel(rNewSize, bErase, nullptr, bAlphaMaskTransparent); -} - bool VirtualDevice::SetOutputSizePixelScaleOffsetAndLOKBuffer( const Size& rNewSize, const Fraction& rScale, const Point& rNewOffset, sal_uInt8 *const pBuffer) @@ -420,7 +414,22 @@ bool VirtualDevice::SetOutputSizePixelScaleOffsetAndLOKBuffer( mm.SetScaleX( rScale ); mm.SetScaleY( rScale ); SetMapMode( mm ); - return ImplSetOutputSizePixel(rNewSize, true, pBuffer); + + assert(meFormatAndAlpha == DeviceFormat::WITHOUT_ALPHA); + assert(mpVirDev); + assert( rNewSize != GetOutputSizePixel() && "Trying to re-use a VirtualDevice but this time using a pre-allocated buffer"); + assert( rNewSize.Width() >= 1 ); + assert( rNewSize.Height() >= 1 ); + + bool bRet = mpVirDev->SetSizeUsingBuffer( rNewSize.Width(), rNewSize.Height(), pBuffer ); + if ( bRet ) + { + mnOutWidth = rNewSize.Width(); + mnOutHeight = rNewSize.Height(); + } + + return bRet; + } void VirtualDevice::SetReferenceDevice( RefDevMode i_eRefDevMode ) |