- // 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 if (m_faceName == wxT("serif"))
- {
- m_family = wxFONTFAMILY_ROMAN;
- }
- else
- {
- m_family = wxFONTFAMILY_UNKNOWN;
- }
-
- // Pango description are never underlined (?)
- m_underlined = FALSE;
-
- // Cannot we choose that
- m_encoding = wxFONTENCODING_SYSTEM;
-#else // GTK 1.x
- // 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? or use wxFontMapper?
- m_encoding = wxFONTENCODING_SYSTEM;
- }
-#endif // GTK 2.0/1.x