- // 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;
- }