vcl/qt5/QtInstance.cxx |    5 +++++
 1 file changed, 5 insertions(+)

New commits:
commit 17fe161389df04b16a4c61bf089a3ce113ea22e7
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Wed Mar 13 12:27:12 2024 +0100
Commit:     Christian Lohmaier <lohmaier+libreoff...@googlemail.com>
CommitDate: Fri Mar 22 19:36:20 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
    
    Change-Id: I8eb6911d4dd5faf00912b8f15a58e0bdace1995a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164768
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>
    (cherry picked from commit 07688e864c913e005dcae366cf10702404a73d80)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164744
    Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com>
    (cherry picked from commit 7989a04cee3b614d493a5acbd1ff0363596efc00)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164816
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Tested-by: Christian Lohmaier <lohmaier+libreoff...@googlemail.com>
    Reviewed-by: Christian Lohmaier <lohmaier+libreoff...@googlemail.com>

diff --git a/vcl/qt5/QtInstance.cxx b/vcl/qt5/QtInstance.cxx
index 4880c1bdec55..f87cdef9348e 100644
--- a/vcl/qt5/QtInstance.cxx
+++ b/vcl/qt5/QtInstance.cxx
@@ -708,6 +708,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)

Reply via email to