]> git.saurik.com Git - wxWidgets.git/commitdiff
fixes for wxFontMapper endless recursion
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 12 Nov 1999 17:00:02 +0000 (17:00 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 12 Nov 1999 17:00:02 +0000 (17:00 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4527 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/fontmap.cpp
src/unix/fontutil.cpp

index b0a2aa7a242104ea92cf2febd82f2eb9f77b8a29..09880ab43fb8f1cf4a463a6bbfbee70332f67f15 100644 (file)
@@ -501,6 +501,22 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
 {
     wxCHECK_MSG( info, FALSE, _T("bad pointer in GetAltForEncoding") );
 
+    if ( encoding == wxFONTENCODING_DEFAULT )
+    {
+        encoding = wxFont::GetDefaultEncoding();
+    }
+
+    // if we failed to load the system default encoding, something is really
+    // wrong and we'd better stop now - otherwise we will go into endless
+    // recursion trying to create the font in the msg box with the error
+    // message
+    if ( encoding == wxFONTENCODING_SYSTEM )
+    {
+        wxFatalError(_("can't load any font, aborting"));
+
+        // wxFatalError doesn't return
+    }
+
     wxString configEntry = GetEncodingName(encoding);
 
     // do we have a font spec for this encoding?
index be3861a14944a30b914ba9d5ff5b683cc47507ae..fa20c759858aa0cfe519ea0fb65e3294a08cb38f 100644 (file)
 #elif defined(__WXGTK__)
     static inline wxNativeFont wxLoadFont(const wxString& fontSpec)
     {
-       wxNativeFont font = gdk_font_load( wxConvertWX2MB(fontSpec) );
-       if(fontSpec == "-*-*-*-*-*-*-*-*-*-*-*-*-*-*")
-       {
-          if(font == NULL)
-             font = gdk_font_load (wxConvertWX2MB("-*-*-*-*-*-*-*-*-75-*-*-*-*-*"));
-          if(font == NULL)
-             font = gdk_font_load (wxConvertWX2MB("-*-*-*-*-*-*-*-*-100-*-*-*-*-*"));
-          if(font == NULL)
-             font = gdk_font_load (wxConvertWX2MB("-*-fixed-*-*-*-*-*-*-*-*-*-*-*-*"));
-       }
-       return font;
+       return gdk_font_load( wxConvertWX2MB(fontSpec) );
     }
 
     static inline void wxFreeFont(wxNativeFont font)
@@ -228,11 +218,16 @@ wxNativeFont wxLoadQueryNearestFont(int pointSize,
                                     const wxString &facename,
                                     wxFontEncoding encoding)
 {
+    if ( encoding == wxFONTENCODING_DEFAULT )
+    {
+        encoding = wxFont::GetDefaultEncoding();
+    }
+
     // first determine the encoding - if the font doesn't exist at all in this
     // encoding, it's useless to do all other approximations (i.e. size,
     // family &c don't matter much)
     wxNativeEncodingInfo info;
-    if (encoding == wxFONTENCODING_SYSTEM)
+    if ( encoding == wxFONTENCODING_SYSTEM )
     {
         // This will always work so we don't test to save time
         wxGetNativeFontEncoding(wxFONTENCODING_SYSTEM, &info);
@@ -251,11 +246,10 @@ wxNativeFont wxLoadQueryNearestFont(int pointSize,
                 //     so it would provoke a crash
                 wxGetNativeFontEncoding(wxFONTENCODING_SYSTEM, &info);
             }
-       }
+        }
     }
     
     // OK, we have the correct xregistry/xencoding in info structure
-
     wxNativeFont font = wxLoadQueryFont( pointSize, family, style, weight,
                                          underlined, facename,
                                          info.xregistry, info.xencoding );
@@ -317,6 +311,13 @@ wxNativeFont wxLoadQueryNearestFont(int pointSize,
 // returns TRUE if there are any fonts matching this font spec
 static bool wxTestFontSpec(const wxString& fontspec)
 {
+    // some X servers will fail to load this font because there are too many
+    // matches so we must test explicitly for this
+    if ( fontspec == _T("-*-*-*-*-*-*-*-*-*-*-*-*-*-*") )
+    {
+        return TRUE;
+    }
+
     wxNativeFont test = wxLoadFont(fontspec);
     if ( test )
     {