summaryrefslogtreecommitdiff
path: root/src/gui/text/windows/qwindowsfontdatabasebase.cpp
diff options
context:
space:
mode:
authorMorten Sørvig <morten.sorvig@qt.io>2022-10-21 11:47:55 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-11-01 14:12:32 +0000
commit45358c29d53242bf5ff401d06eebec53ffc6c4c8 (patch)
treed4620f3d752c0427a360f3274b1c3fd07578b3a8 /src/gui/text/windows/qwindowsfontdatabasebase.cpp
parentef581555b3092bfc0542dc5d15cab83c531a9260 (diff)
downloadqtbase-45358c29d53242bf5ff401d06eebec53ffc6c4c8.tar.gz
Port default font resolve to SystemParametersInfoForDpi
We were getting font metrics for the primary screen and then adjusting for the screen DPI get a screen-independent font size. This could fail in edge cases where the screen DPI was changed after app startup, but before the first window was shown. See QTBUG-105857. Use SystemParametersInfoForDpi() to query for font info at 96 DPI instead, which removes the need for tracking primary screen DPI. LOGFONT_to_QFont() still has one usage (qwizard_win.cpp) which provides a custom DPI for scaling, so we keep that function as-is. Fixes: QTBUG-105857 Change-Id: I1adf0ab3bf2c309e8fcb58093e86214fa11a2da8 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> (cherry picked from commit edb00660e47a82ac24048841100d7d7e59a7805e) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/gui/text/windows/qwindowsfontdatabasebase.cpp')
-rw-r--r--src/gui/text/windows/qwindowsfontdatabasebase.cpp15
1 files changed, 4 insertions, 11 deletions
diff --git a/src/gui/text/windows/qwindowsfontdatabasebase.cpp b/src/gui/text/windows/qwindowsfontdatabasebase.cpp
index d05410cf5f..f45678c65c 100644
--- a/src/gui/text/windows/qwindowsfontdatabasebase.cpp
+++ b/src/gui/text/windows/qwindowsfontdatabasebase.cpp
@@ -566,16 +566,9 @@ void QWindowsFontDatabaseBase::createDirectWriteFactory(IDWriteFactory **factory
}
#endif // directwrite && direct2d
-static int s_defaultVerticalDPI = 96; // Native Pixels
-
int QWindowsFontDatabaseBase::defaultVerticalDPI()
{
- return s_defaultVerticalDPI;
-}
-
-void QWindowsFontDatabaseBase::setDefaultVerticalDPI(int d)
-{
- s_defaultVerticalDPI = d;
+ return 96;
}
LOGFONT QWindowsFontDatabaseBase::fontDefToLOGFONT(const QFontDef &request, const QString &faceName)
@@ -690,9 +683,9 @@ HFONT QWindowsFontDatabaseBase::systemFont()
QFont QWindowsFontDatabaseBase::systemDefaultFont()
{
// Qt 6: Obtain default GUI font (typically "Segoe UI, 9pt", see QTBUG-58610)
- NONCLIENTMETRICS ncm;
- ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICS, lfMessageFont) + sizeof(LOGFONT);
- SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize , &ncm, 0);
+ NONCLIENTMETRICS ncm = {};
+ ncm.cbSize = sizeof(ncm);
+ SystemParametersInfoForDpi(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0, defaultVerticalDPI());
const QFont systemFont = QWindowsFontDatabase::LOGFONT_to_QFont(ncm.lfMessageFont);
qCDebug(lcQpaFonts) << __FUNCTION__ << systemFont;
return systemFont;