]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/font.cpp
1. wxTextControl::SetFont() does something (good or bad - for you to judge)
[wxWidgets.git] / src / gtk1 / font.cpp
index c1f43fcf7ffce10ccfa2b33aa639d1b815fde88f..ceb1255ac4d1a0416698b02e788228d53b9754db 100644 (file)
 
 #include "wx/font.h"
 #include "wx/utils.h"
+#include "wx/log.h"
 #include <strings.h>
 
+#include "gdk/gdk.h"
+
 //-----------------------------------------------------------------------------
 // local data
 //-----------------------------------------------------------------------------
 
+/*
 extern wxFontNameDirectory *wxTheFontNameDirectory;
+*/
 
 //-----------------------------------------------------------------------------
 // wxFont
@@ -30,17 +35,17 @@ class wxFontRefData: public wxObjectRefData
 public:
 
     wxFontRefData();
+    wxFontRefData( const wxFontRefData& data );
     ~wxFontRefData();
 
-    wxList   m_scaled_xfonts;
-    int      m_pointSize;
-    int      m_family, m_style, m_weight;
-    bool     m_underlined;
-    int      m_fontId;
-    char*    m_faceName;
+    wxList    m_scaled_xfonts;
+    int       m_pointSize;
+    int       m_family, m_style, m_weight;
+    bool      m_underlined;
+    wxString  m_faceName;
 
-    bool     m_byXFontName;
-    GdkFont *m_font;
+    bool      m_byXFontName;
+    GdkFont  *m_font;
 
     friend wxFont;
 };
@@ -53,11 +58,22 @@ wxFontRefData::wxFontRefData() : m_scaled_xfonts(wxKEY_INTEGER)
     m_style = wxNORMAL;
     m_weight = wxNORMAL;
     m_underlined = FALSE;
-    m_fontId = 0;
-    m_faceName = (char *) NULL;
     m_font = (GdkFont *) NULL;
 }
 
+wxFontRefData::wxFontRefData( const wxFontRefData& data ) : m_scaled_xfonts(wxKEY_INTEGER)
+{
+    m_byXFontName = FALSE;
+    m_pointSize = data.m_pointSize;
+    m_family = data.m_family;
+    m_style = data.m_style;
+    m_weight = data.m_weight;
+    m_underlined = data.m_underlined;
+    m_faceName = data.m_faceName;
+    m_font = (GdkFont *) NULL;
+    if (data.m_font) m_font = gdk_font_ref( data.m_font );
+}
+
 wxFontRefData::~wxFontRefData()
 {
     wxNode *node = m_scaled_xfonts.First();
@@ -68,11 +84,6 @@ wxFontRefData::~wxFontRefData()
         gdk_font_unref( font );
         node = next;
     }
-    if (m_faceName)
-    {
-        delete m_faceName;
-        m_faceName = (char *) NULL;
-    }
     if (m_font) gdk_font_unref( m_font );
 }
 
@@ -97,50 +108,36 @@ wxFont::wxFont( char *xFontName )
     M_FONTDATA->m_font = gdk_font_load( xFontName );
 }
 
-wxFont::wxFont(int PointSize, int FontIdOrFamily, int Style, int Weight,
-        bool Underlined, const char* Face)
+wxFont::wxFont( int pointSize, int family, int style, int weight, bool underlined, const wxString& face )
 {
     m_refData = new wxFontRefData();
 
-    if (FontIdOrFamily == wxDEFAULT) FontIdOrFamily = wxSWISS;
-    M_FONTDATA->m_family = FontIdOrFamily;
-
-    if ((M_FONTDATA->m_faceName = (Face) ? copystring(Face) : (char*)NULL) )
-    {
-        M_FONTDATA->m_fontId = wxTheFontNameDirectory->FindOrCreateFontId( Face, FontIdOrFamily );
-        M_FONTDATA->m_family  = wxTheFontNameDirectory->GetFamily( FontIdOrFamily );
-    }
+    if (family == wxDEFAULT) 
+        M_FONTDATA->m_family = wxSWISS;
     else
-    {
-        M_FONTDATA->m_fontId = FontIdOrFamily;
-        M_FONTDATA->m_family  = wxTheFontNameDirectory->GetFamily( FontIdOrFamily );
-    }
-
-    if (Style == wxDEFAULT) Style = wxNORMAL;
-    M_FONTDATA->m_style = Style;
-    if (Weight == wxDEFAULT) Weight = wxNORMAL;
-    M_FONTDATA->m_weight = Weight;
-    if (PointSize == wxDEFAULT) PointSize = 12;
-    M_FONTDATA->m_pointSize = PointSize;
-    M_FONTDATA->m_underlined = Underlined;
-
-    if (wxTheFontList) wxTheFontList->Append( this );
-}
+        M_FONTDATA->m_family = family;
+    
+    if (!face.IsEmpty()) M_FONTDATA->m_faceName = face;
 
-wxFont::wxFont(int PointSize, const char *Face, int Family, int Style,
-        int Weight, bool Underlined)
-{
-    m_refData = new wxFontRefData();
-
-    M_FONTDATA->m_fontId = wxTheFontNameDirectory->FindOrCreateFontId( Face, Family );
-    M_FONTDATA->m_faceName = (Face) ? copystring(Face) : (char*)NULL;
-    M_FONTDATA->m_family = wxTheFontNameDirectory->GetFamily( M_FONTDATA->m_fontId );
-    M_FONTDATA->m_style = Style;
-    M_FONTDATA->m_weight = Weight;
-    M_FONTDATA->m_pointSize = PointSize;
-    M_FONTDATA->m_underlined = Underlined;
+    if (style == wxDEFAULT) 
+        M_FONTDATA->m_style = wxNORMAL;
+    else
+        M_FONTDATA->m_style = style;
+    
+    if (weight == wxDEFAULT) 
+        M_FONTDATA->m_weight = wxNORMAL;
+    else
+        M_FONTDATA->m_weight = weight;
+    
+    if (pointSize == wxDEFAULT) 
+        M_FONTDATA->m_pointSize = 12;
+    else
+        M_FONTDATA->m_pointSize = pointSize;
+    
+    M_FONTDATA->m_underlined = underlined;
 
     if (wxTheFontList) wxTheFontList->Append( this );
+  
 }
 
 wxFont::wxFont( const wxFont& font )
@@ -162,12 +159,12 @@ wxFont& wxFont::operator = ( const wxFont& font )
     return *this;
 }
 
-bool wxFont::operator == ( const wxFont& font )
+bool wxFont::operator == ( const wxFont& font ) const
 {
     return m_refData == font.m_refData;
 }
 
-bool wxFont::operator != ( const wxFont& font )
+bool wxFont::operator != ( const wxFont& font ) const
 {
     return m_refData != font.m_refData;
 }
@@ -179,174 +176,169 @@ bool wxFont::Ok() const
 
 int wxFont::GetPointSize() const
 {
-    if (!Ok())
-    {
-        wxFAIL_MSG( "invalid font" );
-        return 0;
-    }
+    wxCHECK_MSG( Ok(), 0, _T("invalid font") );
 
     return M_FONTDATA->m_pointSize;
 }
 
-wxString wxFont::GetFaceString() const
-{
-    if (!Ok())
-    {
-        wxFAIL_MSG( "invalid font" );
-        return "";
-    }
-
-    wxString s = wxTheFontNameDirectory->GetFontName( M_FONTDATA->m_fontId );
-    return s;
-}
-
 wxString wxFont::GetFaceName() const
 {
-    if (!Ok())
-    {
-        wxFAIL_MSG( "invalid font" );
-        return "";
-    }
+    wxCHECK_MSG( Ok(), _T(""), _T("invalid font") );
 
-    wxString s = wxTheFontNameDirectory->GetFontName( M_FONTDATA->m_fontId );
-    return s;
+    return M_FONTDATA->m_faceName;
 }
 
 int wxFont::GetFamily() const
 {
-    if (!Ok())
-    {
-        wxFAIL_MSG( "invalid font" );
-        return 0;
-    }
+    wxCHECK_MSG( Ok(), 0, _T("invalid font") );
 
     return M_FONTDATA->m_family;
 }
 
 wxString wxFont::GetFamilyString() const
 {
-    if (!Ok())
-    {
-        wxFAIL_MSG( "invalid font" );
-        return "wxDEFAULT";
-    }
+    wxCHECK_MSG( Ok(), _T("wxDEFAULT"), _T("invalid font") );
 
     switch (M_FONTDATA->m_family)
     {
-        case wxDECORATIVE:   return wxString("wxDECORATIVE");
-        case wxROMAN:        return wxString("wxROMAN");
-        case wxSCRIPT:       return wxString("wxSCRIPT");
-        case wxSWISS:        return wxString("wxSWISS");
-        case wxMODERN:       return wxString("wxMODERN");
-        case wxTELETYPE:     return wxString("wxTELETYPE");
-        default:             return "wxDEFAULT";
+        case wxDECORATIVE:   return wxString(_T("wxDECORATIVE"));
+        case wxROMAN:        return wxString(_T("wxROMAN"));
+        case wxSCRIPT:       return wxString(_T("wxSCRIPT"));
+        case wxSWISS:        return wxString(_T("wxSWISS"));
+        case wxMODERN:       return wxString(_T("wxMODERN"));
+        case wxTELETYPE:     return wxString(_T("wxTELETYPE"));
+        default:             return _T("wxDEFAULT");
     }
 
     return "wxDEFAULT";
 }
 
-int wxFont::GetFontId() const
-{
-    if (!Ok())
-    {
-        wxFAIL_MSG( "invalid font" );
-        return 0;
-    }
-
-    return M_FONTDATA->m_fontId; // stub
-}
-
 int wxFont::GetStyle() const
 {
-    if (!Ok())
-    {
-        wxFAIL_MSG( "invalid font" );
-        return 0;
-    }
+    wxCHECK_MSG( Ok(), 0, _T("invalid font") );
 
     return M_FONTDATA->m_style;
 }
 
 wxString wxFont::GetStyleString() const
 {
-    if (!Ok())
-    {
-        wxFAIL_MSG( "invalid font" );
-        return "wxDEFAULT";
-    }
+    wxCHECK_MSG( Ok(), _T("wxDEFAULT"), _T("invalid font") );
 
     switch (M_FONTDATA->m_style)
     {
-        case wxNORMAL:   return wxString("wxNORMAL");
-        case wxSLANT:    return wxString("wxSLANT");
-        case wxITALIC:   return wxString("wxITALIC");
-        default:         return wxString("wxDEFAULT");
+        case wxNORMAL:   return wxString(_T("wxNORMAL"));
+        case wxSLANT:    return wxString(_T("wxSLANT"));
+        case wxITALIC:   return wxString(_T("wxITALIC"));
+        default:         return wxString(_T("wxDEFAULT"));
     }
 
-    return wxString("wxDEFAULT");
+    return wxString(_T("wxDEFAULT"));
 }
 
 int wxFont::GetWeight() const
 {
-    if (!Ok())
-    {
-        wxFAIL_MSG( "invalid font" );
-        return 0;
-    }
+    wxCHECK_MSG( Ok(), 0, _T("invalid font") );
 
     return M_FONTDATA->m_weight;
 }
 
 wxString wxFont::GetWeightString() const
 {
-    if (!Ok())
-    {
-        wxFAIL_MSG( "invalid font" );
-        return "wxDEFAULT";
-    }
+    wxCHECK_MSG( Ok(), _T("wxDEFAULT"), _T("invalid font") );
 
     switch (M_FONTDATA->m_weight)
     {
-        case wxNORMAL:   return wxString("wxNORMAL");
-        case wxBOLD:     return wxString("wxBOLD");
-        case wxLIGHT:    return wxString("wxLIGHT");
-        default:         return wxString("wxDEFAULT");
+        case wxNORMAL:   return wxString(_T("wxNORMAL"));
+        case wxBOLD:     return wxString(_T("wxBOLD"));
+        case wxLIGHT:    return wxString(_T("wxLIGHT"));
+        default:         return wxString(_T("wxDEFAULT"));
     }
 
-    return wxString("wxDEFAULT");
+    return wxString(_T("wxDEFAULT"));
 }
 
 bool wxFont::GetUnderlined() const
 {
-    if (!Ok())
+    wxCHECK_MSG( Ok(), FALSE, _T("invalid font") );
+
+    return M_FONTDATA->m_underlined;
+}
+
+void wxFont::Unshare()
+{
+    if (!m_refData)
+    {
+       m_refData = new wxFontRefData();
+    }
+    else
     {
-        wxFAIL_MSG( "invalid font" );
-        return FALSE;
+       wxFontRefData* ref = new wxFontRefData(*(wxFontRefData*)m_refData);
+       UnRef();
+       m_refData = ref;
     }
+}
 
-    return M_FONTDATA->m_underlined;
+void wxFont::SetPointSize(int pointSize)
+{
+    Unshare();
+
+    M_FONTDATA->m_pointSize = pointSize;
+}
+
+void wxFont::SetFamily(int family)
+{
+    Unshare();
+
+    M_FONTDATA->m_family = family;
+}
+
+void wxFont::SetStyle(int style)
+{
+    Unshare();
+
+    M_FONTDATA->m_style = style;
+}
+
+void wxFont::SetWeight(int weight)
+{
+    Unshare();
+
+    M_FONTDATA->m_weight = weight;
+}
+
+void wxFont::SetFaceName(const wxString& faceName)
+{
+    Unshare();
+
+    M_FONTDATA->m_faceName = faceName;
+}
+
+void wxFont::SetUnderlined(bool underlined)
+{
+    Unshare();
+
+    M_FONTDATA->m_underlined = underlined;
 }
 
 //-----------------------------------------------------------------------------
 // get internal representation of font
 //-----------------------------------------------------------------------------
 
-// local help function
-static GdkFont *wxLoadQueryNearestFont(int point_size, int fontid,
-        int style, int weight,
-        bool underlined);
+static GdkFont *wxLoadQueryNearestFont( int point_size, int family, int style, int weight, 
+                                        bool underlined, const wxString &facename );
 
-GdkFont *wxFont::GetInternalFont(float scale) const
+GdkFont *wxFont::GetInternalFont( float scale ) const
 {
     if (!Ok())
     {
-        wxFAIL_MSG( "invalid font" );
+        wxFAIL_MSG( _T("invalid font") );
         return (GdkFont*) NULL;
     }
 
+    /* short cut if the special X font constructor has been used */
     if (M_FONTDATA->m_byXFontName) return M_FONTDATA->m_font;
 
-    long int_scale = long(scale * 100.0 + 0.5); // key for fontlist
+    long int_scale = long(scale * 100.0 + 0.5); /* key for fontlist */
     int point_scale = (M_FONTDATA->m_pointSize * 10 * int_scale) / 100;
     GdkFont *font = (GdkFont *) NULL;
 
@@ -357,13 +349,7 @@ GdkFont *wxFont::GetInternalFont(float scale) const
     }
     else
     {
-        /*
-           if (int_scale == 100) printf( "int_scale.\n" );
-           if (M_FONTDATA->m_style == wxSWISS) printf( "swiss.\n" );
-           if (M_FONTDATA->m_pointSize == 12) printf( "12.\n" );
-           if (M_FONTDATA->m_weight == wxNORMAL) printf( "normal.\n" );
-           if (M_FONTDATA->m_underlined == FALSE) printf( "false.\n" );
-         */
+/*
         if ((int_scale == 100) &&
                 (M_FONTDATA->m_family == wxSWISS) &&
                 (M_FONTDATA->m_style == wxNORMAL) &&
@@ -374,15 +360,19 @@ GdkFont *wxFont::GetInternalFont(float scale) const
             font = gdk_font_load( "-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*" );
         }
         else
+*/
         {
-            font = wxLoadQueryNearestFont( point_scale, M_FONTDATA->m_fontId, M_FONTDATA->m_style,
-                    M_FONTDATA->m_weight, M_FONTDATA->m_underlined );
+            font = wxLoadQueryNearestFont( point_scale, M_FONTDATA->m_family, M_FONTDATA->m_style,
+                    M_FONTDATA->m_weight, M_FONTDATA->m_underlined, M_FONTDATA->m_faceName );
         }
         M_FONTDATA->m_scaled_xfonts.Append( int_scale, (wxObject*)font );
     }
+    
     if (!font)
-        printf("could not load any font");
-    //    wxError("could not load any font", "wxFont");
+    {
+        wxLogError(_T("could not load any font"));
+    }
+       
     return font;
 }
 
@@ -390,51 +380,91 @@ GdkFont *wxFont::GetInternalFont(float scale) const
 // local utilities to find a X font
 //-----------------------------------------------------------------------------
 
-static GdkFont *wxLoadQueryFont(int point_size, int fontid, int style,
-        int weight, bool WXUNUSED(underlined))
+static GdkFont*wxLoadQueryFont( int pointSize, int family, int style, int weight, 
+                                bool underlined, const wxString &facename )
 {
-    char buffer[512];
-    char *name = wxTheFontNameDirectory->GetScreenName( fontid, weight, style );
-
-    if (!name)
-        name = "-*-*-*-*-*-*-*-%d-*-*-*-*-*-*";
-    sprintf(buffer, name, point_size);
-
-    return gdk_font_load( buffer );
+    wxChar *xfamily = (wxChar*) NULL;
+    wxChar *xstyle = (wxChar*) NULL;
+    wxChar *xweight = (wxChar*) NULL;
+    
+    switch (family)
+    {
+        case wxDECORATIVE: xfamily = _T("lucida"); break;
+        case wxROMAN:      xfamily = _T("times");  break;
+        case wxMODERN:     xfamily = _T("courier"); break;
+        case wxSWISS:      xfamily = _T("helvetica"); break;
+       case wxTELETYPE:   xfamily = _T("lucidatypewriter"); break;
+       case wxSCRIPT:     xfamily = _T("utopia"); break;
+        default:           xfamily = _T("*");
+    }
+    
+    if (!facename.IsEmpty())
+    {
+        wxSprintf( wxBuffer, _T("-*-%s-*-*-normal-*-*-*-*-*-*-*-*-*"), facename.c_str() );
+        GdkFont *test = gdk_font_load( wxConvCurrent->cWX2MB(wxBuffer) );
+        if (test)
+       {
+           gdk_font_unref( test );
+           xfamily = WXSTRINGCAST facename;
+       }
+    }
+    
+    switch (style)
+    {
+        case wxITALIC:     xstyle = _T("i"); break;
+        case wxSLANT:      xstyle = _T("o"); break;
+        case wxNORMAL:     xstyle = _T("r"); break;
+        default:           xstyle = _T("*"); break;
+    }
+    switch (weight)
+    {
+        case wxBOLD:       xweight = _T("bold"); break;
+        case wxLIGHT:
+        case wxNORMAL:     xweight = _T("medium"); break;
+        default:           xweight = _T("*"); break;
+    }
+    
+    wxSprintf( wxBuffer, _T("-*-%s-%s-%s-normal-*-*-%d-*-*-*-*-*-*"),
+        xfamily, xweight, xstyle, pointSize);
+    
+    return gdk_font_load( wxConvCurrent->cWX2MB(wxBuffer) );
 }
 
-static GdkFont *wxLoadQueryNearestFont(int point_size, int fontid,
-        int style, int weight,
-        bool underlined)
+static GdkFont *wxLoadQueryNearestFont( int point_size, int family, int style, int weight, 
+                                       bool underlined, const wxString &facename )
 {
-    GdkFont *font;
-
-    font = wxLoadQueryFont( point_size, fontid, style, weight, underlined );
+    GdkFont *font = wxLoadQueryFont( point_size, family, style, weight, underlined, facename );
 
-    if (!font) {
-        // search up and down by stepsize 10
+    if (!font) 
+    {
+        /* search up and down by stepsize 10 */
         int max_size = point_size + 20 * (1 + (point_size/180));
         int min_size = point_size - 20 * (1 + (point_size/180));
+
         int i;
 
-        // Search for smaller size (approx.)
+        /* Search for smaller size (approx.) */
         for (i=point_size-10; !font && i >= 10 && i >= min_size; i -= 10)
-            font = wxLoadQueryFont(i, fontid, style, weight, underlined);
-        // Search for larger size (approx.)
+            font = wxLoadQueryFont(i, family, style, weight, underlined, facename );
+
+        /* Search for larger size (approx.) */
         for (i=point_size+10; !font && i <= max_size; i += 10)
-            font = wxLoadQueryFont(i, fontid, style, weight, underlined);
-        // Try default family
-        if (!font && fontid != wxDEFAULT)
-            font = wxLoadQueryFont(point_size, wxDEFAULT, style,
-                    weight, underlined);
-        // Bogus font
+            font = wxLoadQueryFont( i, family, style, weight, underlined, facename );
+
+        /* Try default family */
+        if (!font && family != wxDEFAULT)
+            font = wxLoadQueryFont( point_size, wxDEFAULT, style, weight, underlined, facename );
+
+        /* Bogus font */
         if (!font)
-            font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL,
-                    underlined);
+            font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL, underlined, facename );
     }
+    
     return font;
 }
 
+/*
+
 //-----------------------------------------------------------------------------
 // face names and index functions
 //-----------------------------------------------------------------------------
@@ -515,7 +545,8 @@ static char *font_defaults[] = {
     "ScreenItalic", "i",
     "ScreenSlant", "o",
 
-    "ScreenDefaultBase", "misc-fixed",
+    "ScreenDefaultBase", "*-times",
+    
     "ScreenRomanBase", "*-times",
     "ScreenDecorativeBase", "*-helvetica",
     "ScreenModernBase", "*-courier",
@@ -548,7 +579,8 @@ enum {wxSTYLE_NORMAL,  wxSTYLE_ITALIC, wxSTYLE_SLANT,  wxNUM_STYLES};
 
 static int WCoordinate(int w)
 {
-    switch (w) {
+    switch (w) 
+    {
         case wxBOLD:   return wxWEIGHT_BOLD;
         case wxLIGHT:  return wxWEIGHT_LIGHT;
         case wxNORMAL:
@@ -558,7 +590,8 @@ static int WCoordinate(int w)
 
 static int SCoordinate(int s)
 {
-    switch (s) {
+    switch (s) 
+    {
         case wxITALIC: return wxSTYLE_ITALIC;
         case wxSLANT:  return wxSTYLE_SLANT;
         case wxNORMAL:
@@ -570,7 +603,8 @@ static int SCoordinate(int s)
 // wxSuffixMap
 //-----------------------------------------------------------------------------
 
-class wxSuffixMap {
+class wxSuffixMap 
+{
 public:
     ~wxSuffixMap();
 
@@ -583,10 +617,6 @@ public:
     void Initialize(const char *, const char *);
 };
 
-//#if !USE_RESOURCES
-#define wxGetResource(a, b, c) 0
-//#endif
-
 static void SearchResource(const char *prefix, const char **names, int count, char **v)
 {
     int k, i, j;
@@ -597,20 +627,32 @@ static void SearchResource(const char *prefix, const char **names, int count, ch
     *v = (char *) NULL;
     internal = (char *) NULL;
 
-    for (i = 0; i < k; i++) {
+    for (i = 0; i < k; i++) 
+    {
         strcpy(resource, prefix);
-        for (j = 0; j < count; j++) {
+        for (j = 0; j < count; j++) 
+       {
+           // upon failure to find a matching fontname 
+           //   in the default fonts above, we substitute more
+           //   and more values by _ so that at last ScreenMyFontBoldNormal
+           //   would turn into Screen___ and this will then get
+           //   converted to -${ScreenDefaultBase}${ScreenStdSuffix}
+       
             if (!(i & (1 << j)))
                 strcat(resource, names[j]);
             else
                 strcat(resource, "_");
         }
-        if (wxGetResource(wxAPP_CLASS, (char *)resource, v))
-            return;
-        if (!internal) {
+       
+        // we previously search the Xt-resources here 
+
+        if (!internal) 
+       {
             defaults = font_defaults;
-            while (*defaults) {
-                if (!strcmp(*defaults, resource)) {
+            while (*defaults) 
+           {
+                if (!strcmp(*defaults, resource)) 
+               {
                     internal = defaults[1];
                     break;
                 }
@@ -618,8 +660,27 @@ static void SearchResource(const char *prefix, const char **names, int count, ch
             }
         }
     }
+    
     if (internal)
-        *v = copystring(internal);
+    {
+        if ((strcmp(internal,"-${ScreenDefaultBase}${ScreenStdSuffix}") == 0) &&
+           (strcmp(names[0], "Default") != 0))
+       {
+           // we did not find any font name in the standard list.
+           //   this can (hopefully does) mean that someone supplied
+           //   the facename in the wxFont constructor so we insert
+           //   it here 
+       
+           strcpy( resource,"-*-" );                  // any producer               
+           strcat( resource, names[0] );              // facename                   
+           strcat( resource, "${ScreenStdSuffix}" );  // add size params later on   
+           *v = copystring(resource);
+       }
+       else
+       {
+            *v = copystring(internal);
+       }
+    }
 }
 
 wxSuffixMap::~wxSuffixMap()
@@ -628,7 +689,8 @@ wxSuffixMap::~wxSuffixMap()
 
     for (k = 0; k < wxNUM_WEIGHTS; ++k)
         for (j = 0; j < wxNUM_STYLES; ++j)
-            if (map[k][j]) {
+            if (map[k][j]) 
+           {
                 delete[] map[k][j];
                 map[k][j] = (char *) NULL;
             }
@@ -641,15 +703,19 @@ void wxSuffixMap::Initialize(const char *resname, const char *devresname)
     int i, j, k;
     const char *names[3];
 
-    for (k = 0; k < wxNUM_WEIGHTS; k++) {
-        switch (k) {
+    for (k = 0; k < wxNUM_WEIGHTS; k++) 
+    {
+        switch (k) 
+       {
             case wxWEIGHT_NORMAL: weight = "Medium"; break;
             case wxWEIGHT_LIGHT:  weight = "Light"; break;
             case wxWEIGHT_BOLD:
-            default:          weight = "Bold";
+            default:              weight = "Bold";
         }
-        for (j = 0; j < wxNUM_STYLES; j++) {
-            switch (j) {
+        for (j = 0; j < wxNUM_STYLES; j++) 
+       {
+            switch (j) 
+           {
                 case wxSTYLE_NORMAL: style = "Straight"; break;
                 case wxSTYLE_ITALIC: style = "Italic"; break;
                 case wxSTYLE_SLANT:
@@ -660,18 +726,22 @@ void wxSuffixMap::Initialize(const char *resname, const char *devresname)
             names[2] = style;
 
             SearchResource(devresname, names, 3, &v);
-
-            /* Expand macros in the found string: */
+           
+            // Expand macros in the found string: 
 found:
             int len, closer = 0, startpos = 0;
 
             len = (v ? strlen(v) : 0);
-            for (i = 0; i < len; i++) {
-                if (v[i] == '$' && ((v[i+1] == '[') || (v[i+1] == '{'))) {
+            for (i = 0; i < len; i++) 
+           {
+                if (v[i] == '$' && ((v[i+1] == '[') || (v[i+1] == '{'))) 
+               {
                     startpos = i;
                     closer   = (v[i+1] == '[') ? ']' : '}';
                     ++i;
-                } else if (v[i] == closer) {
+                } 
+               else if (v[i] == closer) 
+               {
                     int newstrlen;
                     const char *r = (char *) NULL; bool delete_r = FALSE;
                     char *name;
@@ -679,7 +749,8 @@ found:
                     name = v + startpos + 2;
                     v[i] = 0;
 
-                    if (closer == '}') {
+                    if (closer == '}') 
+                   {
                         int i, count, len;
                         char **names;
 
@@ -692,7 +763,8 @@ found:
                         names = new char*[count];
                         names[0] = name;
                         for (i = 0, count = 1; i < len; i++)
-                            if (name[i] == ',') {
+                            if (name[i] == ',') 
+                           {
                                 names[count++] = name + i + 1;
                                 name[i] = 0;
                             }
@@ -701,12 +773,13 @@ found:
                         delete_r = (r != 0);
                         delete[] names;
 
-                        if (!r) {
+                        if (!r) 
+                       {
                             for (i = 0; i < len; i++)
                                 if (!name[i])
                                     name[i] = ',';
                             r = "";
-                            printf("Bad resource name \"%s\" in font lookup\n", name);
+                            wxLogError( "Bad resource name in font lookup." );
                         }
                     } else if (!strcmp(name, "weight")) {
                         r = weight;
@@ -716,7 +789,7 @@ found:
                         r = resname;
                     } else {
                         r = "";
-                        printf("Bad font macro name \"%s\"\n", name);
+                        wxLogError( "Bad font macro name." );
                     }
 
                     // add r to v
@@ -733,7 +806,7 @@ found:
                     goto found;
                 }
             }
-            /* We have a final value: */
+            // We have a final value: 
             map[k][j] = v;
         }
     }
@@ -743,7 +816,8 @@ found:
 // wxFontNameItem
 //-----------------------------------------------------------------------------
 
-class wxFontNameItem : public wxObject {
+class wxFontNameItem : public wxObject 
+{
     DECLARE_DYNAMIC_CLASS(wxFontNameItem)
 public:
         wxFontNameItem(const char *name, int id, int family);
@@ -811,7 +885,8 @@ wxFontNameDirectory::~wxFontNameDirectory()
     // Cleanup wxFontNameItems allocated
     table->BeginFind();
     wxNode *node = table->Next();
-    while (node) {
+    while (node) 
+    {
         wxFontNameItem *item = (wxFontNameItem*)node->Data();
         delete item;
         node = table->Next();
@@ -841,7 +916,9 @@ void wxFontNameDirectory::Initialize(int fontid, int family, const char *resname
 
     sprintf(resource, "Family%s", resname);
     SearchResource((const char *)resource, (const char **) NULL, 0, (char **)&fam);
-    if (fam) {
+    
+    if (fam) 
+    {
         if      (!strcmp(fam, "Default"))    family = wxDEFAULT;
         else if (!strcmp(fam, "Roman"))        family = wxROMAN;
         else if (!strcmp(fam, "Decorative"))    family = wxDECORATIVE;
@@ -857,9 +934,10 @@ void wxFontNameDirectory::Initialize(int fontid, int family, const char *resname
 int wxFontNameDirectory::FindOrCreateFontId(const char *name, int family)
 {
     int id;
-
+    
     // font exists -> return id
     if ( (id = GetFontId(name)) ) return id;
+    
     // create new font
     Initialize(id=GetNewFontId(), family, name);
     return id;
@@ -870,6 +948,7 @@ char *wxFontNameDirectory::GetScreenName(int fontid, int weight, int style)
     wxFontNameItem *item = (wxFontNameItem*)table->Get(fontid); // find font
     if (item)
         return item->GetScreenName(weight, style);
+       
     // font does not exist
     return (char *) NULL;
 }
@@ -879,6 +958,7 @@ char *wxFontNameDirectory::GetPostScriptName(int fontid, int weight, int style)
     wxFontNameItem *item = (wxFontNameItem*)table->Get(fontid); // find font
     if (item)
         return item->GetPostScriptName(weight, style);
+       
     // font does not exist
     return (char *) NULL;
 }
@@ -897,6 +977,7 @@ char *wxFontNameDirectory::GetFontName(int fontid)
     wxFontNameItem *item = (wxFontNameItem *)table->Get(fontid); // find font
     if (item)
         return item->GetName();
+       
     // font does not exist
     return (char *) NULL;
 }
@@ -907,11 +988,13 @@ int wxFontNameDirectory::GetFontId(const char *name)
 
     table->BeginFind();
 
-    while ( (node = table->Next()) ) {
+    while ( (node = table->Next()) ) 
+    {
         wxFontNameItem *item = (wxFontNameItem*)node->Data();
         if (!strcmp(name, item->name))
             return item->id;
     }
+    
     // font does not exist
     return 0;
 }
@@ -922,6 +1005,9 @@ int wxFontNameDirectory::GetFamily(int fontid)
 
     if (item)
         return item->family;
+       
     // font does not exist
     return wxDEFAULT;
 }
+
+*/