Delegate wxGraphicsBitmap::ConvertToImage to the renderer so we do not end up with...
[wxWidgets.git] / interface / wx / graphics.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: graphics.h
3 // Purpose: interface of various wxGraphics* classes
4 // Author: wxWidgets team
5 // RCS-ID: $Id$
6 // Licence: wxWindows licence
7 /////////////////////////////////////////////////////////////////////////////
8
9 /**
10 @class wxGraphicsPath
11
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().
17
18 @library{wxcore}
19 @category{gdi}
20 */
21 class wxGraphicsPath : public wxGraphicsObject
22 {
23 public:
24 /**
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.
35 */
36 //@{
37 virtual void AddArc(wxDouble x, wxDouble y, wxDouble r,
38 wxDouble startAngle, wxDouble endAngle,
39 bool clockwise);
40 void AddArc(const wxPoint2DDouble& c, wxDouble r,
41 wxDouble startAngle, wxDouble endAngle, bool clockwise);
42 //@}
43
44 /**
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).
48 */
49 virtual void AddArcToPoint(wxDouble x1, wxDouble y1, wxDouble x2,
50 wxDouble y2, wxDouble r);
51
52 /**
53 Appends a circle around (@a x,@a y) with radius @a r as a new closed
54 subpath.
55 */
56 virtual void AddCircle(wxDouble x, wxDouble y, wxDouble r);
57
58 /**
59 Adds a cubic bezier curve from the current point, using two control
60 points and an end point.
61 */
62 virtual void AddCurveToPoint(wxDouble cx1, wxDouble cy1,
63 wxDouble cx2, wxDouble cy2,
64 wxDouble x, wxDouble y);
65 /**
66 Adds a cubic bezier curve from the current point, using two control
67 points and an end point.
68 */
69 void AddCurveToPoint(const wxPoint2DDouble& c1,
70 const wxPoint2DDouble& c2,
71 const wxPoint2DDouble& e);
72
73 /**
74 Appends an ellipse fitting into the passed in rectangle.
75 */
76 virtual void AddEllipse(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
77
78 /**
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.
84 */
85 void AddLineToPoint(const wxPoint2DDouble& p);
86
87 /**
88 Adds another path.
89 */
90 virtual void AddPath(const wxGraphicsPath& path);
91
92 /**
93 Adds a quadratic bezier curve from the current point, using a control
94 point and an end point.
95 */
96 virtual void AddQuadCurveToPoint(wxDouble cx, wxDouble cy,
97 wxDouble x, wxDouble y);
98
99 /**
100 Appends a rectangle as a new closed subpath.
101 */
102 virtual void AddRectangle(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
103
104 /**
105 Appends a rounded rectangle as a new closed subpath.
106 */
107 virtual void AddRoundedRectangle(wxDouble x, wxDouble y, wxDouble w,
108 wxDouble h, wxDouble radius);
109
110 /**
111 Closes the current sub-path.
112 */
113 virtual void CloseSubpath();
114
115 /**
116 @return @true if the point is within the path.
117 */
118 bool Contains(const wxPoint2DDouble& c,
119 wxPolygonFillMode fillStyle = wxODDEVEN_RULE) const;
120 /**
121 @return @true if the point is within the path.
122 */
123 virtual bool Contains(wxDouble x, wxDouble y,
124 wxPolygonFillMode fillStyle = wxODDEVEN_RULE) const;
125
126 /**
127 Gets the bounding box enclosing all points (possibly including control
128 points).
129 */
130 wxRect2DDouble GetBox() const;
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;
137
138 /**
139 Gets the last point of the current path, (0,0) if not yet set.
140 */
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;
146
147 /**
148 Returns the native path (CGPathRef for Core Graphics, Path pointer for
149 GDIPlus and a cairo_path_t pointer for cairo).
150 */
151 virtual void* GetNativePath() const;
152
153 /**
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.
159 */
160 void MoveToPoint(const wxPoint2DDouble& p);
161
162 /**
163 Transforms each point of this path by the matrix.
164 */
165 virtual void Transform(const wxGraphicsMatrix& matrix);
166
167 /**
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).
171 */
172 virtual void UnGetNativePath(void* p) const;
173 };
174
175
176
177 /**
178 @class wxGraphicsObject
179
180 This class is the superclass of native graphics objects like pens etc. It
181 allows reference counting. Not instantiated by user code.
182
183 @library{wxcore}
184 @category{gdi}
185
186 @see wxGraphicsBrush, wxGraphicsPen, wxGraphicsMatrix, wxGraphicsPath
187 */
188 class wxGraphicsObject : public wxObject
189 {
190 public:
191 /**
192 Returns the renderer that was used to create this instance, or @NULL
193 if it has not been initialized yet.
194 */
195 wxGraphicsRenderer* GetRenderer() const;
196
197 /**
198 @return @false if this object is valid, otherwise returns @true.
199 */
200 bool IsNull() const;
201 };
202
203 /**
204 Anti-aliasing modes used by wxGraphicsContext::SetAntialiasMode().
205 */
206 enum wxAntialiasMode
207 {
208 /** No anti-aliasing */
209 wxANTIALIAS_NONE,
210
211 /** The default anti-aliasing */
212 wxANTIALIAS_DEFAULT,
213 };
214
215 /**
216 Interpolation quality used by wxGraphicsContext::SetInterpolationQuality().
217 */
218 enum wxInterpolationQuality
219 {
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 */
229 wxINTERPOLATION_BEST
230 };
231
232 /**
233 Compositing is done using Porter-Duff compositions
234 (see http://keithp.com/~keithp/porterduff/p253-porter.pdf) with
235 wxGraphicsContext::SetCompositionMode().
236
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
241 */
242 enum wxCompositionMode
243 {
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,
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) */
265 wxCOMPOSITION_ADD /**< @e R = @e S + @e D */
266 };
267
268 /**
269 Represents a bitmap.
270
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.
277 */
278 class wxGraphicsBitmap : public wxGraphicsObject
279 {
280 public:
281 /**
282 Default constructor creates an invalid bitmap.
283 */
284 wxGraphicsBitmap() {}
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;
299 };
300
301 /**
302 @class wxGraphicsContext
303
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.
309
310 @code
311 void MyCanvas::OnPaint(wxPaintEvent &event)
312 {
313 // Create paint DC
314 wxPaintDC dc(this);
315
316 // Create graphics context from it
317 wxGraphicsContext *gc = wxGraphicsContext::Create( dc );
318
319 if (gc)
320 {
321 // make a path that contains a circle and some lines
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);
331
332 gc->StrokePath(path);
333
334 delete gc;
335 }
336 }
337 @endcode
338
339 @library{wxcore}
340 @category{gdi,dc}
341
342 @see wxGraphicsRenderer::CreateContext(), wxGCDC, wxDC
343 */
344 class wxGraphicsContext : public wxGraphicsObject
345 {
346 public:
347 /**
348 Creates a wxGraphicsContext from a wxWindow.
349
350 @see wxGraphicsRenderer::CreateContext()
351 */
352 static wxGraphicsContext* Create(wxWindow* window);
353
354 /**
355 Creates a wxGraphicsContext from a wxWindowDC
356
357 @see wxGraphicsRenderer::CreateContext()
358 */
359 static wxGraphicsContext* Create(const wxWindowDC& windowDC);
360
361 /**
362 Creates a wxGraphicsContext from a wxMemoryDC
363
364 @see wxGraphicsRenderer::CreateContext()
365 */
366 static wxGraphicsContext* Create(const wxMemoryDC& memoryDC);
367
368 /**
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.
372
373 @see wxGraphicsRenderer::CreateContext(), @ref overview_unixprinting
374 */
375 static wxGraphicsContext* Create(const wxPrinterDC& printerDC);
376
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 */
385 static wxGraphicsContext* Create(const wxEnhMetaFileDC& metaFileDC);
386
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
400 /**
401 Clips drawings to the specified region.
402 */
403 virtual void Clip(const wxRegion& region) = 0;
404
405 /**
406 Clips drawings to the specified rectangle.
407 */
408 virtual void Clip(wxDouble x, wxDouble y, wxDouble w, wxDouble h) = 0;
409
410 /**
411 Concatenates the passed in transform with the current transform of this
412 context.
413 */
414 virtual void ConcatTransform(const wxGraphicsMatrix& matrix) = 0;
415
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
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
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
445 /**
446 Creates a native brush from a wxBrush.
447 */
448 virtual wxGraphicsBrush CreateBrush(const wxBrush& brush) const;
449
450 /**
451 Creates a native graphics font from a wxFont and a text colour.
452 */
453 virtual wxGraphicsFont CreateFont(const wxFont& font,
454 const wxColour& col = *wxBLACK) const;
455
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
469 /**
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.
473
474 @see wxGraphicsRenderer::CreateContextFromNativeContext()
475 */
476 static wxGraphicsContext* CreateFromNative(void* context);
477
478 /**
479 Creates a wxGraphicsContext from a native window.
480
481 @see wxGraphicsRenderer::CreateContextFromNativeWindow()
482 */
483 static wxGraphicsContext* CreateFromNativeWindow(void* window);
484
485 /**
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.
493 */
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 //@}
505
506 /**
507 Creates a native affine transformation matrix from the passed in
508 values. The default parameters result in an identity matrix.
509 */
510 virtual wxGraphicsMatrix CreateMatrix(wxDouble a = 1.0, wxDouble b = 0.0,
511 wxDouble c = 0.0, wxDouble d = 1.0,
512 wxDouble tx = 0.0,
513 wxDouble ty = 0.0) const;
514
515 /**
516 Creates a native graphics path which is initially empty.
517 */
518 wxGraphicsPath CreatePath() const;
519
520 /**
521 Creates a native pen from a wxPen.
522 */
523 virtual wxGraphicsPen CreatePen(const wxPen& pen) const;
524
525 /**
526 Creates a native brush with a radial gradient.
527
528 The brush originates at (@a xo, @a yc) and ends on a circle around
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.
535 */
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 //@}
550
551 /**
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.
554 */
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,
561 wxDouble w, wxDouble h) = 0;
562 //@}
563
564 /**
565 Draws an ellipse.
566 */
567 virtual void DrawEllipse(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
568
569 /**
570 Draws the icon.
571 */
572 virtual void DrawIcon(const wxIcon& icon, wxDouble x, wxDouble y,
573 wxDouble w, wxDouble h) = 0;
574
575 /**
576 Draws a polygon.
577 */
578 virtual void DrawLines(size_t n, const wxPoint2DDouble* points,
579 wxPolygonFillMode fillStyle = wxODDEVEN_RULE);
580
581 /**
582 Draws the path by first filling and then stroking.
583 */
584 virtual void DrawPath(const wxGraphicsPath& path,
585 wxPolygonFillMode fillStyle = wxODDEVEN_RULE);
586
587 /**
588 Draws a rectangle.
589 */
590 virtual void DrawRectangle(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
591
592 /**
593 Draws a rounded rectangle.
594 */
595 virtual void DrawRoundedRectangle(wxDouble x, wxDouble y, wxDouble w,
596 wxDouble h, wxDouble radius);
597
598 /**
599 Draws text at the defined position.
600 */
601 void DrawText(const wxString& str, wxDouble x, wxDouble y);
602 /**
603 Draws text at the defined position.
604
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.
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
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.
625 @param backgroundBrush
626 Brush to fill the text with.
627 */
628 void DrawText(const wxString& str, wxDouble x, wxDouble y,
629 const wxGraphicsBrush& backgroundBrush);
630 /**
631 Draws text at the defined position.
632
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.
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 */
645 void DrawText(const wxString& str, wxDouble x, wxDouble y,
646 wxDouble angle, const wxGraphicsBrush& backgroundBrush);
647
648 /**
649 Fills the path with the current brush.
650 */
651 virtual void FillPath(const wxGraphicsPath& path,
652 wxPolygonFillMode fillStyle = wxODDEVEN_RULE) = 0;
653
654 /**
655 Returns the native context (CGContextRef for Core Graphics, Graphics
656 pointer for GDIPlus and cairo_t pointer for cairo).
657 */
658 virtual void* GetNativeContext() = 0;
659
660 /**
661 Fills the @a widths array with the widths from the beginning of
662 @a text to the corresponding character of @a text.
663 */
664 virtual void GetPartialTextExtents(const wxString& text,
665 wxArrayDouble& widths) const = 0;
666
667 /**
668 Gets the dimensions of the string using the currently selected font.
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).
682 */
683 virtual void GetTextExtent(const wxString& text, wxDouble* width,
684 wxDouble* height, wxDouble* descent,
685 wxDouble* externalLeading) const = 0;
686
687 /**
688 Gets the current transformation matrix of this context.
689 */
690 virtual wxGraphicsMatrix GetTransform() const = 0;
691
692 /**
693 Resets the clipping to original shape.
694 */
695 virtual void ResetClip() = 0;
696
697 /**
698 Rotates the current transformation matrix (in radians).
699 */
700 virtual void Rotate(wxDouble angle) = 0;
701
702 /**
703 Scales the current transformation matrix.
704 */
705 virtual void Scale(wxDouble xScale, wxDouble yScale) = 0;
706
707 /**
708 Sets the brush for filling paths.
709 */
710 void SetBrush(const wxBrush& brush);
711 /**
712 Sets the brush for filling paths.
713 */
714 virtual void SetBrush(const wxGraphicsBrush& brush);
715
716 /**
717 Sets the font for drawing text.
718 */
719 void SetFont(const wxFont& font, const wxColour& colour);
720 /**
721 Sets the font for drawing text.
722 */
723 virtual void SetFont(const wxGraphicsFont& font);
724
725 /**
726 Sets the pen used for stroking.
727 */
728 void SetPen(const wxPen& pen);
729 /**
730 Sets the pen used for stroking.
731 */
732 virtual void SetPen(const wxGraphicsPen& pen);
733
734 /**
735 Sets the current transformation matrix of this context
736 */
737 virtual void SetTransform(const wxGraphicsMatrix& matrix) = 0;
738
739 /**
740 Strokes a single line.
741 */
742 virtual void StrokeLine(wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2);
743
744 /**
745 Stroke disconnected lines from begin to end points, fastest method
746 available for this purpose.
747 */
748 virtual void StrokeLines(size_t n, const wxPoint2DDouble* beginPoints,
749 const wxPoint2DDouble* endPoints);
750 /**
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.
755 */
756 virtual void StrokeLines(size_t n, const wxPoint2DDouble* points);
757
758 /**
759 Strokes along a path with the current pen.
760 */
761 virtual void StrokePath(const wxGraphicsPath& path) = 0;
762
763 /**
764 Translates the current transformation matrix.
765 */
766 virtual void Translate(wxDouble dx, wxDouble dy) = 0;
767
768 /**
769 Redirects all rendering is done into a fully transparent temporary context
770 */
771 virtual void BeginLayer(wxDouble opacity) = 0;
772
773 /**
774 Composites back the drawings into the context with the opacity given at
775 the BeginLayer call
776 */
777 virtual void EndLayer() = 0;
778
779 /**
780 Sets the antialiasing mode, returns true if it supported
781 */
782 virtual bool SetAntialiasMode(wxAntialiasMode antialias) = 0;
783
784 /**
785 Returns the current shape antialiasing mode
786 */
787 virtual wxAntialiasMode GetAntialiasMode() const ;
788
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
799 /**
800 Sets the compositing operator, returns true if it supported
801 */
802 virtual bool SetCompositionMode(wxCompositionMode op) = 0;
803
804 /**
805 Returns the current compositing operator
806 */
807 virtual wxCompositionMode GetCompositionMode() const;
808
809
810 virtual void EnableOffset(bool enable = true);
811 void DisableOffset();
812 bool OffsetEnabled();
813
814 };
815
816 /**
817 Represents a single gradient stop in a collection of gradient stops as
818 represented by wxGraphicsGradientStops.
819
820 @library{wxcore}
821 @category{gdi}
822
823 @since 2.9.1
824 */
825 class wxGraphicsGradientStop
826 {
827 public:
828 /**
829 Creates a stop with the given colour and position.
830
831 @param col The colour of this stop. Note that the alpha component of
832 the colour is honoured thus allowing the background colours to
833 partially show through the gradient.
834 @param pos The stop position, must be in [0, 1] range with 0 being the
835 beginning and 1 the end of the gradient.
836 */
837 wxGraphicsGradientStop(wxColour col = wxTransparentColour, float pos = 0.);
838
839 /// Return the stop colour.
840 const wxColour& GetColour() const;
841
842 /**
843 Change the stop colour.
844
845 @param col The new colour.
846 */
847 void SetColour(const wxColour& col);
848
849 /// Return the stop position.
850 float GetPosition() const;
851
852 /**
853 Change the stop position.
854
855 @param pos The new position, must always be in [0, 1] range.
856 */
857 void SetPosition(float pos);
858 };
859
860 /**
861 Represents a collection of wxGraphicGradientStop values for use with
862 CreateLinearGradientBrush and CreateRadialGradientBrush.
863
864 The stops are maintained in order of position. If two or more stops are
865 added with the same position then the one(s) added later come later.
866 This can be useful for producing discontinuities in the colour gradient.
867
868 Notice that this class is write-once, you can't modify the stops once they
869 had been added.
870
871 @library{wxcore}
872 @category{gdi}
873
874 @since 2.9.1
875 */
876 class wxGraphicsGradientStops
877 {
878 public:
879 /**
880 Initializes the gradient stops with the given boundary colours.
881
882 Creates a wxGraphicsGradientStops instance with start colour given
883 by @a startCol and end colour given by @a endCol.
884 */
885 wxGraphicsGradientStops(wxColour startCol = wxTransparentColour,
886 wxColour endCol = wxTransparentColour);
887
888 /**
889 Add a new stop.
890 */
891 //@{
892 void Add(const wxGraphicsGradientStop& stop);
893 void Add(wxColour col, float pos);
894 //@}
895
896 /**
897 Returns the stop at the given index.
898
899 @param n The index, must be in [0, GetCount()) range.
900 */
901 wxGraphicsGradientStop Item(unsigned n) const;
902
903 /**
904 Returns the number of stops.
905 */
906 unsigned GetCount() const;
907
908 /**
909 Set the start colour to @a col
910 */
911 void SetStartColour(wxColour col);
912
913 /**
914 Returns the start colour.
915 */
916 wxColour GetStartColour() const;
917
918 /**
919 Set the end colour to @a col
920 */
921 void SetEndColour(wxColour col);
922
923 /**
924 Returns the end colour.
925 */
926 wxColour GetEndColour() const;
927 };
928
929 /**
930 @class wxGraphicsRenderer
931
932 A wxGraphicsRenderer is the instance corresponding to the rendering engine
933 used. There may be multiple instances on a system, if there are different
934 rendering engines present, but there is always only one instance per
935 engine. This instance is pointed back to by all objects created by it
936 (wxGraphicsContext, wxGraphicsPath etc) and can be retrieved through their
937 wxGraphicsObject::GetRenderer() method. Therefore you can create an
938 additional instance of a path etc. by calling
939 wxGraphicsObject::GetRenderer() and then using the appropriate CreateXXX()
940 function of that renderer.
941
942 @code
943 wxGraphicsPath *path = // from somewhere
944 wxGraphicsBrush *brush = path->GetRenderer()->CreateBrush( *wxBLACK_BRUSH );
945 @endcode
946
947 @library{wxcore}
948 @category{gdi}
949 */
950 class wxGraphicsRenderer : public wxObject
951 {
952 public:
953 /**
954 Creates wxGraphicsBitmap from an existing wxBitmap.
955
956 Returns an invalid wxNullGraphicsBitmap on failure.
957 */
958 virtual wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ) = 0;
959
960 /**
961 Creates wxGraphicsBitmap from an existing wxImage.
962
963 This method is more efficient than converting wxImage to wxBitmap first
964 and then calling CreateBitmap() but otherwise has the same effect.
965
966 Returns an invalid wxNullGraphicsBitmap on failure.
967
968 @since 2.9.3
969 */
970 virtual wxGraphicsBitmap CreateBitmapFromImage(const wxImage& image) = 0;
971
972 /**
973 Creates a wxImage from a wxGraphicsBitmap.
974
975 This method is used by the more convenient wxGraphicsBitmap::ConvertToImage.
976 */
977 virtual wxImage CreateImageFromBitmap(const wxGraphicsBitmap& bmp) = 0;
978
979 /**
980 Creates wxGraphicsBitmap from a native bitmap handle.
981
982 @a bitmap meaning is platform-dependent. Currently it's a GDI+ @c
983 Bitmap pointer under MSW, @c CGImage pointer under OS X or a @c
984 cairo_surface_t pointer when using Cairo under any platform.
985 */
986 virtual wxGraphicsBitmap CreateBitmapFromNativeBitmap( void* bitmap ) = 0;
987
988 /**
989 Creates a wxGraphicsContext from a wxWindow.
990 */
991 virtual wxGraphicsContext* CreateContext(wxWindow* window) = 0;
992
993 /**
994 Creates a wxGraphicsContext from a wxWindowDC
995 */
996 virtual wxGraphicsContext* CreateContext(const wxWindowDC& windowDC) = 0 ;
997
998 /**
999 Creates a wxGraphicsContext from a wxMemoryDC
1000 */
1001 virtual wxGraphicsContext* CreateContext(const wxMemoryDC& memoryDC) = 0 ;
1002
1003 /**
1004 Creates a wxGraphicsContext from a wxPrinterDC
1005 */
1006 virtual wxGraphicsContext* CreateContext(const wxPrinterDC& printerDC) = 0 ;
1007
1008 /**
1009 Creates a wxGraphicsContext from a wxEnhMetaFileDC.
1010
1011 This function, as wxEnhMetaFileDC class itself, is only available only
1012 under MSW.
1013 */
1014 virtual wxGraphicsContext* CreateContext(const wxEnhMetaFileDC& metaFileDC) = 0;
1015
1016 /**
1017 Creates a wxGraphicsContext associated with a wxImage.
1018
1019 This function is used by wxContext::CreateFromImage() and is not
1020 normally called directly.
1021
1022 @since 2.9.3
1023 */
1024 wxGraphicsContext* CreateContextFromImage(wxImage& image);
1025
1026 /**
1027 Creates a native brush from a wxBrush.
1028 */
1029 virtual wxGraphicsBrush CreateBrush(const wxBrush& brush) = 0;
1030
1031 /**
1032 Creates a wxGraphicsContext from a native context. This native context
1033 must be a CGContextRef for Core Graphics, a Graphics pointer for
1034 GDIPlus, or a cairo_t pointer for cairo.
1035 */
1036 virtual wxGraphicsContext* CreateContextFromNativeContext(void* context) = 0;
1037
1038 /**
1039 Creates a wxGraphicsContext from a native window.
1040 */
1041 virtual wxGraphicsContext* CreateContextFromNativeWindow(void* window) = 0;
1042
1043 /**
1044 Creates a wxGraphicsContext that can be used for measuring texts only.
1045 No drawing commands are allowed.
1046 */
1047 virtual wxGraphicsContext * CreateMeasuringContext() = 0;
1048
1049 /**
1050 Creates a native graphics font from a wxFont and a text colour.
1051 */
1052 virtual wxGraphicsFont CreateFont(const wxFont& font,
1053 const wxColour& col = *wxBLACK) = 0;
1054
1055 /**
1056 Creates a graphics font with the given characteristics.
1057
1058 If possible, the CreateFont() overload taking wxFont should be used
1059 instead. The main advantage of this overload is that it can be used
1060 without X server connection under Unix when using Cairo.
1061
1062 @param sizeInPixels
1063 Height of the font in user space units, i.e. normally pixels.
1064 Notice that this is different from the overload taking wxFont as
1065 wxFont size is specified in points.
1066 @param facename
1067 The name of the font. The same font name might not be available
1068 under all platforms so the font name can also be empty to use the
1069 default platform font.
1070 @param flags
1071 Combination of wxFontFlag enum elements. Currently only
1072 @c wxFONTFLAG_ITALIC and @c wxFONTFLAG_BOLD are supported. By
1073 default the normal font version is used.
1074 @param col
1075 The font colour, black by default.
1076
1077 @since 2.9.3
1078 */
1079 virtual wxGraphicsFont CreateFont(double sizeInPixels,
1080 const wxString& facename,
1081 int flags = wxFONTFLAG_DEFAULT,
1082 const wxColour& col = *wxBLACK) = 0;
1083
1084
1085 /**
1086 Creates a native brush with a linear gradient.
1087
1088 Stops support is new since wxWidgets 2.9.1, previously only the start
1089 and end colours could be specified.
1090 */
1091 virtual wxGraphicsBrush CreateLinearGradientBrush(wxDouble x1,
1092 wxDouble y1,
1093 wxDouble x2,
1094 wxDouble y2,
1095 const wxGraphicsGradientStops& stops) = 0;
1096
1097 /**
1098 Creates a native affine transformation matrix from the passed in
1099 values. The defaults result in an identity matrix.
1100 */
1101 virtual wxGraphicsMatrix CreateMatrix(wxDouble a = 1.0, wxDouble b = 0.0,
1102 wxDouble c = 0.0, wxDouble d = 1.0,
1103 wxDouble tx = 0.0,
1104 wxDouble ty = 0.0) = 0;
1105
1106 /**
1107 Creates a native graphics path which is initially empty.
1108 */
1109 virtual wxGraphicsPath CreatePath() = 0;
1110
1111 /**
1112 Creates a native pen from a wxPen.
1113 */
1114 virtual wxGraphicsPen CreatePen(const wxPen& pen) = 0;
1115
1116 /**
1117 Creates a native brush with a radial gradient.
1118
1119 Stops support is new since wxWidgets 2.9.1, previously only the start
1120 and end colours could be specified.
1121 */
1122 virtual wxGraphicsBrush CreateRadialGradientBrush(wxDouble xo, wxDouble yo,
1123 wxDouble xc, wxDouble yc,
1124 wxDouble radius,
1125 const wxGraphicsGradientStops& stops) = 0;
1126
1127 /**
1128 Extracts a sub-bitmap from an existing bitmap.
1129
1130 Currently this function is implemented in the native MSW and OS X
1131 versions but not when using Cairo.
1132 */
1133 virtual wxGraphicsBitmap CreateSubBitmap(const wxGraphicsBitmap& bitmap,
1134 wxDouble x, wxDouble y,
1135 wxDouble w, wxDouble h) = 0;
1136
1137 /**
1138 Returns the default renderer on this platform. On OS X this is the Core
1139 Graphics (a.k.a. Quartz 2D) renderer, on MSW the GDIPlus renderer, and
1140 on GTK we currently default to the cairo renderer.
1141 */
1142 static wxGraphicsRenderer* GetDefaultRenderer();
1143 static wxGraphicsRenderer* GetCairoRenderer();
1144
1145 };
1146
1147
1148
1149 /**
1150 @class wxGraphicsBrush
1151
1152 A wxGraphicsBrush is a native representation of a brush. The contents are
1153 specific and private to the respective renderer. Instances are ref counted
1154 and can therefore be assigned as usual. The only way to get a valid
1155 instance is via wxGraphicsContext::CreateBrush() or
1156 wxGraphicsRenderer::CreateBrush().
1157
1158 @library{wxcore}
1159 @category{gdi}
1160 */
1161 class wxGraphicsBrush : public wxGraphicsObject
1162 {
1163 public:
1164
1165 };
1166
1167
1168
1169 /**
1170 @class wxGraphicsFont
1171
1172 A wxGraphicsFont is a native representation of a font. The contents are
1173 specific and private to the respective renderer. Instances are ref counted
1174 and can therefore be assigned as usual. The only way to get a valid
1175 instance is via wxGraphicsContext::CreateFont() or
1176 wxGraphicsRenderer::CreateFont().
1177
1178 @library{wxcore}
1179 @category{gdi}
1180 */
1181 class wxGraphicsFont : public wxGraphicsObject
1182 {
1183 public:
1184
1185 };
1186
1187
1188
1189 /**
1190 @class wxGraphicsPen
1191
1192 A wxGraphicsPen is a native representation of a pen. The contents are
1193 specific and private to the respective renderer. Instances are ref counted
1194 and can therefore be assigned as usual. The only way to get a valid
1195 instance is via wxGraphicsContext::CreatePen() or
1196 wxGraphicsRenderer::CreatePen().
1197
1198 @library{wxcore}
1199 @category{gdi}
1200 */
1201 class wxGraphicsPen : public wxGraphicsObject
1202 {
1203 public:
1204
1205 };
1206
1207
1208
1209 /**
1210 @class wxGraphicsMatrix
1211
1212 A wxGraphicsMatrix is a native representation of an affine matrix. The
1213 contents are specific and private to the respective renderer. Instances are
1214 ref counted and can therefore be assigned as usual. The only way to get a
1215 valid instance is via wxGraphicsContext::CreateMatrix() or
1216 wxGraphicsRenderer::CreateMatrix().
1217
1218 @library{wxcore}
1219 @category{gdi}
1220 */
1221 class wxGraphicsMatrix : public wxGraphicsObject
1222 {
1223 public:
1224 /**
1225 Concatenates the matrix passed with the current matrix.
1226 */
1227 virtual void Concat(const wxGraphicsMatrix* t);
1228 /**
1229 Concatenates the matrix passed with the current matrix.
1230 */
1231 void Concat(const wxGraphicsMatrix& t);
1232
1233 /**
1234 Returns the component values of the matrix via the argument pointers.
1235 */
1236 virtual void Get(wxDouble* a = NULL, wxDouble* b = NULL,
1237 wxDouble* c = NULL, wxDouble* d = NULL,
1238 wxDouble* tx = NULL, wxDouble* ty = NULL) const;
1239
1240 /**
1241 Returns the native representation of the matrix. For CoreGraphics this
1242 is a CFAffineMatrix pointer, for GDIPlus a Matrix Pointer, and for
1243 Cairo a cairo_matrix_t pointer.
1244 */
1245 virtual void* GetNativeMatrix() const;
1246
1247 /**
1248 Inverts the matrix.
1249 */
1250 virtual void Invert();
1251
1252 /**
1253 Returns @true if the elements of the transformation matrix are equal.
1254 */
1255 virtual bool IsEqual(const wxGraphicsMatrix* t) const;
1256 /**
1257 Returns @true if the elements of the transformation matrix are equal.
1258 */
1259 bool IsEqual(const wxGraphicsMatrix& t) const;
1260
1261 /**
1262 Return @true if this is the identity matrix.
1263 */
1264 virtual bool IsIdentity() const;
1265
1266 /**
1267 Rotates this matrix (in radians).
1268 */
1269 virtual void Rotate(wxDouble angle);
1270
1271 /**
1272 Scales this matrix.
1273 */
1274 virtual void Scale(wxDouble xScale, wxDouble yScale);
1275
1276 /**
1277 Sets the matrix to the respective values (default values are the
1278 identity matrix).
1279 */
1280 virtual void Set(wxDouble a = 1.0, wxDouble b = 0.0, wxDouble c = 0.0,
1281 wxDouble d = 1.0, wxDouble tx = 0.0, wxDouble ty = 0.0);
1282
1283 /**
1284 Applies this matrix to a distance (ie. performs all transforms except
1285 translations).
1286 */
1287 virtual void TransformDistance(wxDouble* dx, wxDouble* dy) const;
1288
1289 /**
1290 Applies this matrix to a point.
1291 */
1292 virtual void TransformPoint(wxDouble* x, wxDouble* y) const;
1293
1294 /**
1295 Translates this matrix.
1296 */
1297 virtual void Translate(wxDouble dx, wxDouble dy);
1298 };
1299
1300
1301 const wxGraphicsPen wxNullGraphicsPen;
1302 const wxGraphicsBrush wxNullGraphicsBrush;
1303 const wxGraphicsFont wxNullGraphicsFont;
1304 const wxGraphicsBitmap wxNullGraphicsBitmap;
1305 const wxGraphicsMatrix wxNullGraphicsMatrix;
1306 const wxGraphicsPath wxNullGraphicsPath;