aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--qt-wayland-scale-hack.patch80
-rw-r--r--src/frontend/qt_sdl/Screen.h2
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"