home *** CD-ROM | disk | FTP | other *** search
- /*******************************************************************
- * MAPMODE.CXX
- * (c) 1992-1994 STAR DIVISION
- *******************************************************************/
-
- #include <sv.hxx>
-
- // --- class MyApp -------------------------------------------------
-
- class MyApp : public Application
- {
- public:
- virtual void Main( int, char*[] );
- };
-
- // --- class PaintWindow -------------------------------------------
-
- class PaintWindow : public WorkWindow
- {
- protected:
- AutoTimer aTimer;
- short a;
- short x;
- short y;
- short t;
- BOOL bOpen;
- BOOL bMapModeChanged;
-
- public:
- PaintWindow();
-
- virtual void Paint( const Rectangle& );
- virtual void Resize();
- virtual void MouseButtonDown(const MouseEvent &);
-
- void PacMan( AutoTimer* );
- };
-
- // --- PaintWindow::PaintWindow() ----------------------------------
-
- PaintWindow::PaintWindow() :
- WorkWindow( NULL, WB_APP | WB_STDWORK )
- {
- aTimer.ChangeTimeout( 20 );
- aTimer.ChangeTimeoutHdl( LINK( this, PaintWindow, PacMan ) );
- aTimer.Start();
-
- t = 0;
- bOpen = TRUE;
- bMapModeChanged = FALSE;
-
- SetText( "MapMode" );
- Show();
- }
-
- // --- PaintWindow::Paint() ----------------------------------------
-
- void PaintWindow::Paint( const Rectangle& )
- {
- Point aPointArray[4];
-
- MapMode aOldMode = ChangeMapMode( MapMode() );
- DrawText( Point( 0, 0 ), "Press a MouseButton" );
- ChangeMapMode( aOldMode );
-
- ChangePen( Pen( Color( COL_BLACK ), 0 ) );
- ChangeFillInBrush( Brush( Color( COL_GREEN ) ) );
- DrawRect( Rectangle( Point( x/8, y/8 ),
- Size( x/4, y/4 ) ), 10, 10 );
-
- ChangePen( Pen( Color( COL_BLUE ), 3 ) );
- DrawArc( Rectangle( Point( 0, 0 ), Point( x-x/8, y-y/8 ) ),
- Point( x/2, y ), Point( x, y/2 ) );
-
- ChangePen( Pen( Color( COL_CYAN ), 2 ) );
- aPointArray[0] = Point( x/2, y/2 );
- aPointArray[1] = Point( 3*x/4, y );
- aPointArray[2] = Point( x, 3*y/4 );
- aPointArray[3] = Point( x/3, 4*y/5 );
- DrawPolyLine( Polygon( 4, aPointArray ) );
-
- ChangePen( Pen( Color( COL_LIGHTGREEN ), 1, PEN_DASH ) );
- aPointArray[0] = Point( x/2, y/2-y/10 );
- aPointArray[1] = Point( 3*x/4, y-y/10 );
- aPointArray[2] = Point( x, 3*y/4-y/10 );
- aPointArray[3] = Point( x/3, 4*y/5-y/10 );
- DrawPolyLine( Polygon( 4, aPointArray ) );
-
- Pen aNullPen( PEN_NULL );
- ChangePen( aNullPen );
- ChangeFillInBrush( Brush( Color( COL_BLACK ),
- Color( COL_WHITE ),
- BRUSH_VERT ) );
- DrawRect( Rectangle( Point( 3*x/4, y/6 ), Size( x/5, y/5 ) ) );
-
- ChangeFillInBrush( Brush( Color( COL_LIGHTMAGENTA ),
- BRUSH_DIAGCROSS ) );
- DrawEllipse( Rectangle( Point( 3*x/4, y/6 ),
- Size( x/4, y/4 ) ) );
-
- ChangePen( Pen( Color( COL_BLACK ), 1 ) );
- ChangeFillInBrush( Brush( Color( COL_MAGENTA ) ) );
- aPointArray[0] = Point( x/8, y/2 );
- aPointArray[1] = Point( x/3, 2*y/3 );
- aPointArray[2] = Point( 1, y-1 ) ;
- DrawPolygon( Polygon( 3, aPointArray ) );
-
- ChangePen( Pen( Color( COL_BLACK ), 2 ) );
- ChangeFillInBrush( Brush( Color( COL_RED ), BRUSH_CROSS ) );
- DrawEllipse( Rectangle( Point( x/2, y/3),
- Point( x/2+x/5, y/2 ) ) );
-
- Brush aNullBrush( BRUSH_NULL );
- ChangeFillInBrush( aNullBrush );
- DrawEllipse( Rectangle( Point( x/2, y-y/3),
- Point( x/2+x/5, y-y/4 ) ) );
- }
-
- // --- PaintWindow::Resize() ---------------------------------------
-
- void PaintWindow::Resize()
- {
- x = GetOutputSizePixel().Width();
- y = GetOutputSizePixel().Height();
- if ( x > y )
- a = y;
- else
- a = x;
-
- if ( bMapModeChanged )
- {
- MapMode aMode = GetMapMode();
- aMode.ChangeOrigin( Point( x*-1, y*-1 ) );
- ChangeMapMode( aMode );
- }
-
- Invalidate();
- }
-
- // --- PaintWindow::MouseButtonDown() ------------------------------
-
- void PaintWindow::MouseButtonDown( const MouseEvent& )
- {
- MapMode aMapMode( MAP_PIXEL,
- Point( GetOutputSizePixel().Width()*-1,
- GetOutputSizePixel().Height()*-1 ),
- Fraction( -1, 1 ), Fraction( -1, 1 ) );
-
- if ( bMapModeChanged )
- ChangeMapMode( MapMode() );
- else
- ChangeMapMode( aMapMode );
- bMapModeChanged = !bMapModeChanged;
-
- Invalidate();
- }
-
-
- // --- PaintWindow::PacMan() ---------------------------------------
-
- void PaintWindow::PacMan( AutoTimer* )
- {
- const short nStep=10;
-
- if ( bOpen && (t < a/10) )
- t+=nStep;
- else if ( bOpen && (t >= a/10) )
- bOpen = FALSE;
- if ( !bOpen && (t > 1) )
- {
- t-=nStep;
- if ( t <= 1 )
- {
- t=1;
- bOpen = TRUE;
- }
- }
- else if ( !bOpen && ( t <= 1 ) )
- bOpen = TRUE;
-
- ChangePen( Pen( Color( COL_WHITE ), 0 ) );
- ChangeFillInBrush( Brush( Color( COL_WHITE ) ) );
- DrawPie( Rectangle( Point( x/2-a/12, y/2-a/12 ),
- Size( a/6, a/6 ) ),
- Point( x/2+a/12, y/2+t ),
- Point( x/2+a/12, y/2-t ) );
-
- ChangeFillInBrush( Brush( Color( COL_YELLOW ) ) );
- DrawPie( Rectangle( Point( x/2-a/12, y/2-a/12 ),
- Size( a/6, a/6 ) ),
- Point( x/2+a/12, y/2-t ),
- Point( x/2+a/12, y/2+t ) );
-
- ChangePen( Pen( Color( COL_BLACK ), 0 ) );
- ChangeFillInBrush( Brush( Color( COL_BLACK ) ) );
- DrawEllipse( Rectangle( Point( x/2+a/48, y/2-a/16 ),
- Size( 5, 5 ) ) );
- }
-
- // --- MyApp::Main() -----------------------------------------------
-
- void MyApp::Main( int, char*[] )
- {
- PaintWindow aWindow;
- Execute();
- }
-
- // --- aMyApp ------------------------------------------------------
-
- MyApp aMyApp;
-