X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/80752b57a9bbdfa7613a917d9ece00fc47677080..a7689c49fe02c0c065facf736ab28b19f5997b7c:/include/wx/univ/renderer.h diff --git a/include/wx/univ/renderer.h b/include/wx/univ/renderer.h index 60ac8bb934..c03a245dc3 100644 --- a/include/wx/univ/renderer.h +++ b/include/wx/univ/renderer.h @@ -30,36 +30,35 @@ #include "wx/renderer.h" -class WXDLLEXPORT wxWindow; -class WXDLLEXPORT wxDC; -class WXDLLEXPORT wxCheckListBox; +class WXDLLIMPEXP_FWD_CORE wxWindow; +class WXDLLIMPEXP_FWD_CORE wxDC; +class WXDLLIMPEXP_FWD_CORE wxCheckListBox; #if wxUSE_LISTBOX - class WXDLLEXPORT wxListBox; + class WXDLLIMPEXP_FWD_CORE wxListBox; #endif // wxUSE_LISTBOX #if wxUSE_MENUS - class WXDLLEXPORT wxMenu; - class WXDLLEXPORT wxMenuGeometryInfo; + class WXDLLIMPEXP_FWD_CORE wxMenu; + class WXDLLIMPEXP_FWD_CORE wxMenuGeometryInfo; #endif // wxUSE_MENUS -class WXDLLEXPORT wxScrollBar; +class WXDLLIMPEXP_FWD_CORE wxScrollBar; #if wxUSE_TEXTCTRL - class WXDLLEXPORT wxTextCtrl; + class WXDLLIMPEXP_FWD_CORE wxTextCtrl; #endif #if wxUSE_GAUGE - class WXDLLEXPORT wxGauge; + class WXDLLIMPEXP_FWD_CORE wxGauge; #endif // wxUSE_GAUGE #include "wx/string.h" #include "wx/gdicmn.h" #include "wx/icon.h" -#include "wx/scrolbar.h" // for wxScrollBar::Element // helper class used by wxMenu-related functions -class WXDLLEXPORT wxMenuGeometryInfo +class WXDLLIMPEXP_CORE wxMenuGeometryInfo { public: // get the total size of the menu @@ -72,7 +71,7 @@ public: // wxRenderer: abstract renderers interface // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxRenderer : public wxDelegateRendererNative +class WXDLLIMPEXP_CORE wxRenderer : public wxDelegateRendererNative { public: // drawing functions @@ -83,15 +82,13 @@ public: const wxColour& col, const wxRect& rect, int flags, - wxWindow *window = NULL ) = 0; + wxWindow *window = NULL) = 0; // draw the button surface virtual void DrawButtonSurface(wxDC& dc, - const wxColour& col, - const wxRect& rect, - int flags ) - { DrawBackground( dc, col, rect, flags ); } - + const wxColour& col, + const wxRect& rect, + int flags) = 0; // draw the label inside the given rectangle with the specified alignment // and optionally emphasize the character with the given index @@ -113,13 +110,14 @@ public: int indexAccel = -1, wxRect *rectBounds = NULL) = 0; + // draw the border and optionally return the rectangle containing the // region inside the border virtual void DrawBorder(wxDC& dc, wxBorder border, const wxRect& rect, int flags = 0, - wxRect *rectIn = (wxRect *)NULL) = 0; + wxRect *rectIn = NULL) = 0; // draw text control border (I hate to have a separate method for this but // it is needed to accommodate GTK+) @@ -127,13 +125,13 @@ public: wxBorder border, const wxRect& rect, int flags = 0, - wxRect *rectIn = (wxRect *)NULL) = 0; + wxRect *rectIn = NULL) = 0; // draw push button border and return the rectangle left for the label virtual void DrawButtonBorder(wxDC& dc, const wxRect& rect, int flags = 0, - wxRect *rectIn = (wxRect *)NULL) = 0; + wxRect *rectIn = NULL) = 0; // draw a horizontal line virtual void DrawHorizontalLine(wxDC& dc, @@ -222,6 +220,7 @@ public: int tbarStyle = 0) = 0; #endif // wxUSE_TOOLBAR +#if wxUSE_TEXTCTRL // draw a (part of) line in the text control virtual void DrawTextLine(wxDC& dc, const wxString& text, @@ -232,7 +231,9 @@ public: // draw a line wrap indicator virtual void DrawLineWrapMark(wxDC& dc, const wxRect& rect) = 0; +#endif // wxUSE_TEXTCTRL +#if wxUSE_NOTEBOOK // draw a notebook tab virtual void DrawTab(wxDC& dc, const wxRect& rect, @@ -241,6 +242,7 @@ public: const wxBitmap& bitmap = wxNullBitmap, int flags = 0, int indexAccel = -1) = 0; +#endif // wxUSE_NOTEBOOK #if wxUSE_SLIDER @@ -347,11 +349,13 @@ public: // misc functions // -------------- +#if wxUSE_COMBOBOX // return the bitmaps to use for combobox button virtual void GetComboBitmaps(wxBitmap *bmpNormal, wxBitmap *bmpFocus, wxBitmap *bmpPressed, wxBitmap *bmpDisabled) = 0; +#endif // wxUSE_COMBOBOX // geometry functions // ------------------ @@ -371,30 +375,8 @@ public: virtual void AdjustSize(wxSize *size, const wxWindow *window) = 0; #if wxUSE_SCROLLBAR - // get the size of a scrollbar arrow virtual wxSize GetScrollbarArrowSize() const = 0; - - // gets the bounding box for a scrollbar element for the given (by default - // - current) thumb position - virtual wxRect GetScrollbarRect(const wxScrollBar *scrollbar, - wxScrollBar::Element elem, - int thumbPos = -1) const = 0; - - // returns the size of the scrollbar shaft excluding the arrows - virtual wxCoord GetScrollbarSize(const wxScrollBar *scrollbar) = 0; - - // returns one of wxHT_SCROLLBAR_XXX constants - virtual wxHitTest HitTestScrollbar(const wxScrollBar *scrollbar, - const wxPoint& pt) const = 0; - - // translate the scrollbar position (in logical units) into physical - // coordinate (in pixels) and the other way round - virtual wxCoord ScrollbarToPixel(const wxScrollBar *scrollbar, - int thumbPos = -1) = 0; - virtual int PixelToScrollbar(const wxScrollBar *scrollbar, - wxCoord coord) = 0; - #endif // wxUSE_SCROLLBAR // get the height of a listbox item from the base font height @@ -405,12 +387,14 @@ public: virtual wxSize GetRadioBitmapSize() const = 0; virtual wxCoord GetCheckItemMargin() const = 0; +#if wxUSE_TOOLBAR // get the standard size of a toolbar button and also return the size of // a toolbar separator in the provided pointer virtual wxSize GetToolBarButtonSize(wxCoord *separator) const = 0; // get the margins between/around the toolbar buttons virtual wxSize GetToolBarMargin() const = 0; +#endif // wxUSE_TOOLBAR #if wxUSE_TEXTCTRL // convert between text rectangle and client rectangle for text controls: @@ -424,11 +408,13 @@ public: wxCoord *extraSpaceBeyond) const = 0; #endif // wxUSE_TEXTCTRL +#if wxUSE_NOTEBOOK // get the overhang of a selected tab virtual wxSize GetTabIndent() const = 0; // get the padding around the text in a tab virtual wxSize GetTabPadding() const = 0; +#endif // wxUSE_NOTEBOOK #if wxUSE_SLIDER // get the default size of the slider in lesser dimension (i.e. height of a @@ -468,8 +454,14 @@ public: #if wxUSE_STATUSBAR // get the borders around the status bar fields (x and y fields of the - // return value) and also, optionally, the border between the fields - virtual wxSize GetStatusBarBorders(wxCoord *borderBetweenFields) const = 0; + // return value) + virtual wxSize GetStatusBarBorders() const = 0; + + // get the border between the status bar fields + virtual wxCoord GetStatusBarBorderBetweenFields() const = 0; + + // get the mergin between a field and its border + virtual wxSize GetStatusBarFieldMargins() const = 0; #endif // wxUSE_STATUSBAR // get client area rectangle of top level window (i.e. subtract @@ -492,50 +484,6 @@ public: // virtual dtor for any base class virtual ~wxRenderer(); - - -protected: - // draw a frame around rectFrame rectangle but not touching the rectLabel - // one: this is used by DrawFrame() - void StandardDrawFrame(wxDC& dc, - const wxRect& rectFrame, - const wxRect& rectLabel); - - // standard text line drawing: just use DrawText() and highlight the - // selected part - static void StandardDrawTextLine(wxDC& dc, - const wxString& text, - const wxRect& rect, - int selStart, int selEnd, - int flags); - -#if wxUSE_SCROLLBAR - // standard scrollbar hit testing: this assumes that it only has 2 arrows - // and a thumb, so the themes which have more complicated scrollbars (e.g. - // BeOS) can't use this method - static wxRect StandardGetScrollbarRect(const wxScrollBar *scrollbar, - wxScrollBar::Element elem, - int thumbPos, - const wxSize& sizeArrow); - static wxHitTest StandardHitTestScrollbar(const wxScrollBar *scrollbar, - const wxPoint& pt, - const wxSize& sizeArrow); - static wxCoord StandardScrollbarToPixel(const wxScrollBar *scrollbar, - int thumbPos, - const wxSize& sizeArrow); - static int StandardPixelToScrollbar(const wxScrollBar *scrollbar, - wxCoord coord, - const wxSize& sizeArrow); - static wxCoord StandardScrollBarSize(const wxScrollBar *scrollbar, - const wxSize& sizeArrow); - static void StandardScrollBarThumbSize(wxCoord lenBar, - int thumbPos, - int thumbSize, - int range, - wxCoord *thumbStart, - wxCoord *thumbEnd); -#endif // wxUSE_SCROLLBAR - }; // ---------------------------------------------------------------------------- @@ -545,7 +493,7 @@ protected: // will be left to the original renderer // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxDelegateRenderer : public wxRenderer +class WXDLLIMPEXP_CORE wxDelegateRenderer : public wxRenderer { public: wxDelegateRenderer(wxRenderer *renderer) : m_renderer(renderer) { } @@ -556,6 +504,13 @@ public: int flags, wxWindow *window = NULL ) { m_renderer->DrawBackground(dc, col, rect, flags, window ); } + virtual void DrawButtonSurface(wxDC& dc, + const wxColour& col, + const wxRect& rect, + int flags) + { m_renderer->DrawButtonSurface(dc, col, rect, flags); } + virtual void DrawFocusRect(wxWindow* win, wxDC& dc, const wxRect& rect, int flags = 0) + { m_renderer->DrawFocusRect(win, dc, rect, flags); } virtual void DrawLabel(wxDC& dc, const wxString& label, const wxRect& rect, @@ -579,18 +534,18 @@ public: wxBorder border, const wxRect& rect, int flags = 0, - wxRect *rectIn = (wxRect *)NULL) + wxRect *rectIn = NULL) { m_renderer->DrawBorder(dc, border, rect, flags, rectIn); } virtual void DrawTextBorder(wxDC& dc, wxBorder border, const wxRect& rect, int flags = 0, - wxRect *rectIn = (wxRect *)NULL) + wxRect *rectIn = NULL) { m_renderer->DrawTextBorder(dc, border, rect, flags, rectIn); } virtual void DrawButtonBorder(wxDC& dc, const wxRect& rect, int flags = 0, - wxRect *rectIn = (wxRect *)NULL) + wxRect *rectIn = NULL) { m_renderer->DrawButtonBorder(dc, rect, flags, rectIn); } virtual void DrawFrame(wxDC& dc, const wxString& label, @@ -667,6 +622,8 @@ public: int tbarStyle = 0) { m_renderer->DrawToolBarButton(dc, label, bitmap, rect, flags, style, tbarStyle); } #endif // wxUSE_TOOLBAR + +#if wxUSE_TEXTCTRL virtual void DrawTextLine(wxDC& dc, const wxString& text, const wxRect& rect, @@ -676,7 +633,9 @@ public: { m_renderer->DrawTextLine(dc, text, rect, selStart, selEnd, flags); } virtual void DrawLineWrapMark(wxDC& dc, const wxRect& rect) { m_renderer->DrawLineWrapMark(dc, rect); } +#endif // wxUSE_TEXTCTRL +#if wxUSE_NOTEBOOK virtual void DrawTab(wxDC& dc, const wxRect& rect, wxDirection dir, @@ -685,6 +644,7 @@ public: int flags = 0, int accel = -1) { m_renderer->DrawTab(dc, rect, dir, label, bitmap, flags, accel); } +#endif // wxUSE_NOTEBOOK #if wxUSE_SLIDER @@ -779,12 +739,14 @@ public: int flags = 0) { m_renderer->DrawFrameButton(dc, x, y, button, flags); } +#if wxUSE_COMBOBOX virtual void GetComboBitmaps(wxBitmap *bmpNormal, wxBitmap *bmpFocus, wxBitmap *bmpPressed, wxBitmap *bmpDisabled) { m_renderer->GetComboBitmaps(bmpNormal, bmpFocus, bmpPressed, bmpDisabled); } +#endif // wxUSE_COMBOBOX virtual void AdjustSize(wxSize *size, const wxWindow *window) { m_renderer->AdjustSize(size, window); } @@ -796,21 +758,6 @@ public: #if wxUSE_SCROLLBAR virtual wxSize GetScrollbarArrowSize() const { return m_renderer->GetScrollbarArrowSize(); } - virtual wxRect GetScrollbarRect(const wxScrollBar *scrollbar, - wxScrollBar::Element elem, - int thumbPos = -1) const - { return m_renderer->GetScrollbarRect(scrollbar, elem, thumbPos); } - virtual wxCoord GetScrollbarSize(const wxScrollBar *scrollbar) - { return m_renderer->GetScrollbarSize(scrollbar); } - virtual wxHitTest HitTestScrollbar(const wxScrollBar *scrollbar, - const wxPoint& pt) const - { return m_renderer->HitTestScrollbar(scrollbar, pt); } - virtual wxCoord ScrollbarToPixel(const wxScrollBar *scrollbar, - int thumbPos = -1) - { return m_renderer->ScrollbarToPixel(scrollbar, thumbPos); } - virtual int PixelToScrollbar(const wxScrollBar *scrollbar, - wxCoord coord) - { return m_renderer->PixelToScrollbar(scrollbar, coord); } #endif // wxUSE_SCROLLBAR virtual wxCoord GetListboxItemHeight(wxCoord fontHeight) @@ -822,10 +769,12 @@ public: virtual wxCoord GetCheckItemMargin() const { return m_renderer->GetCheckItemMargin(); } +#if wxUSE_TOOLBAR virtual wxSize GetToolBarButtonSize(wxCoord *separator) const { return m_renderer->GetToolBarButtonSize(separator); } virtual wxSize GetToolBarMargin() const { return m_renderer->GetToolBarMargin(); } +#endif // wxUSE_TOOLBAR #if wxUSE_TEXTCTRL virtual wxRect GetTextTotalArea(const wxTextCtrl *text, @@ -837,8 +786,10 @@ public: { return m_renderer->GetTextClientArea(text, rect, extraSpaceBeyond); } #endif // wxUSE_TEXTCTRL +#if wxUSE_NOTEBOOK virtual wxSize GetTabIndent() const { return m_renderer->GetTabIndent(); } virtual wxSize GetTabPadding() const { return m_renderer->GetTabPadding(); } +#endif // wxUSE_NOTEBOOK #if wxUSE_SLIDER virtual wxCoord GetSliderDim() const @@ -869,9 +820,14 @@ public: #endif // wxUSE_MENUS #if wxUSE_STATUSBAR - virtual wxSize GetStatusBarBorders(wxCoord *borderBetweenFields) const - { return m_renderer->GetStatusBarBorders(borderBetweenFields); } + virtual wxSize GetStatusBarBorders() const + { return m_renderer->GetStatusBarBorders(); } + virtual wxCoord GetStatusBarBorderBetweenFields() const + { return m_renderer->GetStatusBarBorderBetweenFields(); } + virtual wxSize GetStatusBarFieldMargins() const + { return m_renderer->GetStatusBarFieldMargins(); } #endif // wxUSE_STATUSBAR + virtual wxRect GetFrameClientArea(const wxRect& rect, int flags) const { return m_renderer->GetFrameClientArea(rect, flags); } virtual wxSize GetFrameTotalSize(const wxSize& clientSize, int flags) const @@ -885,13 +841,13 @@ public: int flags) const { return m_renderer->HitTestFrame(rect, pt, flags); } - virtual void DrawHeaderButton(wxWindow *win, + virtual int DrawHeaderButton(wxWindow *win, wxDC& dc, const wxRect& rect, int flags = 0, - wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE, - wxHeaderButtonParams* params=NULL) - { m_renderer->DrawHeaderButton(win, dc, rect, flags, sortArrow, params); } + wxHeaderSortIconType sortIcon = wxHDR_SORT_ICON_NONE, + wxHeaderButtonParams* params = NULL) + { return m_renderer->DrawHeaderButton(win, dc, rect, flags, sortIcon, params); } virtual void DrawTreeItemButton(wxWindow *win, wxDC& dc, const wxRect& rect, @@ -907,15 +863,16 @@ protected: // OnPaint() // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxControlRenderer +class WXDLLIMPEXP_CORE wxControlRenderer { public: // create a renderer for this dc with this "fundamental" renderer wxControlRenderer(wxWindow *control, wxDC& dc, wxRenderer *renderer); // operations - void DrawLabel(const wxBitmap& bitmap = wxNullBitmap, - wxCoord marginX = 0, wxCoord marginY = 0); + void DrawLabel(); + void DrawButtonLabel(const wxBitmap& bitmap = wxNullBitmap, + wxCoord marginX = 0, wxCoord marginY = 0); #if wxUSE_LISTBOX void DrawItems(const wxListBox *listbox, size_t itemFirst, size_t itemLast);