added version checking to the renderers

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22736 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2003-08-10 15:51:30 +00:00
parent 70a2162770
commit 04857cb707
5 changed files with 120 additions and 4 deletions

View File

@@ -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
// -----------------
@@ -160,6 +189,18 @@ public:
//
// 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();
};
// ----------------------------------------------------------------------------
@@ -207,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;