X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3c4f71cc3d63fb7bdfbd6cec3e39c8a8679f3e60..fdaad94e75273fa586ec9af9d53518222f9699d0:/interface/dc.h diff --git a/interface/dc.h b/interface/dc.h index 80a6d7d02d..1467bff0c1 100644 --- a/interface/dc.h +++ b/interface/dc.h @@ -10,27 +10,45 @@ @class wxDC @wxheader{dc.h} - A wxDC is a @e device context onto which graphics and text can be drawn. - It is intended to represent a number of output devices in a generic way, - so a window can have a device context associated with it, and a printer also - has a device context. - In this way, the same piece of code may write to a number of different devices, - if the device context is used as a parameter. - - Notice that wxDC is an abstract base class and can't be created directly, - please use wxPaintDC, wxClientDC, - wxWindowDC, wxScreenDC, - wxMemoryDC or wxPrinterDC. - - Please note that in addition to the versions of the methods documented here, - there are also versions which accept single @c wxPoint parameter instead of - two @c wxCoord ones or @c wxPoint and @c wxSize instead of four of - them. + A wxDC is a @e "device context" onto which graphics and text can be drawn. + It is intended to represent different output devices and offers a common + abstract API for drawing on any of them. + + wxWidgets offers an alternative drawing API based on the modern drawing + backends GDI+, CoreGraphics and Cairo. See wxGraphicsContext, wxGraphicsRenderer + and related classes. There is also a wxGCDC linking the APIs by offering + the wxDC API ontop of a wxGraphicsContext. + + wxDC is an abstract base class and cannot be created directly. + Use wxPaintDC, wxClientDC, wxWindowDC, wxScreenDC, wxMemoryDC or + wxPrinterDC. + + In addition to the versions of the methods documented below, there + are also versions which accept single wxPoint parameter instead + of the two wxCoord ones or wxPoint and wxSize instead of the four + wxCoord parameters. + + Beginning with wxWidgets 2.9.0 the entire wxDC code has been + reorganized. All platform dependent code (actually all drawing code) + has been moved into backend classes which derive from a common + wxDCImpl class. The user-visible classes such as wxClientDC and + wxPaintDC merely forward all calls to the backend implementation. + + On Mac OS X colours with alpha channel are supported. Instances wxPen + or wxBrush that are built from wxColour use the colour's alpha values + when stroking or filling. @library{wxcore} @category{dc,gdi} - @see Overview() + @see @ref overview_dc, wxGraphicsContext + + @todo Precise definition of default/initial state. + @todo Pixelwise definition of operations (e.g. last point of a line not + drawn). + @todo Coordinates: state clearly which type of coordinates are returned by + the various Get*Point() or similar functions - often they are client + coordinates but not always. */ class wxDC : public wxObject { @@ -38,7 +56,8 @@ public: /** Copy from a source DC to this DC, specifying the destination coordinates, size of area to copy, source DC, source coordinates, - logical function, whether to use a bitmap mask, and mask source position. + logical function, whether to use a bitmap mask, and mask source + position. @param xdest Destination device context x position. @@ -55,65 +74,55 @@ public: @param ysrc Source device context y position. @param logicalFunc - Logical function to use: see SetLogicalFunction(). + Logical function to use, see SetLogicalFunction(). @param useMask - If @true, Blit does a transparent blit using the mask that is associated - with the bitmap - selected into the source device context. The Windows implementation does - the following if MaskBlt cannot be used: - - - Creates a temporary bitmap and copies the destination area into it. - Copies the source area into the temporary bitmap using the specified - logical function. - Sets the masked area in the temporary bitmap to BLACK by ANDing the - mask bitmap with the temp bitmap with the foreground colour set to WHITE - and the bg colour set to BLACK. - Sets the unmasked area in the destination area to BLACK by ANDing the - mask bitmap with the destination area with the foreground colour set to - BLACK - and the background colour set to WHITE. - ORs the temporary bitmap with the destination area. - Deletes the temporary bitmap. - - - This sequence of operations ensures that the source's transparent area need - not be black, - and logical functions are supported. - Note: on Windows, blitting with masks can be speeded up considerably by - compiling - wxWidgets with the wxUSE_DC_CACHE option enabled. You can also influence - whether MaskBlt - or the explicit mask blitting code above is used, by using wxSystemOptions - and - setting the no-maskblt option to 1. + If @true, Blit does a transparent blit using the mask that is + associated with the bitmap selected into the source device context. + The Windows implementation does the following if MaskBlt cannot be + used: +
    +
  1. Creates a temporary bitmap and copies the destination area into + it.
  2. +
  3. Copies the source area into the temporary bitmap using the + specified logical function.
  4. +
  5. Sets the masked area in the temporary bitmap to BLACK by ANDing + the mask bitmap with the temp bitmap with the foreground colour + set to WHITE and the bg colour set to BLACK.
  6. +
  7. Sets the unmasked area in the destination area to BLACK by + ANDing the mask bitmap with the destination area with the + foreground colour set to BLACK and the background colour set to + WHITE.
  8. +
  9. ORs the temporary bitmap with the destination area.
  10. +
  11. Deletes the temporary bitmap.
  12. +
+ This sequence of operations ensures that the source's transparent + area need not be black, and logical functions are supported. + @n @b Note: on Windows, blitting with masks can be speeded up + considerably by compiling wxWidgets with the wxUSE_DC_CACHE option + enabled. You can also influence whether MaskBlt or the explicit + mask blitting code above is used, by using wxSystemOptions and + setting the @c no-maskblt option to 1. @param xsrcMask - Source x position on the mask. If both xsrcMask and ysrcMask are -1, xsrc - and ysrc - will be assumed for the mask source position. Currently only implemented on - Windows. + Source x position on the mask. If both xsrcMask and ysrcMask are + -1, xsrc and ysrc will be assumed for the mask source position. + Currently only implemented on Windows. @param ysrcMask - Source y position on the mask. If both xsrcMask and ysrcMask are -1, xsrc - and ysrc - will be assumed for the mask source position. Currently only implemented on - Windows. + Source y position on the mask. If both xsrcMask and ysrcMask are + -1, xsrc and ysrc will be assumed for the mask source position. + Currently only implemented on Windows. - @remarks There is partial support for Blit in wxPostScriptDC, under X. + @remarks There is partial support for Blit() in wxPostScriptDC, under X. @see StretchBlit(), wxMemoryDC, wxBitmap, wxMask */ bool Blit(wxCoord xdest, wxCoord ydest, wxCoord width, - wxCoord height, wxDC* source, - wxCoord xsrc, wxCoord ysrc, - int logicalFunc = wxCOPY, - bool useMask = false, - wxCoord xsrcMask = -1, - wxCoord ysrcMask = -1); + wxCoord height, wxDC* source, wxCoord xsrc, wxCoord ysrc, + int logicalFunc = wxCOPY, bool useMask = false, + wxCoord xsrcMask = -1, wxCoord ysrcMask = -1); /** - Adds the specified point to the bounding box which can be retrieved with - MinX(), MaxX() and - MinY(), MaxY() functions. + Adds the specified point to the bounding box which can be retrieved + with MinX(), MaxX() and MinY(), MaxY() functions. @see ResetBoundingBox() */ @@ -126,21 +135,22 @@ public: /** Performs all necessary computations for given platform and context type - after each change of scale and origin parameters. Usually called automatically - internally after such changes. + after each change of scale and origin parameters. Usually called + automatically internally after such changes. */ virtual void ComputeScaleAndOrigin(); /** - Displays a cross hair using the current pen. This is a vertical - and horizontal line the height and width of the window, centred - on the given point. + Displays a cross hair using the current pen. This is a vertical and + horizontal line the height and width of the window, centred on the + given point. */ void CrossHair(wxCoord x, wxCoord y); /** Destroys the current clipping region so that none of the DC is clipped. - See also SetClippingRegion(). + + @see SetClippingRegion() */ void DestroyClippingRegion(); @@ -151,9 +161,9 @@ public: virtual wxCoord DeviceToLogicalX(wxCoord x); /** - Convert device X coordinate to relative logical coordinate, using the current - mapping mode but ignoring the x axis orientation. - Use this function for converting a width, for example. + Convert device X coordinate to relative logical coordinate, using the + current mapping mode but ignoring the x axis orientation. Use this + function for converting a width, for example. */ virtual wxCoord DeviceToLogicalXRel(wxCoord x); @@ -164,43 +174,43 @@ public: virtual wxCoord DeviceToLogicalY(wxCoord y); /** - Convert device Y coordinate to relative logical coordinate, using the current - mapping mode but ignoring the y axis orientation. - Use this function for converting a height, for example. + Convert device Y coordinate to relative logical coordinate, using the + current mapping mode but ignoring the y axis orientation. Use this + function for converting a height, for example. */ virtual wxCoord DeviceToLogicalYRel(wxCoord y); /** - Draws an arc of a circle, centred on (@e xc, yc), with starting point (@e x1, - y1) - and ending at (@e x2, y2). The current pen is used for the outline - and the current brush for filling the shape. - The arc is drawn in an anticlockwise direction from the start point to the end - point. + Draws an arc of a circle, centred on (@a xc, @a yc), with starting + point (@a x1, @a y1) and ending at (@a x2, @a y2). The current pen is + used for the outline and the current brush for filling the shape. + + The arc is drawn in a counter-clockwise direction from the start point + to the end point. */ void DrawArc(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2, - wxCoord xc, wxCoord yc); + wxCoord xc, wxCoord yc); /** - Draw a bitmap on the device context at the specified point. If @a transparent - is @true and the bitmap has - a transparency mask, the bitmap will be drawn transparently. - When drawing a mono-bitmap, the current text foreground colour will be used to - draw the foreground - of the bitmap (all bits set to 1), and the current text background colour to - draw the background - (all bits set to 0). See also SetTextForeground(), - SetTextBackground() and wxMemoryDC. + Draw a bitmap on the device context at the specified point. If + @a transparent is @true and the bitmap has a transparency mask, the + bitmap will be drawn transparently. + + When drawing a mono-bitmap, the current text foreground colour will be + used to draw the foreground of the bitmap (all bits set to 1), and the + current text background colour to draw the background (all bits set to + 0). + + @see SetTextForeground(), SetTextBackground(), wxMemoryDC */ void DrawBitmap(const wxBitmap& bitmap, wxCoord x, wxCoord y, - bool transparent); + bool transparent); //@{ /** Draws a check mark inside the given rectangle. */ - void DrawCheckMark(wxCoord x, wxCoord y, wxCoord width, - wxCoord height); + void DrawCheckMark(wxCoord x, wxCoord y, wxCoord width, wxCoord height); void DrawCheckMark(const wxRect& rect); //@} @@ -216,148 +226,177 @@ public: //@{ /** - Draws an ellipse contained in the rectangle specified either with the given top - left corner and the given size or directly. The current pen is used for the - outline and the current brush for filling the shape. + Draws an ellipse contained in the rectangle specified either with the + given top left corner and the given size or directly. The current pen + is used for the outline and the current brush for filling the shape. @see DrawCircle() */ - void DrawEllipse(wxCoord x, wxCoord y, wxCoord width, - wxCoord height); + void DrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height); void DrawEllipse(const wxPoint& pt, const wxSize& size); void DrawEllipse(const wxRect& rect); //@} /** - Draws an arc of an ellipse. The current pen is used for drawing the arc and - the current brush is used for drawing the pie. - @a x and @a y specify the x and y coordinates of the upper-left corner of the - rectangle that contains - the ellipse. - @a width and @a height specify the width and height of the rectangle that - contains - the ellipse. - @a start and @a end specify the start and end of the arc relative to the - three-o'clock - position from the center of the rectangle. Angles are specified - in degrees (360 is a complete circle). Positive values mean - counter-clockwise motion. If @a start is equal to @e end, a - complete ellipse will be drawn. + Draws an arc of an ellipse. The current pen is used for drawing the arc + and the current brush is used for drawing the pie. + + @a x and @a y specify the x and y coordinates of the upper-left corner + of the rectangle that contains the ellipse. + + @a width and @a height specify the width and height of the rectangle + that contains the ellipse. + + @a start and @a end specify the start and end of the arc relative to + the three-o'clock position from the center of the rectangle. Angles are + specified in degrees (360 is a complete circle). Positive values mean + counter-clockwise motion. If @a start is equal to @e end, a complete + ellipse will be drawn. */ - void DrawEllipticArc(wxCoord x, wxCoord y, wxCoord width, - wxCoord height, - double start, - double end); + void DrawEllipticArc(wxCoord x, wxCoord y, wxCoord width, wxCoord height, + double start, double end); /** - Draw an icon on the display (does nothing if the device context is PostScript). - This can be the simplest way of drawing bitmaps on a window. + Draw an icon on the display (does nothing if the device context is + PostScript). This can be the simplest way of drawing bitmaps on a + window. */ void DrawIcon(const wxIcon& icon, wxCoord x, wxCoord y); //@{ /** - Draw optional bitmap and the text into the given rectangle and aligns it as - specified - by alignment parameter; it also will emphasize the character with the given - index if - it is != -1 and return the bounding rectangle if required. + Draw optional bitmap and the text into the given rectangle and aligns + it as specified by alignment parameter; it also will emphasize the + character with the given index if it is != -1 and return the bounding + rectangle if required. */ - virtual void DrawLabel(const wxString& text, - const wxBitmap& image, + virtual void DrawLabel(const wxString& text, const wxBitmap& image, const wxRect& rect, int alignment = wxALIGN_LEFT | wxALIGN_TOP, - int indexAccel = -1, - wxRect* rectBounding = NULL); + int indexAccel = -1, wxRect* rectBounding = NULL); void DrawLabel(const wxString& text, const wxRect& rect, int alignment = wxALIGN_LEFT | wxALIGN_TOP, int indexAccel = -1); //@} /** - Draws a line from the first point to the second. The current pen is used - for drawing the line. Note that the point (x2, y2) is not part of the - line and is not drawn by this function (this is consistent with the behaviour - of many other toolkits). + Draws a line from the first point to the second. The current pen is + used for drawing the line. Note that the point (@a x2, @a y2) is not + part of the line and is not drawn by this function (this is consistent + with the behaviour of many other toolkits). */ void DrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2); - //@{ /** - This method uses a list of wxPoints, adding the optional offset - coordinate. The programmer is responsible for deleting the list - of points. + Draws lines using an array of points of size @a n adding the optional + offset coordinate. The current pen is used for drawing the lines. + + @beginWxPythonOnly + The wxPython version of this method accepts a Python list of wxPoint + objects. + @endWxPythonOnly */ void DrawLines(int n, wxPoint points[], wxCoord xoffset = 0, wxCoord yoffset = 0); + /** + This method uses a list of wxPoints, adding the optional offset + coordinate. The programmer is responsible for deleting the list of + points. + + @beginWxPythonOnly + The wxPython version of this method accepts a Python list of wxPoint + objects. + @endWxPythonOnly + */ void DrawLines(const wxPointList* points, - wxCoord xoffset = 0, - wxCoord yoffset = 0); - //@} + wxCoord xoffset = 0, wxCoord yoffset = 0); /** Draws a point using the color of the current pen. Note that the other - properties of the pen are not used, such as width etc.. + properties of the pen are not used, such as width. */ void DrawPoint(wxCoord x, wxCoord y); /** - Draws two or more filled polygons using an array of @e points, adding the - optional offset coordinates. - Notice that for the platforms providing a native implementation - of this function (Windows and PostScript-based wxDC currently), this is more - efficient than using DrawPolygon() in a loop. - @a n specifies the number of polygons to draw, the array @e count of size - @a n specifies the number of points in each of the polygons in the - @e points array. - The last argument specifies the fill rule: @b wxODDEVEN_RULE (the default) - or @b wxWINDING_RULE. - The current pen is used for drawing the outline, and the current brush for - filling the shape. Using a transparent brush suppresses filling. - The polygons maybe disjoint or overlapping. Each polygon specified in a call to - @b DrawPolyPolygon must be closed. Unlike polygons created by the - DrawPolygon() member function, the polygons created by - @b DrawPolyPolygon are not closed automatically. - */ - void DrawPolyPolygon(int n, int count[], wxPoint points[], - wxCoord xoffset = 0, - wxCoord yoffset = 0, - int fill_style = wxODDEVEN_RULE); + Draws a filled polygon using an array of points of size @a n, adding + the optional offset coordinate. The first and last points are + automatically closed. - //@{ + The last argument specifies the fill rule: @b wxODDEVEN_RULE (the + default) or @b wxWINDING_RULE. + + The current pen is used for drawing the outline, and the current brush + for filling the shape. Using a transparent brush suppresses filling. + */ + void DrawPolygon(int n, wxPoint points[], wxCoord xoffset = 0, + wxCoord yoffset = 0, int fill_style = wxODDEVEN_RULE); /** - This method draws a filled polygon using a list of wxPoints, - adding the optional offset coordinate. + This method draws a filled polygon using a list of wxPoints, adding the + optional offset coordinate. The first and last points are automatically + closed. + The last argument specifies the fill rule: @b wxODDEVEN_RULE (the default) or @b wxWINDING_RULE. + The current pen is used for drawing the outline, and the current brush - for filling the shape. Using a transparent brush suppresses filling. + for filling the shape. Using a transparent brush suppresses filling. + The programmer is responsible for deleting the list of points. - Note that wxWidgets automatically closes the first and last points. + + @beginWxPythonOnly + The wxPython version of this method accepts a Python list of wxPoint + objects. + @endWxPythonOnly */ - void DrawPolygon(int n, wxPoint points[], wxCoord xoffset = 0, - wxCoord yoffset = 0, - int fill_style = wxODDEVEN_RULE); void DrawPolygon(const wxPointList* points, - wxCoord xoffset = 0, - wxCoord yoffset = 0, + wxCoord xoffset = 0, wxCoord yoffset = 0, int fill_style = wxODDEVEN_RULE); - //@} + + /** + Draws two or more filled polygons using an array of @a points, adding + the optional offset coordinates. + + Notice that for the platforms providing a native implementation of this + function (Windows and PostScript-based wxDC currently), this is more + efficient than using DrawPolygon() in a loop. + + @a n specifies the number of polygons to draw, the array @e count of + size @a n specifies the number of points in each of the polygons in the + @a points array. + + The last argument specifies the fill rule: @b wxODDEVEN_RULE (the + default) or @b wxWINDING_RULE. + + The current pen is used for drawing the outline, and the current brush + for filling the shape. Using a transparent brush suppresses filling. + + The polygons maybe disjoint or overlapping. Each polygon specified in a + call to DrawPolyPolygon() must be closed. Unlike polygons created by + the DrawPolygon() member function, the polygons created by this + method are not closed automatically. + + @beginWxPythonOnly + Not implemented yet. + @endWxPythonOnly + */ + void DrawPolyPolygon(int n, int count[], wxPoint points[], + wxCoord xoffset = 0, wxCoord yoffset = 0, + int fill_style = wxODDEVEN_RULE); /** Draws a rectangle with the given top left corner, and with the given size. The current pen is used for the outline and the current brush for filling the shape. */ - void DrawRectangle(wxCoord x, wxCoord y, wxCoord width, - wxCoord height); + void DrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height); /** Draws the text rotated by @a angle degrees. - @b NB: Under Win9x only TrueType fonts can be drawn by this function. In - particular, a font different from @c wxNORMAL_FONT should be used as the - latter is not a TrueType font. @c wxSWISS_FONT is an example of a font - which is. + + @note Under Win9x only TrueType fonts can be drawn by this function. In + particular, a font different from @c wxNORMAL_FONT should be used + as the latter is not a TrueType font. @c wxSWISS_FONT is an + example of a font which is. @see DrawText() */ @@ -366,44 +405,47 @@ public: /** Draws a rectangle with the given top left corner, and with the given - size. The corners are quarter-circles using the given radius. The + size. The corners are quarter-circles using the given radius. The current pen is used for the outline and the current brush for filling the shape. - If @a radius is positive, the value is assumed to be the - radius of the rounded corner. If @a radius is negative, - the absolute value is assumed to be the @e proportion of the smallest - dimension of the rectangle. This means that the corner can be - a sensible size relative to the size of the rectangle, and also avoids - the strange effects X produces when the corners are too big for - the rectangle. + + If @a radius is positive, the value is assumed to be the radius of the + rounded corner. If @a radius is negative, the absolute value is assumed + to be the @e proportion of the smallest dimension of the rectangle. + This means that the corner can be a sensible size relative to the size + of the rectangle, and also avoids the strange effects X produces when + the corners are too big for the rectangle. */ void DrawRoundedRectangle(wxCoord x, wxCoord y, wxCoord width, - wxCoord height, - double radius); + wxCoord height, double radius); //@{ /** - Draws a three-point spline using the current pen. + Draws a spline between all given points using the current pen. + + @beginWxPythonOnly + The wxPython version of this method accepts a Python list of wxPoint + objects. + @endWxPythonOnly */ void DrawSpline(int n, wxPoint points[]); void DrawSpline(const wxPointList* points); - void DrawSpline(wxCoord x1, wxCoord y1, wxCoord x2, - wxCoord y2, - wxCoord x3, - wxCoord y3); + void DrawSpline(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2, + wxCoord x3, wxCoord y3); //@} /** - Draws a text string at the specified point, using the current text font, - and the current text foreground and background colours. + Draws a text string at the specified point, using the current text + font, and the current text foreground and background colours. + The coordinates refer to the top-left corner of the rectangle bounding - the string. See GetTextExtent() for how - to get the dimensions of a text string, which can be used to position the - text more precisely. - @b NB: under wxGTK the current - @ref getlogicalfunction() "logical function" is used by this function - but it is ignored by wxMSW. Thus, you should avoid using logical functions - with this function in portable programs. + the string. See GetTextExtent() for how to get the dimensions of a text + string, which can be used to position the text more precisely. + + @note Under wxGTK, the current + @ref GetLogicalFunction() "logical function" is used by this + function but it is ignored by wxMSW. Thus, you should avoid using + logical functions with this function in portable programs. */ void DrawText(const wxString& text, wxCoord x, wxCoord y); @@ -419,20 +461,26 @@ public: /** Flood fills the device context starting from the given point, using - the @e current brush colour, and using a style: - wxFLOOD_SURFACE: the flooding occurs until a colour other than the given - colour is encountered. - wxFLOOD_BORDER: the area to be flooded is bounded by the given colour. - Returns @false if the operation failed. - @e Note: The present implementation for non-Windows platforms may fail to find - colour borders if the pixels do not match the colour exactly. However the - function will still return @true. + the current brush colour, and using a style: + + - wxFLOOD_SURFACE: The flooding occurs until a colour other than the + given colour is encountered. + - wxFLOOD_BORDER: The area to be flooded is bounded by the given + colour. + + @return @false if the operation failed. + + @note The present implementation for non-Windows platforms may fail to + find colour borders if the pixels do not match the colour + exactly. However the function will still return @true. */ bool FloodFill(wxCoord x, wxCoord y, const wxColour& colour, int style = wxFLOOD_SURFACE); /** - Gets the brush used for painting the background (see wxDC::SetBackground). + Gets the brush used for painting the background. + + @see wxDC::SetBackground() */ const wxBrush GetBackground() const; @@ -444,7 +492,9 @@ public: int GetBackgroundMode() const; /** - Gets the current brush (see wxDC::SetBrush). + Gets the current brush. + + @see wxDC::SetBrush() */ const wxBrush GetBrush() const; @@ -460,9 +510,13 @@ public: /** Gets the rectangle surrounding the current clipping region. + + @beginWxPythonOnly + No arguments are required and the four values defining the rectangle + are returned as a tuple. + @endWxPythonOnly */ - void GetClippingBox(wxCoord x, wxCoord y, wxCoord width, - wxCoord height); + void GetClippingBox(wxCoord x, wxCoord y, wxCoord width, wxCoord height); /** Returns the depth (number of bits/pixel) of this DC. @@ -472,44 +526,49 @@ public: int GetDepth() const; /** - Gets the current font. Notice that even although each device context object has - some default font after creation, this method would return a @c wxNullFont - initially and only after calling SetFont() a valid - font is returned. + Gets the current font. Notice that even although each device context + object has some default font after creation, this method would return a + wxNullFont initially and only after calling SetFont() a valid font is + returned. */ const wxFont GetFont() const; /** - Gets the current layout direction of the device context. On platforms where RTL - layout - is supported, the return value will either be @c wxLayout_LeftToRight or - @c wxLayout_RightToLeft. If RTL layout is not supported, the return value will - be @c wxLayout_Default. + Gets the current layout direction of the device context. On platforms + where RTL layout is supported, the return value will either be + @c wxLayout_LeftToRight or @c wxLayout_RightToLeft. If RTL layout is + not supported, the return value will be @c wxLayout_Default. @see SetLayoutDirection() */ wxLayoutDirection GetLayoutDirection() const; /** - Gets the current logical function (see wxDC::SetLogicalFunction). + Gets the current logical function. + + @see SetLogicalFunction() */ int GetLogicalFunction(); /** - Gets the @e mapping mode for the device context (see wxDC::SetMapMode). + Gets the mapping mode for the device context. + + @see SetMapMode() */ int GetMapMode(); - //@{ /** Gets the dimensions of the string using the currently selected font. @a string is the text string to measure, @e heightLine, if non @NULL, is where to store the height of a single line. - The text extent is returned in @a w and @a h pointers (first form) or as - a wxSize object (second form). - If the optional parameter @a font is specified and valid, then it is used - for the text extent calculation. Otherwise the currently selected font is. - Note that this function works both with single-line and multi-line strings. + + The text extent is set in the given @a w and @a h pointers. + + If the optional parameter @a font is specified and valid, then it is + used for the text extent calculation, otherwise the currently selected + font is used. + + @note This function works with both single-line and multi-line strings. @see wxFont, SetFont(), GetPartialTextExtents(), GetTextExtent() */ @@ -517,22 +576,31 @@ public: wxCoord* h, wxCoord* heightLine = NULL, wxFont* font = NULL) const; - const wxSize GetMultiLineTextExtent(const wxString& string) const; - //@} - /** - Returns the resolution of the device in pixels per inch. + Gets the dimensions of the string using the currently selected font. + @a string is the text string to measure, @e heightLine, if non @NULL, + is where to store the height of a single line. + + @return The text extent as a wxSize object. + + @note This function works with both single-line and multi-line strings. + + @see wxFont, SetFont(), GetPartialTextExtents(), GetTextExtent() */ - wxSize GetPPI() const; + const wxSize GetMultiLineTextExtent(const wxString& string) const; /** - Fills the @a widths array with the widths from the beginning of - @a text to the corresponding character of @e text. The generic - version simply builds a running total of the widths of each character - using GetTextExtent(), however if the - various platforms have a native API function that is faster or more - accurate than the generic implementation then it should be used - instead. + Fills the @a widths array with the widths from the beginning of @a text + to the corresponding character of @a text. The generic version simply + builds a running total of the widths of each character using + GetTextExtent(), however if the various platforms have a native API + function that is faster or more accurate than the generic + implementation then it should be used instead. + + @beginWxPythonOnly + This method only takes the @a text parameter and returns a Python list + of integers. + @endWxPythonOnly @see GetMultiLineTextExtent(), GetTextExtent() */ @@ -540,38 +608,55 @@ public: wxArrayInt& widths) const; /** - Gets the current pen (see wxDC::SetPen). + Gets the current pen. + + @see SetPen() */ const wxPen GetPen() const; /** - Gets in @a colour the colour at the specified location. - Not available for wxPostScriptDC or wxMetafileDC. - Note that setting a pixel can be done using DrawPoint(). + Gets in @a colour the colour at the specified location. Not available + for wxPostScriptDC or wxMetafileDC. + + @note Setting a pixel can be done using DrawPoint(). + + @beginWxPythonOnly + The wxColour value is returned and is not required as a parameter. + @endWxPythonOnly */ bool GetPixel(wxCoord x, wxCoord y, wxColour* colour); - //@{ /** - This gets the horizontal and vertical resolution in device units. It can be - used to scale graphics to fit the page. - For example, if @e maxX and @e maxY - represent the maximum horizontal and vertical 'pixel' values used in your - application, the following code will scale the graphic to fit on the - printer page: - + Returns the resolution of the device in pixels per inch. + */ + wxSize GetPPI() const; - @b GetSize() + //@{ + /** + This gets the horizontal and vertical resolution in device units. It + can be used to scale graphics to fit the page. - Returns a Wx::Size + For example, if @e maxX and @e maxY represent the maximum horizontal + and vertical 'pixel' values used in your application, the following + code will scale the graphic to fit on the printer page: - @b GetSizeWH() + @code + wxCoord w, h; + dc.GetSize(&w, &h); + double scaleX = (double)(maxX / w); + double scaleY = (double)(maxY / h); + dc.SetUserScale(min(scaleX, scaleY),min(scaleX, scaleY)); + @endcode - Returns a 2-element list - @c ( width, height ) + @beginWxPythonOnly + In place of a single overloaded method name, wxPython implements the + following methods: + - GetSize() - Returns a wxSize. + - GetSizeWH() - Returns a 2-tuple (width, height). + @endWxPythonOnly */ void GetSize(wxCoord* width, wxCoord* height) const; - const wxSize GetSize() const; + const wxSize GetSize() const; //@} //@{ @@ -579,32 +664,44 @@ public: Returns the horizontal and vertical resolution in millimetres. */ void GetSizeMM(wxCoord* width, wxCoord* height) const; - const wxSize GetSizeMM() const; + const wxSize GetSizeMM() const; //@} /** - Gets the current text background colour (see wxDC::SetTextBackground). + Gets the current text background colour. + + @see SetTextBackground() */ const wxColour GetTextBackground() const; //@{ /** Gets the dimensions of the string using the currently selected font. - @a string is the text string to measure, @a descent is the - dimension from the baseline of the font to the bottom of the - descender, and @a externalLeading is any extra vertical space added - to the font by the font designer (usually is zero). - The text extent is returned in @a w and @a h pointers (first form) or as - a wxSize object (second form). - If the optional parameter @a font is specified and valid, then it is used - for the text extent calculation. Otherwise the currently selected font is. - Note that this function only works with single-line strings. + @a string is the text string to measure, @a descent is the dimension + from the baseline of the font to the bottom of the descender, and + @a externalLeading is any extra vertical space added to the font by the + font designer (usually is zero). + + The text extent is returned in @a w and @a h pointers or as a wxSize + object depending on which version of this function is used. + + If the optional parameter @a font is specified and valid, then it is + used for the text extent calculation. Otherwise the currently selected + font is. + + @note This function only works with single-line strings. + + @beginWxPythonOnly + The following methods are implemented in wxPython: + - GetTextExtent(string) - Returns a 2-tuple, (width, height). + - GetFullTextExtent(string, font=NULL) - + Returns a 4-tuple, (width, height, descent, externalLeading). + @endWxPythonOnly @see wxFont, SetFont(), GetPartialTextExtents(), GetMultiLineTextExtent() */ - void GetTextExtent(const wxString& string, wxCoord* w, - wxCoord* h, + void GetTextExtent(const wxString& string, wxCoord* w, wxCoord* h, wxCoord* descent = NULL, wxCoord* externalLeading = NULL, const wxFont* font = NULL) const; @@ -612,25 +709,31 @@ public: //@} /** - Gets the current text foreground colour (see wxDC::SetTextForeground). + Gets the current text foreground colour. + + @see SetTextForeground() */ const wxColour GetTextForeground() const; /** - Gets the current user scale factor (set by wxDC::SetUserScale). + Gets the current user scale factor. + + @see SetUserScale() */ void GetUserScale(double x, double y); //@{ /** Fill the area specified by rect with a radial gradient, starting from - @a initialColour at the centre of the circle and fading to @a destColour - on the circle outside. + @a initialColour at the centre of the circle and fading to + @a destColour on the circle outside. + @a circleCenter are the relative coordinates of centre of the circle in - the specified @e rect. If not specified, the cercle is placed at the + the specified @e rect. If not specified, the circle is placed at the centre of rect. - @b Note: Currently this function is very slow, don't use it for - real-time drawing. + + @note Currently this function is very slow, don't use it for real-time + drawing. */ void GradientFillConcentric(const wxRect& rect, const wxColour& initialColour, @@ -642,10 +745,10 @@ public: //@} /** - Fill the area specified by @a rect with a linear gradient, starting from - @a initialColour and eventually fading to @e destColour. The - @a nDirection specifies the direction of the colour change, default is to - use @a initialColour on the left part of the rectangle and + Fill the area specified by @a rect with a linear gradient, starting + from @a initialColour and eventually fading to @e destColour. The + @a nDirection specifies the direction of the colour change, default is + to use @a initialColour on the left part of the rectangle and @a destColour on the right one. */ void GradientFillLinear(const wxRect& rect, @@ -665,9 +768,9 @@ public: virtual wxCoord LogicalToDeviceX(wxCoord x); /** - Converts logical X coordinate to relative device coordinate, using the current - mapping mode but ignoring the x axis orientation. - Use this for converting a width, for example. + Converts logical X coordinate to relative device coordinate, using the + current mapping mode but ignoring the x axis orientation. Use this for + converting a width, for example. */ virtual wxCoord LogicalToDeviceXRel(wxCoord x); @@ -678,9 +781,9 @@ public: virtual wxCoord LogicalToDeviceY(wxCoord y); /** - Converts logical Y coordinate to relative device coordinate, using the current - mapping mode but ignoring the y axis orientation. - Use this for converting a height, for example. + Converts logical Y coordinate to relative device coordinate, using the + current mapping mode but ignoring the y axis orientation. Use this for + converting a height, for example. */ virtual wxCoord LogicalToDeviceYRel(wxCoord y); @@ -705,8 +808,8 @@ public: wxCoord MinY(); /** - Resets the bounding box: after a call to this function, the bounding box - doesn't contain anything. + Resets the bounding box: after a call to this function, the bounding + box doesn't contain anything. @see CalcBoundingBox() */ @@ -714,15 +817,15 @@ public: /** Sets the x and y axis orientation (i.e., the direction from lowest to - highest values on the axis). The default orientation is - x axis from left to right and y axis from top down. + highest values on the axis). The default orientation is x axis from + left to right and y axis from top down. @param xLeftRight - True to set the x axis orientation to the natural - left to right orientation, @false to invert it. + True to set the x axis orientation to the natural left to right + orientation, @false to invert it. @param yBottomUp - True to set the y axis orientation to the natural - bottom up orientation, @false to invert it. + True to set the y axis orientation to the natural bottom up + orientation, @false to invert it. */ void SetAxisOrientation(bool xLeftRight, bool yBottomUp); @@ -732,32 +835,33 @@ public: void SetBackground(const wxBrush& brush); /** - @a mode may be one of wxSOLID and wxTRANSPARENT. This setting determines - whether text will be drawn with a background colour or not. + @a mode may be one of wxSOLID and wxTRANSPARENT. This setting + determines whether text will be drawn with a background colour or not. */ void SetBackgroundMode(int mode); /** Sets the current brush for the DC. - If the argument is wxNullBrush, the current brush is selected out of the device - context (leaving wxDC without any valid brush), allowing the current brush to - be destroyed safely. - See also wxBrush. - See also wxMemoryDC for the interpretation of colours - when drawing into a monochrome bitmap. + + If the argument is wxNullBrush, the current brush is selected out of + the device context (leaving wxDC without any valid brush), allowing the + current brush to be destroyed safely. + + @see wxBrush, wxMemoryDC (for the interpretation of colours when + drawing into a monochrome bitmap) */ void SetBrush(const wxBrush& brush); //@{ /** - Sets the clipping region for this device context to the intersection of the - given region described by the parameters of this method and the previously set - clipping region. You should call - DestroyClippingRegion() if you want to set - the clipping region exactly to the region specified. - The clipping region is an area to which drawing is restricted. Possible uses - for the clipping region are for clipping text or for speeding up window redraws - when only a known area of the screen is damaged. + Sets the clipping region for this device context to the intersection of + the given region described by the parameters of this method and the + previously set clipping region. You should call DestroyClippingRegion() + if you want to set the clipping region exactly to the region specified. + + The clipping region is an area to which drawing is restricted. Possible + uses for the clipping region are for clipping text or for speeding up + window redraws when only a known area of the screen is damaged. @see DestroyClippingRegion(), wxRegion */ @@ -765,100 +869,116 @@ public: wxCoord height); void SetClippingRegion(const wxPoint& pt, const wxSize& sz); void SetClippingRegion(const wxRect& rect); - void SetClippingRegion(const wxRegion& region); //@} /** - Sets the device origin (i.e., the origin in pixels after scaling has been - applied). - This function may be useful in Windows printing + Sets the clipping region for this device context. + + Unlike SetClippingRegion(), this function works with physical + coordinates and not with the logical ones. + */ + void SetDeviceClippingRegion(const wxRegion& region); + + /** + Sets the device origin (i.e., the origin in pixels after scaling has + been applied). This function may be useful in Windows printing operations for placing a graphic on a page. */ void SetDeviceOrigin(wxCoord x, wxCoord y); /** - Sets the current font for the DC. It must be a valid font, in particular you - should not pass @c wxNullFont to this method. - See also wxFont. + Sets the current font for the DC. It must be a valid font, in + particular you should not pass wxNullFont to this method. + + @see wxFont */ void SetFont(const wxFont& font); /** - Sets the current layout direction for the device context. @a dir may be either - @c wxLayout_Default, @c wxLayout_LeftToRight or @c wxLayout_RightToLeft. + Sets the current layout direction for the device context. @a dir may be + either @c wxLayout_Default, @c wxLayout_LeftToRight or + @c wxLayout_RightToLeft. @see GetLayoutDirection() */ void SetLayoutDirection(wxLayoutDirection dir); /** - Sets the current logical function for the device context. This determines how - a source pixel (from a pen or brush colour, or source device context if - using wxDC::Blit) combines with a destination pixel in the - current device context. - The possible values - and their meaning in terms of source and destination pixel values are - as follows: - - The default is wxCOPY, which simply draws with the current colour. - The others combine the current colour and the background using a - logical operation. wxINVERT is commonly used for drawing rubber bands or - moving outlines, since drawing twice reverts to the original colour. + Sets the current logical function for the device context. This + determines how a source pixel (from a pen or brush colour, or source + device context if using Blit()) combines with a destination pixel in + the current device context. + + The possible values and their meaning in terms of source and + destination pixel values are as follows: + + @verbatim + wxAND src AND dst + wxAND_INVERT (NOT src) AND dst + wxAND_REVERSE src AND (NOT dst) + wxCLEAR 0 + wxCOPY src + wxEQUIV (NOT src) XOR dst + wxINVERT NOT dst + wxNAND (NOT src) OR (NOT dst) + wxNOR (NOT src) AND (NOT dst) + wxNO_OP dst + wxOR src OR dst + wxOR_INVERT (NOT src) OR dst + wxOR_REVERSE src OR (NOT dst) + wxSET 1 + wxSRC_INVERT NOT src + wxXOR src XOR dst + @endverbatim + + The default is wxCOPY, which simply draws with the current colour. The + others combine the current colour and the background using a logical + operation. wxINVERT is commonly used for drawing rubber bands or moving + outlines, since drawing twice reverts to the original colour. */ void SetLogicalFunction(int function); /** - The @e mapping mode of the device context defines the unit of - measurement used to convert logical units to device units. Note that - in X, text drawing isn't handled consistently with the mapping mode; a - font is always specified in point size. However, setting the @e user scale (see - wxDC::SetUserScale) scales the text appropriately. In - Windows, scalable TrueType fonts are always used; in X, results depend - on availability of fonts, but usually a reasonable match is found. - The coordinate origin is always at the top left of the screen/printer. - Drawing to a Windows printer device context uses the current mapping mode, - but mapping mode is currently ignored for PostScript output. - The mapping mode can be one of the following: - - wxMM_TWIPS - - Each logical unit is 1/20 of a point, or 1/1440 of - an inch. - - wxMM_POINTS - - Each logical unit is a point, or 1/72 of an inch. + The mapping mode of the device context defines the unit of measurement + used to convert logical units to device units. Note that in X, text + drawing isn't handled consistently with the mapping mode; a font is + always specified in point size. However, setting the user scale (see + SetUserScale()) scales the text appropriately. In Windows, scalable + TrueType fonts are always used; in X, results depend on availability of + fonts, but usually a reasonable match is found. - wxMM_METRIC - - Each logical unit is 1 mm. - - wxMM_LOMETRIC - - Each logical unit is 1/10 of a mm. + The coordinate origin is always at the top left of the screen/printer. - wxMM_TEXT + Drawing to a Windows printer device context uses the current mapping + mode, but mapping mode is currently ignored for PostScript output. - Each logical unit is 1 device pixel. + The mapping mode can be one of the following: + - wxMM_TWIPS: Each logical unit is 1/20 of a point, or 1/1440 of an + inch. + - wxMM_POINTS: Each logical unit is a point, or 1/72 of an inch. + - wxMM_METRIC: Each logical unit is 1 mm. + - wxMM_LOMETRIC: Each logical unit is 1/10 of a mm. + - wxMM_TEXT: Each logical unit is 1 device pixel. */ - void SetMapMode(int int); + void SetMapMode(int mode); /** - If this is a window DC or memory DC, assigns the given palette to the window - or bitmap associated with the DC. If the argument is wxNullPalette, the current - palette is selected out of the device context, and the original palette - restored. - See wxPalette for further details. + If this is a window DC or memory DC, assigns the given palette to the + window or bitmap associated with the DC. If the argument is + wxNullPalette, the current palette is selected out of the device + context, and the original palette restored. + + @see wxPalette */ void SetPalette(const wxPalette& palette); /** - Sets the current pen for the DC. - If the argument is wxNullPen, the current pen is selected out of the device - context (leaving wxDC without any valid pen), allowing the current brush to - be destroyed safely. - See also wxMemoryDC for the interpretation of colours - when drawing into a monochrome bitmap. + Sets the current pen for the DC. If the argument is wxNullPen, the + current pen is selected out of the device context (leaving wxDC without + any valid pen), allowing the current brush to be destroyed safely. + + @see wxMemoryDC for the interpretation of colours when drawing into a + monochrome bitmap. */ void SetPen(const wxPen& pen); @@ -869,8 +989,9 @@ public: /** Sets the current text foreground colour for the DC. - See also wxMemoryDC for the interpretation of colours - when drawing into a monochrome bitmap. + + @see wxMemoryDC for the interpretation of colours when drawing into a + monochrome bitmap. */ void SetTextForeground(const wxColour& colour); @@ -882,7 +1003,7 @@ public: /** Starts a document (only relevant when outputting to a printer). - Message is a message to show while printing. + @a message is a message to show while printing. */ bool StartDoc(const wxString& message); @@ -893,8 +1014,8 @@ public: /** Copy from a source DC to this DC, specifying the destination - coordinates, destination size, source DC, source coordinates, - size of source area to copy, logical function, whether to use a bitmap mask, + coordinates, destination size, source DC, source coordinates, size of + source area to copy, logical function, whether to use a bitmap mask, and mask source position. @param xdest @@ -916,61 +1037,60 @@ public: @param srcHeight Height of source area to be copied. @param logicalFunc - Logical function to use: see SetLogicalFunction(). + Logical function to use, see SetLogicalFunction(). @param useMask - If @true, Blit does a transparent blit using the mask that is associated - with the bitmap - selected into the source device context. The Windows implementation does - the following if MaskBlt cannot be used: - - - Creates a temporary bitmap and copies the destination area into it. - Copies the source area into the temporary bitmap using the specified - logical function. - Sets the masked area in the temporary bitmap to BLACK by ANDing the - mask bitmap with the temp bitmap with the foreground colour set to WHITE - and the background colour set to BLACK. - Sets the unmasked area in the destination area to BLACK by ANDing the - mask bitmap with the destination area with the foreground colour set to - BLACK - and the background colour set to WHITE. - ORs the temporary bitmap with the destination area. - Deletes the temporary bitmap. - - - This sequence of operations ensures that the source's transparent area need - not be black, - and logical functions are supported. - Note: on Windows, blitting with masks can be speeded up considerably by - compiling - wxWidgets with the wxUSE_DC_CACHE option enabled. You can also influence - whether MaskBlt - or the explicit mask blitting code above is used, by using wxSystemOptions - and - setting the no-maskblt option to 1. + If @true, Blit does a transparent blit using the mask that is + associated with the bitmap selected into the source device context. + The Windows implementation does the following if MaskBlt cannot be + used: +
    +
  1. Creates a temporary bitmap and copies the destination area into + it.
  2. +
  3. Copies the source area into the temporary bitmap using the + specified logical function.
  4. +
  5. Sets the masked area in the temporary bitmap to BLACK by ANDing + the mask bitmap with the temp bitmap with the foreground colour + set to WHITE and the bg colour set to BLACK.
  6. +
  7. Sets the unmasked area in the destination area to BLACK by + ANDing the mask bitmap with the destination area with the + foreground colour set to BLACK and the background colour set to + WHITE.
  8. +
  9. ORs the temporary bitmap with the destination area.
  10. +
  11. Deletes the temporary bitmap.
  12. +
+ This sequence of operations ensures that the source's transparent + area need not be black, and logical functions are supported. + @n @b Note: on Windows, blitting with masks can be speeded up + considerably by compiling wxWidgets with the wxUSE_DC_CACHE option + enabled. You can also influence whether MaskBlt or the explicit + mask blitting code above is used, by using wxSystemOptions and + setting the @c no-maskblt option to 1. @param xsrcMask - Source x position on the mask. If both xsrcMask and ysrcMask are -1, xsrc - and ysrc - will be assumed for the mask source position. Currently only implemented on - Windows. + Source x position on the mask. If both xsrcMask and ysrcMask are + -1, xsrc and ysrc will be assumed for the mask source position. + Currently only implemented on Windows. @param ysrcMask - Source y position on the mask. If both xsrcMask and ysrcMask are -1, xsrc - and ysrc - will be assumed for the mask source position. Currently only implemented on - Windows. - - @remarks There is partial support for Blit in wxPostScriptDC, under X. - */ - bool StretchBlit(wxCoord xdest, wxCoord ydest, wxCoord dstWidth, - wxCoord dstHeight, - wxDC* source, wxCoord xsrc, - wxCoord ysrc, - wxCoord srcWidth, - wxCoord srcHeight, + Source y position on the mask. If both xsrcMask and ysrcMask are + -1, xsrc and ysrc will be assumed for the mask source position. + Currently only implemented on Windows. + + There is partial support for Blit() in wxPostScriptDC, under X. + + StretchBlit() is only implemented under wxMAC and wxMSW. + + See wxMemoryDC for typical usage. + + @since 2.9.0 + + @see Blit(), wxMemoryDC, wxBitmap, wxMask + */ + bool StretchBlit(wxCoord xdest, wxCoord ydest, + wxCoord dstWidth, wxCoord dstHeight, + wxDC* source, wxCoord xsrc, wxCoord ysrc, + wxCoord srcWidth, wxCoord srcHeight, int logicalFunc = wxCOPY, bool useMask = false, - wxCoord xsrcMask = -1, - wxCoord ysrcMask = -1); + wxCoord xsrcMask = -1, wxCoord ysrcMask = -1); }; @@ -979,39 +1099,38 @@ public: @class wxDCClipper @wxheader{dc.h} - wxDCClipper is a small helper class for setting a clipping region on a - wxDC and unsetting it automatically. An object of wxDCClipper - class is typically created on the stack so that it is automatically destroyed - when the object goes out of scope. A typical usage example: + wxDCClipper is a small helper class for setting a clipping region on a wxDC + and unsetting it automatically. An object of wxDCClipper class is typically + created on the stack so that it is automatically destroyed when the object + goes out of scope. A typical usage example: @code void MyFunction(wxDC& dc) - { - wxDCClipper clip(rect); - ... drawing functions here are affected by clipping rect ... - } - - void OtherFunction() - { - wxDC dc; - MyFunction(dc); - ... drawing functions here are not affected by clipping rect ... - } + { + wxDCClipper clip(dc, rect); + // ... drawing functions here are affected by clipping rect ... + } + + void OtherFunction() + { + wxDC dc; + MyFunction(dc); + // ... drawing functions here are not affected by clipping rect ... + } @endcode @library{wxcore} @category{gdi} - @see wxDC::SetClippingRegion + @see wxDC::SetClippingRegion() */ class wxDCClipper { public: //@{ /** - Sets the clipping region to the specified region @a r or rectangle specified - by either a single @a rect parameter or its position (@a x and @e y) - and size (@a w ad @e h). + Sets the clipping region to the specified region/coordinates. + The clipping region is automatically unset when this object is destroyed. */ wxDCClipper(wxDC& dc, const wxRegion& r);