Improve type safety by doing a runtime check to make sure the
wxFontMapper really is a wxFontMapper when GUI code asks for it. Remove some incorrect comments and add some new ones. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33080 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -49,6 +49,8 @@ class WXDLLIMPEXP_CORE wxFontMapper;
|
|||||||
|
|
||||||
class WXDLLIMPEXP_BASE wxFontMapperBase
|
class WXDLLIMPEXP_BASE wxFontMapperBase
|
||||||
{
|
{
|
||||||
|
// For IsWxFontMapper()
|
||||||
|
friend class WXDLLIMPEXP_CORE wxFontMapper;
|
||||||
public:
|
public:
|
||||||
// constructtor and such
|
// constructtor and such
|
||||||
// ---------------------
|
// ---------------------
|
||||||
@@ -61,6 +63,8 @@ public:
|
|||||||
|
|
||||||
// return instance of the wxFontMapper singleton
|
// return instance of the wxFontMapper singleton
|
||||||
// wxBase code only cares that it's a wxFontMapperBase
|
// wxBase code only cares that it's a wxFontMapperBase
|
||||||
|
// In wxBase, wxFontMapper is only forward declared
|
||||||
|
// so one cannot implicitly cast from it to wxFontMapperBase.
|
||||||
static wxFontMapperBase *Get();
|
static wxFontMapperBase *Get();
|
||||||
|
|
||||||
// set the singleton to 'mapper' instance and return previous one
|
// set the singleton to 'mapper' instance and return previous one
|
||||||
@@ -156,6 +160,9 @@ protected:
|
|||||||
int NonInteractiveCharsetToEncoding(const wxString& charset);
|
int NonInteractiveCharsetToEncoding(const wxString& charset);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
// pseudo-RTTI since we aren't a wxObject.
|
||||||
|
virtual bool IsWxFontMapper();
|
||||||
|
|
||||||
// the global fontmapper object or NULL
|
// the global fontmapper object or NULL
|
||||||
static wxFontMapper *sm_instance;
|
static wxFontMapper *sm_instance;
|
||||||
|
|
||||||
@@ -252,6 +259,9 @@ protected:
|
|||||||
wxWindow *m_windowParent;
|
wxWindow *m_windowParent;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
// pseudo-RTTI since we aren't a wxObject.
|
||||||
|
virtual bool IsWxFontMapper();
|
||||||
|
|
||||||
DECLARE_NO_COPY_CLASS(wxFontMapper)
|
DECLARE_NO_COPY_CLASS(wxFontMapper)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -199,7 +199,7 @@ class wxFontMapperModule : public wxModule
|
|||||||
public:
|
public:
|
||||||
wxFontMapperModule() : wxModule() { }
|
wxFontMapperModule() : wxModule() { }
|
||||||
virtual bool OnInit() { return true; }
|
virtual bool OnInit() { return true; }
|
||||||
virtual void OnExit() { delete wxFontMapperBase::Set(NULL); }
|
virtual void OnExit() { delete (wxFontMapperBase*)wxFontMapperBase::Set(NULL); }
|
||||||
|
|
||||||
DECLARE_DYNAMIC_CLASS(wxFontMapperModule)
|
DECLARE_DYNAMIC_CLASS(wxFontMapperModule)
|
||||||
};
|
};
|
||||||
@@ -233,11 +233,10 @@ wxFontMapperBase::~wxFontMapperBase()
|
|||||||
#endif // wxUSE_CONFIG
|
#endif // wxUSE_CONFIG
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool wxFontMapperBase::IsWxFontMapper()
|
||||||
|
{ return false; }
|
||||||
|
|
||||||
/* static */
|
/* static */
|
||||||
// Declared as returning wxFontMapper when wxUSE_GUI=1. Unfortunately, it's
|
|
||||||
// only implemented in wxBase library. Note that if the last resort
|
|
||||||
// is taken and GUI code tries to treat it as a real wxFontMapper
|
|
||||||
// then you'd be in trouble.
|
|
||||||
wxFontMapperBase *wxFontMapperBase::Get()
|
wxFontMapperBase *wxFontMapperBase::Get()
|
||||||
{
|
{
|
||||||
if ( !sm_instance )
|
if ( !sm_instance )
|
||||||
|
@@ -163,14 +163,17 @@ wxFontMapper::~wxFontMapper()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool wxFontMapper::IsWxFontMapper()
|
||||||
|
{ return true; }
|
||||||
|
|
||||||
/* static */
|
/* static */
|
||||||
// Declared as returning wxFontMapper when wxUSE_GUI=1. Unfortunately, it's
|
|
||||||
// only implemented in wxBase library. Note that if the last resort
|
|
||||||
// is taken and GUI code tries to treat it as a real wxFontMapper
|
|
||||||
// then you'd be in trouble.
|
|
||||||
wxFontMapper *wxFontMapper::Get()
|
wxFontMapper *wxFontMapper::Get()
|
||||||
{
|
{
|
||||||
return (wxFontMapper*)wxFontMapperBase::Get();
|
wxFontMapperBase *fontmapper = wxFontMapperBase::Get();
|
||||||
|
wxASSERT_MSG(fontmapper->IsWxFontMapper(), wxT("GUI code requested a wxFontMapper but we only have a wxFontMapperBase."));
|
||||||
|
// Now return it anyway because there's a chance the GUI code might just
|
||||||
|
// only want to call wxFontMapperBase functions.
|
||||||
|
return (wxFontMapper*)fontmapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFontEncoding
|
wxFontEncoding
|
||||||
|
Reference in New Issue
Block a user