]> git.saurik.com Git - wxWidgets.git/blob - wxPython/src/_graphics.i
wx.lib.masked: Patch from Will Sadkin. Includes Unicode fixes, plus
[wxWidgets.git] / wxPython / src / _graphics.i
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: _graphics.i
3 // Purpose: Wrapper definitions for wx.GraphicsPath, wx.GraphicsContext
4 //
5 // Author: Robin Dunn
6 //
7 // Created: 2-Oct-2006
8 // RCS-ID: $Id$
9 // Copyright: (c) 2006 by Total Control Software
10 // Licence: wxWindows license
11 /////////////////////////////////////////////////////////////////////////////
12
13 // Not a %module
14
15
16 //---------------------------------------------------------------------------
17 %newgroup
18
19 %{
20 #include <wx/graphics.h>
21 %}
22
23 // Turn off the aquisition of the Global Interpreter Lock for the classes and
24 // functions in this file
25 %threadWrapperOff
26
27
28 //---------------------------------------------------------------------------
29 //---------------------------------------------------------------------------
30
31 %{
32 #if !wxUSE_GRAPHICS_CONTEXT
33 // C++ stub classes for platforms or build configurations that don't have
34 // wxGraphicsContext yet.
35
36 class wxGraphicsRenderer;
37 class wxGraphicsMatrix;
38
39
40 class wxGraphicsObject : public wxObject
41 {
42 public :
43 wxGraphicsObject() {}
44 wxGraphicsObject( wxGraphicsRenderer* ) {
45 PyErr_SetString(PyExc_NotImplementedError,
46 "wx.GraphicsObject is not available on this platform.");
47 }
48 wxGraphicsObject( const wxGraphicsObject& ) {}
49 virtual ~wxGraphicsObject() {}
50 bool IsNull() const { return false; }
51 wxGraphicsRenderer* GetRenderer() const { return NULL; }
52 } ;
53
54
55
56 class wxGraphicsPen : public wxGraphicsObject
57 {
58 public:
59 wxGraphicsPen() {}
60 virtual ~wxGraphicsPen() {}
61 } ;
62 wxGraphicsPen wxNullGraphicsPen;
63
64
65
66 class wxGraphicsBrush : public wxGraphicsObject
67 {
68 public :
69 wxGraphicsBrush() {}
70 virtual ~wxGraphicsBrush() {}
71 } ;
72 wxGraphicsBrush wxNullGraphicsBrush;
73
74
75
76 class wxGraphicsFont : public wxGraphicsObject
77 {
78 public :
79 wxGraphicsFont() {}
80 virtual ~wxGraphicsFont() {}
81 } ;
82 wxGraphicsFont wxNullGraphicsFont;
83
84
85
86 class wxGraphicsPath : public wxGraphicsObject
87 {
88 public :
89 wxGraphicsPath() { }
90 wxGraphicsPath(wxGraphicsRenderer* ) {
91 PyErr_SetString(PyExc_NotImplementedError,
92 "wx.GraphicsPath is not available on this platform.");
93 }
94 virtual ~wxGraphicsPath() {}
95
96 void MoveToPoint( wxDouble, wxDouble ) {}
97 void MoveToPoint( const wxPoint2DDouble& ) {}
98 void AddLineToPoint( wxDouble, wxDouble ) {}
99 void AddLineToPoint( const wxPoint2DDouble& ) {}
100 void AddCurveToPoint( wxDouble, wxDouble, wxDouble, wxDouble, wxDouble, wxDouble ) {}
101 void AddCurveToPoint( const wxPoint2DDouble&, const wxPoint2DDouble&, const wxPoint2DDouble&) {}
102 void AddPath( const wxGraphicsPath& ) {}
103 void CloseSubpath() {}
104 void GetCurrentPoint( wxDouble&, wxDouble&) const {}
105 wxPoint2DDouble GetCurrentPoint() const { return wxPoint2D(0,0); }
106 void AddArc( wxDouble, wxDouble, wxDouble, wxDouble, wxDouble, bool ) {}
107 void AddArc( const wxPoint2DDouble& , wxDouble, wxDouble , wxDouble , bool ) {}
108
109 void AddQuadCurveToPoint( wxDouble, wxDouble, wxDouble, wxDouble ) {}
110 void AddRectangle( wxDouble, wxDouble, wxDouble, wxDouble ) {}
111 void AddCircle( wxDouble, wxDouble, wxDouble ) {}
112 void AddArcToPoint( wxDouble, wxDouble , wxDouble, wxDouble, wxDouble ) {}
113
114 void AddEllipse( wxDouble , wxDouble , wxDouble , wxDouble ) {}
115 void AddRoundedRectangle( wxDouble , wxDouble , wxDouble , wxDouble , wxDouble ) {}
116 void * GetNativePath() const { return NULL; }
117 void UnGetNativePath(void *) const {}
118 void Transform( const wxGraphicsMatrix& ) {}
119 void GetBox(wxDouble *, wxDouble *, wxDouble *, wxDouble *) const {}
120 wxRect2D GetBox() const { return wxRect2D(0,0,0,0); }
121
122 bool Contains( wxDouble , wxDouble , int ) const { return false; }
123 bool Contains( const wxPoint2DDouble& , int ) const { return false; }
124 };
125 wxGraphicsPath wxNullGraphicsPath;
126
127
128 class wxGraphicsMatrix : public wxGraphicsObject
129 {
130 public :
131 wxGraphicsMatrix() { }
132 wxGraphicsMatrix(wxGraphicsRenderer* ) {
133 PyErr_SetString(PyExc_NotImplementedError,
134 "wx.GraphicsMatrix is not available on this platform.");
135 }
136 virtual ~wxGraphicsMatrix() {}
137 virtual void Concat( const wxGraphicsMatrix & ) {}
138 virtual void Copy( const wxGraphicsMatrix & ) {}
139 virtual void Set(wxDouble , wxDouble , wxDouble , wxDouble ,
140 wxDouble , wxDouble ) {}
141 virtual void Invert() {}
142 virtual bool IsEqual( const wxGraphicsMatrix& t) const { return false; }
143 virtual bool IsIdentity() const { return false; }
144 virtual void Translate( wxDouble , wxDouble ) {}
145 virtual void Scale( wxDouble , wxDouble ) {}
146 virtual void Rotate( wxDouble ) {}
147 virtual void TransformPoint( wxDouble *, wxDouble * ) const {}
148 virtual void TransformDistance( wxDouble *, wxDouble * ) const {}
149 virtual void * GetNativeMatrix() const { return NULL; }
150 };
151 wxGraphicsMatrix wxNullGraphicsMatrix;
152
153
154 class wxGraphicsContext : public wxGraphicsObject
155 {
156 public:
157
158 wxGraphicsContext(wxGraphicsRenderer* ) {
159 PyErr_SetString(PyExc_NotImplementedError,
160 "wx.GraphicsContext is not available on this platform.");
161 }
162
163 virtual ~wxGraphicsContext() {}
164
165 static wxGraphicsContext* Create() {
166 PyErr_SetString(PyExc_NotImplementedError,
167 "wx.GraphicsContext is not available on this platform.");
168 return NULL;
169 }
170 static wxGraphicsContext* Create( const wxWindowDC& ) {
171 PyErr_SetString(PyExc_NotImplementedError,
172 "wx.GraphicsContext is not available on this platform.");
173 return NULL;
174 }
175
176 static wxGraphicsContext* CreateFromNative( void * ) {
177 PyErr_SetString(PyExc_NotImplementedError,
178 "wx.GraphicsContext is not available on this platform.");
179 return NULL;
180 }
181
182 static wxGraphicsContext* CreateFromNativeWindow( void * ) {
183 PyErr_SetString(PyExc_NotImplementedError,
184 "wx.GraphicsContext is not available on this platform.");
185 return NULL;
186 }
187
188 static wxGraphicsContext* Create( wxWindow* ) {
189 PyErr_SetString(PyExc_NotImplementedError,
190 "wx.GraphicsContext is not available on this platform.");
191 return NULL;
192 }
193
194 wxGraphicsPath CreatePath() { return wxNullGraphicsPath; }
195
196 virtual wxGraphicsPen CreatePen(const wxPen& ) { return wxNullGraphicsPen; }
197
198 virtual wxGraphicsBrush CreateBrush(const wxBrush& ) { return wxNullGraphicsBrush; }
199
200 virtual wxGraphicsBrush CreateLinearGradientBrush( wxDouble , wxDouble , wxDouble , wxDouble ,
201 const wxColour&, const wxColour&) { return wxNullGraphicsBrush; }
202
203 virtual wxGraphicsBrush CreateRadialGradientBrush( wxDouble xo, wxDouble yo,
204 wxDouble xc, wxDouble yc, wxDouble radius,
205 const wxColour &oColor, const wxColour &cColor) { return wxNullGraphicsBrush; }
206
207 virtual wxGraphicsFont CreateFont( const wxFont &, const wxColour & ) { return wxNullGraphicsFont; }
208
209 virtual wxGraphicsMatrix CreateMatrix( wxDouble, wxDouble, wxDouble, wxDouble,
210 wxDouble, wxDouble) { return wxNullGraphicsMatrix; }
211
212 virtual void PushState() {}
213 virtual void PopState() {}
214 virtual void Clip( const wxRegion & ) {}
215 virtual void Clip( wxDouble , wxDouble , wxDouble , wxDouble ) {}
216 virtual void ResetClip() {}
217 virtual void * GetNativeContext() { return NULL; }
218 virtual int GetLogicalFunction() const { return 0; }
219 virtual bool SetLogicalFunction(int ) {}
220 virtual void Translate( wxDouble , wxDouble ) {}
221 virtual void Scale( wxDouble , wxDouble ) {}
222 virtual void Rotate( wxDouble ) {}
223 virtual void ConcatTransform( const wxGraphicsMatrix& ) {}
224 virtual void SetTransform( const wxGraphicsMatrix& ) {}
225 virtual wxGraphicsMatrix GetTransform() const { return wxNullGraphicsMatrix; }
226
227 virtual void SetPen( const wxGraphicsPen& ) {}
228 void SetPen( const wxPen& ) {}
229
230 virtual void SetBrush( const wxGraphicsBrush& ) {}
231 void SetBrush( const wxBrush& ) {}
232
233 virtual void SetFont( const wxGraphicsFont& ) {}
234 void SetFont( const wxFont&, const wxColour& ) {}
235
236 virtual void StrokePath( const wxGraphicsPath & ) {}
237 virtual void FillPath( const wxGraphicsPath &, int ) {}
238 virtual void DrawPath( const wxGraphicsPath &, int ) {}
239
240 virtual void DrawText( const wxString &, wxDouble , wxDouble ) {}
241 virtual void DrawText( const wxString &, wxDouble , wxDouble , wxDouble ) {}
242 virtual void DrawText( const wxString &, wxDouble , wxDouble , wxGraphicsBrush ) {}
243 virtual void DrawText( const wxString &, wxDouble , wxDouble , wxDouble , wxGraphicsBrush ) {}
244 virtual void GetTextExtent( const wxString &, wxDouble *, wxDouble *,
245 wxDouble *, wxDouble * ) const {}
246 virtual void GetPartialTextExtents(const wxString& , wxArrayDouble& ) const {}
247
248 virtual void DrawBitmap( const wxBitmap &, wxDouble , wxDouble , wxDouble , wxDouble ) {}
249 virtual void DrawIcon( const wxIcon &, wxDouble , wxDouble , wxDouble , wxDouble ) {}
250
251 virtual void StrokeLine( wxDouble , wxDouble , wxDouble , wxDouble ) {}
252 virtual void StrokeLines( size_t , const wxPoint2DDouble *) {}
253 virtual void StrokeLines( size_t , const wxPoint2DDouble *, const wxPoint2DDouble *) {}
254 virtual void DrawLines( size_t , const wxPoint2DDouble *, int ) {}
255 virtual void DrawRectangle( wxDouble , wxDouble , wxDouble , wxDouble ) {}
256 virtual void DrawRoundedRectangle( wxDouble , wxDouble , wxDouble , wxDouble , wxDouble ) {}
257 virtual void DrawEllipse( wxDouble , wxDouble , wxDouble , wxDouble ) {}
258 virtual void DrawRoundedRectangle( wxDouble wxDouble , wxDouble , wxDouble , wxDouble ) {}
259 virtual bool ShouldOffset() const { return false; }
260 };
261
262
263 class wxGraphicsRenderer : public wxObject
264 {
265 public :
266 wxGraphicsRenderer() {
267 PyErr_SetString(PyExc_NotImplementedError,
268 "wx.GraphicsRenderer is not available on this platform.");
269 }
270
271 virtual ~wxGraphicsRenderer() {}
272
273 static wxGraphicsRenderer* GetDefaultRenderer() {
274 PyErr_SetString(PyExc_NotImplementedError,
275 "wx.GraphicsRenderer is not available on this platform.");
276 return NULL;
277 }
278
279 virtual wxGraphicsContext * CreateContext( const wxWindowDC& ) { return NULL; }
280 virtual wxGraphicsContext * CreateContextFromNativeContext( void * ) { return NULL; }
281 virtual wxGraphicsContext * CreateContextFromNativeWindow( void * ) { return NULL; }
282 virtual wxGraphicsContext * CreateContext( wxWindow* ) { return NULL; }
283 virtual wxGraphicsContext * CreateMeasuringContext() { return NULL; }
284
285 virtual wxGraphicsPath CreatePath() { return wxNullGraphicsPath; }
286
287 virtual wxGraphicsMatrix CreateMatrix( wxDouble , wxDouble , wxDouble , wxDouble ,
288 wxDouble , wxDouble ) { return wxNullGraphicsMatrix; }
289
290 virtual wxGraphicsPen CreatePen(const wxPen& ) { return wxNullGraphicsPen; }
291 virtual wxGraphicsBrush CreateBrush(const wxBrush& ) { return wxNullGraphicsBrush; }
292 virtual wxGraphicsBrush CreateLinearGradientBrush(wxDouble , wxDouble , wxDouble , wxDouble ,
293 const wxColour&, const wxColour&) { return wxNullGraphicsBrush; }
294 virtual wxGraphicsBrush CreateRadialGradientBrush(wxDouble , wxDouble , wxDouble , wxDouble , wxDouble ,
295 const wxColour &, const wxColour &) { return wxNullGraphicsBrush; }
296 virtual wxGraphicsFont CreateFont( const wxFont & , const wxColour & ) { return wxNullGraphicsFont; }
297 };
298
299
300
301 class wxGCDC: public wxWindowDC
302 {
303 public:
304 wxGCDC(const wxWindowDC&) {
305 wxPyBlock_t blocked = wxPyBeginBlockThreads();
306 PyErr_SetString(PyExc_NotImplementedError,
307 "wxGCDC is not available on this platform.");
308 wxPyEndBlockThreads(blocked);
309 }
310
311 wxGCDC(const wxWindow*) {
312 wxPyBlock_t blocked = wxPyBeginBlockThreads();
313 PyErr_SetString(PyExc_NotImplementedError,
314 "wxGCDC is not available on this platform.");
315 wxPyEndBlockThreads(blocked);
316 }
317
318 wxGCDC() {
319 wxPyBlock_t blocked = wxPyBeginBlockThreads();
320 PyErr_SetString(PyExc_NotImplementedError,
321 "wxGCDC is not available on this platform.");
322 wxPyEndBlockThreads(blocked);
323 }
324
325 virtual ~wxGCDC() {}
326
327 wxGraphicsContext* GetGraphicsContext() { return NULL; }
328 void SetGraphicsContext( wxGraphicsContext* ) {}
329 };
330
331 #endif
332 %}
333
334 //---------------------------------------------------------------------------
335 //---------------------------------------------------------------------------
336
337
338 %typemap(in) (size_t points, wxPoint2D* points_array ) {
339 $2 = wxPoint2D_LIST_helper($input, &$1);
340 if ($2 == NULL) SWIG_fail;
341 }
342 %typemap(freearg) (size_t points, wxPoint2D* points_array ) {
343 if ($2) delete [] $2;
344 }
345
346
347
348 MustHaveApp(wxGraphicsPath);
349 MustHaveApp(wxGraphicsContext);
350 MustHaveApp(wxGCDC);
351
352 typedef double wxDouble;
353
354
355 //---------------------------------------------------------------------------
356
357
358 DocStr(wxGraphicsObject,
359 "This class is the superclass of native graphics objects like pens
360 etc. It provides the internal reference counting. It is not to be
361 instantiated by user code.", "");
362 class wxGraphicsObject : public wxObject
363 {
364 public :
365 wxGraphicsObject( wxGraphicsRenderer* renderer = NULL );
366 virtual ~wxGraphicsObject();
367
368 DocDeclStr(
369 bool , IsNull() const ,
370 "Is this object valid (false) or still empty (true)?", "");
371
372 DocDeclStr(
373 wxGraphicsRenderer* , GetRenderer() const,
374 "Returns the renderer that was used to create this instance, or
375 ``None`` if it has not been initialized yet.", "");
376
377 };
378
379
380 DocStr(wxGraphicsPen,
381 "A wx.GraphicsPen is a native representation of a pen. It is used for
382 stroking a path on a `wx.GraphicsContext`. The contents are specific and
383 private to the respective renderer. The only way to get a valid instance
384 is via a CreatePen call on the graphics context or the renderer
385 instance.", "");
386 class wxGraphicsPen : public wxGraphicsObject
387 {
388 public :
389 wxGraphicsPen();
390 virtual ~wxGraphicsPen();
391 };
392
393 DocStr(wxGraphicsBrush,
394 "A wx.GraphicsBrush is a native representation of a brush. It is used
395 for filling a path on a `wx.GraphicsContext`. The contents are
396 specific and private to the respective renderer. The only way to get a
397 valid instance is via a Create...Brush call on the graphics context or
398 the renderer instance.", "");
399 class wxGraphicsBrush : public wxGraphicsObject
400 {
401 public :
402 wxGraphicsBrush();
403 virtual ~wxGraphicsBrush();
404 };
405
406
407 DocStr(wxGraphicsFont,
408 "A `wx.GraphicsFont` is a native representation of a font (including
409 text colour). The contents are specific an private to the respective
410 renderer. The only way to get a valid instance is via a CreateFont
411 call on the graphics context or the renderer instance.", "");
412 class wxGraphicsFont : public wxGraphicsObject
413 {
414 public :
415 wxGraphicsFont();
416 virtual ~wxGraphicsFont();
417 };
418
419
420 //---------------------------------------------------------------------------
421
422 DocStr(wxGraphicsMatrix,
423 "A wx.GraphicsMatrix is a native representation of an affine
424 matrix. The contents are specific an private to the respective
425 renderer. The only way to get a valid instance is via a CreateMatrix
426 call on the graphics context or the renderer instance.", "");
427 class wxGraphicsMatrix : public wxGraphicsObject
428 {
429 public :
430 wxGraphicsMatrix();
431 virtual ~wxGraphicsMatrix();
432
433 DocDeclStr(
434 virtual void , Concat( const wxGraphicsMatrix& t ),
435 "Concatenates the passed in matrix to the current matrix.", "");
436
437 // %extend {
438 // DocStr(Copy,
439 // "Copy the passed in matrix to this one.", "");
440 // void Copy( const wxGraphicsMatrix& t ) {
441 // *self = t;
442 // }
443 // }
444
445
446 DocDeclStr(
447 virtual void , Set(wxDouble a=1.0, wxDouble b=0.0, wxDouble c=0.0, wxDouble d=1.0,
448 wxDouble tx=0.0, wxDouble ty=0.0),
449 "Sets the matrix to the specified values (default values are the
450 identity matrix.)", "");
451
452
453 DocDeclStr(
454 virtual void , Invert(),
455 "Inverts the matrix.", "");
456
457
458 DocDeclStr(
459 virtual bool , IsEqual( const wxGraphicsMatrix& t) const,
460 "Returns ``True`` if the elements of the transformation matrix are equal", "");
461
462
463 DocDeclStr(
464 virtual bool , IsIdentity() const,
465 "Returns ``True`` if this is the identity matrix", "");
466
467
468 DocDeclStr(
469 virtual void , Translate( wxDouble dx , wxDouble dy ),
470 "Add a translation to this matrix.", "");
471
472
473 DocDeclStr(
474 virtual void , Scale( wxDouble xScale , wxDouble yScale ),
475 "Scales this matrix.", "");
476
477
478 DocDeclStr(
479 virtual void , Rotate( wxDouble angle ),
480 "Rotates this matrix. The angle should be specified in radians.", "");
481
482
483 DocDeclAStr(
484 virtual void , TransformPoint( wxDouble *INOUT, wxDouble *INOUT ) const,
485 "TransformPoint(self, x, y) --> (x, y)",
486 "Applies this matrix to a point, returns the resulting point values", "");
487
488
489 DocDeclAStr(
490 virtual void , TransformDistance( wxDouble *INOUT, wxDouble *INOUT ) const,
491 "TransformDistance(self, dx, dy) --> (dx, dy)",
492 "Applies this matrix to a distance (ie. performs all transforms except
493 translations)", "");
494
495
496 DocDeclStr(
497 virtual void * , GetNativeMatrix() const,
498 "Returns the native representation of the matrix. For CoreGraphics this
499 is a CFAffineMatrix pointer. For GDIPlus a Matrix Pointer and for
500 Cairo a cairo_matrix_t pointer. NOTE: For wxPython we still need a
501 way to make this value usable.", "");
502 };
503
504 //---------------------------------------------------------------------------
505
506 class wxGraphicsPath : public wxGraphicsObject
507 {
508 public :
509 wxGraphicsPath();
510 virtual ~wxGraphicsPath();
511
512
513 %nokwargs MoveToPoint;
514 DocStr(MoveToPoint,
515 "Begins a new subpath at the specified point.", "");
516 virtual void MoveToPoint( wxDouble x, wxDouble y );
517 void MoveToPoint( const wxPoint2D& p);
518
519
520 %nokwargs AddLineToPoint;
521 DocStr(AddLineToPoint,
522 "Adds a straight line from the current point to the specified point.", "");
523 virtual void AddLineToPoint( wxDouble x, wxDouble y );
524 void AddLineToPoint( const wxPoint2D& p);
525
526
527 %nokwargs AddCurveToPoint;
528 DocStr(AddCurveToPoint,
529 "Adds a cubic Bezier curve from the current point, using two control
530 points and an end point", "");
531 virtual void AddCurveToPoint( wxDouble cx1, wxDouble cy1,
532 wxDouble cx2, wxDouble cy2,
533 wxDouble x, wxDouble y );
534 void AddCurveToPoint( const wxPoint2D& c1, const wxPoint2D& c2, const wxPoint2D& e);
535
536
537
538 DocDeclStr(
539 virtual void , AddPath( const wxGraphicsPath& path ),
540 "Adds another path", "");
541
542
543 DocDeclStr(
544 virtual void , CloseSubpath(),
545 "Closes the current sub-path.", "");
546
547
548 DocDeclStr(
549 wxPoint2D , GetCurrentPoint() const,
550 "Gets the last point of the current path, (0,0) if not yet set", "");
551
552
553 %nokwargs AddArc;
554 DocStr(AddArc,
555 "Adds an arc of a circle centering at (x,y) with radius (r) from
556 startAngle to endAngle", "");
557 virtual void AddArc( wxDouble x, wxDouble y, wxDouble r,
558 wxDouble startAngle, wxDouble endAngle, bool clockwise );
559 void AddArc( const wxPoint2D& c, wxDouble r, wxDouble startAngle, wxDouble endAngle, bool clockwise);
560
561
562 DocDeclStr(
563 virtual void , AddQuadCurveToPoint( wxDouble cx, wxDouble cy, wxDouble x, wxDouble y ),
564 "Adds a quadratic Bezier curve from the current point, using a control
565 point and an end point", "");
566
567
568 DocDeclStr(
569 virtual void , AddRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h ),
570 "Appends a rectangle as a new closed subpath.", "");
571
572
573 DocDeclStr(
574 virtual void , AddCircle( wxDouble x, wxDouble y, wxDouble r ),
575 "Appends a circle around (x,y) with radius r as a new closed subpath.", "");
576
577
578 DocDeclStr(
579 virtual void , AddArcToPoint( wxDouble x1, wxDouble y1 , wxDouble x2, wxDouble y2, wxDouble r ) ,
580 "Appends an arc to two tangents connecting (current) to (x1,y1) and (x1,y1)
581 to (x2,y2), also a straight line from (current) to (x1,y1)", "");
582
583
584 DocDeclStr(
585 virtual void , AddEllipse( wxDouble x, wxDouble y, wxDouble w, wxDouble h),
586 "Appends an ellipse fitting into the passed in rectangle.", "");
587
588
589 DocDeclStr(
590 virtual void , AddRoundedRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h, wxDouble radius),
591 "Appends a rounded rectangle.", "");
592
593
594 DocDeclStr(
595 virtual void * , GetNativePath() const,
596 "Returns the native path (CGPathRef for Core Graphics, Path pointer for
597 GDIPlus and a cairo_path_t pointer for cairo). NOTE: For wxPython we
598 still need a way to make this value usable.", "");
599
600
601 DocDeclStr(
602 virtual void , UnGetNativePath(void *p) const,
603 "Gives back the native path returned by GetNativePath() because there
604 might be some deallocations necessary (eg on cairo the native path
605 returned by GetNativePath is newly allocated each time).", "");
606
607
608 DocDeclStr(
609 virtual void , Transform( const wxGraphicsMatrix& matrix ),
610 "Transforms each point of this path by the matrix", "");
611
612
613 DocDeclStr(
614 wxRect2DDouble , GetBox() const,
615 "Gets the bounding box enclosing all points (possibly including control points)", "");
616
617
618 %nokwargs Contains;
619 DocStr(Contains,
620 "Returns ``True`` if the point is within the path.", "");
621 virtual bool Contains( wxDouble x, wxDouble y, int fillStyle = wxODDEVEN_RULE) const;
622 bool Contains( const wxPoint2DDouble& c, int fillStyle = wxODDEVEN_RULE) const;
623
624 };
625
626
627 //---------------------------------------------------------------------------
628
629 %immutable;
630 const wxGraphicsPen wxNullGraphicsPen;
631 const wxGraphicsBrush wxNullGraphicsBrush;
632 const wxGraphicsFont wxNullGraphicsFont;
633 const wxGraphicsMatrix wxNullGraphicsMatrix;
634 const wxGraphicsPath wxNullGraphicsPath;
635 %mutable;
636
637 //---------------------------------------------------------------------------
638
639 DocStr(wxGraphicsContext,
640 "A `wx.GraphicsContext` instance is the object that is drawn upon. It is
641 created by a renderer using the CreateContext calls, this can be done
642 either directly using a renderer instance, or indirectly using the
643 static convenience CreateXXX functions of wx.GraphicsContext that
644 always delegate the task to the default renderer.", "");
645
646 class wxGraphicsContext : public wxGraphicsObject
647 {
648 public:
649 //wxGraphicsContext(); This is an ABC, use Create to make an instance...
650 virtual ~wxGraphicsContext();
651
652 %newobject Create;
653 %nokwargs Create;
654 %pythonAppend Create
655 "val.__dc = args[0] # save a ref so the dc will not be deleted before self";
656 DocStr(Create,
657 "Creates a wx.GraphicsContext either from a window or a DC.", "");
658 static wxGraphicsContext* Create( const wxWindowDC& dc);
659 static wxGraphicsContext* Create( wxWindow* window ) ;
660
661 DocDeclStrName(
662 static wxGraphicsContext* , Create(),
663 "Create a lightwieght context that can be used for measuring text only.", "",
664 CreateMeasuringContext);
665
666 %newobject CreateFromNative;
667 DocDeclStr(
668 static wxGraphicsContext* , CreateFromNative( void * context ) ,
669 "Creates a wx.GraphicsContext from a native context. This native context
670 must be eg a CGContextRef for Core Graphics, a Graphics pointer for
671 GDIPlus or a cairo_t pointer for Cairo.", "");
672
673
674 %newobject CreateFromNative;
675 DocDeclStr(
676 static wxGraphicsContext* , CreateFromNativeWindow( void * window ) ,
677 "Creates a wx.GraphicsContext from a native window.", "");
678
679
680
681 DocDeclStr(
682 virtual wxGraphicsPath , CreatePath(),
683 "Creates a native graphics path which is initially empty.", "");
684
685
686 DocDeclStr(
687 virtual wxGraphicsPen , CreatePen(const wxPen& pen),
688 "Creates a native pen from a `wx.Pen`.", "");
689
690
691 DocDeclStr(
692 virtual wxGraphicsBrush , CreateBrush(const wxBrush& brush ),
693 "Creates a native brush from a `wx.Brush`.", "");
694
695
696 DocDeclStr(
697 virtual wxGraphicsBrush ,
698 CreateLinearGradientBrush( wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2,
699 const wxColour& c1, const wxColour& c2),
700 "Creates a native brush, having a linear gradient, starting at (x1,y1)
701 with color c1 to (x2,y2) with color c2.", "");
702
703
704 DocDeclStr(
705 virtual wxGraphicsBrush ,
706 CreateRadialGradientBrush( wxDouble xo, wxDouble yo, wxDouble xc, wxDouble yc, wxDouble radius,
707 const wxColour &oColor, const wxColour &cColor),
708 "Creates a native brush, having a radial gradient originating at
709 point (xo,yc) with color oColour and ends on a circle around (xc,yc) with
710 radius r and color cColour.", "");
711
712
713 DocDeclStr(
714 virtual wxGraphicsFont , CreateFont( const wxFont &font , const wxColour &col = *wxBLACK ),
715 "Creates a native graphics font from a `wx.Font` and a text colour.", "");
716
717
718 DocDeclStr(
719 virtual wxGraphicsMatrix , CreateMatrix( wxDouble a=1.0, wxDouble b=0.0,
720 wxDouble c=0.0, wxDouble d=1.0,
721 wxDouble tx=0.0, wxDouble ty=0.0),
722 "Creates a native affine transformation matrix from the passed in
723 values. The defaults result in an identity matrix.", "");
724
725
726
727 DocDeclStr(
728 virtual void , PushState(),
729 "push the current state of the context, ie the transformation matrix on a stack", "");
730
731
732 DocDeclStr(
733 virtual void , PopState(),
734 "pops a stored state from the stack", "");
735
736
737 DocDeclStrName(
738 virtual void , Clip( const wxRegion &region ),
739 "Clips drawings to the region, combined to current clipping region.", "",
740 ClipRegion);
741
742
743 DocDeclStr(
744 virtual void , Clip( wxDouble x, wxDouble y, wxDouble w, wxDouble h ),
745 "Clips drawings to the rectangle.", "");
746
747
748 DocDeclStr(
749 virtual void , ResetClip(),
750 "Resets the clipping to original shape.", "");
751
752
753 DocDeclStr(
754 virtual void * , GetNativeContext(),
755 "Returns the native context (CGContextRef for Core Graphics, Graphics
756 pointer for GDIPlus and cairo_t pointer for cairo).", "");
757
758
759 DocDeclStr(
760 virtual int , GetLogicalFunction() const,
761 "Returns the current logical function.", "");
762
763
764 DocDeclStr(
765 virtual bool , SetLogicalFunction(int function) ,
766 "Sets the current logical function, returns ``True`` if it supported", "");
767
768
769 DocDeclStr(
770 virtual void , Translate( wxDouble dx , wxDouble dy ),
771 "Translates the current transformation matrix.", "");
772
773
774 DocDeclStr(
775 virtual void , Scale( wxDouble xScale , wxDouble yScale ),
776 "Scale the current transformation matrix of the context.", "");
777
778
779 DocDeclStr(
780 virtual void , Rotate( wxDouble angle ),
781 "Rotate the current transformation matrix of the context. ``angle`` is
782 specified in radians.", "");
783
784
785 DocDeclStr(
786 virtual void , ConcatTransform( const wxGraphicsMatrix& matrix ),
787 "Concatenates the passed in transform with the current transform of
788 this context.", "");
789
790
791 DocDeclStr(
792 virtual void , SetTransform( const wxGraphicsMatrix& matrix ),
793 "Sets the current transform of this context.", "");
794
795
796 DocDeclStr(
797 virtual wxGraphicsMatrix , GetTransform() const,
798 "Gets the current transformation matrix of this context.", "");
799
800
801
802
803 DocStr(SetPen, "Sets the stroke pen", "");
804 %nokwargs SetPen;
805 virtual void SetPen( const wxGraphicsPen& pen );
806 void SetPen( const wxPen& pen );
807
808
809 DocStr(SetBrush, "Sets the brush for filling", "");
810 %nokwargs SetBrush;
811 virtual void SetBrush( const wxGraphicsBrush& brush );
812 void SetBrush( const wxBrush& brush );
813
814
815 DocStr(SetFont, "Sets the font", "");
816 %nokwargs SetFont;
817 virtual void SetFont( const wxGraphicsFont& font );
818 void SetFont( const wxFont& font, const wxColour& colour = *wxBLACK);
819
820
821
822 DocDeclStr(
823 virtual void , StrokePath( const wxGraphicsPath& path ),
824 "Strokes along a path with the current pen.", "");
825
826
827 DocDeclStr(
828 virtual void , FillPath( const wxGraphicsPath& path, int fillStyle = wxODDEVEN_RULE ),
829 "Fills a path with the current brush.", "");
830
831
832 DocDeclStr(
833 virtual void , DrawPath( const wxGraphicsPath& path, int fillStyle = wxODDEVEN_RULE ),
834 "Draws the path by first filling and then stroking.", "");
835
836
837 %extend {
838 DocStr(DrawText,
839 "Draws a text string at the defined position.", "");
840 void DrawText( const wxString &str, wxDouble x, wxDouble y,
841 const wxGraphicsBrush& backgroundBrush = wxNullGraphicsBrush )
842 {
843 if ( !backgroundBrush.IsNull() )
844 self->DrawText(str, x, y, backgroundBrush);
845 else
846 self->DrawText(str, x, y);
847 }
848
849 DocStr(DrawRotatedText,
850 "Draws a text string at the defined position, at the specified angle,
851 which is given in radians.", "");
852 void DrawRotatedText( const wxString &str, wxDouble x, wxDouble y, wxDouble angle,
853 const wxGraphicsBrush& backgroundBrush = wxNullGraphicsBrush )
854 {
855 if ( !backgroundBrush.IsNull() )
856 self->DrawText(str, x, y, angle, backgroundBrush);
857 else
858 self->DrawText(str, x, y, angle);
859 }
860 }
861
862
863
864 DocDeclAStrName(
865 virtual void , GetTextExtent( const wxString &text,
866 wxDouble *OUTPUT /*width*/,
867 wxDouble *OUTPUT /*height*/,
868 wxDouble *OUTPUT /*descent*/,
869 wxDouble *OUTPUT /*externalLeading*/ ) const ,
870 "GetFullTextExtent(self, text) --> (width, height, descent, externalLeading)",
871 "Gets the dimensions of the string using the currently selected
872 font. ``text`` is the string to measure, ``w`` and ``h`` are the total
873 width and height respectively, ``descent`` is the dimension from the
874 baseline of the font to the bottom of the descender, and
875 ``externalLeading`` is any extra vertical space added to the font by
876 the font designer (usually is zero).", "",
877 GetFullTextExtent);
878
879 %extend {
880 DocAStr(GetTextExtent,
881 "GetTextExtent(self, text) --> (width, height)",
882 "Gets the dimensions of the string using the currently selected
883 font. ``text`` is the string to measure, ``w`` and ``h`` are the total
884 width and height respectively.", "");
885
886 PyObject* GetTextExtent( const wxString &text )
887 {
888 wxDouble width = 0.0,
889 height = 0.0;
890 self->GetTextExtent(text, &width, &height, NULL, NULL);
891 // thread wrapers are turned off for this .i file, so no need to acquire GIL...
892 PyObject* rv = PyTuple_New(2);
893 PyTuple_SET_ITEM(rv, 0, PyFloat_FromDouble(width));
894 PyTuple_SET_ITEM(rv, 1, PyFloat_FromDouble(height));
895 return rv;
896 }
897 }
898
899
900 %extend {
901 DocAStr(GetPartialTextExtents,
902 "GetPartialTextExtents(self, text) -> [widths]",
903 "Returns a list of widths from the beginning of ``text`` to the
904 coresponding character in ``text``.", "");
905 wxArrayDouble GetPartialTextExtents(const wxString& text) {
906 wxArrayDouble widths;
907 self->GetPartialTextExtents(text, widths);
908 return widths;
909 }
910 }
911
912
913 DocDeclStr(
914 virtual void , DrawBitmap( const wxBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h ),
915 "Draws the bitmap. In case of a mono bitmap, this is treated as a mask
916 and the current brush is used for filling.", "");
917
918
919 DocDeclStr(
920 virtual void , DrawIcon( const wxIcon &icon, wxDouble x, wxDouble y, wxDouble w, wxDouble h ),
921 "Draws the icon.", "");
922
923
924
925 DocDeclStr(
926 virtual void , StrokeLine( wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2),
927 "Strokes a single line.", "");
928
929
930 DocDeclAStr(
931 virtual void , StrokeLines( size_t points, const wxPoint2D *points_array),
932 "StrokeLines(self, List points)",
933 "Stroke lines connecting each of the points", "");
934
935
936 %extend {
937 DocStr(StrokeLineSegements,
938 "Stroke disconnected lines from begin to end points", "");
939 void StrokeLineSegements(PyObject* beginPoints, PyObject* endPoints)
940 {
941 size_t c1, c2, count;
942 wxPoint2D* beginP = wxPoint2D_LIST_helper(beginPoints, &c1);
943 wxPoint2D* endP = wxPoint2D_LIST_helper(endPoints, &c2);
944
945 if ( beginP != NULL && endP != NULL )
946 {
947 count = wxMin(c1, c2);
948 self->StrokeLines(count, beginP, endP);
949 }
950 delete [] beginP;
951 delete [] endP;
952 }
953 }
954
955
956 DocDeclStr(
957 virtual void , DrawLines( size_t points, const wxPoint2D *points_array,
958 int fillStyle = wxODDEVEN_RULE ),
959 "Draws a polygon.", "");
960
961
962 DocDeclStr(
963 virtual void , DrawRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h),
964 "Draws a rectangle.", "");
965
966
967 DocDeclStr(
968 virtual void , DrawEllipse( wxDouble x, wxDouble y, wxDouble w, wxDouble h),
969 "Draws an ellipse.", "");
970
971
972 DocDeclStr(
973 virtual void , DrawRoundedRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h, wxDouble radius),
974 "Draws a rounded rectangle", "");
975
976
977
978 DocDeclStr(
979 virtual bool , ShouldOffset() const,
980 "helper to determine if a 0.5 offset should be applied for the drawing operation", "");
981
982 };
983
984
985 //---------------------------------------------------------------------------
986
987 class wxGraphicsRenderer : public wxObject
988 {
989 public :
990 // wxGraphicsRenderer(); This is an ABC, use GetDefaultRenderer
991
992 virtual ~wxGraphicsRenderer();
993
994 // %newobject GetDefaultRenderer; ???
995 static wxGraphicsRenderer* GetDefaultRenderer();
996
997 %nokwargs CreateContext;
998 %newobject CreateContext;
999 virtual wxGraphicsContext * CreateContext( const wxWindowDC& dc) ;
1000 virtual wxGraphicsContext * CreateContext( wxWindow* window );
1001
1002 // create a context that can be used for measuring texts only, no drawing allowed
1003 virtual wxGraphicsContext * CreateMeasuringContext();
1004
1005 %newobject CreateContextFromNativeContext;
1006 virtual wxGraphicsContext * CreateContextFromNativeContext( void * context );
1007
1008 %newobject CreateContextFromNativeWindow;
1009 virtual wxGraphicsContext * CreateContextFromNativeWindow( void * window );
1010
1011
1012 virtual wxGraphicsPath CreatePath();
1013
1014 virtual wxGraphicsMatrix CreateMatrix( wxDouble a=1.0, wxDouble b=0.0, wxDouble c=0.0, wxDouble d=1.0,
1015 wxDouble tx=0.0, wxDouble ty=0.0);
1016
1017 virtual wxGraphicsPen CreatePen(const wxPen& pen) ;
1018
1019 virtual wxGraphicsBrush CreateBrush(const wxBrush& brush ) ;
1020
1021 virtual wxGraphicsBrush CreateLinearGradientBrush( wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2,
1022 const wxColour&c1, const wxColour&c2);
1023
1024 virtual wxGraphicsBrush CreateRadialGradientBrush( wxDouble xo, wxDouble yo, wxDouble xc, wxDouble yc, wxDouble radius,
1025 const wxColour &oColor, const wxColour &cColor);
1026
1027 virtual wxGraphicsFont CreateFont( const wxFont &font , const wxColour &col = *wxBLACK );
1028
1029 };
1030
1031
1032
1033 //---------------------------------------------------------------------------
1034
1035 %{
1036 #include "wx/dcgraph.h"
1037 %}
1038
1039 class wxGCDC: public wxDC
1040 {
1041 public:
1042 %nokwargs wxGCDC;
1043 %pythonAppend wxGCDC
1044 "self.__dc = args[0] # save a ref so the other dc will not be deleted before self";
1045 wxGCDC(const wxWindowDC& dc);
1046 wxGCDC(wxWindow* window);
1047 //wxGCDC();
1048 virtual ~wxGCDC();
1049
1050 wxGraphicsContext* GetGraphicsContext();
1051 virtual void SetGraphicsContext( wxGraphicsContext* ctx );
1052
1053 %property(GraphicsContext, GetGraphicsContext, SetGraphicsContext);
1054 };
1055
1056
1057 //---------------------------------------------------------------------------
1058
1059 // Turn GIL acquisition back on.
1060 %threadWrapperOn
1061