]> git.saurik.com Git - wxWidgets.git/commitdiff
Add wrappers for wxGraphicsPath and wxGraphicsContext. This is still
authorRobin Dunn <robin@alldunn.com>
Tue, 3 Oct 2006 21:36:33 +0000 (21:36 +0000)
committerRobin Dunn <robin@alldunn.com>
Tue, 3 Oct 2006 21:36:33 +0000 (21:36 +0000)
a work in progress.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41613 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

wxPython/setup.py
wxPython/src/_graphics.i [new file with mode: 0644]
wxPython/src/gdi.i

index d910f2a7ac7a26c3080b051f3c077ed4a63ab34f..43a2a37691e4275456e4b2715a32948657a7e373 100755 (executable)
@@ -193,6 +193,7 @@ swig_sources = run_swig(['gdi.i'], 'src', GENDIR, PKGDIR,
                          'src/_bitmap.i',
                          'src/_colour.i',
                          'src/_dc.i',
+                         'src/_graphics.i',
                          'src/_gdiobj.i',
                          'src/_imaglist.i',
                          'src/_region.i',
diff --git a/wxPython/src/_graphics.i b/wxPython/src/_graphics.i
new file mode 100644 (file)
index 0000000..848dc43
--- /dev/null
@@ -0,0 +1,450 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        _graphics.i
+// Purpose:     Wrapper definitions for wx.GraphicsPath, wx.GraphicsContext
+//
+// Author:      Robin Dunn
+//
+// Created:     2-Oct-2006
+// RCS-ID:      $Id$
+// Copyright:   (c) 2006 by Total Control Software
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+// Not a %module
+
+
+//---------------------------------------------------------------------------
+%newgroup
+
+%{
+#include <wx/graphics.h>
+%}    
+
+//---------------------------------------------------------------------------
+
+
+%{
+#if !wxUSE_GRAPHICS_CONTEXT
+// C++ stub classes for platforms that don't have wxGraphicsContext yet.
+
+class wxGraphicsPath
+{
+public :
+    wxGraphicsPath() {
+        wxPyBlock_t blocked = wxPyBeginBlockThreads();
+        PyErr_SetString(PyExc_NotImplementedError,
+                        "wxGraphicsPath is not available on this platform.");
+        wxPyEndBlockThreads(blocked);
+    }
+    virtual ~wxGraphicsPath() {}
+    
+    void MoveToPoint( wxDouble, wxDouble ) {}
+    void AddLineToPoint( wxDouble, wxDouble ) {} 
+    void AddCurveToPoint( wxDouble, wxDouble, wxDouble, wxDouble, wxDouble, wxDouble ) {}
+    void CloseSubpath() {}
+    void GetCurrentPoint( wxDouble&, wxDouble&) {}
+    void AddArc( wxDouble, wxDouble, wxDouble, wxDouble, wxDouble, bool ) {}
+
+    void AddQuadCurveToPoint( wxDouble, wxDouble, wxDouble, wxDouble ) {}
+    void AddRectangle( wxDouble, wxDouble, wxDouble, wxDouble ) {}
+    void AddCircle( wxDouble, wxDouble, wxDouble ) {}
+    void AddArcToPoint( wxDouble, wxDouble , wxDouble, wxDouble, wxDouble )  {}
+
+    wxPoint2DDouble GetCurrentPoint() { return wxPoint2DDouble(0,0); }
+    void MoveToPoint( const wxPoint2DDouble& ) {}
+    void AddLineToPoint( const wxPoint2DDouble&) {}
+    void AddCurveToPoint( const wxPoint2DDouble&, const wxPoint2DDouble&, const wxPoint2DDouble&) {}
+    void AddArc( const wxPoint2DDouble&, wxDouble, wxDouble, wxDouble, bool) {}
+};
+
+
+class wxGraphicsContext
+{
+public:
+    wxGraphicsContext() {
+        wxPyBlock_t blocked = wxPyBeginBlockThreads();
+        PyErr_SetString(PyExc_NotImplementedError,
+                        "wxGraphicsContext is not available on this platform.");
+        wxPyEndBlockThreads(blocked);
+    }
+    virtual ~wxGraphicsContext() {}
+    
+    static wxGraphicsContext* Create( const wxWindowDC&) {
+        wxPyBlock_t blocked = wxPyBeginBlockThreads();
+        PyErr_SetString(PyExc_NotImplementedError,
+                        "wxGraphicsPath is not available on this platform.");
+        wxPyEndBlockThreads(blocked);
+        return NULL;
+    }
+    
+    wxGraphicsPath * CreatePath() {}
+    void PushState() {}
+    void PopState() {}
+    void Clip( const wxRegion & ) {}
+    void Translate( wxDouble  , wxDouble  ) {}
+    void Scale( wxDouble  , wxDouble  ) {}
+    void Rotate( wxDouble  ) {}
+    void SetPen( const wxPen & ) {}
+    void SetBrush( const wxBrush & ) {}
+    void SetLinearGradientBrush( wxDouble , wxDouble , wxDouble , wxDouble , 
+        const wxColour&, const wxColour&) {}
+    void SetRadialGradientBrush( wxDouble , wxDouble , wxDouble , wxDouble , wxDouble ,
+        const wxColour &, const wxColour &) {}
+    void SetFont( const wxFont & ) {}
+    void SetTextColor( const wxColour & ) {}
+    void StrokePath( const wxGraphicsPath * ) {}
+    void FillPath( const wxGraphicsPath *, int  ) {}
+    void DrawPath( const wxGraphicsPath *, int  ) {}
+    void DrawText( const wxString &, wxDouble , wxDouble  ) {}
+    void DrawText( const wxString &, wxDouble , wxDouble , wxDouble  ) {}
+    void GetTextExtent( const wxString &, wxDouble *, wxDouble *,
+                        wxDouble *, wxDouble * ) const {}
+    void GetPartialTextExtents(const wxString& , wxArrayDouble& ) const {}
+    void DrawBitmap( const wxBitmap &, wxDouble , wxDouble , wxDouble , wxDouble  ) {}
+    void DrawIcon( const wxIcon &, wxDouble , wxDouble , wxDouble , wxDouble  ) {}
+    void StrokeLine( wxDouble , wxDouble , wxDouble , wxDouble ) {}
+    void StrokeLines( size_t , const wxPoint2DDouble *) {}
+    void StrokeLines( size_t , const wxPoint2DDouble *, const wxPoint2DDouble *) {}
+    void DrawLines( size_t , const wxPoint2DDouble *, int  ) {}
+    void DrawRectangle( wxDouble , wxDouble , wxDouble , wxDouble ) {}
+    void DrawEllipse( wxDouble , wxDouble,  wxDouble , wxDouble) {}
+    void DrawRoundedRectangle( wxDouble , wxDouble , wxDouble , wxDouble , wxDouble ) {}
+};
+
+
+class wxGCDC: public wxWindowDC
+{
+public:
+    wxGCDC(const wxWindowDC&) {
+        wxPyBlock_t blocked = wxPyBeginBlockThreads();
+        PyErr_SetString(PyExc_NotImplementedError,
+                        "wxGCDC is not available on this platform.");
+        wxPyEndBlockThreads(blocked);
+     }
+    
+    wxGCDC() {
+        wxPyBlock_t blocked = wxPyBeginBlockThreads();
+        PyErr_SetString(PyExc_NotImplementedError,
+                        "wxGCDC is not available on this platform.");
+        wxPyEndBlockThreads(blocked);
+    }
+    
+    virtual ~wxGCDC() {}
+
+    wxGraphicsContext* GetGraphicContext() { return NULL; }
+};
+
+#endif
+%}
+
+//---------------------------------------------------------------------------
+//---------------------------------------------------------------------------
+
+MustHaveApp(wxGraphicsPath);
+MustHaveApp(wxGraphicsContext);
+MustHaveApp(wxGCDC);
+
+//#define wxDouble double
+typedef double wxDouble;
+
+
+// TODO:  Decide which of the overloaded methods should use the primary names
+
+class wxGraphicsPath
+{
+public :
+    //wxGraphicsPath();            *** This class is an ABC, so we can't allow instances to be created directly
+    virtual ~wxGraphicsPath();
+    
+
+    DocDeclStr(
+        virtual void , MoveToPoint( wxDouble x, wxDouble y ),
+        "Begins a new subpath at (x,y)", "");
+//    void MoveToPoint( const wxPoint2D& p);
+    
+
+    DocDeclStr(
+        virtual void , AddLineToPoint( wxDouble x, wxDouble y ),
+        "Adds a straight line from the current point to (x,y) ", "");
+//    void AddLineToPoint( const wxPoint2D& p);
+    
+
+    DocDeclStr(
+        virtual void , AddCurveToPoint( wxDouble cx1, wxDouble cy1,
+                                        wxDouble cx2, wxDouble cy2,
+                                        wxDouble x, wxDouble y ),
+        "Adds a cubic Bezier curve from the current point, using two control
+points and an end point", "");
+//    void AddCurveToPoint( const wxPoint2D& c1, const wxPoint2D& c2, const wxPoint2D& e);
+    
+
+    DocDeclStr(
+        virtual void , CloseSubpath(),
+        "closes the current sub-path", "");
+    
+
+    //virtual void , GetCurrentPoint( wxDouble& x, wxDouble&y),
+    DocDeclStr(
+        wxPoint2D , GetCurrentPoint(),
+        "Gets the last point of the current path, (0,0) if not yet set", "");
+    
+
+    DocDeclStr(
+        virtual void , AddArc( wxDouble x, wxDouble y, wxDouble r,
+                               wxDouble startAngle, wxDouble endAngle, bool clockwise ),
+        "Adds an arc of a circle centering at (x,y) with radius (r) from
+startAngle to endAngle", "");
+//    void AddArc( const wxPoint2D& c, wxDouble r, wxDouble startAngle, wxDouble endAngle, bool clockwise);
+  
+
+    DocDeclStr(
+        virtual void , AddQuadCurveToPoint( wxDouble cx, wxDouble cy, wxDouble x, wxDouble y ),
+        "Adds a quadratic Bezier curve from the current point, using a control
+point and an end point", "");
+    
+
+    DocDeclStr(
+        virtual void , AddRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h ),
+        "Appends a rectangle as a new closed subpath", "");
+    
+
+    DocDeclStr(
+        virtual void , AddCircle( wxDouble x, wxDouble y, wxDouble r ),
+        "Appends an ellipsis as a new closed subpath fitting the passed rectangle", "");
+    
+
+    DocDeclStr(
+        virtual void , AddArcToPoint( wxDouble x1, wxDouble y1 , wxDouble x2, wxDouble y2, wxDouble r ) ,
+        "Draws a an arc to two tangents connecting (current) to (x1,y1) and (x1,y1)
+to (x2,y2), also a straight line from (current) to (x1,y1)", "");
+    
+
+};
+
+//---------------------------------------------------------------------------
+
+
+class wxGraphicsContext
+{
+public:
+    // wxGraphicsContext()         This is also an ABC, use Create to make an instance...
+    virtual ~wxGraphicsContext();
+    
+    static wxGraphicsContext* Create( const wxWindowDC& dc);
+
+    // creates a path instance that corresponds to the type of graphics context, ie GDIPlus, cairo, CoreGraphics ...
+    DocDeclStr(
+        virtual wxGraphicsPath * , CreatePath(),
+        "", "");
+    
+
+    // push the current state of the context, ie the transformation matrix on a stack
+    DocDeclStr(
+        virtual void , PushState(),
+        "", "");
+    
+
+    // pops a stored state from the stack
+    DocDeclStr(
+        virtual void , PopState(),
+        "", "");
+    
+
+    // clips drawings to the region
+    DocDeclStr(
+        virtual void , Clip( const wxRegion &region ),
+        "", "");
+    
+
+    //
+    // transformation
+    //
+    
+    // translate
+    DocDeclStr(
+        virtual void , Translate( wxDouble dx , wxDouble dy ),
+        "", "");
+    
+
+    // scale
+    DocDeclStr(
+        virtual void , Scale( wxDouble xScale , wxDouble yScale ),
+        "", "");
+    
+
+    // rotate (radians)
+    DocDeclStr(
+        virtual void , Rotate( wxDouble angle ),
+        "", "");
+    
+
+    //
+    // setting the paint
+    //
+    
+    // sets the pan
+    DocDeclStr(
+        virtual void , SetPen( const wxPen &pen ),
+        "", "");
+    
+
+    // sets the brush for filling
+    DocDeclStr(
+        virtual void , SetBrush( const wxBrush &brush ),
+        "", "");
+    
+
+    // sets the brush to a linear gradient, starting at (x1,y1) with color c1 to (x2,y2) with color c2
+    DocDeclStr(
+        virtual void , SetLinearGradientBrush( wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2, 
+                                               const wxColour&c1, const wxColour&c2),
+        "", "");
+    
+
+    // sets the brush to a radial gradient originating at (xo,yc) with color oColor and ends on a circle around (xc,yc) 
+    // with radius r and color cColor
+    DocDeclStr(
+        virtual void , SetRadialGradientBrush( wxDouble xo, wxDouble yo, wxDouble xc, wxDouble yc,
+                                               wxDouble radius,
+                                               const wxColour &oColor, const wxColour &cColor),
+        "", "");
+    
+
+    // sets the font
+    DocDeclStr(
+        virtual void , SetFont( const wxFont &font ),
+        "", "");
+    
+    
+    // sets the text color
+    DocDeclStr(
+        virtual void , SetTextColor( const wxColour &col ),
+        "", "");
+    
+
+    // strokes along a path with the current pen
+    DocDeclStr(
+        virtual void , StrokePath( const wxGraphicsPath *path ),
+        "", "");
+    
+
+    // fills a path with the current brush
+    DocDeclStr(
+        virtual void , FillPath( const wxGraphicsPath *path, int fillStyle = wxWINDING_RULE ),
+        "", "");
+    
+
+    // draws a path by first filling and then stroking
+    DocDeclStr(
+        virtual void , DrawPath( const wxGraphicsPath *path, int fillStyle = wxWINDING_RULE ),
+        "", "");
+    
+
+    //
+    // text
+    //
+    
+    DocDeclStr(
+        virtual void , DrawText( const wxString &str, wxDouble x, wxDouble y ),
+        "", "");
+    
+
+    DocDeclStr(
+        virtual void , DrawText( const wxString &str, wxDouble x, wxDouble y, wxDouble angle ),
+        "", "");
+    
+
+    DocDeclStr(
+        virtual void , GetTextExtent( const wxString &text,
+                                      wxDouble *OUTPUT /*width*/,
+                                      wxDouble *OUTPUT /*height*/,
+                                      wxDouble *OUTPUT /*descent*/,
+                                      wxDouble *OUTPUT /*externalLeading*/ ) const ,
+        "", "");
+    
+
+    DocDeclStr(
+        virtual void , GetPartialTextExtents(const wxString& text, wxArrayDouble& widths) const,
+        "", "");
+    
+
+    //
+    // image support
+    //
+
+    DocDeclStr(
+        virtual void , DrawBitmap( const wxBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h ),
+        "", "");
+    
+
+    DocDeclStr(
+        virtual void , DrawIcon( const wxIcon &icon, wxDouble x, wxDouble y, wxDouble w, wxDouble h ),
+        "", "");
+    
+
+    //
+    // convenience methods
+    //
+    
+    // strokes a single line
+    DocDeclStr(
+        virtual void , StrokeLine( wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2),
+        "", "");
+    
+
+    // stroke lines connecting each of the points
+    DocDeclStr(
+        virtual void , StrokeLines( size_t n, const wxPoint2D *points),
+        "", "");
+    
+
+    // stroke disconnected lines from begin to end points
+    DocDeclStr(
+        virtual void , StrokeLines( size_t n, const wxPoint2D *beginPoints, const wxPoint2D *endPoints),
+        "", "");
+    
+
+    // draws a polygon
+    DocDeclStr(
+        virtual void , DrawLines( size_t n, const wxPoint2D *points, int fillStyle = wxWINDING_RULE ),
+        "", "");
+    
+
+    // draws a polygon
+    DocDeclStr(
+        virtual void , DrawRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h),
+        "", "");
+    
+
+    // draws an ellipse
+    DocDeclStr(
+        virtual void , DrawEllipse( wxDouble x, wxDouble y, wxDouble w, wxDouble h),
+        "", "");
+    
+
+    // draws a rounded rectangle
+    DocDeclStr(
+        virtual void , DrawRoundedRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h, wxDouble radius),
+        "", "");
+    
+
+};
+
+
+//---------------------------------------------------------------------------
+
+
+class wxGCDC: public wxDC
+{
+public:
+    wxGCDC(const wxWindowDC& dc);
+    //wxGCDC();
+    virtual ~wxGCDC();
+
+    wxGraphicsContext* GetGraphicContext();
+};
+
+
+
+
+//---------------------------------------------------------------------------
index fe351aebe31d7d4f59e9d30f1cd14e3ce961296f..b2a8343930572362b5fc0fe2f480c153f5aa9b3c 100644 (file)
@@ -42,6 +42,7 @@ MAKE_CONST_WXSTRING_NOSWIG(EmptyString);
 %include _font.i
 %include _intl.i
 %include _dc.i
+%include _graphics.i
 %include _imaglist.i
 %include _stockobjs.i
 %include _effects.i