]>
git.saurik.com Git - wxWidgets.git/blob - contrib/samples/canvas/test/test.cpp
4a64144c8a3d951265319ad76ddd73676b59be83
   4  * Author: Robert Roebling 
   6  * Copyright: (C) 1998, Robert Roebling 
   9 // For compilers that support precompilation, includes "wx/wx.h". 
  10 #include "wx/wxprec.h" 
  29 #include "wx/canvas/canvas.h" 
  34 class MywxCanvasImage
: public wxCanvasImage
 
  37     MywxCanvasImage( const wxImage 
&image
, double x
, double y
, double w
, double h 
); 
  39     void MywxCanvasImage::OnMouse(wxMouseEvent 
&event
); 
  44 BEGIN_EVENT_TABLE(MywxCanvasImage
,wxCanvasImage
) 
  45   EVT_MOUSE_EVENTS( MywxCanvasImage::OnMouse 
) 
  48 MywxCanvasImage::MywxCanvasImage( const wxImage 
&image
, double x
, double y
, double w
, double h 
) 
  49     :wxCanvasImage( image
, x
, y
, w
, h 
) 
  53 void MywxCanvasImage::OnMouse(wxMouseEvent 
&event
) 
  55     static bool first
=false; 
  68         Move(m_area
.x
+x
-dx
,m_area
.y
+y
-dy
); 
  71     else if (IsCapturedMouse()) 
  79 class MywxCanvasObjectGroupRef
: public wxCanvasObjectGroupRef
 
  82     MywxCanvasObjectGroupRef(double x
, double y
, wxCanvasObjectGroup
* group
); 
  84     void OnMouse(wxMouseEvent 
&event
); 
  89 BEGIN_EVENT_TABLE(MywxCanvasObjectGroupRef
,wxCanvasObjectGroupRef
) 
  90   EVT_MOUSE_EVENTS( MywxCanvasObjectGroupRef::OnMouse 
) 
  93 MywxCanvasObjectGroupRef::MywxCanvasObjectGroupRef(double x
, double y
,wxCanvasObjectGroup
* group
) 
  94     :wxCanvasObjectGroupRef(x
,y
,group
) 
  98 void MywxCanvasObjectGroupRef::OnMouse(wxMouseEvent 
&event
) 
 100     static bool first
=false; 
 104     //new position of object 
 105     int x 
= m_owner
->GetDeviceX( event
.GetX()); 
 106     int y 
= m_owner
->GetDeviceY( event
.GetY()); 
 108     if (event
.m_leftDown
) 
 115         Move(m_x
+x
-dx
,m_y
+y
-dy
); 
 118     else if (IsCapturedMouse()) 
 131 class MyFrame
: public wxFrame
 
 137     void OnAbout( wxCommandEvent 
&event 
); 
 138     void OnNewFrame( wxCommandEvent 
&event 
); 
 139     void OnQuit( wxCommandEvent 
&event 
); 
 140     void OnTimer( wxTimerEvent 
&event 
); 
 143     wxCanvasObject   
*m_sm1
; 
 144     wxCanvasObject   
*m_sm2
; 
 145     wxCanvasObject   
*m_sm3
; 
 146     wxCanvasObject   
*m_sm4
; 
 148     MywxCanvasObjectGroupRef 
*m_ref
; 
 149     MywxCanvasObjectGroupRef 
*m_ref2
; 
 155     DECLARE_DYNAMIC_CLASS(MyFrame
) 
 156     DECLARE_EVENT_TABLE() 
 161 class MyApp
: public wxApp
 
 164     virtual bool OnInit(); 
 166     const wxString
& GetFontPath() const { return m_fontpath
; } 
 178 const int ID_QUIT  
= 108; 
 179 const int ID_ABOUT 
= 109; 
 181 IMPLEMENT_DYNAMIC_CLASS( MyFrame
, wxFrame 
) 
 183 BEGIN_EVENT_TABLE(MyFrame
,wxFrame
) 
 184   EVT_MENU    (ID_ABOUT
, MyFrame::OnAbout
) 
 185   EVT_MENU    (ID_QUIT
,  MyFrame::OnQuit
) 
 186   EVT_TIMER   (-1,       MyFrame::OnTimer
) 
 190        : wxFrame( (wxFrame 
*)NULL
, -1, "wxCanvas sample", 
 191                   wxPoint(20,20), wxSize(470,860) ) 
 193     wxMenu 
*file_menu 
= new wxMenu(); 
 194     file_menu
->Append( ID_ABOUT
, "&About..."); 
 195     file_menu
->AppendSeparator(); 
 196     file_menu
->Append( ID_QUIT
, "E&xit"); 
 198     wxMenuBar 
*menu_bar 
= new wxMenuBar(); 
 199     menu_bar
->Append(file_menu
, "&File"); 
 201     SetMenuBar( menu_bar 
); 
 204     int widths
[] = { -1, 100 }; 
 205     SetStatusWidths( 2, widths 
); 
 207     m_canvas 
= new wxCanvas( this, -1, wxPoint(0,0), wxSize(10,10) ); 
 209     m_canvas
->SetArea( 1400, 600 ); 
 210     m_canvas
->SetColour( 255, 255, 255 ); 
 213     wxBitmap 
bitmap( smile_xpm 
); 
 214     wxImage 
image( bitmap 
); 
 216     m_sm1 
= new wxCanvasImage( image
, 0,70,16,16 ); 
 217     m_canvas
->Append( m_sm1 
); 
 220     for (i 
= 10; i 
< 300; i
+=10) 
 221         m_canvas
->Append( new wxCanvasRect( i
,50,3,140, 255,0,0 ) ); 
 223     m_sm2 
= new wxCanvasImage( image
, 0,140,24,24 ); 
 224     m_canvas
->Append( m_sm2 
); 
 226     for (i 
= 15; i 
< 300; i
+=10) 
 227         m_canvas
->Append( new wxCanvasRect( i
,50,3,140, 255,0,0 ) ); 
 229     wxButton 
*button 
= new wxButton( m_canvas
, -1, "Hello", wxPoint(80,50) ); 
 230     m_canvas
->Append( new wxCanvasControl( button 
) ); 
 232     m_canvas
->Append( new wxCanvasText( "Hello", 180, 50, 
 233                       wxGetApp().GetFontPath() + "/times.ttf", 20 ) ); 
 235     m_sm3 
= new wxCanvasImage( image
, 0,210,32,32 ); 
 236     m_canvas
->Append( m_sm3 
); 
 238     for (i 
= 10; i 
< 300; i
+=10) 
 239         m_canvas
->Append( new wxCanvasLine( 10,-15,i
,300, 0,255,0 ) ); 
 241     m_sm4 
= new MywxCanvasImage( image
, 0,270,64,32 ); 
 242     m_canvas
->Append( m_sm4 
); 
 245 //    m_canvas->Append( new wxCanvasLine( 10,-1500e6,50,300000e6, 0,255,0 ) ); 
 246 //    m_canvas->Append( new wxCanvasLine( 10,-150000,50,300000, 0,255,0 ) ); 
 248     //make a group of wxCanvasObjects 
 249     wxCanvasObjectGroup
* group1 
= new wxCanvasObjectGroup(); 
 250     group1
->Prepend( new wxCanvasLine( 10,-35,50,190,100,255,0 ) ); 
 251     group1
->Prepend( new wxCanvasImage( image
, 4,38,32,32 ) ); 
 252     group1
->Prepend( new wxCanvasRect(20,-20,50,170,0,20,240 ) ); 
 253     group1
->Prepend( new wxCanvasRect(10,20,104,52,0,240,240 ) ); 
 256     //make another group of wxCanvasObjects 
 257     wxCanvasObjectGroup
* group2 
= new wxCanvasObjectGroup(); 
 258     group2
->Prepend( new wxCanvasImage( image
, 60,38,52,32 ) ); 
 259     group2
->Prepend( new wxCanvasRect(10,20,104,52,10,40,10 ) ); 
 261     //this a reference to group2 put into group1 
 262     wxCanvasObjectGroupRef
* m_subref 
= new wxCanvasObjectGroupRef(60,50, group2
); 
 263     group1
->Prepend( m_subref 
); 
 265     //now make two refrences to group1 into root group of the canvas 
 266     m_ref 
= new MywxCanvasObjectGroupRef(40,200, group1
); 
 267     m_canvas
->Prepend( m_ref 
); 
 269     m_ref2 
= new MywxCanvasObjectGroupRef(80,350, group1
); 
 270     m_canvas
->Prepend( m_ref2 
); 
 273     m_log 
= new wxTextCtrl( this, -1, "", wxPoint(0,0), wxSize(100,100), wxTE_MULTILINE 
); 
 274     wxLog 
*old_log 
= wxLog::SetActiveTarget( new wxLogTextCtrl( m_log 
) ); 
 277     wxBoxSizer 
*topsizer 
= new wxBoxSizer( wxVERTICAL 
); 
 279     topsizer
->Add( m_canvas
, 1, wxEXPAND 
); 
 280     topsizer
->Add( m_log
, 0, wxEXPAND 
); 
 282     SetAutoLayout( TRUE 
); 
 283     SetSizer( topsizer 
); 
 285     m_timer 
= new wxTimer( this ); 
 286     m_timer
->Start( 100, FALSE 
); 
 294 void MyFrame::OnQuit( wxCommandEvent 
&WXUNUSED(event
) ) 
 299 void MyFrame::OnTimer( wxTimerEvent 
&WXUNUSED(event
) ) 
 301     m_sm1
->Move( m_sm1
->GetX()+1, m_sm1 
->GetY() ); 
 302     m_sm2
->Move( m_sm2
->GetX()+1, m_sm2
->GetY() ); 
 303     m_sm3
->Move( m_sm3
->GetX()+1, m_sm3
->GetY() ); 
 304     m_sm4
->Move( m_sm4
->GetX()+2, m_sm4
->GetY() ); 
 305     m_ref
->Move( m_ref
->GetPosX()+1, m_ref
->GetPosY() ); 
 306     m_ref2
->Move( m_ref2
->GetPosX()+2, m_ref2
->GetPosY() ); 
 311 void MyFrame::OnAbout( wxCommandEvent 
&WXUNUSED(event
) ) 
 313    (void)wxMessageBox( "wxCanvas demo\n" 
 314                       "Robert Roebling (c) 1998,2000", 
 315                       "About wxCanvas Demo", wxICON_INFORMATION 
| wxOK 
); 
 318 //----------------------------------------------------------------------------- 
 320 //----------------------------------------------------------------------------- 
 324   m_fontpath 
= getenv("TRUETYPE"); 
 325    m_fontpath 
= "c:\WINNT\Fonts\times.ttf"; 
 328       wxLogError("Please set env var TRUETYPE to the path where times.ttf lives."); 
 335   wxImage::AddHandler( new wxPNGHandler 
); 
 338   wxFrame 
*frame 
= new MyFrame();