vcl/qt5/QtInstance.cxx | 7 +++++++
1 file changed, 7 insertions(+)
New commits:
commit a64d0da7d09cd27a332060f61a25980131e48a56
Author: Michael Weghorn <[email protected]>
AuthorDate: Wed Mar 13 12:27:12 2024 +0100
Commit: Adolfo Jayme Barrientos <[email protected]>
CommitDate: Wed Mar 13 22:06:07 2024 +0100
tdf#159915 qt: Force Qt::HighDpiScaleFactorRoundingPolicy::Round
For now, force `Qt::HighDpiScaleFactorRoundingPolicy::Round`
for the HighDPI-scale factor rounding policy [1], which is the default
for Qt 5, while Qt 6 defaults to
`Qt::HighDpiScaleFactorRoundingPolicy::PassThrough`
(see [2]), which resulted in broken rendering (e.g. "Help" -> "About"
dialog not showing the whole content) when fractional display scaling like
150 %
is configured in the KDE Plasma display settings (in contrast to manually
setting the
`QT_SCALE_FACTOR=1.5` env variable to apply scaling, which was working
fine).
Quoting from [3]:
> The two principal options are whether fractional scale factors should be
> rounded to an integer or not. Keeping the scale factor as-is will make
> the user interface size match the OS setting exactly, but may cause
> painting errors, for example with the Windows style.
Manually setting the env variable `QT_SCALE_FACTOR_ROUNDING_POLICY="Round"`
has the same effect (and can be used with LO versions not yet
containing this fix).
(There might be a way to adjust the way that scaling happens
to make other policies work, but for now, just hard-code to
the policy that is known to work.)
[1] https://doc.qt.io/qt-6/qt.html#HighDpiScaleFactorRoundingPolicy-enum
[2] https://doc.qt.io/qt-6/highdpi.html#environment-variable-reference
[3]
https://doc.qt.io/qt-6/qguiapplication.html#setHighDpiScaleFactorRoundingPolicy
[Note: The libreoffice-7-6 backport needs an extra Qt version check
as Qt::HighDpiScaleFactorRoundingPolicy requires Qt 5.14 while
the 7-6 baseline is lower. The master/libreoffice-24-2 baseline already
ensures Qt 5.15, see also commit afb4c96d271958ced3175dfc2cf8bb9e8b0a9d3b,
"qt: Drop code for Qt < 5.15".]
Change-Id: I8eb6911d4dd5faf00912b8f15a58e0bdace1995a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164768
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <[email protected]>
(cherry picked from commit 86abb6fd8a8f680f9fc5ff1db775845c9f4e254b)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164745
Reviewed-by: Adolfo Jayme Barrientos <[email protected]>
diff --git a/vcl/qt5/QtInstance.cxx b/vcl/qt5/QtInstance.cxx
index df3df5d17a74..2675445702de 100644
--- a/vcl/qt5/QtInstance.cxx
+++ b/vcl/qt5/QtInstance.cxx
@@ -708,6 +708,13 @@ std::unique_ptr<QApplication>
QtInstance::CreateQApplication(int& nArgc, char**
// for scaled icons in the native menus
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
#endif
+#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
+ // force Qt::HighDpiScaleFactorRoundingPolicy::Round, which is the Qt 5
default
+ // policy and prevents incorrect rendering with the Qt 6 default policy
+ // Qt::HighDpiScaleFactorRoundingPolicy::PassThrough (tdf#159915)
+ QGuiApplication::setHighDpiScaleFactorRoundingPolicy(
+ Qt::HighDpiScaleFactorRoundingPolicy::Round);
+#endif
FreeableCStr session_manager;
if (getenv("SESSION_MANAGER") != nullptr)