git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41535 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			378 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			378 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| ///////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        wx/univ/stdrend.h
 | |
| // Purpose:     wxStdRenderer class declaration
 | |
| // Author:      Vadim Zeitlin
 | |
| // Created:     2006-09-18
 | |
| // RCS-ID:      $Id$
 | |
| // Copyright:   (c) 2006 Vadim Zeitlin <vadim@wxwindows.org>
 | |
| // Licence:     wxWindows licence
 | |
| ///////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #ifndef _WX_UNIV_STDREND_H_
 | |
| #define _WX_UNIV_STDREND_H_
 | |
| 
 | |
| #include "wx/univ/renderer.h"
 | |
| #include "wx/pen.h"
 | |
| 
 | |
| class WXDLLEXPORT wxColourScheme;
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // wxStdRenderer: implements as much of wxRenderer API as possible generically
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| class wxStdRenderer : public wxRenderer
 | |
| {
 | |
| public:
 | |
|     // the renderer will use the given scheme, whose lifetime must be at least
 | |
|     // as long as of this object itself, to choose the colours for drawing
 | |
|     wxStdRenderer(const wxColourScheme *scheme);
 | |
| 
 | |
|     virtual void DrawBackground(wxDC& dc,
 | |
|                                 const wxColour& col,
 | |
|                                 const wxRect& rect,
 | |
|                                 int flags = 0,
 | |
|                                 wxWindow *window = NULL);
 | |
|     virtual void DrawButtonSurface(wxDC& dc,
 | |
|                                    const wxColour& col,
 | |
|                                    const wxRect& rect,
 | |
|                                    int flags);
 | |
| 
 | |
| 
 | |
|     virtual void DrawFocusRect(wxDC& dc, const wxRect& rect, int flags = 0);
 | |
|     virtual void DrawLabel(wxDC& dc,
 | |
|                            const wxString& label,
 | |
|                            const wxRect& rect,
 | |
|                            int flags = 0,
 | |
|                            int alignment = wxALIGN_LEFT | wxALIGN_TOP,
 | |
|                            int indexAccel = -1,
 | |
|                            wxRect *rectBounds = NULL);
 | |
|     virtual void DrawButtonLabel(wxDC& dc,
 | |
|                                  const wxString& label,
 | |
|                                  const wxBitmap& image,
 | |
|                                  const wxRect& rect,
 | |
|                                  int flags = 0,
 | |
|                                  int alignment = wxALIGN_LEFT | wxALIGN_TOP,
 | |
|                                  int indexAccel = -1,
 | |
|                                  wxRect *rectBounds = NULL);
 | |
| 
 | |
| 
 | |
|     virtual void DrawBorder(wxDC& dc,
 | |
|                             wxBorder border,
 | |
|                             const wxRect& rect,
 | |
|                             int flags = 0,
 | |
|                             wxRect *rectIn = NULL);
 | |
|     virtual void DrawTextBorder(wxDC& dc,
 | |
|                                 wxBorder border,
 | |
|                                 const wxRect& rect,
 | |
|                                 int flags = 0,
 | |
|                                 wxRect *rectIn = NULL);
 | |
| 
 | |
|     virtual void DrawHorizontalLine(wxDC& dc,
 | |
|                                     wxCoord y, wxCoord x1, wxCoord x2);
 | |
|     virtual void DrawVerticalLine(wxDC& dc,
 | |
|                                   wxCoord x, wxCoord y1, wxCoord y2);
 | |
|     virtual void DrawFrame(wxDC& dc,
 | |
|                            const wxString& label,
 | |
|                            const wxRect& rect,
 | |
|                            int flags = 0,
 | |
|                            int alignment = wxALIGN_LEFT,
 | |
|                            int indexAccel = -1);
 | |
| 
 | |
| 
 | |
|     virtual void DrawItem(wxDC& dc,
 | |
|                           const wxString& label,
 | |
|                           const wxRect& rect,
 | |
|                           int flags = 0);
 | |
|     virtual void DrawCheckItem(wxDC& dc,
 | |
|                                const wxString& label,
 | |
|                                const wxBitmap& bitmap,
 | |
|                                const wxRect& rect,
 | |
|                                int flags = 0);
 | |
| 
 | |
|     virtual void DrawCheckButton(wxDC& dc,
 | |
|                                  const wxString& label,
 | |
|                                  const wxBitmap& bitmap,
 | |
|                                  const wxRect& rect,
 | |
|                                  int flags = 0,
 | |
|                                  wxAlignment align = wxALIGN_LEFT,
 | |
|                                  int indexAccel = -1);
 | |
|     virtual void DrawRadioButton(wxDC& dc,
 | |
|                                  const wxString& label,
 | |
|                                  const wxBitmap& bitmap,
 | |
|                                  const wxRect& rect,
 | |
|                                  int flags = 0,
 | |
|                                  wxAlignment align = wxALIGN_LEFT,
 | |
|                                  int indexAccel = -1);
 | |
| 
 | |
|     virtual void DrawScrollbarArrow(wxDC& dc,
 | |
|                                     wxDirection dir,
 | |
|                                     const wxRect& rect,
 | |
|                                     int flags = 0);
 | |
|     virtual void DrawScrollCorner(wxDC& dc,
 | |
|                                   const wxRect& rect);
 | |
| 
 | |
| #if wxUSE_TEXTCTRL
 | |
|     virtual void DrawTextLine(wxDC& dc,
 | |
|                               const wxString& text,
 | |
|                               const wxRect& rect,
 | |
|                               int selStart = -1,
 | |
|                               int selEnd = -1,
 | |
|                               int flags = 0);
 | |
| 
 | |
|     virtual void DrawLineWrapMark(wxDC& dc, const wxRect& rect);
 | |
| 
 | |
|     virtual wxRect GetTextTotalArea(const wxTextCtrl *text,
 | |
|                                     const wxRect& rect) const;
 | |
|     virtual wxRect GetTextClientArea(const wxTextCtrl *text,
 | |
|                                      const wxRect& rect,
 | |
|                                      wxCoord *extraSpaceBeyond) const;
 | |
| #endif // wxUSE_TEXTCTRL
 | |
| 
 | |
|     virtual wxRect GetBorderDimensions(wxBorder border) const;
 | |
| 
 | |
|     virtual bool AreScrollbarsInsideBorder() const;
 | |
| 
 | |
|     virtual void AdjustSize(wxSize *size, const wxWindow *window);
 | |
| 
 | |
|     virtual wxCoord GetListboxItemHeight(wxCoord fontHeight);
 | |
| 
 | |
| #if wxUSE_SCROLLBAR
 | |
|     virtual wxRect GetScrollbarRect(const wxScrollBar *scrollbar,
 | |
|                                     wxScrollBar::Element elem,
 | |
|                                     int thumbPos = -1) const;
 | |
| 
 | |
|     virtual wxCoord GetScrollbarSize(const wxScrollBar *scrollbar);
 | |
| 
 | |
|     virtual wxHitTest HitTestScrollbar(const wxScrollBar *scrollbar,
 | |
|                                        const wxPoint& pt) const;
 | |
| 
 | |
|     virtual wxCoord ScrollbarToPixel(const wxScrollBar *scrollbar,
 | |
|                                      int thumbPos = -1);
 | |
|     virtual int PixelToScrollbar(const wxScrollBar *scrollbar, wxCoord coord);
 | |
| #endif // wxUSE_SCROLLBAR
 | |
| 
 | |
| #if wxUSE_STATUSBAR
 | |
|     virtual void DrawStatusField(wxDC& dc,
 | |
|                                  const wxRect& rect,
 | |
|                                  const wxString& label,
 | |
|                                  int flags = 0, int style = 0);
 | |
| 
 | |
|     virtual wxSize GetStatusBarBorders() const;
 | |
| 
 | |
|     virtual wxCoord GetStatusBarBorderBetweenFields() const;
 | |
| 
 | |
|     virtual wxSize GetStatusBarFieldMargins() const;
 | |
| #endif // wxUSE_STATUSBAR
 | |
| 
 | |
|     virtual wxCoord GetCheckItemMargin() const { return 0; }
 | |
| 
 | |
| 
 | |
|     virtual void DrawFrameTitleBar(wxDC& dc,
 | |
|                                    const wxRect& rect,
 | |
|                                    const wxString& title,
 | |
|                                    const wxIcon& icon,
 | |
|                                    int flags,
 | |
|                                    int specialButton = 0,
 | |
|                                    int specialButtonFlag = 0);
 | |
|     virtual void DrawFrameBorder(wxDC& dc,
 | |
|                                  const wxRect& rect,
 | |
|                                  int flags);
 | |
|     virtual void DrawFrameBackground(wxDC& dc,
 | |
|                                      const wxRect& rect,
 | |
|                                      int flags);
 | |
|     virtual void DrawFrameTitle(wxDC& dc,
 | |
|                                 const wxRect& rect,
 | |
|                                 const wxString& title,
 | |
|                                 int flags);
 | |
|     virtual void DrawFrameIcon(wxDC& dc,
 | |
|                                const wxRect& rect,
 | |
|                                const wxIcon& icon,
 | |
|                                int flags);
 | |
|     virtual void DrawFrameButton(wxDC& dc,
 | |
|                                  wxCoord x, wxCoord y,
 | |
|                                  int button,
 | |
|                                  int flags = 0);
 | |
| 
 | |
|     virtual wxRect GetFrameClientArea(const wxRect& rect, int flags) const;
 | |
| 
 | |
|     virtual wxSize GetFrameTotalSize(const wxSize& clientSize, int flags) const;
 | |
| 
 | |
|     virtual wxSize GetFrameMinSize(int flags) const;
 | |
| 
 | |
|     virtual wxSize GetFrameIconSize() const;
 | |
| 
 | |
|     virtual int HitTestFrame(const wxRect& rect,
 | |
|                              const wxPoint& pt,
 | |
|                              int flags = 0) const;
 | |
| protected:
 | |
|     // various constants
 | |
|     enum ArrowDirection
 | |
|     {
 | |
|         Arrow_Left,
 | |
|         Arrow_Right,
 | |
|         Arrow_Up,
 | |
|         Arrow_Down,
 | |
|         Arrow_Max
 | |
|     };
 | |
| 
 | |
|     enum ArrowStyle
 | |
|     {
 | |
|         Arrow_Normal,
 | |
|         Arrow_Disabled,
 | |
|         Arrow_Pressed,
 | |
|         Arrow_Inverted,
 | |
|         Arrow_InvertedDisabled,
 | |
|         Arrow_StateMax
 | |
|     };
 | |
| 
 | |
|     enum FrameButtonType
 | |
|     {
 | |
|         FrameButton_Close,
 | |
|         FrameButton_Minimize,
 | |
|         FrameButton_Maximize,
 | |
|         FrameButton_Restore,
 | |
|         FrameButton_Help,
 | |
|         FrameButton_Max
 | |
|     };
 | |
| 
 | |
|     enum IndicatorType
 | |
|     {
 | |
|         IndicatorType_Check,
 | |
|         IndicatorType_Radio,
 | |
|         IndicatorType_MaxCtrl,
 | |
|         IndicatorType_Menu = IndicatorType_MaxCtrl,
 | |
|         IndicatorType_Max
 | |
|     };
 | |
| 
 | |
|     enum IndicatorState
 | |
|     {
 | |
|         IndicatorState_Normal,
 | |
|         IndicatorState_Pressed, // this one is for check/radioboxes
 | |
|         IndicatorState_Disabled,
 | |
|         IndicatorState_MaxCtrl,
 | |
| 
 | |
|         // the rest of the states are valid for menu items only
 | |
|         IndicatorState_Selected = IndicatorState_Pressed,
 | |
|         IndicatorState_SelectedDisabled = IndicatorState_MaxCtrl,
 | |
|         IndicatorState_MaxMenu
 | |
|     };
 | |
| 
 | |
|     enum IndicatorStatus
 | |
|     {
 | |
|         IndicatorStatus_Checked,
 | |
|         IndicatorStatus_Unchecked,
 | |
|         IndicatorStatus_Undetermined,
 | |
|         IndicatorStatus_Max
 | |
|     };
 | |
| 
 | |
|     // translate the appropriate bits in flags to the above enum elements
 | |
|     static void GetIndicatorsFromFlags(int flags,
 | |
|                                        IndicatorState& state,
 | |
|                                        IndicatorStatus& status);
 | |
| 
 | |
|     // translate wxDirection to ArrowDirection
 | |
|     static ArrowDirection GetArrowDirection(wxDirection dir);
 | |
| 
 | |
| 
 | |
|     // fill the rectangle with a brush of given colour (must be valid)
 | |
|     void DrawSolidRect(wxDC& dc, const wxColour& col, const wxRect& rect);
 | |
| 
 | |
| 
 | |
|     // all the functions in this section adjust the rect parameter to
 | |
|     // correspond to the interiour of the drawn area
 | |
| 
 | |
|         // draw complete rectangle
 | |
|     void DrawRect(wxDC& dc, wxRect *rect, const wxPen& pen);
 | |
| 
 | |
|         // draw the rectange using the first pen for the left and top sides
 | |
|         // and the second one for the bottom and right ones
 | |
|     void DrawShadedRect(wxDC& dc, wxRect *rect,
 | |
|                         const wxPen& pen1, const wxPen& pen2);
 | |
| 
 | |
|         // border drawing routines, may be overridden in the derived class
 | |
|     virtual void DrawRaisedBorder(wxDC& dc, wxRect *rect);
 | |
|     virtual void DrawSunkenBorder(wxDC& dc, wxRect *rect);
 | |
|     virtual void DrawAntiSunkenBorder(wxDC& dc, wxRect *rect);
 | |
|     virtual void DrawBoxBorder(wxDC& dc, wxRect *rect);
 | |
|     virtual void DrawStaticBorder(wxDC& dc, wxRect *rect);
 | |
|     virtual void DrawExtraBorder(wxDC& dc, wxRect *rect);
 | |
| 
 | |
| 
 | |
|     // draw the frame with non-empty label inside the given rectText
 | |
|     virtual void DrawFrameWithLabel(wxDC& dc,
 | |
|                                     const wxString& label,
 | |
|                                     const wxRect& rectFrame,
 | |
|                                     const wxRect& rectText,
 | |
|                                     int flags,
 | |
|                                     int alignment,
 | |
|                                     int indexAccel);
 | |
| 
 | |
|     // draw the (static box) frame without the part corresponding to rectLabel
 | |
|     void DrawFrameWithoutLabel(wxDC& dc,
 | |
|                                const wxRect& rectFrame,
 | |
|                                const wxRect& rectLabel);
 | |
| 
 | |
| 
 | |
|     // draw the bitmap for a check item (which is by default the same as check
 | |
|     // box one but may be different)
 | |
|     virtual void DrawCheckItemBitmap(wxDC& dc,
 | |
|                                      const wxBitmap& bitmap,
 | |
|                                      const wxRect& rect,
 | |
|                                      int flags);
 | |
| 
 | |
|     // common routine for drawing check and radio buttons
 | |
|     void DrawCheckOrRadioButton(wxDC& dc,
 | |
|                                 const wxString& label,
 | |
|                                 const wxBitmap& bitmap,
 | |
|                                 const wxRect& rect,
 | |
|                                 int flags,
 | |
|                                 wxAlignment align,
 | |
|                                 int indexAccel);
 | |
| 
 | |
|     // return the check/radio bitmap for the given flags
 | |
|     virtual wxBitmap GetRadioBitmap(int flags) = 0;
 | |
|     virtual wxBitmap GetCheckBitmap(int flags) = 0;
 | |
| 
 | |
|     // return the frame icon bitmap
 | |
|     virtual wxBitmap GetFrameButtonBitmap(FrameButtonType type) = 0;
 | |
| 
 | |
|     // get the width of either normal or resizeable frame border depending on
 | |
|     // whether flags contains wxTOPLEVEL_RESIZEABLE bit
 | |
|     //
 | |
|     // notice that these methods only make sense with standard border drawing
 | |
|     // code which uses the borders of the same width on all sides, this is why
 | |
|     // they are only present here and not in wxRenderer itself
 | |
|     virtual int GetFrameBorderWidth(int flags) const;
 | |
| 
 | |
| #if wxUSE_TEXTCTRL
 | |
|     // return the width of the border around the text area in the text control
 | |
|     virtual int GetTextBorderWidth(const wxTextCtrl *text) const;
 | |
| #endif // wxUSE_TEXTCTRL
 | |
| 
 | |
|     // return the starting and ending positions, in pixels, of the thumb of a
 | |
|     // scrollbar with the given logical position, thumb size and range and the
 | |
|     // given physical length
 | |
|     static void GetScrollBarThumbSize(wxCoord length,
 | |
|                                       int thumbPos,
 | |
|                                       int thumbSize,
 | |
|                                       int range,
 | |
|                                       wxCoord *thumbStart,
 | |
|                                       wxCoord *thumbEnd);
 | |
| 
 | |
|     // GDI objects we often use
 | |
|     wxPen m_penBlack,
 | |
|           m_penDarkGrey,
 | |
|           m_penLightGrey,
 | |
|           m_penHighlight;
 | |
| 
 | |
|     wxFont m_titlebarFont;
 | |
| 
 | |
|     // the colours we use, they never change currently so we don't have to ever
 | |
|     // update m_penXXX objects above
 | |
|     const wxColourScheme * const m_scheme;
 | |
| 
 | |
|     DECLARE_NO_COPY_CLASS(wxStdRenderer)
 | |
| };
 | |
| 
 | |
| #endif // _WX_UNIV_STDREND_H_
 |