]> git.saurik.com Git - wxWidgets.git/blame - interface/wx/graphics.h
Make the CreateTool factories be public so they can be used from application code
[wxWidgets.git] / interface / wx / graphics.h
CommitLineData
23324ae1
FM
1/////////////////////////////////////////////////////////////////////////////
2// Name: graphics.h
9cc4ab85 3// Purpose: interface of various wxGraphics* classes
23324ae1
FM
4// Author: wxWidgets team
5// RCS-ID: $Id$
526954c5 6// Licence: wxWindows licence
23324ae1
FM
7/////////////////////////////////////////////////////////////////////////////
8
9/**
10 @class wxGraphicsPath
7c913512 11
23d291c2
BP
12 A wxGraphicsPath is a native representation of a geometric path. The
13 contents are specific an private to the respective renderer. Instances are
14 reference counted and can therefore be assigned as usual. The only way to
15 get a valid instance is by using wxGraphicsContext::CreatePath() or
16 wxGraphicsRenderer::CreatePath().
7c913512 17
23324ae1 18 @library{wxcore}
23d291c2 19 @category{gdi}
23324ae1
FM
20*/
21class wxGraphicsPath : public wxGraphicsObject
22{
23public:
23324ae1 24 /**
2e4d0e91
VZ
25 Adds an arc of a circle.
26
27 The circle is defined by the coordinates of its centre (@a x, @a y) or
28 @a c and its radius @a r. The arc goes from the starting angle @a
29 startAngle to @a endAngle either clockwise or counter-clockwise
30 depending on the value of @a clockwise argument.
31
32 The angles are measured in radians but, contrary to the usual
33 mathematical convention, are always @e clockwise from the horizontal
34 axis.
23d291c2 35 */
2e4d0e91 36 //@{
23d291c2
BP
37 virtual void AddArc(wxDouble x, wxDouble y, wxDouble r,
38 wxDouble startAngle, wxDouble endAngle,
39 bool clockwise);
7c913512 40 void AddArc(const wxPoint2DDouble& c, wxDouble r,
23d291c2 41 wxDouble startAngle, wxDouble endAngle, bool clockwise);
2e4d0e91 42 //@}
23324ae1
FM
43
44 /**
23d291c2
BP
45 Appends a an arc to two tangents connecting (current) to (@a x1,@a y1)
46 and (@a x1,@a y1) to (@a x2,@a y2), also a straight line from (current)
47 to (@a x1,@a y1).
23324ae1 48 */
da1ed74c
FM
49 virtual void AddArcToPoint(wxDouble x1, wxDouble y1, wxDouble x2,
50 wxDouble y2, wxDouble r);
23324ae1
FM
51
52 /**
23d291c2
BP
53 Appends a circle around (@a x,@a y) with radius @a r as a new closed
54 subpath.
23324ae1 55 */
da1ed74c 56 virtual void AddCircle(wxDouble x, wxDouble y, wxDouble r);
23324ae1 57
23324ae1 58 /**
23d291c2
BP
59 Adds a cubic bezier curve from the current point, using two control
60 points and an end point.
61 */
a44f3b5a
FM
62 virtual void AddCurveToPoint(wxDouble cx1, wxDouble cy1,
63 wxDouble cx2, wxDouble cy2,
64 wxDouble x, wxDouble y);
23d291c2
BP
65 /**
66 Adds a cubic bezier curve from the current point, using two control
67 points and an end point.
23324ae1 68 */
7c913512
FM
69 void AddCurveToPoint(const wxPoint2DDouble& c1,
70 const wxPoint2DDouble& c2,
71 const wxPoint2DDouble& e);
23324ae1
FM
72
73 /**
74 Appends an ellipse fitting into the passed in rectangle.
75 */
da1ed74c 76 virtual void AddEllipse(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
23324ae1 77
23324ae1 78 /**
23d291c2
BP
79 Adds a straight line from the current point to (@a x,@a y).
80 */
81 virtual void AddLineToPoint(wxDouble x, wxDouble y);
82 /**
83 Adds a straight line from the current point to @a p.
23324ae1 84 */
7c913512 85 void AddLineToPoint(const wxPoint2DDouble& p);
23324ae1
FM
86
87 /**
88 Adds another path.
89 */
da1ed74c 90 virtual void AddPath(const wxGraphicsPath& path);
23324ae1
FM
91
92 /**
23d291c2
BP
93 Adds a quadratic bezier curve from the current point, using a control
94 point and an end point.
23324ae1 95 */
23d291c2
BP
96 virtual void AddQuadCurveToPoint(wxDouble cx, wxDouble cy,
97 wxDouble x, wxDouble y);
23324ae1
FM
98
99 /**
100 Appends a rectangle as a new closed subpath.
101 */
da1ed74c 102 virtual void AddRectangle(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
23324ae1
FM
103
104 /**
105 Appends a rounded rectangle as a new closed subpath.
106 */
da1ed74c
FM
107 virtual void AddRoundedRectangle(wxDouble x, wxDouble y, wxDouble w,
108 wxDouble h, wxDouble radius);
23324ae1
FM
109
110 /**
111 Closes the current sub-path.
112 */
da1ed74c 113 virtual void CloseSubpath();
23324ae1 114
23324ae1 115 /**
23d291c2 116 @return @true if the point is within the path.
23324ae1
FM
117 */
118 bool Contains(const wxPoint2DDouble& c,
6e350141 119 wxPolygonFillMode fillStyle = wxODDEVEN_RULE) const;
23d291c2
BP
120 /**
121 @return @true if the point is within the path.
122 */
123 virtual bool Contains(wxDouble x, wxDouble y,
6e350141 124 wxPolygonFillMode fillStyle = wxODDEVEN_RULE) const;
23324ae1 125
23324ae1 126 /**
23d291c2
BP
127 Gets the bounding box enclosing all points (possibly including control
128 points).
23324ae1 129 */
328f5751 130 wxRect2DDouble GetBox() const;
23d291c2
BP
131 /**
132 Gets the bounding box enclosing all points (possibly including control
133 points).
134 */
135 virtual void GetBox(wxDouble* x, wxDouble* y,
136 wxDouble* w, wxDouble* h) const;
23324ae1 137
23324ae1
FM
138 /**
139 Gets the last point of the current path, (0,0) if not yet set.
140 */
23d291c2
BP
141 virtual void GetCurrentPoint(wxDouble* x, wxDouble* y) const;
142 /**
143 Gets the last point of the current path, (0,0) if not yet set.
144 */
145 wxPoint2DDouble GetCurrentPoint() const;
23324ae1
FM
146
147 /**
23d291c2
BP
148 Returns the native path (CGPathRef for Core Graphics, Path pointer for
149 GDIPlus and a cairo_path_t pointer for cairo).
23324ae1 150 */
da1ed74c 151 virtual void* GetNativePath() const;
23324ae1 152
23324ae1 153 /**
23d291c2
BP
154 Begins a new subpath at (@a x,@a y).
155 */
156 virtual void MoveToPoint(wxDouble x, wxDouble y);
157 /**
158 Begins a new subpath at @a p.
23324ae1 159 */
7c913512 160 void MoveToPoint(const wxPoint2DDouble& p);
23324ae1
FM
161
162 /**
163 Transforms each point of this path by the matrix.
164 */
da1ed74c 165 virtual void Transform(const wxGraphicsMatrix& matrix);
23324ae1
FM
166
167 /**
23d291c2
BP
168 Gives back the native path returned by GetNativePath() because there
169 might be some deallocations necessary (e.g. on cairo the native path
170 returned by GetNativePath() is newly allocated each time).
23324ae1 171 */
da1ed74c 172 virtual void UnGetNativePath(void* p) const;
23324ae1
FM
173};
174
175
e54c96f1 176
23324ae1
FM
177/**
178 @class wxGraphicsObject
7c913512 179
23324ae1
FM
180 This class is the superclass of native graphics objects like pens etc. It
181 allows reference counting. Not instantiated by user code.
7c913512 182
23324ae1 183 @library{wxcore}
23d291c2 184 @category{gdi}
7c913512 185
e54c96f1 186 @see wxGraphicsBrush, wxGraphicsPen, wxGraphicsMatrix, wxGraphicsPath
23324ae1
FM
187*/
188class wxGraphicsObject : public wxObject
189{
190public:
191 /**
23d291c2
BP
192 Returns the renderer that was used to create this instance, or @NULL
193 if it has not been initialized yet.
23324ae1 194 */
328f5751 195 wxGraphicsRenderer* GetRenderer() const;
23324ae1
FM
196
197 /**
23d291c2 198 @return @false if this object is valid, otherwise returns @true.
23324ae1 199 */
328f5751 200 bool IsNull() const;
23324ae1
FM
201};
202
7395c7d6 203/**
ffc78010 204 Anti-aliasing modes used by wxGraphicsContext::SetAntialiasMode().
7395c7d6
SC
205*/
206enum wxAntialiasMode
207{
208 /** No anti-aliasing */
4ee4c7b9
VZ
209 wxANTIALIAS_NONE,
210
7395c7d6
SC
211 /** The default anti-aliasing */
212 wxANTIALIAS_DEFAULT,
213};
214
a173c813
SC
215/**
216 Interpolation quality used by wxGraphicsContext::SetInterpolationQuality().
217 */
218enum wxInterpolationQuality
219{
3399af21
SC
220 /** default interpolation, based on type of context, in general medium quality */
221 wxINTERPOLATION_DEFAULT,
a173c813
SC
222 /** no interpolation */
223 wxINTERPOLATION_NONE,
224 /** fast interpolation, suited for interactivity */
225 wxINTERPOLATION_FAST,
226 /** better quality */
227 wxINTERPOLATION_GOOD,
228 /** best quality, not suited for interactivity */
229 wxINTERPOLATION_BEST
230};
231
7395c7d6 232/**
4ee4c7b9 233 Compositing is done using Porter-Duff compositions
7395c7d6 234 (see http://keithp.com/~keithp/porterduff/p253-porter.pdf) with
ffc78010 235 wxGraphicsContext::SetCompositionMode().
7395c7d6
SC
236
237 The description give a short equation on how the values of a resulting
238 pixel are calculated.
ec3110ae
SC
239 @e R = Result, @e S = Source, @e D = Destination, colors premultiplied with alpha
240 @e Ra, @e Sa, @e Da their alpha components
7395c7d6
SC
241*/
242enum wxCompositionMode
243{
fec4e458
VZ
244 /**
245 Indicates invalid or unsupported composition mode.
246
247 This value can't be passed to wxGraphicsContext::SetCompositionMode().
248
249 @since 2.9.2
250 */
251 wxCOMPOSITION_INVALID = -1,
ec3110ae
SC
252 wxCOMPOSITION_CLEAR, /**< @e R = 0 */
253 wxCOMPOSITION_SOURCE, /**< @e R = S */
254 wxCOMPOSITION_OVER, /**< @e R = @e S + @e D*(1 - @e Sa) */
255 wxCOMPOSITION_IN, /**< @e R = @e S*@e Da */
256 wxCOMPOSITION_OUT, /**< @e R = @e S*(1 - @e Da) */
257 wxCOMPOSITION_ATOP, /**< @e R = @e S*@e Da + @e D*(1 - @e Sa) */
258
259 wxCOMPOSITION_DEST, /**< @e R = @e D, essentially a noop */
260 wxCOMPOSITION_DEST_OVER, /**< @e R = @e S*(1 - @e Da) + @e D */
261 wxCOMPOSITION_DEST_IN, /**< @e R = @e D*@e Sa */
262 wxCOMPOSITION_DEST_OUT, /**< @e R = @e D*(1 - @e Sa) */
263 wxCOMPOSITION_DEST_ATOP, /**< @e R = @e S*(1 - @e Da) + @e D*@e Sa */
264 wxCOMPOSITION_XOR, /**< @e R = @e S*(1 - @e Da) + @e D*(1 - @e Sa) */
bbd783e0 265 wxCOMPOSITION_ADD /**< @e R = @e S + @e D */
7395c7d6 266};
23324ae1 267
3c9e0b81
VZ
268/**
269 Represents a bitmap.
270
271 The objects of this class are not created directly but only via
0a470e5e
VZ
272 wxGraphicsContext or wxGraphicsRenderer CreateBitmap(),
273 CreateBitmapFromImage() or CreateSubBitmap() methods. They can subsequently
274 be used with wxGraphicsContext::DrawBitmap(). The only other operation is
275 testing for the bitmap validity which can be performed using IsNull()
276 method inherited from the base class.
3c9e0b81
VZ
277 */
278class wxGraphicsBitmap : public wxGraphicsObject
279{
280public:
281 /**
282 Default constructor creates an invalid bitmap.
283 */
284 wxGraphicsBitmap() {}
08b2d55f
VZ
285
286 /**
287 Return the contents of this bitmap as wxImage.
288
289 Using this method is more efficient than converting wxGraphicsBitmap to
290 wxBitmap first and then to wxImage and can be useful if, for example,
291 you want to save wxGraphicsBitmap as a disk file in a format not
292 directly supported by wxBitmap.
293
294 Invalid image is returned if the bitmap is invalid.
295
296 @since 2.9.3
297 */
298 wxImage ConvertToImage() const;
3c9e0b81 299};
e54c96f1 300
23324ae1
FM
301/**
302 @class wxGraphicsContext
7c913512 303
9cc4ab85
BP
304 A wxGraphicsContext instance is the object that is drawn upon. It is
305 created by a renderer using wxGraphicsRenderer::CreateContext(). This can
306 be either directly using a renderer instance, or indirectly using the
307 static convenience Create() functions of wxGraphicsContext that always
308 delegate the task to the default renderer.
7c913512 309
d974a494
RR
310 @code
311 void MyCanvas::OnPaint(wxPaintEvent &event)
312 {
313 // Create paint DC
314 wxPaintDC dc(this);
23d291c2 315
d974a494 316 // Create graphics context from it
ea077571 317 wxGraphicsContext *gc = wxGraphicsContext::Create( dc );
23d291c2 318
7e38ae60
RR
319 if (gc)
320 {
0b822969 321 // make a path that contains a circle and some lines
7e38ae60
RR
322 gc->SetPen( *wxRED_PEN );
323 wxGraphicsPath path = gc->CreatePath();
324 path.AddCircle( 50.0, 50.0, 50.0 );
325 path.MoveToPoint(0.0, 50.0);
326 path.AddLineToPoint(100.0, 50.0);
327 path.MoveToPoint(50.0, 0.0);
328 path.AddLineToPoint(50.0, 100.0 );
329 path.CloseSubpath();
330 path.AddRectangle(25.0, 25.0, 50.0, 50.0);
23d291c2 331
ea077571 332 gc->StrokePath(path);
23d291c2 333
ea077571 334 delete gc;
7e38ae60
RR
335 }
336 }
d974a494
RR
337 @endcode
338
23324ae1 339 @library{wxcore}
23d291c2 340 @category{gdi,dc}
7c913512 341
6d99a337 342 @see wxGraphicsRenderer::CreateContext(), wxGCDC, wxDC
23324ae1
FM
343*/
344class wxGraphicsContext : public wxGraphicsObject
345{
346public:
23324ae1 347 /**
0b822969
RR
348 Creates a wxGraphicsContext from a wxWindow.
349
350 @see wxGraphicsRenderer::CreateContext()
351 */
9cc4ab85 352 static wxGraphicsContext* Create(wxWindow* window);
23d291c2 353
0b822969
RR
354 /**
355 Creates a wxGraphicsContext from a wxWindowDC
356
357 @see wxGraphicsRenderer::CreateContext()
358 */
e33cc297 359 static wxGraphicsContext* Create(const wxWindowDC& windowDC);
23d291c2 360
0b822969
RR
361 /**
362 Creates a wxGraphicsContext from a wxMemoryDC
363
364 @see wxGraphicsRenderer::CreateContext()
365 */
e33cc297 366 static wxGraphicsContext* Create(const wxMemoryDC& memoryDC);
23d291c2 367
0b822969 368 /**
9cc4ab85
BP
369 Creates a wxGraphicsContext from a wxPrinterDC. Under GTK+, this will
370 only work when using the GtkPrint printing backend which is available
371 since GTK+ 2.10.
0b822969 372
9cc4ab85 373 @see wxGraphicsRenderer::CreateContext(), @ref overview_unixprinting
0b822969 374 */
e33cc297 375 static wxGraphicsContext* Create(const wxPrinterDC& printerDC);
0b822969 376
1bf9327b
VZ
377 /**
378 Creates a wxGraphicsContext from a wxEnhMetaFileDC.
379
380 This function, as wxEnhMetaFileDC class itself, is only available only
381 under MSW.
382
383 @see wxGraphicsRenderer::CreateContext()
384 */
e33cc297 385 static wxGraphicsContext* Create(const wxEnhMetaFileDC& metaFileDC);
1bf9327b 386
0a470e5e
VZ
387 /**
388 Creates a wxGraphicsContext associated with a wxImage.
389
390 The image specifies the size of the context as well as whether alpha is
391 supported (if wxImage::HasAlpha()) or not and the initial contents of
392 the context. The @a image object must have a life time greater than
393 that of the new context as the context copies its contents back to the
394 image when it is destroyed.
395
396 @since 2.9.3
397 */
398 static wxGraphicsContext* Create(wxImage& image);
399
0b822969 400 /**
9cc4ab85 401 Clips drawings to the specified region.
23324ae1 402 */
da1ed74c 403 virtual void Clip(const wxRegion& region) = 0;
0b822969
RR
404
405 /**
9cc4ab85 406 Clips drawings to the specified rectangle.
0b822969 407 */
da1ed74c 408 virtual void Clip(wxDouble x, wxDouble y, wxDouble w, wxDouble h) = 0;
23324ae1
FM
409
410 /**
9cc4ab85
BP
411 Concatenates the passed in transform with the current transform of this
412 context.
23324ae1 413 */
da1ed74c 414 virtual void ConcatTransform(const wxGraphicsMatrix& matrix) = 0;
23324ae1 415
3c9e0b81
VZ
416 /**
417 Creates wxGraphicsBitmap from an existing wxBitmap.
418
419 Returns an invalid wxNullGraphicsBitmap on failure.
420 */
421 virtual wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ) = 0;
422
0a470e5e
VZ
423 /**
424 Creates wxGraphicsBitmap from an existing wxImage.
425
426 This method is more efficient than converting wxImage to wxBitmap first
427 and then calling CreateBitmap() but otherwise has the same effect.
428
429 Returns an invalid wxNullGraphicsBitmap on failure.
430
431 @since 2.9.3
432 */
433 virtual wxGraphicsBitmap CreateBitmapFromImage(const wxImage& image);
434
3c9e0b81
VZ
435 /**
436 Extracts a sub-bitmap from an existing bitmap.
437
438 Currently this function is implemented in the native MSW and OS X
439 versions but not when using Cairo.
440 */
441 virtual wxGraphicsBitmap CreateSubBitmap(const wxGraphicsBitmap& bitmap,
442 wxDouble x, wxDouble y,
443 wxDouble w, wxDouble h) = 0;
444
23324ae1
FM
445 /**
446 Creates a native brush from a wxBrush.
447 */
da1ed74c 448 virtual wxGraphicsBrush CreateBrush(const wxBrush& brush) const;
23324ae1
FM
449
450 /**
451 Creates a native graphics font from a wxFont and a text colour.
452 */
5267aefd
FM
453 virtual wxGraphicsFont CreateFont(const wxFont& font,
454 const wxColour& col = *wxBLACK) const;
23324ae1 455
fa378d36
VZ
456 /**
457 Creates a font object with the specified attributes.
458
459 The use of overload taking wxFont is preferred, see
460 wxGraphicsRenderer::CreateFont() for more details.
461
462 @since 2.9.3
463 */
464 virtual wxGraphicsFont CreateFont(double sizeInPixels,
465 const wxString& facename,
466 int flags = wxFONTFLAG_DEFAULT,
467 const wxColour& col = *wxBLACK) const;
468
23324ae1 469 /**
9cc4ab85
BP
470 Creates a wxGraphicsContext from a native context. This native context
471 must be a CGContextRef for Core Graphics, a Graphics pointer for
472 GDIPlus, or a cairo_t pointer for cairo.
3c4f71cc 473
9cc4ab85 474 @see wxGraphicsRenderer::CreateContextFromNativeContext()
23324ae1 475 */
da1ed74c 476 static wxGraphicsContext* CreateFromNative(void* context);
23324ae1
FM
477
478 /**
19e496b6
RR
479 Creates a wxGraphicsContext from a native window.
480
9cc4ab85 481 @see wxGraphicsRenderer::CreateContextFromNativeWindow()
23324ae1 482 */
da1ed74c 483 static wxGraphicsContext* CreateFromNativeWindow(void* window);
23324ae1
FM
484
485 /**
4ee4c7b9
VZ
486 Creates a native brush with a linear gradient.
487
488 The brush starts at (@a x1, @a y1) and ends at (@a x2, @a y2). Either
489 just the start and end gradient colours (@a c1 and @a c2) or full set
490 of gradient @a stops can be specified.
491
492 The version taking wxGraphicsGradientStops is new in wxWidgets 2.9.1.
23324ae1 493 */
4ee4c7b9
VZ
494 //@{
495 wxGraphicsBrush
496 CreateLinearGradientBrush(wxDouble x1, wxDouble y1,
497 wxDouble x2, wxDouble y2,
498 const wxColour& c1, const wxColour& c2) const;
499
500 wxGraphicsBrush
501 CreateLinearGradientBrush(wxDouble x1, wxDouble y1,
502 wxDouble x2, wxDouble y2,
503 const wxGraphicsGradientStops& stops) const;
504 //@}
23324ae1
FM
505
506 /**
9cc4ab85
BP
507 Creates a native affine transformation matrix from the passed in
508 values. The default parameters result in an identity matrix.
23324ae1 509 */
5267aefd
FM
510 virtual wxGraphicsMatrix CreateMatrix(wxDouble a = 1.0, wxDouble b = 0.0,
511 wxDouble c = 0.0, wxDouble d = 1.0,
a44f3b5a
FM
512 wxDouble tx = 0.0,
513 wxDouble ty = 0.0) const;
23324ae1
FM
514
515 /**
516 Creates a native graphics path which is initially empty.
517 */
328f5751 518 wxGraphicsPath CreatePath() const;
23324ae1
FM
519
520 /**
521 Creates a native pen from a wxPen.
522 */
da1ed74c 523 virtual wxGraphicsPen CreatePen(const wxPen& pen) const;
23324ae1
FM
524
525 /**
4ee4c7b9
VZ
526 Creates a native brush with a radial gradient.
527
d13b34d3 528 The brush originates at (@a xo, @a yc) and ends on a circle around
4ee4c7b9
VZ
529 (@a xc, @a yc) with the given @a radius.
530
531 The gradient may be specified either by its start and end colours @a
532 oColor and @a cColor or by a full set of gradient @a stops.
533
534 The version taking wxGraphicsGradientStops is new in wxWidgets 2.9.1.
23324ae1 535 */
4ee4c7b9
VZ
536 //@{
537 virtual wxGraphicsBrush
538 CreateRadialGradientBrush(wxDouble xo, wxDouble yo,
539 wxDouble xc, wxDouble yc,
540 wxDouble radius,
541 const wxColour& oColor,
542 const wxColour& cColor) const;
543
544 virtual wxGraphicsBrush
545 CreateRadialGradientBrush(wxDouble xo, wxDouble yo,
546 wxDouble xc, wxDouble yc,
547 wxDouble radius,
548 const wxGraphicsGradientStops& stops) = 0;
549 //@}
23324ae1
FM
550
551 /**
9cc4ab85
BP
552 Draws the bitmap. In case of a mono bitmap, this is treated as a mask
553 and the current brushed is used for filling.
23324ae1 554 */
3c9e0b81
VZ
555 //@{
556 virtual void DrawBitmap(const wxGraphicsBitmap& bmp,
557 wxDouble x, wxDouble y,
558 wxDouble w, wxDouble h ) = 0;
559 virtual void DrawBitmap(const wxBitmap& bmp,
560 wxDouble x, wxDouble y,
fadc2df6 561 wxDouble w, wxDouble h) = 0;
3c9e0b81 562 //@}
23324ae1
FM
563
564 /**
565 Draws an ellipse.
566 */
da1ed74c 567 virtual void DrawEllipse(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
23324ae1
FM
568
569 /**
570 Draws the icon.
571 */
fadc2df6
FM
572 virtual void DrawIcon(const wxIcon& icon, wxDouble x, wxDouble y,
573 wxDouble w, wxDouble h) = 0;
23324ae1
FM
574
575 /**
576 Draws a polygon.
577 */
fadc2df6 578 virtual void DrawLines(size_t n, const wxPoint2DDouble* points,
382f12e4 579 wxPolygonFillMode fillStyle = wxODDEVEN_RULE);
23324ae1
FM
580
581 /**
582 Draws the path by first filling and then stroking.
583 */
fadc2df6 584 virtual void DrawPath(const wxGraphicsPath& path,
382f12e4 585 wxPolygonFillMode fillStyle = wxODDEVEN_RULE);
23324ae1
FM
586
587 /**
588 Draws a rectangle.
589 */
fadc2df6 590 virtual void DrawRectangle(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
23324ae1
FM
591
592 /**
593 Draws a rounded rectangle.
594 */
da1ed74c
FM
595 virtual void DrawRoundedRectangle(wxDouble x, wxDouble y, wxDouble w,
596 wxDouble h, wxDouble radius);
23324ae1 597
23324ae1 598 /**
9cc4ab85 599 Draws text at the defined position.
23324ae1 600 */
7c913512 601 void DrawText(const wxString& str, wxDouble x, wxDouble y);
9cc4ab85
BP
602 /**
603 Draws text at the defined position.
604
cbd251ac
BP
605 @param str
606 The text to draw.
607 @param x
608 The x coordinate position to draw the text at.
609 @param y
610 The y coordinate position to draw the text at.
9cc4ab85
BP
611 @param angle
612 The angle relative to the (default) horizontal direction to draw
613 the string.
614 */
615 void DrawText(const wxString& str, wxDouble x, wxDouble y, wxDouble angle);
616 /**
617 Draws text at the defined position.
618
cbd251ac
BP
619 @param str
620 The text to draw.
621 @param x
622 The x coordinate position to draw the text at.
623 @param y
624 The y coordinate position to draw the text at.
9cc4ab85
BP
625 @param backgroundBrush
626 Brush to fill the text with.
627 */
5a395566 628 void DrawText(const wxString& str, wxDouble x, wxDouble y,
9cc4ab85
BP
629 const wxGraphicsBrush& backgroundBrush);
630 /**
631 Draws text at the defined position.
632
cbd251ac
BP
633 @param str
634 The text to draw.
635 @param x
636 The x coordinate position to draw the text at.
637 @param y
638 The y coordinate position to draw the text at.
9cc4ab85
BP
639 @param angle
640 The angle relative to the (default) horizontal direction to draw
641 the string.
642 @param backgroundBrush
643 Brush to fill the text with.
644 */
5a395566 645 void DrawText(const wxString& str, wxDouble x, wxDouble y,
9cc4ab85 646 wxDouble angle, const wxGraphicsBrush& backgroundBrush);
23324ae1
FM
647
648 /**
649 Fills the path with the current brush.
650 */
fadc2df6 651 virtual void FillPath(const wxGraphicsPath& path,
382f12e4 652 wxPolygonFillMode fillStyle = wxODDEVEN_RULE) = 0;
23324ae1
FM
653
654 /**
9cc4ab85
BP
655 Returns the native context (CGContextRef for Core Graphics, Graphics
656 pointer for GDIPlus and cairo_t pointer for cairo).
23324ae1 657 */
da1ed74c 658 virtual void* GetNativeContext() = 0;
23324ae1
FM
659
660 /**
4cc4bfaf 661 Fills the @a widths array with the widths from the beginning of
9cc4ab85 662 @a text to the corresponding character of @a text.
23324ae1 663 */
fadc2df6
FM
664 virtual void GetPartialTextExtents(const wxString& text,
665 wxArrayDouble& widths) const = 0;
23324ae1
FM
666
667 /**
668 Gets the dimensions of the string using the currently selected font.
9cc4ab85
BP
669
670 @param text
671 The text string to measure.
672 @param width
673 Variable to store the total calculated width of the text.
674 @param height
675 Variable to store the total calculated height of the text.
676 @param descent
677 Variable to store the dimension from the baseline of the font to
678 the bottom of the descender.
679 @param externalLeading
680 Any extra vertical space added to the font by the font designer
681 (usually is zero).
23324ae1 682 */
da1ed74c
FM
683 virtual void GetTextExtent(const wxString& text, wxDouble* width,
684 wxDouble* height, wxDouble* descent,
685 wxDouble* externalLeading) const = 0;
23324ae1
FM
686
687 /**
688 Gets the current transformation matrix of this context.
689 */
da1ed74c 690 virtual wxGraphicsMatrix GetTransform() const = 0;
23324ae1
FM
691
692 /**
693 Resets the clipping to original shape.
694 */
da1ed74c 695 virtual void ResetClip() = 0;
23324ae1
FM
696
697 /**
9cc4ab85 698 Rotates the current transformation matrix (in radians).
23324ae1 699 */
da1ed74c 700 virtual void Rotate(wxDouble angle) = 0;
23324ae1
FM
701
702 /**
703 Scales the current transformation matrix.
704 */
da1ed74c 705 virtual void Scale(wxDouble xScale, wxDouble yScale) = 0;
23324ae1 706
23324ae1
FM
707 /**
708 Sets the brush for filling paths.
709 */
710 void SetBrush(const wxBrush& brush);
9cc4ab85
BP
711 /**
712 Sets the brush for filling paths.
713 */
ccf39540 714 virtual void SetBrush(const wxGraphicsBrush& brush);
23324ae1 715
23324ae1
FM
716 /**
717 Sets the font for drawing text.
718 */
719 void SetFont(const wxFont& font, const wxColour& colour);
9cc4ab85
BP
720 /**
721 Sets the font for drawing text.
722 */
ccf39540 723 virtual void SetFont(const wxGraphicsFont& font);
23324ae1 724
23324ae1
FM
725 /**
726 Sets the pen used for stroking.
727 */
ccf39540 728 void SetPen(const wxPen& pen);
9cc4ab85
BP
729 /**
730 Sets the pen used for stroking.
731 */
ccf39540 732 virtual void SetPen(const wxGraphicsPen& pen);
23324ae1
FM
733
734 /**
735 Sets the current transformation matrix of this context
736 */
da1ed74c 737 virtual void SetTransform(const wxGraphicsMatrix& matrix) = 0;
23324ae1
FM
738
739 /**
740 Strokes a single line.
741 */
fadc2df6 742 virtual void StrokeLine(wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2);
23324ae1 743
23324ae1 744 /**
9cc4ab85
BP
745 Stroke disconnected lines from begin to end points, fastest method
746 available for this purpose.
23324ae1 747 */
ccf39540
FM
748 virtual void StrokeLines(size_t n, const wxPoint2DDouble* beginPoints,
749 const wxPoint2DDouble* endPoints);
9cc4ab85 750 /**
25941fc5
VZ
751 Stroke lines connecting all the points.
752
753 Unlike the other overload of this function, this method draws a single
754 polyline and not a number of disconnected lines.
9cc4ab85 755 */
ccf39540 756 virtual void StrokeLines(size_t n, const wxPoint2DDouble* points);
23324ae1
FM
757
758 /**
759 Strokes along a path with the current pen.
760 */
da1ed74c 761 virtual void StrokePath(const wxGraphicsPath& path) = 0;
23324ae1
FM
762
763 /**
764 Translates the current transformation matrix.
765 */
da1ed74c 766 virtual void Translate(wxDouble dx, wxDouble dy) = 0;
7395c7d6
SC
767
768 /**
4ee4c7b9 769 Redirects all rendering is done into a fully transparent temporary context
7395c7d6
SC
770 */
771 virtual void BeginLayer(wxDouble opacity) = 0;
772
4ee4c7b9
VZ
773 /**
774 Composites back the drawings into the context with the opacity given at
7395c7d6
SC
775 the BeginLayer call
776 */
777 virtual void EndLayer() = 0;
778
4ee4c7b9 779 /**
7395c7d6
SC
780 Sets the antialiasing mode, returns true if it supported
781 */
782 virtual bool SetAntialiasMode(wxAntialiasMode antialias) = 0;
783
4ee4c7b9 784 /**
7395c7d6
SC
785 Returns the current shape antialiasing mode
786 */
787 virtual wxAntialiasMode GetAntialiasMode() const ;
4ee4c7b9 788
a173c813
SC
789 /**
790 Sets the interpolation quality, returns true if it supported
791 */
792 virtual bool SetInterpolationQuality(wxInterpolationQuality interpolation) = 0;
793
794 /**
795 Returns the current interpolation quality
796 */
797 virtual wxInterpolationQuality GetInterpolationQuality() const;
798
7395c7d6
SC
799 /**
800 Sets the compositing operator, returns true if it supported
801 */
802 virtual bool SetCompositionMode(wxCompositionMode op) = 0;
803
4ee4c7b9 804 /**
7395c7d6
SC
805 Returns the current compositing operator
806 */
807 virtual wxCompositionMode GetCompositionMode() const;
4ee4c7b9 808
e33cc297 809
6fc53251
RD
810 /**
811 Push the current state of the context's transformation matrix on a
812 stack.
813
814 @see wxGraphicsContext::PopState
815 */
816 virtual void PushState() = 0;
817
818 /**
819 Pops a stored state from the stack and sets the current transformation
820 matrix to that state.
821
822 @see wxGraphicsContext::PopState
823 */
824 virtual void PopState() = 0;
825
826
e33cc297
RD
827 virtual void EnableOffset(bool enable = true);
828 void DisableOffset();
829 bool OffsetEnabled();
830
4ee4c7b9
VZ
831};
832
833/**
834 Represents a single gradient stop in a collection of gradient stops as
835 represented by wxGraphicsGradientStops.
836
837 @library{wxcore}
838 @category{gdi}
839
840 @since 2.9.1
841*/
842class wxGraphicsGradientStop
843{
844public:
845 /**
846 Creates a stop with the given colour and position.
847
848 @param col The colour of this stop. Note that the alpha component of
849 the colour is honoured thus allowing the background colours to
850 partially show through the gradient.
2028c33a
VZ
851 @param pos The stop position, must be in [0, 1] range with 0 being the
852 beginning and 1 the end of the gradient.
4ee4c7b9 853 */
2028c33a 854 wxGraphicsGradientStop(wxColour col = wxTransparentColour, float pos = 0.);
4ee4c7b9
VZ
855
856 /// Return the stop colour.
857 const wxColour& GetColour() const;
858
859 /**
860 Change the stop colour.
861
862 @param col The new colour.
863 */
864 void SetColour(const wxColour& col);
865
866 /// Return the stop position.
867 float GetPosition() const;
868
869 /**
870 Change the stop position.
871
2028c33a 872 @param pos The new position, must always be in [0, 1] range.
4ee4c7b9
VZ
873 */
874 void SetPosition(float pos);
23324ae1
FM
875};
876
4ee4c7b9
VZ
877/**
878 Represents a collection of wxGraphicGradientStop values for use with
879 CreateLinearGradientBrush and CreateRadialGradientBrush.
880
881 The stops are maintained in order of position. If two or more stops are
882 added with the same position then the one(s) added later come later.
883 This can be useful for producing discontinuities in the colour gradient.
884
885 Notice that this class is write-once, you can't modify the stops once they
886 had been added.
887
888 @library{wxcore}
889 @category{gdi}
890
891 @since 2.9.1
892*/
893class wxGraphicsGradientStops
894{
895public:
896 /**
897 Initializes the gradient stops with the given boundary colours.
898
899 Creates a wxGraphicsGradientStops instance with start colour given
900 by @a startCol and end colour given by @a endCol.
901 */
902 wxGraphicsGradientStops(wxColour startCol = wxTransparentColour,
903 wxColour endCol = wxTransparentColour);
23324ae1 904
4ee4c7b9
VZ
905 /**
906 Add a new stop.
907 */
908 //@{
909 void Add(const wxGraphicsGradientStop& stop);
910 void Add(wxColour col, float pos);
911 //@}
912
913 /**
914 Returns the stop at the given index.
915
916 @param n The index, must be in [0, GetCount()) range.
917 */
918 wxGraphicsGradientStop Item(unsigned n) const;
919
920 /**
921 Returns the number of stops.
922 */
923 unsigned GetCount() const;
924
925 /**
926 Set the start colour to @a col
927 */
928 void SetStartColour(wxColour col);
929
930 /**
931 Returns the start colour.
932 */
933 wxColour GetStartColour() const;
934
935 /**
936 Set the end colour to @a col
937 */
938 void SetEndColour(wxColour col);
939
940 /**
941 Returns the end colour.
942 */
943 wxColour GetEndColour() const;
944};
e54c96f1 945
23324ae1
FM
946/**
947 @class wxGraphicsRenderer
7c913512 948
23324ae1 949 A wxGraphicsRenderer is the instance corresponding to the rendering engine
ea077571 950 used. There may be multiple instances on a system, if there are different
9cc4ab85
BP
951 rendering engines present, but there is always only one instance per
952 engine. This instance is pointed back to by all objects created by it
953 (wxGraphicsContext, wxGraphicsPath etc) and can be retrieved through their
954 wxGraphicsObject::GetRenderer() method. Therefore you can create an
955 additional instance of a path etc. by calling
956 wxGraphicsObject::GetRenderer() and then using the appropriate CreateXXX()
957 function of that renderer.
ea077571
RR
958
959 @code
960 wxGraphicsPath *path = // from somewhere
961 wxGraphicsBrush *brush = path->GetRenderer()->CreateBrush( *wxBLACK_BRUSH );
962 @endcode
7c913512 963
23324ae1 964 @library{wxcore}
9cc4ab85 965 @category{gdi}
23324ae1
FM
966*/
967class wxGraphicsRenderer : public wxObject
968{
969public:
3c9e0b81
VZ
970 /**
971 Creates wxGraphicsBitmap from an existing wxBitmap.
972
973 Returns an invalid wxNullGraphicsBitmap on failure.
974 */
975 virtual wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ) = 0;
976
0a470e5e
VZ
977 /**
978 Creates wxGraphicsBitmap from an existing wxImage.
979
980 This method is more efficient than converting wxImage to wxBitmap first
981 and then calling CreateBitmap() but otherwise has the same effect.
982
983 Returns an invalid wxNullGraphicsBitmap on failure.
984
985 @since 2.9.3
986 */
987 virtual wxGraphicsBitmap CreateBitmapFromImage(const wxImage& image) = 0;
988
6e6f074b
RD
989 /**
990 Creates a wxImage from a wxGraphicsBitmap.
991
992 This method is used by the more convenient wxGraphicsBitmap::ConvertToImage.
993 */
994 virtual wxImage CreateImageFromBitmap(const wxGraphicsBitmap& bmp) = 0;
995
3c9e0b81
VZ
996 /**
997 Creates wxGraphicsBitmap from a native bitmap handle.
998
999 @a bitmap meaning is platform-dependent. Currently it's a GDI+ @c
1000 Bitmap pointer under MSW, @c CGImage pointer under OS X or a @c
1001 cairo_surface_t pointer when using Cairo under any platform.
1002 */
1003 virtual wxGraphicsBitmap CreateBitmapFromNativeBitmap( void* bitmap ) = 0;
1004
23324ae1 1005 /**
ea077571 1006 Creates a wxGraphicsContext from a wxWindow.
23324ae1 1007 */
ea077571 1008 virtual wxGraphicsContext* CreateContext(wxWindow* window) = 0;
23d291c2 1009
ea077571
RR
1010 /**
1011 Creates a wxGraphicsContext from a wxWindowDC
1012 */
e33cc297 1013 virtual wxGraphicsContext* CreateContext(const wxWindowDC& windowDC) = 0 ;
23d291c2 1014
ea077571
RR
1015 /**
1016 Creates a wxGraphicsContext from a wxMemoryDC
1017 */
e33cc297 1018 virtual wxGraphicsContext* CreateContext(const wxMemoryDC& memoryDC) = 0 ;
23d291c2 1019
ea077571
RR
1020 /**
1021 Creates a wxGraphicsContext from a wxPrinterDC
1022 */
e33cc297 1023 virtual wxGraphicsContext* CreateContext(const wxPrinterDC& printerDC) = 0 ;
23324ae1 1024
1bf9327b
VZ
1025 /**
1026 Creates a wxGraphicsContext from a wxEnhMetaFileDC.
1027
1028 This function, as wxEnhMetaFileDC class itself, is only available only
1029 under MSW.
1030 */
e33cc297 1031 virtual wxGraphicsContext* CreateContext(const wxEnhMetaFileDC& metaFileDC) = 0;
1bf9327b 1032
0a470e5e
VZ
1033 /**
1034 Creates a wxGraphicsContext associated with a wxImage.
1035
1036 This function is used by wxContext::CreateFromImage() and is not
1037 normally called directly.
1038
1039 @since 2.9.3
1040 */
7422d797 1041 wxGraphicsContext* CreateContextFromImage(wxImage& image);
0a470e5e 1042
23324ae1 1043 /**
ea077571 1044 Creates a native brush from a wxBrush.
23324ae1 1045 */
da1ed74c 1046 virtual wxGraphicsBrush CreateBrush(const wxBrush& brush) = 0;
ea077571 1047
23324ae1 1048 /**
9cc4ab85
BP
1049 Creates a wxGraphicsContext from a native context. This native context
1050 must be a CGContextRef for Core Graphics, a Graphics pointer for
1051 GDIPlus, or a cairo_t pointer for cairo.
23324ae1 1052 */
da1ed74c 1053 virtual wxGraphicsContext* CreateContextFromNativeContext(void* context) = 0;
23324ae1
FM
1054
1055 /**
1056 Creates a wxGraphicsContext from a native window.
1057 */
da1ed74c 1058 virtual wxGraphicsContext* CreateContextFromNativeWindow(void* window) = 0;
23324ae1 1059
27a3b24b 1060 /**
4ee4c7b9 1061 Creates a wxGraphicsContext that can be used for measuring texts only.
27a3b24b
KO
1062 No drawing commands are allowed.
1063 */
1064 virtual wxGraphicsContext * CreateMeasuringContext() = 0;
1065
23324ae1
FM
1066 /**
1067 Creates a native graphics font from a wxFont and a text colour.
1068 */
5267aefd
FM
1069 virtual wxGraphicsFont CreateFont(const wxFont& font,
1070 const wxColour& col = *wxBLACK) = 0;
23324ae1 1071
fa378d36
VZ
1072 /**
1073 Creates a graphics font with the given characteristics.
1074
1075 If possible, the CreateFont() overload taking wxFont should be used
1076 instead. The main advantage of this overload is that it can be used
1077 without X server connection under Unix when using Cairo.
1078
1079 @param sizeInPixels
1080 Height of the font in user space units, i.e. normally pixels.
1081 Notice that this is different from the overload taking wxFont as
1082 wxFont size is specified in points.
1083 @param facename
1084 The name of the font. The same font name might not be available
1085 under all platforms so the font name can also be empty to use the
1086 default platform font.
1087 @param flags
1088 Combination of wxFontFlag enum elements. Currently only
1089 @c wxFONTFLAG_ITALIC and @c wxFONTFLAG_BOLD are supported. By
1090 default the normal font version is used.
1091 @param col
1092 The font colour, black by default.
1093
1094 @since 2.9.3
1095 */
1096 virtual wxGraphicsFont CreateFont(double sizeInPixels,
1097 const wxString& facename,
1098 int flags = wxFONTFLAG_DEFAULT,
1099 const wxColour& col = *wxBLACK) = 0;
1100
4ee4c7b9 1101
23324ae1 1102 /**
4ee4c7b9
VZ
1103 Creates a native brush with a linear gradient.
1104
1105 Stops support is new since wxWidgets 2.9.1, previously only the start
1106 and end colours could be specified.
23324ae1 1107 */
9cc4ab85
BP
1108 virtual wxGraphicsBrush CreateLinearGradientBrush(wxDouble x1,
1109 wxDouble y1,
1110 wxDouble x2,
1111 wxDouble y2,
4ee4c7b9 1112 const wxGraphicsGradientStops& stops) = 0;
23324ae1
FM
1113
1114 /**
9cc4ab85
BP
1115 Creates a native affine transformation matrix from the passed in
1116 values. The defaults result in an identity matrix.
23324ae1 1117 */
5267aefd
FM
1118 virtual wxGraphicsMatrix CreateMatrix(wxDouble a = 1.0, wxDouble b = 0.0,
1119 wxDouble c = 0.0, wxDouble d = 1.0,
a44f3b5a 1120 wxDouble tx = 0.0,
5267aefd 1121 wxDouble ty = 0.0) = 0;
23324ae1
FM
1122
1123 /**
1124 Creates a native graphics path which is initially empty.
1125 */
da1ed74c 1126 virtual wxGraphicsPath CreatePath() = 0;
23324ae1
FM
1127
1128 /**
1129 Creates a native pen from a wxPen.
1130 */
da1ed74c 1131 virtual wxGraphicsPen CreatePen(const wxPen& pen) = 0;
23324ae1
FM
1132
1133 /**
4ee4c7b9
VZ
1134 Creates a native brush with a radial gradient.
1135
1136 Stops support is new since wxWidgets 2.9.1, previously only the start
1137 and end colours could be specified.
23324ae1 1138 */
da1ed74c
FM
1139 virtual wxGraphicsBrush CreateRadialGradientBrush(wxDouble xo, wxDouble yo,
1140 wxDouble xc, wxDouble yc,
1141 wxDouble radius,
4ee4c7b9 1142 const wxGraphicsGradientStops& stops) = 0;
23324ae1 1143
3c9e0b81
VZ
1144 /**
1145 Extracts a sub-bitmap from an existing bitmap.
1146
1147 Currently this function is implemented in the native MSW and OS X
1148 versions but not when using Cairo.
1149 */
1150 virtual wxGraphicsBitmap CreateSubBitmap(const wxGraphicsBitmap& bitmap,
1151 wxDouble x, wxDouble y,
1152 wxDouble w, wxDouble h) = 0;
1153
23324ae1
FM
1154 /**
1155 Returns the default renderer on this platform. On OS X this is the Core
9cc4ab85
BP
1156 Graphics (a.k.a. Quartz 2D) renderer, on MSW the GDIPlus renderer, and
1157 on GTK we currently default to the cairo renderer.
23324ae1 1158 */
ea077571 1159 static wxGraphicsRenderer* GetDefaultRenderer();
e33cc297
RD
1160 static wxGraphicsRenderer* GetCairoRenderer();
1161
23324ae1
FM
1162};
1163
1164
e54c96f1 1165
23324ae1
FM
1166/**
1167 @class wxGraphicsBrush
7c913512 1168
9cc4ab85
BP
1169 A wxGraphicsBrush is a native representation of a brush. The contents are
1170 specific and private to the respective renderer. Instances are ref counted
1171 and can therefore be assigned as usual. The only way to get a valid
1172 instance is via wxGraphicsContext::CreateBrush() or
1173 wxGraphicsRenderer::CreateBrush().
7c913512 1174
23324ae1 1175 @library{wxcore}
9cc4ab85 1176 @category{gdi}
23324ae1
FM
1177*/
1178class wxGraphicsBrush : public wxGraphicsObject
1179{
1180public:
7c913512 1181
23324ae1
FM
1182};
1183
1184
e54c96f1 1185
23324ae1
FM
1186/**
1187 @class wxGraphicsFont
7c913512 1188
9cc4ab85
BP
1189 A wxGraphicsFont is a native representation of a font. The contents are
1190 specific and private to the respective renderer. Instances are ref counted
1191 and can therefore be assigned as usual. The only way to get a valid
1192 instance is via wxGraphicsContext::CreateFont() or
1193 wxGraphicsRenderer::CreateFont().
7c913512 1194
23324ae1 1195 @library{wxcore}
9cc4ab85 1196 @category{gdi}
23324ae1
FM
1197*/
1198class wxGraphicsFont : public wxGraphicsObject
1199{
1200public:
7c913512 1201
23324ae1
FM
1202};
1203
1204
e54c96f1 1205
23324ae1
FM
1206/**
1207 @class wxGraphicsPen
7c913512 1208
9cc4ab85
BP
1209 A wxGraphicsPen is a native representation of a pen. The contents are
1210 specific and private to the respective renderer. Instances are ref counted
1211 and can therefore be assigned as usual. The only way to get a valid
1212 instance is via wxGraphicsContext::CreatePen() or
1213 wxGraphicsRenderer::CreatePen().
7c913512 1214
23324ae1 1215 @library{wxcore}
9cc4ab85 1216 @category{gdi}
23324ae1
FM
1217*/
1218class wxGraphicsPen : public wxGraphicsObject
1219{
1220public:
7c913512 1221
23324ae1
FM
1222};
1223
1224
e54c96f1 1225
23324ae1
FM
1226/**
1227 @class wxGraphicsMatrix
7c913512 1228
9cc4ab85
BP
1229 A wxGraphicsMatrix is a native representation of an affine matrix. The
1230 contents are specific and private to the respective renderer. Instances are
1231 ref counted and can therefore be assigned as usual. The only way to get a
1232 valid instance is via wxGraphicsContext::CreateMatrix() or
1233 wxGraphicsRenderer::CreateMatrix().
7c913512 1234
23324ae1 1235 @library{wxcore}
9cc4ab85 1236 @category{gdi}
23324ae1
FM
1237*/
1238class wxGraphicsMatrix : public wxGraphicsObject
1239{
1240public:
23324ae1 1241 /**
9cc4ab85
BP
1242 Concatenates the matrix passed with the current matrix.
1243 */
1244 virtual void Concat(const wxGraphicsMatrix* t);
1245 /**
1246 Concatenates the matrix passed with the current matrix.
23324ae1 1247 */
7c913512 1248 void Concat(const wxGraphicsMatrix& t);
23324ae1
FM
1249
1250 /**
1251 Returns the component values of the matrix via the argument pointers.
1252 */
9cc4ab85
BP
1253 virtual void Get(wxDouble* a = NULL, wxDouble* b = NULL,
1254 wxDouble* c = NULL, wxDouble* d = NULL,
1255 wxDouble* tx = NULL, wxDouble* ty = NULL) const;
23324ae1
FM
1256
1257 /**
9cc4ab85
BP
1258 Returns the native representation of the matrix. For CoreGraphics this
1259 is a CFAffineMatrix pointer, for GDIPlus a Matrix Pointer, and for
1260 Cairo a cairo_matrix_t pointer.
23324ae1 1261 */
da1ed74c 1262 virtual void* GetNativeMatrix() const;
23324ae1
FM
1263
1264 /**
1265 Inverts the matrix.
1266 */
da1ed74c 1267 virtual void Invert();
23324ae1 1268
9cc4ab85
BP
1269 /**
1270 Returns @true if the elements of the transformation matrix are equal.
1271 */
1272 virtual bool IsEqual(const wxGraphicsMatrix* t) const;
23324ae1
FM
1273 /**
1274 Returns @true if the elements of the transformation matrix are equal.
1275 */
328f5751 1276 bool IsEqual(const wxGraphicsMatrix& t) const;
23324ae1
FM
1277
1278 /**
1279 Return @true if this is the identity matrix.
1280 */
da1ed74c 1281 virtual bool IsIdentity() const;
23324ae1
FM
1282
1283 /**
9cc4ab85 1284 Rotates this matrix (in radians).
23324ae1 1285 */
da1ed74c 1286 virtual void Rotate(wxDouble angle);
23324ae1
FM
1287
1288 /**
1289 Scales this matrix.
1290 */
da1ed74c 1291 virtual void Scale(wxDouble xScale, wxDouble yScale);
23324ae1
FM
1292
1293 /**
9cc4ab85
BP
1294 Sets the matrix to the respective values (default values are the
1295 identity matrix).
23324ae1 1296 */
5267aefd
FM
1297 virtual void Set(wxDouble a = 1.0, wxDouble b = 0.0, wxDouble c = 0.0,
1298 wxDouble d = 1.0, wxDouble tx = 0.0, wxDouble ty = 0.0);
23324ae1
FM
1299
1300 /**
1301 Applies this matrix to a distance (ie. performs all transforms except
9cc4ab85 1302 translations).
23324ae1 1303 */
da1ed74c 1304 virtual void TransformDistance(wxDouble* dx, wxDouble* dy) const;
23324ae1
FM
1305
1306 /**
1307 Applies this matrix to a point.
1308 */
da1ed74c 1309 virtual void TransformPoint(wxDouble* x, wxDouble* y) const;
23324ae1
FM
1310
1311 /**
1312 Translates this matrix.
1313 */
da1ed74c 1314 virtual void Translate(wxDouble dx, wxDouble dy);
23324ae1 1315};
9cc4ab85 1316
e33cc297
RD
1317
1318const wxGraphicsPen wxNullGraphicsPen;
1319const wxGraphicsBrush wxNullGraphicsBrush;
1320const wxGraphicsFont wxNullGraphicsFont;
1321const wxGraphicsBitmap wxNullGraphicsBitmap;
1322const wxGraphicsMatrix wxNullGraphicsMatrix;
1323const wxGraphicsPath wxNullGraphicsPath;