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