]> git.saurik.com Git - wxWidgets.git/blob - contrib/samples/canvas/test/test.cpp
Makefile adaption for freetype.
[wxWidgets.git] / contrib / samples / canvas / test / test.cpp
1 /*
2 * Program: canvas
3 *
4 * Author: Robert Roebling
5 *
6 * Copyright: (C) 1998, Robert Roebling
7 *
8 */
9 // For compilers that support precompilation, includes "wx/wx.h".
10 #include "wx/wxprec.h"
11
12 #ifdef __BORLANDC__
13 #pragma hdrstop
14 #endif
15
16 #ifndef WX_PRECOMP
17 #include "wx/wx.h"
18 #endif
19
20 #include <wx/image.h>
21 #include <wx/file.h>
22 #include <wx/timer.h>
23 #include <wx/log.h>
24
25
26 #include "smile.xpm"
27
28 #include "wx/canvas/canvas.h"
29
30 // derived classes
31
32 class MyFrame;
33 class MyApp;
34
35 // MyFrame
36
37 class MyFrame: public wxFrame
38 {
39 public:
40 MyFrame();
41 ~MyFrame();
42
43 void OnAbout( wxCommandEvent &event );
44 void OnNewFrame( wxCommandEvent &event );
45 void OnQuit( wxCommandEvent &event );
46 void OnTimer( wxTimerEvent &event );
47
48 wxCanvas *m_canvas;
49 wxCanvasObject *m_sm1;
50 wxCanvasObject *m_sm2;
51 wxCanvasObject *m_sm3;
52 wxCanvasObject *m_sm4;
53 wxTimer *m_timer;
54 wxTextCtrl *m_log;
55
56 private:
57 DECLARE_DYNAMIC_CLASS(MyFrame)
58 DECLARE_EVENT_TABLE()
59 };
60
61 // MyApp
62
63 class MyApp: public wxApp
64 {
65 public:
66 virtual bool OnInit();
67
68 const wxString& GetFontPath() const { return m_fontpath; }
69
70 private:
71 wxString m_fontpath;
72 };
73
74 // main program
75
76 IMPLEMENT_APP(MyApp)
77
78 // MyFrame
79
80 const int ID_QUIT = 108;
81 const int ID_ABOUT = 109;
82
83 IMPLEMENT_DYNAMIC_CLASS( MyFrame, wxFrame )
84
85 BEGIN_EVENT_TABLE(MyFrame,wxFrame)
86 EVT_MENU (ID_ABOUT, MyFrame::OnAbout)
87 EVT_MENU (ID_QUIT, MyFrame::OnQuit)
88 EVT_TIMER (-1, MyFrame::OnTimer)
89 END_EVENT_TABLE()
90
91 MyFrame::MyFrame()
92 : wxFrame( (wxFrame *)NULL, -1, "wxCanvas sample",
93 wxPoint(20,20), wxSize(470,460) )
94 {
95 wxMenu *file_menu = new wxMenu();
96 file_menu->Append( ID_ABOUT, "&About...");
97 file_menu->AppendSeparator();
98 file_menu->Append( ID_QUIT, "E&xit");
99
100 wxMenuBar *menu_bar = new wxMenuBar();
101 menu_bar->Append(file_menu, "&File");
102
103 SetMenuBar( menu_bar );
104
105 CreateStatusBar(2);
106 int widths[] = { -1, 100 };
107 SetStatusWidths( 2, widths );
108
109 m_canvas = new wxCanvas( this, -1, wxPoint(0,0), wxSize(10,10) );
110
111 m_canvas->Freeze();
112
113 m_canvas->SetArea( 400, 600 );
114 m_canvas->SetColour( 255, 255, 255 );
115
116 wxBitmap bitmap( smile_xpm );
117 wxImage image( bitmap );
118
119 m_sm1 = new wxCanvasImage( image, 0, 70 );
120 m_canvas->Append( m_sm1 );
121
122 int i;
123 for (i = 10; i < 300; i+=10)
124 m_canvas->Append( new wxCanvasRect( i,50,3,140, 255,0,0 ) );
125
126 m_sm2 = new wxCanvasImage( image, 0, 140 );
127 m_canvas->Append( m_sm2 );
128
129 for (i = 15; i < 300; i+=10)
130 m_canvas->Append( new wxCanvasRect( i,50,3,140, 255,0,0 ) );
131
132 wxButton *button = new wxButton( m_canvas, -1, "Hello", wxPoint(80,50) );
133 m_canvas->Append( new wxCanvasControl( button ) );
134
135 m_canvas->Append( new wxCanvasText( "Hello", 180, 50,
136 wxGetApp().GetFontPath() + "/times.ttf", 20 ) );
137
138 m_sm3 = new wxCanvasImage( image, 0, 210 );
139 m_canvas->Append( m_sm3 );
140
141 for (i = 10; i < 300; i+=10)
142 m_canvas->Append( new wxCanvasLine( 10,150,i,200, 0,255,0 ) );
143
144 m_sm4 = new wxCanvasImage( image, 0, 270 );
145 m_canvas->Append( m_sm4 );
146
147 m_canvas->Thaw();
148
149 m_log = new wxTextCtrl( this, -1, "", wxPoint(0,0), wxSize(100,100), wxTE_MULTILINE );
150 wxLog *old_log = wxLog::SetActiveTarget( new wxLogTextCtrl( m_log ) );
151 delete old_log;
152
153 wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
154
155 topsizer->Add( m_canvas, 1, wxEXPAND );
156 topsizer->Add( m_log, 0, wxEXPAND );
157
158 SetAutoLayout( TRUE );
159 SetSizer( topsizer );
160
161 m_timer = new wxTimer( this );
162 m_timer->Start( 100, FALSE );
163 }
164
165 MyFrame::~MyFrame()
166 {
167 delete m_timer;
168 }
169
170 void MyFrame::OnQuit( wxCommandEvent &WXUNUSED(event) )
171 {
172 Close( TRUE );
173 }
174
175 void MyFrame::OnTimer( wxTimerEvent &WXUNUSED(event) )
176 {
177 m_sm1->Move( m_sm1->GetX()+1, m_sm1->GetY() );
178 m_sm2->Move( m_sm2->GetX()+1, m_sm2->GetY() );
179 m_sm3->Move( m_sm3->GetX()+1, m_sm3->GetY() );
180 m_sm4->Move( m_sm4->GetX()+1, m_sm4->GetY() );
181 wxWakeUpIdle();
182 }
183
184 void MyFrame::OnAbout( wxCommandEvent &WXUNUSED(event) )
185 {
186 (void)wxMessageBox( "wxCanvas demo\n"
187 "Robert Roebling (c) 1998,2000",
188 "About wxCanvas Demo", wxICON_INFORMATION | wxOK );
189 }
190
191 //-----------------------------------------------------------------------------
192 // MyApp
193 //-----------------------------------------------------------------------------
194
195 bool MyApp::OnInit()
196 {
197 m_fontpath = getenv("TRUETYPE");
198 if ( !m_fontpath )
199 {
200 wxLogError("Please set env var TRUETYPE to the path where times.ttf lives.");
201
202 return FALSE;
203
204 }
205
206 #if wxUSE_LIBPNG
207 wxImage::AddHandler( new wxPNGHandler );
208 #endif
209
210 wxFrame *frame = new MyFrame();
211 frame->Show( TRUE );
212
213 return TRUE;
214 }
215
216