]>
git.saurik.com Git - wxWidgets.git/blob - interface/graphics.h
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: interface of wxGraphicsPath
4 // Author: wxWidgets team
6 // Licence: wxWindows license
7 /////////////////////////////////////////////////////////////////////////////
13 A wxGraphicsPath is a native representation of an geometric path. The contents
14 are specific an private to the respective renderer. Instances are ref counted and can
15 therefore be assigned as usual. The only way to get a valid instance is via a
16 CreatePath call on the graphics context or the renderer instance.
21 class wxGraphicsPath
: public wxGraphicsObject
28 void AddArc ( wxDouble x
, wxDouble y
, wxDouble r
,
30 wxDouble endAngle
, bool clockwise
);
31 void AddArc ( const wxPoint2DDouble
& c
, wxDouble r
,
38 Appends a an arc to two tangents connecting (current) to (x1,y1) and (x1,y1) to
39 (x2,y2), also a straight line from (current) to (x1,y1).
41 void AddArcToPoint ( wxDouble x1
, wxDouble y1
, wxDouble x2
,
46 Appends a circle around (x,y) with radius r as a new closed subpath.
48 void AddCircle ( wxDouble x
, wxDouble y
, wxDouble r
);
54 void AddCurveToPoint ( wxDouble cx1
, wxDouble cy1
, wxDouble cx2
,
58 void AddCurveToPoint ( const wxPoint2DDouble
& c1
,
59 const wxPoint2DDouble
& c2
,
60 const wxPoint2DDouble
& e
);
64 Appends an ellipse fitting into the passed in rectangle.
66 void AddEllipse ( wxDouble x
, wxDouble y
, wxDouble w
, wxDouble h
);
72 void AddLineToPoint ( wxDouble x
, wxDouble y
);
73 void AddLineToPoint ( const wxPoint2DDouble
& p
);
79 void AddPath ( const wxGraphicsPath
& path
);
82 Adds a quadratic Bezier curve from the current point, using a control point and
85 void AddQuadCurveToPoint ( wxDouble cx
, wxDouble cy
, wxDouble x
,
89 Appends a rectangle as a new closed subpath.
91 void AddRectangle ( wxDouble x
, wxDouble y
, wxDouble w
, wxDouble h
);
94 Appends a rounded rectangle as a new closed subpath.
96 void AddRoundedRectangle ( wxDouble x
, wxDouble y
, wxDouble w
,
101 Closes the current sub-path.
107 Returns @true if the point is within the path.
109 bool Contains ( const wxPoint2DDouble
& c
,
110 int fillStyle
= wxODDEVEN_RULE
) const ;
111 const bool Contains ( wxDouble x
, wxDouble y
,
112 int fillStyle
= wxODDEVEN_RULE
) const ;
117 Gets the bounding box enclosing all points (possibly including control points).
119 wxRect2DDouble
GetBox () const ;
120 const void GetBox ( wxDouble
* x
, wxDouble
* y
, wxDouble
* w
,
126 Gets the last point of the current path, (0,0) if not yet set.
128 void GetCurrentPoint ( wxDouble
* x
, wxDouble
* y
) const ;
129 const wxPoint2DDouble
GetCurrentPoint () const ;
133 Returns the native path (CGPathRef for Core Graphics, Path pointer for GDIPlus
134 and a cairo_path_t pointer for cairo).
136 void * GetNativePath () const ;
140 Begins a new subpath at (x,y)
142 void MoveToPoint ( wxDouble x
, wxDouble y
);
143 void MoveToPoint ( const wxPoint2DDouble
& p
);
147 Transforms each point of this path by the matrix.
149 void Transform ( const wxGraphicsMatrix
& matrix
);
152 Gives back the native path returned by GetNativePath() because there might be
153 some deallocations necessary (eg on cairo the native path returned by
154 GetNativePath is newly allocated each time).
156 void UnGetNativePath ( void * p
) const ;
162 @class wxGraphicsObject
163 @wxheader{graphics.h}
165 This class is the superclass of native graphics objects like pens etc. It
166 allows reference counting. Not instantiated by user code.
171 @see wxGraphicsBrush, wxGraphicsPen, wxGraphicsMatrix, wxGraphicsPath
173 class wxGraphicsObject
: public wxObject
177 Returns the renderer that was used to create this instance, or @NULL if it has
178 not been initialized yet
180 wxGraphicsRenderer
* GetRenderer () const ;
183 Is this object valid (@false) or still empty (@true)?
191 @class wxGraphicsContext
192 @wxheader{graphics.h}
194 A wxGraphicsContext instance is the object that is drawn upon. It is created by
195 a renderer using the CreateContext calls.., this can be either directly using a renderer
196 instance, or indirectly using the static convenience CreateXXX functions of
197 wxGraphicsContext that always delegate the task to the default renderer.
200 void MyCanvas::OnPaint(wxPaintEvent &event)
205 // Create graphics context from it
206 wxGraphicsContext *gc = dc.CreateGraphicsContext();
210 // make a path that contains a circle and some lines, centered at 100,100
211 gc->SetPen( *wxRED_PEN );
212 wxGraphicsPath path = gc->CreatePath();
213 path.AddCircle( 50.0, 50.0, 50.0 );
214 path.MoveToPoint(0.0, 50.0);
215 path.AddLineToPoint(100.0, 50.0);
216 path.MoveToPoint(50.0, 0.0);
217 path.AddLineToPoint(50.0, 100.0 );
219 path.AddRectangle(25.0, 25.0, 50.0, 50.0);
221 gc->StrokePath(path);
232 @see wxGraphicsRenderer:: CreateContext
234 class wxGraphicsContext
: public wxGraphicsObject
239 Clips drawings to the rectangle.
241 void Clip ( const wxRegion
& region
);
242 void Clip ( wxDouble x
, wxDouble y
, wxDouble w
, wxDouble h
);
246 Concatenates the passed in transform with the current transform of this context
248 void ConcatTransform ( const wxGraphicsMatrix
& matrix
);
252 Creates a wxGraphicsContext from a wxWindow.
254 @see wxGraphicsRenderer:: CreateContext
256 wxGraphicsContext
* Create ( const wxWindowDC
& dc
);
257 wxGraphicsContext
* Create ( wxWindow
* window
);
261 Creates a native brush from a wxBrush.
263 wxGraphicsBrush
CreateBrush ( const wxBrush
& brush
) const ;
266 Creates a native graphics font from a wxFont and a text colour.
268 wxGraphicsFont
CreateFont ( const wxFont
& font
,
269 const wxColour
& col
= wxBLACK
) const ;
272 Creates a wxGraphicsContext from a native context. This native context must be
273 eg a CGContextRef for Core Graphics, a Graphics pointer for GDIPlus or a
274 cairo_t pointer for cairo.
276 Creates a wxGraphicsContext from a native window.
278 @see wxGraphicsRenderer:: CreateContextFromNativeContext
280 wxGraphicsContext
* CreateFromNative ( void * context
);
283 @see wxGraphicsRenderer:: CreateContextFromNativeWindow
285 wxGraphicsContext
* CreateFromNativeWindow ( void * window
);
288 Creates a native brush, having a linear gradient, starting at (x1,y1) with
289 color c1 to (x2,y2) with color c2
291 wxGraphicsBrush
CreateLinearGradientBrush ( wxDouble x1
,
295 const wxColouramp
; c1
,
296 const wxColouramp
; c2
) const ;
299 Creates a native affine transformation matrix from the passed in values. The
300 defaults result in an identity matrix.
302 wxGraphicsMatrix
CreateMatrix ( wxDouble a
= 1.0 , wxDouble b
= 0.0 ,
306 wxDouble ty
= 0.0 ) const ;
309 Creates a native graphics path which is initially empty.
311 wxGraphicsPath
CreatePath () const ;
314 Creates a native pen from a wxPen.
316 wxGraphicsPen
CreatePen ( const wxPen
& pen
) const ;
319 Creates a native brush, having a radial gradient originating at (xo,yc) with
320 color oColour and ends on a circle around (xc,yc) with radius r and color cColour
322 wxGraphicsBrush
CreateRadialGradientBrush ( wxDouble xo
,
327 const wxColour
& oColor
,
328 const wxColour
& cColor
) const ;
331 Draws the bitmap. In case of a mono bitmap, this is treated as a mask and the
332 current brushed is used for filling.
334 void DrawBitmap ( const wxBitmap
& bmp
, wxDouble x
, wxDouble y
,
335 wxDouble w
, wxDouble h
);
340 void DrawEllipse ( wxDouble x
, wxDouble y
, wxDouble w
, wxDouble h
);
345 void DrawIcon ( const wxIcon
& icon
, wxDouble x
, wxDouble y
,
346 wxDouble w
, wxDouble h
);
351 void DrawLines ( size_t n
, const wxPoint2DDouble
* points
,
352 int fillStyle
= wxODDEVEN_RULE
);
355 Draws the path by first filling and then stroking.
357 void DrawPath ( const wxGraphicsPath
& path
,
358 int fillStyle
= wxODDEVEN_RULE
);
363 void DrawRectangle ( wxDouble x
, wxDouble y
, wxDouble w
,
367 Draws a rounded rectangle.
369 void DrawRoundedRectangle ( wxDouble x
, wxDouble y
, wxDouble w
,
375 Draws a text at the defined position, at the given angle.
377 void DrawText ( const wxString
& str
, wxDouble x
, wxDouble y
,
379 void DrawText ( const wxString
& str
, wxDouble x
, wxDouble y
);
383 Fills the path with the current brush.
385 void FillPath ( const wxGraphicsPath
& path
,
386 int fillStyle
= wxODDEVEN_RULE
);
389 Returns the native context (CGContextRef for Core Graphics, Graphics pointer
390 for GDIPlus and cairo_t pointer for cairo).
392 void * GetNativeContext ();
395 Fills the @a widths array with the widths from the beginning of
396 @a text to the corresponding character of @e text.
398 void GetPartialTextExtents ( const wxString
& text
,
399 wxArrayDouble
& widths
) const ;
402 Gets the dimensions of the string using the currently selected font.
403 @e string is the text string to measure, @e w and @e h are
404 the total width and height respectively, @a descent is the
405 dimension from the baseline of the font to the bottom of the
406 descender, and @a externalLeading is any extra vertical space added
407 to the font by the font designer (usually is zero).
409 void GetTextExtent ( const wxString
& text
, wxDouble
* width
,
412 wxDouble
* externalLeading
) const ;
415 Gets the current transformation matrix of this context.
417 wxGraphicsMatrix
GetTransform () const ;
420 Resets the clipping to original shape.
425 Rotates the current transformation matrix (radians),
427 void Rotate ( wxDouble angle
);
430 Scales the current transformation matrix.
432 void Scale ( wxDouble xScale
, wxDouble yScale
);
436 Sets the brush for filling paths.
438 void SetBrush ( const wxBrush
& brush
);
439 void SetBrush ( const wxGraphicsBrush
& brush
);
444 Sets the font for drawing text.
446 void SetFont ( const wxFont
& font
, const wxColour
& colour
);
447 void SetFont ( const wxGraphicsFont
& font
);
452 Sets the pen used for stroking.
454 void SetPen ( const wxGraphicsPen
& pen
);
455 void SetPen ( const wxPen
& pen
);
459 Sets the current transformation matrix of this context
461 void SetTransform ( const wxGraphicsMatrix
& matrix
);
464 Strokes a single line.
466 void StrokeLine ( wxDouble x1
, wxDouble y1
, wxDouble x2
,
471 Stroke disconnected lines from begin to end points, fastest method available
474 void StrokeLines ( size_t n
, const wxPoint2DDouble
* beginPoints
,
475 const wxPoint2DDouble
* endPoints
);
476 void StrokeLines ( size_t n
, const wxPoint2DDouble
* points
);
480 Strokes along a path with the current pen.
482 void StrokePath ( const wxGraphicsPath
& path
);
485 Translates the current transformation matrix.
487 void Translate ( wxDouble dx
, wxDouble dy
);
493 @class wxGraphicsRenderer
494 @wxheader{graphics.h}
496 A wxGraphicsRenderer is the instance corresponding to the rendering engine
497 used. There may be multiple instances on a system, if there are different rendering engines present, but there is always one instance per engine, eg there is ONE core graphics renderer instance on OSX. This instance is pointed back to by all objects created by it (wxGraphicsContext, wxGraphicsPath etc). Therefore you can create ag additional instances of paths etc. by calling GetRenderer() and then using the appropriate CreateXXX function.
502 class wxGraphicsRenderer
: public wxObject
506 Creates a native brush from a wxBrush.
508 wxGraphicsBrush
CreateBrush ( const wxBrush
& brush
);
512 Creates a wxGraphicsContext from a wxWindow.
514 wxGraphicsContext
* CreateContext ( const wxWindowDC
& dc
);
515 wxGraphicsContext
* CreateContext ( wxWindow
* window
);
519 Creates a wxGraphicsContext from a native context. This native context must be
520 eg a CGContextRef for Core Graphics, a Graphics pointer for GDIPlus or a cairo_t pointer for cairo.
522 wxGraphicsContext
* CreateContextFromNativeContext ( void * context
);
525 Creates a wxGraphicsContext from a native window.
527 wxGraphicsContext
* CreateContextFromNativeWindow ( void * window
);
530 Creates a native graphics font from a wxFont and a text colour.
532 wxGraphicsFont
CreateFont ( const wxFont
& font
,
533 const wxColour
& col
= wxBLACK
);
536 Creates a native brush, having a linear gradient, starting at (x1,y1) with
537 color c1 to (x2,y2) with color c2
539 wxGraphicsBrush
CreateLinearGradientBrush ( wxDouble x1
,
543 const wxColouramp
; c1
,
544 const wxColouramp
; c2
);
547 Creates a native affine transformation matrix from the passed in values. The
548 defaults result in an identity matrix.
550 wxGraphicsMatrix
CreateMatrix ( wxDouble a
= 1.0 , wxDouble b
= 0.0 ,
557 Creates a native graphics path which is initially empty.
559 wxGraphicsPath
CreatePath ();
562 Creates a native pen from a wxPen.
564 wxGraphicsPen
CreatePen ( const wxPen
& pen
);
567 Creates a native brush, having a radial gradient originating at (xo,yc) with
568 color oColour and ends on a circle around (xc,yc) with radius r and color cColour
570 wxGraphicsBrush
CreateRadialGradientBrush ( wxDouble xo
,
575 const wxColour
& oColour
,
576 const wxColour
& cColour
);
579 Returns the default renderer on this platform. On OS X this is the Core
580 Graphics (a.k.a. Quartz 2D) renderer, on MSW the GDIPlus renderer, and on GTK we currently default to the cairo renderer.
582 wxGraphicsRenderer
* GetDefaultRenderer ();
588 @class wxGraphicsBrush
589 @wxheader{graphics.h}
595 class wxGraphicsBrush
: public wxGraphicsObject
604 @class wxGraphicsFont
605 @wxheader{graphics.h}
611 class wxGraphicsFont
: public wxGraphicsObject
621 @wxheader{graphics.h}
627 class wxGraphicsPen
: public wxGraphicsObject
636 @class wxGraphicsMatrix
637 @wxheader{graphics.h}
639 A wxGraphicsMatrix is a native representation of an affine matrix. The contents
640 are specific and private to the respective renderer. Instances are ref counted and can therefore be assigned as usual. The only way to get a valid instance is via a CreateMatrix call on the graphics context or the renderer instance.
645 class wxGraphicsMatrix
: public wxGraphicsObject
652 void Concat ( const wxGraphicsMatrix
* t
);
653 void Concat ( const wxGraphicsMatrix
& t
);
657 Returns the component values of the matrix via the argument pointers.
659 void Get ( wxDouble
* a
= NULL
, wxDouble
* b
= NULL
, wxDouble
* c
= NULL
,
660 wxDouble
* d
= NULL
, wxDouble
* tx
= NULL
,
661 wxDouble
* ty
= NULL
) const ;
664 Returns the native representation of the matrix. For CoreGraphics this is a
665 CFAffineMatrix pointer. For GDIPlus a Matrix Pointer and for Cairo a cairo_matrix_t pointer.
667 void * GetNativeMatrix () const ;
675 Returns @true if the elements of the transformation matrix are equal.
677 bool IsEqual ( const wxGraphicsMatrix
& t
) const ;
680 Return @true if this is the identity matrix.
682 bool IsIdentity () const ;
685 Rotates this matrix (radians).
687 void Rotate ( wxDouble angle
);
692 void Scale ( wxDouble xScale
, wxDouble yScale
);
695 Sets the matrix to the respective values (default values are the identity
698 void Set ( wxDouble a
= 1.0 , wxDouble b
= 0.0 , wxDouble c
= 0.0 ,
699 wxDouble d
= 1.0 , wxDouble tx
= 0.0 ,
703 Applies this matrix to a distance (ie. performs all transforms except
706 void TransformDistance ( wxDouble
* dx
, wxDouble
* dy
) const ;
709 Applies this matrix to a point.
711 void TransformPoint ( wxDouble
* x
, wxDouble
* y
) const ;
714 Translates this matrix.
716 void Translate ( wxDouble dx
, wxDouble dy
);