]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/graphics.h
Change return type of wxList::Member() to bool.
[wxWidgets.git] / interface / wx / graphics.h
index 0665da824d9a9adc5024ef70010b0eb759a30919..10c2ea74855e3ca53d6be4c5455ae16625d9b5b3 100644 (file)
@@ -1,6 +1,6 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        graphics.h
-// Purpose:     interface of wxGraphicsPath
+// Purpose:     interface of various wxGraphics* classes
 // Author:      wxWidgets team
 // RCS-ID:      $Id$
 // Licence:     wxWindows license
@@ -22,18 +22,24 @@ class wxGraphicsPath : public wxGraphicsObject
 {
 public:
     /**
-        Adds an arc of a circle centering at (@a x,@a y) with radius (@a r)
-        from @a startAngle to @a endAngle.
+        Adds an arc of a circle.
+
+        The circle is defined by the coordinates of its centre (@a x, @a y) or
+        @a c and its radius @a r. The arc goes from the starting angle @a
+        startAngle to @a endAngle either clockwise or counter-clockwise
+        depending on the value of @a clockwise argument.
+
+        The angles are measured in radians but, contrary to the usual
+        mathematical convention, are always @e clockwise from the horizontal
+        axis.
     */
+    //@{
     virtual void AddArc(wxDouble x, wxDouble y, wxDouble r,
                         wxDouble startAngle, wxDouble endAngle,
                         bool clockwise);
-    /**
-        Adds an arc of a circle centering at @a c with radius (@a r)
-        from @a startAngle to @a endAngle.
-    */
     void AddArc(const wxPoint2DDouble& c, wxDouble r,
                 wxDouble startAngle, wxDouble endAngle, bool clockwise);
+    //@}
 
     /**
         Appends a an arc to two tangents connecting (current) to (@a x1,@a y1)
@@ -194,15 +200,55 @@ public:
     bool IsNull() const;
 };
 
+/**
+    Anti-aliasing modes used by wxGraphicsContext::SetAntialisingMode
+*/
+enum wxAntialiasMode
+{
+    /** No anti-aliasing */
+    wxANTIALIAS_NONE, 
+    
+    /** The default anti-aliasing */
+    wxANTIALIAS_DEFAULT,
+};
+
+/**
+    Compositing is done using Porter-Duff compositions 
+    (see http://keithp.com/~keithp/porterduff/p253-porter.pdf) with
+    wxGraphicsContext::SetCompositionMode
+
+    The description give a short equation on how the values of a resulting
+    pixel are calculated.
+    @e R = Result, @e S = Source, @e D = Destination, colors premultiplied with alpha
+    @e Ra, @e Sa, @e Da their alpha components
+*/
+enum wxCompositionMode
+{
+    wxCOMPOSITION_CLEAR, /**< @e R = 0 */
+    wxCOMPOSITION_SOURCE, /**< @e R = S */
+    wxCOMPOSITION_OVER, /**< @e R = @e S + @e D*(1 - @e Sa) */
+    wxCOMPOSITION_IN, /**< @e R = @e S*@e Da */
+    wxCOMPOSITION_OUT, /**< @e R = @e S*(1 - @e Da) */
+    wxCOMPOSITION_ATOP, /**< @e R = @e S*@e Da + @e D*(1 - @e Sa) */
+
+    wxCOMPOSITION_DEST, /**< @e R = @e D, essentially a noop */
+    wxCOMPOSITION_DEST_OVER, /**< @e R = @e S*(1 - @e Da) + @e D */
+    wxCOMPOSITION_DEST_IN, /**< @e R = @e D*@e Sa */
+    wxCOMPOSITION_DEST_OUT, /**< @e R = @e D*(1 - @e Sa) */
+    wxCOMPOSITION_DEST_ATOP, /**< @e R = @e S*(1 - @e Da) + @e D*@e Sa */
+    wxCOMPOSITION_XOR, /**< @e R = @e S*(1 - @e Da) + @e D*(1 - @e Sa) */
+    wxCOMPOSITION_ADD, /**< @e R = @e S + @e D */
+};
 
 
 /**
     @class wxGraphicsContext
 
-    A wxGraphicsContext instance is the object that is drawn upon. It is created by
-    a renderer using wxGraphicsRenderer::CreateContext(). This can be either directly
-    using a renderer instance, or indirectly using the static convenience Create()
-    functions of wxGraphicsContext that always delegate the task to the default renderer.
+    A wxGraphicsContext instance is the object that is drawn upon. It is
+    created by a renderer using wxGraphicsRenderer::CreateContext(). This can
+    be either directly using a renderer instance, or indirectly using the
+    static convenience Create() functions of wxGraphicsContext that always
+    delegate the task to the default renderer.
 
     @code
     void MyCanvas::OnPaint(wxPaintEvent &event)
@@ -233,7 +279,6 @@ public:
     }
     @endcode
 
-
     @library{wxcore}
     @category{gdi,dc}
 
@@ -247,47 +292,47 @@ public:
 
         @see wxGraphicsRenderer::CreateContext()
     */
-    static wxGraphicsContext* Create( wxWindow* window ) ;
+    static wxGraphicsContext* Create(wxWindow* window);
 
     /**
         Creates a wxGraphicsContext from a wxWindowDC
 
         @see wxGraphicsRenderer::CreateContext()
     */
-    static wxGraphicsContext* Create( const wxWindowDC& dc) ;
+    static wxGraphicsContext* Create(const wxWindowDC& dc);
 
     /**
         Creates a wxGraphicsContext from a wxMemoryDC
 
         @see wxGraphicsRenderer::CreateContext()
     */
-    static wxGraphicsContext * Create( const wxMemoryDC& dc) ;
+    static wxGraphicsContext* Create(const wxMemoryDC& dc);
 
     /**
-        Creates a wxGraphicsContext from a wxPrinterDC. Under
-        GTK+, this will only work when using the GtkPrint
-        printing backend which is available since GTK+ 2.10.
+        Creates a wxGraphicsContext from a wxPrinterDC. Under GTK+, this will
+        only work when using the GtkPrint printing backend which is available
+        since GTK+ 2.10.
 
-        @see wxGraphicsRenderer::CreateContext(), @ref overview_unixprinting "Printing under Unix"
+        @see wxGraphicsRenderer::CreateContext(), @ref overview_unixprinting
     */
-    static wxGraphicsContext * Create( const wxPrinterDC& dc) ;
+    static wxGraphicsContext* Create(const wxPrinterDC& dc);
 
     /**
-        Clips drawings to the region
+        Clips drawings to the specified region.
     */
     virtual void Clip(const wxRegion& region) = 0;
 
     /**
-        Clips drawings to the rectangle.
+        Clips drawings to the specified rectangle.
     */
     virtual void Clip(wxDouble x, wxDouble y, wxDouble w, wxDouble h) = 0;
 
     /**
-        Concatenates the passed in transform with the current transform of this context
+        Concatenates the passed in transform with the current transform of this
+        context.
     */
     virtual void ConcatTransform(const wxGraphicsMatrix& matrix) = 0;
 
-
     /**
         Creates a native brush from a wxBrush.
     */
@@ -300,24 +345,24 @@ public:
                                       const wxColour& col = *wxBLACK) const;
 
     /**
-        Creates a wxGraphicsContext from a native context. This native context must be
-        eg a CGContextRef for Core Graphics, a Graphics pointer for GDIPlus or a
-        cairo_t pointer for cairo.
+        Creates a wxGraphicsContext from a native context. This native context
+        must be a CGContextRef for Core Graphics, a Graphics pointer for
+        GDIPlus, or a cairo_t pointer for cairo.
 
-        @see wxGraphicsRenderer:: CreateContextFromNativeContext
+        @see wxGraphicsRenderer::CreateContextFromNativeContext()
     */
     static wxGraphicsContext* CreateFromNative(void* context);
 
     /**
         Creates a wxGraphicsContext from a native window.
 
-        @see wxGraphicsRenderer:: CreateContextFromNativeWindow
+        @see wxGraphicsRenderer::CreateContextFromNativeWindow()
     */
     static wxGraphicsContext* CreateFromNativeWindow(void* window);
 
     /**
-        Creates a native brush, having a linear gradient, starting at (x1,y1) with
-        color c1 to (x2,y2) with color c2
+        Creates a native brush, having a linear gradient, starting at
+        (@a x1, @a y1) with color @a c1 to (@a x2, @a y2) with color @a c2.
     */
     virtual wxGraphicsBrush CreateLinearGradientBrush(wxDouble x1,
                                                       wxDouble y1,
@@ -327,8 +372,8 @@ public:
                                                       const wxColour& c2) const;
 
     /**
-        Creates a native affine transformation matrix from the passed in values. The
-        defaults result in an identity matrix.
+        Creates a native affine transformation matrix from the passed in
+        values. The default parameters result in an identity matrix.
     */
     virtual wxGraphicsMatrix CreateMatrix(wxDouble a = 1.0, wxDouble b = 0.0,
                                           wxDouble c = 0.0, wxDouble d = 1.0,
@@ -346,8 +391,9 @@ public:
     virtual wxGraphicsPen CreatePen(const wxPen& pen) const;
 
     /**
-        Creates a native brush, having a radial gradient originating at (xo,yc) with
-        color oColour and ends on a circle around (xc,yc) with radius r and color cColour
+        Creates a native brush, having a radial gradient originating at
+        (@a xo, @a yc) with color @a oColour and ends on a circle around
+        (@a xc, @a yc) with the given @a radius and color @a cColour.
     */
     virtual wxGraphicsBrush CreateRadialGradientBrush(wxDouble xo, wxDouble yo,
                                                       wxDouble xc, wxDouble yc,
@@ -356,8 +402,8 @@ public:
                                                       const wxColour& cColor) const;
 
     /**
-        Draws the bitmap. In case of a mono bitmap, this is treated as a mask and the
-        current brushed is used for filling.
+        Draws the bitmap. In case of a mono bitmap, this is treated as a mask
+        and the current brushed is used for filling.
     */
     virtual void DrawBitmap(const wxBitmap& bmp, wxDouble x, wxDouble y,
                             wxDouble w, wxDouble h) = 0;
@@ -377,13 +423,13 @@ public:
         Draws a polygon.
     */
     virtual void DrawLines(size_t n, const wxPoint2DDouble* points,
-                           int fillStyle = wxODDEVEN_RULE);
+                           wxPolygonFillMode fillStyle = wxODDEVEN_RULE);
 
     /**
         Draws the path by first filling and then stroking.
     */
     virtual void DrawPath(const wxGraphicsPath& path,
-                          int fillStyle = wxODDEVEN_RULE);
+                          wxPolygonFillMode fillStyle = wxODDEVEN_RULE);
 
     /**
         Draws a rectangle.
@@ -396,50 +442,90 @@ public:
     virtual void DrawRoundedRectangle(wxDouble x, wxDouble y, wxDouble w,
                                       wxDouble h, wxDouble radius);
 
-    //@{
     /**
-        Draws a text at the defined position.
-
-        If @a angle is specified, the string is drawn at the given angle to the
-        (default) horizontal direction. If @a backgroundBrush is specified, the
-        text is filled using it.
+        Draws text at the defined position.
     */
-    void DrawText(const wxString& str, wxDouble x, wxDouble y,
-                  wxDouble angle);
     void DrawText(const wxString& str, wxDouble x, wxDouble y);
+    /**
+        Draws text at the defined position.
+
+        @param str
+            The text to draw.
+        @param x
+            The x coordinate position to draw the text at.
+        @param y
+            The y coordinate position to draw the text at.
+        @param angle
+            The angle relative to the (default) horizontal direction to draw
+            the string.
+    */
+    void DrawText(const wxString& str, wxDouble x, wxDouble y, wxDouble angle);
+    /**
+        Draws text at the defined position.
+
+        @param str
+            The text to draw.
+        @param x
+            The x coordinate position to draw the text at.
+        @param y
+            The y coordinate position to draw the text at.
+        @param backgroundBrush
+            Brush to fill the text with.
+    */
     void DrawText(const wxString& str, wxDouble x, wxDouble y,
-                  const wxGraphicsBrush& backgroundBrush)
+                  const wxGraphicsBrush& backgroundBrush);
+    /**
+        Draws text at the defined position.
+
+        @param str
+            The text to draw.
+        @param x
+            The x coordinate position to draw the text at.
+        @param y
+            The y coordinate position to draw the text at.
+        @param angle
+            The angle relative to the (default) horizontal direction to draw
+            the string.
+        @param backgroundBrush
+            Brush to fill the text with.
+    */
     void DrawText(const wxString& str, wxDouble x, wxDouble y,
-                  wxDouble angle,
-                  const wxGraphicsBrush& backgroundBrush )
-    //@}
+                  wxDouble angle, const wxGraphicsBrush& backgroundBrush);
 
     /**
         Fills the path with the current brush.
     */
     virtual void FillPath(const wxGraphicsPath& path,
-                          int fillStyle = wxODDEVEN_RULE) = 0;
+                          wxPolygonFillMode fillStyle = wxODDEVEN_RULE) = 0;
 
     /**
-        Returns the native context (CGContextRef for Core Graphics, Graphics pointer
-        for GDIPlus and cairo_t pointer for cairo).
+        Returns the native context (CGContextRef for Core Graphics, Graphics
+        pointer for GDIPlus and cairo_t pointer for cairo).
     */
     virtual void* GetNativeContext() = 0;
 
     /**
         Fills the @a widths array with the widths from the beginning of
-        @a text to the corresponding character of @e text.
+        @a text to the corresponding character of @a text.
     */
     virtual void GetPartialTextExtents(const wxString& text,
                                        wxArrayDouble& widths) const = 0;
 
     /**
         Gets the dimensions of the string using the currently selected font.
-        @e string is the text string to measure, @e w and @e h are
-        the total width and height respectively, @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).
+
+        @param text
+            The text string to measure.
+        @param width
+            Variable to store the total calculated width of the text.
+        @param height
+            Variable to store the total calculated height of the text.
+        @param descent
+            Variable to store the dimension from the baseline of the font to
+            the bottom of the descender.
+        @param externalLeading
+            Any extra vertical space added to the font by the font designer
+            (usually is zero).
     */
     virtual void GetTextExtent(const wxString& text, wxDouble* width,
                                wxDouble* height, wxDouble* descent,
@@ -456,7 +542,7 @@ public:
     virtual void ResetClip() = 0;
 
     /**
-        Rotates the current transformation matrix (radians),
+        Rotates the current transformation matrix (in radians).
     */
     virtual void Rotate(wxDouble angle) = 0;
 
@@ -465,29 +551,32 @@ public:
     */
     virtual void Scale(wxDouble xScale, wxDouble yScale) = 0;
 
-    //@{
     /**
         Sets the brush for filling paths.
     */
     void SetBrush(const wxBrush& brush);
-    void SetBrush(const wxGraphicsBrush& brush);
-    //@}
+    /**
+        Sets the brush for filling paths.
+    */
+    virtual void SetBrush(const wxGraphicsBrush& brush);
 
-    //@{
     /**
         Sets the font for drawing text.
     */
     void SetFont(const wxFont& font, const wxColour& colour);
-    void SetFont(const wxGraphicsFont& font);
-    //@}
+    /**
+        Sets the font for drawing text.
+    */
+    virtual void SetFont(const wxGraphicsFont& font);
 
-    //@{
     /**
         Sets the pen used for stroking.
     */
-    void SetPen(const wxGraphicsPen& pen);
     void SetPen(const wxPen& pen);
-    //@}
+    /**
+        Sets the pen used for stroking.
+    */
+    virtual void SetPen(const wxGraphicsPen& pen);
 
     /**
         Sets the current transformation matrix of this context
@@ -499,15 +588,17 @@ public:
     */
     virtual void StrokeLine(wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2);
 
-    //@{
     /**
-        Stroke disconnected lines from begin to end points, fastest method available
-        for this purpose.
+        Stroke disconnected lines from begin to end points, fastest method
+        available for this purpose.
     */
-    void StrokeLines(size_t n, const wxPoint2DDouble* beginPoints,
-                     const wxPoint2DDouble* endPoints);
-    void StrokeLines(size_t n, const wxPoint2DDouble* points);
-    //@}
+    virtual void StrokeLines(size_t n, const wxPoint2DDouble* beginPoints,
+                             const wxPoint2DDouble* endPoints);
+    /**
+        Stroke disconnected lines from begin to end points, fastest method
+        available for this purpose.
+    */
+    virtual void StrokeLines(size_t n, const wxPoint2DDouble* points);
 
     /**
         Strokes along a path with the current pen.
@@ -518,6 +609,38 @@ public:
         Translates the current transformation matrix.
     */
     virtual void Translate(wxDouble dx, wxDouble dy) = 0;
+
+    /**
+        Redirects all rendering is done into a fully transparent temporary context 
+    */
+    virtual void BeginLayer(wxDouble opacity) = 0;
+
+    /** 
+        Composites back the drawings into the context with the opacity given at 
+        the BeginLayer call
+    */
+    virtual void EndLayer() = 0;
+
+    /** 
+        Sets the antialiasing mode, returns true if it supported
+    */
+    virtual bool SetAntialiasMode(wxAntialiasMode antialias) = 0;
+
+    /** 
+        Returns the current shape antialiasing mode
+    */
+    virtual wxAntialiasMode GetAntialiasMode() const ;
+    
+    /**
+        Sets the compositing operator, returns true if it supported
+    */
+    virtual bool SetCompositionMode(wxCompositionMode op) = 0;
+
+    /** 
+        Returns the current compositing operator
+    */
+    virtual wxCompositionMode GetCompositionMode() const;
+    
 };
 
 
@@ -527,12 +650,13 @@ public:
 
     A wxGraphicsRenderer is the instance corresponding to the rendering engine
     used. There may be multiple instances on a system, if there are different
-    rendering engines present, but there is always only one instance per engine.
-    This instance is pointed back to by all objects created by it (wxGraphicsContext,
-    wxGraphicsPath etc) and can be retrieved through their wxGraphicsObject::GetRenderer()
-    method. Therefore you can create an additional instance of a path etc. by calling
-    wxGraphicsObject::GetRenderer() and then using the appropriate CreateXXX function
-    of that renderer.
+    rendering engines present, but there is always only one instance per
+    engine. This instance is pointed back to by all objects created by it
+    (wxGraphicsContext, wxGraphicsPath etc) and can be retrieved through their
+    wxGraphicsObject::GetRenderer() method. Therefore you can create an
+    additional instance of a path etc. by calling
+    wxGraphicsObject::GetRenderer() and then using the appropriate CreateXXX()
+    function of that renderer.
 
     @code
     wxGraphicsPath *path = // from somewhere
@@ -540,7 +664,7 @@ public:
     @endcode
 
     @library{wxcore}
-    @category{FIXME}
+    @category{gdi}
 */
 class wxGraphicsRenderer : public wxObject
 {
@@ -553,28 +677,27 @@ public:
     /**
         Creates a wxGraphicsContext from a wxWindowDC
     */
-    virtual wxGraphicsContext * CreateContext( const wxWindowDC& dc) = 0 ;
+    virtual wxGraphicsContext* CreateContext(const wxWindowDC& dc) = 0 ;
 
     /**
         Creates a wxGraphicsContext from a wxMemoryDC
     */
-    virtual wxGraphicsContext * CreateContext( const wxMemoryDC& dc) = 0 ;
+    virtual wxGraphicsContext* CreateContext(const wxMemoryDC& dc) = 0 ;
 
     /**
         Creates a wxGraphicsContext from a wxPrinterDC
     */
-    virtual wxGraphicsContext * CreateContext( const wxPrinterDC& dc) = 0 ;
+    virtual wxGraphicsContext* CreateContext(const wxPrinterDC& dc) = 0 ;
 
     /**
         Creates a native brush from a wxBrush.
     */
     virtual wxGraphicsBrush CreateBrush(const wxBrush& brush) = 0;
 
-
     /**
-        Creates a wxGraphicsContext from a native context. This native context must be
-        eg a CGContextRef for Core Graphics, a Graphics pointer for GDIPlus or a cairo_t
-        pointer for cairo.
+        Creates a wxGraphicsContext from a native context. This native context
+        must be a CGContextRef for Core Graphics, a Graphics pointer for
+        GDIPlus, or a cairo_t pointer for cairo.
     */
     virtual wxGraphicsContext* CreateContextFromNativeContext(void* context) = 0;
 
@@ -583,6 +706,12 @@ public:
     */
     virtual wxGraphicsContext* CreateContextFromNativeWindow(void* window) = 0;
 
+    /**
+        Creates a wxGraphicsContext that can be used for measuring texts only. 
+        No drawing commands are allowed.
+    */
+    virtual wxGraphicsContext * CreateMeasuringContext() = 0;
+
     /**
         Creates a native graphics font from a wxFont and a text colour.
     */
@@ -590,19 +719,19 @@ public:
                                       const wxColour& col = *wxBLACK) = 0;
 
     /**
-        Creates a native brush, having a linear gradient, starting at (x1,y1) with
-        color c1 to (x2,y2) with color c2
+        Creates a native brush, having a linear gradient, starting at
+        (@a x1, @a y1) with color @a c1 to (@a x2, @a y2) with color @a c2.
     */
-    wxGraphicsBrush CreateLinearGradientBrush(wxDouble x1,
-                                              wxDouble y1,
-                                              wxDouble x2,
-                                              wxDouble y2,
-                                              const wxColour& c1,
-                                              const wxColour& c2) = 0;
+    virtual wxGraphicsBrush CreateLinearGradientBrush(wxDouble x1,
+                                                      wxDouble y1,
+                                                      wxDouble x2,
+                                                      wxDouble y2,
+                                                      const wxColour& c1,
+                                                      const wxColour& c2) = 0;
 
     /**
-        Creates a native affine transformation matrix from the passed in values. The
-        defaults result in an identity matrix.
+        Creates a native affine transformation matrix from the passed in
+        values. The defaults result in an identity matrix.
     */
     virtual wxGraphicsMatrix CreateMatrix(wxDouble a = 1.0, wxDouble b = 0.0,
                                           wxDouble c = 0.0, wxDouble d = 1.0,
@@ -620,8 +749,9 @@ public:
     virtual wxGraphicsPen CreatePen(const wxPen& pen) = 0;
 
     /**
-        Creates a native brush, having a radial gradient originating at (xo,yc) with
-        color oColour and ends on a circle around (xc,yc) with radius r and color cColour
+        Creates a native brush, having a radial gradient originating at
+        (@a xo, @a yc) with color @a oColour and ends on a circle around
+        (@a xc, @a yc) with the given @a radius and color @a cColour.
     */
     virtual wxGraphicsBrush CreateRadialGradientBrush(wxDouble xo, wxDouble yo,
                                                       wxDouble xc, wxDouble yc,
@@ -631,7 +761,8 @@ public:
 
     /**
         Returns the default renderer on this platform. On OS X this is the Core
-        Graphics (a.k.a. Quartz 2D) renderer, on MSW the GDIPlus renderer, and on GTK we currently default to the cairo renderer.
+        Graphics (a.k.a. Quartz 2D) renderer, on MSW the GDIPlus renderer, and
+        on GTK we currently default to the cairo renderer.
     */
     static wxGraphicsRenderer* GetDefaultRenderer();
 };
@@ -641,13 +772,14 @@ public:
 /**
     @class wxGraphicsBrush
 
-    A wxGraphicsBrush is a native representation of a brush. The contents
-    are specific and private to the respective renderer. Instances are ref counted and can
-    therefore be assigned as usual. The only way to get a valid instance is via
-    wxGraphicsContext::CreateBrush or wxGraphicsRenderer::CreateBrush.
+    A wxGraphicsBrush is a native representation of a brush. The contents are
+    specific and private to the respective renderer. Instances are ref counted
+    and can therefore be assigned as usual. The only way to get a valid
+    instance is via wxGraphicsContext::CreateBrush() or
+    wxGraphicsRenderer::CreateBrush().
 
     @library{wxcore}
-    @category{FIXME}
+    @category{gdi}
 */
 class wxGraphicsBrush : public wxGraphicsObject
 {
@@ -660,13 +792,14 @@ public:
 /**
     @class wxGraphicsFont
 
-    A wxGraphicsFont is a native representation of a font. The contents
-    are specific and private to the respective renderer. Instances are ref counted and can
-    therefore be assigned as usual. The only way to get a valid instance is via
-    wxGraphicsContext::CreateFont or wxGraphicsRenderer::CreateFont.
+    A wxGraphicsFont is a native representation of a font. The contents are
+    specific and private to the respective renderer. Instances are ref counted
+    and can therefore be assigned as usual. The only way to get a valid
+    instance is via wxGraphicsContext::CreateFont() or
+    wxGraphicsRenderer::CreateFont().
 
     @library{wxcore}
-    @category{FIXME}
+    @category{gdi}
 */
 class wxGraphicsFont : public wxGraphicsObject
 {
@@ -679,13 +812,14 @@ public:
 /**
     @class wxGraphicsPen
 
-    A wxGraphicsPen is a native representation of a pen. The contents
-    are specific and private to the respective renderer. Instances are ref counted and can
-    therefore be assigned as usual. The only way to get a valid instance is via
-    wxGraphicsContext::CreatePen or wxGraphicsRenderer::CreatePen.
+    A wxGraphicsPen is a native representation of a pen. The contents are
+    specific and private to the respective renderer. Instances are ref counted
+    and can therefore be assigned as usual. The only way to get a valid
+    instance is via wxGraphicsContext::CreatePen() or
+    wxGraphicsRenderer::CreatePen().
 
     @library{wxcore}
-    @category{FIXME}
+    @category{gdi}
 */
 class wxGraphicsPen : public wxGraphicsObject
 {
@@ -698,35 +832,38 @@ public:
 /**
     @class wxGraphicsMatrix
 
-    A wxGraphicsMatrix is a native representation of an affine matrix. The contents
-    are specific and private to the respective renderer. Instances are ref counted and can
-    therefore be assigned as usual. The only way to get a valid instance is via
-    wxGraphicsContext::CreateMatrix or wxGraphicsRenderer::CreateMatrix.
+    A wxGraphicsMatrix is a native representation of an affine matrix. The
+    contents are specific and private to the respective renderer. Instances are
+    ref counted and can therefore be assigned as usual. The only way to get a
+    valid instance is via wxGraphicsContext::CreateMatrix() or
+    wxGraphicsRenderer::CreateMatrix().
 
     @library{wxcore}
-    @category{FIXME}
+    @category{gdi}
 */
 class wxGraphicsMatrix : public wxGraphicsObject
 {
 public:
-    //@{
     /**
-
+        Concatenates the matrix passed with the current matrix.
+    */
+    virtual void Concat(const wxGraphicsMatrix* t);
+    /**
+        Concatenates the matrix passed with the current matrix.
     */
-    void Concat(const wxGraphicsMatrix* t);
     void Concat(const wxGraphicsMatrix& t);
-    //@}
 
     /**
         Returns the component values of the matrix via the argument pointers.
     */
-    virtual void Get(wxDouble* a = NULL, wxDouble* b = NULL, wxDouble* c = NULL,
-                     wxDouble* d = NULL, wxDouble* tx = NULL,
-                     wxDouble* ty = NULL) const;
+    virtual void Get(wxDouble* a = NULL, wxDouble* b = NULL,
+                     wxDouble* c = NULL, wxDouble* d = NULL,
+                     wxDouble* tx = NULL, wxDouble* ty = NULL) const;
 
     /**
-        Returns the native representation of the matrix. For CoreGraphics this is a
-        CFAffineMatrix pointer. For GDIPlus a Matrix Pointer and for Cairo a cairo_matrix_t pointer.
+        Returns the native representation of the matrix. For CoreGraphics this
+        is a CFAffineMatrix pointer, for GDIPlus a Matrix Pointer, and for
+        Cairo a cairo_matrix_t pointer.
     */
     virtual void* GetNativeMatrix() const;
 
@@ -735,6 +872,10 @@ public:
     */
     virtual void Invert();
 
+    /**
+        Returns @true if the elements of the transformation matrix are equal.
+    */
+    virtual bool IsEqual(const wxGraphicsMatrix* t) const;
     /**
         Returns @true if the elements of the transformation matrix are equal.
     */
@@ -746,7 +887,7 @@ public:
     virtual bool IsIdentity() const;
 
     /**
-        Rotates this matrix (radians).
+        Rotates this matrix (in radians).
     */
     virtual void Rotate(wxDouble angle);
 
@@ -756,15 +897,15 @@ public:
     virtual void Scale(wxDouble xScale, wxDouble yScale);
 
     /**
-        Sets the matrix to the respective values (default values are the identity
-        matrix)
+        Sets the matrix to the respective values (default values are the
+        identity matrix).
     */
     virtual void Set(wxDouble a = 1.0, wxDouble b = 0.0, wxDouble c = 0.0,
                      wxDouble d = 1.0, wxDouble tx = 0.0, wxDouble ty = 0.0);
 
     /**
         Applies this matrix to a distance (ie. performs all transforms except
-        translations)
+        translations).
     */
     virtual void TransformDistance(wxDouble* dx, wxDouble* dy) const;
 
@@ -778,3 +919,4 @@ public:
     */
     virtual void Translate(wxDouble dx, wxDouble dy);
 };
+