X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a1d58ddc1557d0bd454ed9ccd58d7761ed242d67..c79853685d09ba1d7eaef604395c40b731ed2f34:/src/msw/fontenum.cpp diff --git a/src/msw/fontenum.cpp b/src/msw/fontenum.cpp index ed6a823992..9d7e1820d0 100644 --- a/src/msw/fontenum.cpp +++ b/src/msw/fontenum.cpp @@ -33,6 +33,7 @@ #endif #include "wx/fontenum.h" +#include "wx/fontmap.h" #include "wx/msw/private.h" @@ -63,6 +64,9 @@ private: // if != -1, enum only fonts which have this encoding int m_charset; + // if not empty, enum only the fonts with this facename + wxString m_facename; + // if TRUE, enum only fixed fonts bool m_fixedOnly; }; @@ -91,18 +95,29 @@ wxFontEnumeratorHelper::wxFontEnumeratorHelper(wxFontEnumerator *fontEnum) bool wxFontEnumeratorHelper::SetEncoding(wxFontEncoding encoding) { - bool exact; - m_charset = wxCharsetFromEncoding(encoding, &exact); -#ifdef __WIN32__ - if ( !exact ) + wxNativeEncodingInfo info; + if ( !wxGetNativeFontEncoding(encoding, &info) ) { - m_charset = DEFAULT_CHARSET; + if ( !wxTheFontMapper->GetAltForEncoding(encoding, &info) ) + { + // no such encodings at all + return FALSE; + } } -#endif // Win32 + m_charset = info.charset; + m_facename = info.facename; - return exact; + return TRUE; } +// I've no idea what __GNUWIN32_OLD__ is. Anyway, I had to add the 2nd condition +// for Cygwin b20 (JACS) +#if (defined(__GNUWIN32_OLD__) || defined(__GNUWIN32__)) && !defined(__MINGW32__) + #define wxFONTENUMPROC int(*)(ENUMLOGFONTEX *, NEWTEXTMETRICEX*, int, LPARAM) +#else + #define wxFONTENUMPROC FONTENUMPROC +#endif + void wxFontEnumeratorHelper::DoEnumerate() { HDC hDC = ::GetDC(NULL); @@ -110,13 +125,18 @@ void wxFontEnumeratorHelper::DoEnumerate() #ifdef __WIN32__ LOGFONT lf; lf.lfCharSet = m_charset; - lf.lfFaceName[0] = _T('\0'); + wxStrncpy(lf.lfFaceName, m_facename, WXSIZEOF(lf.lfFaceName)); lf.lfPitchAndFamily = 0; - ::EnumFontFamiliesEx(hDC, &lf, (FONTENUMPROC)wxFontEnumeratorProc, + ::EnumFontFamiliesEx(hDC, &lf, (wxFONTENUMPROC)wxFontEnumeratorProc, (LPARAM)this, 0 /* reserved */) ; #else // Win16 ::EnumFonts(hDC, (LPTSTR)NULL, (FONTENUMPROC)wxFontEnumeratorProc, - (LPARAM) (void*) this) ; + #ifdef STRICT + (LPARAM) + #else + (LPSTR) + #endif + this); #endif // Win32/16 ::ReleaseDC(NULL, hDC); @@ -145,15 +165,15 @@ bool wxFontEnumeratorHelper::OnFont(const LPLOGFONT lf, } } - return m_fontEnum->OnFontFamily(lf->lfFaceName); + return m_fontEnum->OnFacename(lf->lfFaceName); } // ---------------------------------------------------------------------------- // wxFontEnumerator // ---------------------------------------------------------------------------- -bool wxFontEnumerator::EnumerateFamilies(wxFontEncoding encoding, - bool fixedWidthOnly) +bool wxFontEnumerator::EnumerateFacenames(wxFontEncoding encoding, + bool fixedWidthOnly) { wxFontEnumeratorHelper fe(this); if ( fe.SetEncoding(encoding) )