]> git.saurik.com Git - wxWidgets.git/blame_incremental - samples/erase/erase.cpp
Allow building with wxUSE_CALENDARCTRL=0
[wxWidgets.git] / samples / erase / erase.cpp
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: erase.cpp
3// Purpose: Erase wxWindows sample
4// Author: Robert Roebling
5// Modified by:
6// Created: 04/01/98
7// RCS-ID: $Id$
8// Copyright: (c) Robert Roebling
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12// ============================================================================
13// declarations
14// ============================================================================
15
16// ----------------------------------------------------------------------------
17// headers
18// ----------------------------------------------------------------------------
19
20#ifdef __GNUG__
21 #pragma implementation "erase.cpp"
22 #pragma interface "erase.cpp"
23#endif
24
25// For compilers that support precompilation, includes "wx/wx.h".
26#include "wx/wxprec.h"
27
28#ifdef __BORLANDC__
29 #pragma hdrstop
30#endif
31
32// for all others, include the necessary headers (this file is usually all you
33// need because it includes almost all "standard" wxWindows headers)
34#ifndef WX_PRECOMP
35 #include "wx/wx.h"
36#endif
37
38// ----------------------------------------------------------------------------
39// resources
40// ----------------------------------------------------------------------------
41// the application icon
42#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) || defined(__WXX11__)
43 #include "mondrian.xpm"
44#endif
45
46// ----------------------------------------------------------------------------
47// private classes
48// ----------------------------------------------------------------------------
49
50class MyApp : public wxApp
51{
52public:
53 virtual bool OnInit();
54};
55
56
57class MyFrame : public wxFrame
58{
59public:
60 MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
61
62 void OnQuit(wxCommandEvent& event);
63 void OnAbout(wxCommandEvent& event);
64
65private:
66 DECLARE_EVENT_TABLE()
67};
68
69
70class MyCanvas : public wxScrolledWindow
71{
72public:
73 MyCanvas( MyFrame *parent );
74
75 void OnPaint( wxPaintEvent &event );
76 void OnEraseBackground( wxEraseEvent &event );
77
78 wxBitmap m_bitmap;
79
80private:
81 DECLARE_EVENT_TABLE()
82};
83
84// ----------------------------------------------------------------------------
85// constants
86// ----------------------------------------------------------------------------
87
88enum
89{
90 // menu items
91 Minimal_Quit = 1,
92 Minimal_About
93};
94
95
96// ----------------------------------------------------------------------------
97// the application class
98// ----------------------------------------------------------------------------
99
100IMPLEMENT_APP(MyApp)
101
102bool MyApp::OnInit()
103{
104 MyFrame *frame = new MyFrame("Minimal wxWindows App",
105 wxPoint(50, 50), wxSize(450, 340));
106
107 frame->Show(TRUE);
108
109 return TRUE;
110}
111
112// ----------------------------------------------------------------------------
113// main frame
114// ----------------------------------------------------------------------------
115
116BEGIN_EVENT_TABLE(MyFrame, wxFrame)
117 EVT_MENU(Minimal_Quit, MyFrame::OnQuit)
118 EVT_MENU(Minimal_About, MyFrame::OnAbout)
119END_EVENT_TABLE()
120
121// frame constructor
122MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
123 : wxFrame((wxFrame *)NULL, -1, title, pos, size)
124{
125#ifdef __WXMAC__
126 wxApp::s_macAboutMenuItemId = Minimal_About;
127#endif
128
129 SetIcon(wxICON(mondrian));
130
131 wxMenu *menuFile = new wxMenu("", wxMENU_TEAROFF);
132
133 wxMenu *helpMenu = new wxMenu;
134 helpMenu->Append(Minimal_About, "&About...\tCtrl-A", "Show about dialog");
135
136 menuFile->Append(Minimal_Quit, "E&xit\tAlt-X", "Quit this program");
137
138 wxMenuBar *menuBar = new wxMenuBar();
139 menuBar->Append(menuFile, "&File");
140 menuBar->Append(helpMenu, "&Help");
141
142 SetMenuBar(menuBar);
143
144#if wxUSE_STATUSBAR
145 // create a status bar just for fun (by default with 1 pane only)
146 CreateStatusBar(2);
147 SetStatusText("Welcome to wxWindows!");
148#endif // wxUSE_STATUSBAR
149
150 (void)new MyCanvas( this );
151}
152
153
154void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
155{
156 Close(TRUE);
157}
158
159void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
160{
161 wxString msg;
162 msg.Printf( _T("This is the about dialog of the Erase sample.\n")
163 _T("Welcome to %s"), wxVERSION_STRING);
164
165 wxMessageBox(msg, "About Erase", wxOK | wxICON_INFORMATION, this);
166}
167
168
169BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow)
170 EVT_PAINT( MyCanvas::OnPaint)
171 EVT_ERASE_BACKGROUND( MyCanvas::OnEraseBackground)
172END_EVENT_TABLE()
173
174MyCanvas::MyCanvas( MyFrame *parent )
175 : wxScrolledWindow( parent, -1, wxDefaultPosition, wxDefaultSize,
176 wxScrolledWindowStyle|wxNO_FULL_REPAINT_ON_RESIZE|wxSUNKEN_BORDER )
177{
178 SetScrollbars( 10, 10, 40, 100, 0, 0 );
179
180 m_bitmap = wxBitmap( mondrian_xpm );
181
182 new wxStaticBitmap( this, -1, m_bitmap, wxPoint(80,20) );
183}
184
185void MyCanvas::OnPaint( wxPaintEvent &event )
186{
187 wxPaintDC dc(this);
188 PrepareDC( dc );
189
190 dc.SetBrush( *wxBLACK_BRUSH );
191 dc.DrawRectangle( 0,0,200,50 );
192
193 dc.DrawBitmap( m_bitmap, 10, 20, TRUE );
194
195#if 0
196 wxRegionIterator upd( GetUpdateRegion() );
197 while (upd)
198 {
199 wxLogDebug( "Paint: %d %d %d %d", upd.GetX(), upd.GetY(), upd.GetWidth(), upd.GetHeight() );
200 upd ++;
201 }
202#endif
203
204#if 0
205 wxSize size = GetSize();
206 wxSize client_size = GetClientSize();
207 wxLogDebug( "size %d %d client_size %d %d", size.x, size.y, client_size.x, client_size.y );
208#endif
209
210 int i;
211 dc.SetPen( *wxWHITE_PEN );
212 for (i = 0; i < 20; i += 2)
213 dc.DrawLine( i,i, i+100,i );
214
215 dc.SetPen( *wxWHITE_PEN );
216 for (i = 200; i < 220; i += 2)
217 dc.DrawLine( i-200,i, i-100,i );
218
219 wxRegion region( 110, 110, 80, 80 );
220 wxRegion hole( 130, 130, 40, 1 );
221 region.Intersect( hole );
222 dc.SetClippingRegion( region );
223
224 dc.SetBrush( *wxRED_BRUSH );
225 dc.DrawRectangle( 100, 100, 200, 200 );
226
227 dc.DestroyClippingRegion();
228
229 dc.SetPen( *wxTRANSPARENT_PEN );
230
231 wxRegion strip( 110, 200, 30, 1 );
232 wxRegionIterator it( strip );
233 while (it)
234 {
235 dc.DrawRectangle( it.GetX(), it.GetY(), it.GetWidth(), it.GetHeight() );
236 it ++;
237 }
238}
239
240void MyCanvas::OnEraseBackground( wxEraseEvent &event )
241{
242 event.Skip( TRUE );
243}
244