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
484 // return value) and also, optionally, the border between the fields
485 virtual wxSize
GetStatusBarBorders(wxCoord
*borderBetweenFields
) const = 0;
486 #endif // wxUSE_STATUSBAR
488 // get client area rectangle of top level window (i.e. subtract
489 // decorations from given rectangle)
490 virtual wxRect
GetFrameClientArea(const wxRect
& rect
, int flags
) const = 0;
492 // get size of whole top level window, given size of its client area size
493 virtual wxSize
GetFrameTotalSize(const wxSize
& clientSize
, int flags
) const = 0;
495 // get the minimal size of top level window
496 virtual wxSize
GetFrameMinSize(int flags
) const = 0;
498 // get titlebar icon size
499 virtual wxSize
GetFrameIconSize() const = 0;
501 // returns one of wxHT_TOPLEVEL_XXX constants
502 virtual int HitTestFrame(const wxRect
& rect
,
504 int flags
= 0) const = 0;
506 // virtual dtor for any base class
507 virtual ~wxRenderer();
510 // ----------------------------------------------------------------------------
511 // wxDelegateRenderer: it is impossible to inherit from any of standard
512 // renderers as their declarations are in private code, but you can use this
513 // class to override only some of the Draw() functions - all the other ones
514 // will be left to the original renderer
515 // ----------------------------------------------------------------------------
517 class WXDLLEXPORT wxDelegateRenderer
: public wxRenderer
520 wxDelegateRenderer(wxRenderer
*renderer
) : m_renderer(renderer
) { }
522 virtual void DrawBackground(wxDC
& dc
,
526 wxWindow
*window
= NULL
)
527 { m_renderer
->DrawBackground(dc
, col
, rect
, flags
, window
); }
528 virtual void DrawButtonSurface(wxDC
& dc
,
532 { m_renderer
->DrawButtonSurface(dc
, col
, rect
, flags
); }
533 virtual void DrawFocusRect(wxDC
& dc
, const wxRect
& rect
)
534 { m_renderer
->DrawFocusRect(dc
, rect
); }
535 virtual void DrawLabel(wxDC
& dc
,
536 const wxString
& label
,
539 int align
= wxALIGN_LEFT
| wxALIGN_TOP
,
541 wxRect
*rectBounds
= NULL
)
542 { m_renderer
->DrawLabel(dc
, label
, rect
,
543 flags
, align
, indexAccel
, rectBounds
); }
544 virtual void DrawButtonLabel(wxDC
& dc
,
545 const wxString
& label
,
546 const wxBitmap
& image
,
549 int align
= wxALIGN_LEFT
| wxALIGN_TOP
,
551 wxRect
*rectBounds
= NULL
)
552 { m_renderer
->DrawButtonLabel(dc
, label
, image
, rect
,
553 flags
, align
, indexAccel
, rectBounds
); }
554 virtual void DrawBorder(wxDC
& dc
,
558 wxRect
*rectIn
= (wxRect
*)NULL
)
559 { m_renderer
->DrawBorder(dc
, border
, rect
, flags
, rectIn
); }
560 virtual void DrawTextBorder(wxDC
& dc
,
564 wxRect
*rectIn
= (wxRect
*)NULL
)
565 { m_renderer
->DrawTextBorder(dc
, border
, rect
, flags
, rectIn
); }
566 virtual void DrawButtonBorder(wxDC
& dc
,
569 wxRect
*rectIn
= (wxRect
*)NULL
)
570 { m_renderer
->DrawButtonBorder(dc
, rect
, flags
, rectIn
); }
571 virtual void DrawFrame(wxDC
& dc
,
572 const wxString
& label
,
575 int align
= wxALIGN_LEFT
,
577 { m_renderer
->DrawFrame(dc
, label
, rect
, flags
, align
, indexAccel
); }
578 virtual void DrawHorizontalLine(wxDC
& dc
,
579 wxCoord y
, wxCoord x1
, wxCoord x2
)
580 { m_renderer
->DrawHorizontalLine(dc
, y
, x1
, x2
); }
581 virtual void DrawVerticalLine(wxDC
& dc
,
582 wxCoord x
, wxCoord y1
, wxCoord y2
)
583 { m_renderer
->DrawVerticalLine(dc
, x
, y1
, y2
); }
584 virtual void DrawArrow(wxDC
& dc
,
588 { m_renderer
->DrawArrow(dc
, dir
, rect
, flags
); }
589 virtual void DrawScrollbarArrow(wxDC
& dc
,
593 { m_renderer
->DrawScrollbarArrow(dc
, dir
, rect
, flags
); }
594 virtual void DrawScrollbarThumb(wxDC
& dc
,
595 wxOrientation orient
,
598 { m_renderer
->DrawScrollbarThumb(dc
, orient
, rect
, flags
); }
599 virtual void DrawScrollbarShaft(wxDC
& dc
,
600 wxOrientation orient
,
603 { m_renderer
->DrawScrollbarShaft(dc
, orient
, rect
, flags
); }
604 virtual void DrawScrollCorner(wxDC
& dc
,
606 { m_renderer
->DrawScrollCorner(dc
, rect
); }
607 virtual void DrawItem(wxDC
& dc
,
608 const wxString
& label
,
611 { m_renderer
->DrawItem(dc
, label
, rect
, flags
); }
612 virtual void DrawCheckItem(wxDC
& dc
,
613 const wxString
& label
,
614 const wxBitmap
& bitmap
,
617 { m_renderer
->DrawCheckItem(dc
, label
, bitmap
, rect
, flags
); }
618 virtual void DrawCheckButton(wxDC
& dc
,
619 const wxString
& label
,
620 const wxBitmap
& bitmap
,
623 wxAlignment align
= wxALIGN_LEFT
,
625 { m_renderer
->DrawCheckButton(dc
, label
, bitmap
, rect
,
626 flags
, align
, indexAccel
); }
627 virtual void DrawRadioButton(wxDC
& dc
,
628 const wxString
& label
,
629 const wxBitmap
& bitmap
,
632 wxAlignment align
= wxALIGN_LEFT
,
634 { m_renderer
->DrawRadioButton(dc
, label
, bitmap
, rect
,
635 flags
, align
, indexAccel
); }
637 virtual void DrawToolBarButton(wxDC
& dc
,
638 const wxString
& label
,
639 const wxBitmap
& bitmap
,
644 { m_renderer
->DrawToolBarButton(dc
, label
, bitmap
, rect
, flags
, style
, tbarStyle
); }
645 #endif // wxUSE_TOOLBAR
648 virtual void DrawTextLine(wxDC
& dc
,
649 const wxString
& text
,
654 { m_renderer
->DrawTextLine(dc
, text
, rect
, selStart
, selEnd
, flags
); }
655 virtual void DrawLineWrapMark(wxDC
& dc
, const wxRect
& rect
)
656 { m_renderer
->DrawLineWrapMark(dc
, rect
); }
657 #endif // wxUSE_TEXTCTRL
660 virtual void DrawTab(wxDC
& dc
,
663 const wxString
& label
,
664 const wxBitmap
& bitmap
= wxNullBitmap
,
667 { m_renderer
->DrawTab(dc
, rect
, dir
, label
, bitmap
, flags
, accel
); }
668 #endif // wxUSE_NOTEBOOK
672 virtual void DrawSliderShaft(wxDC
& dc
,
675 wxOrientation orient
,
678 wxRect
*rectShaft
= NULL
)
679 { m_renderer
->DrawSliderShaft(dc
, rect
, lenThumb
, orient
, flags
, style
, rectShaft
); }
680 virtual void DrawSliderThumb(wxDC
& dc
,
682 wxOrientation orient
,
685 { m_renderer
->DrawSliderThumb(dc
, rect
, orient
, flags
, style
); }
686 virtual void DrawSliderTicks(wxDC
& dc
,
689 wxOrientation orient
,
692 int WXUNUSED(step
) = 1,
695 { m_renderer
->DrawSliderTicks(dc
, rect
, lenThumb
, orient
,
696 start
, end
, start
, flags
, style
); }
697 #endif // wxUSE_SLIDER
700 virtual void DrawMenuBarItem(wxDC
& dc
,
702 const wxString
& label
,
705 { m_renderer
->DrawMenuBarItem(dc
, rect
, label
, flags
, indexAccel
); }
706 virtual void DrawMenuItem(wxDC
& dc
,
708 const wxMenuGeometryInfo
& gi
,
709 const wxString
& label
,
710 const wxString
& accel
,
711 const wxBitmap
& bitmap
= wxNullBitmap
,
714 { m_renderer
->DrawMenuItem(dc
, y
, gi
, label
, accel
,
715 bitmap
, flags
, indexAccel
); }
716 virtual void DrawMenuSeparator(wxDC
& dc
,
718 const wxMenuGeometryInfo
& geomInfo
)
719 { m_renderer
->DrawMenuSeparator(dc
, y
, geomInfo
); }
720 #endif // wxUSE_MENUS
723 virtual void DrawStatusField(wxDC
& dc
,
725 const wxString
& label
,
726 int flags
= 0, int style
= 0)
727 { m_renderer
->DrawStatusField(dc
, rect
, label
, flags
, style
); }
728 #endif // wxUSE_STATUSBAR
730 virtual void DrawFrameTitleBar(wxDC
& dc
,
732 const wxString
& title
,
735 int specialButton
= 0,
736 int specialButtonFlag
= 0)
737 { m_renderer
->DrawFrameTitleBar(dc
, rect
, title
, icon
, flags
,
738 specialButton
, specialButtonFlag
); }
739 virtual void DrawFrameBorder(wxDC
& dc
,
742 { m_renderer
->DrawFrameBorder(dc
, rect
, flags
); }
743 virtual void DrawFrameBackground(wxDC
& dc
,
746 { m_renderer
->DrawFrameBackground(dc
, rect
, flags
); }
747 virtual void DrawFrameTitle(wxDC
& dc
,
749 const wxString
& title
,
751 { m_renderer
->DrawFrameTitle(dc
, rect
, title
, flags
); }
752 virtual void DrawFrameIcon(wxDC
& dc
,
756 { m_renderer
->DrawFrameIcon(dc
, rect
, icon
, flags
); }
757 virtual void DrawFrameButton(wxDC
& dc
,
758 wxCoord x
, wxCoord y
,
761 { m_renderer
->DrawFrameButton(dc
, x
, y
, button
, flags
); }
764 virtual void GetComboBitmaps(wxBitmap
*bmpNormal
,
766 wxBitmap
*bmpPressed
,
767 wxBitmap
*bmpDisabled
)
768 { m_renderer
->GetComboBitmaps(bmpNormal
, bmpFocus
,
769 bmpPressed
, bmpDisabled
); }
770 #endif // wxUSE_COMBOBOX
772 virtual void AdjustSize(wxSize
*size
, const wxWindow
*window
)
773 { m_renderer
->AdjustSize(size
, window
); }
774 virtual wxRect
GetBorderDimensions(wxBorder border
) const
775 { return m_renderer
->GetBorderDimensions(border
); }
776 virtual bool AreScrollbarsInsideBorder() const
777 { return m_renderer
->AreScrollbarsInsideBorder(); }
780 virtual wxSize
GetScrollbarArrowSize() const
781 { return m_renderer
->GetScrollbarArrowSize(); }
782 virtual wxRect
GetScrollbarRect(const wxScrollBar
*scrollbar
,
783 wxScrollBar::Element elem
,
784 int thumbPos
= -1) const
785 { return m_renderer
->GetScrollbarRect(scrollbar
, elem
, thumbPos
); }
786 virtual wxCoord
GetScrollbarSize(const wxScrollBar
*scrollbar
)
787 { return m_renderer
->GetScrollbarSize(scrollbar
); }
788 virtual wxHitTest
HitTestScrollbar(const wxScrollBar
*scrollbar
,
789 const wxPoint
& pt
) const
790 { return m_renderer
->HitTestScrollbar(scrollbar
, pt
); }
791 virtual wxCoord
ScrollbarToPixel(const wxScrollBar
*scrollbar
,
793 { return m_renderer
->ScrollbarToPixel(scrollbar
, thumbPos
); }
794 virtual int PixelToScrollbar(const wxScrollBar
*scrollbar
,
796 { return m_renderer
->PixelToScrollbar(scrollbar
, coord
); }
797 #endif // wxUSE_SCROLLBAR
799 virtual wxCoord
GetListboxItemHeight(wxCoord fontHeight
)
800 { return m_renderer
->GetListboxItemHeight(fontHeight
); }
801 virtual wxSize
GetCheckBitmapSize() const
802 { return m_renderer
->GetCheckBitmapSize(); }
803 virtual wxSize
GetRadioBitmapSize() const
804 { return m_renderer
->GetRadioBitmapSize(); }
805 virtual wxCoord
GetCheckItemMargin() const
806 { return m_renderer
->GetCheckItemMargin(); }
809 virtual wxSize
GetToolBarButtonSize(wxCoord
*separator
) const
810 { return m_renderer
->GetToolBarButtonSize(separator
); }
811 virtual wxSize
GetToolBarMargin() const
812 { return m_renderer
->GetToolBarMargin(); }
813 #endif // wxUSE_TOOLBAR
816 virtual wxRect
GetTextTotalArea(const wxTextCtrl
*text
,
817 const wxRect
& rect
) const
818 { return m_renderer
->GetTextTotalArea(text
, rect
); }
819 virtual wxRect
GetTextClientArea(const wxTextCtrl
*text
,
821 wxCoord
*extraSpaceBeyond
) const
822 { return m_renderer
->GetTextClientArea(text
, rect
, extraSpaceBeyond
); }
823 #endif // wxUSE_TEXTCTRL
826 virtual wxSize
GetTabIndent() const { return m_renderer
->GetTabIndent(); }
827 virtual wxSize
GetTabPadding() const { return m_renderer
->GetTabPadding(); }
828 #endif // wxUSE_NOTEBOOK
831 virtual wxCoord
GetSliderDim() const
832 { return m_renderer
->GetSliderDim(); }
833 virtual wxCoord
GetSliderTickLen() const
834 { return m_renderer
->GetSliderTickLen(); }
836 virtual wxRect
GetSliderShaftRect(const wxRect
& rect
,
838 wxOrientation orient
,
839 long style
= 0) const
840 { return m_renderer
->GetSliderShaftRect(rect
, lenThumb
, orient
, style
); }
841 virtual wxSize
GetSliderThumbSize(const wxRect
& rect
,
843 wxOrientation orient
) const
844 { return m_renderer
->GetSliderThumbSize(rect
, lenThumb
, orient
); }
845 #endif // wxUSE_SLIDER
847 virtual wxSize
GetProgressBarStep() const
848 { return m_renderer
->GetProgressBarStep(); }
851 virtual wxSize
GetMenuBarItemSize(const wxSize
& sizeText
) const
852 { return m_renderer
->GetMenuBarItemSize(sizeText
); }
853 virtual wxMenuGeometryInfo
*GetMenuGeometry(wxWindow
*win
,
854 const wxMenu
& menu
) const
855 { return m_renderer
->GetMenuGeometry(win
, menu
); }
856 #endif // wxUSE_MENUS
859 virtual wxSize
GetStatusBarBorders(wxCoord
*borderBetweenFields
) const
860 { return m_renderer
->GetStatusBarBorders(borderBetweenFields
); }
861 #endif // wxUSE_STATUSBAR
862 virtual wxRect
GetFrameClientArea(const wxRect
& rect
, int flags
) const
863 { return m_renderer
->GetFrameClientArea(rect
, flags
); }
864 virtual wxSize
GetFrameTotalSize(const wxSize
& clientSize
, int flags
) const
865 { return m_renderer
->GetFrameTotalSize(clientSize
, flags
); }
866 virtual wxSize
GetFrameMinSize(int flags
) const
867 { return m_renderer
->GetFrameMinSize(flags
); }
868 virtual wxSize
GetFrameIconSize() const
869 { return m_renderer
->GetFrameIconSize(); }
870 virtual int HitTestFrame(const wxRect
& rect
,
873 { return m_renderer
->HitTestFrame(rect
, pt
, flags
); }
875 virtual void DrawHeaderButton(wxWindow
*win
,
879 wxHeaderSortIconType sortIcon
= wxHDR_SORT_ICON_NONE
,
880 wxHeaderButtonParams
* params
= NULL
)
881 { m_renderer
->DrawHeaderButton(win
, dc
, rect
, flags
, sortIcon
, params
); }
882 virtual void DrawTreeItemButton(wxWindow
*win
,
886 { m_renderer
->DrawTreeItemButton(win
, dc
, rect
, flags
); }
889 wxRenderer
*m_renderer
;
892 // ----------------------------------------------------------------------------
893 // wxControlRenderer: wraps the wxRenderer functions in a form easy to use from
895 // ----------------------------------------------------------------------------
897 class WXDLLEXPORT wxControlRenderer
900 // create a renderer for this dc with this "fundamental" renderer
901 wxControlRenderer(wxWindow
*control
, wxDC
& dc
, wxRenderer
*renderer
);
904 void DrawLabel(const wxBitmap
& bitmap
= wxNullBitmap
,
905 wxCoord marginX
= 0, wxCoord marginY
= 0);
907 void DrawItems(const wxListBox
*listbox
,
908 size_t itemFirst
, size_t itemLast
);
909 #endif // wxUSE_LISTBOX
910 #if wxUSE_CHECKLISTBOX
911 void DrawCheckItems(const wxCheckListBox
*listbox
,
912 size_t itemFirst
, size_t itemLast
);
913 #endif // wxUSE_CHECKLISTBOX
914 void DrawButtonBorder();
915 // the line must be either horizontal or vertical
916 void DrawLine(wxCoord x1
, wxCoord y1
, wxCoord x2
, wxCoord y2
);
918 void DrawBitmap(const wxBitmap
& bitmap
);
919 void DrawBackgroundBitmap();
920 void DrawScrollbar(const wxScrollBar
*scrollbar
, int thumbPosOld
);
922 void DrawProgressBar(const wxGauge
*gauge
);
923 #endif // wxUSE_GAUGE
926 wxWindow
*GetWindow() const { return m_window
; }
927 wxRenderer
*GetRenderer() const { return m_renderer
; }
929 wxDC
& GetDC() { return m_dc
; }
931 const wxRect
& GetRect() const { return m_rect
; }
932 wxRect
& GetRect() { return m_rect
; }
935 static void DrawBitmap(wxDC
&dc
,
936 const wxBitmap
& bitmap
,
938 int alignment
= wxALIGN_CENTRE
|
939 wxALIGN_CENTRE_VERTICAL
,
940 wxStretch stretch
= wxSTRETCH_NOT
);
945 // common part of DrawItems() and DrawCheckItems()
946 void DoDrawItems(const wxListBox
*listbox
,
947 size_t itemFirst
, size_t itemLast
,
948 bool isCheckLbox
= false);
949 #endif // wxUSE_LISTBOX
952 wxRenderer
*m_renderer
;
957 #endif // _WX_UNIV_RENDERER_H_