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:
@@ -318,11 +318,14 @@ wxNativeFont wxLoadQueryNearestFont(int pointSize,
|
|||||||
*xFontName = newFontName;
|
*xFontName = newFontName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// try to load exactly the font requested first
|
||||||
if( !font )
|
if( !font )
|
||||||
|
{
|
||||||
font = wxLoadQueryFont( pointSize, family, style, weight,
|
font = wxLoadQueryFont( pointSize, family, style, weight,
|
||||||
underlined, facename,
|
underlined, facename,
|
||||||
info.xregistry, info.xencoding,
|
info.xregistry, info.xencoding,
|
||||||
xFontName );
|
xFontName );
|
||||||
|
}
|
||||||
|
|
||||||
if ( !font )
|
if ( !font )
|
||||||
{
|
{
|
||||||
@@ -357,22 +360,49 @@ wxNativeFont wxLoadQueryNearestFont(int pointSize,
|
|||||||
xFontName );
|
xFontName );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bogus font I
|
// ignore size, family, style and weight but try to find font with the
|
||||||
|
// given facename and encoding
|
||||||
if ( !font )
|
if ( !font )
|
||||||
{
|
{
|
||||||
font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL,
|
font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL,
|
||||||
underlined, facename,
|
underlined, facename,
|
||||||
info.xregistry, info.xencoding,
|
info.xregistry, info.xencoding,
|
||||||
xFontName);
|
xFontName);
|
||||||
}
|
|
||||||
|
|
||||||
// Bogus font II
|
// ignore family as well
|
||||||
if ( !font )
|
if ( !font )
|
||||||
{
|
{
|
||||||
font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL,
|
font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL,
|
||||||
underlined, wxEmptyString,
|
underlined, wxEmptyString,
|
||||||
info.xregistry, info.xencoding,
|
info.xregistry, info.xencoding,
|
||||||
xFontName);
|
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;
|
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
|
// 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(),
|
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 )
|
if( xFontName )
|
||||||
*xFontName = fontSpec;
|
*xFontName = fontSpec;
|
||||||
|
Reference in New Issue
Block a user