]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/renderer.h
Correctly initialise ref count in custom scheme class factory.
[wxWidgets.git] / interface / wx / renderer.h
index 6c33c39d59f897d1bb59b8ba18e0f05617ffe987..f6b55e934f8532f4aaf1382f05a579f89c3ea6d7 100644 (file)
@@ -3,7 +3,7 @@
 // Purpose:     interface of wxRendererNative
 // Author:      wxWidgets team
 // RCS-ID:      $Id$
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 /**
@@ -56,9 +56,20 @@ enum
     wxCONTROL_UNDETERMINED = wxCONTROL_CHECKABLE
 };
 
+/**
+    Title bar buttons supported by wxRendererNative::DrawTitleBarBitmap().
+ */
+enum wxTitleBarButton
+{
+    wxTITLEBAR_BUTTON_CLOSE    = 0x01000000,
+    wxTITLEBAR_BUTTON_MAXIMIZE = 0x02000000,
+    wxTITLEBAR_BUTTON_ICONIZE  = 0x04000000,
+    wxTITLEBAR_BUTTON_RESTORE  = 0x08000000,
+    wxTITLEBAR_BUTTON_HELP     = 0x10000000
+};
+
 /**
     @struct wxSplitterRenderParams
-    @wxheader{renderer.h}
 
     This is just a simple @c struct used as a return value of
     wxRendererNative::GetSplitterParams().
@@ -95,7 +106,6 @@ struct wxSplitterRenderParams
 
 /**
     @struct wxHeaderButtonParams
-    @wxheader{renderer.h}
 
     This @c struct can optionally be used with
     wxRendererNative::DrawHeaderButton() to specify custom values used to draw
@@ -132,7 +142,6 @@ enum wxHeaderSortIconType
 
 /**
     @class wxDelegateRendererNative
-    @wxheader{renderer.h}
 
     wxDelegateRendererNative allows reuse of renderers code by forwarding all the
     wxRendererNative methods to the given object and
@@ -195,6 +204,8 @@ public:
 
     virtual int GetHeaderButtonHeight(wxWindow *win);
 
+    virtual int GetHeaderButtonMargin(wxWindow *win);
+
     virtual void DrawTreeItemButton(wxWindow *win, wxDC& dc,
                                     const wxRect& rect, int flags = 0);
 
@@ -214,6 +225,8 @@ public:
     virtual void DrawCheckBox(wxWindow *win, wxDC& dc,
                               const wxRect& rect, int flags = 0 );
 
+    virtual wxSize GetCheckBoxSize(wxWindow *win);
+
     virtual void DrawPushButton(wxWindow *win, wxDC& dc,
                                 const wxRect& rect, int flags = 0 );
 
@@ -232,7 +245,6 @@ public:
 
 /**
     @class wxRendererNative
-    @wxheader{renderer.h}
 
     First, a brief introduction to wxRendererNative and why it is needed.
 
@@ -287,16 +299,16 @@ public:
     /**
         Virtual destructor as for any base class.
     */
-    ~wxRendererNative();
+    virtual ~wxRendererNative();
 
     /**
-        Draw a check box (used by wxDataViewCtrl).
+        Draw a check box.
 
         @a flags may have the @c wxCONTROL_CHECKED, @c wxCONTROL_CURRENT or
         @c wxCONTROL_UNDETERMINED bit set, see @ref wxCONTROL_FLAGS.
     */
-    virtual void DrawCheckBox(wxWindow* win, wxDC& dc,
-                              const wxRect& rect, int flags);
+    virtual void DrawCheckBox(wxWindow* win, wxDC& dc, const wxRect& rect,
+                              int flags = 0) = 0;
 
     /**
         Draw a button like the one used by wxComboBox to show a
@@ -306,8 +318,7 @@ public:
         see @ref wxCONTROL_FLAGS.
     */
     virtual void DrawComboBoxDropButton(wxWindow* win, wxDC& dc,
-                                const wxRect& rect,
-                                int flags);
+                                        const wxRect& rect, int flags = 0) = 0;
 
     /**
         Draw a drop down arrow that is suitable for use outside a combo box. Arrow will
@@ -320,7 +331,7 @@ public:
         see @ref wxCONTROL_FLAGS.
     */
     virtual void DrawDropArrow(wxWindow* win, wxDC& dc, const wxRect& rect,
-                       int flags);
+                               int flags = 0) = 0;
 
     /**
         Draw a focus rectangle using the specified rectangle.
@@ -330,7 +341,7 @@ public:
         see @ref wxCONTROL_FLAGS.
     */
     virtual void DrawFocusRect(wxWindow* win, wxDC& dc, const wxRect& rect,
-                       int flags = 0);
+                               int flags = 0) = 0;
 
     /**
         Draw the header control button (used, for example, by wxListCtrl).
@@ -339,13 +350,12 @@ public:
         @c wxCONTROL_DISABLED and @c wxCONTROL_CURRENT bits, see @ref wxCONTROL_FLAGS.
 
         @return
-        The optimal width to contain the the unabreviated label text or
+        The optimal width to contain the unabbreviated label text or
         bitmap, the sort arrow if present, and internal margins.
     */
-    virtual int DrawHeaderButton(wxWindow* win, wxDC& dc,
-                                 const wxRect& rect, int flags = 0,
-                                 wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE,
-                                 wxHeaderButtonParams* params = NULL);
+    virtual int DrawHeaderButton(wxWindow* win, wxDC& dc, const wxRect& rect,
+                                 int flags = 0,
+                                 wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE, wxHeaderButtonParams* params = NULL) = 0;
 
     /**
         Draw the contents of a header control button (label, sort arrows,
@@ -355,13 +365,12 @@ public:
         @c wxCONTROL_DISABLED and @c wxCONTROL_CURRENT bits, see @ref wxCONTROL_FLAGS.
 
         @return
-        The optimal width to contain the the unabreviated label text or
+        The optimal width to contain the unabbreviated label text or
         bitmap, the sort arrow if present, and internal margins.
     */
-    virtual int DrawHeaderButtonContents(wxWindow *win, wxDC& dc,
+    virtual int DrawHeaderButtonContents(wxWindowwin, wxDC& dc,
                                          const wxRect& rect, int flags = 0,
-                                         wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE,
-                                         wxHeaderButtonParams* params = NULL);
+                                         wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE, wxHeaderButtonParams* params = NULL) = 0;
 
     /**
         Draw a selection rectangle underneath the text as used e.g. in a
@@ -371,12 +380,12 @@ public:
         which are selected (e.g. often a blue rectangle) and @c wxCONTROL_CURRENT
         for the item that has the focus (often a dotted line around the item's text).
         @c wxCONTROL_FOCUSED may be used to indicate if the control has the focus
-        (othewise the the selection rectangle is e.g. often grey and not blue).
+        (otherwise the selection rectangle is e.g. often grey and not blue).
         This may be ignored by the renderer or deduced by the code directly from
         the @a win.
     */
     virtual void DrawItemSelectionRect(wxWindow* win, wxDC& dc,
-                                       const wxRect& rect, int flags = 0);
+                                       const wxRect& rect, int flags = 0) = 0;
 
     /**
         Draw a blank push button that looks very similar to wxButton.
@@ -384,23 +393,23 @@ public:
         @a flags may have the @c wxCONTROL_PRESSED, @c wxCONTROL_CURRENT or
         @c wxCONTROL_ISDEFAULT bit set, see @ref wxCONTROL_FLAGS.
     */
-    virtual void DrawPushButton(wxWindow* win, wxDC& dc,
-                                const wxRect& rect, int flags);
+    virtual void DrawPushButton(wxWindow* win, wxDC& dc, const wxRect& rect,
+                                int flags = 0) = 0;
 
     /**
         Draw the border for sash window: this border must be such that the sash
         drawn by DrawSplitterSash() blends into it well.
     */
-    virtual void DrawSplitterBorder(wxWindow* win, wxDC& dc,
-                                    const wxRect& rect, int flags = 0);
+    virtual void DrawSplitterBorder(wxWindow* win, wxDC& dc, const wxRect& rect,
+                                    int flags = 0) = 0;
 
     /**
         Draw a sash. The @a orient parameter defines whether the sash should be
         vertical or horizontal and how the @a position should be interpreted.
     */
-    virtual void DrawSplitterSash(wxWindow* win, wxDC& dc,
-                                  const wxSize& size, wxCoord position,
-                                  wxOrientation orient, int flags = 0);
+    virtual void DrawSplitterSash(wxWindow* win, wxDC& dc, const wxSize& size,
+                                  wxCoord position, wxOrientation orient,
+                                  int flags = 0) = 0;
 
     /**
         Draw the expanded/collapsed icon for a tree control item.
@@ -408,13 +417,57 @@ public:
         To draw an expanded button the @a flags parameter must contain @c wxCONTROL_EXPANDED bit,
         see @ref wxCONTROL_FLAGS.
     */
-    virtual void DrawTreeItemButton(wxWindow* win, wxDC& dc,
-                                    const wxRect& rect, int flags = 0);
+    virtual void DrawTreeItemButton(wxWindow* win, wxDC& dc, const wxRect& rect,
+                                    int flags = 0) = 0;
+
+    /**
+        Draw a native wxChoice
+    */
+    virtual void DrawChoice(wxWindow* win, wxDC& dc, const wxRect& rect, int flags = 0) = 0;
+
+    /**
+        Draw a native wxComboBox
+    */
+    virtual void DrawComboBox(wxWindow* win, wxDC& dc, const wxRect& rect, int flags = 0) = 0;
+
+    /**
+        Draw a native wxTextCtrl frame
+    */
+    virtual void DrawTextCtrl(wxWindow* win, wxDC& dc, const wxRect& rect, int flags = 0) = 0;
+
+    /**
+        Draw a native wxRadioButton bitmap.
+    */
+    virtual void DrawRadioBitmap(wxWindow* win, wxDC& dc, const wxRect& rect, int flags = 0) = 0;
+
+    /**
+        Draw a title bar button in the given state.
+
+        This function is currently only available under MSW and OS X (and only
+        for wxTITLEBAR_BUTTON_CLOSE under the latter), its best replacement for
+        the other platforms is to use wxArtProvider to retrieve the bitmaps for
+        @c wxART_HELP and @c wxART_CLOSE (but not any other title bar buttons
+        and not for any state but normal, i.e. not pressed and not current one).
+
+        The presence of this function is indicated by @c
+        wxHAS_DRAW_TITLE_BAR_BITMAP symbol being defined.
+
+        Also notice that PNG handler must be enabled using wxImage::AddHandler()
+        to use this function under OS X currently as the bitmaps are embedded
+        in the library itself in PNG format.
+
+        @since 2.9.1
+     */
+    virtual void DrawTitleBarBitmap(wxWindow *win,
+                                    wxDC& dc,
+                                    const wxRect& rect,
+                                    wxTitleBarButton button,
+                                    int flags = 0) = 0;
 
     /**
         Return the currently used renderer.
     */
-    static wxRendererNative Get();
+    static wxRendererNative& Get();
 
     /**
         Return the default (native) implementation for this platform -- this is also
@@ -422,27 +475,40 @@ public:
         Set() in which case the return value of this
         method may be different from the return value of Get().
     */
-    static wxRendererNative GetDefault();
+    static wxRendererNative& GetDefault();
 
     /**
         Return the generic implementation of the renderer. Under some platforms, this
         is the default renderer implementation, others have platform-specific default
         renderer which can be retrieved by calling GetDefault().
     */
-    static wxRendererNative GetGeneric();
+    static wxRendererNative& GetGeneric();
+
+    /**
+        Returns the size of a check box.
+        The @a win parameter is not used currently and can be @NULL.
+    */
+    virtual wxSize GetCheckBoxSize(wxWindow* win) = 0;
 
     /**
         Returns the height of a header button, either a fixed platform height if
-        available, or a
-        generic height based on the window's font.
+        available, or a generic height based on the @a win window's font.
     */
-    virtual int GetHeaderButtonHeight(wxWindow* win);
+    virtual int GetHeaderButtonHeight(wxWindow* win) = 0;
 
     /**
-        Get the splitter parameters, see
-        wxSplitterRenderParams.
+        Returns the horizontal margin on the left and right sides of header
+        button's label.
+
+        @since 2.9.2
+     */
+    virtual int GetHeaderButtonMargin(wxWindow *win) = 0;
+
+    /**
+        Get the splitter parameters, see wxSplitterRenderParams.
+        The @a win parameter should be a wxSplitterWindow.
     */
-    virtual wxSplitterRenderParams GetSplitterParams(const wxWindow* win);
+    virtual wxSplitterRenderParams GetSplitterParams(const wxWindow* win) = 0;
 
     /**
         This function is used for version checking: Load()
@@ -455,7 +521,7 @@ public:
         but it has to be in the derived, not base, class, to detect mismatches between
         the renderers versions and so you have to implement it anew in all renderers.
     */
-    virtual wxRendererVersion GetVersion() const;
+    virtual wxRendererVersion GetVersion() const = 0;
 
     /**
         Load the renderer from the specified DLL, the returned pointer must be
@@ -481,7 +547,6 @@ public:
 
 /**
     @struct wxRendererVersion
-    @wxheader{renderer.h}
 
     This simple struct represents the wxRendererNative
     interface version and is only used as the return value of