X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/526954c5968baa29218c994ec48e476ae2bd4b9f..8db2e3ef1565e738ade7f63580951d1d040b9c29:/interface/wx/graphics.h diff --git a/interface/wx/graphics.h b/interface/wx/graphics.h index b692552c59..83627b2ef4 100644 --- a/interface/wx/graphics.h +++ b/interface/wx/graphics.h @@ -116,12 +116,12 @@ public: @return @true if the point is within the path. */ bool Contains(const wxPoint2DDouble& c, - int fillStyle = wxODDEVEN_RULE) const; + wxPolygonFillMode fillStyle = wxODDEVEN_RULE) const; /** @return @true if the point is within the path. */ virtual bool Contains(wxDouble x, wxDouble y, - int fillStyle = wxODDEVEN_RULE) const; + wxPolygonFillMode fillStyle = wxODDEVEN_RULE) const; /** Gets the bounding box enclosing all points (possibly including control @@ -212,6 +212,23 @@ enum wxAntialiasMode wxANTIALIAS_DEFAULT, }; +/** + Interpolation quality used by wxGraphicsContext::SetInterpolationQuality(). + */ +enum wxInterpolationQuality +{ + /** default interpolation, based on type of context, in general medium quality */ + wxINTERPOLATION_DEFAULT, + /** no interpolation */ + wxINTERPOLATION_NONE, + /** fast interpolation, suited for interactivity */ + wxINTERPOLATION_FAST, + /** better quality */ + wxINTERPOLATION_GOOD, + /** best quality, not suited for interactivity */ + wxINTERPOLATION_BEST +}; + /** Compositing is done using Porter-Duff compositions (see http://keithp.com/~keithp/porterduff/p253-porter.pdf) with @@ -224,6 +241,14 @@ enum wxAntialiasMode */ enum wxCompositionMode { + /** + Indicates invalid or unsupported composition mode. + + This value can't be passed to wxGraphicsContext::SetCompositionMode(). + + @since 2.9.2 + */ + wxCOMPOSITION_INVALID = -1, wxCOMPOSITION_CLEAR, /**< @e R = 0 */ wxCOMPOSITION_SOURCE, /**< @e R = S */ wxCOMPOSITION_OVER, /**< @e R = @e S + @e D*(1 - @e Sa) */ @@ -237,9 +262,41 @@ enum wxCompositionMode 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 */ + wxCOMPOSITION_ADD /**< @e R = @e S + @e D */ }; +/** + Represents a bitmap. + + The objects of this class are not created directly but only via + wxGraphicsContext or wxGraphicsRenderer CreateBitmap(), + CreateBitmapFromImage() or CreateSubBitmap() methods. They can subsequently + be used with wxGraphicsContext::DrawBitmap(). The only other operation is + testing for the bitmap validity which can be performed using IsNull() + method inherited from the base class. + */ +class wxGraphicsBitmap : public wxGraphicsObject +{ +public: + /** + Default constructor creates an invalid bitmap. + */ + wxGraphicsBitmap() {} + + /** + Return the contents of this bitmap as wxImage. + + Using this method is more efficient than converting wxGraphicsBitmap to + wxBitmap first and then to wxImage and can be useful if, for example, + you want to save wxGraphicsBitmap as a disk file in a format not + directly supported by wxBitmap. + + Invalid image is returned if the bitmap is invalid. + + @since 2.9.3 + */ + wxImage ConvertToImage() const; +}; /** @class wxGraphicsContext @@ -299,14 +356,14 @@ public: @see wxGraphicsRenderer::CreateContext() */ - static wxGraphicsContext* Create(const wxWindowDC& dc); + static wxGraphicsContext* Create(const wxWindowDC& windowDC); /** Creates a wxGraphicsContext from a wxMemoryDC @see wxGraphicsRenderer::CreateContext() */ - static wxGraphicsContext* Create(const wxMemoryDC& dc); + static wxGraphicsContext* Create(const wxMemoryDC& memoryDC); /** Creates a wxGraphicsContext from a wxPrinterDC. Under GTK+, this will @@ -315,7 +372,30 @@ public: @see wxGraphicsRenderer::CreateContext(), @ref overview_unixprinting */ - static wxGraphicsContext* Create(const wxPrinterDC& dc); + static wxGraphicsContext* Create(const wxPrinterDC& printerDC); + + /** + Creates a wxGraphicsContext from a wxEnhMetaFileDC. + + This function, as wxEnhMetaFileDC class itself, is only available only + under MSW. + + @see wxGraphicsRenderer::CreateContext() + */ + static wxGraphicsContext* Create(const wxEnhMetaFileDC& metaFileDC); + + /** + Creates a wxGraphicsContext associated with a wxImage. + + The image specifies the size of the context as well as whether alpha is + supported (if wxImage::HasAlpha()) or not and the initial contents of + the context. The @a image object must have a life time greater than + that of the new context as the context copies its contents back to the + image when it is destroyed. + + @since 2.9.3 + */ + static wxGraphicsContext* Create(wxImage& image); /** Clips drawings to the specified region. @@ -333,6 +413,35 @@ public: */ virtual void ConcatTransform(const wxGraphicsMatrix& matrix) = 0; + /** + Creates wxGraphicsBitmap from an existing wxBitmap. + + Returns an invalid wxNullGraphicsBitmap on failure. + */ + virtual wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ) = 0; + + /** + Creates wxGraphicsBitmap from an existing wxImage. + + This method is more efficient than converting wxImage to wxBitmap first + and then calling CreateBitmap() but otherwise has the same effect. + + Returns an invalid wxNullGraphicsBitmap on failure. + + @since 2.9.3 + */ + virtual wxGraphicsBitmap CreateBitmapFromImage(const wxImage& image); + + /** + Extracts a sub-bitmap from an existing bitmap. + + Currently this function is implemented in the native MSW and OS X + versions but not when using Cairo. + */ + virtual wxGraphicsBitmap CreateSubBitmap(const wxGraphicsBitmap& bitmap, + wxDouble x, wxDouble y, + wxDouble w, wxDouble h) = 0; + /** Creates a native brush from a wxBrush. */ @@ -344,6 +453,19 @@ public: virtual wxGraphicsFont CreateFont(const wxFont& font, const wxColour& col = *wxBLACK) const; + /** + Creates a font object with the specified attributes. + + The use of overload taking wxFont is preferred, see + wxGraphicsRenderer::CreateFont() for more details. + + @since 2.9.3 + */ + virtual wxGraphicsFont CreateFont(double sizeInPixels, + const wxString& facename, + int flags = wxFONTFLAG_DEFAULT, + const wxColour& col = *wxBLACK) const; + /** Creates a wxGraphicsContext from a native context. This native context must be a CGContextRef for Core Graphics, a Graphics pointer for @@ -403,7 +525,7 @@ public: /** Creates a native brush with a radial gradient. - The brush originats at (@a xo, @a yc) and ends on a circle around + The brush originates at (@a xo, @a yc) and ends on a circle around (@a xc, @a yc) with the given @a radius. The gradient may be specified either by its start and end colours @a @@ -430,8 +552,14 @@ public: 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, + //@{ + virtual void DrawBitmap(const wxGraphicsBitmap& bmp, + wxDouble x, wxDouble y, + wxDouble w, wxDouble h ) = 0; + virtual void DrawBitmap(const wxBitmap& bmp, + wxDouble x, wxDouble y, wxDouble w, wxDouble h) = 0; + //@} /** Draws an ellipse. @@ -620,8 +748,10 @@ public: 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. + Stroke lines connecting all the points. + + Unlike the other overload of this function, this method draws a single + polyline and not a number of disconnected lines. */ virtual void StrokeLines(size_t n, const wxPoint2DDouble* points); @@ -656,6 +786,16 @@ public: */ virtual wxAntialiasMode GetAntialiasMode() const ; + /** + Sets the interpolation quality, returns true if it supported + */ + virtual bool SetInterpolationQuality(wxInterpolationQuality interpolation) = 0; + + /** + Returns the current interpolation quality + */ + virtual wxInterpolationQuality GetInterpolationQuality() const; + /** Sets the compositing operator, returns true if it supported */ @@ -666,6 +806,11 @@ public: */ virtual wxCompositionMode GetCompositionMode() const; + + virtual void EnableOffset(bool enable = true); + void DisableOffset(); + bool OffsetEnabled(); + }; /** @@ -805,6 +950,41 @@ public: class wxGraphicsRenderer : public wxObject { public: + /** + Creates wxGraphicsBitmap from an existing wxBitmap. + + Returns an invalid wxNullGraphicsBitmap on failure. + */ + virtual wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ) = 0; + + /** + Creates wxGraphicsBitmap from an existing wxImage. + + This method is more efficient than converting wxImage to wxBitmap first + and then calling CreateBitmap() but otherwise has the same effect. + + Returns an invalid wxNullGraphicsBitmap on failure. + + @since 2.9.3 + */ + virtual wxGraphicsBitmap CreateBitmapFromImage(const wxImage& image) = 0; + + /** + Creates a wxImage from a wxGraphicsBitmap. + + This method is used by the more convenient wxGraphicsBitmap::ConvertToImage. + */ + virtual wxImage CreateImageFromBitmap(const wxGraphicsBitmap& bmp) = 0; + + /** + Creates wxGraphicsBitmap from a native bitmap handle. + + @a bitmap meaning is platform-dependent. Currently it's a GDI+ @c + Bitmap pointer under MSW, @c CGImage pointer under OS X or a @c + cairo_surface_t pointer when using Cairo under any platform. + */ + virtual wxGraphicsBitmap CreateBitmapFromNativeBitmap( void* bitmap ) = 0; + /** Creates a wxGraphicsContext from a wxWindow. */ @@ -813,17 +993,35 @@ public: /** Creates a wxGraphicsContext from a wxWindowDC */ - virtual wxGraphicsContext* CreateContext(const wxWindowDC& dc) = 0 ; + virtual wxGraphicsContext* CreateContext(const wxWindowDC& windowDC) = 0 ; /** Creates a wxGraphicsContext from a wxMemoryDC */ - virtual wxGraphicsContext* CreateContext(const wxMemoryDC& dc) = 0 ; + virtual wxGraphicsContext* CreateContext(const wxMemoryDC& memoryDC) = 0 ; /** Creates a wxGraphicsContext from a wxPrinterDC */ - virtual wxGraphicsContext* CreateContext(const wxPrinterDC& dc) = 0 ; + virtual wxGraphicsContext* CreateContext(const wxPrinterDC& printerDC) = 0 ; + + /** + Creates a wxGraphicsContext from a wxEnhMetaFileDC. + + This function, as wxEnhMetaFileDC class itself, is only available only + under MSW. + */ + virtual wxGraphicsContext* CreateContext(const wxEnhMetaFileDC& metaFileDC) = 0; + + /** + Creates a wxGraphicsContext associated with a wxImage. + + This function is used by wxContext::CreateFromImage() and is not + normally called directly. + + @since 2.9.3 + */ + wxGraphicsContext* CreateContextFromImage(wxImage& image); /** Creates a native brush from a wxBrush. @@ -854,6 +1052,35 @@ public: virtual wxGraphicsFont CreateFont(const wxFont& font, const wxColour& col = *wxBLACK) = 0; + /** + Creates a graphics font with the given characteristics. + + If possible, the CreateFont() overload taking wxFont should be used + instead. The main advantage of this overload is that it can be used + without X server connection under Unix when using Cairo. + + @param sizeInPixels + Height of the font in user space units, i.e. normally pixels. + Notice that this is different from the overload taking wxFont as + wxFont size is specified in points. + @param facename + The name of the font. The same font name might not be available + under all platforms so the font name can also be empty to use the + default platform font. + @param flags + Combination of wxFontFlag enum elements. Currently only + @c wxFONTFLAG_ITALIC and @c wxFONTFLAG_BOLD are supported. By + default the normal font version is used. + @param col + The font colour, black by default. + + @since 2.9.3 + */ + virtual wxGraphicsFont CreateFont(double sizeInPixels, + const wxString& facename, + int flags = wxFONTFLAG_DEFAULT, + const wxColour& col = *wxBLACK) = 0; + /** Creates a native brush with a linear gradient. @@ -897,12 +1124,24 @@ public: wxDouble radius, const wxGraphicsGradientStops& stops) = 0; + /** + Extracts a sub-bitmap from an existing bitmap. + + Currently this function is implemented in the native MSW and OS X + versions but not when using Cairo. + */ + virtual wxGraphicsBitmap CreateSubBitmap(const wxGraphicsBitmap& bitmap, + wxDouble x, wxDouble y, + wxDouble w, wxDouble h) = 0; + /** 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. */ static wxGraphicsRenderer* GetDefaultRenderer(); + static wxGraphicsRenderer* GetCairoRenderer(); + }; @@ -1058,3 +1297,10 @@ public: virtual void Translate(wxDouble dx, wxDouble dy); }; + +const wxGraphicsPen wxNullGraphicsPen; +const wxGraphicsBrush wxNullGraphicsBrush; +const wxGraphicsFont wxNullGraphicsFont; +const wxGraphicsBitmap wxNullGraphicsBitmap; +const wxGraphicsMatrix wxNullGraphicsMatrix; +const wxGraphicsPath wxNullGraphicsPath;