From be7852dfc0cfbb4b0cd776fab365f0f0c8239cda Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Tue, 16 Aug 2022 01:22:26 -0500 Subject: [PATCH] Remove desktop resolution in favor of native (unscaled) resolution Seeing 2 "native" resolutions for a single high DPI display is confusing. If someone wants a lower resolution aspect-ratio match of a display, they can use a custom resolution. --- app/backend/systemproperties.cpp | 26 ------------- app/backend/systemproperties.h | 2 - app/gui/SettingsView.qml | 65 +++++++++++++------------------- 3 files changed, 27 insertions(+), 66 deletions(-) diff --git a/app/backend/systemproperties.cpp b/app/backend/systemproperties.cpp index bd64c9d8..ce4c9c81 100644 --- a/app/backend/systemproperties.cpp +++ b/app/backend/systemproperties.cpp @@ -71,16 +71,9 @@ SystemProperties::SystemProperties() querySdlVideoInfo(); Q_ASSERT(maximumStreamingFrameRate >= 60); - Q_ASSERT(!monitorDesktopResolutions.isEmpty()); Q_ASSERT(!monitorNativeResolutions.isEmpty()); } -QRect SystemProperties::getDesktopResolution(int displayIndex) -{ - // Returns default constructed QRect if out of bounds - return monitorDesktopResolutions.value(displayIndex); -} - QRect SystemProperties::getNativeResolution(int displayIndex) { // Returns default constructed QRect if out of bounds @@ -193,7 +186,6 @@ void SystemProperties::refreshDisplaysInternal() return; } - monitorDesktopResolutions.clear(); monitorNativeResolutions.clear(); // Never let the maximum drop below 60 FPS @@ -202,24 +194,6 @@ void SystemProperties::refreshDisplaysInternal() SDL_DisplayMode bestMode; for (int displayIndex = 0; displayIndex < SDL_GetNumVideoDisplays(); displayIndex++) { SDL_DisplayMode desktopMode; - int err; - - err = SDL_GetDesktopDisplayMode(displayIndex, &desktopMode); - if (err == 0) { - if (desktopMode.w <= 8192 && desktopMode.h <= 8192) { - monitorDesktopResolutions.insert(displayIndex, QRect(0, 0, desktopMode.w, desktopMode.h)); - } - else { - SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION, - "Skipping resolution over 8K: %dx%d", - desktopMode.w, desktopMode.h); - } - } - else { - SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, - "SDL_GetDesktopDisplayMode() failed: %s", - SDL_GetError()); - } if (StreamUtils::getNativeDesktopMode(displayIndex, &desktopMode)) { if (desktopMode.w <= 8192 && desktopMode.h <= 8192) { diff --git a/app/backend/systemproperties.h b/app/backend/systemproperties.h index 4018bc1c..960e2384 100644 --- a/app/backend/systemproperties.h +++ b/app/backend/systemproperties.h @@ -29,7 +29,6 @@ public: Q_PROPERTY(bool supportsHdr MEMBER supportsHdr CONSTANT) Q_INVOKABLE void refreshDisplays(); - Q_INVOKABLE QRect getDesktopResolution(int displayIndex); Q_INVOKABLE QRect getNativeResolution(int displayIndex); signals: @@ -52,7 +51,6 @@ private: QString unmappedGamepads; int maximumStreamingFrameRate; QSize maximumResolution; - QList monitorDesktopResolutions; QList monitorNativeResolutions; QString versionString; bool supportsHdr; diff --git a/app/gui/SettingsView.qml b/app/gui/SettingsView.qml index 7573d793..b6339b3f 100644 --- a/app/gui/SettingsView.qml +++ b/app/gui/SettingsView.qml @@ -97,50 +97,39 @@ Flickable { // Add native resolutions for all attached displays var done = false for (var displayIndex = 0; !done; displayIndex++) { - for (var displayResIndex = 0; displayResIndex < 2; displayResIndex++) { - var screenRect; + var screenRect = SystemProperties.getNativeResolution(displayIndex); - // Some platforms have different desktop resolutions - // and native resolutions (like macOS with Retina displays) - if (displayResIndex === 0) { - screenRect = SystemProperties.getDesktopResolution(displayIndex) - } - else { - screenRect = SystemProperties.getNativeResolution(displayIndex) - } + if (screenRect.width === 0) { + // Exceeded max count of displays + done = true + break + } - if (screenRect.width === 0) { - // Exceeded max count of displays - done = true + var indexToAdd = 0 + for (var j = 0; j < resolutionComboBox.count; j++) { + var existing_width = parseInt(resolutionListModel.get(j).video_width); + var existing_height = parseInt(resolutionListModel.get(j).video_height); + + if (screenRect.width === existing_width && screenRect.height === existing_height) { + // Duplicate entry, skip + indexToAdd = -1 break } - - var indexToAdd = 0 - for (var j = 0; j < resolutionComboBox.count; j++) { - var existing_width = parseInt(resolutionListModel.get(j).video_width); - var existing_height = parseInt(resolutionListModel.get(j).video_height); - - if (screenRect.width === existing_width && screenRect.height === existing_height) { - // Duplicate entry, skip - indexToAdd = -1 - break - } - else if (screenRect.width * screenRect.height > existing_width * existing_height) { - // Candidate entrypoint after this entry - indexToAdd = j + 1 - } + else if (screenRect.width * screenRect.height > existing_width * existing_height) { + // Candidate entrypoint after this entry + indexToAdd = j + 1 } + } - // Insert this display's resolution if it's not a duplicate - if (indexToAdd >= 0) { - resolutionListModel.insert(indexToAdd, - { - "text": "Native ("+screenRect.width+"x"+screenRect.height+")", - "video_width": ""+screenRect.width, - "video_height": ""+screenRect.height, - "is_custom": false - }) - } + // Insert this display's resolution if it's not a duplicate + if (indexToAdd >= 0) { + resolutionListModel.insert(indexToAdd, + { + "text": "Native ("+screenRect.width+"x"+screenRect.height+")", + "video_width": ""+screenRect.width, + "video_height": ""+screenRect.height, + "is_custom": false + }) } }