8edfba6392
- Fix UI scaling on HIDPI Wayland/KDE screens https://bugs.documentfoundation.org/show_bug.cgi?id=137924 + fix-wayland-scaling-in-plasma.patch OBS-URL: https://build.opensuse.org/request/show/935168 OBS-URL: https://build.opensuse.org/package/show/LibreOffice:Factory/libreoffice?expand=0&rev=985
80 lines
2.9 KiB
Diff
80 lines
2.9 KiB
Diff
From dc0016bc8d7e6c4456f4442c7ccf287bfc0c2e9b Mon Sep 17 00:00:00 2001
|
|
From: Michael Weghorn <m.weghorn@posteo.de>
|
|
Date: Thu, 18 Nov 2021 21:15:10 +0100
|
|
Subject: [PATCH] tdf#137924 qt (>=5.14): Use proper DPI without requiring
|
|
window handle
|
|
|
|
For Qt >= 5.14, don't require a window handle to retrieve
|
|
the screen and then the associated DPI value from that one,
|
|
but directly use 'QWidget::screen' (introduced in QT 5.14)
|
|
to retrieve the screen.
|
|
|
|
Previously, no DPI values would be set in case there was
|
|
no window handle.
|
|
|
|
This makes UI scaling work without having to manually set
|
|
'SAL_FORCEDPI' on Wayland.
|
|
|
|
While various UI elements (like e.g. the "Help" -> "About LibreOffice"
|
|
still look quite broken with the qt5 and kf5 VCL plugins
|
|
in a Plasma Wayland session (at least on my Debian testing with
|
|
Qt 5.15.2 and Plasma 5.23), they look OK
|
|
when using the qt6 VCL plugin with a custom build of qtbase
|
|
and qtwayland from Qt's "dev" git branches.
|
|
|
|
Change-Id: I5feae46ed86a8b7d3cf92d4a973f7a0f9a9f95de
|
|
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125507
|
|
Tested-by: Jenkins
|
|
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
---
|
|
vcl/qt5/QtGraphics_GDI.cxx | 9 ++++++++-
|
|
vcl/qt5/QtSvpGraphics.cxx | 9 ++++++++-
|
|
2 files changed, 16 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/vcl/qt5/Qt5Graphics_GDI.cxx b/vcl/qt5/QtGraphics_GDI.cxx
|
|
index 0f9faa022d0b5..f87de50827dfc 100644
|
|
--- a/vcl/qt5/Qt5Graphics_GDI.cxx
|
|
+++ b/vcl/qt5/Qt5Graphics_GDI.cxx
|
|
@@ -746,10 +746,17 @@ void QtGraphics::GetResolution(sal_Int32& rDPIX, sal_Int32& rDPIY)
|
|
return;
|
|
}
|
|
|
|
- if (!m_pFrame || !m_pFrame->GetQWidget()->window()->windowHandle())
|
|
+ if (!m_pFrame)
|
|
+ return;
|
|
+
|
|
+#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
|
|
+ QScreen* pScreen = m_pFrame->GetQWidget()->screen();
|
|
+#else
|
|
+ if (!m_pFrame->GetQWidget()->window()->windowHandle())
|
|
return;
|
|
|
|
QScreen* pScreen = m_pFrame->GetQWidget()->window()->windowHandle()->screen();
|
|
+#endif
|
|
rDPIX = pScreen->logicalDotsPerInchX() * pScreen->devicePixelRatio() + 0.5;
|
|
rDPIY = pScreen->logicalDotsPerInchY() * pScreen->devicePixelRatio() + 0.5;
|
|
}
|
|
diff --git a/vcl/qt5/Qt5SvpGraphics.cxx b/vcl/qt5/QtSvpGraphics.cxx
|
|
index b6018a95e2997..3632c8990706c 100644
|
|
--- a/vcl/qt5/Qt5SvpGraphics.cxx
|
|
+++ b/vcl/qt5/Qt5SvpGraphics.cxx
|
|
@@ -102,10 +102,17 @@ void QtSvpGraphics::GetResolution(sal_Int32& rDPIX, sal_Int32& rDPIY)
|
|
return;
|
|
}
|
|
|
|
- if (!m_pFrame || !m_pFrame->GetQWidget()->window()->windowHandle())
|
|
+ if (!m_pFrame)
|
|
+ return;
|
|
+
|
|
+#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
|
|
+ QScreen* pScreen = m_pFrame->GetQWidget()->screen();
|
|
+#else
|
|
+ if (!m_pFrame->GetQWidget()->window()->windowHandle())
|
|
return;
|
|
|
|
QScreen* pScreen = m_pFrame->GetQWidget()->window()->windowHandle()->screen();
|
|
+#endif
|
|
rDPIX = pScreen->logicalDotsPerInchX() * pScreen->devicePixelRatio() + 0.5;
|
|
rDPIY = pScreen->logicalDotsPerInchY() * pScreen->devicePixelRatio() + 0.5;
|
|
}
|