X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3c1866e88fb77fc7e0b349cc15f6cebf0f727a9d..5d25c05039a7c6ebbddfe16d99234dc756e75356:/src/msw/fontenum.cpp diff --git a/src/msw/fontenum.cpp b/src/msw/fontenum.cpp index 78ecb6043d..f91b00c91f 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,31 @@ 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; } +#if defined(__GNUWIN32__) + #if defined(__MINGW32__) && ((__GNUC__>2) ||((__GNUC__==2) && (__GNUC_MINOR__>=95))) + #define wxFONTENUMPROC int(*)(const LOGFONTA *, const TEXTMETRICA *, long unsigned int, LPARAM) + #else + #define wxFONTENUMPROC int(*)(ENUMLOGFONTEX *, NEWTEXTMETRICEX*, int, LPARAM) + #endif +#else + #define wxFONTENUMPROC FONTENUMPROC +#endif + void wxFontEnumeratorHelper::DoEnumerate() { HDC hDC = ::GetDC(NULL); @@ -110,13 +127,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);