1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: wx/univ/renderer.h
3 // Purpose: wxRenderer class declaration
4 // Author: Vadim Zeitlin
8 // Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)
9 // Licence: wxWindows licence
10 ///////////////////////////////////////////////////////////////////////////////
12 #ifndef _WX_UNIV_RENDERER_H_
13 #define _WX_UNIV_RENDERER_H_
16 wxRenderer class is used to draw all wxWidgets controls. This is an ABC and
17 the look of the application is determined by the concrete derivation of
18 wxRenderer used in the program.
20 It also contains a few static methods which may be used by the concrete
21 renderers and provide the functionality which is often similar or identical
22 in all renderers (using inheritance here would be more restrictive as the
23 given concrete renderer may need an arbitrary subset of the base class
26 Finally note that wxRenderer supersedes wxRendererNative in wxUniv build and
27 includes the latters functionality (which it may delegate to the generic
28 implementation of the latter or reimplement itself).
31 #include "wx/renderer.h"
33 class WXDLLEXPORT wxWindow
;
34 class WXDLLEXPORT wxDC
;
35 class WXDLLEXPORT wxCheckListBox
;
38 class WXDLLEXPORT wxListBox
;
39 #endif // wxUSE_LISTBOX
42 class WXDLLEXPORT wxMenu
;
43 class WXDLLEXPORT wxMenuGeometryInfo
;
46 class WXDLLEXPORT wxScrollBar
;
49 class WXDLLEXPORT wxTextCtrl
;
53 class WXDLLEXPORT wxGauge
;
56 #include "wx/string.h"
57 #include "wx/gdicmn.h"
59 #include "wx/scrolbar.h" // for wxScrollBar::Element
61 // helper class used by wxMenu-related functions
62 class WXDLLEXPORT wxMenuGeometryInfo
65 // get the total size of the menu
66 virtual wxSize
GetSize() const = 0;
68 virtual ~wxMenuGeometryInfo();
71 // ----------------------------------------------------------------------------
72 // wxRenderer: abstract renderers interface
73 // ----------------------------------------------------------------------------
75 class WXDLLEXPORT wxRenderer
: public wxDelegateRendererNative
81 // draw the controls background
82 virtual void DrawBackground(wxDC
& dc
,
86 wxWindow
*window
= NULL
) = 0;
88 // draw the button surface
89 virtual void DrawButtonSurface(wxDC
& dc
,
95 // draw the focus rectangle around the label contained in the given rect
96 virtual void DrawFocusRect(wxDC
& dc
, const wxRect
& rect
) = 0;
98 // draw the label inside the given rectangle with the specified alignment
99 // and optionally emphasize the character with the given index
100 virtual void DrawLabel(wxDC
& dc
,
101 const wxString
& label
,
104 int alignment
= wxALIGN_LEFT
| wxALIGN_TOP
,
106 wxRect
*rectBounds
= NULL
) = 0;
108 // same but also draw a bitmap if it is valid
109 virtual void DrawButtonLabel(wxDC
& dc
,
110 const wxString
& label
,
111 const wxBitmap
& image
,
114 int alignment
= wxALIGN_LEFT
| wxALIGN_TOP
,
116 wxRect
*rectBounds
= NULL
) = 0;
119 // draw the border and optionally return the rectangle containing the
120 // region inside the border
121 virtual void DrawBorder(wxDC
& dc
,
125 wxRect
*rectIn
= (wxRect
*)NULL
) = 0;
127 // draw text control border (I hate to have a separate method for this but
128 // it is needed to accommodate GTK+)
129 virtual void DrawTextBorder(wxDC
& dc
,
133 wxRect
*rectIn
= (wxRect
*)NULL
) = 0;
135 // draw push button border and return the rectangle left for the label
136 virtual void DrawButtonBorder(wxDC
& dc
,
139 wxRect
*rectIn
= (wxRect
*)NULL
) = 0;
141 // draw a horizontal line
142 virtual void DrawHorizontalLine(wxDC
& dc
,
143 wxCoord y
, wxCoord x1
, wxCoord x2
) = 0;
145 // draw a vertical line
146 virtual void DrawVerticalLine(wxDC
& dc
,
147 wxCoord x
, wxCoord y1
, wxCoord y2
) = 0;
149 // draw a frame with the label (horizontal alignment can be specified)
150 virtual void DrawFrame(wxDC
& dc
,
151 const wxString
& label
,
154 int alignment
= wxALIGN_LEFT
,
155 int indexAccel
= -1) = 0;
157 // draw an arrow in the given direction
158 virtual void DrawArrow(wxDC
& dc
,
163 // draw a scrollbar arrow (may be the same as arrow but may be not)
164 virtual void DrawScrollbarArrow(wxDC
& dc
,
169 // draw the scrollbar thumb
170 virtual void DrawScrollbarThumb(wxDC
& dc
,
171 wxOrientation orient
,
175 // draw a (part of) scrollbar shaft
176 virtual void DrawScrollbarShaft(wxDC
& dc
,
177 wxOrientation orient
,
181 // draw the rectangle in the corner between two scrollbars
182 virtual void DrawScrollCorner(wxDC
& dc
,
183 const wxRect
& rect
) = 0;
185 // draw an item of a wxListBox
186 virtual void DrawItem(wxDC
& dc
,
187 const wxString
& label
,
191 // draw an item of a wxCheckListBox
192 virtual void DrawCheckItem(wxDC
& dc
,
193 const wxString
& label
,
194 const wxBitmap
& bitmap
,
198 // draw a checkbutton (bitmap may be invalid to use default one)
199 virtual void DrawCheckButton(wxDC
& dc
,
200 const wxString
& label
,
201 const wxBitmap
& bitmap
,
204 wxAlignment align
= wxALIGN_LEFT
,
205 int indexAccel
= -1) = 0;
207 // draw a radio button
208 virtual void DrawRadioButton(wxDC
& dc
,
209 const wxString
& label
,
210 const wxBitmap
& bitmap
,
213 wxAlignment align
= wxALIGN_LEFT
,
214 int indexAccel
= -1) = 0;
217 // draw a toolbar button (label may be empty, bitmap may be invalid, if
218 // both conditions are true this function draws a separator)
219 virtual void DrawToolBarButton(wxDC
& dc
,
220 const wxString
& label
,
221 const wxBitmap
& bitmap
,
225 int tbarStyle
= 0) = 0;
226 #endif // wxUSE_TOOLBAR
229 // draw a (part of) line in the text control
230 virtual void DrawTextLine(wxDC
& dc
,
231 const wxString
& text
,
237 // draw a line wrap indicator
238 virtual void DrawLineWrapMark(wxDC
& dc
, const wxRect
& rect
) = 0;
239 #endif // wxUSE_TEXTCTRL
242 // draw a notebook tab
243 virtual void DrawTab(wxDC
& dc
,
246 const wxString
& label
,
247 const wxBitmap
& bitmap
= wxNullBitmap
,
249 int indexAccel
= -1) = 0;
250 #endif // wxUSE_NOTEBOOK
254 // draw the slider shaft
255 virtual void DrawSliderShaft(wxDC
& dc
,
258 wxOrientation orient
,
261 wxRect
*rectShaft
= NULL
) = 0;
263 // draw the slider thumb
264 virtual void DrawSliderThumb(wxDC
& dc
,
266 wxOrientation orient
,
270 // draw the slider ticks
271 virtual void DrawSliderTicks(wxDC
& dc
,
274 wxOrientation orient
,
280 #endif // wxUSE_SLIDER
283 // draw a menu bar item
284 virtual void DrawMenuBarItem(wxDC
& dc
,
286 const wxString
& label
,
288 int indexAccel
= -1) = 0;
290 // draw a menu item (also used for submenus if flags has ISSUBMENU flag)
292 // the geometryInfo is calculated by GetMenuGeometry() function from below
293 virtual void DrawMenuItem(wxDC
& dc
,
295 const wxMenuGeometryInfo
& geometryInfo
,
296 const wxString
& label
,
297 const wxString
& accel
,
298 const wxBitmap
& bitmap
= wxNullBitmap
,
300 int indexAccel
= -1) = 0;
302 // draw a menu bar separator
303 virtual void DrawMenuSeparator(wxDC
& dc
,
305 const wxMenuGeometryInfo
& geomInfo
) = 0;
306 #endif // wxUSE_MENUS
309 // draw a status bar field: wxCONTROL_ISDEFAULT bit in the flags is
310 // interpreted specially and means "draw the status bar grip" here
311 virtual void DrawStatusField(wxDC
& dc
,
313 const wxString
& label
,
314 int flags
= 0, int style
= 0) = 0;
315 #endif // wxUSE_STATUSBAR
317 // draw complete frame/dialog titlebar
318 virtual void DrawFrameTitleBar(wxDC
& dc
,
320 const wxString
& title
,
323 int specialButton
= 0,
324 int specialButtonFlags
= 0) = 0;
326 // draw frame borders
327 virtual void DrawFrameBorder(wxDC
& dc
,
331 // draw frame titlebar background
332 virtual void DrawFrameBackground(wxDC
& dc
,
337 virtual void DrawFrameTitle(wxDC
& dc
,
339 const wxString
& title
,
343 virtual void DrawFrameIcon(wxDC
& dc
,
348 // draw frame buttons
349 virtual void DrawFrameButton(wxDC
& dc
,
350 wxCoord x
, wxCoord y
,
358 // return the bitmaps to use for combobox button
359 virtual void GetComboBitmaps(wxBitmap
*bmpNormal
,
361 wxBitmap
*bmpPressed
,
362 wxBitmap
*bmpDisabled
) = 0;
363 #endif // wxUSE_COMBOBOX
365 // geometry functions
366 // ------------------
368 // get the dimensions of the border: rect.x/y contain the width/height of
369 // the left/top side, width/heigh - of the right/bottom one
370 virtual wxRect
GetBorderDimensions(wxBorder border
) const = 0;
372 // the scrollbars may be drawn either inside the window border or outside
373 // it - this function is used to decide how to draw them
374 virtual bool AreScrollbarsInsideBorder() const = 0;
376 // adjust the size of the control of the given class: for most controls,
377 // this just takes into account the border, but for some (buttons, for
378 // example) it is more complicated - the result being, in any case, that
379 // the control looks "nice" if it uses the adjusted rectangle
380 virtual void AdjustSize(wxSize
*size
, const wxWindow
*window
) = 0;
384 // get the size of a scrollbar arrow
385 virtual wxSize
GetScrollbarArrowSize() const = 0;
387 // gets the bounding box for a scrollbar element for the given (by default
388 // - current) thumb position
389 virtual wxRect
GetScrollbarRect(const wxScrollBar
*scrollbar
,
390 wxScrollBar::Element elem
,
391 int thumbPos
= -1) const = 0;
393 // returns the size of the scrollbar shaft excluding the arrows
394 virtual wxCoord
GetScrollbarSize(const wxScrollBar
*scrollbar
) = 0;
396 // returns one of wxHT_SCROLLBAR_XXX constants
397 virtual wxHitTest
HitTestScrollbar(const wxScrollBar
*scrollbar
,
398 const wxPoint
& pt
) const = 0;
400 // translate the scrollbar position (in logical units) into physical
401 // coordinate (in pixels) and the other way round
402 virtual wxCoord
ScrollbarToPixel(const wxScrollBar
*scrollbar
,
403 int thumbPos
= -1) = 0;
404 virtual int PixelToScrollbar(const wxScrollBar
*scrollbar
,
407 #endif // wxUSE_SCROLLBAR
409 // get the height of a listbox item from the base font height
410 virtual wxCoord
GetListboxItemHeight(wxCoord fontHeight
) = 0;
412 // get the size of a checkbox/radio button bitmap
413 virtual wxSize
GetCheckBitmapSize() const = 0;
414 virtual wxSize
GetRadioBitmapSize() const = 0;
415 virtual wxCoord
GetCheckItemMargin() const = 0;
418 // get the standard size of a toolbar button and also return the size of
419 // a toolbar separator in the provided pointer
420 virtual wxSize
GetToolBarButtonSize(wxCoord
*separator
) const = 0;
422 // get the margins between/around the toolbar buttons
423 virtual wxSize
GetToolBarMargin() const = 0;
424 #endif // wxUSE_TOOLBAR
427 // convert between text rectangle and client rectangle for text controls:
428 // the former is typicall smaller to leave margins around text
429 virtual wxRect
GetTextTotalArea(const wxTextCtrl
*text
,
430 const wxRect
& rectText
) const = 0;
432 // extra space is for line indicators
433 virtual wxRect
GetTextClientArea(const wxTextCtrl
*text
,
434 const wxRect
& rectTotal
,
435 wxCoord
*extraSpaceBeyond
) const = 0;
436 #endif // wxUSE_TEXTCTRL
439 // get the overhang of a selected tab
440 virtual wxSize
GetTabIndent() const = 0;
442 // get the padding around the text in a tab
443 virtual wxSize
GetTabPadding() const = 0;
444 #endif // wxUSE_NOTEBOOK
447 // get the default size of the slider in lesser dimension (i.e. height of a
448 // horizontal slider or width of a vertical one)
449 virtual wxCoord
GetSliderDim() const = 0;
451 // get the length of the slider ticks displayed along side slider
452 virtual wxCoord
GetSliderTickLen() const = 0;
454 // get the slider shaft rect from the total slider rect
455 virtual wxRect
GetSliderShaftRect(const wxRect
& rect
,
457 wxOrientation orient
,
458 long style
= 0) const = 0;
460 // get the size of the slider thumb for the given total slider rect
461 virtual wxSize
GetSliderThumbSize(const wxRect
& rect
,
463 wxOrientation orient
) const = 0;
464 #endif // wxUSE_SLIDER
466 // get the size of one progress bar step (in horz and vertical directions)
467 virtual wxSize
GetProgressBarStep() const = 0;
470 // get the size of rectangle to use in the menubar for the given text rect
471 virtual wxSize
GetMenuBarItemSize(const wxSize
& sizeText
) const = 0;
473 // get the struct storing all layout info needed to draw all menu items
474 // (this can't be calculated for each item separately as they should be
477 // the returned pointer must be deleted by the caller
478 virtual wxMenuGeometryInfo
*GetMenuGeometry(wxWindow
*win
,
479 const wxMenu
& menu
) const = 0;
480 #endif // wxUSE_MENUS
483 // get the borders around the status bar fields (x and y fields of the
485 virtual wxSize
GetStatusBarBorders() const = 0;
487 // get the border between the status bar fields
488 virtual wxCoord
GetStatusBarBorderBetweenFields() const = 0;
490 // get the mergin between a field and its border
491 virtual wxSize
GetStatusBarFieldMargins() const = 0;
492 #endif // wxUSE_STATUSBAR
494 // get client area rectangle of top level window (i.e. subtract
495 // decorations from given rectangle)
496 virtual wxRect
GetFrameClientArea(const wxRect
& rect
, int flags
) const = 0;
498 // get size of whole top level window, given size of its client area size
499 virtual wxSize
GetFrameTotalSize(const wxSize
& clientSize
, int flags
) const = 0;
501 // get the minimal size of top level window
502 virtual wxSize
GetFrameMinSize(int flags
) const = 0;
504 // get titlebar icon size
505 virtual wxSize
GetFrameIconSize() const = 0;
507 // returns one of wxHT_TOPLEVEL_XXX constants
508 virtual int HitTestFrame(const wxRect
& rect
,
510 int flags
= 0) const = 0;
512 // virtual dtor for any base class
513 virtual ~wxRenderer();
516 // ----------------------------------------------------------------------------
517 // wxDelegateRenderer: it is impossible to inherit from any of standard
518 // renderers as their declarations are in private code, but you can use this
519 // class to override only some of the Draw() functions - all the other ones
520 // will be left to the original renderer
521 // ----------------------------------------------------------------------------
523 class WXDLLEXPORT wxDelegateRenderer
: public wxRenderer
526 wxDelegateRenderer(wxRenderer
*renderer
) : m_renderer(renderer
) { }
528 virtual void DrawBackground(wxDC
& dc
,
532 wxWindow
*window
= NULL
)
533 { m_renderer
->DrawBackground(dc
, col
, rect
, flags
, window
); }
534 virtual void DrawButtonSurface(wxDC
& dc
,
538 { m_renderer
->DrawButtonSurface(dc
, col
, rect
, flags
); }
539 virtual void DrawFocusRect(wxDC
& dc
, const wxRect
& rect
)
540 { m_renderer
->DrawFocusRect(dc
, rect
); }
541 virtual void DrawLabel(wxDC
& dc
,
542 const wxString
& label
,
545 int align
= wxALIGN_LEFT
| wxALIGN_TOP
,
547 wxRect
*rectBounds
= NULL
)
548 { m_renderer
->DrawLabel(dc
, label
, rect
,
549 flags
, align
, indexAccel
, rectBounds
); }
550 virtual void DrawButtonLabel(wxDC
& dc
,
551 const wxString
& label
,
552 const wxBitmap
& image
,
555 int align
= wxALIGN_LEFT
| wxALIGN_TOP
,
557 wxRect
*rectBounds
= NULL
)
558 { m_renderer
->DrawButtonLabel(dc
, label
, image
, rect
,
559 flags
, align
, indexAccel
, rectBounds
); }
560 virtual void DrawBorder(wxDC
& dc
,
564 wxRect
*rectIn
= (wxRect
*)NULL
)
565 { m_renderer
->DrawBorder(dc
, border
, rect
, flags
, rectIn
); }
566 virtual void DrawTextBorder(wxDC
& dc
,
570 wxRect
*rectIn
= (wxRect
*)NULL
)
571 { m_renderer
->DrawTextBorder(dc
, border
, rect
, flags
, rectIn
); }
572 virtual void DrawButtonBorder(wxDC
& dc
,
575 wxRect
*rectIn
= (wxRect
*)NULL
)
576 { m_renderer
->DrawButtonBorder(dc
, rect
, flags
, rectIn
); }
577 virtual void DrawFrame(wxDC
& dc
,
578 const wxString
& label
,
581 int align
= wxALIGN_LEFT
,
583 { m_renderer
->DrawFrame(dc
, label
, rect
, flags
, align
, indexAccel
); }
584 virtual void DrawHorizontalLine(wxDC
& dc
,
585 wxCoord y
, wxCoord x1
, wxCoord x2
)
586 { m_renderer
->DrawHorizontalLine(dc
, y
, x1
, x2
); }
587 virtual void DrawVerticalLine(wxDC
& dc
,
588 wxCoord x
, wxCoord y1
, wxCoord y2
)
589 { m_renderer
->DrawVerticalLine(dc
, x
, y1
, y2
); }
590 virtual void DrawArrow(wxDC
& dc
,
594 { m_renderer
->DrawArrow(dc
, dir
, rect
, flags
); }
595 virtual void DrawScrollbarArrow(wxDC
& dc
,
599 { m_renderer
->DrawScrollbarArrow(dc
, dir
, rect
, flags
); }
600 virtual void DrawScrollbarThumb(wxDC
& dc
,
601 wxOrientation orient
,
604 { m_renderer
->DrawScrollbarThumb(dc
, orient
, rect
, flags
); }
605 virtual void DrawScrollbarShaft(wxDC
& dc
,
606 wxOrientation orient
,
609 { m_renderer
->DrawScrollbarShaft(dc
, orient
, rect
, flags
); }
610 virtual void DrawScrollCorner(wxDC
& dc
,
612 { m_renderer
->DrawScrollCorner(dc
, rect
); }
613 virtual void DrawItem(wxDC
& dc
,
614 const wxString
& label
,
617 { m_renderer
->DrawItem(dc
, label
, rect
, flags
); }
618 virtual void DrawCheckItem(wxDC
& dc
,
619 const wxString
& label
,
620 const wxBitmap
& bitmap
,
623 { m_renderer
->DrawCheckItem(dc
, label
, bitmap
, rect
, flags
); }
624 virtual void DrawCheckButton(wxDC
& dc
,
625 const wxString
& label
,
626 const wxBitmap
& bitmap
,
629 wxAlignment align
= wxALIGN_LEFT
,
631 { m_renderer
->DrawCheckButton(dc
, label
, bitmap
, rect
,
632 flags
, align
, indexAccel
); }
633 virtual void DrawRadioButton(wxDC
& dc
,
634 const wxString
& label
,
635 const wxBitmap
& bitmap
,
638 wxAlignment align
= wxALIGN_LEFT
,
640 { m_renderer
->DrawRadioButton(dc
, label
, bitmap
, rect
,
641 flags
, align
, indexAccel
); }
643 virtual void DrawToolBarButton(wxDC
& dc
,
644 const wxString
& label
,
645 const wxBitmap
& bitmap
,
650 { m_renderer
->DrawToolBarButton(dc
, label
, bitmap
, rect
, flags
, style
, tbarStyle
); }
651 #endif // wxUSE_TOOLBAR
654 virtual void DrawTextLine(wxDC
& dc
,
655 const wxString
& text
,
660 { m_renderer
->DrawTextLine(dc
, text
, rect
, selStart
, selEnd
, flags
); }
661 virtual void DrawLineWrapMark(wxDC
& dc
, const wxRect
& rect
)
662 { m_renderer
->DrawLineWrapMark(dc
, rect
); }
663 #endif // wxUSE_TEXTCTRL
666 virtual void DrawTab(wxDC
& dc
,
669 const wxString
& label
,
670 const wxBitmap
& bitmap
= wxNullBitmap
,
673 { m_renderer
->DrawTab(dc
, rect
, dir
, label
, bitmap
, flags
, accel
); }
674 #endif // wxUSE_NOTEBOOK
678 virtual void DrawSliderShaft(wxDC
& dc
,
681 wxOrientation orient
,
684 wxRect
*rectShaft
= NULL
)
685 { m_renderer
->DrawSliderShaft(dc
, rect
, lenThumb
, orient
, flags
, style
, rectShaft
); }
686 virtual void DrawSliderThumb(wxDC
& dc
,
688 wxOrientation orient
,
691 { m_renderer
->DrawSliderThumb(dc
, rect
, orient
, flags
, style
); }
692 virtual void DrawSliderTicks(wxDC
& dc
,
695 wxOrientation orient
,
698 int WXUNUSED(step
) = 1,
701 { m_renderer
->DrawSliderTicks(dc
, rect
, lenThumb
, orient
,
702 start
, end
, start
, flags
, style
); }
703 #endif // wxUSE_SLIDER
706 virtual void DrawMenuBarItem(wxDC
& dc
,
708 const wxString
& label
,
711 { m_renderer
->DrawMenuBarItem(dc
, rect
, label
, flags
, indexAccel
); }
712 virtual void DrawMenuItem(wxDC
& dc
,
714 const wxMenuGeometryInfo
& gi
,
715 const wxString
& label
,
716 const wxString
& accel
,
717 const wxBitmap
& bitmap
= wxNullBitmap
,
720 { m_renderer
->DrawMenuItem(dc
, y
, gi
, label
, accel
,
721 bitmap
, flags
, indexAccel
); }
722 virtual void DrawMenuSeparator(wxDC
& dc
,
724 const wxMenuGeometryInfo
& geomInfo
)
725 { m_renderer
->DrawMenuSeparator(dc
, y
, geomInfo
); }
726 #endif // wxUSE_MENUS
729 virtual void DrawStatusField(wxDC
& dc
,
731 const wxString
& label
,
732 int flags
= 0, int style
= 0)
733 { m_renderer
->DrawStatusField(dc
, rect
, label
, flags
, style
); }
734 #endif // wxUSE_STATUSBAR
736 virtual void DrawFrameTitleBar(wxDC
& dc
,
738 const wxString
& title
,
741 int specialButton
= 0,
742 int specialButtonFlag
= 0)
743 { m_renderer
->DrawFrameTitleBar(dc
, rect
, title
, icon
, flags
,
744 specialButton
, specialButtonFlag
); }
745 virtual void DrawFrameBorder(wxDC
& dc
,
748 { m_renderer
->DrawFrameBorder(dc
, rect
, flags
); }
749 virtual void DrawFrameBackground(wxDC
& dc
,
752 { m_renderer
->DrawFrameBackground(dc
, rect
, flags
); }
753 virtual void DrawFrameTitle(wxDC
& dc
,
755 const wxString
& title
,
757 { m_renderer
->DrawFrameTitle(dc
, rect
, title
, flags
); }
758 virtual void DrawFrameIcon(wxDC
& dc
,
762 { m_renderer
->DrawFrameIcon(dc
, rect
, icon
, flags
); }
763 virtual void DrawFrameButton(wxDC
& dc
,
764 wxCoord x
, wxCoord y
,
767 { m_renderer
->DrawFrameButton(dc
, x
, y
, button
, flags
); }
770 virtual void GetComboBitmaps(wxBitmap
*bmpNormal
,
772 wxBitmap
*bmpPressed
,
773 wxBitmap
*bmpDisabled
)
774 { m_renderer
->GetComboBitmaps(bmpNormal
, bmpFocus
,
775 bmpPressed
, bmpDisabled
); }
776 #endif // wxUSE_COMBOBOX
778 virtual void AdjustSize(wxSize
*size
, const wxWindow
*window
)
779 { m_renderer
->AdjustSize(size
, window
); }
780 virtual wxRect
GetBorderDimensions(wxBorder border
) const
781 { return m_renderer
->GetBorderDimensions(border
); }
782 virtual bool AreScrollbarsInsideBorder() const
783 { return m_renderer
->AreScrollbarsInsideBorder(); }
786 virtual wxSize
GetScrollbarArrowSize() const
787 { return m_renderer
->GetScrollbarArrowSize(); }
788 virtual wxRect
GetScrollbarRect(const wxScrollBar
*scrollbar
,
789 wxScrollBar::Element elem
,
790 int thumbPos
= -1) const
791 { return m_renderer
->GetScrollbarRect(scrollbar
, elem
, thumbPos
); }
792 virtual wxCoord
GetScrollbarSize(const wxScrollBar
*scrollbar
)
793 { return m_renderer
->GetScrollbarSize(scrollbar
); }
794 virtual wxHitTest
HitTestScrollbar(const wxScrollBar
*scrollbar
,
795 const wxPoint
& pt
) const
796 { return m_renderer
->HitTestScrollbar(scrollbar
, pt
); }
797 virtual wxCoord
ScrollbarToPixel(const wxScrollBar
*scrollbar
,
799 { return m_renderer
->ScrollbarToPixel(scrollbar
, thumbPos
); }
800 virtual int PixelToScrollbar(const wxScrollBar
*scrollbar
,
802 { return m_renderer
->PixelToScrollbar(scrollbar
, coord
); }
803 #endif // wxUSE_SCROLLBAR
805 virtual wxCoord
GetListboxItemHeight(wxCoord fontHeight
)
806 { return m_renderer
->GetListboxItemHeight(fontHeight
); }
807 virtual wxSize
GetCheckBitmapSize() const
808 { return m_renderer
->GetCheckBitmapSize(); }
809 virtual wxSize
GetRadioBitmapSize() const
810 { return m_renderer
->GetRadioBitmapSize(); }
811 virtual wxCoord
GetCheckItemMargin() const
812 { return m_renderer
->GetCheckItemMargin(); }
815 virtual wxSize
GetToolBarButtonSize(wxCoord
*separator
) const
816 { return m_renderer
->GetToolBarButtonSize(separator
); }
817 virtual wxSize
GetToolBarMargin() const
818 { return m_renderer
->GetToolBarMargin(); }
819 #endif // wxUSE_TOOLBAR
822 virtual wxRect
GetTextTotalArea(const wxTextCtrl
*text
,
823 const wxRect
& rect
) const
824 { return m_renderer
->GetTextTotalArea(text
, rect
); }
825 virtual wxRect
GetTextClientArea(const wxTextCtrl
*text
,
827 wxCoord
*extraSpaceBeyond
) const
828 { return m_renderer
->GetTextClientArea(text
, rect
, extraSpaceBeyond
); }
829 #endif // wxUSE_TEXTCTRL
832 virtual wxSize
GetTabIndent() const { return m_renderer
->GetTabIndent(); }
833 virtual wxSize
GetTabPadding() const { return m_renderer
->GetTabPadding(); }
834 #endif // wxUSE_NOTEBOOK
837 virtual wxCoord
GetSliderDim() const
838 { return m_renderer
->GetSliderDim(); }
839 virtual wxCoord
GetSliderTickLen() const
840 { return m_renderer
->GetSliderTickLen(); }
842 virtual wxRect
GetSliderShaftRect(const wxRect
& rect
,
844 wxOrientation orient
,
845 long style
= 0) const
846 { return m_renderer
->GetSliderShaftRect(rect
, lenThumb
, orient
, style
); }
847 virtual wxSize
GetSliderThumbSize(const wxRect
& rect
,
849 wxOrientation orient
) const
850 { return m_renderer
->GetSliderThumbSize(rect
, lenThumb
, orient
); }
851 #endif // wxUSE_SLIDER
853 virtual wxSize
GetProgressBarStep() const
854 { return m_renderer
->GetProgressBarStep(); }
857 virtual wxSize
GetMenuBarItemSize(const wxSize
& sizeText
) const
858 { return m_renderer
->GetMenuBarItemSize(sizeText
); }
859 virtual wxMenuGeometryInfo
*GetMenuGeometry(wxWindow
*win
,
860 const wxMenu
& menu
) const
861 { return m_renderer
->GetMenuGeometry(win
, menu
); }
862 #endif // wxUSE_MENUS
865 virtual wxSize
GetStatusBarBorders() const
866 { return m_renderer
->GetStatusBarBorders(); }
867 virtual wxCoord
GetStatusBarBorderBetweenFields() const
868 { return m_renderer
->GetStatusBarBorderBetweenFields(); }
869 virtual wxSize
GetStatusBarFieldMargins() const
870 { return m_renderer
->GetStatusBarFieldMargins(); }
871 #endif // wxUSE_STATUSBAR
873 virtual wxRect
GetFrameClientArea(const wxRect
& rect
, int flags
) const
874 { return m_renderer
->GetFrameClientArea(rect
, flags
); }
875 virtual wxSize
GetFrameTotalSize(const wxSize
& clientSize
, int flags
) const
876 { return m_renderer
->GetFrameTotalSize(clientSize
, flags
); }
877 virtual wxSize
GetFrameMinSize(int flags
) const
878 { return m_renderer
->GetFrameMinSize(flags
); }
879 virtual wxSize
GetFrameIconSize() const
880 { return m_renderer
->GetFrameIconSize(); }
881 virtual int HitTestFrame(const wxRect
& rect
,
884 { return m_renderer
->HitTestFrame(rect
, pt
, flags
); }
886 virtual void DrawHeaderButton(wxWindow
*win
,
890 wxHeaderSortIconType sortIcon
= wxHDR_SORT_ICON_NONE
,
891 wxHeaderButtonParams
* params
= NULL
)
892 { m_renderer
->DrawHeaderButton(win
, dc
, rect
, flags
, sortIcon
, params
); }
893 virtual void DrawTreeItemButton(wxWindow
*win
,
897 { m_renderer
->DrawTreeItemButton(win
, dc
, rect
, flags
); }
900 wxRenderer
*m_renderer
;
903 // ----------------------------------------------------------------------------
904 // wxControlRenderer: wraps the wxRenderer functions in a form easy to use from
906 // ----------------------------------------------------------------------------
908 class WXDLLEXPORT wxControlRenderer
911 // create a renderer for this dc with this "fundamental" renderer
912 wxControlRenderer(wxWindow
*control
, wxDC
& dc
, wxRenderer
*renderer
);
915 void DrawLabel(const wxBitmap
& bitmap
= wxNullBitmap
,
916 wxCoord marginX
= 0, wxCoord marginY
= 0);
918 void DrawItems(const wxListBox
*listbox
,
919 size_t itemFirst
, size_t itemLast
);
920 #endif // wxUSE_LISTBOX
921 #if wxUSE_CHECKLISTBOX
922 void DrawCheckItems(const wxCheckListBox
*listbox
,
923 size_t itemFirst
, size_t itemLast
);
924 #endif // wxUSE_CHECKLISTBOX
925 void DrawButtonBorder();
926 // the line must be either horizontal or vertical
927 void DrawLine(wxCoord x1
, wxCoord y1
, wxCoord x2
, wxCoord y2
);
929 void DrawBitmap(const wxBitmap
& bitmap
);
930 void DrawBackgroundBitmap();
931 void DrawScrollbar(const wxScrollBar
*scrollbar
, int thumbPosOld
);
933 void DrawProgressBar(const wxGauge
*gauge
);
934 #endif // wxUSE_GAUGE
937 wxWindow
*GetWindow() const { return m_window
; }
938 wxRenderer
*GetRenderer() const { return m_renderer
; }
940 wxDC
& GetDC() { return m_dc
; }
942 const wxRect
& GetRect() const { return m_rect
; }
943 wxRect
& GetRect() { return m_rect
; }
946 static void DrawBitmap(wxDC
&dc
,
947 const wxBitmap
& bitmap
,
949 int alignment
= wxALIGN_CENTRE
|
950 wxALIGN_CENTRE_VERTICAL
,
951 wxStretch stretch
= wxSTRETCH_NOT
);
956 // common part of DrawItems() and DrawCheckItems()
957 void DoDrawItems(const wxListBox
*listbox
,
958 size_t itemFirst
, size_t itemLast
,
959 bool isCheckLbox
= false);
960 #endif // wxUSE_LISTBOX
963 wxRenderer
*m_renderer
;
968 #endif // _WX_UNIV_RENDERER_H_