X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e8759560f8c3d47d51abca114d3ef475c6b13529..92c0fc34c104c8d7c12d6a3b78ea232690fc23f4:/interface/wx/renderer.h diff --git a/interface/wx/renderer.h b/interface/wx/renderer.h index 59e578b78b..ef1d487967 100644 --- a/interface/wx/renderer.h +++ b/interface/wx/renderer.h @@ -2,8 +2,7 @@ // 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, - /** Selected item in e.g. listbox. */ + /** Selected item in e.g.\ listbox. */ wxCONTROL_SELECTED = 0x00000020, /** (Check/radio button) is checked. */ @@ -56,6 +55,18 @@ 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 @@ -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. - @library{wxbase} + @library{wxcore} @category{gdi} */ struct wxSplitterRenderParams @@ -99,7 +110,7 @@ struct wxSplitterRenderParams wxRendererNative::DrawHeaderButton() to specify custom values used to draw the text or bitmap label. - @library{wxbase} + @library{wxcore} @category{gdi} */ struct wxHeaderButtonParams @@ -192,6 +203,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); @@ -285,7 +298,7 @@ public: /** Virtual destructor as for any base class. */ - ~wxRendererNative(); + virtual ~wxRendererNative(); /** Draw a check box. @@ -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. */ - 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 @@ -304,8 +317,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 @@ -318,7 +330,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. @@ -328,7 +340,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). @@ -337,13 +349,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, @@ -353,13 +364,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(wxWindow* win, 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 @@ -369,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 - (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. @@ -382,23 +392,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. @@ -406,13 +416,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 @@ -420,32 +474,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); + 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() @@ -458,7 +520,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 @@ -498,11 +560,13 @@ public: 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 { + 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.