///////////////////////////////////////////////////////////////////////////////
-// Name: common/fmapbase.cpp
+// Name: src/common/fmapbase.cpp
// Purpose: wxFontMapperBase class implementation
// Author: Vadim Zeitlin
// Modified by:
#include "wx/app.h"
#include "wx/log.h"
#include "wx/intl.h"
+ #include "wx/module.h"
#endif //WX_PRECOMP
#if defined(__WXMSW__)
- #include "wx/msw/private.h" // includes windows.h for LOGFONT
- #include "wx/msw/winundef.h"
+ #include "wx/msw/private.h" // includes windows.h for LOGFONT
+ #include "wx/msw/winundef.h"
#endif
#include "wx/fontmap.h"
#include "wx/fmappriv.h"
#include "wx/apptrait.h"
-#include "wx/module.h"
// wxMemoryConfig uses wxFileConfig
#if wxUSE_CONFIG && wxUSE_FILECONFIG
{
public:
wxFontMapperModule() : wxModule() { }
- virtual bool OnInit() { return true; }
- virtual void OnExit() { delete (wxFontMapperBase*)wxFontMapperBase::Set(NULL); }
+
+ virtual bool OnInit()
+ {
+ // a dummy wxFontMapperBase object could have been created during the
+ // program startup before wxApp was created, we have to delete it to
+ // allow creating the real font mapper next time it is needed now that
+ // we can create it (when the modules are initialized, wxApp object
+ // already exists)
+ wxFontMapperBase *fm = wxFontMapperBase::Get();
+ if ( fm && fm->IsDummy() )
+ wxFontMapperBase::Reset();
+
+ return true;
+ }
+
+ virtual void OnExit()
+ {
+ wxFontMapperBase::Reset();
+ }
DECLARE_DYNAMIC_CLASS(wxFontMapperModule)
};
#endif // wxUSE_CONFIG
}
-bool wxFontMapperBase::IsWxFontMapper()
-{ return false; }
-
/* static */
wxFontMapperBase *wxFontMapperBase::Get()
{
return old;
}
+/* static */
+void wxFontMapperBase::Reset()
+{
+ if ( sm_instance )
+ {
+ // we need a cast as wxFontMapper is not fully declared here and so the
+ // compiler can't know that it derives from wxFontMapperBase (but
+ // run-time behaviour will be correct because the dtor is virtual)
+ delete (wxFontMapperBase *)sm_instance;
+ sm_instance = NULL;
+ }
+}
+
#if wxUSE_CONFIG && wxUSE_FILECONFIG
// ----------------------------------------------------------------------------
void wxFontMapperBase::SetConfigPath(const wxString& prefix)
{
- wxCHECK_RET( !prefix.IsEmpty() && prefix[0] == wxCONFIG_PATH_SEPARATOR,
+ wxCHECK_RET( !prefix.empty() && prefix[0] == wxCONFIG_PATH_SEPARATOR,
wxT("an absolute path should be given to wxFontMapper::SetConfigPath()") );
m_configRootPath = prefix;
*pathOld = config->GetPath();
wxString path = GetConfigPath();
- if ( path.IsEmpty() || path.Last() != wxCONFIG_PATH_SEPARATOR )
+ if ( path.empty() || path.Last() != wxCONFIG_PATH_SEPARATOR )
{
path += wxCONFIG_PATH_SEPARATOR;
}
config->SetPath(FONTMAPPER_CHARSET_ALIAS_PATH);
wxString alias = config->Read(charset);
- if ( !alias.IsEmpty() )
+ if ( !alias.empty() )
{
// yes, we do - use it instead
cs = alias;
}
#endif // wxUSE_FONTMAP
-