X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/142b3bc26a6e93f5857bc053c7748b2c845c4a8e..404b319a85dadd7decf7a5a5331020520031a41c:/src/msw/fontenum.cpp diff --git a/src/msw/fontenum.cpp b/src/msw/fontenum.cpp index 553b574f7a..7ebc115010 100644 --- a/src/msw/fontenum.cpp +++ b/src/msw/fontenum.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: msw/fontenum.cpp +// Name: src/msw/fontenum.cpp // Purpose: wxFontEnumerator class for Windows // Author: Julian Smart // Modified by: Vadim Zeitlin to add support for font encodings @@ -17,10 +17,6 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ - #pragma implementation "fontenum.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -28,18 +24,21 @@ #pragma hdrstop #endif -#if wxUSE_FONTMAP +#if wxUSE_FONTENUM + +#include "wx/fontenum.h" #ifndef WX_PRECOMP - #include "wx/font.h" + #include "wx/gdicmn.h" + #include "wx/font.h" + #include "wx/dynarray.h" + #include "wx/msw/private.h" #endif +#include "wx/encinfo.h" #include "wx/fontutil.h" -#include "wx/fontenum.h" #include "wx/fontmap.h" -#include "wx/msw/private.h" - // ---------------------------------------------------------------------------- // private classes // ---------------------------------------------------------------------------- @@ -79,10 +78,10 @@ private: // if not empty, enum only the fonts in this family wxString m_family; - // if TRUE, enum only fixed fonts + // if true, enum only fixed fonts bool m_fixedOnly; - // if TRUE, we enumerate the encodings, not fonts + // if true, we enumerate the encodings, not fonts bool m_enumEncodings; // the list of charsets we already found while enumerating charsets @@ -90,6 +89,8 @@ private: // the list of facenames we already found while enumerating facenames wxArrayString m_facenames; + + wxDECLARE_NO_COPY_CLASS(wxFontEnumeratorHelper); }; // ---------------------------------------------------------------------------- @@ -98,7 +99,7 @@ private: #ifndef __WXMICROWIN__ int CALLBACK wxFontEnumeratorProc(LPLOGFONT lplf, LPTEXTMETRIC lptm, - DWORD dwStyle, LONG lParam); + DWORD dwStyle, LPARAM lParam); #endif // ============================================================================ @@ -113,13 +114,13 @@ wxFontEnumeratorHelper::wxFontEnumeratorHelper(wxFontEnumerator *fontEnum) { m_fontEnum = fontEnum; m_charset = DEFAULT_CHARSET; - m_fixedOnly = FALSE; - m_enumEncodings = FALSE; + m_fixedOnly = false; + m_enumEncodings = false; } void wxFontEnumeratorHelper::SetFamily(const wxString& family) { - m_enumEncodings = TRUE; + m_enumEncodings = true; m_family = family; } @@ -135,7 +136,7 @@ bool wxFontEnumeratorHelper::SetEncoding(wxFontEncoding encoding) #endif // wxUSE_FONTMAP { // no such encodings at all - return FALSE; + return false; } } @@ -143,15 +144,11 @@ bool wxFontEnumeratorHelper::SetEncoding(wxFontEncoding encoding) m_facename = info.facename; } - return TRUE; + 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 @@ -161,22 +158,19 @@ void wxFontEnumeratorHelper::DoEnumerate() #ifndef __WXMICROWIN__ HDC hDC = ::GetDC(NULL); -#ifdef __WIN32__ +#ifdef __WXWINCE__ + ::EnumFontFamilies(hDC, + m_facename.empty() ? NULL : wxMSW_CONV_LPCTSTR(m_facename), + (wxFONTENUMPROC)wxFontEnumeratorProc, + (LPARAM)this) ; +#else // __WIN32__ LOGFONT lf; - lf.lfCharSet = m_charset; - wxStrncpy(lf.lfFaceName, m_facename, WXSIZEOF(lf.lfFaceName)); + lf.lfCharSet = (BYTE)m_charset; + wxStrlcpy(lf.lfFaceName, m_facename.c_str(), WXSIZEOF(lf.lfFaceName)); lf.lfPitchAndFamily = 0; ::EnumFontFamiliesEx(hDC, &lf, (wxFONTENUMPROC)wxFontEnumeratorProc, (LPARAM)this, 0 /* reserved */) ; -#else // Win16 - ::EnumFonts(hDC, (LPTSTR)NULL, (FONTENUMPROC)wxFontEnumeratorProc, - #ifdef STRICT - (LPARAM) - #else - (LPSTR) - #endif - this); -#endif // Win32/16 +#endif // Win32/CE ::ReleaseDC(NULL, hDC); #endif @@ -193,14 +187,23 @@ bool wxFontEnumeratorHelper::OnFont(const LPLOGFONT lf, { wxConstCast(this, wxFontEnumeratorHelper)->m_charsets.Add(cs); +#if wxUSE_FONTMAP wxFontEncoding enc = wxGetFontEncFromCharSet(cs); return m_fontEnum->OnFontEncoding(lf->lfFaceName, wxFontMapper::GetEncodingName(enc)); +#else // !wxUSE_FONTMAP + // Just use some unique and, hopefully, understandable, name. + return m_fontEnum->OnFontEncoding + ( + lf->lfFaceName, + wxString::Format(wxS("Code page %d"), cs) + ); +#endif // wxUSE_FONTMAP/!wxUSE_FONTMAP } else { // continue enumeration - return TRUE; + return true; } } @@ -211,7 +214,7 @@ bool wxFontEnumeratorHelper::OnFont(const LPLOGFONT lf, if ( tm->tmPitchAndFamily & TMPF_FIXED_PITCH ) { // not a fixed pitch font - return TRUE; + return true; } } @@ -220,7 +223,7 @@ bool wxFontEnumeratorHelper::OnFont(const LPLOGFONT lf, // check that we have the right encoding if ( lf->lfCharSet != m_charset ) { - return TRUE; + return true; } } else // enumerating fonts in all charsets @@ -231,7 +234,7 @@ bool wxFontEnumeratorHelper::OnFont(const LPLOGFONT lf, if ( m_facenames.Index(lf->lfFaceName) != wxNOT_FOUND ) { // continue enumeration - return TRUE; + return true; } wxConstCast(this, wxFontEnumeratorHelper)-> @@ -257,7 +260,7 @@ bool wxFontEnumerator::EnumerateFacenames(wxFontEncoding encoding, } // else: no such fonts, unknown encoding - return TRUE; + return true; } bool wxFontEnumerator::EnumerateEncodings(const wxString& family) @@ -266,7 +269,7 @@ bool wxFontEnumerator::EnumerateEncodings(const wxString& family) fe.SetFamily(family); fe.DoEnumerate(); - return TRUE; + return true; } // ---------------------------------------------------------------------------- @@ -275,7 +278,7 @@ bool wxFontEnumerator::EnumerateEncodings(const wxString& family) #ifndef __WXMICROWIN__ int CALLBACK wxFontEnumeratorProc(LPLOGFONT lplf, LPTEXTMETRIC lptm, - DWORD WXUNUSED(dwStyle), LONG lParam) + DWORD WXUNUSED(dwStyle), LPARAM lParam) { // we used to process TrueType fonts only, but there doesn't seem to be any @@ -295,4 +298,4 @@ int CALLBACK wxFontEnumeratorProc(LPLOGFONT lplf, LPTEXTMETRIC lptm, } #endif -#endif // wxUSE_FONTMAP +#endif // wxUSE_FONTENUM