]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/renderer.h
Ensure that the overall table border doesn't get overdrawn by cell borders with a...
[wxWidgets.git] / interface / wx / renderer.h
index e4548ba4dadfd29672fd3f55ecd80f65e1c02aae..ef1d4879672b2631f8accac059ee9696ab60fcc3 100644 (file)
@@ -2,8 +2,7 @@
 // Name:        renderer.h
 // Purpose:     interface of wxRendererNative
 // Author:      wxWidgets team
 // Name:        renderer.h
 // Purpose:     interface of wxRendererNative
 // Author:      wxWidgets team
-// RCS-ID:      $Id$
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 /**
 /////////////////////////////////////////////////////////////////////////////
 
 /**
@@ -43,7 +42,7 @@ enum
     /** Mouse is currently over the control. */
     wxCONTROL_CURRENT    = 0x00000010,
 
     /** Mouse is currently over the control. */
     wxCONTROL_CURRENT    = 0x00000010,
 
-    /** Selected item in e.g. listbox. */
+    /** Selected item in e.g.\ listbox. */
     wxCONTROL_SELECTED   = 0x00000020,
 
     /** (Check/radio button) is checked. */
     wxCONTROL_SELECTED   = 0x00000020,
 
     /** (Check/radio button) is checked. */
@@ -56,6 +55,18 @@ enum
     wxCONTROL_UNDETERMINED = wxCONTROL_CHECKABLE
 };
 
     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
 
 /**
     @struct wxSplitterRenderParams
 
@@ -65,7 +76,7 @@ enum
     It doesn't have any methods and all of its fields are constant, so they can
     only be examined but not modified.
 
     It doesn't have any methods and all of its fields are constant, so they can
     only be examined but not modified.
 
-    @library{wxbase}
+    @library{wxcore}
     @category{gdi}
 */
 struct wxSplitterRenderParams
     @category{gdi}
 */
 struct wxSplitterRenderParams
@@ -99,7 +110,7 @@ struct wxSplitterRenderParams
     wxRendererNative::DrawHeaderButton() to specify custom values used to draw
     the text or bitmap label.
 
     wxRendererNative::DrawHeaderButton() to specify custom values used to draw
     the text or bitmap label.
 
-    @library{wxbase}
+    @library{wxcore}
     @category{gdi}
 */
 struct wxHeaderButtonParams
     @category{gdi}
 */
 struct wxHeaderButtonParams
@@ -192,6 +203,8 @@ public:
 
     virtual int GetHeaderButtonHeight(wxWindow *win);
 
 
     virtual int GetHeaderButtonHeight(wxWindow *win);
 
+    virtual int GetHeaderButtonMargin(wxWindow *win);
+
     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);
 
@@ -293,8 +306,8 @@ public:
         @a flags may have the @c wxCONTROL_CHECKED, @c wxCONTROL_CURRENT or
         @c wxCONTROL_UNDETERMINED bit set, see @ref wxCONTROL_FLAGS.
     */
         @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
 
     /**
         Draw a button like the one used by wxComboBox to show a
@@ -304,8 +317,7 @@ public:
         see @ref wxCONTROL_FLAGS.
     */
     virtual void DrawComboBoxDropButton(wxWindow* win, wxDC& dc,
         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
 
     /**
         Draw a drop down arrow that is suitable for use outside a combo box. Arrow will
@@ -318,7 +330,7 @@ public:
         see @ref wxCONTROL_FLAGS.
     */
     virtual void DrawDropArrow(wxWindow* win, wxDC& dc, const wxRect& rect,
         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.
 
     /**
         Draw a focus rectangle using the specified rectangle.
@@ -328,7 +340,7 @@ public:
         see @ref wxCONTROL_FLAGS.
     */
     virtual void DrawFocusRect(wxWindow* win, wxDC& dc, const wxRect& rect,
         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).
 
     /**
         Draw the header control button (used, for example, by wxListCtrl).
@@ -337,7 +349,7 @@ public:
         @c wxCONTROL_DISABLED and @c wxCONTROL_CURRENT bits, see @ref wxCONTROL_FLAGS.
 
         @return
         @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,
         bitmap, the sort arrow if present, and internal margins.
     */
     virtual int DrawHeaderButton(wxWindow* win, wxDC& dc, const wxRect& rect,
@@ -352,7 +364,7 @@ public:
         @c wxCONTROL_DISABLED and @c wxCONTROL_CURRENT bits, see @ref wxCONTROL_FLAGS.
 
         @return
         @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,
         bitmap, the sort arrow if present, and internal margins.
     */
     virtual int DrawHeaderButtonContents(wxWindow* win, wxDC& dc,
@@ -367,12 +379,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
         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,
         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.
 
     /**
         Draw a blank push button that looks very similar to wxButton.
@@ -380,15 +392,15 @@ public:
         @a flags may have the @c wxCONTROL_PRESSED, @c wxCONTROL_CURRENT or
         @c wxCONTROL_ISDEFAULT bit set, see @ref wxCONTROL_FLAGS.
     */
         @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.
     */
 
     /**
         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
 
     /**
         Draw a sash. The @a orient parameter defines whether the sash should be
@@ -404,13 +416,57 @@ public:
         To draw an expanded button the @a flags parameter must contain @c wxCONTROL_EXPANDED bit,
         see @ref wxCONTROL_FLAGS.
     */
         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.
     */
 
     /**
         Return the currently used renderer.
     */
-    static wxRendererNative Get();
+    static wxRendererNative& Get();
 
     /**
         Return the default (native) implementation for this platform -- this is also
 
     /**
         Return the default (native) implementation for this platform -- this is also
@@ -418,30 +474,38 @@ public:
         Set() in which case the return value of this
         method may be different from the return value of Get().
     */
         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().
     */
 
     /**
         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.
 
     /**
         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
     */
     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) = 0;
 
     /**
     */
     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) = 0;
 
     */
     virtual wxSplitterRenderParams GetSplitterParams(const wxWindow* win) = 0;
 
@@ -496,11 +560,13 @@ public:
     renderer which has the age greater or equal to its age. This verification is
     done by IsCompatible() method.
 
     renderer which has the age greater or equal to its age. This verification is
     done by IsCompatible() method.
 
-    @library{wxbase}
+    @library{wxcore}
     @category{gdi}
 */
 struct wxRendererVersion
 {
     @category{gdi}
 */
 struct wxRendererVersion
 {
+    wxRendererVersion(int version_, int age_);
+    
     /**
         Checks if the main program is compatible with the renderer having the version
         @e ver, returns @true if it is and @false otherwise.
     /**
         Checks if the main program is compatible with the renderer having the version
         @e ver, returns @true if it is and @false otherwise.