]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/graphics.h
Added drawing context to allow 'virtual' (dynamic) attributes, for e.g. showing bookm...
[wxWidgets.git] / interface / wx / graphics.h
index 638787d06941120a644c05fe24068fd2da07d6f3..83627b2ef416f9c7e6ad05ccb0dafd35880502a5 100644 (file)
@@ -3,7 +3,7 @@
 // Purpose:     interface of various wxGraphics* classes
 // Author:      wxWidgets team
 // RCS-ID:      $Id$
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 /**
@@ -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
@@ -201,7 +201,7 @@ public:
 };
 
 /**
-    Anti-aliasing modes used by wxGraphicsContext::SetAntialisingMode
+    Anti-aliasing modes used by wxGraphicsContext::SetAntialiasMode().
 */
 enum wxAntialiasMode
 {
@@ -212,10 +212,27 @@ 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
-    wxGraphicsContext::SetCompositionMode
+    wxGraphicsContext::SetCompositionMode().
 
     The description give a short equation on how the values of a resulting
     pixel are calculated.
@@ -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();
+
 };
 
 /**
@@ -686,12 +831,10 @@ public:
         @param col The colour of this stop. Note that the alpha component of
             the colour is honoured thus allowing the background colours to
             partially show through the gradient.
-        @param pos The stop position, must be in [0, 1) range with 0 being the
-            beginning and 1 the end of the gradient (but it doesn't make sense
-            to create a stop at position 1 because it would never be visible
-            anyhow).
+        @param pos The stop position, must be in [0, 1] range with 0 being the
+            beginning and 1 the end of the gradient.
     */
-    wxGraphicsGradientStop(wxColour col, float pos);
+    wxGraphicsGradientStop(wxColour col = wxTransparentColour, float pos = 0.);
 
     /// Return the stop colour.
     const wxColour& GetColour() const;
@@ -709,7 +852,7 @@ public:
     /**
         Change the stop position.
 
-        @param pos The new position, must always be in [0, 1) range.
+        @param pos The new position, must always be in [0, 1] range.
     */
     void SetPosition(float pos);
 };
@@ -807,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.
     */
@@ -815,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.
@@ -856,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.
@@ -899,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();
+
 };
 
 
@@ -1060,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;