bool underlined,
const wxString& facename,
const wxString& xregistry,
- const wxString& xencoding);
+ const wxString& xencoding,
+ wxString* xFontName);
// ============================================================================
// implementation
// encodingid;registry;encoding[;facename]
bool wxNativeEncodingInfo::FromString(const wxString& s)
{
+ // use ";", not "-" because it may be part of encoding name
wxStringTokenizer tokenizer(s, _T(";"));
- // cannot use "-" because it may be part of encoding name
wxString encid = tokenizer.GetNextToken();
long enc;
}
break;
+ case wxFONTENCODING_UTF8:
+ // FIXME: this is probably false, but this is how they are called on
+ // my system and I don't know what the standard XFLD is (VZ)
+ info->xregistry = wxT("iso646.1991");
+ info->xencoding = wxT("*");
+ break;
+
case wxFONTENCODING_KOI8:
info->xregistry = wxT("koi8");
int weight,
bool underlined,
const wxString &facename,
- wxFontEncoding encoding)
+ wxFontEncoding encoding,
+ wxString* xFontName)
{
if ( encoding == wxFONTENCODING_DEFAULT )
{
}
}
}
-
+
// OK, we have the correct xregistry/xencoding in info structure
- wxNativeFont font = wxLoadQueryFont( pointSize, family, style, weight,
+ wxNativeFont font = 0;
+
+ // if we already have the X font name, try to use it
+ if( xFontName && !xFontName->IsEmpty() )
+ {
+ //
+ // Make sure point size is correct for scale factor.
+ //
+ wxStringTokenizer tokenizer(*xFontName, _T("-"), wxTOKEN_RET_DELIMS);
+ wxString newFontName;
+
+ for(int i = 0; i < 8; i++)
+ newFontName += tokenizer.NextToken();
+
+ (void) tokenizer.NextToken();
+
+ newFontName += wxString::Format("%d-", pointSize);
+
+ while(tokenizer.HasMoreTokens())
+ newFontName += tokenizer.GetNextToken();
+
+ font = wxLoadFont(newFontName);
+
+ if(font)
+ *xFontName = newFontName;
+ }
+
+ if( !font )
+ font = wxLoadQueryFont( pointSize, family, style, weight,
underlined, facename,
- info.xregistry, info.xencoding );
+ info.xregistry, info.xencoding,
+ xFontName );
if ( !font )
{
for ( i = pointSize - 10; !font && i >= 10 && i >= min_size; i -= 10 )
{
font = wxLoadQueryFont(i, family, style, weight, underlined,
- facename, info.xregistry, info.xencoding);
+ facename, info.xregistry, info.xencoding,
+ xFontName);
}
// Search for larger size (approx.)
for ( i = pointSize + 10; !font && i <= max_size; i += 10 )
{
font = wxLoadQueryFont(i, family, style, weight, underlined,
- facename, info.xregistry, info.xencoding);
+ facename, info.xregistry, info.xencoding,
+ xFontName);
}
// Try default family
{
font = wxLoadQueryFont(pointSize, wxDEFAULT, style, weight,
underlined, facename,
- info.xregistry, info.xencoding );
+ info.xregistry, info.xencoding,
+ xFontName );
}
// Bogus font I
{
font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL,
underlined, facename,
- info.xregistry, info.xencoding);
+ info.xregistry, info.xencoding,
+ xFontName);
}
// Bogus font II
{
font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL,
underlined, wxEmptyString,
- info.xregistry, info.xencoding);
+ info.xregistry, info.xencoding,
+ xFontName);
}
}
wxNativeFont test = (wxNativeFont) g_fontHash->Get( fontspec );
if (test)
{
-// printf( "speed up\n" );
return TRUE;
}
test = wxLoadFont(fontspec);
g_fontHash->Put( fontspec, (wxObject*) test );
-
+
if ( test )
{
wxFreeFont(test);
bool WXUNUSED(underlined),
const wxString& facename,
const wxString& xregistry,
- const wxString& xencoding)
+ const wxString& xencoding,
+ wxString* xFontName)
{
wxString xfamily;
switch (family)
xfamily.c_str(), xweight.c_str(), xstyle.c_str(),
pointSize, xregistry.c_str(), xencoding.c_str());
+ if( xFontName )
+ *xFontName = fontSpec;
+
return wxLoadFont(fontSpec);
}