X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2c0e6de1899382fa3ba01aa03f1922d9c5c59f6a..ce07cd8a753b3f7ef65ba0138bad86bb34cb4fff:/include/wx/renderer.h diff --git a/include/wx/renderer.h b/include/wx/renderer.h index fb831c39b5..453baf801a 100644 --- a/include/wx/renderer.h +++ b/include/wx/renderer.h @@ -5,12 +5,12 @@ // Modified by: // Created: 20.07.2003 // RCS-ID: $Id$ -// Copyright: (c) 2003 Vadim Zeitlin +// Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// /* - Renderers are used in wxWindows for two similar but different things: + Renderers are used in wxWidgets for two similar but different things: (a) wxUniversal uses them to draw everything, i.e. all the control (b) all the native ports use them to draw generic controls only @@ -85,6 +85,37 @@ struct WXDLLEXPORT wxSplitterRenderParams const bool isHotSensitive; }; +// wxRendererNative interface version +struct WXDLLEXPORT wxRendererVersion +{ + wxRendererVersion(int version_, int age_) : version(version_), age(age_) { } + + // default copy ctor, assignment operator and dtor are ok + + // the current version and age of wxRendererNative interface: different + // versions are incompatible (in both ways) while the ages inside the same + // version are upwards compatible, i.e. the version of the renderer must + // match the version of the main program exactly while the age may be + // highergreater or equal to it + // + // NB: don't forget to increment age after adding any new virtual function! + enum + { + Current_Version = 1, + Current_Age = 5 + }; + + + // check if the given version is compatible with the current one + static bool IsCompatible(const wxRendererVersion& ver) + { + return ver.version == Current_Version && ver.age >= Current_Age; + } + + const int version; + const int age; +}; + // ---------------------------------------------------------------------------- // wxRendererNative: abstracts drawing methods needed by the native controls // ---------------------------------------------------------------------------- @@ -92,8 +123,6 @@ struct WXDLLEXPORT wxSplitterRenderParams class WXDLLEXPORT wxRendererNative { public: - virtual ~wxRendererNative() { } // stop GCC warning - // drawing functions // ----------------- @@ -144,6 +173,34 @@ public: // 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); + + + // miscellaneous stuff + // ------------------- + + // this function is used for version checking: Load() refuses to load any + // DLLs implementing an older or incompatible version; it should be + // implemented simply by returning wxRendererVersion::Current_XXX values + virtual wxRendererVersion GetVersion() const = 0; + + // virtual dtor for any base class + virtual ~wxRendererNative(); }; // ---------------------------------------------------------------------------- @@ -191,6 +248,9 @@ public: virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win) { return m_rendererNative.GetSplitterParams(win); } + virtual wxRendererVersion GetVersion() const + { return m_rendererNative.GetVersion(); } + protected: wxRendererNative& m_rendererNative;