diff options
-rw-r--r-- | qt-wayland-scale-hack.patch | 80 | ||||
-rw-r--r-- | src/frontend/qt_sdl/Screen.h | 2 |
2 files changed, 82 insertions, 0 deletions
diff --git a/qt-wayland-scale-hack.patch b/qt-wayland-scale-hack.patch new file mode 100644 index 0000000..a874035 --- /dev/null +++ b/qt-wayland-scale-hack.patch @@ -0,0 +1,80 @@ +diff --git a/src/frontend/qt_sdl/Screen.cpp b/src/frontend/qt_sdl/Screen.cpp +index d8af6624..019ce246 100644 +--- a/src/frontend/qt_sdl/Screen.cpp ++++ b/src/frontend/qt_sdl/Screen.cpp +@@ -30,6 +30,7 @@ + #include <QPaintEvent> + #include <QPainter> + #include <QDebug> ++#include <QApplication> + #ifndef _WIN32 + #ifndef APPLE + #include <qpa/qplatformnativeinterface.h> +@@ -596,23 +597,20 @@ void ScreenPanelGL::drawScreenGL() + glContext->SwapBuffers(); + } + +-qreal ScreenPanelGL::devicePixelRatioFromScreen() const ++qreal ScreenPanelGL::devicePixelRatioFromWindow() const + { +- const QScreen* screen_for_ratio = window()->windowHandle()->screen(); +- if (!screen_for_ratio) +- screen_for_ratio = QGuiApplication::primaryScreen(); +- +- return screen_for_ratio ? screen_for_ratio->devicePixelRatio() : static_cast<qreal>(1); ++ QWindow* window = windowHandle(); ++ return window->devicePixelRatio(); + } + + int ScreenPanelGL::scaledWindowWidth() const + { +- return std::max(static_cast<int>(std::ceil(static_cast<qreal>(width()) * devicePixelRatioFromScreen())), 1); ++ return std::max(static_cast<int>(std::ceil(static_cast<qreal>(width()) * devicePixelRatioFromWindow())), 1); + } + + int ScreenPanelGL::scaledWindowHeight() const + { +- return std::max(static_cast<int>(std::ceil(static_cast<qreal>(height()) * devicePixelRatioFromScreen())), 1); ++ return std::max(static_cast<int>(std::ceil(static_cast<qreal>(height()) * devicePixelRatioFromWindow())), 1); + } + + std::optional<WindowInfo> ScreenPanelGL::getWindowInfo() +@@ -644,6 +642,7 @@ std::optional<WindowInfo> ScreenPanelGL::getWindowInfo() + + wi.display_connection = pni->nativeResourceForWindow("display", handle); + wi.window_handle = pni->nativeResourceForWindow("surface", handle); ++ qApp->processEvents(); + } + else + { +@@ -654,7 +653,7 @@ std::optional<WindowInfo> ScreenPanelGL::getWindowInfo() + + wi.surface_width = static_cast<u32>(scaledWindowWidth()); + wi.surface_height = static_cast<u32>(scaledWindowHeight()); +- wi.surface_scale = static_cast<float>(devicePixelRatioFromScreen()); ++ wi.surface_scale = static_cast<float>(devicePixelRatioFromWindow()); + + return wi; + } +diff --git a/src/frontend/qt_sdl/Screen.h b/src/frontend/qt_sdl/Screen.h +index b11df29b..79889a3f 100644 +--- a/src/frontend/qt_sdl/Screen.h ++++ b/src/frontend/qt_sdl/Screen.h +@@ -23,6 +23,8 @@ + #include "FrontendUtil.h" + #include "duckstation/gl/context.h" + ++#include <optional> ++ + #include <QWidget> + #include <QWindow> + #include <QMainWindow> +@@ -133,7 +135,7 @@ public: + void transferLayout(); + protected: + +- qreal devicePixelRatioFromScreen() const; ++ qreal devicePixelRatioFromWindow() const; + int scaledWindowWidth() const; + int scaledWindowHeight() const; + diff --git a/src/frontend/qt_sdl/Screen.h b/src/frontend/qt_sdl/Screen.h index b11df29..4c031e6 100644 --- a/src/frontend/qt_sdl/Screen.h +++ b/src/frontend/qt_sdl/Screen.h @@ -19,6 +19,8 @@ #ifndef SCREEN_H #define SCREEN_H +#include <optional> + #include "glad/glad.h" #include "FrontendUtil.h" #include "duckstation/gl/context.h" |