From c3a86b04820114e3bbf82169ebb01fc7d6443ebc Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 10 Feb 2022 12:59:33 +0600 Subject: [PATCH 1/2] qt: Use non-integer HiDPI scaling on Qt 5 --- src/qt/qt_main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index ebeef8102..51412dab7 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -134,6 +134,7 @@ int main(int argc, char* argv[]) { QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); #endif + QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); QApplication app(argc, argv); qt_set_sequence_auto_mnemonic(false); Q_INIT_RESOURCE(qt_resources); From 775dad5fa3803541df067add30385c5f982fa937 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 10 Feb 2022 15:30:39 +0600 Subject: [PATCH 2/2] qt: Use QDesktopWidget for screen retrival --- src/qt/qt_mainwindow.cpp | 5 +++-- src/qt/qt_rendererstack.cpp | 3 ++- src/qt/qt_util.cpp | 13 +++++++++++++ src/qt/qt_util.hpp | 6 +++++- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 1eead1845..66f8d8b03 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -68,6 +68,7 @@ extern "C" { #include "qt_settings.hpp" #include "qt_machinestatus.hpp" #include "qt_mediamenu.hpp" +#include "qt_util.hpp" #ifdef __unix__ #ifdef WAYLAND @@ -184,9 +185,9 @@ MainWindow::MainWindow(QWidget *parent) : connect(this, &MainWindow::resizeContents, this, [this](int w, int h) { if (!QApplication::platformName().contains("eglfs") && vid_resize == 0) { - w = w / (!dpi_scale ? this->screen()->devicePixelRatio() : 1); + w = w / (!dpi_scale ? util::screenOfWidget(this)->devicePixelRatio() : 1); - int modifiedHeight = (h / (!dpi_scale ? this->screen()->devicePixelRatio() : 1)) + int modifiedHeight = (h / (!dpi_scale ? util::screenOfWidget(this)->devicePixelRatio() : 1)) + menuBar()->height() + (statusBar()->height() * !hide_status_bar) + (ui->toolBar->height() * !hide_tool_bar); diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index eff53d441..52d82fc92 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -25,6 +25,7 @@ #include "qt_hardwarerenderer.hpp" #include "qt_mainwindow.hpp" +#include "qt_util.hpp" #include "evdev_mouse.hpp" @@ -173,7 +174,7 @@ void RendererStack::mouseMoveEvent(QMouseEvent *event) ignoreNextMouseEvent--; } else if (event->globalPos().x() == 0 || event->globalPos().y() == 0) leaveEvent((QEvent*)event); - else if (event->globalPos().x() == (screen()->geometry().width() - 1) || event->globalPos().y() == (screen()->geometry().height() - 1)) leaveEvent((QEvent*)event); + else if (event->globalPos().x() == (util::screenOfWidget(this)->geometry().width() - 1) || event->globalPos().y() == (util::screenOfWidget(this)->geometry().height() - 1)) leaveEvent((QEvent*)event); oldPos = event->pos(); #endif } diff --git a/src/qt/qt_util.cpp b/src/qt/qt_util.cpp index 96a60004b..771c6d94a 100644 --- a/src/qt/qt_util.cpp +++ b/src/qt/qt_util.cpp @@ -16,10 +16,23 @@ */ #include #include +#include +#include +#if QT_VERSION <= QT_VERSION_CHECK(5, 14, 0) +#include +#endif #include "qt_util.hpp" namespace util { + QScreen* screenOfWidget(QWidget* widget) + { +#if QT_VERSION <= QT_VERSION_CHECK(5, 14, 0) + return QApplication::screens()[QApplication::desktop()->screenNumber(widget) == -1 ? 0 : QApplication::desktop()->screenNumber(widget)]; +#else + return widget->screen(); +#endif + } QString DlgFilter(std::initializer_list extensions, bool last) { diff --git a/src/qt/qt_util.hpp b/src/qt/qt_util.hpp index ab2284e4b..4e62c8e12 100644 --- a/src/qt/qt_util.hpp +++ b/src/qt/qt_util.hpp @@ -2,13 +2,17 @@ #define QT_UTIL_HPP #include +#include #include +class QScreen; namespace util { /* Creates extension list for qt filedialog */ QString DlgFilter(std::initializer_list extensions, bool last = false); + /* Returns screen the widget is on */ + QScreen* screenOfWidget(QWidget* widget); }; -#endif \ No newline at end of file +#endif