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

Chris Sherlock chris.sherlock79 at gmail.com
Wed Mar 26 05:31:50 PDT 2014


 include/vcl/outdev.hxx     |   37 +++++++++++++++++++++++--------------
 include/vcl/print.hxx      |    4 ++++
 vcl/source/gdi/outdev2.cxx |   44 +++++++++++++++-----------------------------
 vcl/source/gdi/print.cxx   |   21 +++++++++++++++++++++
 4 files changed, 63 insertions(+), 43 deletions(-)

New commits:
commit 4d1111aafe4c153ca52d045d726799d4b1753142
Author: Chris Sherlock <chris.sherlock79 at gmail.com>
Date:   Sun Mar 23 21:50:42 2014 +1100

    fdo#74702 Move device specific bitmap drawing to its own function
    
    Device specific drawing has been moved to its own function.
    VirtualDevice and Window draw in the same way, so can be shared in
    OutputDevice, however Printer has its only specific ways of drawing
    so it needs its own method.
    
    Change-Id: I051fee029a1ec022a131bb12588189178c4109b2
    Reviewed-on: https://gerrit.libreoffice.org/8724
    Reviewed-by: Chris Sherlock <chris.sherlock79 at gmail.com>
    Tested-by: Chris Sherlock <chris.sherlock79 at gmail.com>

diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx
index fbeae4b..7350a15 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 01e7290..e92786c 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 4d2c764..8ac1b35 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 25f20a7..a65524b 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*/ )
 {


More information about the Libreoffice-commits mailing list