X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5a3955662a0696b2a7d55a50d0cf4a63a6a3b2fa..b5fe7ca67bf3121959a0b5a59afd00c1708f2f03:/interface/wx/graphics.h diff --git a/interface/wx/graphics.h b/interface/wx/graphics.h index 0665da824d..e5b1f4d58c 100644 --- a/interface/wx/graphics.h +++ b/interface/wx/graphics.h @@ -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 @@ -194,15 +194,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 +273,6 @@ public: } @endcode - @library{wxcore} @category{gdi,dc} @@ -247,47 +286,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 +339,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 +366,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 +385,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 +396,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 +417,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 +436,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 +536,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 +545,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 +582,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. + */ + 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. */ - 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* points); /** Strokes along a path with the current pen. @@ -518,6 +603,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 +644,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 +658,7 @@ public: @endcode @library{wxcore} - @category{FIXME} + @category{gdi} */ class wxGraphicsRenderer : public wxObject { @@ -553,28 +671,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; @@ -590,19 +707,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 +737,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 +749,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 +760,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 +780,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 +800,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 +820,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 +860,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 +875,7 @@ public: virtual bool IsIdentity() const; /** - Rotates this matrix (radians). + Rotates this matrix (in radians). */ virtual void Rotate(wxDouble angle); @@ -756,15 +885,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 +907,4 @@ public: */ virtual void Translate(wxDouble dx, wxDouble dy); }; +