]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/dc.h
Use explicit wxPGPropertyFlags enum type with wxPGProperty::SetFlag() and similar...
[wxWidgets.git] / interface / wx / dc.h
index b3c0ac441b3a88274bafc17f2b147a74cb7a1e3e..22f898e805691c5c3664cdafc1fddf391fb63d0e 100644 (file)
@@ -112,10 +112,6 @@ enum wxMappingMode
     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.
-
 
     @section dc_units Device and logical units
 
@@ -133,6 +129,13 @@ enum wxMappingMode
     on the screen to print on e.g. a paper.
 
 
+    @section dc_alpha_support Support for Transparency / Alpha Channel
+
+    On Mac OS X colours with alpha channel are supported. Instances of wxPen
+    or wxBrush that are built from wxColour use the colour's alpha values
+    when stroking or filling.
+
+
     @library{wxcore}
     @category{dc,gdi}
 
@@ -147,124 +150,75 @@ class wxDC : public wxObject
 {
 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.
-
-        @param xdest
-            Destination device context x position.
-        @param ydest
-            Destination device context y position.
-        @param width
-            Width of source area to be copied.
-        @param height
-            Height of source area to be copied.
-        @param source
-            Source device context.
-        @param xsrc
-            Source device context x position.
-        @param ysrc
-            Source device context y position.
-        @param logicalFunc
-            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:
-            <ol>
-            <li>Creates a temporary bitmap and copies the destination area into
-                it.</li>
-            <li>Copies the source area into the temporary bitmap using the
-                specified logical function.</li>
-            <li>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.</li>
-            <li>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.</li>
-            <li>ORs the temporary bitmap with the destination area.</li>
-            <li>Deletes the temporary bitmap.</li>
-            </ol>
-            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
-            @c -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
-            @c -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.
-
-        @see StretchBlit(), wxMemoryDC, wxBitmap, wxMask
+        @name Coordinate conversion functions
     */
-    bool Blit(wxCoord xdest, wxCoord ydest, wxCoord width,
-              wxCoord height, wxDC* source, wxCoord xsrc, wxCoord ysrc,
-              wxRasterOperationMode logicalFunc = wxCOPY, bool useMask = false,
-              wxCoord xsrcMask = wxDefaultCoord, wxCoord ysrcMask = wxDefaultCoord);
+    //@{
 
     /**
-        Adds the specified point to the bounding box which can be retrieved
-        with MinX(), MaxX() and MinY(), MaxY() functions.
-
-        @see ResetBoundingBox()
+        Convert @e device X coordinate to logical coordinate, using the current
+        mapping mode, user scale factor, device origin and axis orientation.
     */
-    void CalcBoundingBox(wxCoord x, wxCoord y);
+    wxCoord DeviceToLogicalX(wxCoord x) const;
 
     /**
-        Clears the device context using the current background brush.
+        Convert @e device X coordinate to relative logical coordinate, using the
+        current mapping mode and user scale factor but ignoring the
+        axis orientation. Use this for converting a width, for example.
     */
-    void Clear();
+    wxCoord DeviceToLogicalXRel(wxCoord x) const;
 
     /**
-        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.
+        Converts @e device Y coordinate to logical coordinate, using the current
+        mapping mode, user scale factor, device origin and axis orientation.
     */
-    void CrossHair(wxCoord x, wxCoord y);
+    wxCoord DeviceToLogicalY(wxCoord y) const;
 
     /**
-        Destroys the current clipping region so that none of the DC is clipped.
-
-        @see SetClippingRegion()
+        Convert @e device Y coordinate to relative logical coordinate, using the
+        current mapping mode and user scale factor but ignoring the
+        axis orientation. Use this for converting a height, for example.
     */
-    void DestroyClippingRegion();
+    wxCoord DeviceToLogicalYRel(wxCoord y) const;
 
     /**
-        Convert @e device X coordinate to logical coordinate, using the current
+        Converts logical X coordinate to device coordinate, using the current
         mapping mode, user scale factor, device origin and axis orientation.
     */
-    wxCoord DeviceToLogicalX(wxCoord x) const;
+    wxCoord LogicalToDeviceX(wxCoord x) const;
 
     /**
-        Convert @e device X coordinate to relative logical coordinate, using the
+        Converts logical X coordinate to relative device coordinate, using the
         current mapping mode and user scale factor but ignoring the
         axis orientation. Use this for converting a width, for example.
     */
-    wxCoord DeviceToLogicalXRel(wxCoord x) const;
+    wxCoord LogicalToDeviceXRel(wxCoord x) const;
 
     /**
-        Converts @e device Y coordinate to logical coordinate, using the current
+        Converts logical Y coordinate to device coordinate, using the current
         mapping mode, user scale factor, device origin and axis orientation.
     */
-    wxCoord DeviceToLogicalY(wxCoord y) const;
+    wxCoord LogicalToDeviceY(wxCoord y) const;
 
     /**
-        Convert @e device Y coordinate to relative logical coordinate, using the
+        Converts logical Y coordinate to relative device coordinate, using the
         current mapping mode and user scale factor but ignoring the
         axis orientation. Use this for converting a height, for example.
     */
-    wxCoord DeviceToLogicalYRel(wxCoord y) const;
+    wxCoord LogicalToDeviceYRel(wxCoord y) const;
+
+    //@}
+
+
+
+    /**
+        @name Drawing functions
+    */
+    //@{
+
+    /**
+        Clears the device context using the current background brush.
+    */
+    void Clear();
 
     /**
         Draws an arc of a circle, centred on (@a xc, @a yc), with starting
@@ -275,7 +229,12 @@ public:
         to the end point.
     */
     void DrawArc(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2,
-                  wxCoord xc, wxCoord yc);
+                 wxCoord xc, wxCoord yc);
+
+    /**
+        @overload
+    */
+    void DrawArc(const wxPoint& pt1, const wxPoint& pt2, const wxPoint& centre);
 
     /**
         Draw a bitmap on the device context at the specified point. If
@@ -292,25 +251,34 @@ public:
     void DrawBitmap(const wxBitmap& bitmap, wxCoord x, wxCoord y,
                     bool useMask = false);
 
-    //@{
+    /**
+        @overload
+    */
+    void DrawBitmap(const wxBitmap &bmp, const wxPoint& pt,
+                    bool useMask = false);
+
     /**
         Draws a check mark inside the given rectangle.
     */
     void DrawCheckMark(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
+
+    /**
+        @overload
+    */
     void DrawCheckMark(const wxRect& rect);
-    //@}
 
-    //@{
     /**
         Draws a circle with the given centre and radius.
 
         @see DrawEllipse()
     */
     void DrawCircle(wxCoord x, wxCoord y, wxCoord radius);
+
+    /**
+        @overload
+    */
     void DrawCircle(const wxPoint& pt, wxCoord radius);
-    //@}
 
-    //@{
     /**
         Draws an ellipse contained in the rectangle specified either with the
         given top left corner and the given size or directly. The current pen
@@ -319,9 +287,16 @@ public:
         @see DrawCircle()
     */
     void DrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
+
+    /**
+        @overload
+    */
     void DrawEllipse(const wxPoint& pt, const wxSize& size);
+
+    /**
+        @overload
+    */
     void DrawEllipse(const wxRect& rect);
-    //@}
 
     /**
         Draws an arc of an ellipse. The current pen is used for drawing the arc
@@ -342,6 +317,12 @@ public:
     void DrawEllipticArc(wxCoord x, wxCoord y, wxCoord width, wxCoord height,
                           double start, double end);
 
+    /**
+        @overload
+    */
+    void DrawEllipticArc(const wxPoint& pt, const wxSize& sz,
+                         double sa, double ea);
+
     /**
         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
@@ -349,7 +330,11 @@ public:
     */
     void DrawIcon(const wxIcon& icon, wxCoord x, wxCoord y);
 
-    //@{
+    /**
+        @overload
+    */
+    void DrawIcon(const wxIcon& icon, const wxPoint& pt);
+
     /**
         Draw optional bitmap and the text into the given rectangle and aligns
         it as specified by alignment parameter; it also will emphasize the
@@ -360,10 +345,13 @@ public:
                    const wxRect& rect,
                    int alignment = wxALIGN_LEFT | wxALIGN_TOP,
                    int indexAccel = -1, wxRect* rectBounding = NULL);
+
+    /**
+        @overload
+    */
     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
@@ -373,6 +361,11 @@ public:
     */
     void DrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2);
 
+    /**
+        @overload
+    */
+    void DrawLine(const wxPoint& pt1, const wxPoint& pt2);
+
     /**
         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.
@@ -381,6 +374,10 @@ public:
         The wxPython version of this method accepts a Python list of wxPoint
         objects.
         @endWxPythonOnly
+
+        @beginWxPerlOnly
+        Not supported by wxPerl.
+        @endWxPerlOnly
     */
     void DrawLines(int n, wxPoint points[], wxCoord xoffset = 0,
                    wxCoord yoffset = 0);
@@ -393,6 +390,12 @@ public:
         The wxPython version of this method accepts a Python list of wxPoint
         objects.
         @endWxPythonOnly
+
+        @beginWxPerlOnly
+        The wxPerl version of this method accepts
+        as its first parameter a reference to an array
+        of wxPoint objects.
+        @endWxPerlOnly
     */
     void DrawLines(const wxPointList* points,
                    wxCoord xoffset = 0, wxCoord yoffset = 0);
@@ -403,6 +406,11 @@ public:
     */
     void DrawPoint(wxCoord x, wxCoord y);
 
+    /**
+        @overload
+    */
+    void DrawPoint(const wxPoint& pt);
+
     /**
         Draws a filled polygon using an array of points of size @a n, adding
         the optional offset coordinate. The first and last points are
@@ -413,6 +421,10 @@ public:
 
         The current pen is used for drawing the outline, and the current brush
         for filling the shape. Using a transparent brush suppresses filling.
+
+        @beginWxPerlOnly
+        Not supported by wxPerl.
+        @endWxPerlOnly
     */
     void DrawPolygon(int n, wxPoint points[], wxCoord xoffset = 0,
                      wxCoord yoffset = 0,
@@ -434,6 +446,12 @@ public:
         The wxPython version of this method accepts a Python list of wxPoint
         objects.
         @endWxPythonOnly
+
+        @beginWxPerlOnly
+        The wxPerl version of this method accepts
+        as its first parameter a reference to an array
+        of wxPoint objects.
+        @endWxPerlOnly
     */
     void DrawPolygon(const wxPointList* points,
                      wxCoord xoffset = 0, wxCoord yoffset = 0,
@@ -478,7 +496,18 @@ public:
     void DrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
 
     /**
-        Draws the text rotated by @a angle degrees.
+        @overload
+    */
+    void DrawRectangle(const wxPoint& pt, const wxSize& sz);
+
+    /**
+        @overload
+    */
+    void DrawRectangle(const wxRect& rect);
+
+    /**
+        Draws the text rotated by @a angle degrees 
+        (positive angles are counterclockwise; the full angle is 360 degrees).
 
         @note Under Win9x only TrueType fonts can be drawn by this function. In
               particular, a font different from @c wxNORMAL_FONT should be used
@@ -490,6 +519,12 @@ public:
     void DrawRotatedText(const wxString& text, wxCoord x, wxCoord y,
                          double angle);
 
+    /**
+        @overload
+    */
+    void DrawRotatedText(const wxString& text, const wxPoint&,
+                         double angle);
+
     /**
         Draws a rectangle with the given top left corner, and with the given
         size. The corners are quarter-circles using the given radius. The
@@ -506,7 +541,17 @@ public:
     void DrawRoundedRectangle(wxCoord x, wxCoord y, wxCoord width,
                               wxCoord height, double radius);
 
-    //@{
+    /**
+        @overload
+    */
+    void DrawRoundedRectangle(const wxPoint& pt, const wxSize& sz,
+                              double radius);
+
+    /**
+        @overload
+    */
+    void DrawRoundedRectangle(const wxRect& rect, double radius);
+
     /**
         Draws a spline between all given points using the current pen.
 
@@ -514,12 +559,35 @@ public:
         The wxPython version of this method accepts a Python list of wxPoint
         objects.
         @endWxPythonOnly
+
+        @beginWxPerlOnly
+        Not supported by wxPerl.
+        @endWxPerlOnly
     */
     void DrawSpline(int n, wxPoint points[]);
+
+    /**
+        @overload
+
+
+        @beginWxPerlOnly
+        The wxPerl version of this method accepts
+        as its first parameter a reference to an array
+        of wxPoint objects.
+        @endWxPerlOnly
+    */
     void DrawSpline(const wxPointList* points);
+
+    /**
+        @overload
+
+
+        @beginWxPerlOnly
+        Not supported by wxPerl.
+        @endWxPerlOnly
+    */
     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
@@ -535,14 +603,51 @@ public:
     void DrawText(const wxString& text, wxCoord x, wxCoord y);
 
     /**
-        Ends a document (only relevant when outputting to a printer).
+        @overload
     */
-    void EndDoc();
+    void DrawText(const wxString& text, const wxPoint& pt);
 
     /**
-        Ends a document page (only relevant when outputting to a printer).
+        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.
+
+        The circle is placed at the centre of @a rect.
+
+        @note Currently this function is very slow, don't use it for real-time
+              drawing.
     */
-    void EndPage();
+    void GradientFillConcentric(const wxRect& rect,
+                                const wxColour& initialColour,
+                                const wxColour& destColour);
+
+    /**
+        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 circleCenter are the relative coordinates of centre of the circle in
+        the specified @a rect.
+
+        @note Currently this function is very slow, don't use it for real-time
+              drawing.
+    */
+    void GradientFillConcentric(const wxRect& rect,
+                                const wxColour& initialColour,
+                                const wxColour& destColour,
+                                const wxPoint& circleCenter);
+
+    /**
+        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, const wxColour& initialColour,
+                            const wxColour& destColour,
+                            wxDirection nDirection = wxRIGHT);
 
     /**
         Flood fills the device context starting from the given point, using
@@ -563,35 +668,37 @@ public:
                    wxFloodFillStyle style = wxFLOOD_SURFACE);
 
     /**
-        Gets the brush used for painting the background.
+        @overload
+    */
+    bool FloodFill(const wxPoint& pt, const wxColour& col,
+                   int style = wxFLOOD_SURFACE);
 
-        @see wxDC::SetBackground()
+    /**
+        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.
     */
-    const wxBrush& GetBackground() const;
+    void CrossHair(wxCoord x, wxCoord y);
 
     /**
-        Returns the current background mode: @c wxSOLID or @c wxTRANSPARENT.
+        @overload
+    */
+    void CrossHair(const wxPoint& pt);
 
-        @see SetBackgroundMode()
-    */
-    int GetBackgroundMode() const;
-
-    /**
-        Gets the current brush.
+    //@}
 
-        @see wxDC::SetBrush()
-    */
-    const wxBrush& GetBrush() const;
 
     /**
-        Gets the character height of the currently set font.
+        @name Clipping region functions
     */
-    wxCoord GetCharHeight() const;
+    //@{
 
     /**
-        Gets the average character width of the currently set font.
+        Destroys the current clipping region so that none of the DC is clipped.
+
+        @see SetClippingRegion()
     */
-    wxCoord GetCharWidth() const;
+    void DestroyClippingRegion();
 
     /**
         Gets the rectangle surrounding the current clipping region.
@@ -604,43 +711,61 @@ public:
     void GetClippingBox(wxCoord *x, wxCoord *y, wxCoord *width, wxCoord *height) const;
 
     /**
-        Returns the depth (number of bits/pixel) of this DC.
+        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.
 
-        @see wxDisplayDepth()
+        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.
+
+        Notice that you need to call DestroyClippingRegion() if you want to set
+        the clipping region exactly to the region specified.
+
+        Also note that if the clipping region is empty, any previously set
+        clipping region is destroyed, i.e. it is equivalent to calling
+        DestroyClippingRegion(), and not to clipping out all drawing on the DC
+        as might be expected.
+
+        @see DestroyClippingRegion(), wxRegion
     */
-    int GetDepth() const;
+    void SetClippingRegion(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
 
     /**
-        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.
+        @overload
     */
-    const wxFont& GetFont() const;
+    void SetClippingRegion(const wxPoint& pt, const wxSize& sz);
 
     /**
-        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()
+        @overload
     */
-    wxLayoutDirection GetLayoutDirection() const;
+    void SetClippingRegion(const wxRect& rect);
 
     /**
-        Gets the current logical function.
+        Sets the clipping region for this device context.
 
-        @see SetLogicalFunction()
+        Unlike SetClippingRegion(), this function works with physical
+        coordinates and not with the logical ones.
+     */
+    void SetDeviceClippingRegion(const wxRegion& region);
+
+    //@}
+
+
+    /**
+        @name Text/character extent functions
     */
-    wxRasterOperationMode GetLogicalFunction() const;
+    //@{
 
     /**
-        Gets the current mapping mode for the device context.
+        Gets the character height of the currently set font.
+    */
+    wxCoord GetCharHeight() const;
 
-        @see SetMapMode()
+    /**
+        Gets the average character width of the currently set font.
     */
-    wxMappingMode GetMapMode() const;
+    wxCoord GetCharWidth() const;
 
     /**
         Gets the dimensions of the string using the currently selected font.
@@ -655,6 +780,12 @@ public:
 
         @note This function works with both single-line and multi-line strings.
 
+        @beginWxPerlOnly
+        In wxPerl this method is implemented as
+        GetMultiLineTextExtent(string, font = undef) returning a
+        3-element list (width, height, line_height)
+        @endWxPerlOnly
+
         @see wxFont, SetFont(), GetPartialTextExtents(), GetTextExtent()
     */
     void GetMultiLineTextExtent(const wxString& string, wxCoord* w,
@@ -670,6 +801,10 @@ public:
 
         @note This function works with both single-line and multi-line strings.
 
+        @beginWxPerlOnly
+        Not supported by wxPerl.
+        @endWxPerlOnly
+
         @see wxFont, SetFont(), GetPartialTextExtents(), GetTextExtent()
     */
     wxSize GetMultiLineTextExtent(const wxString& string) const;
@@ -687,70 +822,96 @@ public:
         of integers.
         @endWxPythonOnly
 
+        @beginWxPerlOnly
+        In wxPerl this method only takes the @a text parameter and
+        returns the widths as a list of integers.
+        @endWxPerlOnly
+
         @see GetMultiLineTextExtent(), GetTextExtent()
     */
     bool GetPartialTextExtents(const wxString& text,
                                wxArrayInt& widths) const;
 
     /**
-        Gets the current pen.
+        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).
 
-        @see SetPen()
-    */
-    const wxPen& GetPen() const;
+        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.
 
-    /**
-        Gets in @a colour the colour at the specified location. Not available
-        for wxPostScriptDC or wxMetafileDC.
+        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 Setting a pixel can be done using DrawPoint().
+        @note This function only works with single-line strings.
 
         @beginWxPythonOnly
-        The wxColour value is returned and is not required as a parameter.
+        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
+
+        @beginWxPerlOnly
+        In wxPerl this method is implemented as GetTextExtent(string,
+        font = undef) returning a 4-element list (width, height,
+        descent, externalLeading)
+        @endWxPerlOnly
+
+        @see wxFont, SetFont(), GetPartialTextExtents(),
+             GetMultiLineTextExtent()
     */
-    bool GetPixel(wxCoord x, wxCoord y, wxColour* colour) const;
+    void GetTextExtent(const wxString& string, wxCoord* w, wxCoord* h,
+                       wxCoord* descent = NULL,
+                       wxCoord* externalLeading = NULL,
+                       const wxFont* font = NULL) const;
 
     /**
-        Returns the resolution of the device in pixels per inch.
+        @overload
+
+
+        @beginWxPerlOnly
+        Not supported by wxPerl.
+        @endWxPerlOnly
     */
-    wxSize GetPPI() const;
+    wxSize GetTextExtent(const wxString& string) const;
+
+    //@}
+
 
-    //@{
     /**
-        Gets the horizontal and vertical extent of this device context in @e device units.
-        It can be used to scale graphics to fit the page.
+        @name Text properties functions
+    */
+    //@{
 
-        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 current background mode: @c wxSOLID or @c wxTRANSPARENT.
 
-        @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
+        @see SetBackgroundMode()
+    */
+    int GetBackgroundMode() const;
 
-        @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
+    /**
+        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.
     */
-    void GetSize(wxCoord* width, wxCoord* height) const;
-    wxSize GetSize() const;
-    //@}
+    const wxFont& GetFont() const;
 
-    //@{
     /**
-        Returns the horizontal and vertical resolution in millimetres.
+        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()
     */
-    void GetSizeMM(wxCoord* width, wxCoord* height) const;
-    wxSize GetSizeMM() const;
-    //@}
+    wxLayoutDirection GetLayoutDirection() const;
 
     /**
         Gets the current text background colour.
@@ -759,209 +920,481 @@ public:
     */
     const wxColour& GetTextBackground() const;
 
+    /**
+        Gets the current text foreground colour.
+
+        @see SetTextForeground()
+    */
+    const wxColour& GetTextForeground() const;
+
+    /**
+        @a mode may be one of @c wxSOLID and @c wxTRANSPARENT. 
+        
+        This setting determines whether text will be drawn with a background 
+        colour or not.
+    */
+    void SetBackgroundMode(int mode);
+
+    /**
+        Sets the current font for the DC. 
+
+        If the argument is ::wxNullFont (or another invalid font; see wxFont::IsOk), 
+        the current font is selected out of the device context (leaving wxDC without 
+        any valid font), allowing the current font to be destroyed safely.
+
+        @see wxFont
+    */
+    void SetFont(const wxFont& font);
+
+    /**
+        Sets the current text background colour for the DC.
+    */
+    void SetTextBackground(const wxColour& colour);
+
+    /**
+        Sets the current text foreground colour for the DC.
+
+        @see wxMemoryDC for the interpretation of colours when drawing into a
+             monochrome bitmap.
+    */
+    void SetTextForeground(const wxColour& colour);
+
+    /**
+        Sets the current layout direction for the device context. 
+        
+        @param dir 
+           May be either @c wxLayout_Default, @c wxLayout_LeftToRight or
+           @c wxLayout_RightToLeft.
+
+        @see GetLayoutDirection()
+    */
+    void SetLayoutDirection(wxLayoutDirection dir);
+
+    //@}
+
+
+    /**
+        @name Bounding box functions
+    */
     //@{
+
     /**
-        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).
+        Adds the specified point to the bounding box which can be retrieved
+        with MinX(), MaxX() and MinY(), MaxY() functions.
 
-        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.
+        @see ResetBoundingBox()
+    */
+    void CalcBoundingBox(wxCoord x, wxCoord y);
 
-        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.
+    /**
+        Gets the maximum horizontal extent used in drawing commands so far.
+    */
+    wxCoord MaxX() const;
 
-        @note This function only works with single-line strings.
+    /**
+        Gets the maximum vertical extent used in drawing commands so far.
+    */
+    wxCoord MaxY() const;
 
-        @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
+    /**
+        Gets the minimum horizontal extent used in drawing commands so far.
+    */
+    wxCoord MinX() const;
 
-        @see wxFont, SetFont(), GetPartialTextExtents(),
-             GetMultiLineTextExtent()
+    /**
+        Gets the minimum vertical extent used in drawing commands so far.
     */
-    void GetTextExtent(const wxString& string, wxCoord* w, wxCoord* h,
-                       wxCoord* descent = NULL,
-                       wxCoord* externalLeading = NULL,
-                       const wxFont* font = NULL) const;
-    wxSize GetTextExtent(const wxString& string) const;
+    wxCoord MinY() const;
+
+    /**
+        Resets the bounding box: after a call to this function, the bounding
+        box doesn't contain anything.
+
+        @see CalcBoundingBox()
+    */
+    void ResetBoundingBox();
+
     //@}
 
+
     /**
-        Gets the current text foreground colour.
+        @name Page and document start/end functions
+    */
+    //@{
 
-        @see SetTextForeground()
+    /**
+        Starts a document (only relevant when outputting to a printer).
+        @a message is a message to show while printing.
     */
-    const wxColour& GetTextForeground() const;
+    bool StartDoc(const wxString& message);
 
     /**
-        Gets the current user scale factor.
+        Starts a document page (only relevant when outputting to a printer).
+    */
+    void StartPage();
 
-        @see SetUserScale()
+    /**
+        Ends a document (only relevant when outputting to a printer).
     */
-    void GetUserScale(double* x, double* y) const;
+    void EndDoc();
 
+    /**
+        Ends a document page (only relevant when outputting to a printer).
+    */
+    void EndPage();
+
+    //@}
+
+
+    /**
+        @name Bit-Block Transfer operations (blit)
+    */
     //@{
+
     /**
-        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.
+        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.
 
-        @a circleCenter are the relative coordinates of centre of the circle in
-        the specified @e rect. If not specified, the circle is placed at the
-        centre of rect.
+        @param xdest
+            Destination device context x position.
+        @param ydest
+            Destination device context y position.
+        @param width
+            Width of source area to be copied.
+        @param height
+            Height of source area to be copied.
+        @param source
+            Source device context.
+        @param xsrc
+            Source device context x position.
+        @param ysrc
+            Source device context y position.
+        @param logicalFunc
+            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:
+            <ol>
+            <li>Creates a temporary bitmap and copies the destination area into
+                it.</li>
+            <li>Copies the source area into the temporary bitmap using the
+                specified logical function.</li>
+            <li>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.</li>
+            <li>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.</li>
+            <li>ORs the temporary bitmap with the destination area.</li>
+            <li>Deletes the temporary bitmap.</li>
+            </ol>
+            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
+            @c -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
+            @c -1, xsrc and ysrc will be assumed for the mask source position.
+            Currently only implemented on Windows.
 
-        @note Currently this function is very slow, don't use it for real-time
-              drawing.
+        @remarks There is partial support for Blit() in wxPostScriptDC, under X.
+
+        @see StretchBlit(), wxMemoryDC, wxBitmap, wxMask
     */
-    void GradientFillConcentric(const wxRect& rect,
-                                const wxColour& initialColour,
-                                const wxColour& destColour);
-    void GradientFillConcentric(const wxRect& rect,
-                                const wxColour& initialColour,
-                                const wxColour& destColour,
-                                const wxPoint& circleCenter);
+    bool Blit(wxCoord xdest, wxCoord ydest, wxCoord width,
+              wxCoord height, wxDC* source, wxCoord xsrc, wxCoord ysrc,
+              wxRasterOperationMode logicalFunc = wxCOPY, bool useMask = false,
+              wxCoord xsrcMask = wxDefaultCoord, wxCoord ysrcMask = wxDefaultCoord);
+
+    /**
+        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,
+        and mask source position.
+
+        @param xdest
+            Destination device context x position.
+        @param ydest
+            Destination device context y position.
+        @param dstWidth
+            Width of destination area.
+        @param dstHeight
+            Height of destination area.
+        @param source
+            Source device context.
+        @param xsrc
+            Source device context x position.
+        @param ysrc
+            Source device context y position.
+        @param srcWidth
+            Width of source area to be copied.
+        @param srcHeight
+            Height of source area to be copied.
+        @param logicalFunc
+            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:
+            <ol>
+            <li>Creates a temporary bitmap and copies the destination area into
+                it.</li>
+            <li>Copies the source area into the temporary bitmap using the
+                specified logical function.</li>
+            <li>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.</li>
+            <li>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.</li>
+            <li>ORs the temporary bitmap with the destination area.</li>
+            <li>Deletes the temporary bitmap.</li>
+            </ol>
+            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
+            wxDefaultCoord, @a xsrc and @a 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
+            wxDefaultCoord, @a xsrc and @a 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,
+                     wxRasterOperationMode logicalFunc = wxCOPY,
+                     bool useMask = false,
+                     wxCoord xsrcMask = wxDefaultCoord,
+                     wxCoord ysrcMask = wxDefaultCoord);
     //@}
 
+
     /**
-        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.
+        @name Background/foreground brush and pen
     */
-    void GradientFillLinear(const wxRect& rect, const wxColour& initialColour,
-                            const wxColour& destColour,
-                            wxDirection nDirection = wxRIGHT);
+    //@{
 
     /**
-        Returns @true if the DC is ok to use.
+        Gets the brush used for painting the background.
+
+        @see wxDC::SetBackground()
     */
-    bool IsOk() const;
+    const wxBrush& GetBackground() const;
 
     /**
-        Converts logical X coordinate to device coordinate, using the current
-        mapping mode, user scale factor, device origin and axis orientation.
+        Gets the current brush.
+
+        @see wxDC::SetBrush()
     */
-    wxCoord LogicalToDeviceX(wxCoord x) const;
+    const wxBrush& GetBrush() const;
 
     /**
-        Converts logical X coordinate to relative device coordinate, using the
-        current mapping mode and user scale factor but ignoring the
-        axis orientation. Use this for converting a width, for example.
+        Gets the current pen.
+
+        @see SetPen()
     */
-    wxCoord LogicalToDeviceXRel(wxCoord x) const;
+    const wxPen& GetPen() const;
 
     /**
-        Converts logical Y coordinate to device coordinate, using the current
-        mapping mode, user scale factor, device origin and axis orientation.
+        Sets the current background brush for the DC.
     */
-    wxCoord LogicalToDeviceY(wxCoord y) const;
+    void SetBackground(const wxBrush& brush);
+
+    /**
+        Sets the current brush for the DC.
+
+        If the argument is ::wxNullBrush (or another invalid brush; see wxBrush::IsOk), 
+        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 current pen for the DC. 
+
+        If the argument is ::wxNullPen (or another invalid pen; see wxPen::IsOk), 
+        the current pen is selected out of the device context (leaving wxDC without any 
+        valid pen), allowing the current pen to be destroyed safely.
+
+        @see wxMemoryDC for the interpretation of colours when drawing into a
+             monochrome bitmap.
+    */
+    void SetPen(const wxPen& pen);
+
+    //@}
+
+
+    /**
+        Copy attributes from another DC.
+
+        The copied attributes currently are:
+            - Font
+            - Text foreground and background colours
+            - Background brush
+            - Layout direction
+
+        @param dc
+            A valid (i.e. its IsOk() must return @true) source device context.
+     */
+    void CopyAttributes(const wxDC& dc);
+
+    /**
+        Returns the depth (number of bits/pixel) of this DC.
+
+        @see wxDisplayDepth()
+    */
+    int GetDepth() const;
 
     /**
-        Converts logical Y coordinate to relative device coordinate, using the
-        current mapping mode and user scale factor but ignoring the
-        axis orientation. Use this for converting a height, for example.
+        Returns the current device origin.
+
+        @see SetDeviceOrigin()
     */
-    wxCoord LogicalToDeviceYRel(wxCoord y) const;
+    wxPoint GetDeviceOrigin() const;
 
     /**
-        Gets the maximum horizontal extent used in drawing commands so far.
+        Gets the current logical function.
+
+        @see SetLogicalFunction()
     */
-    wxCoord MaxX() const;
+    wxRasterOperationMode GetLogicalFunction() const;
 
     /**
-        Gets the maximum vertical extent used in drawing commands so far.
+        Gets the current mapping mode for the device context.
+
+        @see SetMapMode()
     */
-    wxCoord MaxY() const;
+    wxMappingMode GetMapMode() const;
 
     /**
-        Gets the minimum horizontal extent used in drawing commands so far.
+        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
     */
-    wxCoord MinX() const;
+    bool GetPixel(wxCoord x, wxCoord y, wxColour* colour) const;
 
     /**
-        Gets the minimum vertical extent used in drawing commands so far.
+        Returns the resolution of the device in pixels per inch.
     */
-    wxCoord MinY() const;
+    wxSize GetPPI() const;
 
     /**
-        Resets the bounding box: after a call to this function, the bounding
-        box doesn't contain anything.
+        Gets the horizontal and vertical extent of this device context in @e device units.
+        It can be used to scale graphics to fit the page.
 
-        @see CalcBoundingBox()
+        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:
+
+        @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
+
+        @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
+
+        @beginWxPerlOnly
+        In wxPerl there are two methods instead of a single overloaded
+        method:
+        - GetSize(): returns a Wx::Size object.
+        - GetSizeWH(): returns a 2-element list (width, height).
+        @endWxPerlOnly
     */
-    void ResetBoundingBox();
+    void GetSize(wxCoord* width, wxCoord* height) const;
 
     /**
-        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.
-
-        @param xLeftRight
-            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.
+        @overload
     */
-    void SetAxisOrientation(bool xLeftRight, bool yBottomUp);
+    wxSize GetSize() const;
 
     /**
-        Sets the current background brush for the DC.
+        Returns the horizontal and vertical resolution in millimetres.
     */
-    void SetBackground(const wxBrush& brush);
+    void GetSizeMM(wxCoord* width, wxCoord* height) const;
 
     /**
-        @a mode may be one of wxSOLID and wxTRANSPARENT. This setting
-        determines whether text will be drawn with a background colour or not.
+        @overload
     */
-    void SetBackgroundMode(int mode);
+    wxSize GetSizeMM() const;
 
     /**
-        Sets the current brush for the DC.
+        Gets the current user scale factor.
 
-        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.
+        @beginWxPerlOnly
+        In wxPerl this method takes no arguments and return a two
+        element array (x, y).
+        @endWxPerlOnly
 
-        @see wxBrush, wxMemoryDC (for the interpretation of colours when
-             drawing into a monochrome bitmap)
+        @see SetUserScale()
     */
-    void SetBrush(const wxBrush& brush);
+    void GetUserScale(double* x, double* y) const;
 
-    //@{
     /**
-        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
+        Returns @true if the DC is ok to use.
     */
-    void SetClippingRegion(wxCoord x, wxCoord y, wxCoord width,
-                           wxCoord height);
-    void SetClippingRegion(const wxPoint& pt, const wxSize& sz);
-    void SetClippingRegion(const wxRect& rect);
-    //@}
+    bool IsOk() const;
 
     /**
-        Sets the clipping region for this device context.
+        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.
 
-        Unlike SetClippingRegion(), this function works with physical
-        coordinates and not with the logical ones.
-     */
-    void SetDeviceClippingRegion(const wxRegion& region);
+        @param xLeftRight
+            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.
+    */
+    void SetAxisOrientation(bool xLeftRight, bool yBottomUp);
 
     /**
         Sets the device origin (i.e., the origin in pixels after scaling has
@@ -970,23 +1403,6 @@ public:
     */
     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 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.
-
-        @see GetLayoutDirection()
-    */
-    void SetLayoutDirection(wxLayoutDirection dir);
-
     /**
         Sets the current logical function for the device context.
         It determines how a @e source pixel (from a pen or brush colour, or source
@@ -1023,133 +1439,18 @@ public:
     /**
         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
+        ::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 wxMemoryDC for the interpretation of colours when drawing into a
-             monochrome bitmap.
-    */
-    void SetPen(const wxPen& pen);
-
-    /**
-        Sets the current text background colour for the DC.
-    */
-    void SetTextBackground(const wxColour& colour);
-
-    /**
-        Sets the current text foreground colour for the DC.
-
-        @see wxMemoryDC for the interpretation of colours when drawing into a
-             monochrome bitmap.
-    */
-    void SetTextForeground(const wxColour& colour);
-
     /**
         Sets the user scaling factor, useful for applications which require
         'zooming'.
     */
     void SetUserScale(double xScale, double yScale);
-
-    /**
-        Starts a document (only relevant when outputting to a printer).
-        @a message is a message to show while printing.
-    */
-    bool StartDoc(const wxString& message);
-
-    /**
-        Starts a document page (only relevant when outputting to a printer).
-    */
-    void StartPage();
-
-    /**
-        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,
-        and mask source position.
-
-        @param xdest
-            Destination device context x position.
-        @param ydest
-            Destination device context y position.
-        @param dstWidth
-            Width of destination area.
-        @param dstHeight
-            Height of destination area.
-        @param source
-            Source device context.
-        @param xsrc
-            Source device context x position.
-        @param ysrc
-            Source device context y position.
-        @param srcWidth
-            Width of source area to be copied.
-        @param srcHeight
-            Height of source area to be copied.
-        @param logicalFunc
-            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:
-            <ol>
-            <li>Creates a temporary bitmap and copies the destination area into
-                it.</li>
-            <li>Copies the source area into the temporary bitmap using the
-                specified logical function.</li>
-            <li>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.</li>
-            <li>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.</li>
-            <li>ORs the temporary bitmap with the destination area.</li>
-            <li>Deletes the temporary bitmap.</li>
-            </ol>
-            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
-            wxDefaultCoord, @a xsrc and @a 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
-            wxDefaultCoord, @a xsrc and @a 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,
-                     wxRasterOperationMode logicalFunc = wxCOPY,
-                     bool useMask = false,
-                     wxCoord xsrcMask = wxDefaultCoord,
-                     wxCoord ysrcMask = wxDefaultCoord);
 };
 
 
@@ -1285,6 +1586,16 @@ public:
 class wxDCTextColourChanger
 {
 public:
+    /**
+        Trivial constructor not changing anything.
+
+        This constructor is useful if you don't know beforehand if the colour
+        needs to be changed or not. It simply creates the object which won't do
+        anything in its destructor unless Set() is called -- in which case it
+        would reset the previous colour.
+     */
+    wxDCTextColourChanger(wxDC& dc);
+
     /**
         Sets @a col on the given @a dc, storing the old one.
 
@@ -1295,6 +1606,17 @@ public:
     */
     wxDCTextColourChanger(wxDC& dc, const wxColour& col);
 
+    /**
+        Set the colour to use.
+
+        This method is meant to be called once only and only on the objects
+        created with the constructor overload not taking wxColour argument and
+        has the same effect as the other constructor, i.e. sets the colour to
+        the given @a col and ensures that the old value is restored when this
+        object is destroyed.
+     */
+    void Set(const wxColour& col);
+
     /**
         Restores the colour originally selected in the DC passed to the ctor.
     */
@@ -1320,6 +1642,18 @@ public:
 class wxDCFontChanger
 {
 public:
+    /**
+        Trivial constructor not changing anything.
+
+        This constructor is useful if you don't know beforehand if the font
+        needs to be changed or not. It simply creates the object which won't do
+        anything in its destructor unless Set() is called -- in which case it
+        would reset the previous font.
+
+        @since 2.9.1
+     */
+    wxDCFontChanger(wxDC& dc);
+
     /**
         Sets @a font on the given @a dc, storing the old one.
 
@@ -1331,7 +1665,18 @@ public:
     wxDCFontChanger(wxDC& dc, const wxFont& font);
 
     /**
-        Restores the colour originally selected in the DC passed to the ctor.
+        Set the font to use.
+
+        This method is meant to be called once only and only on the objects
+        created with the constructor overload not taking wxColour argument and
+        has the same effect as the other constructor, i.e. sets the font to
+        the given @a font and ensures that the old value is restored when this
+        object is destroyed.
+     */
+    void Set(const wxFont& font);
+
+    /**
+        Restores the font originally selected in the DC passed to the ctor.
     */
     ~wxDCFontChanger();
 };