1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Wrapper definitions for wx.GraphicsPath, wx.GraphicsContext
9 // Copyright: (c) 2006 by Total Control Software
10 // Licence: wxWindows license
11 /////////////////////////////////////////////////////////////////////////////
16 //---------------------------------------------------------------------------
20 #include <wx/graphics.h>
23 // Turn off the aquisition of the Global Interpreter Lock for the classes and
24 // functions in this file
28 //---------------------------------------------------------------------------
29 //---------------------------------------------------------------------------
32 #if !wxUSE_GRAPHICS_CONTEXT
33 // C++ stub classes for platforms or build configurations that don't have
34 // wxGraphicsContext yet.
37 class wxGraphicsObject : public wxObject
40 wxGraphicsObject( wxGraphicsRenderer* ) {
41 PyErr_SetString(PyExc_NotImplementedError,
42 "wx.GraphicsObject is not available on this platform.");
44 wxGraphicsObject( const wxGraphicsObject& ) {}
45 virtual ~wxGraphicsObject() {}
46 bool IsNull() const { return false; }
47 wxGraphicsRenderer* GetRenderer() const { return NULL; }
52 class wxGraphicsPen : public wxGraphicsObject
55 virtual ~wxGraphicsPen() {}
57 wxGraphicsPen wxNullGraphicsPen;
61 class wxGraphicsBrush : public wxGraphicsObject
65 virtual ~wxGraphicsBrush() {}
67 wxGraphicsBrush wxNullGraphicsBrush;
71 class wxGraphicsFont : public wxGraphicsObject
75 virtual ~wxGraphicsFont() {}
77 wxGraphicsFont wxNullGraphicsFont;
81 class wxGraphicsPath : public wxGraphicsObject
84 wxGraphicsPath(wxGraphicsRenderer* ) {
85 PyErr_SetString(PyExc_NotImplementedError,
86 "wx.GraphicsPath is not available on this platform.");
88 virtual ~wxGraphicsPath() {}
90 void MoveToPoint( wxDouble, wxDouble ) {}
91 void MoveToPoint( const wxPoint2DDouble& ) {}
92 void AddLineToPoint( wxDouble, wxDouble ) {}
93 void AddLineToPoint( const wxPoint2DDouble& ) {}
94 void AddCurveToPoint( wxDouble, wxDouble, wxDouble, wxDouble, wxDouble, wxDouble ) {}
95 void AddCurveToPoint( const wxPoint2DDouble&, const wxPoint2DDouble&, const wxPoint2DDouble&) {}
96 void AddPath( const wxGraphicsPath* ) {}
97 void CloseSubpath() {}
98 void GetCurrentPoint( wxDouble&, wxDouble&) {}
99 wxPoint2DDouble GetCurrentPoint() { reutrn wxPoint2D(0,0); }
100 void AddArc( wxDouble, wxDouble, wxDouble, wxDouble, wxDouble, bool ) {}
101 void AddArc( const wxPoint2DDouble& , wxDouble, wxDouble , wxDouble , bool ) {}
103 void AddQuadCurveToPoint( wxDouble, wxDouble, wxDouble, wxDouble ) {}
104 void AddRectangle( wxDouble, wxDouble, wxDouble, wxDouble ) {}
105 void AddCircle( wxDouble, wxDouble, wxDouble ) {}
106 void AddArcToPoint( wxDouble, wxDouble , wxDouble, wxDouble, wxDouble ) {}
108 void AddEllipse( wxDouble , wxDouble , wxDouble , wxDouble ) {}
109 void AddRoundedRectangle( wxDouble , wxDouble , wxDouble , wxDouble , wxDouble ) {}
110 void * GetNativePath() const { return NULL; }
111 void UnGetNativePath(void *) {}
112 void Transform( wxGraphicsMatrix* ) {}
113 void GetBox(wxDouble *, wxDouble *, wxDouble *, wxDouble *) {}
114 wxRect2D GetBox() { return wxRect2D(0,0,0,0); }
116 bool Contains( wxDouble , wxDouble , int ) { return false; }
117 bool Contains( const wxPoint2DDouble& , int ) { return false; }
119 wxGraphicsPath wxNullGraphicsPath;
122 class wxGraphicsMatrix : public wxGraphicsObject
125 wxGraphicsMatrix(wxGraphicsRenderer* ) {
126 PyErr_SetString(PyExc_NotImplementedError,
127 "wx.GraphicsMatrix is not available on this platform.");
129 virtual ~wxGraphicsMatrix() {}
130 virtual void Concat( const wxGraphicsMatrix * ) {}
131 virtual void Copy( const wxGraphicsMatrix * ) {}
132 virtual void Set(wxDouble , wxDouble , wxDouble , wxDouble ,
133 wxDouble , wxDouble ) {}
134 virtual void Invert() {}
135 virtual bool IsEqual( const wxGraphicsMatrix* t) const {}
136 virtual bool IsIdentity() { return false; }
137 virtual void Translate( wxDouble , wxDouble ) {}
138 virtual void Scale( wxDouble , wxDouble ) {}
139 virtual void Rotate( wxDouble ) {}
140 virtual void TransformPoint( wxDouble *, wxDouble * ) {}
141 virtual void TransformDistance( wxDouble *, wxDouble * ) {}
142 virtual void * GetNativeMatrix() const { return NULL; }
144 wxGraphicsMatrix wxNullGraphicsMatrix;
147 class wxGraphicsContext : public wxGraphicsObject
151 wxGraphicsContext(wxGraphicsRenderer* ) {
152 PyErr_SetString(PyExc_NotImplementedError,
153 "wx.GraphicsContext is not available on this platform.");
156 virtual ~wxGraphicsContext() {}
158 static wxGraphicsContext* Create( const wxWindowDC& ) {
159 PyErr_SetString(PyExc_NotImplementedError,
160 "wx.GraphicsContext is not available on this platform.");
163 static wxGraphicsContext* CreateFromNative( void * ) {
164 PyErr_SetString(PyExc_NotImplementedError,
165 "wx.GraphicsContext is not available on this platform.");
168 static wxGraphicsContext* CreateFromNativeWindow( void * ) {
169 PyErr_SetString(PyExc_NotImplementedError,
170 "wx.GraphicsContext is not available on this platform.");
173 static wxGraphicsContext* Create( wxWindow* ) {
174 PyErr_SetString(PyExc_NotImplementedError,
175 "wx.GraphicsContext is not available on this platform.");
178 wxGraphicsPath * CreatePath() { return NULL; }
180 virtual wxGraphicsPen CreatePen(const wxPen& ) { return NULL; }
182 virtual wxGraphicsBrush CreateBrush(const wxBrush& ) { return NULL; }
184 virtual wxGraphicsBrush CreateLinearGradientBrush( wxDouble , wxDouble , wxDouble , wxDouble ,
185 const wxColour&, const wxColour&) { return NULL; }
187 virtual wxGraphicsBrush CreateRadialGradientBrush( wxDouble xo, wxDouble yo,
188 wxDouble xc, wxDouble yc, wxDouble radius,
189 const wxColour &oColor, const wxColour &cColor) { return NULL; }
191 virtual wxGraphicsFont CreateFont( const wxFont &, const wxColour & ) { return NULL; }
193 virtual wxGraphicsMatrix* CreateMatrix( wxDouble, wxDouble, wxDouble, wxDouble,
194 wxDouble, wxDouble) { return NULL; }
196 virtual void PushState() {}
197 virtual void PopState() {}
198 virtual void Clip( const wxRegion & ) {}
199 virtual void Clip( wxDouble , wxDouble , wxDouble , wxDouble ) {}
200 virtual void ResetClip() {}
201 virtual void * GetNativeContext() { return NULL; }
202 virtual void Translate( wxDouble , wxDouble ) {}
203 virtual void Scale( wxDouble , wxDouble ) {}
204 virtual void Rotate( wxDouble ) {}
205 virtual void ConcatTransform( const wxGraphicsMatrix* ) {}
206 virtual void SetTransform( const wxGraphicsMatrix* ) {}
207 virtual void GetTransform( wxGraphicsMatrix* ) {}
209 virtual void SetPen( const wxGraphicsPen& ) {}
210 void SetPen( const wxPen& ) {}
212 virtual void SetBrush( const wxGraphicsBrush& ) {}
213 void SetBrush( const wxBrush& ) {}
215 virtual void SetFont( const wxGraphicsFont& ) {}
216 void SetFont( const wxFont&, const wxColour& ) {}
218 virtual void StrokePath( const wxGraphicsPath * ) {}
219 virtual void FillPath( const wxGraphicsPath *, int ) {}
220 virtual void DrawPath( const wxGraphicsPath *, int ) {}
222 virtual void DrawText( const wxString &, wxDouble , wxDouble ) {}
223 virtual void DrawText( const wxString &, wxDouble , wxDouble , wxDouble ) {}
224 virtual void GetTextExtent( const wxString &, wxDouble *, wxDouble *,
225 wxDouble *, wxDouble * ) const {}
226 virtual void GetPartialTextExtents(const wxString& , wxArrayDouble& ) const {}
228 virtual void DrawBitmap( const wxBitmap &, wxDouble , wxDouble , wxDouble , wxDouble ) {}
229 virtual void DrawIcon( const wxIcon &, wxDouble , wxDouble , wxDouble , wxDouble ) {}
231 virtual void StrokeLine( wxDouble , wxDouble , wxDouble , wxDouble ) {}
232 virtual void StrokeLines( size_t , const wxPoint2DDouble *) {}
233 virtual void StrokeLines( size_t , const wxPoint2DDouble *, const wxPoint2DDouble *) {}
234 virtual void DrawLines( size_t , const wxPoint2DDouble *, int ) {}
235 virtual void DrawRectangle( wxDouble , wxDouble , wxDouble , wxDouble ) {}
236 virtual void DrawEllipse( wxDouble , wxDouble , wxDouble , wxDouble ) {}
237 virtual void DrawRoundedRectangle( wxDouble wxDouble , wxDouble , wxDouble , wxDouble ) {}
238 virtual bool ShouldOffset() const { return false; }
242 class wxGraphicsRenderer : public wxObject
245 wxGraphicsRenderer() {
246 PyErr_SetString(PyExc_NotImplementedError,
247 "wx.GraphicsRenderer is not available on this platform.");
250 virtual ~wxGraphicsRenderer() {}
252 static wxGraphicsRenderer* GetDefaultRenderer(
253 PyErr_SetString(PyExc_NotImplementedError,
254 "wx.GraphicsRenderer is not available on this platform.");
257 virtual wxGraphicsContext * CreateContext( const wxWindowDC& ) { return NULL; }
258 virtual wxGraphicsContext * CreateContextFromNativeContext( void * ) { return NULL; }
259 virtual wxGraphicsContext * CreateContextFromNativeWindow( void * ) { return NULL; }
260 virtual wxGraphicsContext * CreateContext( wxWindow* ) { return NULL; }
262 virtual wxGraphicsPath * CreatePath() { return NULL; }
264 virtual wxGraphicsMatrix * CreateMatrix( wxDouble , wxDouble , wxDouble , wxDouble ,
265 wxDouble , wxDouble ) { return NULL; }
267 virtual wxGraphicsPen CreatePen(const wxPen& ) { return wxNullGaphicsPen; }
268 virtual wxGraphicsBrush CreateBrush(const wxBrush& ) { return wxNullGaphicsBrush; }
269 virtual wxGraphicsBrush CreateLinearGradientBrush(xDouble , wxDouble , wxDouble , wxDouble ,
270 const wxColour&, const wxColour&) { return wxNullGaphicsBrush; }
271 virtual wxGraphicsBrush CreateRadialGradientBrush(wxDouble , wxDouble , wxDouble , wxDouble , wxDouble ,
272 const wxColour &, const wxColour &) { return wxNullGaphicsBrush; }
273 virtual wxGraphicsFont CreateFont( const wxFont & , const wxColour & ) { return wxNullGaphicsFont; }
278 class wxGCDC: public wxWindowDC
281 wxGCDC(const wxWindowDC&) {
282 wxPyBlock_t blocked = wxPyBeginBlockThreads();
283 PyErr_SetString(PyExc_NotImplementedError,
284 "wxGCDC is not available on this platform.");
285 wxPyEndBlockThreads(blocked);
289 wxPyBlock_t blocked = wxPyBeginBlockThreads();
290 PyErr_SetString(PyExc_NotImplementedError,
291 "wxGCDC is not available on this platform.");
292 wxPyEndBlockThreads(blocked);
297 wxGraphicsContext* GetGraphicsContext() { return NULL; }
298 void SetGraphicsContext( wxGraphicsContext* ) {}
304 //---------------------------------------------------------------------------
305 //---------------------------------------------------------------------------
308 %typemap(in) (size_t points, wxPoint2D* points_array ) {
309 $2 = wxPoint2D_LIST_helper($input, &$1);
310 if ($2 == NULL) SWIG_fail;
312 %typemap(freearg) (size_t points, wxPoint2D* points_array ) {
313 if ($2) delete [] $2;
318 MustHaveApp(wxGraphicsPath);
319 MustHaveApp(wxGraphicsContext);
322 typedef double wxDouble;
325 //---------------------------------------------------------------------------
328 DocStr(wxGraphicsObject,
329 "This class is the superclass of native graphics objects like pens
330 etc. It provides the internal reference counting. It is not to be
331 instantiated by user code.", "");
332 class wxGraphicsObject : public wxObject
335 wxGraphicsObject( wxGraphicsRenderer* renderer = NULL );
336 virtual ~wxGraphicsObject();
339 bool , IsNull() const ,
340 "Is this object valid (false) or still empty (true)?", "");
343 wxGraphicsRenderer* , GetRenderer() const,
344 "Returns the renderer that was used to create this instance, or
345 ``None`` if it has not been initialized yet.", "");
350 DocStr(wxGraphicsPen,
351 "A wx.GraphicsPen is a native representation of a pen. It is used for
352 stroking a path on a `wx.GraphicsContext`. The contents are specific and
353 private to the respective renderer. The only way to get a valid instance
354 is via a CreatePen call on the graphics context or the renderer
356 class wxGraphicsPen : public wxGraphicsObject
360 virtual ~wxGraphicsPen();
363 DocStr(wxGraphicsBrush,
364 "A wx.GraphicsBrush is a native representation of a brush. It is used
365 for filling a path on a `wx.GraphicsContext`. The contents are
366 specific and private to the respective renderer. The only way to get a
367 valid instance is via a Create...Brush call on the graphics context or
368 the renderer instance.", "");
369 class wxGraphicsBrush : public wxGraphicsObject
373 virtual ~wxGraphicsBrush();
377 DocStr(wxGraphicsFont,
378 "A `wx.GraphicsFont` is a native representation of a font (including
379 text colour). The contents are specific an private to the respective
380 renderer. The only way to get a valid instance is via a CreateFont
381 call on the graphics context or the renderer instance.", "");
382 class wxGraphicsFont : public wxGraphicsObject
386 virtual ~wxGraphicsFont();
390 //---------------------------------------------------------------------------
392 DocStr(wxGraphicsMatrix,
393 "A wx.GraphicsMatrix is a native representation of an affine
394 matrix. The contents are specific an private to the respective
395 renderer. The only way to get a valid instance is via a CreateMatrix
396 call on the graphics context or the renderer instance.", "");
397 class wxGraphicsMatrix : public wxGraphicsObject
401 virtual ~wxGraphicsMatrix();
404 virtual void , Concat( const wxGraphicsMatrix& t ),
405 "Concatenates the passed in matrix to the current matrix.", "");
409 // "Copy the passed in matrix to this one.", "");
410 // void Copy( const wxGraphicsMatrix& t ) {
417 virtual void , Set(wxDouble a=1.0, wxDouble b=0.0, wxDouble c=0.0, wxDouble d=1.0,
418 wxDouble tx=0.0, wxDouble ty=0.0),
419 "Sets the matrix to the specified values (default values are the
420 identity matrix.)", "");
424 virtual void , Invert(),
425 "Inverts the matrix.", "");
429 virtual bool , IsEqual( const wxGraphicsMatrix& t) const,
430 "Returns ``True`` if the elements of the transformation matrix are equal", "");
434 virtual bool , IsIdentity() const,
435 "Returns ``True`` if this is the identity matrix", "");
439 virtual void , Translate( wxDouble dx , wxDouble dy ),
440 "Add a translation to this matrix.", "");
444 virtual void , Scale( wxDouble xScale , wxDouble yScale ),
445 "Scales this matrix.", "");
449 virtual void , Rotate( wxDouble angle ),
450 "Rotates this matrix. The angle should be specified in radians.", "");
454 virtual void , TransformPoint( wxDouble *INOUT, wxDouble *INOUT ) const,
455 "TransformPoint(self, x, y) --> (x, y)",
456 "Applies this matrix to a point, returns the resulting point values", "");
460 virtual void , TransformDistance( wxDouble *INOUT, wxDouble *INOUT ) const,
461 "TransformDistance(self, dx, dy) --> (dx, dy)",
462 "Applies this matrix to a distance (ie. performs all transforms except
467 virtual void * , GetNativeMatrix() const,
468 "Returns the native representation of the matrix. For CoreGraphics this
469 is a CFAffineMatrix pointer. For GDIPlus a Matrix Pointer and for
470 Cairo a cairo_matrix_t pointer. NOTE: For wxPython we still need a
471 way to make this value usable.", "");
474 //---------------------------------------------------------------------------
476 class wxGraphicsPath : public wxGraphicsObject
480 virtual ~wxGraphicsPath();
483 %nokwargs MoveToPoint;
485 "Begins a new subpath at the specified point.", "");
486 virtual void MoveToPoint( wxDouble x, wxDouble y );
487 void MoveToPoint( const wxPoint2D& p);
490 %nokwargs AddLineToPoint;
491 DocStr(AddLineToPoint,
492 "Adds a straight line from the current point to the specified point.", "");
493 virtual void AddLineToPoint( wxDouble x, wxDouble y );
494 void AddLineToPoint( const wxPoint2D& p);
497 %nokwargs AddCurveToPoint;
498 DocStr(AddCurveToPoint,
499 "Adds a cubic Bezier curve from the current point, using two control
500 points and an end point", "");
501 virtual void AddCurveToPoint( wxDouble cx1, wxDouble cy1,
502 wxDouble cx2, wxDouble cy2,
503 wxDouble x, wxDouble y );
504 void AddCurveToPoint( const wxPoint2D& c1, const wxPoint2D& c2, const wxPoint2D& e);
509 virtual void , AddPath( const wxGraphicsPath& path ),
510 "Adds another path", "");
514 virtual void , CloseSubpath(),
515 "Closes the current sub-path.", "");
519 wxPoint2D , GetCurrentPoint() const,
520 "Gets the last point of the current path, (0,0) if not yet set", "");
525 "Adds an arc of a circle centering at (x,y) with radius (r) from
526 startAngle to endAngle", "");
527 virtual void AddArc( wxDouble x, wxDouble y, wxDouble r,
528 wxDouble startAngle, wxDouble endAngle, bool clockwise );
529 void AddArc( const wxPoint2D& c, wxDouble r, wxDouble startAngle, wxDouble endAngle, bool clockwise);
533 virtual void , AddQuadCurveToPoint( wxDouble cx, wxDouble cy, wxDouble x, wxDouble y ),
534 "Adds a quadratic Bezier curve from the current point, using a control
535 point and an end point", "");
539 virtual void , AddRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h ),
540 "Appends a rectangle as a new closed subpath.", "");
544 virtual void , AddCircle( wxDouble x, wxDouble y, wxDouble r ),
545 "Appends a circle around (x,y) with radius r as a new closed subpath.", "");
549 virtual void , AddArcToPoint( wxDouble x1, wxDouble y1 , wxDouble x2, wxDouble y2, wxDouble r ) ,
550 "Appends an arc to two tangents connecting (current) to (x1,y1) and (x1,y1)
551 to (x2,y2), also a straight line from (current) to (x1,y1)", "");
555 virtual void , AddEllipse( wxDouble x, wxDouble y, wxDouble w, wxDouble h),
556 "Appends an ellipse fitting into the passed in rectangle.", "");
560 virtual void , AddRoundedRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h, wxDouble radius),
561 "Appends a rounded rectangle.", "");
565 virtual void * , GetNativePath() const,
566 "Returns the native path (CGPathRef for Core Graphics, Path pointer for
567 GDIPlus and a cairo_path_t pointer for cairo). NOTE: For wxPython we
568 still need a way to make this value usable.", "");
572 virtual void , UnGetNativePath(void *p) const,
573 "Gives back the native path returned by GetNativePath() because there
574 might be some deallocations necessary (eg on cairo the native path
575 returned by GetNativePath is newly allocated each time).", "");
579 virtual void , Transform( const wxGraphicsMatrix& matrix ),
580 "Transforms each point of this path by the matrix", "");
584 wxRect2DDouble , GetBox() const,
585 "Gets the bounding box enclosing all points (possibly including control points)", "");
590 "Returns ``True`` if the point is within the path.", "");
591 virtual bool Contains( wxDouble x, wxDouble y, int fillStyle = wxODDEVEN_RULE) const;
592 bool Contains( const wxPoint2DDouble& c, int fillStyle = wxODDEVEN_RULE) const;
597 //---------------------------------------------------------------------------
600 const wxGraphicsPen wxNullGraphicsPen;
601 const wxGraphicsBrush wxNullGraphicsBrush;
602 const wxGraphicsFont wxNullGraphicsFont;
603 const wxGraphicsMatrix wxNullGraphicsMatrix;
604 const wxGraphicsPath wxNullGraphicsPath;
607 //---------------------------------------------------------------------------
609 DocStr(wxGraphicsContext,
610 "A `wx.GraphicsContext` instance is the object that is drawn upon. It is
611 created by a renderer using the CreateContext calls, this can be done
612 either directly using a renderer instance, or indirectly using the
613 static convenience CreateXXX functions of wx.GraphicsContext that
614 always delegate the task to the default renderer.", "");
616 class wxGraphicsContext : public wxGraphicsObject
619 //wxGraphicsContext(); This is an ABC, use Create to make an instance...
620 virtual ~wxGraphicsContext();
625 "val.__dc = args[0] # save a ref so the dc will not be deleted before self";
627 "Creates a wx.GraphicsContext either from a window or a DC.", "");
628 static wxGraphicsContext* Create( const wxWindowDC& dc);
629 static wxGraphicsContext* Create( wxWindow* window ) ;
632 %newobject CreateFromNative;
634 static wxGraphicsContext* , CreateFromNative( void * context ) ,
635 "Creates a wx.GraphicsContext from a native context. This native context
636 must be eg a CGContextRef for Core Graphics, a Graphics pointer for
637 GDIPlus or a cairo_t pointer for Cairo.", "");
640 %newobject CreateFromNative;
642 static wxGraphicsContext* , CreateFromNativeWindow( void * window ) ,
643 "Creates a wx.GraphicsContext from a native window.", "");
648 virtual wxGraphicsPath , CreatePath(),
649 "Creates a native graphics path which is initially empty.", "");
653 virtual wxGraphicsPen , CreatePen(const wxPen& pen),
654 "Creates a native pen from a `wx.Pen`.", "");
658 virtual wxGraphicsBrush , CreateBrush(const wxBrush& brush ),
659 "Creates a native brush from a `wx.Brush`.", "");
663 virtual wxGraphicsBrush ,
664 CreateLinearGradientBrush( wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2,
665 const wxColour& c1, const wxColour& c2),
666 "Creates a native brush, having a linear gradient, starting at (x1,y1)
667 with color c1 to (x2,y2) with color c2.", "");
671 virtual wxGraphicsBrush ,
672 CreateRadialGradientBrush( wxDouble xo, wxDouble yo, wxDouble xc, wxDouble yc, wxDouble radius,
673 const wxColour &oColor, const wxColour &cColor),
674 "Creates a native brush, having a radial gradient originating at
675 point (xo,yc) with color oColour and ends on a circle around (xc,yc) with
676 radius r and color cColour.", "");
680 virtual wxGraphicsFont , CreateFont( const wxFont &font , const wxColour &col = *wxBLACK ),
681 "Creates a native graphics font from a `wx.Font` and a text colour.", "");
685 virtual wxGraphicsMatrix , CreateMatrix( wxDouble a=1.0, wxDouble b=0.0,
686 wxDouble c=0.0, wxDouble d=1.0,
687 wxDouble tx=0.0, wxDouble ty=0.0),
688 "Creates a native affine transformation matrix from the passed in
689 values. The defaults result in an identity matrix.", "");
694 virtual void , PushState(),
695 "push the current state of the context, ie the transformation matrix on a stack", "");
699 virtual void , PopState(),
700 "pops a stored state from the stack", "");
704 virtual void , Clip( const wxRegion ®ion ),
705 "Clips drawings to the region, combined to current clipping region.", "",
710 virtual void , Clip( wxDouble x, wxDouble y, wxDouble w, wxDouble h ),
711 "Clips drawings to the rectangle.", "");
715 virtual void , ResetClip(),
716 "Resets the clipping to original shape.", "");
720 virtual void * , GetNativeContext(),
721 "Returns the native context (CGContextRef for Core Graphics, Graphics
722 pointer for GDIPlus and cairo_t pointer for cairo).", "");
726 virtual void , Translate( wxDouble dx , wxDouble dy ),
727 "Translates the current transformation matrix.", "");
731 virtual void , Scale( wxDouble xScale , wxDouble yScale ),
732 "Scale the current transformation matrix of the context.", "");
736 virtual void , Rotate( wxDouble angle ),
737 "Rotate the current transformation matrix of the context. ``angle`` is
738 specified in radians.", "");
742 virtual void , ConcatTransform( const wxGraphicsMatrix& matrix ),
743 "Concatenates the passed in transform with the current transform of
748 virtual void , SetTransform( const wxGraphicsMatrix& matrix ),
749 "Sets the current transform of this context.", "");
753 virtual wxGraphicsMatrix , GetTransform() const,
754 "Gets the current transformation matrix of this context.", "");
759 DocStr(SetPen, "Sets the stroke pen", "");
761 virtual void SetPen( const wxGraphicsPen& pen );
762 void SetPen( const wxPen& pen );
765 DocStr(SetBrush, "Sets the brush for filling", "");
767 virtual void SetBrush( const wxGraphicsBrush& brush );
768 void SetBrush( const wxBrush& brush );
771 DocStr(SetFont, "Sets the font", "");
773 virtual void SetFont( const wxGraphicsFont& font );
774 void SetFont( const wxFont& font, const wxColour& colour = *wxBLACK);
779 virtual void , StrokePath( const wxGraphicsPath& path ),
780 "Strokes along a path with the current pen.", "");
784 virtual void , FillPath( const wxGraphicsPath& path, int fillStyle = wxODDEVEN_RULE ),
785 "Fills a path with the current brush.", "");
789 virtual void , DrawPath( const wxGraphicsPath& path, int fillStyle = wxODDEVEN_RULE ),
790 "Draws the path by first filling and then stroking.", "");
794 virtual void , DrawText( const wxString &str, wxDouble x, wxDouble y ),
795 "Draws a text at the defined position.", "");
799 virtual void , DrawText( const wxString &str, wxDouble x, wxDouble y, wxDouble angle ),
800 "Draws a text at the defined position, at the given angle.", "",
805 virtual void , GetTextExtent( const wxString &text,
806 wxDouble *OUTPUT /*width*/,
807 wxDouble *OUTPUT /*height*/,
808 wxDouble *OUTPUT /*descent*/,
809 wxDouble *OUTPUT /*externalLeading*/ ) const ,
810 "GetFullTextExtent(self, text) --> (width, height, descent, externalLeading)",
811 "Gets the dimensions of the string using the currently selected
812 font. ``text`` is the string to measure, ``w`` and ``h`` are the total
813 width and height respectively, ``descent`` is the dimension from the
814 baseline of the font to the bottom of the descender, and
815 ``externalLeading`` is any extra vertical space added to the font by
816 the font designer (usually is zero).", "",
820 DocAStr(GetTextExtent,
821 "GetTextExtent(self, text) --> (width, height)",
822 "Gets the dimensions of the string using the currently selected
823 font. ``text`` is the string to measure, ``w`` and ``h`` are the total
824 width and height respectively.", "");
826 PyObject* GetTextExtent( const wxString &text )
828 wxDouble width = 0.0,
830 self->GetTextExtent(text, &width, &height, NULL, NULL);
831 // thread wrapers are turned off for this .i file, so no need to acquire GIL...
832 PyObject* rv = PyTuple_New(2);
833 PyTuple_SET_ITEM(rv, 0, PyFloat_FromDouble(width));
834 PyTuple_SET_ITEM(rv, 1, PyFloat_FromDouble(height));
841 DocAStr(GetPartialTextExtents,
842 "GetPartialTextExtents(self, text) -> [widths]",
843 "Returns a list of widths from the beginning of ``text`` to the
844 coresponding character in ``text``.", "");
845 wxArrayDouble GetPartialTextExtents(const wxString& text) {
846 wxArrayDouble widths;
847 self->GetPartialTextExtents(text, widths);
854 virtual void , DrawBitmap( const wxBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h ),
855 "Draws the bitmap. In case of a mono bitmap, this is treated as a mask
856 and the current brush is used for filling.", "");
860 virtual void , DrawIcon( const wxIcon &icon, wxDouble x, wxDouble y, wxDouble w, wxDouble h ),
861 "Draws the icon.", "");
866 virtual void , StrokeLine( wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2),
867 "Strokes a single line.", "");
871 virtual void , StrokeLines( size_t points, const wxPoint2D *points_array),
872 "StrokeLines(self, List points)",
873 "Stroke lines connecting each of the points", "");
877 DocStr(StrokeLineSegements,
878 "Stroke disconnected lines from begin to end points", "");
879 void StrokeLineSegements(PyObject* beginPoints, PyObject* endPoints)
881 size_t c1, c2, count;
882 wxPoint2D* beginP = wxPoint2D_LIST_helper(beginPoints, &c1);
883 wxPoint2D* endP = wxPoint2D_LIST_helper(endPoints, &c2);
885 if ( beginP != NULL && endP != NULL )
887 count = wxMin(c1, c2);
888 self->StrokeLines(count, beginP, endP);
897 virtual void , DrawLines( size_t points, const wxPoint2D *points_array,
898 int fillStyle = wxODDEVEN_RULE ),
899 "Draws a polygon.", "");
903 virtual void , DrawRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h),
904 "Draws a rectangle.", "");
908 virtual void , DrawEllipse( wxDouble x, wxDouble y, wxDouble w, wxDouble h),
909 "Draws an ellipse.", "");
913 virtual void , DrawRoundedRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h, wxDouble radius),
914 "Draws a rounded rectangle", "");
919 virtual bool , ShouldOffset() const,
920 "helper to determine if a 0.5 offset should be applied for the drawing operation", "");
925 //---------------------------------------------------------------------------
927 class wxGraphicsRenderer : public wxObject
930 // wxGraphicsRenderer(); This is an ABC, use GetDefaultRenderer
932 virtual ~wxGraphicsRenderer();
934 // %newobject GetDefaultRenderer; ???
935 static wxGraphicsRenderer* GetDefaultRenderer();
937 %nokwargs CreateContext;
938 %newobject CreateContext;
939 virtual wxGraphicsContext * CreateContext( const wxWindowDC& dc) ;
940 virtual wxGraphicsContext * CreateContext( wxWindow* window );
942 %newobject CreateContextFromNativeContext;
943 virtual wxGraphicsContext * CreateContextFromNativeContext( void * context );
945 %newobject CreateContextFromNativeWindow;
946 virtual wxGraphicsContext * CreateContextFromNativeWindow( void * window );
949 virtual wxGraphicsPath CreatePath();
951 virtual wxGraphicsMatrix CreateMatrix( wxDouble a=1.0, wxDouble b=0.0, wxDouble c=0.0, wxDouble d=1.0,
952 wxDouble tx=0.0, wxDouble ty=0.0);
954 virtual wxGraphicsPen CreatePen(const wxPen& pen) ;
956 virtual wxGraphicsBrush CreateBrush(const wxBrush& brush ) ;
958 virtual wxGraphicsBrush CreateLinearGradientBrush( wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2,
959 const wxColour&c1, const wxColour&c2);
961 virtual wxGraphicsBrush CreateRadialGradientBrush( wxDouble xo, wxDouble yo, wxDouble xc, wxDouble yc, wxDouble radius,
962 const wxColour &oColor, const wxColour &cColor);
964 virtual wxGraphicsFont CreateFont( const wxFont &font , const wxColour &col = *wxBLACK );
970 //---------------------------------------------------------------------------
973 #include "wx/dcgraph.h"
976 class wxGCDC: public wxDC
980 "self.__dc = args[0] # save a ref so the other dc will not be deleted before self";
981 wxGCDC(const wxWindowDC& dc);
985 wxGraphicsContext* GetGraphicsContext();
986 virtual void SetGraphicsContext( wxGraphicsContext* ctx );
988 %property(GraphicsContext, GetGraphicsContext, SetGraphicsContext);
992 //---------------------------------------------------------------------------
994 // Turn GIL acquisition back on.