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 license
10 ///////////////////////////////////////////////////////////////////////////////
13 wxRenderer class is used to draw all wxWindows controls. This is an ABC and
14 the look of the application is determined by the concrete derivation of
15 wxRenderer used in the program.
17 It also contains a few static methods which may be used by the concrete
18 renderers and provide the functionality which is often similar or identical
19 in all renderers (using inheritance here would be more restrictive as the
20 given concrete renderer may need an arbitrary subset of the base class
25 #pragma interface "renderer.h"
28 #ifndef _WX_UNIV_RENDERER_H_
29 #define _WX_UNIV_RENDERER_H_
31 class WXDLLEXPORT wxDC
;
32 class WXDLLEXPORT wxCheckListBox
;
33 class WXDLLEXPORT wxListBox
;
34 class WXDLLEXPORT wxMenu
;
35 class WXDLLEXPORT wxMenuGeometryInfo
;
36 class WXDLLEXPORT wxScrollBar
;
37 class WXDLLEXPORT wxTextCtrl
;
38 class WXDLLEXPORT wxWindow
;
40 class WXDLLEXPORT wxGauge
;
43 #include "wx/string.h"
44 #include "wx/gdicmn.h"
46 #include "wx/scrolbar.h" // for wxScrollBar::Element
48 // helper class used by wxMenu-related functions
49 class WXDLLEXPORT wxMenuGeometryInfo
52 // get the total size of the menu
53 virtual wxSize
GetSize() const = 0;
55 virtual ~wxMenuGeometryInfo();
58 // ----------------------------------------------------------------------------
59 // wxRenderer: abstract renderers interface
60 // ----------------------------------------------------------------------------
62 class WXDLLEXPORT wxRenderer
68 // draw the controls background
69 virtual void DrawBackground(wxDC
& dc
,
73 wxWindow
*window
= NULL
) = 0;
75 // draw the button surface
76 virtual void DrawButtonSurface(wxDC
& dc
,
80 { DrawBackground( dc
, col
, rect
, flags
); }
83 // draw the label inside the given rectangle with the specified alignment
84 // and optionally emphasize the character with the given index
85 virtual void DrawLabel(wxDC
& dc
,
86 const wxString
& label
,
89 int alignment
= wxALIGN_LEFT
| wxALIGN_TOP
,
91 wxRect
*rectBounds
= NULL
) = 0;
93 // same but also draw a bitmap if it is valid
94 virtual void DrawButtonLabel(wxDC
& dc
,
95 const wxString
& label
,
96 const wxBitmap
& image
,
99 int alignment
= wxALIGN_LEFT
| wxALIGN_TOP
,
101 wxRect
*rectBounds
= NULL
) = 0;
103 // draw the border and optionally return the rectangle containing the
104 // region inside the border
105 virtual void DrawBorder(wxDC
& dc
,
109 wxRect
*rectIn
= (wxRect
*)NULL
) = 0;
111 // draw text control border (I hate to have a separate method for this but
112 // it is needed to accomodate GTK+)
113 virtual void DrawTextBorder(wxDC
& dc
,
117 wxRect
*rectIn
= (wxRect
*)NULL
) = 0;
119 // draw push button border and return the rectangle left for the label
120 virtual void DrawButtonBorder(wxDC
& dc
,
123 wxRect
*rectIn
= (wxRect
*)NULL
) = 0;
125 // draw a horizontal line
126 virtual void DrawHorizontalLine(wxDC
& dc
,
127 wxCoord y
, wxCoord x1
, wxCoord x2
) = 0;
129 // draw a vertical line
130 virtual void DrawVerticalLine(wxDC
& dc
,
131 wxCoord x
, wxCoord y1
, wxCoord y2
) = 0;
133 // draw a frame with the label (horizontal alignment can be specified)
134 virtual void DrawFrame(wxDC
& dc
,
135 const wxString
& label
,
138 int alignment
= wxALIGN_LEFT
,
139 int indexAccel
= -1) = 0;
141 // draw an arrow in the given direction
142 virtual void DrawArrow(wxDC
& dc
,
147 // draw a scrollbar arrow (may be the same as arrow but may be not)
148 virtual void DrawScrollbarArrow(wxDC
& dc
,
153 // draw the scrollbar thumb
154 virtual void DrawScrollbarThumb(wxDC
& dc
,
155 wxOrientation orient
,
159 // draw a (part of) scrollbar shaft
160 virtual void DrawScrollbarShaft(wxDC
& dc
,
161 wxOrientation orient
,
165 // draw the rectangle in the corner between two scrollbars
166 virtual void DrawScrollCorner(wxDC
& dc
,
167 const wxRect
& rect
) = 0;
169 // draw an item of a wxListBox
170 virtual void DrawItem(wxDC
& dc
,
171 const wxString
& label
,
175 // draw an item of a wxCheckListBox
176 virtual void DrawCheckItem(wxDC
& dc
,
177 const wxString
& label
,
178 const wxBitmap
& bitmap
,
182 // draw a checkbutton (bitmap may be invalid to use default one)
183 virtual void DrawCheckButton(wxDC
& dc
,
184 const wxString
& label
,
185 const wxBitmap
& bitmap
,
188 wxAlignment align
= wxALIGN_LEFT
,
189 int indexAccel
= -1) = 0;
191 // draw a radio button
192 virtual void DrawRadioButton(wxDC
& dc
,
193 const wxString
& label
,
194 const wxBitmap
& bitmap
,
197 wxAlignment align
= wxALIGN_LEFT
,
198 int indexAccel
= -1) = 0;
200 // draw a toolbar button (label may be empty, bitmap may be invalid, if
201 // both conditions are true this function draws a separator)
202 virtual void DrawToolBarButton(wxDC
& dc
,
203 const wxString
& label
,
204 const wxBitmap
& bitmap
,
208 // draw a (part of) line in the text control
209 virtual void DrawTextLine(wxDC
& dc
,
210 const wxString
& text
,
216 // draw a line wrap indicator
217 virtual void DrawLineWrapMark(wxDC
& dc
, const wxRect
& rect
) = 0;
219 // draw a notebook tab
220 virtual void DrawTab(wxDC
& dc
,
223 const wxString
& label
,
224 const wxBitmap
& bitmap
= wxNullBitmap
,
226 int indexAccel
= -1) = 0;
228 // draw the slider shaft
229 virtual void DrawSliderShaft(wxDC
& dc
,
232 wxOrientation orient
,
235 wxRect
*rectShaft
= NULL
) = 0;
237 // draw the slider thumb
238 virtual void DrawSliderThumb(wxDC
& dc
,
240 wxOrientation orient
,
244 // draw the slider ticks
245 virtual void DrawSliderTicks(wxDC
& dc
,
248 wxOrientation orient
,
255 // draw a menu bar item
256 virtual void DrawMenuBarItem(wxDC
& dc
,
258 const wxString
& label
,
260 int indexAccel
= -1) = 0;
262 // draw a menu item (also used for submenus if flags has ISSUBMENU flag)
264 // the geometryInfo is calculated by GetMenuGeometry() function from below
265 virtual void DrawMenuItem(wxDC
& dc
,
267 const wxMenuGeometryInfo
& geometryInfo
,
268 const wxString
& label
,
269 const wxString
& accel
,
270 const wxBitmap
& bitmap
= wxNullBitmap
,
272 int indexAccel
= -1) = 0;
274 // draw a menu bar separator
275 virtual void DrawMenuSeparator(wxDC
& dc
,
277 const wxMenuGeometryInfo
& geomInfo
) = 0;
279 // draw a status bar field: wxCONTROL_ISDEFAULT bit in the flags is
280 // interpreted specially and means "draw the status bar grip" here
281 virtual void DrawStatusField(wxDC
& dc
,
283 const wxString
& label
,
286 // draw complete frame/dialog titlebar
287 virtual void DrawFrameTitleBar(wxDC
& dc
,
289 const wxString
& title
,
292 int specialButton
= 0,
293 int specialButtonFlags
= 0) = 0;
295 // draw frame borders
296 virtual void DrawFrameBorder(wxDC
& dc
,
300 // draw frame titlebar background
301 virtual void DrawFrameBackground(wxDC
& dc
,
306 virtual void DrawFrameTitle(wxDC
& dc
,
308 const wxString
& title
,
312 virtual void DrawFrameIcon(wxDC
& dc
,
317 // draw frame buttons
318 virtual void DrawFrameButton(wxDC
& dc
,
319 wxCoord x
, wxCoord y
,
326 // return the bitmaps to use for combobox button
327 virtual void GetComboBitmaps(wxBitmap
*bmpNormal
,
329 wxBitmap
*bmpPressed
,
330 wxBitmap
*bmpDisabled
) = 0;
332 // geometry functions
333 // ------------------
335 // get the dimensions of the border: rect.x/y contain the width/height of
336 // the left/top side, width/heigh - of the right/bottom one
337 virtual wxRect
GetBorderDimensions(wxBorder border
) const = 0;
339 // the scrollbars may be drawn either inside the window border or outside
340 // it - this function is used to decide how to draw them
341 virtual bool AreScrollbarsInsideBorder() const = 0;
343 // adjust the size of the control of the given class: for most controls,
344 // this just takes into account the border, but for some (buttons, for
345 // example) it is more complicated - the result being, in any case, that
346 // the control looks "nice" if it uses the adjusted rectangle
347 virtual void AdjustSize(wxSize
*size
, const wxWindow
*window
) = 0;
349 // get the size of a scrollbar arrow
350 virtual wxSize
GetScrollbarArrowSize() const = 0;
352 // gets the bounding box for a scrollbar element for the given (by default
353 // - current) thumb position
354 virtual wxRect
GetScrollbarRect(const wxScrollBar
*scrollbar
,
355 wxScrollBar::Element elem
,
356 int thumbPos
= -1) const = 0;
358 // returns the size of the scrollbar shaft excluding the arrows
359 virtual wxCoord
GetScrollbarSize(const wxScrollBar
*scrollbar
) = 0;
361 // returns one of wxHT_SCROLLBAR_XXX constants
362 virtual wxHitTest
HitTestScrollbar(const wxScrollBar
*scrollbar
,
363 const wxPoint
& pt
) const = 0;
365 // translate the scrollbar position (in logical units) into physical
366 // coordinate (in pixels) and the other way round
367 virtual wxCoord
ScrollbarToPixel(const wxScrollBar
*scrollbar
,
368 int thumbPos
= -1) = 0;
369 virtual int PixelToScrollbar(const wxScrollBar
*scrollbar
,
372 // get the height of a listbox item from the base font height
373 virtual wxCoord
GetListboxItemHeight(wxCoord fontHeight
) = 0;
375 // get the size of a checkbox/radio button bitmap
376 virtual wxSize
GetCheckBitmapSize() const = 0;
377 virtual wxSize
GetRadioBitmapSize() const = 0;
378 virtual wxCoord
GetCheckItemMargin() const = 0;
380 // get the standard size of a toolbar button and also return the size of
381 // a toolbar separator in the provided pointer
382 virtual wxSize
GetToolBarButtonSize(wxCoord
*separator
) const = 0;
384 // get the margins between/around the toolbar buttons
385 virtual wxSize
GetToolBarMargin() const = 0;
387 // convert between text rectangle and client rectangle for text controls:
388 // the former is typicall smaller to leave margins around text
389 virtual wxRect
GetTextTotalArea(const wxTextCtrl
*text
,
390 const wxRect
& rectText
) const = 0;
392 // extra space is for line indicators
393 virtual wxRect
GetTextClientArea(const wxTextCtrl
*text
,
394 const wxRect
& rectTotal
,
395 wxCoord
*extraSpaceBeyond
) const = 0;
397 // get the overhang of a selected tab
398 virtual wxSize
GetTabIndent() const = 0;
400 // get the padding around the text in a tab
401 virtual wxSize
GetTabPadding() const = 0;
403 // get the default size of the slider in lesser dimension (i.e. height of a
404 // horizontal slider or width of a vertical one)
405 virtual wxCoord
GetSliderDim() const = 0;
407 // get the length of the slider ticks displayed along side slider
408 virtual wxCoord
GetSliderTickLen() const = 0;
410 // get the slider shaft rect from the total slider rect
411 virtual wxRect
GetSliderShaftRect(const wxRect
& rect
,
413 wxOrientation orient
,
414 long style
= 0) const = 0;
416 // get the size of the slider thumb for the given total slider rect
417 virtual wxSize
GetSliderThumbSize(const wxRect
& rect
,
419 wxOrientation orient
) const = 0;
421 // get the size of one progress bar step (in horz and vertical directions)
422 virtual wxSize
GetProgressBarStep() const = 0;
424 // get the size of rectangle to use in the menubar for the given text rect
425 virtual wxSize
GetMenuBarItemSize(const wxSize
& sizeText
) const = 0;
427 // get the struct storing all layout info needed to draw all menu items
428 // (this can't be calculated for each item separately as they should be
431 // the returned pointer must be deleted by the caller
432 virtual wxMenuGeometryInfo
*GetMenuGeometry(wxWindow
*win
,
433 const wxMenu
& menu
) const = 0;
435 // get the borders around the status bar fields (x and y fields of the
436 // return value) and also, optionally, the border between the fields
437 virtual wxSize
GetStatusBarBorders(wxCoord
*borderBetweenFields
) const = 0;
439 // get client area rectangle of top level window (i.e. subtract
440 // decorations from given rectangle)
441 virtual wxRect
GetFrameClientArea(const wxRect
& rect
, int flags
) const = 0;
443 // get size of whole top level window, given size of its client area size
444 virtual wxSize
GetFrameTotalSize(const wxSize
& clientSize
, int flags
) const = 0;
446 // get the minimal size of top level window
447 virtual wxSize
GetFrameMinSize(int flags
) const = 0;
449 // get titlebar icon size
450 virtual wxSize
GetFrameIconSize() const = 0;
452 // returns one of wxHT_TOPLEVEL_XXX constants
453 virtual int HitTestFrame(const wxRect
& rect
,
455 int flags
= 0) const = 0;
457 // virtual dtor for any base class
458 virtual ~wxRenderer();
461 // draw a frame around rectFrame rectangle but not touching the rectLabel
462 // one: this is used by DrawFrame()
463 void StandardDrawFrame(wxDC
& dc
,
464 const wxRect
& rectFrame
,
465 const wxRect
& rectLabel
);
467 // standard text line drawing: just use DrawText() and highlight the
469 static void StandardDrawTextLine(wxDC
& dc
,
470 const wxString
& text
,
472 int selStart
, int selEnd
,
475 // standard scrollbar hit testing: this assumes that it only has 2 arrows
476 // and a thumb, so the themes which have more complicated scrollbars (e.g.
477 // BeOS) can't use this method
478 static wxRect
StandardGetScrollbarRect(const wxScrollBar
*scrollbar
,
479 wxScrollBar::Element elem
,
481 const wxSize
& sizeArrow
);
482 static wxHitTest
StandardHitTestScrollbar(const wxScrollBar
*scrollbar
,
484 const wxSize
& sizeArrow
);
485 static wxCoord
StandardScrollbarToPixel(const wxScrollBar
*scrollbar
,
487 const wxSize
& sizeArrow
);
488 static int StandardPixelToScrollbar(const wxScrollBar
*scrollbar
,
490 const wxSize
& sizeArrow
);
491 static wxCoord
StandardScrollBarSize(const wxScrollBar
*scrollbar
,
492 const wxSize
& sizeArrow
);
493 static void StandardScrollBarThumbSize(wxCoord lenBar
,
501 // ----------------------------------------------------------------------------
502 // wxDelegateRenderer: it is impossible to inherit from any of standard
503 // renderers as their declarations are in private code, but you can use this
504 // class to override only some of the Draw() functions - all the other ones
505 // will be left to the original renderer
506 // ----------------------------------------------------------------------------
508 class WXDLLEXPORT wxDelegateRenderer
: public wxRenderer
511 wxDelegateRenderer(wxRenderer
*renderer
) : m_renderer(renderer
) { }
513 virtual void DrawBackground(wxDC
& dc
,
517 wxWindow
*window
= NULL
)
518 { m_renderer
->DrawBackground(dc
, col
, rect
, flags
, window
); }
519 virtual void DrawLabel(wxDC
& dc
,
520 const wxString
& label
,
523 int align
= wxALIGN_LEFT
| wxALIGN_TOP
,
525 wxRect
*rectBounds
= NULL
)
526 { m_renderer
->DrawLabel(dc
, label
, rect
,
527 flags
, align
, indexAccel
, rectBounds
); }
528 virtual void DrawButtonLabel(wxDC
& dc
,
529 const wxString
& label
,
530 const wxBitmap
& image
,
533 int align
= wxALIGN_LEFT
| wxALIGN_TOP
,
535 wxRect
*rectBounds
= NULL
)
536 { m_renderer
->DrawButtonLabel(dc
, label
, image
, rect
,
537 flags
, align
, indexAccel
, rectBounds
); }
538 virtual void DrawBorder(wxDC
& dc
,
542 wxRect
*rectIn
= (wxRect
*)NULL
)
543 { m_renderer
->DrawBorder(dc
, border
, rect
, flags
, rectIn
); }
544 virtual void DrawTextBorder(wxDC
& dc
,
548 wxRect
*rectIn
= (wxRect
*)NULL
)
549 { m_renderer
->DrawTextBorder(dc
, border
, rect
, flags
, rectIn
); }
550 virtual void DrawButtonBorder(wxDC
& dc
,
553 wxRect
*rectIn
= (wxRect
*)NULL
)
554 { m_renderer
->DrawButtonBorder(dc
, rect
, flags
, rectIn
); }
555 virtual void DrawFrame(wxDC
& dc
,
556 const wxString
& label
,
559 int align
= wxALIGN_LEFT
,
561 { m_renderer
->DrawFrame(dc
, label
, rect
, flags
, align
, indexAccel
); }
562 virtual void DrawHorizontalLine(wxDC
& dc
,
563 wxCoord y
, wxCoord x1
, wxCoord x2
)
564 { m_renderer
->DrawHorizontalLine(dc
, y
, x1
, x2
); }
565 virtual void DrawVerticalLine(wxDC
& dc
,
566 wxCoord x
, wxCoord y1
, wxCoord y2
)
567 { m_renderer
->DrawVerticalLine(dc
, x
, y1
, y2
); }
568 virtual void DrawArrow(wxDC
& dc
,
572 { m_renderer
->DrawArrow(dc
, dir
, rect
, flags
); }
573 virtual void DrawScrollbarArrow(wxDC
& dc
,
577 { m_renderer
->DrawScrollbarArrow(dc
, dir
, rect
, flags
); }
578 virtual void DrawScrollbarThumb(wxDC
& dc
,
579 wxOrientation orient
,
582 { m_renderer
->DrawScrollbarThumb(dc
, orient
, rect
, flags
); }
583 virtual void DrawScrollbarShaft(wxDC
& dc
,
584 wxOrientation orient
,
587 { m_renderer
->DrawScrollbarShaft(dc
, orient
, rect
, flags
); }
588 virtual void DrawScrollCorner(wxDC
& dc
,
590 { m_renderer
->DrawScrollCorner(dc
, rect
); }
591 virtual void DrawItem(wxDC
& dc
,
592 const wxString
& label
,
595 { m_renderer
->DrawItem(dc
, label
, rect
, flags
); }
596 virtual void DrawCheckItem(wxDC
& dc
,
597 const wxString
& label
,
598 const wxBitmap
& bitmap
,
601 { m_renderer
->DrawCheckItem(dc
, label
, bitmap
, rect
, flags
); }
602 virtual void DrawCheckButton(wxDC
& dc
,
603 const wxString
& label
,
604 const wxBitmap
& bitmap
,
607 wxAlignment align
= wxALIGN_LEFT
,
609 { m_renderer
->DrawCheckButton(dc
, label
, bitmap
, rect
,
610 flags
, align
, indexAccel
); }
611 virtual void DrawRadioButton(wxDC
& dc
,
612 const wxString
& label
,
613 const wxBitmap
& bitmap
,
616 wxAlignment align
= wxALIGN_LEFT
,
618 { m_renderer
->DrawRadioButton(dc
, label
, bitmap
, rect
,
619 flags
, align
, indexAccel
); }
620 virtual void DrawToolBarButton(wxDC
& dc
,
621 const wxString
& label
,
622 const wxBitmap
& bitmap
,
625 { m_renderer
->DrawToolBarButton(dc
, label
, bitmap
, rect
, flags
); }
626 virtual void DrawTextLine(wxDC
& dc
,
627 const wxString
& text
,
632 { m_renderer
->DrawTextLine(dc
, text
, rect
, selStart
, selEnd
, flags
); }
633 virtual void DrawLineWrapMark(wxDC
& dc
, const wxRect
& rect
)
634 { m_renderer
->DrawLineWrapMark(dc
, rect
); }
636 virtual void DrawTab(wxDC
& dc
,
639 const wxString
& label
,
640 const wxBitmap
& bitmap
= wxNullBitmap
,
643 { m_renderer
->DrawTab(dc
, rect
, dir
, label
, bitmap
, flags
, accel
); }
645 virtual void DrawSliderShaft(wxDC
& dc
,
648 wxOrientation orient
,
651 wxRect
*rectShaft
= NULL
)
652 { m_renderer
->DrawSliderShaft(dc
, rect
, lenThumb
, orient
, flags
, style
, rectShaft
); }
653 virtual void DrawSliderThumb(wxDC
& dc
,
655 wxOrientation orient
,
658 { m_renderer
->DrawSliderThumb(dc
, rect
, orient
, flags
, style
); }
659 virtual void DrawSliderTicks(wxDC
& dc
,
662 wxOrientation orient
,
668 { m_renderer
->DrawSliderTicks(dc
, rect
, lenThumb
, orient
,
669 start
, end
, start
, flags
, style
); }
671 virtual void DrawMenuBarItem(wxDC
& dc
,
673 const wxString
& label
,
676 { m_renderer
->DrawMenuBarItem(dc
, rect
, label
, flags
, indexAccel
); }
677 virtual void DrawMenuItem(wxDC
& dc
,
679 const wxMenuGeometryInfo
& gi
,
680 const wxString
& label
,
681 const wxString
& accel
,
682 const wxBitmap
& bitmap
= wxNullBitmap
,
685 { m_renderer
->DrawMenuItem(dc
, y
, gi
, label
, accel
,
686 bitmap
, flags
, indexAccel
); }
687 virtual void DrawMenuSeparator(wxDC
& dc
,
689 const wxMenuGeometryInfo
& geomInfo
)
690 { m_renderer
->DrawMenuSeparator(dc
, y
, geomInfo
); }
692 virtual void DrawStatusField(wxDC
& dc
,
694 const wxString
& label
,
696 { m_renderer
->DrawStatusField(dc
, rect
, label
, flags
); }
698 virtual void DrawFrameTitleBar(wxDC
& dc
,
700 const wxString
& title
,
703 int specialButton
= 0,
704 int specialButtonFlag
= 0)
705 { m_renderer
->DrawFrameTitleBar(dc
, rect
, title
, icon
, flags
,
706 specialButton
, specialButtonFlag
); }
707 virtual void DrawFrameBorder(wxDC
& dc
,
710 { m_renderer
->DrawFrameBorder(dc
, rect
, flags
); }
711 virtual void DrawFrameBackground(wxDC
& dc
,
714 { m_renderer
->DrawFrameBackground(dc
, rect
, flags
); }
715 virtual void DrawFrameTitle(wxDC
& dc
,
717 const wxString
& title
,
719 { m_renderer
->DrawFrameTitle(dc
, rect
, title
, flags
); }
720 virtual void DrawFrameIcon(wxDC
& dc
,
724 { m_renderer
->DrawFrameIcon(dc
, rect
, icon
, flags
); }
725 virtual void DrawFrameButton(wxDC
& dc
,
726 wxCoord x
, wxCoord y
,
729 { m_renderer
->DrawFrameButton(dc
, x
, y
, button
, flags
); }
731 virtual void GetComboBitmaps(wxBitmap
*bmpNormal
,
733 wxBitmap
*bmpPressed
,
734 wxBitmap
*bmpDisabled
)
735 { m_renderer
->GetComboBitmaps(bmpNormal
, bmpFocus
,
736 bmpPressed
, bmpDisabled
); }
738 virtual void AdjustSize(wxSize
*size
, const wxWindow
*window
)
739 { m_renderer
->AdjustSize(size
, window
); }
740 virtual wxRect
GetBorderDimensions(wxBorder border
) const
741 { return m_renderer
->GetBorderDimensions(border
); }
742 virtual bool AreScrollbarsInsideBorder() const
743 { return m_renderer
->AreScrollbarsInsideBorder(); }
745 virtual wxSize
GetScrollbarArrowSize() const
746 { return m_renderer
->GetScrollbarArrowSize(); }
747 virtual wxRect
GetScrollbarRect(const wxScrollBar
*scrollbar
,
748 wxScrollBar::Element elem
,
749 int thumbPos
= -1) const
750 { return m_renderer
->GetScrollbarRect(scrollbar
, elem
, thumbPos
); }
751 virtual wxCoord
GetScrollbarSize(const wxScrollBar
*scrollbar
)
752 { return m_renderer
->GetScrollbarSize(scrollbar
); }
753 virtual wxHitTest
HitTestScrollbar(const wxScrollBar
*scrollbar
,
754 const wxPoint
& pt
) const
755 { return m_renderer
->HitTestScrollbar(scrollbar
, pt
); }
756 virtual wxCoord
ScrollbarToPixel(const wxScrollBar
*scrollbar
,
758 { return m_renderer
->ScrollbarToPixel(scrollbar
, thumbPos
); }
759 virtual int PixelToScrollbar(const wxScrollBar
*scrollbar
,
761 { return m_renderer
->PixelToScrollbar(scrollbar
, coord
); }
762 virtual wxCoord
GetListboxItemHeight(wxCoord fontHeight
)
763 { return m_renderer
->GetListboxItemHeight(fontHeight
); }
764 virtual wxSize
GetCheckBitmapSize() const
765 { return m_renderer
->GetCheckBitmapSize(); }
766 virtual wxSize
GetRadioBitmapSize() const
767 { return m_renderer
->GetRadioBitmapSize(); }
768 virtual wxCoord
GetCheckItemMargin() const
769 { return m_renderer
->GetCheckItemMargin(); }
771 virtual wxSize
GetToolBarButtonSize(wxCoord
*separator
) const
772 { return m_renderer
->GetToolBarButtonSize(separator
); }
773 virtual wxSize
GetToolBarMargin() const
774 { return m_renderer
->GetToolBarMargin(); }
776 virtual wxRect
GetTextTotalArea(const wxTextCtrl
*text
,
777 const wxRect
& rect
) const
778 { return m_renderer
->GetTextTotalArea(text
, rect
); }
779 virtual wxRect
GetTextClientArea(const wxTextCtrl
*text
,
781 wxCoord
*extraSpaceBeyond
) const
782 { return m_renderer
->GetTextClientArea(text
, rect
, extraSpaceBeyond
); }
784 virtual wxSize
GetTabIndent() const { return m_renderer
->GetTabIndent(); }
785 virtual wxSize
GetTabPadding() const { return m_renderer
->GetTabPadding(); }
787 virtual wxCoord
GetSliderDim() const
788 { return m_renderer
->GetSliderDim(); }
789 virtual wxCoord
GetSliderTickLen() const
790 { return m_renderer
->GetSliderTickLen(); }
791 virtual wxRect
GetSliderShaftRect(const wxRect
& rect
,
793 wxOrientation orient
,
794 long style
= 0) const
795 { return m_renderer
->GetSliderShaftRect(rect
, lenThumb
, orient
, style
); }
796 virtual wxSize
GetSliderThumbSize(const wxRect
& rect
,
798 wxOrientation orient
) const
799 { return m_renderer
->GetSliderThumbSize(rect
, lenThumb
, orient
); }
800 virtual wxSize
GetProgressBarStep() const
801 { return m_renderer
->GetProgressBarStep(); }
802 virtual wxSize
GetMenuBarItemSize(const wxSize
& sizeText
) const
803 { return m_renderer
->GetMenuBarItemSize(sizeText
); }
804 virtual wxMenuGeometryInfo
*GetMenuGeometry(wxWindow
*win
,
805 const wxMenu
& menu
) const
806 { return m_renderer
->GetMenuGeometry(win
, menu
); }
807 virtual wxSize
GetStatusBarBorders(wxCoord
*borderBetweenFields
) const
808 { return m_renderer
->GetStatusBarBorders(borderBetweenFields
); }
809 virtual wxRect
GetFrameClientArea(const wxRect
& rect
, int flags
) const
810 { return m_renderer
->GetFrameClientArea(rect
, flags
); }
811 virtual wxSize
GetFrameTotalSize(const wxSize
& clientSize
, int flags
) const
812 { return m_renderer
->GetFrameTotalSize(clientSize
, flags
); }
813 virtual wxSize
GetFrameMinSize(int flags
) const
814 { return m_renderer
->GetFrameMinSize(flags
); }
815 virtual wxSize
GetFrameIconSize() const
816 { return m_renderer
->GetFrameIconSize(); }
817 virtual int HitTestFrame(const wxRect
& rect
,
820 { return m_renderer
->HitTestFrame(rect
, pt
, flags
); }
823 wxRenderer
*m_renderer
;
826 // ----------------------------------------------------------------------------
827 // wxControlRenderer: wraps the wxRenderer functions in a form easy to use from
829 // ----------------------------------------------------------------------------
831 class WXDLLEXPORT wxControlRenderer
834 // create a renderer for this dc with this "fundamental" renderer
835 wxControlRenderer(wxWindow
*control
, wxDC
& dc
, wxRenderer
*renderer
);
838 void DrawLabel(const wxBitmap
& bitmap
= wxNullBitmap
,
839 wxCoord marginX
= 0, wxCoord marginY
= 0);
841 void DrawItems(const wxListBox
*listbox
,
842 size_t itemFirst
, size_t itemLast
);
843 #endif // wxUSE_LISTBOX
844 #if wxUSE_CHECKLISTBOX
845 void DrawCheckItems(const wxCheckListBox
*listbox
,
846 size_t itemFirst
, size_t itemLast
);
847 #endif // wxUSE_CHECKLISTBOX
848 void DrawButtonBorder();
849 // the line must be either horizontal or vertical
850 void DrawLine(wxCoord x1
, wxCoord y1
, wxCoord x2
, wxCoord y2
);
852 void DrawBitmap(const wxBitmap
& bitmap
);
853 void DrawBackgroundBitmap();
854 void DrawScrollbar(const wxScrollBar
*scrollbar
, int thumbPosOld
);
856 void DrawProgressBar(const wxGauge
*gauge
);
857 #endif // wxUSE_GAUGE
860 wxWindow
*GetWindow() const { return m_window
; }
861 wxRenderer
*GetRenderer() const { return m_renderer
; }
863 wxDC
& GetDC() { return m_dc
; }
865 const wxRect
& GetRect() const { return m_rect
; }
866 wxRect
& GetRect() { return m_rect
; }
869 static void DrawBitmap(wxDC
&dc
,
870 const wxBitmap
& bitmap
,
872 int alignment
= wxALIGN_CENTRE
|
873 wxALIGN_CENTRE_VERTICAL
,
874 wxStretch stretch
= wxSTRETCH_NOT
);
877 // common part of DrawItems() and DrawCheckItems()
878 void DoDrawItems(const wxListBox
*listbox
,
879 size_t itemFirst
, size_t itemLast
,
880 bool isCheckLbox
= FALSE
);
883 wxRenderer
*m_renderer
;
888 #endif // _WX_UNIV_RENDERER_H_