]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/font.cpp
Virtualized coordinate system for wxCanvas.
[wxWidgets.git] / src / gtk1 / font.cpp
index 6cd4c22b1cec62195d15b078ba99a8ce70b1c539..83010c18da9d477b7255e7ff55a91e9294f9c9f9 100644 (file)
 #include "wx/log.h"
 #include "wx/gdicmn.h"
 #include "wx/tokenzr.h"
+#include "wx/settings.h"
 
 #include <strings.h>
 
 #include <gdk/gdk.h>
+#include <gdk/gdkprivate.h>
+#include <gtk/gtk.h>
 
 // ----------------------------------------------------------------------------
 // wxFontRefData
@@ -68,7 +71,7 @@ private:
     wxString        m_faceName;
     wxFontEncoding  m_encoding;
 
-    friend wxFont;
+    friend class wxFont;
 };
 
 // ============================================================================
@@ -164,6 +167,7 @@ wxFont::wxFont( const wxString& fontname, const wxFontData& fontdata )
 
     wxStringTokenizer tn( fontname, wxT("-") );
 
+    tn.GetNextToken();                           // skip initial empty token
     tn.GetNextToken();                           // foundry
 
     M_FONTDATA->m_faceName = tn.GetNextToken();  // family
@@ -187,8 +191,11 @@ wxFont::wxFont( const wxString& fontname, const wxFontData& fontdata )
     tn.GetNextToken();                           // pixel size
 
     tmp = tn.GetNextToken();                     // pointsize
-    long num = wxStrtol (tmp.c_str(), (wxChar **) NULL, 10);
-    M_FONTDATA->m_pointSize = num / 10;
+    if (tmp != wxT("*"))
+    {
+        long num = wxStrtol (tmp.c_str(), (wxChar **) NULL, 10);
+        M_FONTDATA->m_pointSize = (int)(num / 10);
+    }
 
     tn.GetNextToken();                           // x-res
     tn.GetNextToken();                           // y-res
@@ -388,6 +395,29 @@ void wxFont::SetEncoding(wxFontEncoding encoding)
 // get internal representation of font
 // ----------------------------------------------------------------------------
 
+static GdkFont *g_systemDefaultGuiFont = (GdkFont*) NULL;
+
+GdkFont *GtkGetDefaultGuiFont()
+{
+    if (!g_systemDefaultGuiFont)
+    {
+        GtkWidget *widget = gtk_button_new();
+        GtkStyle *def = gtk_rc_get_style( widget );
+        if (def)
+        {
+            g_systemDefaultGuiFont = gdk_font_ref( def->font );
+        }
+        else
+        {
+            def = gtk_widget_get_default_style();
+            if (def)
+                g_systemDefaultGuiFont = gdk_font_ref( def->font );
+        }
+        gtk_widget_destroy( widget );
+    }
+    return g_systemDefaultGuiFont;
+}
+
 GdkFont *wxFont::GetInternalFont( float scale ) const
 {
     if (!Ok())
@@ -408,18 +438,11 @@ GdkFont *wxFont::GetInternalFont( float scale ) const
     }
     else
     {
-#if 0
-        if ((int_scale == 100) &&
-                (M_FONTDATA->m_family == wxSWISS) &&
-                (M_FONTDATA->m_style == wxNORMAL) &&
-                (M_FONTDATA->m_pointSize == 12) &&
-                (M_FONTDATA->m_weight == wxNORMAL) &&
-                (M_FONTDATA->m_underlined == FALSE))
+        if (*this == wxSystemSettings::GetSystemFont( wxSYS_DEFAULT_GUI_FONT))
         {
-            font = gdk_font_load( "-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*" );
+            font = GtkGetDefaultGuiFont();
         }
-        else
-#endif // 0
+        if (!font)
         {
             font = wxLoadQueryNearestFont( point_scale,
                                            M_FONTDATA->m_family,