include/vcl/outdev.hxx | 2 +- include/vcl/print.hxx | 2 +- vcl/source/outdev/bitmap.cxx | 29 +++++++++++++---------------- 3 files changed, 15 insertions(+), 18 deletions(-)
New commits: commit 0c2042b34f34824e6ff8ffc78acad46be4faa7cf Author: Chris Sherlock <chris.sherloc...@gmail.com> AuthorDate: Sat Dec 26 22:05:54 2020 +1100 Commit: Tomaž Vajngerl <qui...@gmail.com> CommitDate: Mon Dec 28 01:53:39 2020 +0100 vcl: remove OutputDevice::ScaleBitmap Some time ago, in an attempt to remove a check on OutDevType I refactored some code into the function ScaleBitmap(). When I look at this more closely, I realise that I missed the point of the function. The code I refactored actually checked if subsampled scaling could be done. Thus, the function is inaccurate - it only scales *down* a bitmap, and in fact scaling is already done in Bitmap. Instead, I have now moved the function back into the code and replaced it with a virtual function that checks if the OutputDevice derived class can actually do bitmap subsampling (Printer is unable to do subsampling). Change-Id: I2e6bdbba0bf2153e0421efe6e05c05dd593a4e1e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108323 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx index c11d1abc1875..052b0afb3086 100644 --- a/include/vcl/outdev.hxx +++ b/include/vcl/outdev.hxx @@ -1491,7 +1491,7 @@ protected: const Point& rSrcPtPixel, const Size& rSrcSizePixel, BitmapEx& rBitmapEx ); - virtual void ScaleBitmap ( Bitmap &rBmp, SalTwoRect &rPosAry ); + virtual bool CanSubsampleBitmap() const { return true; } /** Transform and draw a bitmap directly diff --git a/include/vcl/print.hxx b/include/vcl/print.hxx index 631b2f5b83fe..517a9607f1c2 100644 --- a/include/vcl/print.hxx +++ b/include/vcl/print.hxx @@ -203,7 +203,7 @@ protected: virtual void ClipAndDrawGradientMetafile ( const Gradient &rGradient, const tools::PolyPolygon &rPolyPoly ) override; - void ScaleBitmap ( Bitmap&, SalTwoRect& ) override { }; + bool CanSubsampleBitmap() const override { return false; } vcl::Region ClipToDeviceBounds(vcl::Region aRegion) const override; public: diff --git a/vcl/source/outdev/bitmap.cxx b/vcl/source/outdev/bitmap.cxx index 82897f01e00e..ad02fccff63d 100644 --- a/vcl/source/outdev/bitmap.cxx +++ b/vcl/source/outdev/bitmap.cxx @@ -159,8 +159,19 @@ void OutputDevice::DrawBitmap( const Point& rDestPt, const Size& rDestSize, if ( aPosAry.mnSrcWidth && aPosAry.mnSrcHeight && aPosAry.mnDestWidth && aPosAry.mnDestHeight ) { - if ( nAction == MetaActionType::BMPSCALE ) - ScaleBitmap (aBmp, aPosAry); + if (nAction == MetaActionType::BMPSCALE && CanSubsampleBitmap()) + { + const double nScaleX = aPosAry.mnDestWidth / static_cast<double>(aPosAry.mnSrcWidth); + const double nScaleY = aPosAry.mnDestHeight / static_cast<double>(aPosAry.mnSrcHeight); + + // If subsampling, use Bitmap::Scale() for subsampling of better quality. + if ( nScaleX < 1.0 || nScaleY < 1.0 ) + { + aBmp.Scale(nScaleX, nScaleY); + aPosAry.mnSrcWidth = aPosAry.mnDestWidth; + aPosAry.mnSrcHeight = aPosAry.mnDestHeight; + } + } mpGraphics->DrawBitmap( aPosAry, *aBmp.ImplGetSalBitmap(), *this ); } @@ -1038,20 +1049,6 @@ void OutputDevice::DrawDeviceAlphaBitmapSlowPath(const Bitmap& rBitmap, mpMetaFile = pOldMetaFile; } -void OutputDevice::ScaleBitmap (Bitmap &rBmp, SalTwoRect &rPosAry) -{ - const double nScaleX = rPosAry.mnDestWidth / static_cast<double>( rPosAry.mnSrcWidth ); - const double nScaleY = rPosAry.mnDestHeight / static_cast<double>( rPosAry.mnSrcHeight ); - - // If subsampling, use Bitmap::Scale for subsampling for better quality. - if ( nScaleX < 1.0 || nScaleY < 1.0 ) - { - rBmp.Scale ( nScaleX, nScaleY ); - rPosAry.mnSrcWidth = rPosAry.mnDestWidth; - rPosAry.mnSrcHeight = rPosAry.mnDestHeight; - } -} - bool OutputDevice::DrawTransformBitmapExDirect( const basegfx::B2DHomMatrix& aFullTransform, const BitmapEx& rBitmapEx) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits