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:
parent
92f5ff59cc
commit
f139dfe8e3
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user