#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
// wxRenderer: abstract renderers interface
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxRenderer : public wxDelegateRendererNative
+class WXDLLIMPEXP_CORE wxRenderer : public wxDelegateRendererNative
{
public:
// drawing functions
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
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+)
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,
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,
// 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,
const wxBitmap& bitmap = wxNullBitmap,
int flags = 0,
int indexAccel = -1) = 0;
+#endif // wxUSE_NOTEBOOK
#if wxUSE_SLIDER
// 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
// ------------------
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
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:
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
#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
// 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
-
};
// ----------------------------------------------------------------------------
// 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) { }
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,
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,
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,
{ 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,
int flags = 0,
int accel = -1)
{ m_renderer->DrawTab(dc, rect, dir, label, bitmap, flags, accel); }
+#endif // wxUSE_NOTEBOOK
#if wxUSE_SLIDER
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); }
#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)
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,
{ 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
#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
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,
// 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);