X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9f2be1259350586411e21c84024967408eef6280..850df2d78866c3edcf848103b5dbc7e7fa1ee5fa:/src/common/rendcmn.cpp diff --git a/src/common/rendcmn.cpp b/src/common/rendcmn.cpp index 77bfdde516..86e02ce8b9 100644 --- a/src/common/rendcmn.cpp +++ b/src/common/rendcmn.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: common/rendcmn.cpp +// Name: src/common/rendcmn.cpp // Purpose: wxRendererNative common functions // Author: Vadim Zeitlin // Modified by: @@ -25,6 +25,8 @@ #ifndef WX_PRECOMP #include "wx/app.h" + #include "wx/log.h" + #include "wx/intl.h" #endif //WX_PRECOMP #include "wx/apptrait.h" @@ -40,8 +42,8 @@ // wxRendererPtr: auto pointer holding the global renderer // ---------------------------------------------------------------------------- -wxDECLARE_SCOPED_PTR(wxRendererNative, wxRendererPtrBase); -wxDEFINE_SCOPED_PTR(wxRendererNative, wxRendererPtrBase); +wxDECLARE_SCOPED_PTR(wxRendererNative, wxRendererPtrBase) +wxDEFINE_SCOPED_PTR(wxRendererNative, wxRendererPtrBase) class wxRendererPtr : public wxRendererPtrBase { @@ -61,12 +63,7 @@ public: } // return the global and unique wxRendererPtr - static wxRendererPtr& Get() - { - static wxRendererPtr s_renderer; - - return s_renderer; - } + static wxRendererPtr& Get(); private: wxRendererPtr() : wxRendererPtrBase(NULL) { m_initialized = false; } @@ -83,9 +80,20 @@ private: bool m_initialized; + // just to suppress a gcc warning + friend class wxRendererPtrDummyFriend; + DECLARE_NO_COPY_CLASS(wxRendererPtr) }; +// return the global and unique wxRendererPtr +/*static*/ wxRendererPtr& wxRendererPtr::Get() +{ + static wxRendererPtr s_renderer; + + return s_renderer; +} + #if wxUSE_DYNLIB_CLASS // ---------------------------------------------------------------------------- @@ -123,6 +131,11 @@ private: // wxRendererNative implementation // ============================================================================ +wxRendererNative::~wxRendererNative() +{ + // empty but necessary +} + // ---------------------------------------------------------------------------- // Managing the global renderer // ---------------------------------------------------------------------------- @@ -171,12 +184,25 @@ 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); } #endif // wxUSE_DYNLIB_CLASS -