+#ifdef __WXGTK20__
+ m_nativeFontInfo.FromString( fontname );
+
+ // Get native info
+ PangoFontDescription *desc = m_nativeFontInfo.description;
+
+ // init fields
+ m_faceName = wxGTK_CONV_BACK( pango_font_description_get_family( desc ) );
+
+ m_pointSize = pango_font_description_get_size( desc ) / PANGO_SCALE;
+
+ switch (pango_font_description_get_style( desc ))
+ {
+ case PANGO_STYLE_NORMAL:
+ m_style = wxFONTSTYLE_NORMAL;
+ break;
+ case PANGO_STYLE_ITALIC:
+ m_style = wxFONTSTYLE_ITALIC;
+ break;
+ case PANGO_STYLE_OBLIQUE:
+ m_style = wxFONTSTYLE_SLANT;
+ break;
+ }
+
+ switch (pango_font_description_get_weight( desc ))
+ {
+ case PANGO_WEIGHT_ULTRALIGHT:
+ m_weight = wxFONTWEIGHT_LIGHT;
+ break;
+ case PANGO_WEIGHT_LIGHT:
+ m_weight = wxFONTWEIGHT_LIGHT;
+ break;
+ case PANGO_WEIGHT_NORMAL:
+ m_weight = wxFONTWEIGHT_NORMAL;
+ break;
+ case PANGO_WEIGHT_BOLD:
+ m_weight = wxFONTWEIGHT_BOLD;
+ break;
+ case PANGO_WEIGHT_ULTRABOLD:
+ m_weight = wxFONTWEIGHT_BOLD;
+ break;
+ case PANGO_WEIGHT_HEAVY:
+ m_weight = wxFONTWEIGHT_BOLD;
+ break;
+ }
+
+ if (m_faceName == wxT("monospace"))
+ {
+ m_family = wxFONTFAMILY_TELETYPE;
+ }
+ else if (m_faceName == wxT("sans"))
+ {
+ m_family = wxFONTFAMILY_SWISS;
+ }
+ else
+ {
+ m_family = wxFONTFAMILY_UNKNOWN;
+ }
+
+ // Pango description are never underlined (?)
+ m_underlined = FALSE;
+
+ // Cannot we choose that
+ m_encoding = wxFONTENCODING_SYSTEM;
+#else
+ // remember the X font name
+ m_nativeFontInfo.SetXFontName(fontname);
+
+ // get the font parameters from the XLFD
+ // -------------------------------------
+
+ m_faceName = m_nativeFontInfo.GetXFontComponent(wxXLFD_FAMILY);
+
+ m_weight = wxFONTWEIGHT_NORMAL;
+
+ wxString w = m_nativeFontInfo.GetXFontComponent(wxXLFD_WEIGHT).Upper();
+ if ( !w.empty() && w != _T('*') )
+ {
+ // the test below catches all of BOLD, EXTRABOLD, DEMIBOLD, ULTRABOLD
+ // and BLACK
+ if ( ((w[0u] == _T('B') && (!wxStrcmp(w.c_str() + 1, wxT("OLD")) ||
+ !wxStrcmp(w.c_str() + 1, wxT("LACK"))))) ||
+ wxStrstr(w.c_str() + 1, _T("BOLD")) )
+ {
+ m_weight = wxFONTWEIGHT_BOLD;
+ }
+ else if ( w == _T("LIGHT") || w == _T("THIN") )
+ {
+ m_weight = wxFONTWEIGHT_LIGHT;
+ }
+ }
+
+ switch ( wxToupper(*m_nativeFontInfo.
+ GetXFontComponent(wxXLFD_SLANT).c_str()) )
+ {
+ case _T('I'): // italique
+ m_style = wxFONTSTYLE_ITALIC;
+ break;
+
+ case _T('O'): // oblique
+ m_style = wxFONTSTYLE_SLANT;
+ break;
+
+ default:
+ m_style = wxFONTSTYLE_NORMAL;
+ }
+
+ long ptSize;
+ if ( m_nativeFontInfo.GetXFontComponent(wxXLFD_POINTSIZE).ToLong(&ptSize) )
+ {
+ // size in XLFD is in 10 point units
+ m_pointSize = (int)(ptSize / 10);
+ }
+ else
+ {
+ m_pointSize = wxDEFAULT_FONT_SIZE;
+ }
+
+ // examine the spacing: if the font is monospaced, assume wxTELETYPE
+ // family for compatibility with the old code which used it instead of
+ // IsFixedWidth()
+ if ( m_nativeFontInfo.GetXFontComponent(wxXLFD_SPACING).Upper() == _T('M') )
+ {
+ m_family = wxFONTFAMILY_TELETYPE;
+ }
+ else // not monospaceed
+ {
+ // don't even try guessing it, it doesn't work for too many fonts
+ // anyhow
+ m_family = wxFONTFAMILY_UNKNOWN;
+ }
+
+ // X fonts are never underlined...
+ m_underlined = FALSE;
+
+ // deal with font encoding
+ wxString
+ registry = m_nativeFontInfo.GetXFontComponent(wxXLFD_REGISTRY).Upper(),
+ encoding = m_nativeFontInfo.GetXFontComponent(wxXLFD_ENCODING).Upper();
+
+ if ( registry == _T("ISO8859") )
+ {
+ int cp;
+ if ( wxSscanf(encoding, wxT("%d"), &cp) == 1 )
+ {
+ m_encoding = (wxFontEncoding)(wxFONTENCODING_ISO8859_1 + cp - 1);
+ }
+ }
+ else if ( registry == _T("MICROSOFT") )
+ {
+ int cp;
+ if ( wxSscanf(encoding, wxT("cp125%d"), &cp) == 1 )
+ {
+ m_encoding = (wxFontEncoding)(wxFONTENCODING_CP1250 + cp);
+ }
+ }
+ else if ( registry == _T("KOI8") )
+ {
+ m_encoding = wxFONTENCODING_KOI8;
+ }
+ else // unknown encoding
+ {
+ // may be give a warning here?
+ m_encoding = wxFONTENCODING_SYSTEM;
+ }
+#endif