aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlizzie <lizzie@eden-emu.dev>2026-01-28 21:18:12 +0100
committercrueter <crueter@eden-emu.dev>2026-01-28 21:18:12 +0100
commitc974f3e0fbc0cd775ce01d2e1680382ab1e6db5f (patch)
treeff9b97d0d382b75b0b248dbe69d50cf761c2a55e /src
parent4624b16cc61628b01950588afeec9bbb3f9b0e4f (diff)
[qt] fix the blurry and pixelled images of the games in the main screen (#3398)
Authored-by: Bruno <protoxseven@gmail.com> Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3398 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: crueter <crueter@eden-emu.dev> Co-authored-by: lizzie <lizzie@eden-emu.dev> Co-committed-by: lizzie <lizzie@eden-emu.dev>
Diffstat (limited to 'src')
-rw-r--r--src/yuzu/main.cpp39
1 files changed, 17 insertions, 22 deletions
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index 4de159627f..c6b4fde83e 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -1,4 +1,4 @@
-// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
+// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
#include <QApplication>
@@ -31,7 +31,7 @@ static void OverrideWindowsFont() {
}
#endif
-static void SetHighDPIAttributes() {
+static Qt::HighDpiScaleFactorRoundingPolicy GetHighDpiRoundingPolicy() {
#ifdef _WIN32
// For Windows, we want to avoid scaling artifacts on fractional scaling ratios.
// This is done by setting the optimal scaling policy for the primary screen.
@@ -44,36 +44,30 @@ static void SetHighDPIAttributes() {
// Get the current screen geometry.
const QScreen* primary_screen = QGuiApplication::primaryScreen();
if (primary_screen == nullptr) {
- return;
+ return Qt::HighDpiScaleFactorRoundingPolicy::PassThrough;
}
const QRect screen_rect = primary_screen->geometry();
- const int real_width = screen_rect.width();
- const int real_height = screen_rect.height();
- const float real_ratio = primary_screen->logicalDotsPerInch() / 96.0f;
+ const qreal real_ratio = primary_screen->devicePixelRatio();
+ const qreal real_width = std::trunc(screen_rect.width() * real_ratio);
+ const qreal real_height = std::trunc(screen_rect.height() * real_ratio);
// Recommended minimum width and height for proper window fit.
// Any screen with a lower resolution than this will still have a scale of 1.
- constexpr float minimum_width = 1350.0f;
- constexpr float minimum_height = 900.0f;
+ constexpr qreal minimum_width = 1350.0;
+ constexpr qreal minimum_height = 900.0;
- const float width_ratio = (std::max)(1.0f, real_width / minimum_width);
- const float height_ratio = (std::max)(1.0f, real_height / minimum_height);
+ const qreal width_ratio = std::max(1.0, real_width / minimum_width);
+ const qreal height_ratio = std::max(1.0, real_height / minimum_height);
// Get the lower of the 2 ratios and truncate, this is the maximum integer scale.
- const float max_ratio = std::trunc((std::min)(width_ratio, height_ratio));
-
- if (max_ratio > real_ratio) {
- QApplication::setHighDpiScaleFactorRoundingPolicy(
- Qt::HighDpiScaleFactorRoundingPolicy::Round);
- } else {
- QApplication::setHighDpiScaleFactorRoundingPolicy(
- Qt::HighDpiScaleFactorRoundingPolicy::Floor);
- }
+ const qreal max_ratio = std::trunc(std::min(width_ratio, height_ratio));
+ return max_ratio > real_ratio
+ ? Qt::HighDpiScaleFactorRoundingPolicy::Round
+ : Qt::HighDpiScaleFactorRoundingPolicy::Floor;
#else
// Other OSes should be better than Windows at fractional scaling.
- QApplication::setHighDpiScaleFactorRoundingPolicy(
- Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
+ return Qt::HighDpiScaleFactorRoundingPolicy::PassThrough;
#endif
}
@@ -139,7 +133,8 @@ int main(int argc, char* argv[]) {
QGuiApplication::setDesktopFileName(QStringLiteral("dev.eden_emu.eden"));
#endif
- SetHighDPIAttributes();
+ auto rounding_policy = GetHighDpiRoundingPolicy();
+ QApplication::setHighDpiScaleFactorRoundingPolicy(rounding_policy);
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
// Disables the "?" button on all dialogs. Disabled by default on Qt6.