wxFontEnumerator returns all fonts, not TrueType only

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13243 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2001-12-30 17:07:21 +00:00
parent 17ade085be
commit 98e6fc816f
2 changed files with 36 additions and 8 deletions

View File

@@ -79,6 +79,7 @@ wxMSW:
- fixed flicker in wxTreeCtrl::SetItemXXX()
- fixed redraw problems in dynamically resized wxStaticText
- fixed wxProgressDialog for ranges > 65535
- wxFontEnumerator now returns all fonts, not only TrueType ones
2.3.2
-----

View File

@@ -87,6 +87,9 @@ private:
// the list of charsets we already found while enumerating charsets
wxArrayInt m_charsets;
// the list of facenames we already found while enumerating facenames
wxArrayString m_facenames;
};
// ----------------------------------------------------------------------------
@@ -122,17 +125,23 @@ void wxFontEnumeratorHelper::SetFamily(const wxString& family)
bool wxFontEnumeratorHelper::SetEncoding(wxFontEncoding encoding)
{
wxNativeEncodingInfo info;
if ( !wxGetNativeFontEncoding(encoding, &info) )
if ( encoding != wxFONTENCODING_SYSTEM )
{
if ( !wxTheFontMapper->GetAltForEncoding(encoding, &info) )
wxNativeEncodingInfo info;
if ( !wxGetNativeFontEncoding(encoding, &info) )
{
// no such encodings at all
return FALSE;
#if wxUSE_FONTMAP
if ( !wxTheFontMapper->GetAltForEncoding(encoding, &info) )
#endif // wxUSE_FONTMAP
{
// no such encodings at all
return FALSE;
}
}
m_charset = info.charset;
m_facename = info.facename;
}
m_charset = info.charset;
m_facename = info.facename;
return TRUE;
}
@@ -206,7 +215,7 @@ bool wxFontEnumeratorHelper::OnFont(const LPLOGFONT lf,
}
}
if ( m_charset != -1 )
if ( m_charset != DEFAULT_CHARSET )
{
// check that we have the right encoding
if ( lf->lfCharSet != m_charset )
@@ -214,6 +223,20 @@ bool wxFontEnumeratorHelper::OnFont(const LPLOGFONT lf,
return TRUE;
}
}
else // enumerating fonts in all charsets
{
// we can get the same facename twice or more in this case because it
// may exist in several charsets but we only want to return one copy of
// it (note that this can't happen for m_charset != DEFAULT_CHARSET)
if ( m_facenames.Index(lf->lfFaceName) != wxNOT_FOUND )
{
// continue enumeration
return TRUE;
}
wxConstCast(this, wxFontEnumeratorHelper)->
m_facenames.Add(lf->lfFaceName);
}
return m_fontEnum->OnFacename(lf->lfFaceName);
}
@@ -254,12 +277,16 @@ bool wxFontEnumerator::EnumerateEncodings(const wxString& family)
int CALLBACK wxFontEnumeratorProc(LPLOGFONT lplf, LPTEXTMETRIC lptm,
DWORD dwStyle, LONG lParam)
{
// we used to process TrueType fonts only, but there doesn't seem to be any
// reasons to restrict ourselves to them here
#if 0
// Get rid of any fonts that we don't want...
if ( dwStyle != TRUETYPE_FONTTYPE )
{
// continue enumeration
return TRUE;
}
#endif // 0
wxFontEnumeratorHelper *fontEnum = (wxFontEnumeratorHelper *)lParam;