1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: interface of various wxGraphics* classes
4 // Author: wxWidgets team
6 // Licence: wxWindows licence
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.
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.
32 The angles are measured in radians but, contrary to the usual
33 mathematical convention, are always @e clockwise from the horizontal
37 virtual void AddArc(wxDouble x
, wxDouble y
, wxDouble r
,
38 wxDouble startAngle
, wxDouble endAngle
,
40 void AddArc(const wxPoint2DDouble
& c
, wxDouble r
,
41 wxDouble startAngle
, wxDouble endAngle
, bool clockwise
);
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)
49 virtual void AddArcToPoint(wxDouble x1
, wxDouble y1
, wxDouble x2
,
50 wxDouble y2
, wxDouble r
);
53 Appends a circle around (@a x,@a y) with radius @a r as a new closed
56 virtual void AddCircle(wxDouble x
, wxDouble y
, wxDouble r
);
59 Adds a cubic bezier curve from the current point, using two control
60 points and an end point.
62 virtual void AddCurveToPoint(wxDouble cx1
, wxDouble cy1
,
63 wxDouble cx2
, wxDouble cy2
,
64 wxDouble x
, wxDouble y
);
66 Adds a cubic bezier curve from the current point, using two control
67 points and an end point.
69 void AddCurveToPoint(const wxPoint2DDouble
& c1
,
70 const wxPoint2DDouble
& c2
,
71 const wxPoint2DDouble
& e
);
74 Appends an ellipse fitting into the passed in rectangle.
76 virtual void AddEllipse(wxDouble x
, wxDouble y
, wxDouble w
, wxDouble h
);
79 Adds a straight line from the current point to (@a x,@a y).
81 virtual void AddLineToPoint(wxDouble x
, wxDouble y
);
83 Adds a straight line from the current point to @a p.
85 void AddLineToPoint(const wxPoint2DDouble
& p
);
90 virtual void AddPath(const wxGraphicsPath
& path
);
93 Adds a quadratic bezier curve from the current point, using a control
94 point and an end point.
96 virtual void AddQuadCurveToPoint(wxDouble cx
, wxDouble cy
,
97 wxDouble x
, wxDouble y
);
100 Appends a rectangle as a new closed subpath.
102 virtual void AddRectangle(wxDouble x
, wxDouble y
, wxDouble w
, wxDouble h
);
105 Appends a rounded rectangle as a new closed subpath.
107 virtual void AddRoundedRectangle(wxDouble x
, wxDouble y
, wxDouble w
,
108 wxDouble h
, wxDouble radius
);
111 Closes the current sub-path.
113 virtual void CloseSubpath();
116 @return @true if the point is within the path.
118 bool Contains(const wxPoint2DDouble
& c
,
119 wxPolygonFillMode fillStyle
= wxODDEVEN_RULE
) const;
121 @return @true if the point is within the path.
123 virtual bool Contains(wxDouble x
, wxDouble y
,
124 wxPolygonFillMode fillStyle
= wxODDEVEN_RULE
) const;
127 Gets the bounding box enclosing all points (possibly including control
130 wxRect2DDouble
GetBox() const;
132 Gets the bounding box enclosing all points (possibly including control
135 virtual void GetBox(wxDouble
* x
, wxDouble
* y
,
136 wxDouble
* w
, wxDouble
* h
) const;
139 Gets the last point of the current path, (0,0) if not yet set.
141 virtual void GetCurrentPoint(wxDouble
* x
, wxDouble
* y
) const;
143 Gets the last point of the current path, (0,0) if not yet set.
145 wxPoint2DDouble
GetCurrentPoint() const;
148 Returns the native path (CGPathRef for Core Graphics, Path pointer for
149 GDIPlus and a cairo_path_t pointer for cairo).
151 virtual void* GetNativePath() const;
154 Begins a new subpath at (@a x,@a y).
156 virtual void MoveToPoint(wxDouble x
, wxDouble y
);
158 Begins a new subpath at @a p.
160 void MoveToPoint(const wxPoint2DDouble
& p
);
163 Transforms each point of this path by the matrix.
165 virtual void Transform(const wxGraphicsMatrix
& matrix
);
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).
172 virtual void UnGetNativePath(void* p
) const;
178 @class wxGraphicsObject
180 This class is the superclass of native graphics objects like pens etc. It
181 allows reference counting. Not instantiated by user code.
186 @see wxGraphicsBrush, wxGraphicsPen, wxGraphicsMatrix, wxGraphicsPath
188 class wxGraphicsObject
: public wxObject
192 Returns the renderer that was used to create this instance, or @NULL
193 if it has not been initialized yet.
195 wxGraphicsRenderer
* GetRenderer() const;
198 @return @false if this object is valid, otherwise returns @true.
204 Anti-aliasing modes used by wxGraphicsContext::SetAntialiasMode().
208 /** No anti-aliasing */
211 /** The default anti-aliasing */
216 Interpolation quality used by wxGraphicsContext::SetInterpolationQuality().
218 enum wxInterpolationQuality
220 /** default interpolation, based on type of context, in general medium quality */
221 wxINTERPOLATION_DEFAULT
,
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 */
233 Compositing is done using Porter-Duff compositions
234 (see http://keithp.com/~keithp/porterduff/p253-porter.pdf) with
235 wxGraphicsContext::SetCompositionMode().
237 The description give a short equation on how the values of a resulting
238 pixel are calculated.
239 @e R = Result, @e S = Source, @e D = Destination, colors premultiplied with alpha
240 @e Ra, @e Sa, @e Da their alpha components
242 enum wxCompositionMode
245 Indicates invalid or unsupported composition mode.
247 This value can't be passed to wxGraphicsContext::SetCompositionMode().
251 wxCOMPOSITION_INVALID
= -1,
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) */
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) */
265 wxCOMPOSITION_ADD
/**< @e R = @e S + @e D */
271 The objects of this class are not created directly but only via
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.
278 class wxGraphicsBitmap
: public wxGraphicsObject
282 Default constructor creates an invalid bitmap.
284 wxGraphicsBitmap() {}
287 Return the contents of this bitmap as wxImage.
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.
294 Invalid image is returned if the bitmap is invalid.
298 wxImage
ConvertToImage() const;
301 Return the pointer to the native bitmap data. (CGImageRef for Core Graphics,
302 cairo_surface_t for Cairo, Bitmap* for GDI+.)
306 void* GetNativeBitmap() const;
310 @class wxGraphicsContext
312 A wxGraphicsContext instance is the object that is drawn upon. It is
313 created by a renderer using wxGraphicsRenderer::CreateContext(). This can
314 be either directly using a renderer instance, or indirectly using the
315 static convenience Create() functions of wxGraphicsContext that always
316 delegate the task to the default renderer.
319 void MyCanvas::OnPaint(wxPaintEvent &event)
324 // Create graphics context from it
325 wxGraphicsContext *gc = wxGraphicsContext::Create( dc );
329 // make a path that contains a circle and some lines
330 gc->SetPen( *wxRED_PEN );
331 wxGraphicsPath path = gc->CreatePath();
332 path.AddCircle( 50.0, 50.0, 50.0 );
333 path.MoveToPoint(0.0, 50.0);
334 path.AddLineToPoint(100.0, 50.0);
335 path.MoveToPoint(50.0, 0.0);
336 path.AddLineToPoint(50.0, 100.0 );
338 path.AddRectangle(25.0, 25.0, 50.0, 50.0);
340 gc->StrokePath(path);
350 @see wxGraphicsRenderer::CreateContext(), wxGCDC, wxDC
352 class wxGraphicsContext
: public wxGraphicsObject
356 Creates a wxGraphicsContext from a wxWindow.
358 @see wxGraphicsRenderer::CreateContext()
360 static wxGraphicsContext
* Create(wxWindow
* window
);
363 Creates a wxGraphicsContext from a wxWindowDC
365 @see wxGraphicsRenderer::CreateContext()
367 static wxGraphicsContext
* Create(const wxWindowDC
& windowDC
);
370 Creates a wxGraphicsContext from a wxMemoryDC
372 @see wxGraphicsRenderer::CreateContext()
374 static wxGraphicsContext
* Create(const wxMemoryDC
& memoryDC
);
377 Creates a wxGraphicsContext from a wxPrinterDC. Under GTK+, this will
378 only work when using the GtkPrint printing backend which is available
381 @see wxGraphicsRenderer::CreateContext(), @ref overview_unixprinting
383 static wxGraphicsContext
* Create(const wxPrinterDC
& printerDC
);
386 Creates a wxGraphicsContext from a wxEnhMetaFileDC.
388 This function, as wxEnhMetaFileDC class itself, is only available only
391 @see wxGraphicsRenderer::CreateContext()
393 static wxGraphicsContext
* Create(const wxEnhMetaFileDC
& metaFileDC
);
396 Creates a wxGraphicsContext associated with a wxImage.
398 The image specifies the size of the context as well as whether alpha is
399 supported (if wxImage::HasAlpha()) or not and the initial contents of
400 the context. The @a image object must have a life time greater than
401 that of the new context as the context copies its contents back to the
402 image when it is destroyed.
406 static wxGraphicsContext
* Create(wxImage
& image
);
409 Create a lightweight context that can be used only for measuring text.
411 static wxGraphicsContext
* Create();
414 Clips drawings to the specified region.
416 virtual void Clip(const wxRegion
& region
) = 0;
419 Clips drawings to the specified rectangle.
421 virtual void Clip(wxDouble x
, wxDouble y
, wxDouble w
, wxDouble h
) = 0;
424 Concatenates the passed in transform with the current transform of this
427 virtual void ConcatTransform(const wxGraphicsMatrix
& matrix
) = 0;
430 Creates wxGraphicsBitmap from an existing wxBitmap.
432 Returns an invalid wxNullGraphicsBitmap on failure.
434 virtual wxGraphicsBitmap
CreateBitmap( const wxBitmap
&bitmap
) = 0;
437 Creates wxGraphicsBitmap from an existing wxImage.
439 This method is more efficient than converting wxImage to wxBitmap first
440 and then calling CreateBitmap() but otherwise has the same effect.
442 Returns an invalid wxNullGraphicsBitmap on failure.
446 virtual wxGraphicsBitmap
CreateBitmapFromImage(const wxImage
& image
);
449 Extracts a sub-bitmap from an existing bitmap.
451 Currently this function is implemented in the native MSW and OS X
452 versions but not when using Cairo.
454 virtual wxGraphicsBitmap
CreateSubBitmap(const wxGraphicsBitmap
& bitmap
,
455 wxDouble x
, wxDouble y
,
456 wxDouble w
, wxDouble h
) = 0;
459 Creates a native brush from a wxBrush.
461 virtual wxGraphicsBrush
CreateBrush(const wxBrush
& brush
) const;
464 Creates a native graphics font from a wxFont and a text colour.
466 virtual wxGraphicsFont
CreateFont(const wxFont
& font
,
467 const wxColour
& col
= *wxBLACK
) const;
470 Creates a font object with the specified attributes.
472 The use of overload taking wxFont is preferred, see
473 wxGraphicsRenderer::CreateFont() for more details.
477 virtual wxGraphicsFont
CreateFont(double sizeInPixels
,
478 const wxString
& facename
,
479 int flags
= wxFONTFLAG_DEFAULT
,
480 const wxColour
& col
= *wxBLACK
) const;
483 Creates a wxGraphicsContext from a native context. This native context
484 must be a CGContextRef for Core Graphics, a Graphics pointer for
485 GDIPlus, or a cairo_t pointer for cairo.
487 @see wxGraphicsRenderer::CreateContextFromNativeContext()
489 static wxGraphicsContext
* CreateFromNative(void* context
);
492 Creates a wxGraphicsContext from a native window.
494 @see wxGraphicsRenderer::CreateContextFromNativeWindow()
496 static wxGraphicsContext
* CreateFromNativeWindow(void* window
);
499 Creates a native brush with a linear gradient.
501 The brush starts at (@a x1, @a y1) and ends at (@a x2, @a y2). Either
502 just the start and end gradient colours (@a c1 and @a c2) or full set
503 of gradient @a stops can be specified.
505 The version taking wxGraphicsGradientStops is new in wxWidgets 2.9.1.
509 CreateLinearGradientBrush(wxDouble x1
, wxDouble y1
,
510 wxDouble x2
, wxDouble y2
,
511 const wxColour
& c1
, const wxColour
& c2
) const;
514 CreateLinearGradientBrush(wxDouble x1
, wxDouble y1
,
515 wxDouble x2
, wxDouble y2
,
516 const wxGraphicsGradientStops
& stops
) const;
520 Creates a native affine transformation matrix from the passed in
521 values. The default parameters result in an identity matrix.
523 virtual wxGraphicsMatrix
CreateMatrix(wxDouble a
= 1.0, wxDouble b
= 0.0,
524 wxDouble c
= 0.0, wxDouble d
= 1.0,
526 wxDouble ty
= 0.0) const;
529 Creates a native affine transformation matrix from the passed
534 wxGraphicsMatrix
CreateMatrix(const wxAffineMatrix2DBase
& mat
) const;
537 Creates a native graphics path which is initially empty.
539 wxGraphicsPath
CreatePath() const;
542 Creates a native pen from a wxPen.
544 virtual wxGraphicsPen
CreatePen(const wxPen
& pen
) const;
547 Creates a native brush with a radial gradient.
549 The brush originates at (@a xo, @a yc) and ends on a circle around
550 (@a xc, @a yc) with the given @a radius.
552 The gradient may be specified either by its start and end colours @a
553 oColor and @a cColor or by a full set of gradient @a stops.
555 The version taking wxGraphicsGradientStops is new in wxWidgets 2.9.1.
558 virtual wxGraphicsBrush
559 CreateRadialGradientBrush(wxDouble xo
, wxDouble yo
,
560 wxDouble xc
, wxDouble yc
,
562 const wxColour
& oColor
,
563 const wxColour
& cColor
) const;
565 virtual wxGraphicsBrush
566 CreateRadialGradientBrush(wxDouble xo
, wxDouble yo
,
567 wxDouble xc
, wxDouble yc
,
569 const wxGraphicsGradientStops
& stops
) = 0;
573 Draws the bitmap. In case of a mono bitmap, this is treated as a mask
574 and the current brushed is used for filling.
577 virtual void DrawBitmap(const wxGraphicsBitmap
& bmp
,
578 wxDouble x
, wxDouble y
,
579 wxDouble w
, wxDouble h
) = 0;
580 virtual void DrawBitmap(const wxBitmap
& bmp
,
581 wxDouble x
, wxDouble y
,
582 wxDouble w
, wxDouble h
) = 0;
588 virtual void DrawEllipse(wxDouble x
, wxDouble y
, wxDouble w
, wxDouble h
);
593 virtual void DrawIcon(const wxIcon
& icon
, wxDouble x
, wxDouble y
,
594 wxDouble w
, wxDouble h
) = 0;
599 virtual void DrawLines(size_t n
, const wxPoint2DDouble
* points
,
600 wxPolygonFillMode fillStyle
= wxODDEVEN_RULE
);
603 Draws the path by first filling and then stroking.
605 virtual void DrawPath(const wxGraphicsPath
& path
,
606 wxPolygonFillMode fillStyle
= wxODDEVEN_RULE
);
611 virtual void DrawRectangle(wxDouble x
, wxDouble y
, wxDouble w
, wxDouble h
);
614 Draws a rounded rectangle.
616 virtual void DrawRoundedRectangle(wxDouble x
, wxDouble y
, wxDouble w
,
617 wxDouble h
, wxDouble radius
);
620 Draws text at the defined position.
622 void DrawText(const wxString
& str
, wxDouble x
, wxDouble y
);
624 Draws text at the defined position.
629 The x coordinate position to draw the text at.
631 The y coordinate position to draw the text at.
633 The angle relative to the (default) horizontal direction to draw
636 void DrawText(const wxString
& str
, wxDouble x
, wxDouble y
, wxDouble angle
);
638 Draws text at the defined position.
643 The x coordinate position to draw the text at.
645 The y coordinate position to draw the text at.
646 @param backgroundBrush
647 Brush to fill the text with.
649 void DrawText(const wxString
& str
, wxDouble x
, wxDouble y
,
650 const wxGraphicsBrush
& backgroundBrush
);
652 Draws text at the defined position.
657 The x coordinate position to draw the text at.
659 The y coordinate position to draw the text at.
661 The angle relative to the (default) horizontal direction to draw
663 @param backgroundBrush
664 Brush to fill the text with.
666 void DrawText(const wxString
& str
, wxDouble x
, wxDouble y
,
667 wxDouble angle
, const wxGraphicsBrush
& backgroundBrush
);
670 Fills the path with the current brush.
672 virtual void FillPath(const wxGraphicsPath
& path
,
673 wxPolygonFillMode fillStyle
= wxODDEVEN_RULE
) = 0;
676 Returns the native context (CGContextRef for Core Graphics, Graphics
677 pointer for GDIPlus and cairo_t pointer for cairo).
679 virtual void* GetNativeContext() = 0;
682 Fills the @a widths array with the widths from the beginning of
683 @a text to the corresponding character of @a text.
685 virtual void GetPartialTextExtents(const wxString
& text
,
686 wxArrayDouble
& widths
) const = 0;
689 Gets the dimensions of the string using the currently selected font.
692 The text string to measure.
694 Variable to store the total calculated width of the text.
696 Variable to store the total calculated height of the text.
698 Variable to store the dimension from the baseline of the font to
699 the bottom of the descender.
700 @param externalLeading
701 Any extra vertical space added to the font by the font designer
704 virtual void GetTextExtent(const wxString
& text
, wxDouble
* width
,
705 wxDouble
* height
, wxDouble
* descent
,
706 wxDouble
* externalLeading
) const = 0;
709 Gets the current transformation matrix of this context.
711 virtual wxGraphicsMatrix
GetTransform() const = 0;
714 Resets the clipping to original shape.
716 virtual void ResetClip() = 0;
719 Rotates the current transformation matrix (in radians).
721 virtual void Rotate(wxDouble angle
) = 0;
724 Scales the current transformation matrix.
726 virtual void Scale(wxDouble xScale
, wxDouble yScale
) = 0;
729 Sets the brush for filling paths.
731 void SetBrush(const wxBrush
& brush
);
733 Sets the brush for filling paths.
735 virtual void SetBrush(const wxGraphicsBrush
& brush
);
738 Sets the font for drawing text.
740 void SetFont(const wxFont
& font
, const wxColour
& colour
);
742 Sets the font for drawing text.
744 virtual void SetFont(const wxGraphicsFont
& font
);
747 Sets the pen used for stroking.
749 void SetPen(const wxPen
& pen
);
751 Sets the pen used for stroking.
753 virtual void SetPen(const wxGraphicsPen
& pen
);
756 Sets the current transformation matrix of this context
758 virtual void SetTransform(const wxGraphicsMatrix
& matrix
) = 0;
761 Strokes a single line.
763 virtual void StrokeLine(wxDouble x1
, wxDouble y1
, wxDouble x2
, wxDouble y2
);
766 Stroke disconnected lines from begin to end points, fastest method
767 available for this purpose.
769 virtual void StrokeLines(size_t n
, const wxPoint2DDouble
* beginPoints
,
770 const wxPoint2DDouble
* endPoints
);
772 Stroke lines connecting all the points.
774 Unlike the other overload of this function, this method draws a single
775 polyline and not a number of disconnected lines.
777 virtual void StrokeLines(size_t n
, const wxPoint2DDouble
* points
);
780 Strokes along a path with the current pen.
782 virtual void StrokePath(const wxGraphicsPath
& path
) = 0;
785 Translates the current transformation matrix.
787 virtual void Translate(wxDouble dx
, wxDouble dy
) = 0;
790 Redirects all rendering is done into a fully transparent temporary context
792 virtual void BeginLayer(wxDouble opacity
) = 0;
795 Composites back the drawings into the context with the opacity given at
798 virtual void EndLayer() = 0;
801 Sets the antialiasing mode, returns true if it supported
803 virtual bool SetAntialiasMode(wxAntialiasMode antialias
) = 0;
806 Returns the current shape antialiasing mode
808 virtual wxAntialiasMode
GetAntialiasMode() const ;
811 Sets the interpolation quality, returns true if it is supported.
813 Not implemented in Cairo backend currently.
815 virtual bool SetInterpolationQuality(wxInterpolationQuality interpolation
) = 0;
818 Returns the current interpolation quality.
820 virtual wxInterpolationQuality
GetInterpolationQuality() const;
823 Sets the compositing operator, returns true if it supported
825 virtual bool SetCompositionMode(wxCompositionMode op
) = 0;
828 Returns the current compositing operator
830 virtual wxCompositionMode
GetCompositionMode() const;
834 Push the current state of the context's transformation matrix on a
837 @see wxGraphicsContext::PopState
839 virtual void PushState() = 0;
842 Pops a stored state from the stack and sets the current transformation
843 matrix to that state.
845 @see wxGraphicsContext::PopState
847 virtual void PopState() = 0;
850 virtual bool ShouldOffset() const;
851 virtual void EnableOffset(bool enable
= true);
852 void DisableOffset();
853 bool OffsetEnabled();
856 Begin a new document (relevant only for printing / pdf etc.)
857 If there is a progress dialog, message will be shown.
859 virtual bool StartDoc( const wxString
& message
);
862 Done with that document (relevant only for printing / pdf etc.)
864 virtual void EndDoc();
867 Opens a new page (relevant only for printing / pdf etc.) with the given
868 size in points. (If both are null the default page size will be used.)
870 virtual void StartPage( wxDouble width
= 0, wxDouble height
= 0 );
873 Ends the current page (relevant only for printing / pdf etc.)
875 virtual void EndPage();
878 Make sure that the current content of this context is immediately visible.
880 virtual void Flush();
883 Returns the size of the graphics context in device coordinates.
885 void GetSize(wxDouble
* width
, wxDouble
* height
) const;
888 Returns the resolution of the graphics context in device points per inch.
890 virtual void GetDPI( wxDouble
* dpiX
, wxDouble
* dpiY
);
895 Represents a single gradient stop in a collection of gradient stops as
896 represented by wxGraphicsGradientStops.
903 class wxGraphicsGradientStop
907 Creates a stop with the given colour and position.
909 @param col The colour of this stop. Note that the alpha component of
910 the colour is honoured thus allowing the background colours to
911 partially show through the gradient.
912 @param pos The stop position, must be in [0, 1] range with 0 being the
913 beginning and 1 the end of the gradient.
915 wxGraphicsGradientStop(wxColour col
= wxTransparentColour
, float pos
= 0.);
917 /// Return the stop colour.
918 const wxColour
& GetColour() const;
921 Change the stop colour.
923 @param col The new colour.
925 void SetColour(const wxColour
& col
);
927 /// Return the stop position.
928 float GetPosition() const;
931 Change the stop position.
933 @param pos The new position, must always be in [0, 1] range.
935 void SetPosition(float pos
);
939 Represents a collection of wxGraphicGradientStop values for use with
940 CreateLinearGradientBrush and CreateRadialGradientBrush.
942 The stops are maintained in order of position. If two or more stops are
943 added with the same position then the one(s) added later come later.
944 This can be useful for producing discontinuities in the colour gradient.
946 Notice that this class is write-once, you can't modify the stops once they
954 class wxGraphicsGradientStops
958 Initializes the gradient stops with the given boundary colours.
960 Creates a wxGraphicsGradientStops instance with start colour given
961 by @a startCol and end colour given by @a endCol.
963 wxGraphicsGradientStops(wxColour startCol
= wxTransparentColour
,
964 wxColour endCol
= wxTransparentColour
);
970 void Add(const wxGraphicsGradientStop
& stop
);
971 void Add(wxColour col
, float pos
);
975 Returns the stop at the given index.
977 @param n The index, must be in [0, GetCount()) range.
979 wxGraphicsGradientStop
Item(unsigned n
) const;
982 Returns the number of stops.
984 size_t GetCount() const;
987 Set the start colour to @a col
989 void SetStartColour(wxColour col
);
992 Returns the start colour.
994 wxColour
GetStartColour() const;
997 Set the end colour to @a col
999 void SetEndColour(wxColour col
);
1002 Returns the end colour.
1004 wxColour
GetEndColour() const;
1008 @class wxGraphicsRenderer
1010 A wxGraphicsRenderer is the instance corresponding to the rendering engine
1011 used. There may be multiple instances on a system, if there are different
1012 rendering engines present, but there is always only one instance per
1013 engine. This instance is pointed back to by all objects created by it
1014 (wxGraphicsContext, wxGraphicsPath etc) and can be retrieved through their
1015 wxGraphicsObject::GetRenderer() method. Therefore you can create an
1016 additional instance of a path etc. by calling
1017 wxGraphicsObject::GetRenderer() and then using the appropriate CreateXXX()
1018 function of that renderer.
1021 wxGraphicsPath *path = // from somewhere
1022 wxGraphicsBrush *brush = path->GetRenderer()->CreateBrush( *wxBLACK_BRUSH );
1028 class wxGraphicsRenderer
: public wxObject
1032 Creates wxGraphicsBitmap from an existing wxBitmap.
1034 Returns an invalid wxNullGraphicsBitmap on failure.
1036 virtual wxGraphicsBitmap
CreateBitmap( const wxBitmap
&bitmap
) = 0;
1039 Creates wxGraphicsBitmap from an existing wxImage.
1041 This method is more efficient than converting wxImage to wxBitmap first
1042 and then calling CreateBitmap() but otherwise has the same effect.
1044 Returns an invalid wxNullGraphicsBitmap on failure.
1048 virtual wxGraphicsBitmap
CreateBitmapFromImage(const wxImage
& image
) = 0;
1051 Creates a wxImage from a wxGraphicsBitmap.
1053 This method is used by the more convenient wxGraphicsBitmap::ConvertToImage.
1055 virtual wxImage
CreateImageFromBitmap(const wxGraphicsBitmap
& bmp
) = 0;
1058 Creates wxGraphicsBitmap from a native bitmap handle.
1060 @a bitmap meaning is platform-dependent. Currently it's a GDI+ @c
1061 Bitmap pointer under MSW, @c CGImage pointer under OS X or a @c
1062 cairo_surface_t pointer when using Cairo under any platform.
1064 virtual wxGraphicsBitmap
CreateBitmapFromNativeBitmap( void* bitmap
) = 0;
1067 Creates a wxGraphicsContext from a wxWindow.
1069 virtual wxGraphicsContext
* CreateContext(wxWindow
* window
) = 0;
1072 Creates a wxGraphicsContext from a wxWindowDC
1074 virtual wxGraphicsContext
* CreateContext(const wxWindowDC
& windowDC
) = 0 ;
1077 Creates a wxGraphicsContext from a wxMemoryDC
1079 virtual wxGraphicsContext
* CreateContext(const wxMemoryDC
& memoryDC
) = 0 ;
1082 Creates a wxGraphicsContext from a wxPrinterDC
1084 virtual wxGraphicsContext
* CreateContext(const wxPrinterDC
& printerDC
) = 0 ;
1087 Creates a wxGraphicsContext from a wxEnhMetaFileDC.
1089 This function, as wxEnhMetaFileDC class itself, is only available only
1092 virtual wxGraphicsContext
* CreateContext(const wxEnhMetaFileDC
& metaFileDC
) = 0;
1095 Creates a wxGraphicsContext associated with a wxImage.
1097 This function is used by wxContext::CreateFromImage() and is not
1098 normally called directly.
1102 wxGraphicsContext
* CreateContextFromImage(wxImage
& image
);
1105 Creates a native brush from a wxBrush.
1107 virtual wxGraphicsBrush
CreateBrush(const wxBrush
& brush
) = 0;
1110 Creates a wxGraphicsContext from a native context. This native context
1111 must be a CGContextRef for Core Graphics, a Graphics pointer for
1112 GDIPlus, or a cairo_t pointer for cairo.
1114 virtual wxGraphicsContext
* CreateContextFromNativeContext(void* context
) = 0;
1117 Creates a wxGraphicsContext from a native window.
1119 virtual wxGraphicsContext
* CreateContextFromNativeWindow(void* window
) = 0;
1122 Creates a wxGraphicsContext that can be used for measuring texts only.
1123 No drawing commands are allowed.
1125 virtual wxGraphicsContext
* CreateMeasuringContext() = 0;
1128 Creates a native graphics font from a wxFont and a text colour.
1130 virtual wxGraphicsFont
CreateFont(const wxFont
& font
,
1131 const wxColour
& col
= *wxBLACK
) = 0;
1134 Creates a graphics font with the given characteristics.
1136 If possible, the CreateFont() overload taking wxFont should be used
1137 instead. The main advantage of this overload is that it can be used
1138 without X server connection under Unix when using Cairo.
1141 Height of the font in user space units, i.e. normally pixels.
1142 Notice that this is different from the overload taking wxFont as
1143 wxFont size is specified in points.
1145 The name of the font. The same font name might not be available
1146 under all platforms so the font name can also be empty to use the
1147 default platform font.
1149 Combination of wxFontFlag enum elements. Currently only
1150 @c wxFONTFLAG_ITALIC and @c wxFONTFLAG_BOLD are supported. By
1151 default the normal font version is used.
1153 The font colour, black by default.
1157 virtual wxGraphicsFont
CreateFont(double sizeInPixels
,
1158 const wxString
& facename
,
1159 int flags
= wxFONTFLAG_DEFAULT
,
1160 const wxColour
& col
= *wxBLACK
) = 0;
1164 Creates a native brush with a linear gradient.
1166 Stops support is new since wxWidgets 2.9.1, previously only the start
1167 and end colours could be specified.
1169 virtual wxGraphicsBrush
CreateLinearGradientBrush(wxDouble x1
,
1173 const wxGraphicsGradientStops
& stops
) = 0;
1176 Creates a native affine transformation matrix from the passed in
1177 values. The defaults result in an identity matrix.
1179 virtual wxGraphicsMatrix
CreateMatrix(wxDouble a
= 1.0, wxDouble b
= 0.0,
1180 wxDouble c
= 0.0, wxDouble d
= 1.0,
1182 wxDouble ty
= 0.0) = 0;
1185 Creates a native graphics path which is initially empty.
1187 virtual wxGraphicsPath
CreatePath() = 0;
1190 Creates a native pen from a wxPen.
1192 virtual wxGraphicsPen
CreatePen(const wxPen
& pen
) = 0;
1195 Creates a native brush with a radial gradient.
1197 Stops support is new since wxWidgets 2.9.1, previously only the start
1198 and end colours could be specified.
1200 virtual wxGraphicsBrush
CreateRadialGradientBrush(wxDouble xo
, wxDouble yo
,
1201 wxDouble xc
, wxDouble yc
,
1203 const wxGraphicsGradientStops
& stops
) = 0;
1206 Extracts a sub-bitmap from an existing bitmap.
1208 Currently this function is implemented in the native MSW and OS X
1209 versions but not when using Cairo.
1211 virtual wxGraphicsBitmap
CreateSubBitmap(const wxGraphicsBitmap
& bitmap
,
1212 wxDouble x
, wxDouble y
,
1213 wxDouble w
, wxDouble h
) = 0;
1216 Returns the default renderer on this platform. On OS X this is the Core
1217 Graphics (a.k.a. Quartz 2D) renderer, on MSW the GDIPlus renderer, and
1218 on GTK we currently default to the cairo renderer.
1220 static wxGraphicsRenderer
* GetDefaultRenderer();
1221 static wxGraphicsRenderer
* GetCairoRenderer();
1228 @class wxGraphicsBrush
1230 A wxGraphicsBrush is a native representation of a brush. The contents are
1231 specific and private to the respective renderer. Instances are ref counted
1232 and can therefore be assigned as usual. The only way to get a valid
1233 instance is via wxGraphicsContext::CreateBrush() or
1234 wxGraphicsRenderer::CreateBrush().
1239 class wxGraphicsBrush
: public wxGraphicsObject
1248 @class wxGraphicsFont
1250 A wxGraphicsFont is a native representation of a font. The contents are
1251 specific and private to the respective renderer. Instances are ref counted
1252 and can therefore be assigned as usual. The only way to get a valid
1253 instance is via wxGraphicsContext::CreateFont() or
1254 wxGraphicsRenderer::CreateFont().
1259 class wxGraphicsFont
: public wxGraphicsObject
1268 @class wxGraphicsPen
1270 A wxGraphicsPen is a native representation of a pen. The contents are
1271 specific and private to the respective renderer. Instances are ref counted
1272 and can therefore be assigned as usual. The only way to get a valid
1273 instance is via wxGraphicsContext::CreatePen() or
1274 wxGraphicsRenderer::CreatePen().
1279 class wxGraphicsPen
: public wxGraphicsObject
1288 @class wxGraphicsMatrix
1290 A wxGraphicsMatrix is a native representation of an affine matrix. The
1291 contents are specific and private to the respective renderer. Instances are
1292 ref counted and can therefore be assigned as usual. The only way to get a
1293 valid instance is via wxGraphicsContext::CreateMatrix() or
1294 wxGraphicsRenderer::CreateMatrix().
1299 class wxGraphicsMatrix
: public wxGraphicsObject
1303 Concatenates the matrix passed with the current matrix.
1305 virtual void Concat(const wxGraphicsMatrix
* t
);
1307 Concatenates the matrix passed with the current matrix.
1309 void Concat(const wxGraphicsMatrix
& t
);
1312 Returns the component values of the matrix via the argument pointers.
1314 virtual void Get(wxDouble
* a
= NULL
, wxDouble
* b
= NULL
,
1315 wxDouble
* c
= NULL
, wxDouble
* d
= NULL
,
1316 wxDouble
* tx
= NULL
, wxDouble
* ty
= NULL
) const;
1319 Returns the native representation of the matrix. For CoreGraphics this
1320 is a CFAffineMatrix pointer, for GDIPlus a Matrix Pointer, and for
1321 Cairo a cairo_matrix_t pointer.
1323 virtual void* GetNativeMatrix() const;
1328 virtual void Invert();
1331 Returns @true if the elements of the transformation matrix are equal.
1333 virtual bool IsEqual(const wxGraphicsMatrix
* t
) const;
1335 Returns @true if the elements of the transformation matrix are equal.
1337 bool IsEqual(const wxGraphicsMatrix
& t
) const;
1340 Return @true if this is the identity matrix.
1342 virtual bool IsIdentity() const;
1345 Rotates this matrix clockwise (in radians).
1348 Rotation angle in radians, clockwise.
1350 virtual void Rotate(wxDouble angle
);
1355 virtual void Scale(wxDouble xScale
, wxDouble yScale
);
1358 Sets the matrix to the respective values (default values are the
1361 virtual void Set(wxDouble a
= 1.0, wxDouble b
= 0.0, wxDouble c
= 0.0,
1362 wxDouble d
= 1.0, wxDouble tx
= 0.0, wxDouble ty
= 0.0);
1365 Applies this matrix to a distance (ie. performs all transforms except
1368 virtual void TransformDistance(wxDouble
* dx
, wxDouble
* dy
) const;
1371 Applies this matrix to a point.
1373 virtual void TransformPoint(wxDouble
* x
, wxDouble
* y
) const;
1376 Translates this matrix.
1378 virtual void Translate(wxDouble dx
, wxDouble dy
);
1382 const wxGraphicsPen wxNullGraphicsPen
;
1383 const wxGraphicsBrush wxNullGraphicsBrush
;
1384 const wxGraphicsFont wxNullGraphicsFont
;
1385 const wxGraphicsBitmap wxNullGraphicsBitmap
;
1386 const wxGraphicsMatrix wxNullGraphicsMatrix
;
1387 const wxGraphicsPath wxNullGraphicsPath
;