always return a non NULL font from wxLoadFont

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10267 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2001-05-22 13:26:01 +00:00
parent 92f5ff59cc
commit f139dfe8e3

View File

@ -318,11 +318,14 @@ wxNativeFont wxLoadQueryNearestFont(int pointSize,
*xFontName = newFontName;
}
// try to load exactly the font requested first
if( !font )
{
font = wxLoadQueryFont( pointSize, family, style, weight,
underlined, facename,
underlined, facename,
info.xregistry, info.xencoding,
xFontName );
}
if ( !font )
{
@ -357,22 +360,49 @@ wxNativeFont wxLoadQueryNearestFont(int pointSize,
xFontName );
}
// Bogus font I
// ignore size, family, style and weight but try to find font with the
// given facename and encoding
if ( !font )
{
font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL,
underlined, facename,
info.xregistry, info.xencoding,
xFontName);
}
// Bogus font II
if ( !font )
{
font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL,
underlined, wxEmptyString,
info.xregistry, info.xencoding,
xFontName);
// ignore family as well
if ( !font )
{
font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL,
underlined, wxEmptyString,
info.xregistry, info.xencoding,
xFontName);
// if it still failed, try to get the font of any size but
// with the requested encoding: this can happen if the
// encoding is only available in one size which happens to be
// different from 120
if ( !font )
{
font = wxLoadQueryFont(-1, wxDEFAULT, wxNORMAL, wxNORMAL,
FALSE, wxEmptyString,
info.xregistry, info.xencoding,
xFontName);
// this should never happen as we had tested for it in the
// very beginning, but if it does, do return something non
// NULL or we'd crash in wxFont code
if ( !font )
{
wxFAIL_MSG( _T("this encoding should be available!") );
font = wxLoadQueryFont(-1,
wxDEFAULT, wxNORMAL, wxNORMAL,
FALSE, wxEmptyString,
_T("*"), _T("*"),
xFontName);
}
}
}
}
}
@ -591,10 +621,21 @@ static wxNativeFont wxLoadQueryFont(int pointSize,
default: xweight = wxT("*"); break;
}
// if pointSize is -1, don't specify any
wxString sizeSpec;
if ( fontSpec == -1 )
{
sizeSpec = _T('*');
}
else
{
sizeSpec.Printf(_T("%d"), pointSize);
}
// construct the X font spec from our data
fontSpec.Printf(wxT("-*-%s-%s-%s-normal-*-*-%d-*-*-*-*-%s-%s"),
fontSpec.Printf(wxT("-*-%s-%s-%s-normal-*-*-%s-*-*-*-*-%s-%s"),
xfamily.c_str(), xweight.c_str(), xstyle.c_str(),
pointSize, xregistry.c_str(), xencoding.c_str());
sizeSpec.c_str(), xregistry.c_str(), xencoding.c_str());
if( xFontName )
*xFontName = fontSpec;