X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5bbca8b037a51d0cb8949fde9eed4eea253917d0..e0876d7381ada8459e18fc81a9e47c025778b8ec:/src/common/fmapbase.cpp diff --git a/src/common/fmapbase.cpp b/src/common/fmapbase.cpp index 707a0a8114..24ace1c214 100644 --- a/src/common/fmapbase.cpp +++ b/src/common/fmapbase.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: common/fmapbase.cpp +// Name: src/common/fmapbase.cpp // Purpose: wxFontMapperBase class implementation // Author: Vadim Zeitlin // Modified by: @@ -30,18 +30,18 @@ #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 @@ -89,10 +89,8 @@ static wxFontEncoding gs_encodings[] = wxFONTENCODING_CP437, wxFONTENCODING_UTF7, wxFONTENCODING_UTF8, - wxFONTENCODING_UTF16, wxFONTENCODING_UTF16BE, wxFONTENCODING_UTF16LE, - wxFONTENCODING_UTF32, wxFONTENCODING_UTF32BE, wxFONTENCODING_UTF32LE, wxFONTENCODING_EUC_JP, @@ -138,12 +136,17 @@ static const wxChar* gs_encodingDescs[] = wxTRANSLATE( "Windows/DOS OEM (CP 437)" ), wxTRANSLATE( "Unicode 7 bit (UTF-7)" ), wxTRANSLATE( "Unicode 8 bit (UTF-8)" ), +#ifdef WORDS_BIGENDIAN wxTRANSLATE( "Unicode 16 bit (UTF-16)" ), - wxTRANSLATE( "Unicode 16 bit Big Endian (UTF-16BE)" ), wxTRANSLATE( "Unicode 16 bit Little Endian (UTF-16LE)" ), wxTRANSLATE( "Unicode 32 bit (UTF-32)" ), - wxTRANSLATE( "Unicode 32 bit Big Endian (UTF-32BE)" ), wxTRANSLATE( "Unicode 32 bit Little Endian (UTF-32LE)" ), +#else // WORDS_BIGENDIAN + wxTRANSLATE( "Unicode 16 bit Big Endian (UTF-16BE)" ), + wxTRANSLATE( "Unicode 16 bit (UTF-16)" ), + wxTRANSLATE( "Unicode 32 bit Big Endian (UTF-32BE)" ), + wxTRANSLATE( "Unicode 32 bit (UTF-32)" ), +#endif // WORDS_BIGENDIAN wxTRANSLATE( "Extended Unix Codepage for Japanese (EUC-JP)" ), wxTRANSLATE( "US-ASCII" ), wxTRANSLATE( "BIG5" ), @@ -152,7 +155,7 @@ static const wxChar* gs_encodingDescs[] = }; // and the internal names (these are not translated on purpose!) -static const wxChar* gs_encodingNames[WXSIZEOF(gs_encodingDescs)][10] = +static const wxChar* gs_encodingNames[WXSIZEOF(gs_encodingDescs)][9] = { // names from the columns correspond to these OS: // Linux Solaris and IRIX HP-UX AIX @@ -195,12 +198,17 @@ static const wxChar* gs_encodingNames[WXSIZEOF(gs_encodingDescs)][10] = { wxT( "UTF-7" ), wxT("utf7"), NULL }, { wxT( "UTF-8" ), wxT("utf8"), NULL }, - { wxT( "UTF-16" ), wxT("UCS-2"), wxT("UCS2"), NULL }, - { wxT( "UTF-16BE" ), wxT("UCS-2BE"), NULL }, +#ifdef WORDS_BIGENDIAN + { wxT( "UTF-16BE" ), wxT("UCS-2BE"), wxT( "UTF-16" ), wxT("UCS-2"), wxT("UCS2"), NULL }, { wxT( "UTF-16LE" ), wxT("UCS-2LE"), NULL }, - { wxT( "UTF-32" ), wxT( "UCS-4" ), wxT("UCS4"), NULL }, - { wxT( "UTF-32BE" ), wxT( "UCS-4BE" ), NULL }, + { wxT( "UTF-32BE" ), wxT( "UCS-4BE" ), wxT( "UTF-32" ), wxT( "UCS-4" ), wxT("UCS4"), NULL }, { wxT( "UTF-32LE" ), wxT( "UCS-4LE" ), NULL }, +#else // WORDS_BIGENDIAN + { wxT( "UTF-16BE" ), wxT("UCS-2BE"), NULL }, + { wxT( "UTF-16LE" ), wxT("UCS-2LE"), wxT( "UTF-16" ), wxT("UCS-2"), wxT("UCS2"), NULL }, + { wxT( "UTF-32BE" ), wxT( "UCS-4BE" ), NULL }, + { wxT( "UTF-32LE" ), wxT( "UCS-4LE" ), wxT( "UTF-32" ), wxT( "UCS-4" ), wxT("UCS4"), NULL }, +#endif // WORDS_BIGENDIAN { wxT( "EUC-JP" ), wxT( "eucJP" ), wxT( "euc_jp" ), wxT( "IBM-eucJP" ), NULL }, @@ -225,8 +233,25 @@ class wxFontMapperModule : public wxModule { 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) }; @@ -259,9 +284,6 @@ wxFontMapperBase::~wxFontMapperBase() #endif // wxUSE_CONFIG } -bool wxFontMapperBase::IsWxFontMapper() -{ return false; } - /* static */ wxFontMapperBase *wxFontMapperBase::Get() { @@ -295,6 +317,19 @@ wxFontMapper *wxFontMapperBase::Set(wxFontMapper *mapper) 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 // ---------------------------------------------------------------------------- @@ -309,7 +344,7 @@ const wxChar *wxFontMapperBase::GetDefaultConfigPath() 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; @@ -364,7 +399,7 @@ bool wxFontMapperBase::ChangePath(const wxString& pathNew, wxString *pathOld) *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; } @@ -447,7 +482,7 @@ wxFontMapperBase::NonInteractiveCharsetToEncoding(const wxString& charset) 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; @@ -696,4 +731,3 @@ wxFontEncoding wxFontMapperBase::GetEncodingFromName(const wxString& name) } #endif // wxUSE_FONTMAP -