X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/147b8a4ab5ef1546015c9f1c40cf701d1ac4376a..247b70c6c79e76e8296ba63b21997b9ba0f2861b:/include/wx/univ/stdrend.h diff --git a/include/wx/univ/stdrend.h b/include/wx/univ/stdrend.h index 53b5dc3767..a6be61336d 100644 --- a/include/wx/univ/stdrend.h +++ b/include/wx/univ/stdrend.h @@ -12,8 +12,9 @@ #define _WX_UNIV_STDREND_H_ #include "wx/univ/renderer.h" +#include "wx/pen.h" -class WXDLLEXPORT wxColourScheme; +class WXDLLIMPEXP_FWD_CORE wxColourScheme; // ---------------------------------------------------------------------------- // wxStdRenderer: implements as much of wxRenderer API as possible generically @@ -37,7 +38,8 @@ public: int flags); - virtual void DrawFocusRect(wxDC& dc, const wxRect& rect); + virtual void DrawFocusRect(wxWindow* win, wxDC& dc, const wxRect& rect, int flags = 0); + virtual void DrawLabel(wxDC& dc, const wxString& label, const wxRect& rect, @@ -82,6 +84,11 @@ public: 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, @@ -98,6 +105,13 @@ public: 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, @@ -107,34 +121,112 @@ public: 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; -#if wxUSE_SCROLLBAR - virtual wxRect GetScrollbarRect(const wxScrollBar *scrollbar, - wxScrollBar::Element elem, - int thumbPos = -1) const; + virtual void AdjustSize(wxSize *size, const wxWindow *window); + + virtual wxCoord GetListboxItemHeight(wxCoord fontHeight); + +#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 wxCoord GetScrollbarSize(const wxScrollBar *scrollbar); + virtual wxSize GetFrameTotalSize(const wxSize& clientSize, int flags) const; - virtual wxHitTest HitTestScrollbar(const wxScrollBar *scrollbar, - const wxPoint& pt) const; + virtual wxSize GetFrameMinSize(int flags) const; - virtual wxCoord ScrollbarToPixel(const wxScrollBar *scrollbar, - int thumbPos = -1); - virtual int PixelToScrollbar(const wxScrollBar *scrollbar, wxCoord coord); -#endif // wxUSE_SCROLLBAR + 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_Menu, + IndicatorType_MaxCtrl, + IndicatorType_Menu = IndicatorType_MaxCtrl, IndicatorType_Max }; @@ -164,6 +256,10 @@ protected: 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); @@ -183,6 +279,9 @@ protected: 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 @@ -200,6 +299,13 @@ protected: 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, @@ -213,16 +319,21 @@ protected: 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; - // 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); +#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 // GDI objects we often use wxPen m_penBlack, @@ -230,6 +341,8 @@ protected: 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; @@ -238,4 +351,3 @@ protected: }; #endif // _WX_UNIV_STDREND_H_ -