X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/04ef50df3a0fa3c343800c554e609f98fc7575cc..cb73e6001f891ae46b12a1e4ca39b93649cb6099:/src/msw/fontenum.cpp?ds=sidebyside diff --git a/src/msw/fontenum.cpp b/src/msw/fontenum.cpp index 1f7305a937..cc320215b8 100644 --- a/src/msw/fontenum.cpp +++ b/src/msw/fontenum.cpp @@ -17,7 +17,7 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "fontenum.h" #endif @@ -34,12 +34,12 @@ #include "wx/font.h" #endif +#include "wx/msw/private.h" + #include "wx/fontutil.h" #include "wx/fontenum.h" #include "wx/fontmap.h" -#include "wx/msw/private.h" - // ---------------------------------------------------------------------------- // private classes // ---------------------------------------------------------------------------- @@ -87,6 +87,11 @@ 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; + + DECLARE_NO_COPY_CLASS(wxFontEnumeratorHelper) }; // ---------------------------------------------------------------------------- @@ -122,27 +127,29 @@ 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 ( !wxFontMapper::Get()->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; } -#if defined(__GNUWIN32__) && !defined(__CYGWIN10__) - #if wxUSE_NORLANDER_HEADERS - #define wxFONTENUMPROC int(*)(const LOGFONT *, const TEXTMETRIC *, long unsigned int, LPARAM) - #else - #define wxFONTENUMPROC int(*)(ENUMLOGFONTEX *, NEWTEXTMETRICEX*, int, LPARAM) - #endif +#if defined(__GNUWIN32__) && !defined(__CYGWIN10__) && !wxCHECK_W32API_VERSION( 1, 1 ) && !wxUSE_NORLANDER_HEADERS + #define wxFONTENUMPROC int(*)(ENUMLOGFONTEX *, NEWTEXTMETRICEX*, int, LPARAM) #else #define wxFONTENUMPROC FONTENUMPROC #endif @@ -152,7 +159,10 @@ void wxFontEnumeratorHelper::DoEnumerate() #ifndef __WXMICROWIN__ HDC hDC = ::GetDC(NULL); -#ifdef __WIN32__ +#ifdef __WXWINCE__ + ::EnumFontFamilies(hDC, m_facename, (wxFONTENUMPROC)wxFontEnumeratorProc, + (LPARAM)this) ; +#elif defined(__WIN32__) LOGFONT lf; lf.lfCharSet = m_charset; wxStrncpy(lf.lfFaceName, m_facename, WXSIZEOF(lf.lfFaceName)); @@ -206,7 +216,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 +224,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); } @@ -252,14 +276,19 @@ bool wxFontEnumerator::EnumerateEncodings(const wxString& family) #ifndef __WXMICROWIN__ int CALLBACK wxFontEnumeratorProc(LPLOGFONT lplf, LPTEXTMETRIC lptm, - DWORD dwStyle, LONG lParam) + DWORD WXUNUSED(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;