home *** CD-ROM | disk | FTP | other *** search
/ PC Direkt 1995 March / PCD_395.iso / starview / pm2csci / german / mapmode.cx_ / MAPMODE.CXX
Encoding:
C/C++ Source or Header  |  1994-01-18  |  6.1 KB  |  211 lines

  1. /*******************************************************************
  2. *  MAPMODE.CXX
  3. *  (c) 1992-1994 STAR DIVISION
  4. *******************************************************************/
  5.  
  6. #include <sv.hxx>
  7.  
  8. // --- class MyApp -------------------------------------------------
  9.  
  10. class MyApp : public Application
  11. {
  12. public:
  13.     virtual void Main( int, char*[] );
  14. };
  15.  
  16. // --- class PaintWindow -------------------------------------------
  17.  
  18. class PaintWindow : public WorkWindow
  19. {
  20. protected:
  21.     AutoTimer       aTimer;
  22.     short           a;
  23.     short           x;
  24.     short           y;
  25.     short           t;
  26.     BOOL            bOpen;
  27.     BOOL            bMapModeChanged;
  28.  
  29. public:
  30.                     PaintWindow();
  31.  
  32.     virtual void    Paint( const Rectangle& );
  33.     virtual void    Resize();
  34.     virtual void    MouseButtonDown(const MouseEvent &);
  35.  
  36.     void            PacMan( AutoTimer* );
  37. };
  38.  
  39. // --- PaintWindow::PaintWindow() ----------------------------------
  40.  
  41. PaintWindow::PaintWindow() :
  42.                  WorkWindow( NULL, WB_APP | WB_STDWORK )
  43. {
  44.     aTimer.ChangeTimeout( 20 );
  45.     aTimer.ChangeTimeoutHdl( LINK( this, PaintWindow, PacMan ) );
  46.     aTimer.Start();
  47.  
  48.     t = 0;
  49.     bOpen = TRUE;
  50.     bMapModeChanged = FALSE;
  51.  
  52.     SetText( "MapMode" );
  53.     Show();
  54. }
  55.  
  56. // --- PaintWindow::Paint() ----------------------------------------
  57.  
  58. void PaintWindow::Paint( const Rectangle& )
  59. {
  60.     Point aPointArray[4];
  61.  
  62.     MapMode aOldMode = ChangeMapMode( MapMode() );
  63.     DrawText( Point( 0, 0 ), "Press a MouseButton" );
  64.     ChangeMapMode( aOldMode );
  65.  
  66.     ChangePen( Pen( Color( COL_BLACK ), 0 ) );
  67.     ChangeFillInBrush( Brush( Color( COL_GREEN ) ) );
  68.     DrawRect( Rectangle( Point( x/8, y/8 ),
  69.                          Size( x/4, y/4 ) ), 10, 10 );
  70.  
  71.     ChangePen( Pen( Color( COL_BLUE ), 3 ) );
  72.     DrawArc( Rectangle( Point( 0, 0 ), Point( x-x/8, y-y/8 ) ),
  73.                         Point( x/2, y ), Point( x, y/2 ) );
  74.  
  75.     ChangePen( Pen( Color( COL_CYAN ), 2 ) );
  76.     aPointArray[0] = Point( x/2, y/2 );
  77.     aPointArray[1] = Point( 3*x/4, y );
  78.     aPointArray[2] = Point( x, 3*y/4 );
  79.     aPointArray[3] = Point( x/3, 4*y/5 );
  80.     DrawPolyLine( Polygon( 4, aPointArray ) );
  81.  
  82.     ChangePen( Pen( Color( COL_LIGHTGREEN ), 1, PEN_DASH ) );
  83.     aPointArray[0] = Point( x/2, y/2-y/10 );
  84.     aPointArray[1] = Point( 3*x/4, y-y/10 );
  85.     aPointArray[2] = Point( x, 3*y/4-y/10 );
  86.     aPointArray[3] = Point( x/3, 4*y/5-y/10 );
  87.     DrawPolyLine( Polygon( 4, aPointArray ) );
  88.  
  89.     Pen aNullPen( PEN_NULL );
  90.     ChangePen( aNullPen );
  91.     ChangeFillInBrush( Brush( Color( COL_BLACK ),
  92.                               Color( COL_WHITE ),
  93.                               BRUSH_VERT ) );
  94.     DrawRect( Rectangle( Point( 3*x/4, y/6 ), Size( x/5, y/5 ) ) );
  95.  
  96.     ChangeFillInBrush( Brush( Color( COL_LIGHTMAGENTA ),
  97.                               BRUSH_DIAGCROSS ) );
  98.     DrawEllipse( Rectangle( Point( 3*x/4, y/6 ),
  99.                             Size( x/4, y/4 ) ) );
  100.  
  101.     ChangePen( Pen( Color( COL_BLACK ), 1 ) );
  102.     ChangeFillInBrush( Brush( Color( COL_MAGENTA ) ) );
  103.     aPointArray[0] = Point( x/8, y/2 );
  104.     aPointArray[1] = Point( x/3, 2*y/3 );
  105.     aPointArray[2] = Point( 1, y-1 ) ;
  106.     DrawPolygon( Polygon( 3, aPointArray ) );
  107.  
  108.     ChangePen( Pen( Color( COL_BLACK ), 2 ) );
  109.     ChangeFillInBrush( Brush( Color( COL_RED ), BRUSH_CROSS ) );
  110.     DrawEllipse( Rectangle( Point( x/2, y/3),
  111.                             Point( x/2+x/5, y/2 ) ) );
  112.  
  113.     Brush aNullBrush( BRUSH_NULL );
  114.     ChangeFillInBrush( aNullBrush );
  115.     DrawEllipse( Rectangle( Point( x/2, y-y/3),
  116.                             Point( x/2+x/5, y-y/4 ) ) );
  117. }
  118.  
  119. // --- PaintWindow::Resize() ---------------------------------------
  120.  
  121. void PaintWindow::Resize()
  122. {
  123.     x = GetOutputSizePixel().Width();
  124.     y = GetOutputSizePixel().Height();
  125.     if ( x > y )
  126.         a = y;
  127.     else
  128.         a = x;
  129.  
  130.     if ( bMapModeChanged )
  131.     {
  132.         MapMode aMode = GetMapMode();
  133.         aMode.ChangeOrigin( Point( x*-1, y*-1 ) );
  134.         ChangeMapMode( aMode );
  135.     }
  136.  
  137.     Invalidate();
  138. }
  139.  
  140. // --- PaintWindow::MouseButtonDown() ------------------------------
  141.  
  142. void PaintWindow::MouseButtonDown( const MouseEvent& )
  143. {
  144.     MapMode aMapMode( MAP_PIXEL,
  145.                       Point( GetOutputSizePixel().Width()*-1,
  146.                              GetOutputSizePixel().Height()*-1 ),
  147.                       Fraction( -1, 1 ), Fraction( -1, 1 ) );
  148.  
  149.     if ( bMapModeChanged )
  150.         ChangeMapMode( MapMode() );
  151.     else
  152.         ChangeMapMode( aMapMode );
  153.     bMapModeChanged = !bMapModeChanged;
  154.  
  155.     Invalidate();
  156. }
  157.  
  158.  
  159. // --- PaintWindow::PacMan() ---------------------------------------
  160.  
  161. void PaintWindow::PacMan( AutoTimer* )
  162. {
  163.     const short nStep=10;
  164.  
  165.     if ( bOpen && (t < a/10) )
  166.         t+=nStep;
  167.     else if ( bOpen && (t >= a/10) )
  168.         bOpen = FALSE;
  169.     if ( !bOpen && (t > 1) )
  170.     {
  171.         t-=nStep;
  172.         if ( t <= 1 )
  173.         {
  174.           t=1;
  175.           bOpen = TRUE;
  176.         }
  177.     }
  178.     else if ( !bOpen && ( t <= 1 ) )
  179.         bOpen = TRUE;
  180.  
  181.     ChangePen( Pen( Color( COL_WHITE ), 0 ) );
  182.     ChangeFillInBrush( Brush( Color( COL_WHITE ) ) );
  183.     DrawPie( Rectangle( Point( x/2-a/12, y/2-a/12 ),
  184.                         Size( a/6, a/6 ) ),
  185.                         Point( x/2+a/12, y/2+t ),
  186.                         Point( x/2+a/12, y/2-t ) );
  187.  
  188.     ChangeFillInBrush( Brush( Color( COL_YELLOW ) ) );
  189.     DrawPie( Rectangle( Point( x/2-a/12, y/2-a/12 ),
  190.                         Size( a/6, a/6 ) ),
  191.                         Point( x/2+a/12, y/2-t ),
  192.                         Point( x/2+a/12, y/2+t ) );
  193.  
  194.     ChangePen( Pen( Color( COL_BLACK ), 0 ) );
  195.     ChangeFillInBrush( Brush( Color( COL_BLACK ) ) );
  196.     DrawEllipse( Rectangle( Point( x/2+a/48, y/2-a/16 ),
  197.                             Size( 5, 5 ) ) );
  198. }
  199.  
  200. // --- MyApp::Main() -----------------------------------------------
  201.  
  202. void MyApp::Main( int, char*[] )
  203. {
  204.    PaintWindow aWindow;
  205.    Execute();
  206. }
  207.  
  208. // --- aMyApp ------------------------------------------------------
  209.  
  210. MyApp aMyApp;
  211.