X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a4a0bff1662e9c729e95baf12082aa6144df48c8..e279a9e799c3808b221dc459a3a81bd2c19b36ea:/src/msw/font.cpp diff --git a/src/msw/font.cpp b/src/msw/font.cpp index 3add9ac4cc..0acbf1aae6 100644 --- a/src/msw/font.cpp +++ b/src/msw/font.cpp @@ -1016,10 +1016,8 @@ bool wxFont::IsUsingSizeInPixels() const return M_FONTDATA->IsUsingSizeInPixels(); } -wxFontFamily wxFont::GetFamily() const +wxFontFamily wxFont::DoGetFamily() const { - wxCHECK_MSG( IsOk(), wxFONTFAMILY_MAX, wxT("invalid font") ); - return M_FONTDATA->GetFamily(); } @@ -1067,10 +1065,19 @@ bool wxFont::IsFixedWidth() const { wxCHECK_MSG( IsOk(), false, wxT("invalid font") ); - // the two low-order bits specify the pitch of the font, the rest is - // family - BYTE pitch = - (BYTE)(M_FONTDATA->GetNativeFontInfo().lf.lfPitchAndFamily & PITCH_MASK); + // LOGFONT doesn't contain the correct pitch information so we need to call + // GetTextMetrics() to get it + ScreenHDC hdc; + SelectInHDC selectFont(hdc, M_FONTDATA->GetHFONT()); + + TEXTMETRIC tm; + if ( !::GetTextMetrics(hdc, &tm) ) + { + wxLogLastError(wxT("GetTextMetrics")); + return false; + } - return pitch == FIXED_PITCH; + // Quoting MSDN description of TMPF_FIXED_PITCH: "Note very carefully that + // those meanings are the opposite of what the constant name implies." + return !(tm.tmPitchAndFamily & TMPF_FIXED_PITCH); }