diff options
-rw-r--r-- | include/vcl/outdev.hxx | 37 | ||||
-rw-r--r-- | include/vcl/print.hxx | 4 | ||||
-rw-r--r-- | vcl/source/gdi/outdev2.cxx | 44 | ||||
-rw-r--r-- | vcl/source/gdi/print.cxx | 21 |
4 files changed, 63 insertions, 43 deletions
diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx index fbeae4bafa0b..7350a1569fbd 100644 --- a/include/vcl/outdev.hxx +++ b/include/vcl/outdev.hxx @@ -832,7 +832,13 @@ protected: basegfx::B2DRange &aVisibleRange, double &fMaximumArea); - virtual void ScaleBitmap ( Bitmap &rBmp, SalTwoRect &rPosAry ); + virtual void ScaleBitmap ( Bitmap &rBmp, SalTwoRect &rPosAry ); + + virtual void DrawDeviceBitmap( + const Point& rDestPt, const Size& rDestSize, + const Point& rSrcPtPixel, const Size& rSrcSizePixel, + BitmapEx& rBitmapEx ); + private: typedef void ( OutputDevice::* FontUpdateHandler_t )( bool ); @@ -845,7 +851,7 @@ private: SAL_DLLPRIVATE static void ImplUpdateFontDataForAllFrames( FontUpdateHandler_t pHdl, bool bNewFontLists ); SAL_DLLPRIVATE long ImplGetGradientSteps( const Gradient& rGradient, const Rectangle& rRect, bool bMtf ); - //not implemented; to detect misuses of DrawOutDev(...OutputDevice&); + // not implemented; to detect misuses of DrawOutDev(...OutputDevice&); void DrawOutDev( const Point&, const Size&, const Point&, const Size&, const Printer&); public: @@ -1039,6 +1045,9 @@ public: virtual void DrawOutDev( const Point& rDestPt, const Size& rDestSize, const Point& rSrcPt, const Size& rSrcSize, const OutputDevice& rOutDev ); + void DrawOutDev( const Point& rDestPt, const Size& rDestSize, + const Point& rSrcPt, const Size& rSrcSize, + const Printer& rOutDev ); virtual void CopyArea( const Point& rDestPt, const Point& rSrcPt, const Size& rSrcSize, sal_uInt16 nFlags = 0 ); @@ -1141,25 +1150,25 @@ public: BitmapEx GetBitmapEx( const Point& rSrcPt, const Size& rSize ) const; void EnableMapMode( bool bEnable = true ); - bool IsMapModeEnabled() const { return mbMap; } + bool IsMapModeEnabled() const { return mbMap; } // Enabling/disabling RTL only makes sense for OutputDevices that use a mirroring SalGraphisLayout - virtual void EnableRTL( bool bEnable = true); - bool IsRTLEnabled() const { return mbEnableRTL; } + void EnableRTL( bool bEnable = true); + bool IsRTLEnabled() const { return mbEnableRTL; } void SetConnectMetaFile( GDIMetaFile* pMtf ); GDIMetaFile* GetConnectMetaFile() const { return mpMetaFile; } void EnableOutput( bool bEnable = true ); - bool IsOutputEnabled() const { return mbOutput; } - bool IsDeviceOutput() const { return mbDevOutput; } - bool IsDeviceOutputNecessary() const { return (mbOutput && mbDevOutput); } - bool IsOutputNecessary() const { return ((mbOutput && mbDevOutput) || (mpMetaFile != NULL)); } + bool IsOutputEnabled() const { return mbOutput; } + bool IsDeviceOutput() const { return mbDevOutput; } + bool IsDeviceOutputNecessary() const { return (mbOutput && mbDevOutput); } + bool IsOutputNecessary() const { return ((mbOutput && mbDevOutput) || (mpMetaFile != NULL)); } void SetClipRegion(); void SetClipRegion( const Region& rRegion ); Region GetClipRegion() const; - bool IsClipRegion() const { return mbClipRegion; } + bool IsClipRegion() const { return mbClipRegion; } Region GetActiveClipRegion() const; void MoveClipRegion( long nHorzMove, long nVertMove ); @@ -1409,16 +1418,16 @@ public: sal_Int32* pKashidaPosDropped // invalid kashida positions (out) ) const; - virtual sal_uInt16 GetBitCount() const; + sal_uInt16 GetBitCount() const; - bool GetTextIsRTL( const OUString&, sal_Int32 nIndex, sal_Int32 nLen ) const; + bool GetTextIsRTL( const OUString&, sal_Int32 nIndex, sal_Int32 nLen ) const; /** Query the existence and depth of the alpha channel @return 0, if no alpha channel available, and the bit depth of the alpha channel otherwise. */ - virtual sal_uInt16 GetAlphaBitCount() const; + sal_uInt16 GetAlphaBitCount() const; sal_uLong GetColorCount() const; void Push( sal_uInt16 nFlags = PUSH_ALL ); @@ -1482,7 +1491,7 @@ public: @attention This method ignores negative rDstSz values, thus mirroring must happen outside this method (e.g. in DrawBitmap) */ - Bitmap GetDownsampledBitmap( const Size& rDstSz, + Bitmap GetDownsampledBitmap( const Size& rDstSz, const Point& rSrcPt, const Size& rSrcSz, const Bitmap& rBmp, long nMaxBmpDPIX, long nMaxBmpDPIY ); diff --git a/include/vcl/print.hxx b/include/vcl/print.hxx index 01e7290bf39b..e92786cb30b8 100644 --- a/include/vcl/print.hxx +++ b/include/vcl/print.hxx @@ -295,6 +295,10 @@ protected: basegfx::B2DRange &aVisibleRange, double &fMaximumArea); + void DrawDeviceBitmap( + const Point& rDestPt, const Size& rDestSize, + const Point& rSrcPtPixel, const Size& rSrcSizePixel, + BitmapEx& rBitmapEx ); public: Printer(); diff --git a/vcl/source/gdi/outdev2.cxx b/vcl/source/gdi/outdev2.cxx index 4d2c764c1448..8ac1b35fb816 100644 --- a/vcl/source/gdi/outdev2.cxx +++ b/vcl/source/gdi/outdev2.cxx @@ -966,32 +966,18 @@ void OutputDevice::ImplDrawBitmapEx( const Point& rDestPt, const Size& rDestSize OUTDEV_INIT(); - if( OUTDEV_PRINTER == meOutDevType ) - { - if( aBmpEx.IsAlpha() ) - { - // #107169# For true alpha bitmaps, no longer masking the - // bitmap, but perform a full alpha blend against a white - // background here. - Bitmap aBmp( aBmpEx.GetBitmap() ); - aBmp.Blend( aBmpEx.GetAlpha(), Color( COL_WHITE) ); - DrawBitmap( rDestPt, rDestSize, rSrcPtPixel, rSrcSizePixel, aBmp ); - } - else - { - Bitmap aBmp( aBmpEx.GetBitmap() ), aMask( aBmpEx.GetMask() ); - aBmp.Replace( aMask, Color( COL_WHITE ) ); - ImplPrintTransparent( aBmp, aMask, rDestPt, rDestSize, rSrcPtPixel, rSrcSizePixel ); - } - - return; - } + DrawDeviceBitmap( rDestPt, rDestSize, rSrcPtPixel, rSrcSizePixel, aBmpEx ); +} - if(aBmpEx.IsAlpha()) +void OutputDevice::DrawDeviceBitmap( const Point& rDestPt, const Size& rDestSize, + const Point& rSrcPtPixel, const Size& rSrcSizePixel, + BitmapEx& rBmpEx ) +{ + if(rBmpEx.IsAlpha()) { Size aDestSizePixel(LogicToPixel(rDestSize)); - BitmapEx aScaledBitmapEx(aBmpEx); + BitmapEx aScaledBitmapEx(rBmpEx); Point aSrcPtPixel(rSrcPtPixel); Size aSrcSizePixel(rSrcSizePixel); @@ -1011,7 +997,7 @@ void OutputDevice::ImplDrawBitmapEx( const Point& rDestPt, const Size& rDestSize return; } - if( !( !aBmpEx ) ) + if( !( !rBmpEx ) ) { SalTwoRect aPosAry; @@ -1024,16 +1010,16 @@ void OutputDevice::ImplDrawBitmapEx( const Point& rDestPt, const Size& rDestSize aPosAry.mnDestWidth = ImplLogicWidthToDevicePixel( rDestSize.Width() ); aPosAry.mnDestHeight = ImplLogicHeightToDevicePixel( rDestSize.Height() ); - const sal_uLong nMirrFlags = ImplAdjustTwoRect( aPosAry, aBmpEx.GetSizePixel() ); + const sal_uLong nMirrFlags = ImplAdjustTwoRect( aPosAry, rBmpEx.GetSizePixel() ); if( aPosAry.mnSrcWidth && aPosAry.mnSrcHeight && aPosAry.mnDestWidth && aPosAry.mnDestHeight ) { if( nMirrFlags ) - aBmpEx.Mirror( nMirrFlags ); + rBmpEx.Mirror( nMirrFlags ); - const SalBitmap* pSalSrcBmp = aBmpEx.ImplGetBitmapImpBitmap()->ImplGetSalBitmap(); - const ImpBitmap* pMaskBmp = aBmpEx.ImplGetMaskImpBitmap(); + const SalBitmap* pSalSrcBmp = rBmpEx.ImplGetBitmapImpBitmap()->ImplGetSalBitmap(); + const ImpBitmap* pMaskBmp = rBmpEx.ImplGetMaskImpBitmap(); if ( pMaskBmp ) { @@ -1131,8 +1117,8 @@ void OutputDevice::ImplDrawBitmapEx( const Point& rDestPt, const Size& rDestSize if( mpAlphaVDev ) mpAlphaVDev->DrawBitmapEx( rDestPt, rDestSize, - BitmapEx( aBmpEx.GetMask(), - aBmpEx.GetMask() ) ); + BitmapEx( rBmpEx.GetMask(), + rBmpEx.GetMask() ) ); } else { diff --git a/vcl/source/gdi/print.cxx b/vcl/source/gdi/print.cxx index 25f20a7a14db..a65524b63605 100644 --- a/vcl/source/gdi/print.cxx +++ b/vcl/source/gdi/print.cxx @@ -229,6 +229,27 @@ bool Printer::TransformReduceBitmapExTargetRange( return true; } +void Printer::DrawDeviceBitmap( const Point& rDestPt, const Size& rDestSize, + const Point& rSrcPtPixel, const Size& rSrcSizePixel, + BitmapEx& rBmpEx ) +{ + if( rBmpEx.IsAlpha() ) + { + // #107169# For true alpha bitmaps, no longer masking the + // bitmap, but perform a full alpha blend against a white + // background here. + Bitmap aBmp( rBmpEx.GetBitmap() ); + aBmp.Blend( rBmpEx.GetAlpha(), Color( COL_WHITE) ); + DrawBitmap( rDestPt, rDestSize, rSrcPtPixel, rSrcSizePixel, aBmp ); + } + else + { + Bitmap aBmp( rBmpEx.GetBitmap() ), aMask( rBmpEx.GetMask() ); + aBmp.Replace( aMask, Color( COL_WHITE ) ); + ImplPrintTransparent( aBmp, aMask, rDestPt, rDestSize, rSrcPtPixel, rSrcSizePixel ); + } +} + void Printer::DrawOutDev( const Point& /*rDestPt*/, const Size& /*rDestSize*/, const Point& /*rSrcPt*/, const Size& /*rSrcSize*/ ) { |