From 9cf8de4c742b21548661d5a4b3a380e9eae18080 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 26 Jan 2002 22:29:37 +0000 Subject: [PATCH] implemented IsFixedWidth() correctly for MSW git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13841 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/font.h | 2 + src/msw/font.cpp | 88 ++++++++++++++++--------------------------- 2 files changed, 35 insertions(+), 55 deletions(-) diff --git a/include/wx/msw/font.h b/include/wx/msw/font.h index f1b3c0fb88..06c17b10b1 100644 --- a/include/wx/msw/font.h +++ b/include/wx/msw/font.h @@ -83,6 +83,8 @@ public: virtual void SetEncoding(wxFontEncoding encoding); virtual void SetNativeFontInfo(const wxNativeFontInfo& info); + virtual bool IsFixedWidth() const; + // implementation only from now on // ------------------------------- diff --git a/src/msw/font.cpp b/src/msw/font.cpp index a8fb8be541..16993de878 100644 --- a/src/msw/font.cpp +++ b/src/msw/font.cpp @@ -50,6 +50,9 @@ IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject) // constants // ---------------------------------------------------------------------------- +// the mask used to extract the pitch from LOGFONT::lfPitchAndFamily field +static const int PITCH_MASK = FIXED_PITCH | VARIABLE_PITCH; + // ---------------------------------------------------------------------------- // wxFontRefData - the internal description of the font // ---------------------------------------------------------------------------- @@ -270,42 +273,6 @@ void wxFontRefData::Init(int pointSize, void wxFontRefData::Init(const wxNativeFontInfo& info, WXHFONT hFont) { - // we don't really need the family, what for? -#if 0 - // extract family from pitch-and-family - int lfFamily = info.lf.lfPitchAndFamily; - if ( lfFamily & FIXED_PITCH ) - lfFamily -= FIXED_PITCH; - if ( lfFamily & VARIABLE_PITCH ) - lfFamily -= VARIABLE_PITCH; - - switch ( lfFamily ) - { - case FF_ROMAN: - m_family = wxROMAN; - break; - - case FF_SWISS: - m_family = wxSWISS; - break; - - case FF_SCRIPT: - m_family = wxSCRIPT; - break; - - case FF_MODERN: - m_family = wxMODERN; - break; - - case FF_DECORATIVE: - m_family = wxDECORATIVE; - break; - - default: - m_family = wxSWISS; - } -#endif // 0 - // hFont may be zero, or it be passed in case we really want to // use the exact font created in the underlying system // (for example where we can't guarantee conversion from HFONT @@ -401,41 +368,37 @@ wxString wxNativeFontInfo::GetFaceName() const wxFontFamily wxNativeFontInfo::GetFamily() const { - // extract family from pitch-and-family - int lfFamily = lf.lfPitchAndFamily; - int family; + wxFontFamily family; - if ( lfFamily & FIXED_PITCH ) - lfFamily -= FIXED_PITCH; - if ( lfFamily & VARIABLE_PITCH ) - lfFamily -= VARIABLE_PITCH; - - switch ( lfFamily ) + // extract family from pitch-and-family + switch ( lf.lfPitchAndFamily & ~PITCH_MASK ) { case FF_ROMAN: - family = wxROMAN; + family = wxFONTFAMILY_ROMAN; break; + default: + wxFAIL_MSG( _T("unknown LOGFONT::lfFamily value") ); + // fall through + case FF_SWISS: - family = wxSWISS; + family = wxFONTFAMILY_SWISS; break; case FF_SCRIPT: - family = wxSCRIPT; + family = wxFONTFAMILY_SCRIPT; break; case FF_MODERN: - family = wxMODERN; + family = wxFONTFAMILY_MODERN; break; case FF_DECORATIVE: - family = wxDECORATIVE; + family = wxFONTFAMILY_DECORATIVE; break; - - default: - family = wxSWISS; } - return (wxFontFamily)family; + + return family; } wxFontEncoding wxNativeFontInfo::GetEncoding() const @@ -574,7 +537,7 @@ void wxNativeFontInfo::SetEncoding(wxFontEncoding encoding) #endif // wxUSE_FONTMAP { // unsupported encoding, replace with the default - info.charset = ANSI_CHARSET; + info.charset = DEFAULT_CHARSET; } } @@ -944,3 +907,18 @@ wxNativeFontInfo *wxFont::GetNativeFontInfo() const return 0; } +bool wxFont::IsFixedWidth() const +{ + if ( M_FONTDATA->HasNativeFontInfo() ) + { + // the two low-order bits specify the pitch of the font, the rest is + // family + BYTE pitch = M_FONTDATA->GetNativeFontInfo(). + lf.lfPitchAndFamily & PITCH_MASK; + + return pitch == FIXED_PITCH; + } + + return wxFontBase::IsFixedWidth(); +} + -- 2.45.2