[PATCH] Docuview cleanup: rewritten local ImplDrawSymbol
Matteo Casalin
matteo.casalin at poste.it
Wed Nov 23 16:25:35 PST 2011
---
vcl/source/window/decoview.cxx | 615 ++++++++++++++++++----------------------
1 files changed, 271 insertions(+), 344 deletions(-)
diff --git a/vcl/source/window/decoview.cxx b/vcl/source/window/decoview.cxx
index d991a16..5f49f86 100644
--- a/vcl/source/window/decoview.cxx
+++ b/vcl/source/window/decoview.cxx
@@ -31,7 +31,6 @@
#include <vcl/settings.hxx>
#include <tools/poly.hxx>
#include <vcl/outdev.hxx>
-#include <vcl/bmpacc.hxx>
#include <vcl/decoview.hxx>
#include <vcl/window.hxx>
#include <vcl/ctrl.hxx>
@@ -45,121 +44,116 @@
// =======================================================================
-static void ImplDrawSymbol( OutputDevice* pDev, const Rectangle& rRect,
- SymbolType eType )
+namespace {
+
+long AdjustRectToSquare( Rectangle &rRect )
+{
+ const long nWidth = rRect.GetWidth();
+ const long nHeight = rRect.GetHeight();
+ long nSide = Min( nWidth, nHeight );
+
+ if ( nSide && !(nSide & 1) )
+ {
+ // we prefer an odd size
+ --nSide;
+ }
+
+ // Make the rectangle a square
+ rRect.SetSize( Size( nSide, nSide ) );
+
+ // and place it at the center of the original rectangle
+ rRect.Move( (nWidth-nSide)/2, (nHeight-nSide)/2 );
+
+ return nSide;
+}
+
+void ImplDrawSymbol( OutputDevice* pDev, Rectangle nRect, const SymbolType eType )
{
- // Groessen vorberechnen
- long nMin = Min( rRect.GetWidth(), rRect.GetHeight() );
- Point aCenter = rRect.Center();
- long nCenterX = aCenter.X();
- long nCenterY = aCenter.Y();
- long n2 = nMin / 2;
- long n4 = nMin / 4;
- long nLeft;
- long nTop;
- long nRight;
- long nBottom;
-
- const bool bMinSideIsOdd = nMin & 1;
+ const long nSide = AdjustRectToSquare( nRect );
+
+ if ( !nSide ) return;
+ if ( nSide==1 )
+ {
+ pDev->DrawPixel( Point( nRect.Left(), nRect.Top() ) );
+ return;
+ }
+
+ // Precalculate some values
+ const long n2 = nSide/2;
+ const long n4 = (n2+1)/2;
+ const long n8 = (n4+1)/2;
+ const Point aCenter = nRect.Center();
switch ( eType )
{
case SYMBOL_ARROW_UP:
- if ( bMinSideIsOdd )
- {
- // Make odd size for spearhead
- n4 = --n2 / 2;
- }
- nTop = nCenterY-n2;
- pDev->DrawPixel( Point( nCenterX, nTop ) );
- for ( long i = 1; i <= n2; ++i )
+ pDev->DrawPixel( Point( aCenter.X(), nRect.Top() ) );
+ for ( long i=1; i <= n2; ++i )
{
- nTop++;
- pDev->DrawRect( Rectangle (Point( nCenterX-i, nTop ),
- Point( nCenterX+i, nTop ) ) );
+ ++nRect.Top();
+ pDev->DrawLine( Point( aCenter.X()-i, nRect.Top() ),
+ Point( aCenter.X()+i, nRect.Top() ) );
}
- pDev->DrawRect( Rectangle( nCenterX-n4, nCenterY,
- nCenterX+n4, nCenterY+n2 ) );
+ pDev->DrawRect( Rectangle( aCenter.X()-n8, nRect.Top()+1,
+ aCenter.X()+n8, nRect.Bottom() ) );
break;
case SYMBOL_ARROW_DOWN:
- if ( bMinSideIsOdd )
+ pDev->DrawPixel( Point( aCenter.X(), nRect.Bottom() ) );
+ for ( long i=1; i <= n2; ++i )
{
- // Make odd size for spearhead
- n4 = --n2 / 2;
+ --nRect.Bottom();
+ pDev->DrawLine( Point( aCenter.X()-i, nRect.Bottom() ),
+ Point( aCenter.X()+i, nRect.Bottom() ) );
}
- nBottom = nCenterY+n2;
- pDev->DrawPixel( Point( nCenterX, nBottom ) );
- for ( long i = 1; i <= n2; ++i )
- {
- nBottom--;
- pDev->DrawLine( Point( nCenterX-i, nBottom ),
- Point( nCenterX+i, nBottom ) );
- }
- pDev->DrawRect( Rectangle( nCenterX-n4, nCenterY-n2,
- nCenterX+n4, nCenterY ) );
+ pDev->DrawRect( Rectangle( aCenter.X()-n8, nRect.Top(),
+ aCenter.X()+n8, nRect.Bottom()-1 ) );
break;
case SYMBOL_ARROW_LEFT:
- if ( bMinSideIsOdd )
- {
- // Make odd size for spearhead
- n4 = --n2 / 2;
- }
- nLeft = nCenterX-n2;
- pDev->DrawPixel( Point( nLeft, nCenterY ) );
- for ( long i = 1; i <= n2; ++i )
+ pDev->DrawPixel( Point( nRect.Left(), aCenter.Y() ) );
+ for ( long i=1; i <= n2; ++i )
{
- nLeft++;
- pDev->DrawLine( Point( nLeft, nCenterY-i ),
- Point( nLeft, nCenterY+i ) );
+ ++nRect.Left();
+ pDev->DrawLine( Point( nRect.Left(), aCenter.Y()-i ),
+ Point( nRect.Left(), aCenter.Y()+i ) );
}
- pDev->DrawRect( Rectangle( nCenterX, nCenterY-n4,
- nCenterX+n2, nCenterY+n4 ) );
+ pDev->DrawRect( Rectangle( nRect.Left()+1, aCenter.Y()-n8,
+ nRect.Right(), aCenter.Y()+n8 ) );
break;
case SYMBOL_ARROW_RIGHT:
- if ( bMinSideIsOdd )
+ pDev->DrawPixel( Point( nRect.Right(), aCenter.Y() ) );
+ for ( long i=1; i <= n2; ++i )
{
- // Make odd size for spearhead
- n4 = --n2 / 2;
+ --nRect.Right();
+ pDev->DrawLine( Point( nRect.Right(), aCenter.Y()-i ),
+ Point( nRect.Right(), aCenter.Y()+i ) );
}
- nRight = nCenterX+n2;
- pDev->DrawPixel( Point( nRight, nCenterY ) );
- for ( long i = 1; i <= n2; ++i )
- {
- nRight--;
- pDev->DrawLine( Point( nRight, nCenterY-i ),
- Point( nRight, nCenterY+i ) );
- }
- pDev->DrawRect( Rectangle( nCenterX-n2, nCenterY-n4,
- nCenterX, nCenterY+n4 ) );
+ pDev->DrawRect( Rectangle( nRect.Left(), aCenter.Y()-n8,
+ nRect.Right()-1, aCenter.Y()+n8 ) );
break;
case SYMBOL_SPIN_UP:
- if ( bMinSideIsOdd )
- n2--;
- nTop = nCenterY-n4;
- pDev->DrawPixel( Point( nCenterX, nTop ) );
- for ( long i = 1; i <= n2; ++i )
+ nRect.Top() += n4;
+ pDev->DrawPixel( Point( aCenter.X(), nRect.Top() ) );
+ for ( long i=1; i <= n2; ++i )
{
- nTop++;
- pDev->DrawLine( Point( nCenterX-i, nTop ),
- Point( nCenterX+i, nTop ) );
+ ++nRect.Top();
+ pDev->DrawLine( Point( aCenter.X()-i, nRect.Top() ),
+ Point( aCenter.X()+i, nRect.Top() ) );
}
break;
case SYMBOL_SPIN_DOWN:
- if ( bMinSideIsOdd )
- n2--;
- nBottom = nCenterY+n4;
- pDev->DrawPixel( Point( nCenterX, nBottom ) );
- for ( long i = 1; i <= n2; ++i )
+ nRect.Bottom() -= n4;
+ pDev->DrawPixel( Point( aCenter.X(), nRect.Bottom() ) );
+ for ( long i=1; i <= n2; ++i )
{
- nBottom--;
- pDev->DrawLine( Point( nCenterX-i, nBottom ),
- Point( nCenterX+i, nBottom ) );
+ --nRect.Bottom();
+ pDev->DrawLine( Point( aCenter.X()-i, nRect.Bottom() ),
+ Point( aCenter.X()+i, nRect.Bottom() ) );
}
break;
@@ -167,21 +161,19 @@ static void ImplDrawSymbol( OutputDevice* pDev, const Rectangle& rRect,
case SYMBOL_FIRST:
case SYMBOL_PREV:
case SYMBOL_REVERSEPLAY:
- if ( bMinSideIsOdd )
- n2--;
- nLeft = nCenterX-n4;
- if ( eType == SYMBOL_FIRST )
+ nRect.Left() += n4;
+ if ( eType==SYMBOL_FIRST )
{
- pDev->DrawLine( Point( nLeft-1, nCenterY-n2 ),
- Point( nLeft-1, nCenterY+n2 ) );
- nLeft++;
+ pDev->DrawLine( Point( nRect.Left(), nRect.Top() ),
+ Point( nRect.Left(), nRect.Bottom() ) );
+ ++nRect.Left();
}
- pDev->DrawPixel( Point( nLeft, nCenterY ) );
- for ( long i = 1; i <= n2; ++i )
+ pDev->DrawPixel( Point( nRect.Left(), aCenter.Y() ) );
+ for ( long i=1; i <= n2; ++i )
{
- nLeft++;
- pDev->DrawLine( Point( nLeft, nCenterY-i ),
- Point( nLeft, nCenterY+i ) );
+ ++nRect.Left();
+ pDev->DrawLine( Point( nRect.Left(), aCenter.Y()-i ),
+ Point( nRect.Left(), aCenter.Y()+i ) );
}
break;
@@ -189,326 +181,261 @@ static void ImplDrawSymbol( OutputDevice* pDev, const Rectangle& rRect,
case SYMBOL_LAST:
case SYMBOL_NEXT:
case SYMBOL_PLAY:
- if ( bMinSideIsOdd )
- n2--;
- nRight = nCenterX+n4;
- if ( eType == SYMBOL_LAST )
+ nRect.Right() -= n4;
+ if ( eType==SYMBOL_LAST )
{
- pDev->DrawLine( Point( nRight+1, nCenterY-n2 ),
- Point( nRight+1, nCenterY+n2 ) );
- nRight--;
+ pDev->DrawLine( Point( nRect.Right(), nRect.Top() ),
+ Point( nRect.Right(), nRect.Bottom() ) );
+ --nRect.Right();
}
- pDev->DrawPixel( Point( nRight, nCenterY ) );
- for ( long i = 1; i <= n2; ++i )
+ pDev->DrawPixel( Point( nRect.Right(), aCenter.Y() ) );
+ for ( long i=1; i <= n2; ++i )
{
- nRight--;
- pDev->DrawLine( Point( nRight, nCenterY-i ),
- Point( nRight, nCenterY+i ) );
+ --nRect.Right();
+ pDev->DrawLine( Point( nRect.Right(), aCenter.Y()-i ),
+ Point( nRect.Right(), aCenter.Y()+i ) );
}
break;
case SYMBOL_PAGEUP:
- 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++;
- n4 = --n2 / 2;
- }
-
- nTop = nCenterY-n2;
- nBottom = nCenterY+1;
- pDev->DrawPixel( Point( nCenterX, nTop ) );
- pDev->DrawPixel( Point( nCenterX, nBottom ) );
- for ( long i = 1; i < n2; ++i )
+ pDev->DrawPixel( Point( aCenter.X(), nRect.Top() ) );
+ pDev->DrawPixel( Point( aCenter.X(), nRect.Top()+n2 ) );
+ 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 ) );
+ ++nRect.Top();
+ pDev->DrawLine( Point( aCenter.X()-i, nRect.Top() ),
+ Point( aCenter.X()+i, nRect.Top() ) );
+ pDev->DrawLine( Point( aCenter.X()-i, nRect.Top()+n2 ),
+ Point( aCenter.X()+i, nRect.Top()+n2 ) );
}
break;
case SYMBOL_PAGEDOWN:
- 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++;
- n4 = --n2 / 2;
- }
-
- nTop = nCenterY-1;
- nBottom = nCenterY+n2;
- pDev->DrawPixel( Point( nCenterX, nTop ) );
- pDev->DrawPixel( Point( nCenterX, nBottom ) );
- for ( long i = 1; i < n2; ++i )
+ pDev->DrawPixel( Point( aCenter.X(), nRect.Bottom() ) );
+ pDev->DrawPixel( Point( aCenter.X(), nRect.Bottom()-n2 ) );
+ 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 ) );
+ --nRect.Bottom();
+ pDev->DrawLine( Point( aCenter.X()-i, nRect.Bottom() ),
+ Point( aCenter.X()+i, nRect.Bottom() ) );
+ pDev->DrawLine( Point( aCenter.X()-i, nRect.Bottom()-n2 ),
+ Point( aCenter.X()+i, nRect.Bottom()-n2 ) );
}
break;
case SYMBOL_RADIOCHECKMARK:
case SYMBOL_RECORD:
- {
- const long nExt = ( n2 << 1 ) + 1;
- Bitmap aBmp( Size( nExt, nExt ), 1 );
- BitmapWriteAccess* pWAcc = aBmp.AcquireWriteAccess();
-
- if( pWAcc )
{
- const Color aWhite( COL_WHITE );
- const Color aBlack( COL_BLACK );
-
- pWAcc->Erase( aWhite );
- pWAcc->SetLineColor( aBlack );
- pWAcc->SetFillColor( aBlack );
- pWAcc->DrawPolygon( Polygon( Point( n2, n2 ), n2, n2 ) );
- aBmp.ReleaseAccess( pWAcc );
- pDev->DrawMask( Point( nCenterX - n2, nCenterY - n2 ), aBmp, pDev->GetFillColor() );
+ // Midpoint circle algorithm
+ long x = 0;
+ long y = n2;
+ long p = 1 - n2;
+ // Draw central line
+ pDev->DrawLine( Point( aCenter.X(), aCenter.Y()-y ),
+ Point( aCenter.X(), aCenter.Y()+y ) );
+ while ( x<y )
+ {
+ if ( p>=0 )
+ {
+ // Draw vertical lines close to sides
+ pDev->DrawLine( Point( aCenter.X()+y, aCenter.Y()-x ),
+ Point( aCenter.X()+y, aCenter.Y()+x ) );
+ pDev->DrawLine( Point( aCenter.X()-y, aCenter.Y()-x ),
+ Point( aCenter.X()-y, aCenter.Y()+x ) );
+ --y;
+ p -= 2*y;
+ }
+ ++x;
+ p += 2*x+1;
+ // Draw vertical lines close to center
+ pDev->DrawLine( Point( aCenter.X()-x, aCenter.Y()-y ),
+ Point( aCenter.X()-x, aCenter.Y()+y ) );
+ pDev->DrawLine( Point( aCenter.X()+x, aCenter.Y()-y ),
+ Point( aCenter.X()+x, aCenter.Y()+y ) );
+ }
}
- else
- pDev->DrawPolygon( Polygon( Point( nCenterX, nCenterY ), n2, n2 ) );
- }
- break;
+ break;
case SYMBOL_STOP:
- nLeft = nCenterX-n2;
- nRight = nCenterX+n2;
- nTop = nCenterY-n2;
- nBottom = nCenterY+n2;
- pDev->DrawRect( Rectangle( nLeft, nTop, nRight, nBottom ) );
+ pDev->DrawRect( nRect );
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 ) );
+ pDev->DrawRect( Rectangle ( nRect.Left(), nRect.Top(),
+ aCenter.X()-n8, nRect.Bottom() ) );
+ pDev->DrawRect( Rectangle ( aCenter.X()+n8, nRect.Top(),
+ nRect.Right(), nRect.Bottom() ) );
break;
case SYMBOL_WINDSTART:
+ pDev->DrawLine( Point( nRect.Left(), aCenter.Y()-n2+1 ),
+ Point( nRect.Left(), aCenter.Y()+n2-1 ) );
+ ++nRect.Left();
+ // Intentional fall-through
case SYMBOL_WINDBACKWARD:
- nLeft = nCenterX-n2;
- if ( eType == SYMBOL_WINDSTART )
- {
- 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 )
+ pDev->DrawPixel( Point( nRect.Left(), aCenter.Y() ) );
+ pDev->DrawPixel( Point( nRect.Left()+n2, aCenter.Y() ) );
+ 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 ) );
+ ++nRect.Left();
+ pDev->DrawLine( Point( nRect.Left(), aCenter.Y()-i ),
+ Point( nRect.Left(), aCenter.Y()+i ) );
+ pDev->DrawLine( Point( nRect.Left()+n2, aCenter.Y()-i ),
+ Point( nRect.Left()+n2, aCenter.Y()+i ) );
}
break;
case SYMBOL_WINDEND:
+ pDev->DrawLine( Point( nRect.Right(), aCenter.Y()-n2+1 ),
+ Point( nRect.Right(), aCenter.Y()+n2-1 ) );
+ --nRect.Right();
+ // Intentional fall-through
case SYMBOL_WINDFORWARD:
- nRight = nCenterX+n2;
- if ( eType == SYMBOL_WINDEND )
- {
- 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 )
+ pDev->DrawPixel( Point( nRect.Right(), aCenter.Y() ) );
+ pDev->DrawPixel( Point( nRect.Right()-n2, aCenter.Y() ) );
+ 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 ) );
+ --nRect.Right();
+ pDev->DrawLine( Point( nRect.Right(), aCenter.Y()-i ),
+ Point( nRect.Right(), aCenter.Y()+i ) );
+ pDev->DrawLine( Point( nRect.Right()-n2, aCenter.Y()-i ),
+ Point( nRect.Right()-n2, aCenter.Y()+i ) );
}
break;
case SYMBOL_CLOSE:
+ pDev->DrawLine( Point( nRect.Left(), nRect.Top() ),
+ Point( nRect.Right(), nRect.Bottom() ) );
+ pDev->DrawLine( Point( nRect.Left(), nRect.Bottom() ),
+ Point( nRect.Right(), nRect.Top() ) );
+ for ( long i=1; i<n8; ++i )
{
- Size aRectSize( 2, 1 );
- if ( nMin < 8 )
- aRectSize.Width() = 1;
- else if ( nMin > 20 )
- aRectSize.Width() = nMin/10;
- nLeft = nCenterX-n2+1;
- nTop = nCenterY-n2+1;
- nBottom = nCenterY-n2+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 ) );
- }
+ pDev->DrawLine( Point( nRect.Left()+i, nRect.Top() ),
+ Point( nRect.Right(), nRect.Bottom()-i ) );
+ pDev->DrawLine( Point( nRect.Left(), nRect.Top()+i ),
+ Point( nRect.Right()-i, nRect.Bottom() ) );
+ pDev->DrawLine( Point( nRect.Left()+i, nRect.Bottom() ),
+ Point( nRect.Right(), nRect.Top()+i ) );
+ pDev->DrawLine( Point( nRect.Left(), nRect.Bottom()-i ),
+ Point( nRect.Right()-i, nRect.Top() ) );
}
break;
- case SYMBOL_ROLLUP:
case SYMBOL_ROLLDOWN:
- {
- Rectangle aRect( nCenterX-n2, nCenterY-n2,
- nCenterX+n2, nCenterY-n2+1 );
- pDev->DrawRect( aRect );
- if ( eType == SYMBOL_ROLLDOWN )
- {
- Rectangle aTempRect = aRect;
- aTempRect.Bottom() = nCenterY+n2;
- aTempRect.Right() = aRect.Left();
- pDev->DrawRect( aTempRect );
- aTempRect.Left() = aRect.Right();
- aTempRect.Right() = aRect.Right();
- pDev->DrawRect( aTempRect );
- aTempRect.Top() = aTempRect.Bottom();
- aTempRect.Left() = aRect.Left();
- pDev->DrawRect( aTempRect );
- }
- }
+ pDev->DrawLine( Point( nRect.Left(), nRect.Top() ),
+ Point( nRect.Left(), nRect.Bottom() ) );
+ pDev->DrawLine( Point( nRect.Right(), nRect.Top() ),
+ Point( nRect.Right(), nRect.Bottom() ) );
+ pDev->DrawLine( Point( nRect.Left(), nRect.Bottom() ),
+ Point( nRect.Right(), nRect.Bottom() ) );
+ // Intentional fall-through
+ case SYMBOL_ROLLUP:
+ pDev->DrawRect( Rectangle( nRect.Left(), nRect.Top(),
+ nRect.Right(), nRect.Top()+n8 ) );
break;
+
case SYMBOL_CHECKMARK:
{
+ long n3 = nSide/3;
+ nRect.Top() -= n3/2;
+ nRect.Bottom() -= n3/2;
// #106953# never mirror checkmarks
- sal_Bool bRTL = pDev->ImplHasMirroredGraphics() && pDev->IsRTLEnabled();
- Point aPos1( bRTL ? rRect.Right() : rRect.Left(),
- rRect.Bottom() - rRect.GetHeight() / 3 );
- Point aPos2( bRTL ? rRect.Right() - rRect.GetWidth()/3 : rRect.Left() + rRect.GetWidth()/3,
- rRect.Bottom() );
- Point aPos3( bRTL ? rRect.TopLeft() : rRect.TopRight() );
- Size aRectSize( 1, 2 );
- long nStepsY = aPos2.Y()-aPos1.Y();
- long nX = aPos1.X();
- long nY = aPos1.Y();
- long n;
- for ( n = 0; n <= nStepsY; n++ )
+ if ( pDev->ImplHasMirroredGraphics() && pDev->IsRTLEnabled() )
{
- if( bRTL )
- nX--;
- pDev->DrawRect( Rectangle( Point( nX, nY++ ), aRectSize ) );
- if( !bRTL )
- nX++;
+ pDev->DrawLine( Point( nRect.Right(), nRect.Bottom()-n3 ),
+ Point( nRect.Right()-n3, nRect.Bottom() ) );
+ pDev->DrawLine( Point( nRect.Right()-n3, nRect.Bottom() ),
+ Point( nRect.Left(), nRect.Top()+n3 ) );
+ ++nRect.Top();
+ ++nRect.Bottom();
+ pDev->DrawLine( Point( nRect.Right(), nRect.Bottom()-n3 ),
+ Point( nRect.Right()-n3, nRect.Bottom() ) );
+ pDev->DrawLine( Point( nRect.Right()-n3, nRect.Bottom() ),
+ Point( nRect.Left(), nRect.Top()+n3 ) );
}
- nStepsY = aPos2.Y()-aPos3.Y();
- nX = aPos2.X();
- nY = aPos2.Y();
- for ( n = 0; n <= nStepsY; n++ )
+ else
{
- if( bRTL )
- if ( --nX < rRect.Left() )
- break;
- pDev->DrawRect( Rectangle( Point( nX, nY-- ), aRectSize ) );
- if( !bRTL )
- if ( ++nX > rRect.Right() )
- break;
+ pDev->DrawLine( Point( nRect.Left(), nRect.Bottom()-n3 ),
+ Point( nRect.Left()+n3, nRect.Bottom() ) );
+ pDev->DrawLine( Point( nRect.Left()+n3, nRect.Bottom() ),
+ Point( nRect.Right(), nRect.Top()+n3 ) );
+ ++nRect.Top();
+ ++nRect.Bottom();
+ pDev->DrawLine( Point( nRect.Left(), nRect.Bottom()-n3 ),
+ Point( nRect.Left()+n3, nRect.Bottom() ) );
+ pDev->DrawLine( Point( nRect.Left()+n3, nRect.Bottom() ),
+ Point( nRect.Right(), nRect.Top()+n3 ) );
}
}
break;
case SYMBOL_SPIN_UPDOWN:
- nTop = nCenterY-n2-1;
- 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 )
+ pDev->DrawPixel( Point( aCenter.X(), nRect.Top() ) );
+ pDev->DrawPixel( Point( aCenter.X(), nRect.Bottom() ) );
+ for ( long i=1; i < n2; ++i )
{
- ++nTop;
- --nLeft;
- --nBottom;
- ++nRight;
- pDev->DrawLine( Point( nLeft, nTop ),
- Point( nRight, nTop ) );
- pDev->DrawLine( Point( nLeft, nBottom ),
- Point( nRight, nBottom ) );
+ ++nRect.Top();
+ --nRect.Bottom();
+ pDev->DrawLine( Point( aCenter.X()-i, nRect.Top() ),
+ Point( aCenter.X()+i, nRect.Top() ) );
+ pDev->DrawLine( Point( aCenter.X()-i, nRect.Bottom() ),
+ Point( aCenter.X()+i, nRect.Bottom() ) );
}
break;
-
case SYMBOL_FLOAT:
- {
- Rectangle aRect( nCenterX-n2, nCenterY-n2+3,
- nCenterX+n2-2, nCenterY-n2+4 );
- pDev->DrawRect( aRect );
- Rectangle aTempRect = aRect;
- aTempRect.Bottom() = nCenterY+n2;
- aTempRect.Right() = aRect.Left();
- pDev->DrawRect( aTempRect );
- aTempRect.Left() = aRect.Right();
- aTempRect.Right() = aRect.Right();
- pDev->DrawRect( aTempRect );
- aTempRect.Top() = aTempRect.Bottom();
- aTempRect.Left() = aRect.Left();
- pDev->DrawRect( aTempRect );
- aRect = Rectangle( nCenterX-n2+2, nCenterY-n2,
- nCenterX+n2, nCenterY-n2+1 );
- pDev->DrawRect( aRect );
- aTempRect = aRect;
- aTempRect.Bottom() = nCenterY+n2-3;
- aTempRect.Right() = aRect.Left();
- pDev->DrawRect( aTempRect );
- aTempRect.Left() = aRect.Right();
- aTempRect.Right() = aRect.Right();
- pDev->DrawRect( aTempRect );
- aTempRect.Top() = aTempRect.Bottom();
- aTempRect.Left() = aRect.Left();
- pDev->DrawRect( aTempRect );
- }
+ nRect.Right() -= n4;
+ nRect.Top() += n4+1;
+ pDev->DrawRect( Rectangle( nRect.Left(), nRect.Top(),
+ nRect.Right(), nRect.Top()+n8 ) );
+ pDev->DrawLine( Point( nRect.Left(), nRect.Top()+n8 ),
+ Point( nRect.Left(), nRect.Bottom() ) );
+ pDev->DrawLine( Point( nRect.Left(), nRect.Bottom() ),
+ Point( nRect.Right(), nRect.Bottom() ) );
+ pDev->DrawLine( Point( nRect.Right(), nRect.Top()+n8 ),
+ Point( nRect.Right(), nRect.Bottom() ) );
+ nRect.Right() += n4;
+ nRect.Top() -= n4+1;
+ nRect.Left() += n4;
+ nRect.Bottom() -= n4+1;
+ pDev->DrawRect( Rectangle( nRect.Left(), nRect.Top(),
+ nRect.Right(), nRect.Top()+n8 ) );
+ pDev->DrawLine( Point( nRect.Left(), nRect.Top()+n8 ),
+ Point( nRect.Left(), nRect.Bottom() ) );
+ pDev->DrawLine( Point( nRect.Left(), nRect.Bottom() ),
+ Point( nRect.Right(), nRect.Bottom() ) );
+ pDev->DrawLine( Point( nRect.Right(), nRect.Top()+n8 ),
+ Point( nRect.Right(), nRect.Bottom() ) );
break;
+
case SYMBOL_DOCK:
- {
- Rectangle aRect( nCenterX-n2, nCenterY-n2,
- nCenterX+n2, nCenterY-n2 );
- pDev->DrawRect( aRect );
- Rectangle aTempRect = aRect;
- aTempRect.Bottom() = nCenterY+n2;
- aTempRect.Right() = aRect.Left();
- pDev->DrawRect( aTempRect );
- aTempRect.Left() = aRect.Right();
- aTempRect.Right() = aRect.Right();
- pDev->DrawRect( aTempRect );
- aTempRect.Top() = aTempRect.Bottom();
- aTempRect.Left() = aRect.Left();
- pDev->DrawRect( aTempRect );
- }
+ pDev->DrawLine( Point( nRect.Left(), nRect.Top() ),
+ Point( nRect.Right(), nRect.Top() ) );
+ pDev->DrawLine( Point( nRect.Left(), nRect.Top() ),
+ Point( nRect.Left(), nRect.Bottom() ) );
+ pDev->DrawLine( Point( nRect.Left(), nRect.Bottom() ),
+ Point( nRect.Right(), nRect.Bottom() ) );
+ pDev->DrawLine( Point( nRect.Right(), nRect.Top() ),
+ Point( nRect.Right(), nRect.Bottom() ) );
break;
+
case SYMBOL_HIDE:
- {
- long nExtra = nMin / 8;
- Rectangle aRect( nCenterX-n2+nExtra, nCenterY+n2-1,
- nCenterX+n2-nExtra, nCenterY+n2 );
- pDev->DrawRect( aRect );
- }
+ pDev->DrawRect( Rectangle( nRect.Left()+n8, nRect.Bottom()-n8,
+ nRect.Right()-n8, nRect.Bottom() ) );
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 ) );
+ pDev->DrawRect( Rectangle( nRect.Left(), aCenter.Y()-n8,
+ nRect.Right(), aCenter.Y()+n8 ) );
+ pDev->DrawRect( Rectangle( aCenter.X()-n8, nRect.Top(),
+ aCenter.X()+n8, nRect.Bottom() ) );
break;
}
}
+}
+
+
// -----------------------------------------------------------------------
void DecorationView::DrawSymbol( const Rectangle& rRect, SymbolType eType,
--
1.7.5.4
--------------020009080805070101060609--
More information about the LibreOffice
mailing list