implemented IsFixedWidth() correctly for MSW

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13841 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2002-01-26 22:29:37 +00:00
parent 4ec6efd6ab
commit 9cf8de4c74
2 changed files with 45 additions and 65 deletions

View File

@ -83,6 +83,8 @@ public:
virtual void SetEncoding(wxFontEncoding encoding); virtual void SetEncoding(wxFontEncoding encoding);
virtual void SetNativeFontInfo(const wxNativeFontInfo& info); virtual void SetNativeFontInfo(const wxNativeFontInfo& info);
virtual bool IsFixedWidth() const;
// implementation only from now on // implementation only from now on
// ------------------------------- // -------------------------------

View File

@ -50,6 +50,9 @@ IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)
// constants // 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 // wxFontRefData - the internal description of the font
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -270,42 +273,6 @@ void wxFontRefData::Init(int pointSize,
void wxFontRefData::Init(const wxNativeFontInfo& info, WXHFONT hFont) 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 // hFont may be zero, or it be passed in case we really want to
// use the exact font created in the underlying system // use the exact font created in the underlying system
// (for example where we can't guarantee conversion from HFONT // (for example where we can't guarantee conversion from HFONT
@ -401,41 +368,37 @@ wxString wxNativeFontInfo::GetFaceName() const
wxFontFamily wxNativeFontInfo::GetFamily() const wxFontFamily wxNativeFontInfo::GetFamily() const
{ {
wxFontFamily family;
// extract family from pitch-and-family // extract family from pitch-and-family
int lfFamily = lf.lfPitchAndFamily; switch ( lf.lfPitchAndFamily & ~PITCH_MASK )
int family;
if ( lfFamily & FIXED_PITCH )
lfFamily -= FIXED_PITCH;
if ( lfFamily & VARIABLE_PITCH )
lfFamily -= VARIABLE_PITCH;
switch ( lfFamily )
{ {
case FF_ROMAN: case FF_ROMAN:
family = wxROMAN; family = wxFONTFAMILY_ROMAN;
break;
case FF_SWISS:
family = wxSWISS;
break;
case FF_SCRIPT:
family = wxSCRIPT;
break;
case FF_MODERN:
family = wxMODERN;
break;
case FF_DECORATIVE:
family = wxDECORATIVE;
break; break;
default: default:
family = wxSWISS; wxFAIL_MSG( _T("unknown LOGFONT::lfFamily value") );
// fall through
case FF_SWISS:
family = wxFONTFAMILY_SWISS;
break;
case FF_SCRIPT:
family = wxFONTFAMILY_SCRIPT;
break;
case FF_MODERN:
family = wxFONTFAMILY_MODERN;
break;
case FF_DECORATIVE:
family = wxFONTFAMILY_DECORATIVE;
break;
} }
return (wxFontFamily)family;
return family;
} }
wxFontEncoding wxNativeFontInfo::GetEncoding() const wxFontEncoding wxNativeFontInfo::GetEncoding() const
@ -574,7 +537,7 @@ void wxNativeFontInfo::SetEncoding(wxFontEncoding encoding)
#endif // wxUSE_FONTMAP #endif // wxUSE_FONTMAP
{ {
// unsupported encoding, replace with the default // unsupported encoding, replace with the default
info.charset = ANSI_CHARSET; info.charset = DEFAULT_CHARSET;
} }
} }
@ -944,3 +907,18 @@ wxNativeFontInfo *wxFont::GetNativeFontInfo() const
return 0; 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();
}