From: Vadim Zeitlin Date: Sun, 30 Dec 2001 17:07:21 +0000 (+0000) Subject: wxFontEnumerator returns all fonts, not TrueType only X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/98e6fc816f5b5f902fa7372a2a3ca86fe55ad4b9 wxFontEnumerator returns all fonts, not TrueType only git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13243 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/docs/changes.txt b/docs/changes.txt index 8459ba4df4..0034445f10 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -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 ----- diff --git a/src/msw/fontenum.cpp b/src/msw/fontenum.cpp index 1f7305a937..dec87f4fc1 100644 --- a/src/msw/fontenum.cpp +++ b/src/msw/fontenum.cpp @@ -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;