parent
0210eab0f5
commit
a16945f094
@ -0,0 +1,58 @@
|
||||
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)
|
Loading…
Reference in new issue