]>
git.saurik.com Git - wxWidgets.git/blob - interface/graphics.h
d1cdf137b2398ab7cfb1d414d79882ddf535de3c
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 wxGraphicsRenderer::CreateContext(). This can be either directly
196 using a renderer instance, or indirectly using the static convenience Create()
197 functions of 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 = wxGraphicsContext::CreateContext( dc );
210 // make a path that contains a circle and some lines
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
238 Creates a wxGraphicsContext from a wxWindow.
240 @see wxGraphicsRenderer::CreateContext()
242 static wxGraphicsContext
* Create ( wxWindow
* window
) ;
245 Creates a wxGraphicsContext from a wxWindowDC
247 @see wxGraphicsRenderer::CreateContext()
249 static wxGraphicsContext
* Create ( const wxWindowDC
& dc
) ;
252 Creates a wxGraphicsContext from a wxMemoryDC
254 @see wxGraphicsRenderer::CreateContext()
256 static wxGraphicsContext
* Create ( const wxMemoryDC
& dc
) ;
259 Creates a wxGraphicsContext from a wxPrinterDC
261 @see wxGraphicsRenderer::CreateContext()
263 static wxGraphicsContext
* Create ( const wxPrinterDC
& dc
) ;
266 Clips drawings to the region
268 void Clip ( const wxRegion
& region
);
271 Clips drawings to the rectangle.
273 void Clip ( wxDouble x
, wxDouble y
, wxDouble w
, wxDouble h
);
276 Concatenates the passed in transform with the current transform of this context
278 void ConcatTransform ( const wxGraphicsMatrix
& matrix
);
282 Creates a native brush from a wxBrush.
284 wxGraphicsBrush
CreateBrush ( const wxBrush
& brush
) const ;
287 Creates a native graphics font from a wxFont and a text colour.
289 wxGraphicsFont
CreateFont ( const wxFont
& font
,
290 const wxColour
& col
= wxBLACK
) const ;
293 Creates a wxGraphicsContext from a native context. This native context must be
294 eg a CGContextRef for Core Graphics, a Graphics pointer for GDIPlus or a
295 cairo_t pointer for cairo.
297 Creates a wxGraphicsContext from a native window.
299 @see wxGraphicsRenderer:: CreateContextFromNativeContext
301 wxGraphicsContext
* CreateFromNative ( void * context
);
304 @see wxGraphicsRenderer:: CreateContextFromNativeWindow
306 wxGraphicsContext
* CreateFromNativeWindow ( void * window
);
309 Creates a native brush, having a linear gradient, starting at (x1,y1) with
310 color c1 to (x2,y2) with color c2
312 wxGraphicsBrush
CreateLinearGradientBrush ( wxDouble x1
,
316 const wxColouramp
; c1
,
317 const wxColouramp
; c2
) const ;
320 Creates a native affine transformation matrix from the passed in values. The
321 defaults result in an identity matrix.
323 wxGraphicsMatrix
CreateMatrix ( wxDouble a
= 1.0 , wxDouble b
= 0.0 ,
327 wxDouble ty
= 0.0 ) const ;
330 Creates a native graphics path which is initially empty.
332 wxGraphicsPath
CreatePath () const ;
335 Creates a native pen from a wxPen.
337 wxGraphicsPen
CreatePen ( const wxPen
& pen
) const ;
340 Creates a native brush, having a radial gradient originating at (xo,yc) with
341 color oColour and ends on a circle around (xc,yc) with radius r and color cColour
343 wxGraphicsBrush
CreateRadialGradientBrush ( wxDouble xo
,
348 const wxColour
& oColor
,
349 const wxColour
& cColor
) const ;
352 Draws the bitmap. In case of a mono bitmap, this is treated as a mask and the
353 current brushed is used for filling.
355 void DrawBitmap ( const wxBitmap
& bmp
, wxDouble x
, wxDouble y
,
356 wxDouble w
, wxDouble h
);
361 void DrawEllipse ( wxDouble x
, wxDouble y
, wxDouble w
, wxDouble h
);
366 void DrawIcon ( const wxIcon
& icon
, wxDouble x
, wxDouble y
,
367 wxDouble w
, wxDouble h
);
372 void DrawLines ( size_t n
, const wxPoint2DDouble
* points
,
373 int fillStyle
= wxODDEVEN_RULE
);
376 Draws the path by first filling and then stroking.
378 void DrawPath ( const wxGraphicsPath
& path
,
379 int fillStyle
= wxODDEVEN_RULE
);
384 void DrawRectangle ( wxDouble x
, wxDouble y
, wxDouble w
,
388 Draws a rounded rectangle.
390 void DrawRoundedRectangle ( wxDouble x
, wxDouble y
, wxDouble w
,
396 Draws a text at the defined position, at the given angle.
398 void DrawText ( const wxString
& str
, wxDouble x
, wxDouble y
,
400 void DrawText ( const wxString
& str
, wxDouble x
, wxDouble y
);
404 Fills the path with the current brush.
406 void FillPath ( const wxGraphicsPath
& path
,
407 int fillStyle
= wxODDEVEN_RULE
);
410 Returns the native context (CGContextRef for Core Graphics, Graphics pointer
411 for GDIPlus and cairo_t pointer for cairo).
413 void * GetNativeContext ();
416 Fills the @a widths array with the widths from the beginning of
417 @a text to the corresponding character of @e text.
419 void GetPartialTextExtents ( const wxString
& text
,
420 wxArrayDouble
& widths
) const ;
423 Gets the dimensions of the string using the currently selected font.
424 @e string is the text string to measure, @e w and @e h are
425 the total width and height respectively, @a descent is the
426 dimension from the baseline of the font to the bottom of the
427 descender, and @a externalLeading is any extra vertical space added
428 to the font by the font designer (usually is zero).
430 void GetTextExtent ( const wxString
& text
, wxDouble
* width
,
433 wxDouble
* externalLeading
) const ;
436 Gets the current transformation matrix of this context.
438 wxGraphicsMatrix
GetTransform () const ;
441 Resets the clipping to original shape.
446 Rotates the current transformation matrix (radians),
448 void Rotate ( wxDouble angle
);
451 Scales the current transformation matrix.
453 void Scale ( wxDouble xScale
, wxDouble yScale
);
457 Sets the brush for filling paths.
459 void SetBrush ( const wxBrush
& brush
);
460 void SetBrush ( const wxGraphicsBrush
& brush
);
465 Sets the font for drawing text.
467 void SetFont ( const wxFont
& font
, const wxColour
& colour
);
468 void SetFont ( const wxGraphicsFont
& font
);
473 Sets the pen used for stroking.
475 void SetPen ( const wxGraphicsPen
& pen
);
476 void SetPen ( const wxPen
& pen
);
480 Sets the current transformation matrix of this context
482 void SetTransform ( const wxGraphicsMatrix
& matrix
);
485 Strokes a single line.
487 void StrokeLine ( wxDouble x1
, wxDouble y1
, wxDouble x2
,
492 Stroke disconnected lines from begin to end points, fastest method available
495 void StrokeLines ( size_t n
, const wxPoint2DDouble
* beginPoints
,
496 const wxPoint2DDouble
* endPoints
);
497 void StrokeLines ( size_t n
, const wxPoint2DDouble
* points
);
501 Strokes along a path with the current pen.
503 void StrokePath ( const wxGraphicsPath
& path
);
506 Translates the current transformation matrix.
508 void Translate ( wxDouble dx
, wxDouble dy
);
514 @class wxGraphicsRenderer
515 @wxheader{graphics.h}
517 A wxGraphicsRenderer is the instance corresponding to the rendering engine
518 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.
523 class wxGraphicsRenderer
: public wxObject
527 Creates a native brush from a wxBrush.
529 wxGraphicsBrush
CreateBrush ( const wxBrush
& brush
);
533 Creates a wxGraphicsContext from a wxWindow.
535 wxGraphicsContext
* CreateContext ( const wxWindowDC
& dc
);
536 wxGraphicsContext
* CreateContext ( wxWindow
* window
);
540 Creates a wxGraphicsContext from a native context. This native context must be
541 eg a CGContextRef for Core Graphics, a Graphics pointer for GDIPlus or a cairo_t pointer for cairo.
543 wxGraphicsContext
* CreateContextFromNativeContext ( void * context
);
546 Creates a wxGraphicsContext from a native window.
548 wxGraphicsContext
* CreateContextFromNativeWindow ( void * window
);
551 Creates a native graphics font from a wxFont and a text colour.
553 wxGraphicsFont
CreateFont ( const wxFont
& font
,
554 const wxColour
& col
= wxBLACK
);
557 Creates a native brush, having a linear gradient, starting at (x1,y1) with
558 color c1 to (x2,y2) with color c2
560 wxGraphicsBrush
CreateLinearGradientBrush ( wxDouble x1
,
564 const wxColouramp
; c1
,
565 const wxColouramp
; c2
);
568 Creates a native affine transformation matrix from the passed in values. The
569 defaults result in an identity matrix.
571 wxGraphicsMatrix
CreateMatrix ( wxDouble a
= 1.0 , wxDouble b
= 0.0 ,
578 Creates a native graphics path which is initially empty.
580 wxGraphicsPath
CreatePath ();
583 Creates a native pen from a wxPen.
585 wxGraphicsPen
CreatePen ( const wxPen
& pen
);
588 Creates a native brush, having a radial gradient originating at (xo,yc) with
589 color oColour and ends on a circle around (xc,yc) with radius r and color cColour
591 wxGraphicsBrush
CreateRadialGradientBrush ( wxDouble xo
,
596 const wxColour
& oColour
,
597 const wxColour
& cColour
);
600 Returns the default renderer on this platform. On OS X this is the Core
601 Graphics (a.k.a. Quartz 2D) renderer, on MSW the GDIPlus renderer, and on GTK we currently default to the cairo renderer.
603 wxGraphicsRenderer
* GetDefaultRenderer ();
609 @class wxGraphicsBrush
610 @wxheader{graphics.h}
616 class wxGraphicsBrush
: public wxGraphicsObject
625 @class wxGraphicsFont
626 @wxheader{graphics.h}
632 class wxGraphicsFont
: public wxGraphicsObject
642 @wxheader{graphics.h}
648 class wxGraphicsPen
: public wxGraphicsObject
657 @class wxGraphicsMatrix
658 @wxheader{graphics.h}
660 A wxGraphicsMatrix is a native representation of an affine matrix. The contents
661 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.
666 class wxGraphicsMatrix
: public wxGraphicsObject
673 void Concat ( const wxGraphicsMatrix
* t
);
674 void Concat ( const wxGraphicsMatrix
& t
);
678 Returns the component values of the matrix via the argument pointers.
680 void Get ( wxDouble
* a
= NULL
, wxDouble
* b
= NULL
, wxDouble
* c
= NULL
,
681 wxDouble
* d
= NULL
, wxDouble
* tx
= NULL
,
682 wxDouble
* ty
= NULL
) const ;
685 Returns the native representation of the matrix. For CoreGraphics this is a
686 CFAffineMatrix pointer. For GDIPlus a Matrix Pointer and for Cairo a cairo_matrix_t pointer.
688 void * GetNativeMatrix () const ;
696 Returns @true if the elements of the transformation matrix are equal.
698 bool IsEqual ( const wxGraphicsMatrix
& t
) const ;
701 Return @true if this is the identity matrix.
703 bool IsIdentity () const ;
706 Rotates this matrix (radians).
708 void Rotate ( wxDouble angle
);
713 void Scale ( wxDouble xScale
, wxDouble yScale
);
716 Sets the matrix to the respective values (default values are the identity
719 void Set ( wxDouble a
= 1.0 , wxDouble b
= 0.0 , wxDouble c
= 0.0 ,
720 wxDouble d
= 1.0 , wxDouble tx
= 0.0 ,
724 Applies this matrix to a distance (ie. performs all transforms except
727 void TransformDistance ( wxDouble
* dx
, wxDouble
* dy
) const ;
730 Applies this matrix to a point.
732 void TransformPoint ( wxDouble
* x
, wxDouble
* y
) const ;
735 Translates this matrix.
737 void Translate ( wxDouble dx
, wxDouble dy
);