[Libreoffice-commits] .: vcl/source

Michael Meeks michael at kemper.freedesktop.org
Wed Nov 23 07:00:12 PST 2011


 vcl/source/window/decoview.cxx |  369 ++++++++++++++++-------------------------
 1 file changed, 149 insertions(+), 220 deletions(-)

New commits:
commit e5b5d6dc5bf39ad042dcc717ea4bec4bfc4993fb
Author: Matteo Casalin <matteo.casalin at poste.it>
Date:   Wed Nov 23 14:59:55 2011 +0000

    Decoview code cleanup
    
    Cleaned up many ImplDrawSymbol cases, reducing number of calls to drawing functions
    Removed unused local variables in ImplDrawSymbol
    Translated some comments from German to English

diff --git a/vcl/source/window/decoview.cxx b/vcl/source/window/decoview.cxx
index e275551..d991a16 100644
--- a/vcl/source/window/decoview.cxx
+++ b/vcl/source/window/decoview.cxx
@@ -50,10 +50,6 @@ static void ImplDrawSymbol( OutputDevice* pDev, const Rectangle& rRect,
 {
     // Groessen vorberechnen
     long    nMin    = Min( rRect.GetWidth(), rRect.GetHeight() );
-    long    nSize   = nMin;
-
-    if ( nMin & 0x01 )
-        nMin--;
     Point   aCenter = rRect.Center();
     long    nCenterX = aCenter.X();
     long    nCenterY = aCenter.Y();
@@ -63,149 +59,107 @@ static void ImplDrawSymbol( OutputDevice* pDev, const Rectangle& rRect,
     long    nTop;
     long    nRight;
     long    nBottom;
-    long    nTemp;
-    long    i;
+
+    const bool bMinSideIsOdd = nMin & 1;
 
     switch ( eType )
     {
         case SYMBOL_ARROW_UP:
+            if ( bMinSideIsOdd )
             {
-            if ( !(nMin & 0x01) )
-            {
-                n2--;
-                n4--;
+                // Make odd size for spearhead
+                n4 = --n2 / 2;
             }
             nTop = nCenterY-n2;
-            nBottom = nCenterY;
-            pDev->DrawRect( Rectangle( nCenterX, nTop, nCenterX, nBottom ) );
-            i = 1;
-            while ( i <= n2 )
+            pDev->DrawPixel( Point( nCenterX, nTop ) );
+            for ( long i = 1; i <= n2; ++i )
             {
                 nTop++;
-                nTemp = nCenterX-i;
-                pDev->DrawRect( Rectangle( nTemp, nTop, nTemp, nBottom ) );
-                nTemp = nCenterX+i;
-                pDev->DrawRect( Rectangle( nTemp, nTop, nTemp, nBottom ) );
-                i++;
-            }
-            pDev->DrawRect( Rectangle( nCenterX-n4, nBottom,
-                                       nCenterX+n4, nBottom+n2 ) );
+                pDev->DrawRect( Rectangle (Point( nCenterX-i, nTop ),
+                                Point( nCenterX+i, nTop ) ) );
             }
+            pDev->DrawRect( Rectangle( nCenterX-n4, nCenterY,
+                                       nCenterX+n4, nCenterY+n2 ) );
             break;
 
         case SYMBOL_ARROW_DOWN:
+            if ( bMinSideIsOdd )
             {
-            if ( !(nMin & 0x01) )
-            {
-                n2--;
-                n4--;
+                // Make odd size for spearhead
+                n4 = --n2 / 2;
             }
-            nTop = nCenterY;
             nBottom = nCenterY+n2;
-            pDev->DrawRect( Rectangle( nCenterX, nTop, nCenterX, nBottom ) );
-            i = 1;
-            while ( i <= n2 )
+            pDev->DrawPixel( Point( nCenterX, nBottom ) );
+            for ( long i = 1; i <= n2; ++i )
             {
                 nBottom--;
-                nTemp = nCenterX-i;
-                pDev->DrawRect( Rectangle( nTemp, nTop, nTemp, nBottom ) );
-                nTemp = nCenterX+i;
-                pDev->DrawRect( Rectangle( nTemp, nTop, nTemp, nBottom ) );
-                i++;
-            }
-            pDev->DrawRect( Rectangle( nCenterX-n4, nTop-n2,
-                                       nCenterX+n4, nTop ) );
+                pDev->DrawLine( Point( nCenterX-i, nBottom ),
+                                Point( nCenterX+i, nBottom ) );
             }
+            pDev->DrawRect( Rectangle( nCenterX-n4, nCenterY-n2,
+                                       nCenterX+n4, nCenterY ) );
             break;
 
         case SYMBOL_ARROW_LEFT:
+            if ( bMinSideIsOdd )
             {
-            if ( !(nMin & 0x01) )
-            {
-                n2--;
-                n4--;
+                // Make odd size for spearhead
+                n4 = --n2 / 2;
             }
             nLeft = nCenterX-n2;
-            nRight = nCenterX;
-            pDev->DrawRect( Rectangle( nLeft, nCenterY, nRight, nCenterY ) );
-            i = 1;
-            while ( i <= n2 )
+            pDev->DrawPixel( Point( nLeft, nCenterY ) );
+            for ( long i = 1; i <= n2; ++i )
             {
                 nLeft++;
-                nTemp = nCenterY-i;
-                pDev->DrawRect( Rectangle( nLeft, nTemp, nRight, nTemp ) );
-                nTemp = nCenterY+i;
-                pDev->DrawRect( Rectangle( nLeft, nTemp, nRight, nTemp ) );
-                i++;
-            }
-            pDev->DrawRect( Rectangle( nRight, nCenterY-n4,
-                                       nRight+n2, nCenterY+n4 ) );
+                pDev->DrawLine( Point( nLeft, nCenterY-i ),
+                                Point( nLeft, nCenterY+i ) );
             }
+            pDev->DrawRect( Rectangle( nCenterX, nCenterY-n4,
+                                       nCenterX+n2, nCenterY+n4 ) );
             break;
 
         case SYMBOL_ARROW_RIGHT:
+            if ( bMinSideIsOdd )
             {
-            if ( !(nMin & 0x01) )
-            {
-                n2--;
-                n4--;
+                // Make odd size for spearhead
+                n4 = --n2 / 2;
             }
-            nLeft = nCenterX;
             nRight = nCenterX+n2;
-            pDev->DrawRect( Rectangle( nLeft, nCenterY, nRight, nCenterY ) );
-            i = 1;
-            while ( i <= n2 )
+            pDev->DrawPixel( Point( nRight, nCenterY ) );
+            for ( long i = 1; i <= n2; ++i )
             {
                 nRight--;
-                nTemp = nCenterY-i;
-                pDev->DrawRect( Rectangle( nLeft, nTemp, nRight, nTemp ) );
-                nTemp = nCenterY+i;
-                pDev->DrawRect( Rectangle( nLeft, nTemp, nRight, nTemp ) );
-                i++;
-            }
-            pDev->DrawRect( Rectangle( nLeft-n2, nCenterY-n4,
-                                       nLeft, nCenterY+n4 ) );
+                pDev->DrawLine( Point( nRight, nCenterY-i ),
+                                Point( nRight, nCenterY+i ) );
             }
+            pDev->DrawRect( Rectangle( nCenterX-n2, nCenterY-n4,
+                                       nCenterX, nCenterY+n4 ) );
             break;
 
 
         case SYMBOL_SPIN_UP:
-            {
-            if ( !(nMin & 0x01) )
+            if ( bMinSideIsOdd )
                 n2--;
             nTop = nCenterY-n4;
-            nBottom = nTop+n2;
-            pDev->DrawRect( Rectangle( nCenterX, nTop, nCenterX, nBottom ) );
-            i = 1;
-            while ( i <= n2 )
+            pDev->DrawPixel( Point( nCenterX, nTop ) );
+            for ( long i = 1; i <= n2; ++i )
             {
                 nTop++;
-                nTemp = nCenterX-i;
-                pDev->DrawRect( Rectangle( nTemp, nTop, nTemp, nBottom ) );
-                nTemp = nCenterX+i;
-                pDev->DrawRect( Rectangle( nTemp, nTop, nTemp, nBottom ) );
-                i++;
-            }
+                pDev->DrawLine( Point( nCenterX-i, nTop ),
+                                Point( nCenterX+i, nTop ) );
             }
             break;
 
         case SYMBOL_SPIN_DOWN:
-            {
-            if ( !(nMin & 0x01) )
+            if ( bMinSideIsOdd )
                 n2--;
-            nTop = nCenterY-n4;
-            nBottom = nTop+n2;
-            pDev->DrawRect( Rectangle( nCenterX, nTop, nCenterX, nBottom ) );
-            i = 1;
-            while ( i <= n2 )
+            nBottom = nCenterY+n4;
+            pDev->DrawPixel( Point( nCenterX, nBottom ) );
+            for ( long i = 1; i <= n2; ++i )
             {
                 nBottom--;
-                nTemp = nCenterX-i;
-                pDev->DrawRect( Rectangle( nTemp, nTop, nTemp, nBottom ) );
-                nTemp = nCenterX+i;
-                pDev->DrawRect( Rectangle( nTemp, nTop, nTemp, nBottom ) );
-                i++;
-            }
+                pDev->DrawLine( Point( nCenterX-i, nBottom ),
+                                Point( nCenterX+i, nBottom ) );
             }
             break;
 
@@ -213,29 +167,21 @@ static void ImplDrawSymbol( OutputDevice* pDev, const Rectangle& rRect,
         case SYMBOL_FIRST:
         case SYMBOL_PREV:
         case SYMBOL_REVERSEPLAY:
-            {
-            if ( !(nMin & 0x01) )
+            if ( bMinSideIsOdd )
                 n2--;
             nLeft = nCenterX-n4;
             if ( eType == SYMBOL_FIRST )
-                nLeft++;
-            nRight = nLeft+n2;
-            pDev->DrawRect( Rectangle( nLeft, nCenterY, nRight, nCenterY ) );
-            i = 1;
-            while ( i <= n2 )
             {
+                pDev->DrawLine( Point( nLeft-1, nCenterY-n2 ),
+                                Point( nLeft-1, nCenterY+n2 ) );
                 nLeft++;
-                nTemp = nCenterY-i;
-                pDev->DrawRect( Rectangle( nLeft, nTemp, nRight, nTemp ) );
-                nTemp = nCenterY+i;
-                pDev->DrawRect( Rectangle( nLeft, nTemp, nRight, nTemp ) );
-                i++;
             }
-            if ( eType == SYMBOL_FIRST )
+            pDev->DrawPixel( Point( nLeft, nCenterY ) );
+            for ( long i = 1; i <= n2; ++i )
             {
-                pDev->DrawRect( Rectangle( nCenterX-n4-1, nCenterY-n2,
-                                           nCenterX-n4-1, nCenterY+n2 ) );
-            }
+                nLeft++;
+                pDev->DrawLine( Point( nLeft, nCenterY-i ),
+                                Point( nLeft, nCenterY+i ) );
             }
             break;
 
@@ -243,63 +189,73 @@ static void ImplDrawSymbol( OutputDevice* pDev, const Rectangle& rRect,
         case SYMBOL_LAST:
         case SYMBOL_NEXT:
         case SYMBOL_PLAY:
-            {
-            if ( !(nMin & 0x01) )
+            if ( bMinSideIsOdd )
                 n2--;
-            nLeft = nCenterX-n4;
+            nRight = nCenterX+n4;
             if ( eType == SYMBOL_LAST )
-                nLeft--;
-            nRight = nLeft+n2;
-            pDev->DrawRect( Rectangle( nLeft, nCenterY, nRight, nCenterY ) );
-            i = 1;
-            while ( i <= n2 )
             {
+                pDev->DrawLine( Point( nRight+1, nCenterY-n2 ),
+                                Point( nRight+1, nCenterY+n2 ) );
                 nRight--;
-                nTemp = nCenterY-i;
-                pDev->DrawRect( Rectangle( nLeft, nTemp, nRight, nTemp ) );
-                nTemp = nCenterY+i;
-                pDev->DrawRect( Rectangle( nLeft, nTemp, nRight, nTemp ) );
-                i++;
             }
-            if ( eType == SYMBOL_LAST )
+            pDev->DrawPixel( Point( nRight, nCenterY ) );
+            for ( long i = 1; i <= n2; ++i )
             {
-                pDev->DrawRect( Rectangle( nCenterX+n4+1, nCenterY-n2,
-                                           nCenterX+n4+1, nCenterY+n2 ) );
-            }
+                nRight--;
+                pDev->DrawLine( Point( nRight, nCenterY-i ),
+                                Point( nRight, nCenterY+i ) );
             }
             break;
 
         case SYMBOL_PAGEUP:
-        case SYMBOL_PAGEDOWN:
-        {
-            if ( !( nSize & 0x01 ))
+            if ( bMinSideIsOdd )
             {
                 // An even rectangle size means we have to use a smaller size for
                 // our arrows as we want to use one pixel for the spearhead! Otherwise
                 // it will be clipped!
                 nCenterX++;
-                n2 = ( nMin-1 ) / 2;
-                n4 = ( nMin-1 ) / 4;
+                n4 = --n2 / 2;
             }
 
             nTop = nCenterY-n2;
-            nBottom = nCenterY-1;
-            pDev->DrawRect( Rectangle( nCenterX, nTop, nCenterX, nBottom ) );
-            pDev->DrawRect( Rectangle( nCenterX, nTop+n2+1, nCenterX, nBottom+n2+1 ) );
-            i = 1;
-            while ( i < n2 )
+            nBottom = nCenterY+1;
+            pDev->DrawPixel( Point( nCenterX, nTop ) );
+            pDev->DrawPixel( Point( nCenterX, nBottom ) );
+            for ( long i = 1; i < n2; ++i )
+            {
+                ++nTop;
+                ++nBottom;
+                pDev->DrawLine( Point( nCenterX-i, nTop ),
+                                Point( nCenterX+i, nTop ) );
+                pDev->DrawLine( Point( nCenterX-i, nBottom ),
+                                Point( nCenterX+i, nBottom ) );
+            }
+            break;
+
+        case SYMBOL_PAGEDOWN:
+            if ( bMinSideIsOdd )
             {
-                ( eType == SYMBOL_PAGEUP ) ? nTop++ : nBottom--;
-                nTemp = nCenterX-i;
-                pDev->DrawRect( Rectangle( nTemp, nTop, nTemp, nBottom ) );
-                pDev->DrawRect( Rectangle( nTemp, nTop+n2+1, nTemp, nBottom+n2+1 ) );
-                nTemp = nCenterX+i;
-                pDev->DrawRect( Rectangle( nTemp, nTop, nTemp, nBottom ) );
-                pDev->DrawRect( Rectangle( nTemp, nTop+n2+1, nTemp, nBottom+n2+1 ) );
-                i++;
+                // An even rectangle size means we have to use a smaller size for
+                // our arrows as we want to use one pixel for the spearhead! Otherwise
+                // it will be clipped!
+                nCenterX++;
+                n4 = --n2 / 2;
             }
-        }
-        break;
+
+            nTop = nCenterY-1;
+            nBottom = nCenterY+n2;
+            pDev->DrawPixel( Point( nCenterX, nTop ) );
+            pDev->DrawPixel( Point( nCenterX, nBottom ) );
+            for ( long i = 1; i < n2; ++i )
+            {
+                --nTop;
+                --nBottom;
+                pDev->DrawLine( Point( nCenterX-i, nTop ),
+                                Point( nCenterX+i, nTop ) );
+                pDev->DrawLine( Point( nCenterX-i, nBottom ),
+                                Point( nCenterX+i, nBottom ) );
+            }
+            break;
 
         case SYMBOL_RADIOCHECKMARK:
         case SYMBOL_RECORD:
@@ -326,77 +282,65 @@ static void ImplDrawSymbol( OutputDevice* pDev, const Rectangle& rRect,
         break;
 
         case SYMBOL_STOP:
-            {
             nLeft = nCenterX-n2;
             nRight = nCenterX+n2;
             nTop = nCenterY-n2;
             nBottom = nCenterY+n2;
             pDev->DrawRect( Rectangle( nLeft, nTop, nRight, nBottom ) );
-            }
             break;
 
         case SYMBOL_PAUSE:
-            {
             nLeft = nCenterX-n2;
             nRight = nCenterX+n2-1;
             nTop = nCenterY-n2;
             nBottom = nCenterY+n2;
             pDev->DrawRect( Rectangle( nLeft, nTop, nCenterX-2, nBottom ) );
             pDev->DrawRect( Rectangle( nCenterX+1, nTop, nRight, nBottom ) );
-            }
             break;
 
         case SYMBOL_WINDSTART:
         case SYMBOL_WINDBACKWARD:
-            {
-            nLeft = nCenterX-n2+1;
-            nRight = nCenterX;
-            pDev->DrawRect( Rectangle( nLeft, nCenterY, nRight, nCenterY ) );
-            pDev->DrawRect( Rectangle( nLeft+n2, nCenterY, nRight+n2, nCenterY ) );
-            i = 1;
-            while ( i < n2 )
-            {
-                nLeft++;
-                nTemp = nCenterY-i;
-                pDev->DrawRect( Rectangle( nLeft, nTemp, nRight, nTemp ) );
-                pDev->DrawRect( Rectangle( nLeft+n2, nTemp, nRight+n2, nTemp ) );
-                nTemp = nCenterY+i;
-                pDev->DrawRect( Rectangle( nLeft, nTemp, nRight, nTemp ) );
-                pDev->DrawRect( Rectangle( nLeft+n2, nTemp, nRight+n2, nTemp ) );
-                i++;
-            }
+            nLeft = nCenterX-n2;
             if ( eType == SYMBOL_WINDSTART )
             {
-                pDev->DrawRect( Rectangle( nCenterX-n2, nCenterY-n2,
-                                           nCenterX-n2, nCenterY+n2 ) );
+                pDev->DrawLine( Point( nLeft, nCenterY-n2 ),
+                                Point( nLeft, nCenterY+n2 ) );
             }
+            ++nLeft;
+            nRight = nLeft+n2;
+            pDev->DrawPixel( Point( nLeft, nCenterY ) );
+            pDev->DrawPixel( Point( nRight, nCenterY ) );
+            for ( long i = 1; i < n2; ++i )
+            {
+                ++nLeft;
+                ++nRight;
+                pDev->DrawLine( Point( nLeft, nCenterY-i ),
+                                Point( nLeft, nCenterY+i ) );
+                pDev->DrawLine( Point( nRight, nCenterY-i ),
+                                Point( nRight, nCenterY+i ) );
             }
             break;
 
         case SYMBOL_WINDEND:
         case SYMBOL_WINDFORWARD:
-            {
-            nLeft = nCenterX-n2;
-            nRight = nCenterX-1;
-            pDev->DrawRect( Rectangle( nLeft, nCenterY, nRight, nCenterY ) );
-            pDev->DrawRect( Rectangle( nLeft+n2, nCenterY, nRight+n2, nCenterY ) );
-            i = 1;
-            while ( i < n2 )
-            {
-                nRight--;
-                nTemp = nCenterY-i;
-                pDev->DrawRect( Rectangle( nLeft, nTemp, nRight, nTemp ) );
-                pDev->DrawRect( Rectangle( nLeft+n2, nTemp, nRight+n2, nTemp ) );
-                nTemp = nCenterY+i;
-                pDev->DrawRect( Rectangle( nLeft, nTemp, nRight, nTemp ) );
-                pDev->DrawRect( Rectangle( nLeft+n2, nTemp, nRight+n2, nTemp ) );
-                i++;
-            }
+            nRight = nCenterX+n2;
             if ( eType == SYMBOL_WINDEND )
             {
-                pDev->DrawRect( Rectangle( nCenterX+n2, nCenterY-n2,
-                                           nCenterX+n2, nCenterY+n2 ) );
+                pDev->DrawLine( Point( nRight, nCenterY-n2 ),
+                                Point( nRight, nCenterY+n2 ) );
             }
+            --nRight;
+            nLeft = nRight-n2;
+            pDev->DrawPixel( Point( nLeft, nCenterY ) );
+            pDev->DrawPixel( Point( nRight, nCenterY ) );
+            for ( long i = 1; i < n2; ++i )
+            {
+                --nLeft;
+                --nRight;
+                pDev->DrawLine( Point( nLeft, nCenterY-i ),
+                                Point( nLeft, nCenterY+i ) );
+                pDev->DrawLine( Point( nRight, nCenterY-i ),
+                                Point( nRight, nCenterY+i ) );
             }
             break;
 
@@ -410,12 +354,10 @@ static void ImplDrawSymbol( OutputDevice* pDev, const Rectangle& rRect,
             nLeft   = nCenterX-n2+1;
             nTop    = nCenterY-n2+1;
             nBottom = nCenterY-n2+nMin-aRectSize.Width()+1;
-            i = 0;
-            while ( i < nMin-aRectSize.Width()+1 )
+            for ( long i = 0; i < nMin-aRectSize.Width()+1; ++i )
             {
                 pDev->DrawRect( Rectangle( Point( nLeft+i, nTop+i ), aRectSize ) );
                 pDev->DrawRect( Rectangle( Point( nLeft+i, nBottom-i ), aRectSize ) );
-                i++;
             }
             }
             break;
@@ -480,33 +422,22 @@ static void ImplDrawSymbol( OutputDevice* pDev, const Rectangle& rRect,
             break;
 
         case SYMBOL_SPIN_UPDOWN:
-            {
             nTop = nCenterY-n2-1;
-            nBottom = nTop+n2;
-            pDev->DrawRect( Rectangle( nCenterX, nTop, nCenterX, nBottom ) );
-            i = 1;
-            while ( i <= n2 )
+            nBottom = nCenterY+n2+1;
+            pDev->DrawPixel( Point( nCenterX, nTop ) );
+            pDev->DrawPixel( Point( nCenterX, nBottom ) );
+            nLeft = nCenterX;
+            nRight = nCenterX;
+            for ( long i = 1; i <= n2; ++i )
             {
-                nTop++;
-                nTemp = nCenterX-i;
-                pDev->DrawRect( Rectangle( nTemp, nTop, nTemp, nBottom ) );
-                nTemp = nCenterX+i;
-                pDev->DrawRect( Rectangle( nTemp, nTop, nTemp, nBottom ) );
-                i++;
-            }
-            nTop = nCenterY+1;
-            nBottom = nTop+n2;
-            pDev->DrawRect( Rectangle( nCenterX, nTop, nCenterX, nBottom ) );
-            i = 1;
-            while ( i <= n2 )
-            {
-                nBottom--;
-                nTemp = nCenterX-i;
-                pDev->DrawRect( Rectangle( nTemp, nTop, nTemp, nBottom ) );
-                nTemp = nCenterX+i;
-                pDev->DrawRect( Rectangle( nTemp, nTop, nTemp, nBottom ) );
-                i++;
-            }
+                ++nTop;
+                --nLeft;
+                --nBottom;
+                ++nRight;
+                pDev->DrawLine( Point( nLeft, nTop ),
+                                Point( nRight, nTop ) );
+                pDev->DrawLine( Point( nLeft, nBottom ),
+                                Point( nRight, nBottom ) );
             }
             break;
 
@@ -568,14 +499,12 @@ static void ImplDrawSymbol( OutputDevice* pDev, const Rectangle& rRect,
             break;
 
         case SYMBOL_PLUS:
-            {
             nLeft = nCenterX-n2;
             nRight = nCenterX+n2;
             nTop = nCenterY-n2;
             nBottom = nCenterY+n2;
             pDev->DrawRect( Rectangle( nLeft, nCenterY - 1, nRight, nCenterY + 1 ) );
             pDev->DrawRect( Rectangle( nCenterX - 1, nTop, nCenterX + 1, nBottom ) );
-            }
             break;
     }
 }


More information about the Libreoffice-commits mailing list