X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/77ffb5937e89927b621128789401db8921fe580f..249803fbcd1f73040e4b5457e341d8db2e5cb66e:/include/wx/univ/renderer.h diff --git a/include/wx/univ/renderer.h b/include/wx/univ/renderer.h index f55ed02652..cc0951a31c 100644 --- a/include/wx/univ/renderer.h +++ b/include/wx/univ/renderer.h @@ -6,9 +6,12 @@ // Created: 06.08.00 // RCS-ID: $Id$ // Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWidgets licence +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// +#ifndef _WX_UNIV_RENDERER_H_ +#define _WX_UNIV_RENDERER_H_ + /* wxRenderer class is used to draw all wxWidgets controls. This is an ABC and the look of the application is determined by the concrete derivation of @@ -25,25 +28,29 @@ implementation of the latter or reimplement itself). */ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma interface "renderer.h" -#endif - -#ifndef _WX_UNIV_RENDERER_H_ -#define _WX_UNIV_RENDERER_H_ - #include "wx/renderer.h" +class WXDLLEXPORT wxWindow; class WXDLLEXPORT wxDC; class WXDLLEXPORT wxCheckListBox; -class WXDLLEXPORT wxListBox; -class WXDLLEXPORT wxMenu; -class WXDLLEXPORT wxMenuGeometryInfo; + +#if wxUSE_LISTBOX + class WXDLLEXPORT wxListBox; +#endif // wxUSE_LISTBOX + +#if wxUSE_MENUS + class WXDLLEXPORT wxMenu; + class WXDLLEXPORT wxMenuGeometryInfo; +#endif // wxUSE_MENUS + class WXDLLEXPORT wxScrollBar; -class WXDLLEXPORT wxTextCtrl; -class WXDLLEXPORT wxWindow; + +#if wxUSE_TEXTCTRL + class WXDLLEXPORT wxTextCtrl; +#endif + #if wxUSE_GAUGE -class WXDLLEXPORT wxGauge; + class WXDLLEXPORT wxGauge; #endif // wxUSE_GAUGE #include "wx/string.h" @@ -76,15 +83,17 @@ 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 focus rectangle around the label contained in the given rect + virtual void DrawFocusRect(wxDC& dc, const wxRect& rect) = 0; // draw the label inside the given rectangle with the specified alignment // and optionally emphasize the character with the given index @@ -106,6 +115,7 @@ 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, @@ -115,7 +125,7 @@ public: wxRect *rectIn = (wxRect *)NULL) = 0; // draw text control border (I hate to have a separate method for this but - // it is needed to accomodate GTK+) + // it is needed to accommodate GTK+) virtual void DrawTextBorder(wxDC& dc, wxBorder border, const wxRect& rect, @@ -203,6 +213,7 @@ public: wxAlignment align = wxALIGN_LEFT, int indexAccel = -1) = 0; +#if wxUSE_TOOLBAR // draw a toolbar button (label may be empty, bitmap may be invalid, if // both conditions are true this function draws a separator) virtual void DrawToolBarButton(wxDC& dc, @@ -210,8 +221,11 @@ public: const wxBitmap& bitmap, const wxRect& rect, int flags = 0, - long style = 0) = 0; + long style = 0, + 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, @@ -222,7 +236,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, @@ -231,6 +247,9 @@ public: const wxBitmap& bitmap = wxNullBitmap, int flags = 0, int indexAccel = -1) = 0; +#endif // wxUSE_NOTEBOOK + +#if wxUSE_SLIDER // draw the slider shaft virtual void DrawSliderShaft(wxDC& dc, @@ -258,7 +277,9 @@ public: int step = 1, int flags = 0, long style = 0) = 0; +#endif // wxUSE_SLIDER +#if wxUSE_MENUS // draw a menu bar item virtual void DrawMenuBarItem(wxDC& dc, const wxRect& rect, @@ -282,13 +303,16 @@ public: virtual void DrawMenuSeparator(wxDC& dc, wxCoord y, const wxMenuGeometryInfo& geomInfo) = 0; +#endif // wxUSE_MENUS +#if wxUSE_STATUSBAR // draw a status bar field: wxCONTROL_ISDEFAULT bit in the flags is // interpreted specially and means "draw the status bar grip" here virtual void DrawStatusField(wxDC& dc, const wxRect& rect, const wxString& label, - int flags = 0) = 0; + int flags = 0, int style = 0) = 0; +#endif // wxUSE_STATUSBAR // draw complete frame/dialog titlebar virtual void DrawFrameTitleBar(wxDC& dc, @@ -330,11 +354,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 // ------------------ @@ -353,6 +379,8 @@ public: // the control looks "nice" if it uses the adjusted rectangle virtual void AdjustSize(wxSize *size, const wxWindow *window) = 0; +#if wxUSE_SCROLLBAR + // get the size of a scrollbar arrow virtual wxSize GetScrollbarArrowSize() const = 0; @@ -376,6 +404,8 @@ public: virtual int PixelToScrollbar(const wxScrollBar *scrollbar, wxCoord coord) = 0; +#endif // wxUSE_SCROLLBAR + // get the height of a listbox item from the base font height virtual wxCoord GetListboxItemHeight(wxCoord fontHeight) = 0; @@ -391,6 +421,7 @@ public: // get the margins between/around the toolbar buttons virtual wxSize GetToolBarMargin() const = 0; +#if wxUSE_TEXTCTRL // convert between text rectangle and client rectangle for text controls: // the former is typicall smaller to leave margins around text virtual wxRect GetTextTotalArea(const wxTextCtrl *text, @@ -400,13 +431,17 @@ public: virtual wxRect GetTextClientArea(const wxTextCtrl *text, const wxRect& rectTotal, 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 // horizontal slider or width of a vertical one) virtual wxCoord GetSliderDim() const = 0; @@ -424,10 +459,12 @@ public: virtual wxSize GetSliderThumbSize(const wxRect& rect, int lenThumb, wxOrientation orient) const = 0; +#endif // wxUSE_SLIDER // get the size of one progress bar step (in horz and vertical directions) virtual wxSize GetProgressBarStep() const = 0; +#if wxUSE_MENUS // get the size of rectangle to use in the menubar for the given text rect virtual wxSize GetMenuBarItemSize(const wxSize& sizeText) const = 0; @@ -438,10 +475,13 @@ public: // the returned pointer must be deleted by the caller virtual wxMenuGeometryInfo *GetMenuGeometry(wxWindow *win, const wxMenu& menu) const = 0; +#endif // wxUSE_MENUS +#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; +#endif // wxUSE_STATUSBAR // get client area rectangle of top level window (i.e. subtract // decorations from given rectangle) @@ -463,47 +503,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); - - // 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); }; // ---------------------------------------------------------------------------- @@ -524,6 +523,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(wxDC& dc, const wxRect& rect) + { m_renderer->DrawFocusRect(dc, rect); } virtual void DrawLabel(wxDC& dc, const wxString& label, const wxRect& rect, @@ -625,13 +631,18 @@ public: int indexAccel = -1) { m_renderer->DrawRadioButton(dc, label, bitmap, rect, flags, align, indexAccel); } +#if wxUSE_TOOLBAR virtual void DrawToolBarButton(wxDC& dc, const wxString& label, const wxBitmap& bitmap, const wxRect& rect, int flags = 0, - long style = 0) - { m_renderer->DrawToolBarButton(dc, label, bitmap, rect, flags, style); } + long style = 0, + 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, @@ -641,7 +652,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, @@ -650,6 +663,9 @@ public: int flags = 0, int accel = -1) { m_renderer->DrawTab(dc, rect, dir, label, bitmap, flags, accel); } +#endif // wxUSE_NOTEBOOK + +#if wxUSE_SLIDER virtual void DrawSliderShaft(wxDC& dc, const wxRect& rect, @@ -676,7 +692,9 @@ public: long style = 0) { m_renderer->DrawSliderTicks(dc, rect, lenThumb, orient, start, end, start, flags, style); } +#endif // wxUSE_SLIDER +#if wxUSE_MENUS virtual void DrawMenuBarItem(wxDC& dc, const wxRect& rect, const wxString& label, @@ -697,12 +715,15 @@ public: wxCoord y, const wxMenuGeometryInfo& geomInfo) { m_renderer->DrawMenuSeparator(dc, y, geomInfo); } +#endif // wxUSE_MENUS +#if wxUSE_STATUSBAR virtual void DrawStatusField(wxDC& dc, const wxRect& rect, const wxString& label, - int flags = 0) - { m_renderer->DrawStatusField(dc, rect, label, flags); } + int flags = 0, int style = 0) + { m_renderer->DrawStatusField(dc, rect, label, flags, style); } +#endif // wxUSE_STATUSBAR virtual void DrawFrameTitleBar(wxDC& dc, const wxRect& rect, @@ -737,12 +758,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); } @@ -751,6 +774,7 @@ public: virtual bool AreScrollbarsInsideBorder() const { return m_renderer->AreScrollbarsInsideBorder(); } +#if wxUSE_SCROLLBAR virtual wxSize GetScrollbarArrowSize() const { return m_renderer->GetScrollbarArrowSize(); } virtual wxRect GetScrollbarRect(const wxScrollBar *scrollbar, @@ -768,6 +792,8 @@ public: virtual int PixelToScrollbar(const wxScrollBar *scrollbar, wxCoord coord) { return m_renderer->PixelToScrollbar(scrollbar, coord); } +#endif // wxUSE_SCROLLBAR + virtual wxCoord GetListboxItemHeight(wxCoord fontHeight) { return m_renderer->GetListboxItemHeight(fontHeight); } virtual wxSize GetCheckBitmapSize() const @@ -782,6 +808,7 @@ public: virtual wxSize GetToolBarMargin() const { return m_renderer->GetToolBarMargin(); } +#if wxUSE_TEXTCTRL virtual wxRect GetTextTotalArea(const wxTextCtrl *text, const wxRect& rect) const { return m_renderer->GetTextTotalArea(text, rect); } @@ -789,14 +816,19 @@ public: const wxRect& rect, wxCoord *extraSpaceBeyond) const { 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 { return m_renderer->GetSliderDim(); } virtual wxCoord GetSliderTickLen() const { return m_renderer->GetSliderTickLen(); } + virtual wxRect GetSliderShaftRect(const wxRect& rect, int lenThumb, wxOrientation orient, @@ -806,15 +838,23 @@ public: int lenThumb, wxOrientation orient) const { return m_renderer->GetSliderThumbSize(rect, lenThumb, orient); } +#endif // wxUSE_SLIDER + virtual wxSize GetProgressBarStep() const { return m_renderer->GetProgressBarStep(); } + +#if wxUSE_MENUS virtual wxSize GetMenuBarItemSize(const wxSize& sizeText) const { return m_renderer->GetMenuBarItemSize(sizeText); } virtual wxMenuGeometryInfo *GetMenuGeometry(wxWindow *win, const wxMenu& menu) const { return m_renderer->GetMenuGeometry(win, menu); } +#endif // wxUSE_MENUS + +#if wxUSE_STATUSBAR virtual wxSize GetStatusBarBorders(wxCoord *borderBetweenFields) const { return m_renderer->GetStatusBarBorders(borderBetweenFields); } +#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 @@ -831,8 +871,10 @@ public: virtual void DrawHeaderButton(wxWindow *win, wxDC& dc, const wxRect& rect, - int flags = 0) - { m_renderer->DrawHeaderButton(win, dc, rect, flags); } + int flags = 0, + wxHeaderSortIconType sortIcon = wxHDR_SORT_ICON_NONE, + wxHeaderButtonParams* params = NULL) + { m_renderer->DrawHeaderButton(win, dc, rect, flags, sortIcon, params); } virtual void DrawTreeItemButton(wxWindow *win, wxDC& dc, const wxRect& rect, @@ -894,10 +936,13 @@ public: wxStretch stretch = wxSTRETCH_NOT); private: + +#if wxUSE_LISTBOX // common part of DrawItems() and DrawCheckItems() void DoDrawItems(const wxListBox *listbox, size_t itemFirst, size_t itemLast, - bool isCheckLbox = FALSE); + bool isCheckLbox = false); +#endif // wxUSE_LISTBOX wxWindow *m_window; wxRenderer *m_renderer; @@ -906,4 +951,3 @@ private: }; #endif // _WX_UNIV_RENDERER_H_ -