- wxString xfamily;
- 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("*");
- }
-
- wxString fontSpec;
- if (!facename.IsEmpty())
- {
- fontSpec.Printf(_T("-*-%s-*-*-normal-*-*-*-*-*-*-*-*-*"),
- facename.c_str());
-
- if ( wxTestFontSpec(fontSpec) )
- {
- xfamily = facename;
- }
- //else: no such family, use default one instead
- }
-
- wxString xstyle;
- switch (style)
- {
- case wxITALIC: xstyle = _T("i"); break;
- case wxSLANT: xstyle = _T("o"); break;
- case wxNORMAL: xstyle = _T("r"); break;
- default: xstyle = _T("*"); break;
- }
-
- wxString xweight;
- switch (weight)
- {
- case wxBOLD: xweight = _T("bold"); break;
- case wxLIGHT:
- case wxNORMAL: xweight = _T("medium"); break;
- default: xweight = _T("*"); break;
- }
-
- wxString xregistry, xencoding;
- if ( encoding == wxFONTENCODING_DEFAULT )
- {
- // use the apps default
- encoding = wxFont::GetDefaultEncoding();
- }
-
- bool test = TRUE; // should we test for availability of encoding?
- switch ( encoding )
- {
- case wxFONTENCODING_ISO8859_1:
- case wxFONTENCODING_ISO8859_2:
- case wxFONTENCODING_ISO8859_3:
- case wxFONTENCODING_ISO8859_4:
- case wxFONTENCODING_ISO8859_5:
- case wxFONTENCODING_ISO8859_6:
- case wxFONTENCODING_ISO8859_7:
- case wxFONTENCODING_ISO8859_8:
- case wxFONTENCODING_ISO8859_9:
- case wxFONTENCODING_ISO8859_10:
- case wxFONTENCODING_ISO8859_11:
- case wxFONTENCODING_ISO8859_13:
- case wxFONTENCODING_ISO8859_14:
- case wxFONTENCODING_ISO8859_15:
- {
- int cp = encoding - wxFONTENCODING_ISO8859_1 + 1;
- xregistry = _T("iso8859");
- xencoding.Printf(_T("%d"), cp);
- }
- break;
-
- case wxFONTENCODING_KOI8:
- xregistry = _T("koi8");
- if ( wxTestFontSpec(_T("-*-*-*-*-*-*-*-*-*-*-*-*-koi8-1")) )
- {
- xencoding = _T("1");
-
- // test passed, no need to do it once more
- test = FALSE;
- }
- else
- {
- xencoding = _T("*");
- }
- break;
-
- case wxFONTENCODING_CP1250:
- case wxFONTENCODING_CP1251:
- case wxFONTENCODING_CP1252:
- {
- int cp = encoding - wxFONTENCODING_CP1250 + 1250;
- fontSpec.Printf(_T("-*-*-*-*-*-*-*-*-*-*-*-*-microsoft-cp%d"),
- cp);
- if ( wxTestFontSpec(fontSpec) )
- {
- xregistry = _T("microsoft");
- xencoding.Printf(_T("cp%d"), cp);
-
- // test passed, no need to do it once more
- test = FALSE;
- }
- else
- {
- // fall back to LatinX
- xregistry = _T("iso8859");
- xencoding.Printf(_T("%d"), cp - 1249);
- }
- }
- break;
-
- case wxFONTENCODING_SYSTEM:
- default:
- test = FALSE;
- xregistry =
- xencoding = _T("*");
- }
-
- if ( test )
- {
- fontSpec.Printf(_T("-*-*-*-*-*-*-*-*-*-*-*-*-%s-%s"),
- xregistry.c_str(), xencoding.c_str());
- if ( !wxTestFontSpec(fontSpec) )
- {
- // this encoding isn't available - what to do?
- xregistry =
- xencoding = _T("*");
- }
- }
-
- // construct the X font spec from our data
- fontSpec.Printf(_T("-*-%s-%s-%s-normal-*-*-%d-*-*-*-*-%s-%s"),
- xfamily.c_str(), xweight.c_str(), xstyle.c_str(),
- pointSize, xregistry.c_str(), xencoding.c_str());
-
- return gdk_font_load( wxConvCurrent->cWX2MB(fontSpec) );