You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
2.6 KiB
58 lines
2.6 KiB
From 86abb6fd8a8f680f9fc5ff1db775845c9f4e254b Mon Sep 17 00:00:00 2001 |
|
From: Michael Weghorn <m.weghorn@posteo.de> |
|
Date: Wed, 13 Mar 2024 12:27:12 +0100 |
|
Subject: [PATCH] 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 |
|
|
|
Change-Id: I8eb6911d4dd5faf00912b8f15a58e0bdace1995a |
|
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164768 |
|
Tested-by: Jenkins |
|
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> |
|
--- |
|
vcl/qt5/QtInstance.cxx | 5 +++++ |
|
1 file changed, 5 insertions(+) |
|
|
|
diff --git a/vcl/qt5/QtInstance.cxx b/vcl/qt5/QtInstance.cxx |
|
index 6b3bd0cc301ae..2801601115ecd 100644 |
|
--- a/vcl/qt5/QtInstance.cxx |
|
+++ b/vcl/qt5/QtInstance.cxx |
|
@@ -740,6 +740,11 @@ std::unique_ptr<QApplication> QtInstance::CreateQApplication(int& nArgc, char** |
|
// for scaled icons in the native menus |
|
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); |
|
#endif |
|
+ // 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); |
|
|
|
FreeableCStr session_manager; |
|
if (getenv("SESSION_MANAGER") != nullptr)
|
|
|