From cd49ac33b3b8f9643344b427e6071e5087706cdc Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 30 May 2010 23:28:59 +0000 Subject: [PATCH] Fix wxFont::IsFixedWidth() under MSW to always return correct result. This function worked erratically, returning the correct result or not depending on the way it was created. Reimplement it using GetTextMetrics() to get the correct result in any case. Closes #4714. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64446 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/msw/font.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/msw/font.cpp b/src/msw/font.cpp index 3add9ac4cc..b1e347d674 100644 --- a/src/msw/font.cpp +++ b/src/msw/font.cpp @@ -1067,10 +1067,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()); - return pitch == FIXED_PITCH; + TEXTMETRIC tm; + if ( !::GetTextMetrics(hdc, &tm) ) + { + wxLogLastError(wxT("GetTextMetrics")); + return false; + } + + // 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); } -- 2.47.2