1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: interface of various wxGraphics* classes
4 // Author: wxWidgets team
6 // Licence: wxWindows license
7 /////////////////////////////////////////////////////////////////////////////
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().
21 class wxGraphicsPath
: public wxGraphicsObject
25 Adds an arc of a circle centering at (@a x,@a y) with radius (@a r)
26 from @a startAngle to @a endAngle.
28 virtual void AddArc(wxDouble x
, wxDouble y
, wxDouble r
,
29 wxDouble startAngle
, wxDouble endAngle
,
32 Adds an arc of a circle centering at @a c with radius (@a r)
33 from @a startAngle to @a endAngle.
35 void AddArc(const wxPoint2DDouble
& c
, wxDouble r
,
36 wxDouble startAngle
, wxDouble endAngle
, bool clockwise
);
39 Appends a an arc to two tangents connecting (current) to (@a x1,@a y1)
40 and (@a x1,@a y1) to (@a x2,@a y2), also a straight line from (current)
43 virtual void AddArcToPoint(wxDouble x1
, wxDouble y1
, wxDouble x2
,
44 wxDouble y2
, wxDouble r
);
47 Appends a circle around (@a x,@a y) with radius @a r as a new closed
50 virtual void AddCircle(wxDouble x
, wxDouble y
, wxDouble r
);
53 Adds a cubic bezier curve from the current point, using two control
54 points and an end point.
56 virtual void AddCurveToPoint(wxDouble cx1
, wxDouble cy1
,
57 wxDouble cx2
, wxDouble cy2
,
58 wxDouble x
, wxDouble y
);
60 Adds a cubic bezier curve from the current point, using two control
61 points and an end point.
63 void AddCurveToPoint(const wxPoint2DDouble
& c1
,
64 const wxPoint2DDouble
& c2
,
65 const wxPoint2DDouble
& e
);
68 Appends an ellipse fitting into the passed in rectangle.
70 virtual void AddEllipse(wxDouble x
, wxDouble y
, wxDouble w
, wxDouble h
);
73 Adds a straight line from the current point to (@a x,@a y).
75 virtual void AddLineToPoint(wxDouble x
, wxDouble y
);
77 Adds a straight line from the current point to @a p.
79 void AddLineToPoint(const wxPoint2DDouble
& p
);
84 virtual void AddPath(const wxGraphicsPath
& path
);
87 Adds a quadratic bezier curve from the current point, using a control
88 point and an end point.
90 virtual void AddQuadCurveToPoint(wxDouble cx
, wxDouble cy
,
91 wxDouble x
, wxDouble y
);
94 Appends a rectangle as a new closed subpath.
96 virtual void AddRectangle(wxDouble x
, wxDouble y
, wxDouble w
, wxDouble h
);
99 Appends a rounded rectangle as a new closed subpath.
101 virtual void AddRoundedRectangle(wxDouble x
, wxDouble y
, wxDouble w
,
102 wxDouble h
, wxDouble radius
);
105 Closes the current sub-path.
107 virtual void CloseSubpath();
110 @return @true if the point is within the path.
112 bool Contains(const wxPoint2DDouble
& c
,
113 int fillStyle
= wxODDEVEN_RULE
) const;
115 @return @true if the point is within the path.
117 virtual bool Contains(wxDouble x
, wxDouble y
,
118 int fillStyle
= wxODDEVEN_RULE
) const;
121 Gets the bounding box enclosing all points (possibly including control
124 wxRect2DDouble
GetBox() const;
126 Gets the bounding box enclosing all points (possibly including control
129 virtual void GetBox(wxDouble
* x
, wxDouble
* y
,
130 wxDouble
* w
, wxDouble
* h
) const;
133 Gets the last point of the current path, (0,0) if not yet set.
135 virtual void GetCurrentPoint(wxDouble
* x
, wxDouble
* y
) const;
137 Gets the last point of the current path, (0,0) if not yet set.
139 wxPoint2DDouble
GetCurrentPoint() const;
142 Returns the native path (CGPathRef for Core Graphics, Path pointer for
143 GDIPlus and a cairo_path_t pointer for cairo).
145 virtual void* GetNativePath() const;
148 Begins a new subpath at (@a x,@a y).
150 virtual void MoveToPoint(wxDouble x
, wxDouble y
);
152 Begins a new subpath at @a p.
154 void MoveToPoint(const wxPoint2DDouble
& p
);
157 Transforms each point of this path by the matrix.
159 virtual void Transform(const wxGraphicsMatrix
& matrix
);
162 Gives back the native path returned by GetNativePath() because there
163 might be some deallocations necessary (e.g. on cairo the native path
164 returned by GetNativePath() is newly allocated each time).
166 virtual void UnGetNativePath(void* p
) const;
172 @class wxGraphicsObject
174 This class is the superclass of native graphics objects like pens etc. It
175 allows reference counting. Not instantiated by user code.
180 @see wxGraphicsBrush, wxGraphicsPen, wxGraphicsMatrix, wxGraphicsPath
182 class wxGraphicsObject
: public wxObject
186 Returns the renderer that was used to create this instance, or @NULL
187 if it has not been initialized yet.
189 wxGraphicsRenderer
* GetRenderer() const;
192 @return @false if this object is valid, otherwise returns @true.
200 @class wxGraphicsContext
202 A wxGraphicsContext instance is the object that is drawn upon. It is
203 created by a renderer using wxGraphicsRenderer::CreateContext(). This can
204 be either directly using a renderer instance, or indirectly using the
205 static convenience Create() functions of wxGraphicsContext that always
206 delegate the task to the default renderer.
209 void MyCanvas::OnPaint(wxPaintEvent &event)
214 // Create graphics context from it
215 wxGraphicsContext *gc = wxGraphicsContext::Create( dc );
219 // make a path that contains a circle and some lines
220 gc->SetPen( *wxRED_PEN );
221 wxGraphicsPath path = gc->CreatePath();
222 path.AddCircle( 50.0, 50.0, 50.0 );
223 path.MoveToPoint(0.0, 50.0);
224 path.AddLineToPoint(100.0, 50.0);
225 path.MoveToPoint(50.0, 0.0);
226 path.AddLineToPoint(50.0, 100.0 );
228 path.AddRectangle(25.0, 25.0, 50.0, 50.0);
230 gc->StrokePath(path);
240 @see wxGraphicsRenderer::CreateContext(), wxGCDC, wxDC
242 class wxGraphicsContext
: public wxGraphicsObject
246 Creates a wxGraphicsContext from a wxWindow.
248 @see wxGraphicsRenderer::CreateContext()
250 static wxGraphicsContext
* Create(wxWindow
* window
);
253 Creates a wxGraphicsContext from a wxWindowDC
255 @see wxGraphicsRenderer::CreateContext()
257 static wxGraphicsContext
* Create(const wxWindowDC
& dc
);
260 Creates a wxGraphicsContext from a wxMemoryDC
262 @see wxGraphicsRenderer::CreateContext()
264 static wxGraphicsContext
* Create(const wxMemoryDC
& dc
);
267 Creates a wxGraphicsContext from a wxPrinterDC. Under GTK+, this will
268 only work when using the GtkPrint printing backend which is available
271 @see wxGraphicsRenderer::CreateContext(), @ref overview_unixprinting
273 static wxGraphicsContext
* Create(const wxPrinterDC
& dc
);
276 Clips drawings to the specified region.
278 virtual void Clip(const wxRegion
& region
) = 0;
281 Clips drawings to the specified rectangle.
283 virtual void Clip(wxDouble x
, wxDouble y
, wxDouble w
, wxDouble h
) = 0;
286 Concatenates the passed in transform with the current transform of this
289 virtual void ConcatTransform(const wxGraphicsMatrix
& matrix
) = 0;
292 Creates a native brush from a wxBrush.
294 virtual wxGraphicsBrush
CreateBrush(const wxBrush
& brush
) const;
297 Creates a native graphics font from a wxFont and a text colour.
299 virtual wxGraphicsFont
CreateFont(const wxFont
& font
,
300 const wxColour
& col
= *wxBLACK
) const;
303 Creates a wxGraphicsContext from a native context. This native context
304 must be a CGContextRef for Core Graphics, a Graphics pointer for
305 GDIPlus, or a cairo_t pointer for cairo.
307 @see wxGraphicsRenderer::CreateContextFromNativeContext()
309 static wxGraphicsContext
* CreateFromNative(void* context
);
312 Creates a wxGraphicsContext from a native window.
314 @see wxGraphicsRenderer::CreateContextFromNativeWindow()
316 static wxGraphicsContext
* CreateFromNativeWindow(void* window
);
319 Creates a native brush, having a linear gradient, starting at
320 (@a x1, @a y1) with color @a c1 to (@a x2, @a y2) with color @a c2.
322 virtual wxGraphicsBrush
CreateLinearGradientBrush(wxDouble x1
,
327 const wxColour
& c2
) const;
330 Creates a native affine transformation matrix from the passed in
331 values. The default parameters result in an identity matrix.
333 virtual wxGraphicsMatrix
CreateMatrix(wxDouble a
= 1.0, wxDouble b
= 0.0,
334 wxDouble c
= 0.0, wxDouble d
= 1.0,
336 wxDouble ty
= 0.0) const;
339 Creates a native graphics path which is initially empty.
341 wxGraphicsPath
CreatePath() const;
344 Creates a native pen from a wxPen.
346 virtual wxGraphicsPen
CreatePen(const wxPen
& pen
) const;
349 Creates a native brush, having a radial gradient originating at
350 (@a xo, @a yc) with color @a oColour and ends on a circle around
351 (@a xc, @a yc) with the given @a radius and color @a cColour.
353 virtual wxGraphicsBrush
CreateRadialGradientBrush(wxDouble xo
, wxDouble yo
,
354 wxDouble xc
, wxDouble yc
,
356 const wxColour
& oColor
,
357 const wxColour
& cColor
) const;
360 Draws the bitmap. In case of a mono bitmap, this is treated as a mask
361 and the current brushed is used for filling.
363 virtual void DrawBitmap(const wxBitmap
& bmp
, wxDouble x
, wxDouble y
,
364 wxDouble w
, wxDouble h
) = 0;
369 virtual void DrawEllipse(wxDouble x
, wxDouble y
, wxDouble w
, wxDouble h
);
374 virtual void DrawIcon(const wxIcon
& icon
, wxDouble x
, wxDouble y
,
375 wxDouble w
, wxDouble h
) = 0;
380 virtual void DrawLines(size_t n
, const wxPoint2DDouble
* points
,
381 int fillStyle
= wxODDEVEN_RULE
);
384 Draws the path by first filling and then stroking.
386 virtual void DrawPath(const wxGraphicsPath
& path
,
387 int fillStyle
= wxODDEVEN_RULE
);
392 virtual void DrawRectangle(wxDouble x
, wxDouble y
, wxDouble w
, wxDouble h
);
395 Draws a rounded rectangle.
397 virtual void DrawRoundedRectangle(wxDouble x
, wxDouble y
, wxDouble w
,
398 wxDouble h
, wxDouble radius
);
401 Draws text at the defined position.
403 void DrawText(const wxString
& str
, wxDouble x
, wxDouble y
);
405 Draws text at the defined position.
408 The angle relative to the (default) horizontal direction to draw
411 void DrawText(const wxString
& str
, wxDouble x
, wxDouble y
, wxDouble angle
);
413 Draws text at the defined position.
415 @param backgroundBrush
416 Brush to fill the text with.
418 void DrawText(const wxString
& str
, wxDouble x
, wxDouble y
,
419 const wxGraphicsBrush
& backgroundBrush
);
421 Draws text at the defined position.
424 The angle relative to the (default) horizontal direction to draw
426 @param backgroundBrush
427 Brush to fill the text with.
429 void DrawText(const wxString
& str
, wxDouble x
, wxDouble y
,
430 wxDouble angle
, const wxGraphicsBrush
& backgroundBrush
);
433 Fills the path with the current brush.
435 virtual void FillPath(const wxGraphicsPath
& path
,
436 int fillStyle
= wxODDEVEN_RULE
) = 0;
439 Returns the native context (CGContextRef for Core Graphics, Graphics
440 pointer for GDIPlus and cairo_t pointer for cairo).
442 virtual void* GetNativeContext() = 0;
445 Fills the @a widths array with the widths from the beginning of
446 @a text to the corresponding character of @a text.
448 virtual void GetPartialTextExtents(const wxString
& text
,
449 wxArrayDouble
& widths
) const = 0;
452 Gets the dimensions of the string using the currently selected font.
455 The text string to measure.
457 Variable to store the total calculated width of the text.
459 Variable to store the total calculated height of the text.
461 Variable to store the dimension from the baseline of the font to
462 the bottom of the descender.
463 @param externalLeading
464 Any extra vertical space added to the font by the font designer
467 virtual void GetTextExtent(const wxString
& text
, wxDouble
* width
,
468 wxDouble
* height
, wxDouble
* descent
,
469 wxDouble
* externalLeading
) const = 0;
472 Gets the current transformation matrix of this context.
474 virtual wxGraphicsMatrix
GetTransform() const = 0;
477 Resets the clipping to original shape.
479 virtual void ResetClip() = 0;
482 Rotates the current transformation matrix (in radians).
484 virtual void Rotate(wxDouble angle
) = 0;
487 Scales the current transformation matrix.
489 virtual void Scale(wxDouble xScale
, wxDouble yScale
) = 0;
492 Sets the brush for filling paths.
494 void SetBrush(const wxBrush
& brush
);
496 Sets the brush for filling paths.
498 void SetBrush(const wxGraphicsBrush
& brush
);
501 Sets the font for drawing text.
503 void SetFont(const wxFont
& font
, const wxColour
& colour
);
505 Sets the font for drawing text.
507 void SetFont(const wxGraphicsFont
& font
);
510 Sets the pen used for stroking.
512 void SetPen(const wxGraphicsPen
& pen
);
514 Sets the pen used for stroking.
516 void SetPen(const wxPen
& pen
);
519 Sets the current transformation matrix of this context
521 virtual void SetTransform(const wxGraphicsMatrix
& matrix
) = 0;
524 Strokes a single line.
526 virtual void StrokeLine(wxDouble x1
, wxDouble y1
, wxDouble x2
, wxDouble y2
);
529 Stroke disconnected lines from begin to end points, fastest method
530 available for this purpose.
532 void StrokeLines(size_t n
, const wxPoint2DDouble
* beginPoints
,
533 const wxPoint2DDouble
* endPoints
);
535 Stroke disconnected lines from begin to end points, fastest method
536 available for this purpose.
538 void StrokeLines(size_t n
, const wxPoint2DDouble
* points
);
541 Strokes along a path with the current pen.
543 virtual void StrokePath(const wxGraphicsPath
& path
) = 0;
546 Translates the current transformation matrix.
548 virtual void Translate(wxDouble dx
, wxDouble dy
) = 0;
554 @class wxGraphicsRenderer
556 A wxGraphicsRenderer is the instance corresponding to the rendering engine
557 used. There may be multiple instances on a system, if there are different
558 rendering engines present, but there is always only one instance per
559 engine. This instance is pointed back to by all objects created by it
560 (wxGraphicsContext, wxGraphicsPath etc) and can be retrieved through their
561 wxGraphicsObject::GetRenderer() method. Therefore you can create an
562 additional instance of a path etc. by calling
563 wxGraphicsObject::GetRenderer() and then using the appropriate CreateXXX()
564 function of that renderer.
567 wxGraphicsPath *path = // from somewhere
568 wxGraphicsBrush *brush = path->GetRenderer()->CreateBrush( *wxBLACK_BRUSH );
574 class wxGraphicsRenderer
: public wxObject
578 Creates a wxGraphicsContext from a wxWindow.
580 virtual wxGraphicsContext
* CreateContext(wxWindow
* window
) = 0;
583 Creates a wxGraphicsContext from a wxWindowDC
585 virtual wxGraphicsContext
* CreateContext(const wxWindowDC
& dc
) = 0 ;
588 Creates a wxGraphicsContext from a wxMemoryDC
590 virtual wxGraphicsContext
* CreateContext(const wxMemoryDC
& dc
) = 0 ;
593 Creates a wxGraphicsContext from a wxPrinterDC
595 virtual wxGraphicsContext
* CreateContext(const wxPrinterDC
& dc
) = 0 ;
598 Creates a native brush from a wxBrush.
600 virtual wxGraphicsBrush
CreateBrush(const wxBrush
& brush
) = 0;
603 Creates a wxGraphicsContext from a native context. This native context
604 must be a CGContextRef for Core Graphics, a Graphics pointer for
605 GDIPlus, or a cairo_t pointer for cairo.
607 virtual wxGraphicsContext
* CreateContextFromNativeContext(void* context
) = 0;
610 Creates a wxGraphicsContext from a native window.
612 virtual wxGraphicsContext
* CreateContextFromNativeWindow(void* window
) = 0;
615 Creates a native graphics font from a wxFont and a text colour.
617 virtual wxGraphicsFont
CreateFont(const wxFont
& font
,
618 const wxColour
& col
= *wxBLACK
) = 0;
621 Creates a native brush, having a linear gradient, starting at
622 (@a x1, @a y1) with color @a c1 to (@a x2, @a y2) with color @a c2.
624 virtual wxGraphicsBrush
CreateLinearGradientBrush(wxDouble x1
,
629 const wxColour
& c2
) = 0;
632 Creates a native affine transformation matrix from the passed in
633 values. The defaults result in an identity matrix.
635 virtual wxGraphicsMatrix
CreateMatrix(wxDouble a
= 1.0, wxDouble b
= 0.0,
636 wxDouble c
= 0.0, wxDouble d
= 1.0,
638 wxDouble ty
= 0.0) = 0;
641 Creates a native graphics path which is initially empty.
643 virtual wxGraphicsPath
CreatePath() = 0;
646 Creates a native pen from a wxPen.
648 virtual wxGraphicsPen
CreatePen(const wxPen
& pen
) = 0;
651 Creates a native brush, having a radial gradient originating at
652 (@a xo, @a yc) with color @a oColour and ends on a circle around
653 (@a xc, @a yc) with the given @a radius and color @a cColour.
655 virtual wxGraphicsBrush
CreateRadialGradientBrush(wxDouble xo
, wxDouble yo
,
656 wxDouble xc
, wxDouble yc
,
658 const wxColour
& oColour
,
659 const wxColour
& cColour
) = 0;
662 Returns the default renderer on this platform. On OS X this is the Core
663 Graphics (a.k.a. Quartz 2D) renderer, on MSW the GDIPlus renderer, and
664 on GTK we currently default to the cairo renderer.
666 static wxGraphicsRenderer
* GetDefaultRenderer();
672 @class wxGraphicsBrush
674 A wxGraphicsBrush is a native representation of a brush. The contents are
675 specific and private to the respective renderer. Instances are ref counted
676 and can therefore be assigned as usual. The only way to get a valid
677 instance is via wxGraphicsContext::CreateBrush() or
678 wxGraphicsRenderer::CreateBrush().
683 class wxGraphicsBrush
: public wxGraphicsObject
692 @class wxGraphicsFont
694 A wxGraphicsFont is a native representation of a font. The contents are
695 specific and private to the respective renderer. Instances are ref counted
696 and can therefore be assigned as usual. The only way to get a valid
697 instance is via wxGraphicsContext::CreateFont() or
698 wxGraphicsRenderer::CreateFont().
703 class wxGraphicsFont
: public wxGraphicsObject
714 A wxGraphicsPen is a native representation of a pen. The contents are
715 specific and private to the respective renderer. Instances are ref counted
716 and can therefore be assigned as usual. The only way to get a valid
717 instance is via wxGraphicsContext::CreatePen() or
718 wxGraphicsRenderer::CreatePen().
723 class wxGraphicsPen
: public wxGraphicsObject
732 @class wxGraphicsMatrix
734 A wxGraphicsMatrix is a native representation of an affine matrix. The
735 contents are specific and private to the respective renderer. Instances are
736 ref counted and can therefore be assigned as usual. The only way to get a
737 valid instance is via wxGraphicsContext::CreateMatrix() or
738 wxGraphicsRenderer::CreateMatrix().
743 class wxGraphicsMatrix
: public wxGraphicsObject
747 Concatenates the matrix passed with the current matrix.
749 virtual void Concat(const wxGraphicsMatrix
* t
);
751 Concatenates the matrix passed with the current matrix.
753 void Concat(const wxGraphicsMatrix
& t
);
756 Returns the component values of the matrix via the argument pointers.
758 virtual void Get(wxDouble
* a
= NULL
, wxDouble
* b
= NULL
,
759 wxDouble
* c
= NULL
, wxDouble
* d
= NULL
,
760 wxDouble
* tx
= NULL
, wxDouble
* ty
= NULL
) const;
763 Returns the native representation of the matrix. For CoreGraphics this
764 is a CFAffineMatrix pointer, for GDIPlus a Matrix Pointer, and for
765 Cairo a cairo_matrix_t pointer.
767 virtual void* GetNativeMatrix() const;
772 virtual void Invert();
775 Returns @true if the elements of the transformation matrix are equal.
777 virtual bool IsEqual(const wxGraphicsMatrix
* t
) const;
779 Returns @true if the elements of the transformation matrix are equal.
781 bool IsEqual(const wxGraphicsMatrix
& t
) const;
784 Return @true if this is the identity matrix.
786 virtual bool IsIdentity() const;
789 Rotates this matrix (in radians).
791 virtual void Rotate(wxDouble angle
);
796 virtual void Scale(wxDouble xScale
, wxDouble yScale
);
799 Sets the matrix to the respective values (default values are the
802 virtual void Set(wxDouble a
= 1.0, wxDouble b
= 0.0, wxDouble c
= 0.0,
803 wxDouble d
= 1.0, wxDouble tx
= 0.0, wxDouble ty
= 0.0);
806 Applies this matrix to a distance (ie. performs all transforms except
809 virtual void TransformDistance(wxDouble
* dx
, wxDouble
* dy
) const;
812 Applies this matrix to a point.
814 virtual void TransformPoint(wxDouble
* x
, wxDouble
* y
) const;
817 Translates this matrix.
819 virtual void Translate(wxDouble dx
, wxDouble dy
);