]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/drawing/drawing.cpp
implement wxTreeCtrl::GetFocusedItem() for wxMSW too (see #10859)
[wxWidgets.git] / samples / drawing / drawing.cpp
index 7c1e0d578f9012c1a83375ec32ac511466daf45e..9b288944fbea50a6672dc11aaa2584d07ced0025 100644 (file)
 #include "wx/artprov.h"
 #include "wx/dcgraph.h"
 #include "wx/overlay.h"
 #include "wx/artprov.h"
 #include "wx/dcgraph.h"
 #include "wx/overlay.h"
-
-#define wxTEST_GRAPHICS 1
+#include "wx/graphics.h"
+#include "wx/filename.h"
 
 #define TEST_CAIRO_EVERYWHERE 0
 
 
 #define TEST_CAIRO_EVERYWHERE 0
 
-#if wxTEST_GRAPHICS
-#include "wx/graphics.h"
-#include "wx/dcgraph.h"
-#if wxUSE_GRAPHICS_CONTEXT == 0
-#undef wxTEST_GRAPHICS
-#define wxTEST_GRAPHICS 0
-#endif
-#else
-#undef wxUSE_GRAPHICS_CONTEXT
-#define wxUSE_GRAPHICS_CONTEXT 0
-#endif
-
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
-// ressources
+// resources
 // ----------------------------------------------------------------------------
 
 // the application icon
 // ----------------------------------------------------------------------------
 
 // the application icon
     #include "mondrian.xpm"
 #endif
 
     #include "mondrian.xpm"
 #endif
 
-// ----------------------------------------------------------------------------
-// constants
-// ----------------------------------------------------------------------------
-
-// what do we show on screen (there are too many shapes to put them all on
-// screen simultaneously)
-enum ScreenToShow
-{
-    Show_Default,
-    Show_Text,
-    Show_Lines,
-    Show_Brushes,
-    Show_Polygons,
-    Show_Mask,
-    Show_Mask_Stretch,
-    Show_Ops,
-    Show_Regions,
-    Show_Circles,
-    Show_Splines,
-#if wxUSE_GRAPHICS_CONTEXT
-    Show_Alpha,
-    Show_Graphics,
-#endif
-    Show_Gradient,
-    Show_Max
-};
-
 // ----------------------------------------------------------------------------
 // global variables
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // global variables
 // ----------------------------------------------------------------------------
@@ -150,7 +111,7 @@ public:
 
     int         m_backgroundMode;
     int         m_textureBackground;
 
     int         m_backgroundMode;
     int         m_textureBackground;
-    int         m_mapMode;
+    wxMappingMode m_mapMode;
     double      m_xUserScale;
     double      m_yUserScale;
     int         m_xLogicalOrigin;
     double      m_xUserScale;
     double      m_yUserScale;
     int         m_xLogicalOrigin;
@@ -178,7 +139,7 @@ public:
     void OnMouseDown(wxMouseEvent &event);
     void OnMouseUp(wxMouseEvent &event);
 
     void OnMouseDown(wxMouseEvent &event);
     void OnMouseUp(wxMouseEvent &event);
 
-    void ToShow(ScreenToShow show) { m_show = show; Refresh(); }
+    void ToShow(int show) { m_show = show; Refresh(); }
 
     // set or remove the clipping region
     void Clip(bool clip) { m_clip = clip; Refresh(); }
 
     // set or remove the clipping region
     void Clip(bool clip) { m_clip = clip; Refresh(); }
@@ -214,7 +175,7 @@ protected:
 private:
     MyFrame *m_owner;
 
 private:
     MyFrame *m_owner;
 
-    ScreenToShow m_show;
+    int          m_show;
     wxBitmap     m_smile_bmp;
     wxIcon       m_std_icon;
     bool         m_clip;
     wxBitmap     m_smile_bmp;
     wxIcon       m_std_icon;
     bool         m_clip;
@@ -330,6 +291,9 @@ bool MyApp::LoadImages()
     gs_bmp36 = new wxBitmap;
 
     wxPathList pathList;
     gs_bmp36 = new wxBitmap;
 
     wxPathList pathList;
+    // special hack for Unix in-tree sample build, don't do this in real
+    // programs, use wxStandardPaths instead
+    pathList.Add(wxFileName(argv[0]).GetPath());
     pathList.Add(_T("."));
     pathList.Add(_T(".."));
     pathList.Add(_T("../.."));
     pathList.Add(_T("."));
     pathList.Add(_T(".."));
     pathList.Add(_T("../.."));
@@ -393,13 +357,10 @@ bool MyApp::OnInit()
                    wxT("for this sample from the current or parent ")
                    wxT("directory, please copy them there."));
 
                    wxT("for this sample from the current or parent ")
                    wxT("directory, please copy them there."));
 
-        // stop here
-        DeleteBitmaps();
-
-        return false;
+        // still continue, the sample can be used without images too if they're
+        // missing for whatever reason
     }
 
     }
 
-    // ok, continue
     return true;
 }
 
     return true;
 }
 
@@ -442,7 +403,7 @@ MyCanvas::MyCanvas(MyFrame *parent)
                            wxHSCROLL | wxVSCROLL | wxNO_FULL_REPAINT_ON_RESIZE)
 {
     m_owner = parent;
                            wxHSCROLL | wxVSCROLL | wxNO_FULL_REPAINT_ON_RESIZE)
 {
     m_owner = parent;
-    m_show = Show_Default;
+    m_show = File_ShowDefault;
     m_smile_bmp = wxBitmap(smile_xpm);
     m_std_icon = wxArtProvider::GetIcon(wxART_INFORMATION);
     m_clip = false;
     m_smile_bmp = wxBitmap(smile_xpm);
     m_std_icon = wxArtProvider::GetIcon(wxART_INFORMATION);
     m_clip = false;
@@ -822,26 +783,26 @@ void MyCanvas::DrawText(wxDC& dc)
     // test the logical function effect
     wxCoord y = 150;
     dc.SetLogicalFunction(wxINVERT);
     // test the logical function effect
     wxCoord y = 150;
     dc.SetLogicalFunction(wxINVERT);
-    dc.DrawText( _T("There should be no text below"), 110, 150 );
+    // text drawing should ignore logical function
+    dc.DrawText( _T("There should be a text below"), 110, 150 );
     dc.DrawRectangle( 110, y, 100, height );
 
     dc.DrawRectangle( 110, y, 100, height );
 
-    // twice drawn inverted should result in invisible
     y += height;
     y += height;
-    dc.DrawText( _T("Invisible text"), 110, y );
+    dc.DrawText( _T("Visible text"), 110, y );
     dc.DrawRectangle( 110, y, 100, height );
     dc.DrawRectangle( 110, y, 100, height );
-    dc.DrawText( _T("Invisible text"), 110, y );
+    dc.DrawText( _T("Visible text"), 110, y );
     dc.DrawRectangle( 110, y, 100, height );
     dc.SetLogicalFunction(wxCOPY);
 
     y += height;
     dc.DrawRectangle( 110, y, 100, height );
     dc.DrawRectangle( 110, y, 100, height );
     dc.SetLogicalFunction(wxCOPY);
 
     y += height;
     dc.DrawRectangle( 110, y, 100, height );
-    dc.DrawText( _T("Visible text"), 110, y );
+    dc.DrawText( _T("Another visible text"), 110, y );
 }
 
 static const struct
 {
     const wxChar *name;
 }
 
 static const struct
 {
     const wxChar *name;
-    int           rop;
+    wxRasterOperationMode rop;
 } rasterOperations[] =
 {
     { wxT("wxAND"),          wxAND           },
 } rasterOperations[] =
 {
     { wxT("wxAND"),          wxAND           },
@@ -1364,7 +1325,7 @@ void MyCanvas::DrawRegionsHelper(wxDC& dc, wxCoord x, bool firstTime)
     if ( !firstTime )
         region.Offset(10, 10);
 #endif
     if ( !firstTime )
         region.Offset(10, 10);
 #endif
-    dc.SetClippingRegion(region);
+    dc.SetDeviceClippingRegion(region);
 
     dc.SetBrush( *wxGREY_BRUSH );
     dc.DrawRectangle( x, y, 310, 310 );
 
     dc.SetBrush( *wxGREY_BRUSH );
     dc.DrawRectangle( x, y, 310, 310 );
@@ -1433,63 +1394,63 @@ void MyCanvas::OnPaint(wxPaintEvent &WXUNUSED(event))
 
     switch ( m_show )
     {
 
     switch ( m_show )
     {
-        case Show_Default:
+        case File_ShowDefault:
             DrawDefault(dc);
             break;
 
             DrawDefault(dc);
             break;
 
-        case Show_Circles:
+        case File_ShowCircles:
             DrawCircles(dc);
             break;
 
             DrawCircles(dc);
             break;
 
-        case Show_Splines:
+        case File_ShowSplines:
             DrawSplines(dc);
             break;
 
             DrawSplines(dc);
             break;
 
-        case Show_Regions:
+        case File_ShowRegions:
             DrawRegions(dc);
             break;
 
             DrawRegions(dc);
             break;
 
-        case Show_Text:
+        case File_ShowText:
             DrawText(dc);
             break;
 
             DrawText(dc);
             break;
 
-        case Show_Lines:
+        case File_ShowLines:
             DrawTestLines( 0, 100, 0, dc );
             DrawTestLines( 0, 320, 1, dc );
             DrawTestLines( 0, 540, 2, dc );
             DrawTestLines( 0, 760, 6, dc );
             break;
 
             DrawTestLines( 0, 100, 0, dc );
             DrawTestLines( 0, 320, 1, dc );
             DrawTestLines( 0, 540, 2, dc );
             DrawTestLines( 0, 760, 6, dc );
             break;
 
-        case Show_Brushes:
+        case File_ShowBrushes:
             DrawTestBrushes(dc);
             break;
 
             DrawTestBrushes(dc);
             break;
 
-        case Show_Polygons:
+        case File_ShowPolygons:
             DrawTestPoly(dc);
             break;
 
             DrawTestPoly(dc);
             break;
 
-        case Show_Mask:
+        case File_ShowMask:
             DrawImages(dc, Draw_Normal);
             break;
 
             DrawImages(dc, Draw_Normal);
             break;
 
-        case Show_Mask_Stretch:
+        case File_ShowMaskStretch:
             DrawImages(dc, Draw_Stretch);
             break;
 
             DrawImages(dc, Draw_Stretch);
             break;
 
-        case Show_Ops:
+        case File_ShowOps:
             DrawWithLogicalOps(dc);
             break;
 
 #if wxUSE_GRAPHICS_CONTEXT
             DrawWithLogicalOps(dc);
             break;
 
 #if wxUSE_GRAPHICS_CONTEXT
-        case Show_Alpha:
+        case File_ShowAlpha:
             DrawAlpha(dc);
             break;
             DrawAlpha(dc);
             break;
-        case Show_Graphics:
+        case File_ShowGraphics:
             DrawGraphics(gdc.GetGraphicsContext());
             break;
 #endif
 
             DrawGraphics(gdc.GetGraphicsContext());
             break;
 #endif
 
-        case Show_Gradient:
+        case File_ShowGradients:
             DrawGradients(dc);
             break;
 
             DrawGradients(dc);
             break;
 
@@ -1527,7 +1488,7 @@ void MyCanvas::OnMouseMove(wxMouseEvent &event)
 
         wxDCOverlay overlaydc( m_overlay, &dc );
         overlaydc.Clear();
 
         wxDCOverlay overlaydc( m_overlay, &dc );
         overlaydc.Clear();
-#if __WXMAC__
+#ifdef __WXMAC__
         dc.SetPen( *wxGREY_PEN );
         dc.SetBrush( wxColour( 192,192,192,64 ) );
 #else
         dc.SetPen( *wxGREY_PEN );
         dc.SetBrush( wxColour( 192,192,192,64 ) );
 #else
@@ -1556,6 +1517,7 @@ void MyCanvas::OnMouseUp(wxMouseEvent &event)
 {
     if ( m_rubberBand )
     {
 {
     if ( m_rubberBand )
     {
+        ReleaseMouse();
         {
             wxClientDC dc( this );
             PrepareDC( dc );
         {
             wxClientDC dc( this );
             PrepareDC( dc );
@@ -1613,7 +1575,7 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
     menuFile->Append(File_ShowPolygons, _T("&Polygons screen\tF5"));
     menuFile->Append(File_ShowMask, _T("&Mask screen\tF6"));
     menuFile->Append(File_ShowMaskStretch, _T("1/&2 scaled mask\tShift-F6"));
     menuFile->Append(File_ShowPolygons, _T("&Polygons screen\tF5"));
     menuFile->Append(File_ShowMask, _T("&Mask screen\tF6"));
     menuFile->Append(File_ShowMaskStretch, _T("1/&2 scaled mask\tShift-F6"));
-    menuFile->Append(File_ShowOps, _T("&ROP screen\tF7"));
+    menuFile->Append(File_ShowOps, _T("&Raster operations screen\tF7"));
     menuFile->Append(File_ShowRegions, _T("Re&gions screen\tF8"));
     menuFile->Append(File_ShowCircles, _T("&Circles screen\tF9"));
 #if wxUSE_GRAPHICS_CONTEXT
     menuFile->Append(File_ShowRegions, _T("Re&gions screen\tF8"));
     menuFile->Append(File_ShowCircles, _T("&Circles screen\tF9"));
 #if wxUSE_GRAPHICS_CONTEXT
@@ -1622,7 +1584,7 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
     menuFile->Append(File_ShowSplines, _T("&Splines screen\tF11"));
     menuFile->Append(File_ShowGradients, _T("&Gradients screen\tF12"));
 #if wxUSE_GRAPHICS_CONTEXT
     menuFile->Append(File_ShowSplines, _T("&Splines screen\tF11"));
     menuFile->Append(File_ShowGradients, _T("&Gradients screen\tF12"));
 #if wxUSE_GRAPHICS_CONTEXT
-     menuFile->Append(File_ShowGraphics, _T("&Graphics screen\tF13"));
+     menuFile->Append(File_ShowGraphics, _T("&Graphics screen"));
 #endif
     menuFile->AppendSeparator();
     menuFile->AppendCheckItem(File_Clip, _T("&Clip\tCtrl-C"), _T("Clip/unclip drawing"));
 #endif
     menuFile->AppendSeparator();
     menuFile->AppendCheckItem(File_Clip, _T("&Clip\tCtrl-C"), _T("Clip/unclip drawing"));
@@ -1738,7 +1700,7 @@ void MyFrame::OnGraphicContext(wxCommandEvent& event)
 
 void MyFrame::OnShow(wxCommandEvent& event)
 {
 
 void MyFrame::OnShow(wxCommandEvent& event)
 {
-    m_canvas->ToShow((ScreenToShow)(event.GetId() - MenuShow_First));
+    m_canvas->ToShow(event.GetId());
 }
 
 void MyFrame::OnOption(wxCommandEvent& event)
 }
 
 void MyFrame::OnOption(wxCommandEvent& event)