summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/vcl/outdev.hxx37
-rw-r--r--include/vcl/print.hxx4
-rw-r--r--vcl/source/gdi/outdev2.cxx44
-rw-r--r--vcl/source/gdi/print.cxx21
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*/ )
{