]>
git.saurik.com Git - wxWidgets.git/blob - interface/wx/dcsvg.h
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: interface of wxSVGFileDC
4 // Author: wxWidgets team
6 // Licence: wxWindows license
7 /////////////////////////////////////////////////////////////////////////////
12 A wxSVGFileDC is a device context onto which graphics and text can be
13 drawn, and the output produced as a vector file, in SVG format (see the W3C
14 SVG Specifications <http://www.w3.org/TR/2001/REC-SVG-20010904/>). This
15 format can be read by a range of programs, including a Netscape plugin
16 (Adobe), full details are given in the SVG Implementation and Resource
17 Directory <http://www.svgi.org/>. Vector formats may often be smaller than
20 The intention behind wxSVGFileDC is that it can be used to produce a file
21 corresponding to the screen display context, wxSVGFileDC, by passing the
22 wxSVGFileDC as a parameter instead of a wxSVGFileDC. Thus the wxSVGFileDC
23 is a write-only class.
25 As the wxSVGFileDC is a vector format, raster operations like GetPixel()
26 are unlikely to be supported. However, the SVG specification allows for PNG
27 format raster files to be embedded in the SVG, and so bitmaps, icons and
28 blit operations in wxSVGFileDC are supported.
30 A more substantial SVG library (for reading and writing) is available at
31 the wxArt2D website <http://wxart2d.sourceforge.net/>.
36 class wxSVGFileDC
: public wxDC
40 Initializes a wxSVGFileDC with the given @a f filename with a default
41 size (340x240) at 72.0 dots per inch (a frequent screen resolution).
43 wxSVGFileDC(wxString f
);
45 Initializes a wxSVGFileDC with the given @a f filename with the given
46 @a Width and @a Height at 72.0 dots per inch.
48 wxSVGFileDC(wxString f
, int Width
, int Height
);
50 Initializes a wxSVGFileDC with the given @a f filename with the given
51 @a Width and @a Height at @a dpi resolution.
53 wxSVGFileDC(wxString f
, int Width
, int Height
, float dpi
);
58 virtual ~wxSVGFileDC();
61 Copies from a source DC to this DC, specifying the destination
62 coordinates, size of area to copy, source DC, source coordinates,
63 logical function, whether to use a bitmap mask, and mask source
68 bool Blit(wxCoord xdest
, wxCoord ydest
, wxCoord width
, wxCoord height
,
69 wxSVGFileDC
* source
, wxCoord xsrc
, wxCoord ysrc
,
70 int logicalFunc
= wxCOPY
, bool useMask
= FALSE
,
71 wxCoord xsrcMask
= -1, wxCoord ysrcMask
= -1);
74 Adds the specified point to the bounding box which can be retrieved
75 with wxDC::MinX(), wxDC::MaxX() and wxDC::MinY(), wxDC::MaxY()
78 void CalcBoundingBox(wxCoord x
, wxCoord y
);
81 This makes no sense in wxSVGFileDC and does nothing.
88 void CrossHair(wxCoord x
, wxCoord y
);
93 void DestroyClippingRegion();
96 Convert device X coordinate to logical coordinate, using the current
99 wxCoord
DeviceToLogicalX(wxCoord x
) const;
102 Convert device X coordinate to relative logical coordinate, using the
103 current mapping mode but ignoring the x axis orientation. Use this
104 function for converting a width, for example.
106 wxCoord
DeviceToLogicalXRel(wxCoord x
) const;
109 Converts device Y coordinate to logical coordinate, using the current
112 wxCoord
DeviceToLogicalY(wxCoord y
) const;
115 Convert device Y coordinate to relative logical coordinate, using the
116 current mapping mode but ignoring the y axis orientation. Use this
117 function for converting a height, for example.
119 wxCoord
DeviceToLogicalYRel(wxCoord y
) const;
122 Draws an arc of a circle, centred on (@a xc, @a yc), with starting
123 point (@a x1, @a y1) and ending at (@a x2, @a y2). The current pen is
124 used for the outline and the current brush for filling the shape.
126 The arc is drawn in a counter-clockwise direction from the start point
129 void DrawArc(wxCoord x1
, wxCoord y1
, wxCoord x2
, wxCoord y2
,
130 wxCoord xc
, wxCoord yc
);
133 Draw a bitmap on the device context at the specified point. If
134 @a transparent is @true and the bitmap has a transparency mask, the
135 bitmap will be drawn transparently.
137 When drawing a mono-bitmap, the current text foreground colour will be
138 used to draw the foreground of the bitmap (all bits set to 1), and the
139 current text background colour to draw the background (all bits set to
142 @see wxDC::SetTextForeground(), wxDC::SetTextBackground(), wxMemoryDC
144 void DrawBitmap(const wxBitmap
& bitmap
, wxCoord x
, wxCoord y
,
149 Draws a check mark inside the given rectangle.
151 void DrawCheckMark(wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height
);
152 void DrawCheckMark(const wxRect
& rect
);
157 Draws a circle with the given centre and radius.
159 @see wxDC::DrawEllipse()
161 void DrawCircle(wxCoord x
, wxCoord y
, wxCoord radius
);
162 void DrawCircle(const wxPoint
& pt
, wxCoord radius
);
167 Draws an ellipse contained in the rectangle specified either with the
168 given top left corner and the given size or directly. The current pen
169 is used for the outline and the current brush for filling the shape.
171 @see wxDC::DrawCircle()
173 void DrawEllipse(wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height
);
174 void DrawEllipse(const wxPoint
& pt
, const wxSize
& size
);
175 void DrawEllipse(const wxRect
& rect
);
179 Draws an arc of an ellipse. The current pen is used for drawing the arc
180 and the current brush is used for drawing the pie.
182 @a x and @a y specify the x and y coordinates of the upper-left corner
183 of the rectangle that contains the ellipse.
185 @a width and @a height specify the width and height of the rectangle
186 that contains the ellipse.
188 @a start and @a end specify the start and end of the arc relative to
189 the three-o'clock position from the center of the rectangle. Angles are
190 specified in degrees (360 is a complete circle). Positive values mean
191 counter-clockwise motion. If @a start is equal to @a end, a complete
192 ellipse will be drawn.
194 void DrawEllipticArc(wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height
,
195 double start
, double end
);
198 Draw an icon on the display (does nothing if the device context is
199 PostScript). This can be the simplest way of drawing bitmaps on a
202 void DrawIcon(const wxIcon
& icon
, wxCoord x
, wxCoord y
);
205 Draws a line from the first point to the second. The current pen is
206 used for drawing the line.
208 void DrawLine(wxCoord x1
, wxCoord y1
, wxCoord x2
, wxCoord y2
);
212 Draws lines using an array of @a points of size @a n, or list of
213 pointers to points, adding the optional offset coordinate. The current
214 pen is used for drawing the lines. The programmer is responsible for
215 deleting the list of points.
217 void DrawLines(int n
, wxPoint points
[], wxCoord xoffset
= 0,
218 wxCoord yoffset
= 0);
219 void DrawLines(wxList
* points
, wxCoord xoffset
= 0,
220 wxCoord yoffset
= 0);
224 Draws a point using the current pen.
226 void DrawPoint(wxCoord x
, wxCoord y
);
230 Draws a filled polygon using an array of @a points of size @a n,
231 or list of pointers to points, adding the optional offset coordinate.
232 wxWidgets automatically closes the first and last points.
234 The last argument specifies the fill rule: @c wxODDEVEN_RULE (the
235 default) or @c wxWINDING_RULE.
237 The current pen is used for drawing the outline, and the current brush
238 for filling the shape. Using a transparent brush suppresses filling.
240 The programmer is responsible for deleting the list of points.
242 void DrawPolygon(int n
, wxPoint points
[], wxCoord xoffset
= 0,
243 wxCoord yoffset
= 0, int fill_style
= wxODDEVEN_RULE
);
244 void DrawPolygon(wxList
* points
, wxCoord xoffset
= 0,
245 wxCoord yoffset
= 0, int fill_style
= wxODDEVEN_RULE
);
249 Draws a rectangle with the given top left corner, and with the given
250 size. The current pen is used for the outline and the current brush
251 for filling the shape.
253 void DrawRectangle(wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height
);
256 Draws the text rotated by @a angle degrees.
258 The wxMSW wxDC and wxSVGFileDC rotate the text around slightly
259 different points, depending on the size of the font.
261 void DrawRotatedText(const wxString
& text
, wxCoord x
, wxCoord y
,
265 Draws a rectangle with the given top left corner, and with the given
266 size. The corners are quarter-circles using the given radius. The
267 current pen is used for the outline and the current brush for filling
270 If @a radius is positive, the value is assumed to be the radius of the
271 rounded corner. If @a radius is negative, the absolute value is assumed
272 to be the @e proportion of the smallest dimension of the rectangle.
273 This means that the corner can be a sensible size relative to the size
274 of the rectangle, and also avoids the strange effects X produces when
275 the corners are too big for the rectangle.
277 void DrawRoundedRectangle(wxCoord x
, wxCoord y
, wxCoord width
,
278 wxCoord height
, double radius
= 20);
281 Draws a spline between all given control points, using the current pen.
282 The programmer is responsible for deleting the list of points.
283 The spline is drawn using a series of lines, using an algorithm taken from
284 the X drawing program "XFIG".
286 void DrawSpline(wxList
* points
);
289 Draws a three-point spline using the current pen.
291 void DrawSpline(wxCoord x1
, wxCoord y1
, wxCoord x2
, wxCoord y2
,
292 wxCoord x3
, wxCoord y3
);
295 Draws a text string at the specified point, using the current text
296 font, and the current text foreground and background colours.
298 The coordinates refer to the top-left corner of the rectangle bounding
299 the string. See wxDC::GetTextExtent() for how to get the dimensions of
300 a text string, which can be used to position the text more precisely.
302 void DrawText(const wxString
& text
, wxCoord x
, wxCoord y
);
322 void FloodFill(wxCoord x
, wxCoord y
, const wxColour
& colour
,
323 int style
= wxFLOOD_SURFACE
);
327 Gets the brush used for painting the background.
331 wxBrush
GetBackground() const;
332 const wxBrush
GetBackground() const;
336 Returns the current background mode: @c wxSOLID or @c wxTRANSPARENT.
338 @see SetBackgroundMode()
340 int GetBackgroundMode() const;
344 Gets the current brush.
348 wxBrush
GetBrush() const;
349 const wxBrush
GetBrush() const;
353 Gets the character height of the currently set font.
355 wxCoord
GetCharHeight() const;
358 Gets the average character width of the currently set font.
360 wxCoord
GetCharWidth() const;
365 void GetClippingBox(wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height
);
369 Gets the current font.
373 wxFont
GetFont() const;
374 const wxFont
GetFont() const;
378 Gets the current logical function.
380 @see SetLogicalFunction()
382 int GetLogicalFunction() const;
385 Gets the mapping mode for the device context.
389 int GetMapMode() const;
393 Gets the current pen.
397 wxPen
GetPen() const;
398 const wxPen
GetPen() const;
404 bool GetPixel(wxCoord x
, wxCoord y
, wxColour
* colour
) const;
407 For a Windows printer device context, this gets the horizontal and
410 void GetSize(wxCoord
* width
, wxCoord
* height
);
414 Gets the current text background colour.
416 @see SetTextBackground()
418 wxColour
GetTextBackground() const;
419 const wxColour
& GetTextBackground() const;
423 Gets the dimensions of the string using the currently selected font.
426 The text string to measure.
428 This value will be set to the width after this call.
430 This value will be set to the height after this call.
432 The dimension from the baseline of the font to the bottom of the
434 @param externalLeading
435 Any extra vertical space added to the font by the font designer
438 Specifies an alternative to the currently selected font: but note
439 that this does not yet work under Windows, so you need to set a
440 font for the device context first.
442 @see wxFont, SetFont()
444 void GetTextExtent(const wxString
& string
, wxCoord
* w
, wxCoord
* h
,
445 wxCoord
* descent
= NULL
,
446 wxCoord
* externalLeading
= NULL
,
447 wxFont
* font
= NULL
);
451 Gets the current text foreground colour.
453 @see SetTextForeground()
455 wxColour
GetTextForeground() const;
456 const wxColour
GetTextForeground() const;
460 Gets the current user scale factor.
464 void GetUserScale(double x
, double y
);
467 Converts logical X coordinate to device coordinate, using the current
470 wxCoord
LogicalToDeviceX(wxCoord x
) const;
473 Converts logical X coordinate to relative device coordinate, using the
474 current mapping mode but ignoring the x axis orientation. Use this for
475 converting a width, for example.
477 wxCoord
LogicalToDeviceXRel(wxCoord x
) const;
480 Converts logical Y coordinate to device coordinate, using the current
483 wxCoord
LogicalToDeviceY(wxCoord y
) const;
486 Converts logical Y coordinate to relative device coordinate, using the
487 current mapping mode but ignoring the y axis orientation. Use this for
488 converting a height, for example.
490 wxCoord
LogicalToDeviceYRel(wxCoord y
) const;
493 Gets the maximum horizontal extent used in drawing commands so far.
495 wxCoord
MaxX() const;
498 Gets the maximum vertical extent used in drawing commands so far.
500 wxCoord
MaxY() const;
503 Gets the minimum horizontal extent used in drawing commands so far.
505 wxCoord
MinX() const;
508 Gets the minimum vertical extent used in drawing commands so far.
510 wxCoord
MinY() const;
513 Returns @true if the DC is ok to use. @false values arise from being
514 unable to write the file.
519 Resets the bounding box. After a call to this function, the bounding
520 box doesn't contain anything.
522 @see CalcBoundingBox()
524 void ResetBoundingBox();
527 Sets the x and y axis orientation (i.e., the direction from lowest to
528 highest values on the axis). The default orientation is the natural
529 orientation, e.g. x axis from left to right and y axis from bottom up.
532 @true to set the x axis orientation to the natural left to right
533 orientation, @false to invert it.
535 @true to set the y axis orientation to the natural bottom up
536 orientation, @false to invert it.
538 void SetAxisOrientation(bool xLeftRight
, bool yBottomUp
);
541 Sets the current background brush for the DC.
543 void SetBackground(const wxBrush
& brush
);
546 @a mode may be one of wxSOLID and wxTRANSPARENT. This setting determines
547 whether text will be drawn with a background colour or not.
549 void SetBackgroundMode(int mode
);
552 Sets the current brush for the DC. If the argument is wxNullBrush, the
553 current brush is selected out of the device context, and the original
554 brush restored, allowing the current brush to be destroyed safely.
556 @see wxBrush, wxMemoryDC (for the interpretation of colours
557 when drawing into a monochrome bitmap).
559 void SetBrush(const wxBrush
& brush
);
565 void SetClippingRegion(wxCoord x
, wxCoord y
, wxCoord width
,
567 void SetClippingRegion(const wxPoint
& pt
, const wxSize
& sz
);
568 void SetClippingRegion(const wxRect
& rect
);
569 void SetClippingRegion(const wxRegion
& region
);
573 Sets the device origin (i.e., the origin in pixels after scaling has
574 been applied). This function may be useful in Windows printing
575 operations for placing a graphic on a page.
577 void SetDeviceOrigin(wxCoord x
, wxCoord y
);
580 Sets the current font for the DC. It must be a valid font, in
581 particular you should not pass @c wxNullFont to this method.
585 void SetFont(const wxFont
& font
);
588 Does the same as wxDC::SetLogicalFunction(), except that only wxCOPY is
589 avalaible. Trying to set one of the othe values will fail.
591 void SetLogicalFunction(int function
);
594 The mapping mode of the device context defines the unit of measurement
595 used to convert logical units to device units. Note that in X, text
596 drawing isn't handled consistently with the mapping mode; a font is
597 always specified in point size. However, setting the user scale scales
598 the text appropriately. In Windows, scalable TrueType fonts are always
599 used; in X, results depend on availability of fonts, but usually a
600 reasonable match is found.
602 Note that the coordinate origin should ideally be selectable, but for
603 now is always at the top left of the screen/printer.
605 Drawing to a Windows printer device context under UNIX uses the current
606 mapping mode, but mapping mode is currently ignored for PostScript
609 The mapping mode can be one of the following:
610 - wxMM_TWIPS - Each logical unit is 1/20 of a point, or 1/1440 of an
612 - wxMM_POINTS - Each logical unit is a point, or 1/72 of an inch.
613 - wxMM_METRIC - Each logical unit is 1 mm.
614 - wxMM_LOMETRIC - Each logical unit is 1/10 of a mm.
615 - wxMM_TEXT - Each logical unit is 1 pixel.
617 void SetMapMode(int mode
);
622 void SetPalette(const wxPalette
& palette
);
625 Sets the current pen for the DC. If the argument is wxNullPen, the
626 current pen is selected out of the device context, and the original pen
629 @see wxMemoryDC (for the interpretation of colours when drawing into a
632 void SetPen(const wxPen
& pen
);
635 Sets the current text background colour for the DC.
637 void SetTextBackground(const wxColour
& colour
);
640 Sets the current text foreground colour for the DC.
642 @see wxMemoryDC (for the interpretation of colours when drawing into a
645 void SetTextForeground(const wxColour
& colour
);
648 Sets the user scaling factor, useful for applications which require
651 void SetUserScale(double xScale
, double yScale
);
656 bool StartDoc(const wxString
& message
);