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

@@ -83,6 +83,9 @@ private:
bool m_initialized;
// just to suppress a gcc warning
friend class wxRendererPtrDummyFriend;
DECLARE_NO_COPY_CLASS(wxRendererPtr)
};
@@ -123,6 +126,11 @@ private:
// wxRendererNative implementation
// ============================================================================
wxRendererNative::~wxRendererNative()
{
// empty but necessary
}
// ----------------------------------------------------------------------------
// Managing the global renderer
// ----------------------------------------------------------------------------
@@ -171,10 +179,24 @@ wxRendererNative *wxRendererNative::Load(const wxString& name)
if ( !pfnwxCreateRenderer )
return NULL;
// create a renderer object
wxRendererNative *renderer = (*pfnwxCreateRenderer)();
if ( !renderer )
return NULL;
// check that its version is compatible with ours
wxRendererVersion ver = renderer->GetVersion();
if ( !wxRendererVersion::IsCompatible(ver) )
{
wxLogError(_("Renderer \"%s\" has incompatible version %d.%d and couldn't be loaded."),
name.c_str(), ver.version, ver.age);
delete renderer;
return NULL;
}
// finally wrap the renderer in an object which will delete it and unload
// the library when it is deleted and return it to the caller
return new wxRendererFromDynLib(dll, renderer);
}

View File

@@ -71,6 +71,13 @@ public:
virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win);
virtual wxRendererVersion GetVersion() const
{
return wxRendererVersion(wxRendererVersion::Current_Version,
wxRendererVersion::Current_Age);
}
// Cleanup by deleting standard renderer
static void Cleanup();