+ 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 wxLoadFont(fontSpec);
+}
+
+wxNativeFont wxLoadQueryNearestFont(int pointSize,
+ int family,
+ int style,
+ int weight,
+ bool underlined,
+ const wxString &facename,
+ wxFontEncoding encoding)