diff --git a/include/wx/fontutil.h b/include/wx/fontutil.h index 38f473654e..983f29ebf8 100644 --- a/include/wx/fontutil.h +++ b/include/wx/fontutil.h @@ -118,7 +118,14 @@ public: // set the XFLD void SetXFontName(const wxString& xFontName); #elif defined(__WXMSW__) - wxNativeFontInfo(const LOGFONT& lf_); + wxNativeFontInfo(const LOGFONT& lf_) + : lf(lf_), + pointSize(GetPointSizeFromLogFontHeight(lf.lfHeight)) + { + } + + // MSW-specific: get point size from LOGFONT height using the default DPI. + static float GetPointSizeFromLogFontHeight(int height); // MSW-specific: get the height value in pixels using LOGFONT convention // (i.e. negative) corresponding to the given size in points and DPI. diff --git a/src/msw/font.cpp b/src/msw/font.cpp index 255aafcdae..ed6e2c8c2c 100644 --- a/src/msw/font.cpp +++ b/src/msw/font.cpp @@ -402,13 +402,13 @@ void wxFontRefData::Free() // wxNativeFontInfo // ---------------------------------------------------------------------------- -wxNativeFontInfo::wxNativeFontInfo(const LOGFONT& lf_) - : lf(lf_) +/* static */ +float wxNativeFontInfo::GetPointSizeFromLogFontHeight(int height) { // Determine the size in points using the primary screen DPI as we don't // have anything else here. const float ppi = ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY); - pointSize = 72.0f * abs(lf.lfHeight) / ppi; + return 72.0f * abs(height) / ppi; } void wxNativeFontInfo::Init() @@ -535,8 +535,7 @@ void wxNativeFontInfo::SetPixelSize(const wxSize& pixelSize) // We don't have the right DPI to use here neither, but we need to update // the point size too, so fall back to the default. - const float ppi = ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY); - pointSize = 72.0f * pixelSize.GetHeight() / ppi; + pointSize = GetPointSizeFromLogFontHeight(lf.lfHeight); } void wxNativeFontInfo::SetStyle(wxFontStyle style)