]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/fmapbase.cpp
invalidate best size cache when GTK style changes
[wxWidgets.git] / src / common / fmapbase.cpp
index 7d6cb2f11eaa9dfacd6a619baae0154225a8e104..f1e324cb9218a95fae4bf60d51216d5a1ce9fcfa 100644 (file)
     #include "wx/intl.h"
 #endif //WX_PRECOMP
 
     #include "wx/intl.h"
 #endif //WX_PRECOMP
 
+#if defined(__WXMSW__)
+  #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"
 
 #include "wx/fontmap.h"
 #include "wx/fmappriv.h"
 
 #include "wx/apptrait.h"
 #include "wx/module.h"
 
-#if wxUSE_CONFIG
+// wxMemoryConfig uses wxFileConfig
+#if wxUSE_CONFIG && wxUSE_FILECONFIG
     #include "wx/config.h"
     #include "wx/memconf.h"
 #endif
     #include "wx/config.h"
     #include "wx/memconf.h"
 #endif
@@ -66,6 +72,7 @@ static wxFontEncoding gs_encodings[] =
     wxFONTENCODING_ISO8859_14,
     wxFONTENCODING_ISO8859_15,
     wxFONTENCODING_KOI8,
     wxFONTENCODING_ISO8859_14,
     wxFONTENCODING_ISO8859_15,
     wxFONTENCODING_KOI8,
+    wxFONTENCODING_KOI8_U,
     wxFONTENCODING_CP932,
     wxFONTENCODING_CP936,
     wxFONTENCODING_CP949,
     wxFONTENCODING_CP932,
     wxFONTENCODING_CP936,
     wxFONTENCODING_CP949,
@@ -81,6 +88,12 @@ static wxFontEncoding gs_encodings[] =
     wxFONTENCODING_CP437,
     wxFONTENCODING_UTF7,
     wxFONTENCODING_UTF8,
     wxFONTENCODING_CP437,
     wxFONTENCODING_UTF7,
     wxFONTENCODING_UTF8,
+    wxFONTENCODING_UTF16,
+    wxFONTENCODING_UTF16BE,
+    wxFONTENCODING_UTF16LE,
+    wxFONTENCODING_UTF32,
+    wxFONTENCODING_UTF32BE,
+    wxFONTENCODING_UTF32LE,
     wxFONTENCODING_EUC_JP,
 };
 
     wxFONTENCODING_EUC_JP,
 };
 
@@ -103,6 +116,7 @@ static const wxChar* gs_encodingDescs[] =
     wxTRANSLATE( "Celtic (ISO-8859-14)" ),
     wxTRANSLATE( "Western European with Euro (ISO-8859-15)" ),
     wxTRANSLATE( "KOI8-R" ),
     wxTRANSLATE( "Celtic (ISO-8859-14)" ),
     wxTRANSLATE( "Western European with Euro (ISO-8859-15)" ),
     wxTRANSLATE( "KOI8-R" ),
+    wxTRANSLATE( "KOI8-U" ),
     wxTRANSLATE( "Windows Japanese (CP 932)" ),
     wxTRANSLATE( "Windows Chinese Simplified (CP 936)" ),
     wxTRANSLATE( "Windows Korean (CP 949)" ),
     wxTRANSLATE( "Windows Japanese (CP 932)" ),
     wxTRANSLATE( "Windows Chinese Simplified (CP 936)" ),
     wxTRANSLATE( "Windows Korean (CP 949)" ),
@@ -118,6 +132,12 @@ static const wxChar* gs_encodingDescs[] =
     wxTRANSLATE( "Windows/DOS OEM (CP 437)" ),
     wxTRANSLATE( "Unicode 7 bit (UTF-7)" ),
     wxTRANSLATE( "Unicode 8 bit (UTF-8)" ),
     wxTRANSLATE( "Windows/DOS OEM (CP 437)" ),
     wxTRANSLATE( "Unicode 7 bit (UTF-7)" ),
     wxTRANSLATE( "Unicode 8 bit (UTF-8)" ),
+    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)" ),
     wxTRANSLATE( "Extended Unix Codepage for Japanese (EUC-JP)" ),
 };
 
     wxTRANSLATE( "Extended Unix Codepage for Japanese (EUC-JP)" ),
 };
 
@@ -140,6 +160,7 @@ static const wxChar* gs_encodingNames[] =
     wxT( "iso-8859-14" ),
     wxT( "iso-8859-15" ),
     wxT( "koi8-r" ),
     wxT( "iso-8859-14" ),
     wxT( "iso-8859-15" ),
     wxT( "koi8-r" ),
+    wxT( "koi8-u" ),
     wxT( "windows-932" ),
     wxT( "windows-936" ),
     wxT( "windows-949" ),
     wxT( "windows-932" ),
     wxT( "windows-936" ),
     wxT( "windows-949" ),
@@ -155,6 +176,12 @@ static const wxChar* gs_encodingNames[] =
     wxT( "windows-437" ),
     wxT( "utf-7" ),
     wxT( "utf-8" ),
     wxT( "windows-437" ),
     wxT( "utf-7" ),
     wxT( "utf-8" ),
+    wxT( "utf-16" ),
+    wxT( "utf-16be" ),
+    wxT( "utf-16le" ),
+    wxT( "utf-32" ),
+    wxT( "utf-32be" ),
+    wxT( "utf-32le" ),
     wxT( "euc-jp" ),
 };
 
     wxT( "euc-jp" ),
 };
 
@@ -192,7 +219,7 @@ wxFontMapper *wxFontMapperBase::sm_instance = NULL;
 
 wxFontMapperBase::wxFontMapperBase()
 {
 
 wxFontMapperBase::wxFontMapperBase()
 {
-#if wxUSE_CONFIG
+#if wxUSE_CONFIG && wxUSE_FILECONFIG
     m_config = NULL;
     m_configIsDummy = FALSE;
 #endif // wxUSE_CONFIG
     m_config = NULL;
     m_configIsDummy = FALSE;
 #endif // wxUSE_CONFIG
@@ -200,7 +227,7 @@ wxFontMapperBase::wxFontMapperBase()
 
 wxFontMapperBase::~wxFontMapperBase()
 {
 
 wxFontMapperBase::~wxFontMapperBase()
 {
-#if wxUSE_CONFIG
+#if wxUSE_CONFIG && wxUSE_FILECONFIG
     if ( m_configIsDummy )
         delete m_config;
 #endif // wxUSE_CONFIG
     if ( m_configIsDummy )
         delete m_config;
 #endif // wxUSE_CONFIG
@@ -239,7 +266,7 @@ wxFontMapper *wxFontMapperBase::Set(wxFontMapper *mapper)
     return old;
 }
 
     return old;
 }
 
-#if wxUSE_CONFIG
+#if wxUSE_CONFIG && wxUSE_FILECONFIG
 
 // ----------------------------------------------------------------------------
 // config usage customisation
 
 // ----------------------------------------------------------------------------
 // config usage customisation
@@ -347,6 +374,8 @@ void wxFontMapperBase::RestorePath(const wxString& pathOld)
     GetConfig()->SetPath(pathOld);
 }
 
     GetConfig()->SetPath(pathOld);
 }
 
+#endif
+
 // ----------------------------------------------------------------------------
 // charset/encoding correspondence
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // charset/encoding correspondence
 // ----------------------------------------------------------------------------
@@ -354,13 +383,27 @@ void wxFontMapperBase::RestorePath(const wxString& pathOld)
 wxFontEncoding
 wxFontMapperBase::CharsetToEncoding(const wxString& charset,
                                     bool WXUNUSED(interactive))
 wxFontEncoding
 wxFontMapperBase::CharsetToEncoding(const wxString& charset,
                                     bool WXUNUSED(interactive))
+{
+    int enc = NonInteractiveCharsetToEncoding(charset);
+    if ( enc == wxFONTENCODING_UNKNOWN )
+    {
+        // we should return wxFONTENCODING_SYSTEM from here for unknown
+        // encodings
+        enc = wxFONTENCODING_SYSTEM;
+    }
+
+    return (wxFontEncoding)enc;
+}
+
+int
+wxFontMapperBase::NonInteractiveCharsetToEncoding(const wxString& charset)
 {
     wxFontEncoding encoding = wxFONTENCODING_SYSTEM;
 
     // we're going to modify it, make a copy
     wxString cs = charset;
 
 {
     wxFontEncoding encoding = wxFONTENCODING_SYSTEM;
 
     // we're going to modify it, make a copy
     wxString cs = charset;
 
-#if wxUSE_CONFIG
+#if wxUSE_CONFIG && wxUSE_FILECONFIG
     // first try the user-defined settings
     wxFontMapperPathChanger path(this, FONTMAPPER_CHARSET_PATH);
     if ( path.IsOk() )
     // first try the user-defined settings
     wxFontMapperPathChanger path(this, FONTMAPPER_CHARSET_PATH);
     if ( path.IsOk() )
@@ -374,7 +417,7 @@ wxFontMapperBase::CharsetToEncoding(const wxString& charset,
             if ( value == wxFONTENCODING_UNKNOWN )
             {
                 // don't try to find it, in particular don't ask the user
             if ( value == wxFONTENCODING_UNKNOWN )
             {
                 // don't try to find it, in particular don't ask the user
-                return wxFONTENCODING_SYSTEM;
+                return value;
             }
 
             if ( value >= 0 && value <= wxFONTENCODING_MAX )
             }
 
             if ( value >= 0 && value <= wxFONTENCODING_MAX )
@@ -433,6 +476,30 @@ wxFontMapperBase::CharsetToEncoding(const wxString& charset,
         {
             encoding = wxFONTENCODING_UTF8;
         }
         {
             encoding = wxFONTENCODING_UTF8;
         }
+        else if ( cs == wxT("UTF-16") )
+        {
+            encoding = wxFONTENCODING_UTF16;
+        }
+        else if ( cs == wxT("UTF-16BE") )
+        {
+            encoding = wxFONTENCODING_UTF16BE;
+        }
+        else if ( cs == wxT("UTF-16LE") )
+        {
+            encoding = wxFONTENCODING_UTF16LE;
+        }
+        else if ( cs == wxT("UTF-32") || cs == wxT("UCS-4") )
+        {
+            encoding = wxFONTENCODING_UTF32;
+        }
+        else if ( cs == wxT("UTF-32BE") || cs == wxT("UCS-4BE") )
+        {
+            encoding = wxFONTENCODING_UTF32BE;
+        }
+        else if ( cs == wxT("UTF-32LE") || cs == wxT("UCS-4LE") )
+        {
+            encoding = wxFONTENCODING_UTF32LE;
+        }
         else if ( cs == wxT("GB2312") )
         {
             encoding = wxFONTENCODING_GB2312;
         else if ( cs == wxT("GB2312") )
         {
             encoding = wxFONTENCODING_GB2312;
@@ -452,15 +519,23 @@ wxFontMapperBase::CharsetToEncoding(const wxString& charset,
         {
             encoding = wxFONTENCODING_EUC_JP;
         }
         {
             encoding = wxFONTENCODING_EUC_JP;
         }
+        else if ( cs == wxT("EUC-KR") ||
+                  cs == wxT("EUC_KR") )
+        {
+            encoding = wxFONTENCODING_CP949;
+        } 
         else if ( cs == wxT("KOI8-R") ||
         else if ( cs == wxT("KOI8-R") ||
-                  cs == wxT("KOI8-U") ||
                   cs == wxT("KOI8-RU") )
         {
             // although koi8-ru is not strictly speaking the same as koi8-r,
             // they are similar enough to make mapping it to koi8 better than
                   cs == wxT("KOI8-RU") )
         {
             // although koi8-ru is not strictly speaking the same as koi8-r,
             // they are similar enough to make mapping it to koi8 better than
-            // not reckognizing it at all
+            // not recognizing it at all
             encoding = wxFONTENCODING_KOI8;
         }
             encoding = wxFONTENCODING_KOI8;
         }
+        else if ( cs == wxT("KOI8-U") )
+        {
+            encoding = wxFONTENCODING_KOI8_U;
+        }
         else if ( cs.Left(3) == wxT("ISO") )
         {
             // the dash is optional (or, to be exact, it is not, but
         else if ( cs.Left(3) == wxT("ISO") )
         {
             // the dash is optional (or, to be exact, it is not, but
@@ -636,7 +711,26 @@ wxString wxFontMapperBase::GetEncodingName(wxFontEncoding encoding)
     return str;
 }
 
     return str;
 }
 
-#endif // wxUSE_CONFIG
+/* static */
+wxFontEncoding wxFontMapperBase::GetEncodingFromName(const wxString& name)
+{
+    const size_t count = WXSIZEOF(gs_encodingNames);
+
+    for ( size_t i = 0; i < count; i++ )
+    {
+        if ( gs_encodingNames[i] == name )
+        {
+            return gs_encodings[i];
+        }
+    }
+
+    if ( name == _("default") )
+    {
+        return wxFONTENCODING_DEFAULT;
+    }
+
+    return wxFONTENCODING_MAX;
+}
 
 #endif // wxUSE_FONTMAP
 
 
 #endif // wxUSE_FONTMAP