X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b62c3631c9d769f3cd8e85c0f1298d9f09a919d2..e7bcded47c69499a2cca7be088c77f6e23b39e37:/samples/drawing/drawing.cpp diff --git a/samples/drawing/drawing.cpp b/samples/drawing/drawing.cpp index baad6ee061..76af6243ef 100644 --- a/samples/drawing/drawing.cpp +++ b/samples/drawing/drawing.cpp @@ -74,7 +74,6 @@ public: void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); void OnOption(wxCommandEvent &event); - void OnMouseMove(wxMouseEvent &event); wxColour SelectColour(); void PrepareDC(wxDC& dc); @@ -102,9 +101,10 @@ class MyCanvas: public wxScrolledWindow { public: MyCanvas( MyFrame *parent ); - - void DoDrawTests( int x, int y, wxDC &dc ); + + void DrawTestLines( int x, int y, int width, wxDC &dc ); void OnPaint(wxPaintEvent &event); + void OnMouseMove(wxMouseEvent &event); protected: MyFrame *m_owner; @@ -199,6 +199,7 @@ bool MyApp::OnInit() // handlers) which process them. BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow) EVT_PAINT (MyCanvas::OnPaint) + EVT_MOTION (MyCanvas::OnMouseMove) END_EVENT_TABLE() MyCanvas::MyCanvas( MyFrame *parent ) @@ -207,106 +208,51 @@ MyCanvas::MyCanvas( MyFrame *parent ) m_owner = parent; } -void MyCanvas::DoDrawTests( int x, int y, wxDC &dc ) +void MyCanvas::DrawTestLines( int x, int y, int width, wxDC &dc ) { - wxRect rect; - rect.x = dc.LogicalToDeviceX( x-20 ); - rect.y = dc.LogicalToDeviceY( y-20 ); - rect.width = dc.LogicalToDeviceXRel( 500 ); - rect.height = dc.LogicalToDeviceYRel( 200 ); - if (!IsExposed(rect)) return; - - dc.DrawLine( x , y, x , y ); - dc.DrawLine( x+ 20, y, x+ 20, y+ 1 ); - dc.DrawLine( x+ 40, y, x+ 40, y+ 2 ); - dc.DrawLine( x+ 60, y, x+ 60, y+ 3 ); - dc.DrawLine( x+ 80, y, x+ 80, y+ 4 ); - dc.DrawLine( x+100, y, x+100, y+ 5 ); - dc.DrawLine( x+120, y, x+120, y+ 6 ); - dc.DrawLine( x+140, y, x+140, y+10 ); - dc.DrawLine( x+160, y, x+160, y+20 ); - dc.DrawLine( x+180, y, x+180, y+30 ); - - dc.DrawLine( x+200, y, x+200 , y ); - dc.DrawLine( x+220, y, x+220+ 1, y+ 1 ); - dc.DrawLine( x+240, y, x+240+ 2, y+ 2 ); - dc.DrawLine( x+260, y, x+260+ 3, y+ 3 ); - dc.DrawLine( x+280, y, x+280+ 4, y+ 4 ); - dc.DrawLine( x+300, y, x+300+ 5, y+ 5 ); - dc.DrawLine( x+320, y, x+320+ 6, y+ 6 ); - dc.DrawLine( x+340, y, x+340+10, y+10 ); - dc.DrawLine( x+360, y, x+360+20, y+20 ); - dc.DrawLine( x+380, y, x+380+30, y+30 ); - - dc.DrawLine( x+420, y , x+420 , y ); - dc.DrawLine( x+420, y+10, x+420+1, y+10 ); - dc.DrawLine( x+420, y+20, x+420+2, y+20 ); - dc.DrawLine( x+420, y+30, x+420+3, y+30 ); - dc.DrawLine( x+420, y+40, x+420+4, y+40 ); - dc.DrawLine( x+420, y+50, x+420+5, y+50 ); - dc.DrawLine( x+420, y+60, x+420+6, y+60 ); - dc.DrawLine( x+420, y+70, x+420+10, y+70 ); - dc.DrawLine( x+420, y+80, x+420+20, y+80 ); - dc.DrawLine( x+420, y+90, x+420+30, y+90 ); - - y -= 40; - - dc.DrawCircle( x, y+100, 1); - dc.DrawCircle( x, y+110, 2); - dc.DrawCircle( x, y+120, 3); - dc.DrawCircle( x, y+130, 4); - dc.DrawCircle( x, y+140, 5); - dc.DrawCircle( x, y+160, 7); - dc.DrawCircle( x, y+180, 8); - - dc.DrawRectangle( x+50, y+100, 1, 1); - dc.DrawRectangle( x+50, y+110, 2, 2); - dc.DrawRectangle( x+50, y+120, 3, 3); - dc.DrawRectangle( x+50, y+130, 4, 4); - dc.DrawRectangle( x+50, y+140, 5, 5); - dc.DrawRectangle( x+50, y+160, 10, 10); - dc.DrawRectangle( x+50, y+180, 20, 20); - - dc.DrawRoundedRectangle( x+100, y+100, 1, 1, 1); - dc.DrawRoundedRectangle( x+100, y+110, 2, 2, 1); - dc.DrawRoundedRectangle( x+100, y+120, 3, 3, 1); - dc.DrawRoundedRectangle( x+100, y+130, 4, 4, 1); - dc.DrawRoundedRectangle( x+100, y+140, 5, 5, 1); - dc.DrawRoundedRectangle( x+100, y+160, 10, 10, 1); - dc.DrawRoundedRectangle( x+100, y+180, 20, 20, 1); - - dc.DrawRoundedRectangle( x+150, y+100, 1, 1, 2); - dc.DrawRoundedRectangle( x+150, y+110, 2, 2, 2); - dc.DrawRoundedRectangle( x+150, y+120, 3, 3, 2); - dc.DrawRoundedRectangle( x+150, y+130, 4, 4, 2); - dc.DrawRoundedRectangle( x+150, y+140, 5, 5, 2); - dc.DrawRoundedRectangle( x+150, y+160, 10, 10, 2); - dc.DrawRoundedRectangle( x+150, y+180, 20, 20, 2); - - dc.DrawRoundedRectangle( x+200, y+100, 1, 1, 3); - dc.DrawRoundedRectangle( x+200, y+110, 2, 2, 3); - dc.DrawRoundedRectangle( x+200, y+120, 3, 3, 3); - dc.DrawRoundedRectangle( x+200, y+130, 4, 4, 3); - dc.DrawRoundedRectangle( x+200, y+140, 5, 5, 3); - dc.DrawRoundedRectangle( x+200, y+160, 10, 10, 3); - dc.DrawRoundedRectangle( x+200, y+180, 20, 20, 3); - - dc.DrawRoundedRectangle( x+250, y+100, 1, 1, 5); - dc.DrawRoundedRectangle( x+250, y+110, 2, 2, 5); - dc.DrawRoundedRectangle( x+250, y+120, 3, 3, 5); - dc.DrawRoundedRectangle( x+250, y+130, 4, 4, 5); - dc.DrawRoundedRectangle( x+250, y+140, 5, 5, 5); - dc.DrawRoundedRectangle( x+250, y+160, 10, 10, 5); - dc.DrawRoundedRectangle( x+250, y+180, 20, 20, 5); - - dc.DrawRoundedRectangle( x+300, y+100, 1, 1, 10); - dc.DrawRoundedRectangle( x+300, y+110, 2, 2, 10); - dc.DrawRoundedRectangle( x+300, y+120, 3, 3, 10); - dc.DrawRoundedRectangle( x+300, y+130, 4, 4, 10); - dc.DrawRoundedRectangle( x+300, y+140, 5, 5, 10); - dc.DrawRoundedRectangle( x+300, y+160, 10, 10, 10); - dc.DrawRoundedRectangle( x+300, y+180, 20, 20, 10); - + dc.SetPen( wxPen( "black", width, wxSOLID) ); + dc.SetBrush( *wxRED_BRUSH ); + dc.DrawRectangle( x+10, y+10, 100, 190 ); + + dc.SetPen( wxPen( "black", width, wxSOLID) ); + dc.DrawLine( x+20, y+20, 100, y+20 ); + dc.SetPen( wxPen( "black", width, wxDOT) ); + dc.DrawLine( x+20, y+30, 100, y+30 ); + dc.SetPen( wxPen( "black", width, wxSHORT_DASH) ); + dc.DrawLine( x+20, y+40, 100, y+40 ); + dc.SetPen( wxPen( "black", width, wxLONG_DASH) ); + dc.DrawLine( x+20, y+50, 100, y+50 ); + dc.SetPen( wxPen( "black", width, wxDOT_DASH) ); + dc.DrawLine( x+20, y+60, 100, y+60 ); + + dc.SetPen( wxPen( "black", width, wxBDIAGONAL_HATCH) ); + dc.DrawLine( x+20, y+70, 100, y+70 ); + dc.SetPen( wxPen( "black", width, wxCROSSDIAG_HATCH) ); + dc.DrawLine( x+20, y+80, 100, y+80 ); + dc.SetPen( wxPen( "black", width, wxFDIAGONAL_HATCH) ); + dc.DrawLine( x+20, y+90, 100, y+90 ); + dc.SetPen( wxPen( "black", width, wxCROSS_HATCH) ); + dc.DrawLine( x+20, y+100, 100, y+100 ); + dc.SetPen( wxPen( "black", width, wxHORIZONTAL_HATCH) ); + dc.DrawLine( x+20, y+110, 100, y+110 ); + dc.SetPen( wxPen( "black", width, wxVERTICAL_HATCH) ); + dc.DrawLine( x+20, y+120, 100, y+120 ); + + wxPen ud( "black", width, wxUSER_DASH ); + wxDash dash1[1]; + dash1[0] = 0; + ud.SetDashes( 1, dash1 ); + dc.DrawLine( x+20, y+140, 100, y+140 ); + dash1[0] = 1; + ud.SetDashes( 1, dash1 ); + dc.DrawLine( x+20, y+150, 100, y+150 ); + dash1[0] = 2; + ud.SetDashes( 1, dash1 ); + dc.DrawLine( x+20, y+160, 100, y+160 ); + dash1[0] = 0xFF; + ud.SetDashes( 1, dash1 ); + dc.DrawLine( x+20, y+170, 100, y+170 ); + } void MyCanvas::OnPaint(wxPaintEvent &WXUNUSED(event)) @@ -325,42 +271,68 @@ void MyCanvas::OnPaint(wxPaintEvent &WXUNUSED(event)) // mark the origin dc.DrawCircle(0, 0, 10); -#ifndef __WXGTK__ // not implemented in wxGTK :-( +#if !(defined __WXGTK__) && !(defined __WXMOTIF__) + // not implemented in wxGTK or wxMOTIF :-( dc.FloodFill(0, 0, wxColour(255, 0, 0)); -#endif // __WXGTK__ +#endif // + // set underlined font for testing + dc.SetFont( wxFont(12, wxMODERN, wxNORMAL, wxNORMAL, TRUE) ); dc.DrawText( "This is text", 110, 10 ); + dc.DrawRotatedText( "That is text", 60, 30, -45 ); - dc.DrawIcon( wxICON(mondrian), 110, 40 ); - - dc.SetBrush( *wxRED_BRUSH ); - - int x = 20; - int y = 80; - int step = 200; - - dc.SetPen( wxPen( "black", 1, 0) ); - DoDrawTests( x, y, dc ); - - y += step; - - dc.SetPen( wxPen( "black", 1, wxDOT) ); - DoDrawTests( x, y, dc ); - - y += step; - - dc.SetPen( wxPen( "black", 1, wxSHORT_DASH) ); - DoDrawTests( x, y, dc ); - - y += step; - - dc.SetPen( wxPen( "black", 1, wxLONG_DASH) ); - DoDrawTests( x, y, dc ); - - y += step; + dc.SetFont( *wxNORMAL_FONT ); + + wxString text; + dc. SetBackgroundMode(wxTRANSPARENT); + + for ( int n = -180; n < 180; n += 30 ) + { + text.Printf(" %d rotated text", n); + dc.DrawRotatedText(text , 400, 400, n); + } + + dc.SetFont( wxFont( 18, wxSWISS, wxNORMAL, wxNORMAL ) ); + + dc.DrawText( "This is Swiss 18pt text.", 110, 40 ); + + long length; + long height; + long descent; + dc.GetTextExtent( "This is Swiss 18pt text.", &length, &height, &descent ); + text.Printf( "Dimensions are length %ld, height %ld, descent %ld", length, height, descent ); + dc.DrawText( text, 110, 80 ); + + dc.DrawRectangle( 100, 40, 4, height ); + + text.Printf( "CharHeight() returns: %d", dc.GetCharHeight() ); + dc.DrawText( text, 110, 120 ); + + + dc.DrawIcon( wxICON(mondrian), 310, 40 ); - dc.SetPen( wxPen( "black", 1, wxDOT_DASH) ); - DoDrawTests( x, y, dc ); + DrawTestLines( 0, 200, 0, dc ); + + DrawTestLines( 0, 400, 1, dc ); + + DrawTestLines( 0, 600, 2, dc ); + + DrawTestLines( 0, 800, 6, dc ); + +} + +void MyCanvas::OnMouseMove(wxMouseEvent &event) +{ + wxClientDC dc(this); + PrepareDC(dc); + m_owner->PrepareDC(dc); + + wxPoint pos = event.GetPosition(); + long x = dc.DeviceToLogicalX( pos.x ); + long y = dc.DeviceToLogicalY( pos.y ); + wxString str; + str.Printf( "Current mouse position: %d,%d", (int)x, (int)y ); + m_owner->SetStatusText( str ); } // ---------------------------------------------------------------------------- @@ -371,7 +343,6 @@ void MyCanvas::OnPaint(wxPaintEvent &WXUNUSED(event)) // handlers) which process them. It can be also done at run-time, but for the // simple menu events like this the static method is much simpler. BEGIN_EVENT_TABLE(MyFrame, wxFrame) - EVT_MOTION (MyFrame::OnMouseMove) EVT_MENU (Minimal_Quit, MyFrame::OnQuit) EVT_MENU (Minimal_About, MyFrame::OnAbout) EVT_MENU_RANGE(MenuOption_First, MenuOption_Last, MyFrame::OnOption) @@ -549,7 +520,7 @@ void MyFrame::OnOption(wxCommandEvent &event) return; } - Refresh(); + m_canvas->Refresh(); } void MyFrame::PrepareDC(wxDC& dc) @@ -560,19 +531,6 @@ void MyFrame::PrepareDC(wxDC& dc) dc.SetAxisOrientation( !m_xAxisReversed, m_yAxisReversed ); } -void MyFrame::OnMouseMove(wxMouseEvent &event) -{ - wxClientDC dc(this); - PrepareDC(dc); - - wxPoint pos = event.GetPosition(); - long x = dc.DeviceToLogicalX( pos.x ); - long y = dc.DeviceToLogicalY( pos.y ); - wxString str; - str.Printf( "Current mouse position: %d,%d", (int)x, (int)y ); - SetStatusText( str ); -} - wxColour MyFrame::SelectColour() { wxColour col;