X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/38c4cb6aa7677108cd1a7cd27a65df477588a778..5b87f8bf2ea3b9ae7ac0ae812a311d31cce13bb7:/include/wx/renderer.h diff --git a/include/wx/renderer.h b/include/wx/renderer.h index 325250d6ee..ba5cb2611a 100644 --- a/include/wx/renderer.h +++ b/include/wx/renderer.h @@ -26,9 +26,17 @@ #define _WX_RENDERER_H_ class WXDLLEXPORT wxDC; -class WXDLLEXPORT wxRect; class WXDLLEXPORT wxWindow; +#include "wx/gdicmn.h" // for wxPoint + +// some platforms have their own renderers, others use the generic one +#if defined(__WXMSW__) || defined(__WXMAC__) || defined(__WXGTK__) + #define wxHAS_NATIVE_RENDERER +#else + #undef wxHAS_NATIVE_RENDERER +#endif + // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- @@ -54,6 +62,29 @@ enum wxCONTROL_DIRTY = 0x80000000 }; +// ---------------------------------------------------------------------------- +// helper structs +// ---------------------------------------------------------------------------- + +// wxSplitterWindow parameters +struct WXDLLEXPORT wxSplitterRenderParams +{ + // the only way to initialize this struct is by using this ctor + wxSplitterRenderParams(wxCoord widthSash_, wxCoord border_, bool isSens_) + : widthSash(widthSash_), border(border_), isHotSensitive(isSens_) + { + } + + // the width of the splitter sash + const wxCoord widthSash; + + // the width of the border of the splitter window + const wxCoord border; + + // true if the splitter changes its appearance when the mouse is over it + const bool isHotSensitive; +}; + // ---------------------------------------------------------------------------- // wxRendererNative: abstracts drawing methods needed by the native controls // ---------------------------------------------------------------------------- @@ -61,6 +92,8 @@ enum class WXDLLEXPORT wxRendererNative { public: + virtual ~wxRendererNative() { } // stop GCC warning + // drawing functions // ----------------- @@ -76,6 +109,29 @@ public: const wxRect& rect, int flags = 0) = 0; + // draw the border for sash window: this border must be such that the sash + // drawn by DrawSash() blends into it well + virtual void DrawSplitterBorder(wxWindow *win, + wxDC& dc, + const wxRect& rect, + int flags = 0) = 0; + + // draw a (vertical) sash + virtual void DrawSplitterSash(wxWindow *win, + wxDC& dc, + const wxSize& size, + wxCoord position, + wxOrientation orient, + int flags = 0) = 0; + + + // geometry functions + // ------------------ + + // get the splitter parameters: the x field of the returned point is the + // sash width and the y field is the border width + virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win) = 0; + // pseudo constructors // ------------------- @@ -85,6 +141,25 @@ public: // return the generic implementation of the renderer static wxRendererNative& GetGeneric(); + + // return the default (native) implementation for this platform + static wxRendererNative& GetDefault(); + + + // changing the global renderer + // ---------------------------- + +#if wxUSE_DYNLIB_CLASS + // load the renderer from the specified DLL, the returned pointer must be + // deleted by caller if not NULL when it is not used any more + static wxRendererNative *Load(const wxString& name); +#endif // wxUSE_DYNLIB_CLASS + + // set the renderer to use, passing NULL reverts to using the default + // renderer + // + // return the previous renderer used with Set() or NULL if none + static wxRendererNative *Set(wxRendererNative *renderer); }; // ---------------------------------------------------------------------------- @@ -106,15 +181,52 @@ public: const wxRect& rect, int flags = 0) { m_rendererNative.DrawHeaderButton(win, dc, rect, flags); } + virtual void DrawTreeItemButton(wxWindow *win, wxDC& dc, const wxRect& rect, int flags = 0) { m_rendererNative.DrawTreeItemButton(win, dc, rect, flags); } + virtual void DrawSplitterBorder(wxWindow *win, + wxDC& dc, + const wxRect& rect, + int flags = 0) + { m_rendererNative.DrawSplitterBorder(win, dc, rect, flags); } + + virtual void DrawSplitterSash(wxWindow *win, + wxDC& dc, + const wxSize& size, + wxCoord position, + wxOrientation orient, + int flags = 0) + { m_rendererNative.DrawSplitterSash(win, dc, size, + position, orient, flags); } + + + virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win) + { return m_rendererNative.GetSplitterParams(win); } + protected: wxRendererNative& m_rendererNative; + + DECLARE_NO_COPY_CLASS(wxDelegateRendererNative) }; +// ---------------------------------------------------------------------------- +// inline functions implementation +// ---------------------------------------------------------------------------- + +#ifndef wxHAS_NATIVE_RENDERER + +// default native renderer is the generic one then +/* static */ inline +wxRendererNative& wxRendererNative::GetDefault() +{ + return GetGeneric(); +} + +#endif // !wxHAS_NATIVE_RENDERER + #endif // _WX_RENDERER_H_