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

Chris Sherlock chris.sherlock79 at gmail.com
Wed Apr 16 10:48:18 PDT 2014


 include/vcl/outdev.hxx          |    3 ++-
 include/vcl/window.hxx          |    2 ++
 vcl/source/outdev/wallpaper.cxx |   35 +++++++----------------------------
 vcl/source/window/window.cxx    |   40 ++++++++++++++++++++++++++++++++++++++++
 4 files changed, 51 insertions(+), 29 deletions(-)

New commits:
commit 948c4654f683e93b757f96e8859e9e91b45298a4
Author: Chris Sherlock <chris.sherlock79 at gmail.com>
Date:   Thu Apr 17 03:45:23 2014 +1000

    fdo#74702 Seperate ImplDrawGradientWallpaper and rename
    
    I have made ImplDrawGradientWallpaper a virtual protected function as
    Window needs to handle this differently to Printer and VirtualDevice
    instances. I have also renamed it to DrawGradientWallpaper.
    
    Change-Id: I529ed0a757cfcebb6fe06f3738219ec43272f657

diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx
index 3034fb3..c428c81 100644
--- a/include/vcl/outdev.hxx
+++ b/include/vcl/outdev.hxx
@@ -768,7 +768,6 @@ public:
     SAL_DLLPRIVATE void         ImplDrawWallpaper( long nX, long nY, long nWidth, long nHeight, const Wallpaper& rWallpaper );
     SAL_DLLPRIVATE void         ImplDrawColorWallpaper( long nX, long nY, long nWidth, long nHeight, const Wallpaper& rWallpaper );
     SAL_DLLPRIVATE void         ImplDrawBitmapWallpaper( long nX, long nY, long nWidth, long nHeight, const Wallpaper& rWallpaper );
-    SAL_DLLPRIVATE void         ImplDrawGradientWallpaper( long nX, long nY, long nWidth, long nHeight, const Wallpaper& rWallpaper );
     ///@}
 
     /** @name Bitmap functions
@@ -891,6 +890,8 @@ protected:
     virtual void                EmulateDrawTransparent( const PolyPolygon& rPolyPoly, sal_uInt16 nTransparencePercent );
     void                        DrawInvisiblePolygon( const PolyPolygon& rPolyPoly );
 
+    virtual void                DrawGradientWallpaper( long nX, long nY, long nWidth, long nHeight, const Wallpaper& rWallpaper );
+
 private:
     typedef void ( OutputDevice::* FontUpdateHandler_t )( bool );
 
diff --git a/include/vcl/window.hxx b/include/vcl/window.hxx
index 786cd0d..f71ae68 100644
--- a/include/vcl/window.hxx
+++ b/include/vcl/window.hxx
@@ -583,6 +583,8 @@ protected:
     virtual void                ClipToPaintRegion( Rectangle& rDstRect ) SAL_OVERRIDE;
     virtual bool                UsePolyPolygonForComplexGradient() SAL_OVERRIDE;
 
+    virtual void                DrawGradientWallpaper( long nX, long nY, long nWidth, long nHeight, const Wallpaper& rWallpaper ) SAL_OVERRIDE;
+
 public:
     bool HasMirroredGraphics() const SAL_OVERRIDE;
 
diff --git a/vcl/source/outdev/wallpaper.cxx b/vcl/source/outdev/wallpaper.cxx
index c53c1ec..d59d9f4 100644
--- a/vcl/source/outdev/wallpaper.cxx
+++ b/vcl/source/outdev/wallpaper.cxx
@@ -113,7 +113,7 @@ void OutputDevice::ImplDrawBitmapWallpaper( long nX, long nY,
 
     // background of bitmap?
     if( bDrawGradientBackground )
-        ImplDrawGradientWallpaper( nX, nY, nWidth, nHeight, rWallpaper );
+        DrawGradientWallpaper( nX, nY, nWidth, nHeight, rWallpaper );
     else if( bDrawColorBackground && bTransparent )
     {
         ImplDrawColorWallpaper( nX, nY, nWidth, nHeight, rWallpaper );
@@ -301,43 +301,22 @@ void OutputDevice::ImplDrawBitmapWallpaper( long nX, long nY,
     mpMetaFile = pOldMetaFile;
 }
 
-void OutputDevice::ImplDrawGradientWallpaper( long nX, long nY,
-                                              long nWidth, long nHeight,
-                                              const Wallpaper& rWallpaper )
+void OutputDevice::DrawGradientWallpaper( long nX, long nY,
+                                          long nWidth, long nHeight,
+                                          const Wallpaper& rWallpaper )
 {
     Rectangle       aBound;
     GDIMetaFile*    pOldMetaFile = mpMetaFile;
     const bool      bOldMap = mbMap;
-    bool            bNeedGradient = true;
 
-        aBound = Rectangle( Point( nX, nY ), Size( nWidth, nHeight ) );
+    aBound = Rectangle( Point( nX, nY ), Size( nWidth, nHeight ) );
 
     mpMetaFile = NULL;
     EnableMapMode( false );
     Push( PUSH_CLIPREGION );
     IntersectClipRegion( Rectangle( Point( nX, nY ), Size( nWidth, nHeight ) ) );
 
-    if( OUTDEV_WINDOW == meOutDevType && rWallpaper.GetStyle() == WALLPAPER_APPLICATIONGRADIENT )
-    {
-        Window *pWin = dynamic_cast< Window* >( this );
-        if( pWin )
-        {
-            // limit gradient to useful size, so that it still can be noticed
-            // in maximized windows
-            long gradientWidth = pWin->GetDesktopRectPixel().GetSize().Width();
-            if( gradientWidth > 1024 )
-                gradientWidth = 1024;
-            if( mnOutOffX+nWidth > gradientWidth )
-                ImplDrawColorWallpaper(  nX, nY, nWidth, nHeight, rWallpaper.GetGradient().GetEndColor() );
-            if( mnOutOffX > gradientWidth )
-                bNeedGradient = false;
-            else
-                aBound = Rectangle( Point( -mnOutOffX, nY ), Size( gradientWidth, nHeight ) );
-        }
-    }
-
-    if( bNeedGradient )
-        DrawGradient( aBound, rWallpaper.GetGradient() );
+    DrawGradient( aBound, rWallpaper.GetGradient() );
 
     Pop();
     EnableMapMode( bOldMap );
@@ -351,7 +330,7 @@ void OutputDevice::ImplDrawWallpaper( long nX, long nY,
     if( rWallpaper.IsBitmap() )
         ImplDrawBitmapWallpaper( nX, nY, nWidth, nHeight, rWallpaper );
     else if( rWallpaper.IsGradient() )
-        ImplDrawGradientWallpaper( nX, nY, nWidth, nHeight, rWallpaper );
+        DrawGradientWallpaper( nX, nY, nWidth, nHeight, rWallpaper );
     else
         ImplDrawColorWallpaper(  nX, nY, nWidth, nHeight, rWallpaper );
 }
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index 0f98332..0ef7a05 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -9378,4 +9378,44 @@ bool Window::UsePolyPolygonForComplexGradient()
     return false;
 }
 
+void Window::DrawGradientWallpaper( long nX, long nY,
+                                    long nWidth, long nHeight,
+                                    const Wallpaper& rWallpaper )
+{
+    Rectangle       aBound;
+    GDIMetaFile*    pOldMetaFile = mpMetaFile;
+    const bool      bOldMap = mbMap;
+    bool            bNeedGradient = true;
+
+    aBound = Rectangle( Point( nX, nY ), Size( nWidth, nHeight ) );
+
+    mpMetaFile = NULL;
+    EnableMapMode( false );
+    Push( PUSH_CLIPREGION );
+    IntersectClipRegion( Rectangle( Point( nX, nY ), Size( nWidth, nHeight ) ) );
+
+    if( rWallpaper.GetStyle() == WALLPAPER_APPLICATIONGRADIENT )
+    {
+        // limit gradient to useful size, so that it still can be noticed
+        // in maximized windows
+        long gradientWidth = GetDesktopRectPixel().GetSize().Width();
+        if( gradientWidth > 1024 )
+            gradientWidth = 1024;
+        if( mnOutOffX+nWidth > gradientWidth )
+            ImplDrawColorWallpaper(  nX, nY, nWidth, nHeight, rWallpaper.GetGradient().GetEndColor() );
+        if( mnOutOffX > gradientWidth )
+            bNeedGradient = false;
+        else
+            aBound = Rectangle( Point( -mnOutOffX, nY ), Size( gradientWidth, nHeight ) );
+    }
+
+    if( bNeedGradient )
+        DrawGradient( aBound, rWallpaper.GetGradient() );
+
+    Pop();
+    EnableMapMode( bOldMap );
+    mpMetaFile = pOldMetaFile;
+}
+
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list