From 38bb240a44cc927e0d9996874d2adaf7b81c6dd0 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sun, 28 Sep 2025 20:26:04 +1000 Subject: [PATCH] Qt: Avoid extra string storage --- src/duckstation-qt/graphicssettingswidget.cpp | 27 +++++++++++-------- src/duckstation-qt/graphicssettingswidget.h | 5 ++++ 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/duckstation-qt/graphicssettingswidget.cpp b/src/duckstation-qt/graphicssettingswidget.cpp index b8421cc2a..ecae29488 100644 --- a/src/duckstation-qt/graphicssettingswidget.cpp +++ b/src/duckstation-qt/graphicssettingswidget.cpp @@ -47,12 +47,6 @@ static void DecodeMSAAModeValue(const QVariant& userdata, uint* multisamples, bo *ssaa = (value & (1u << 31)) != 0u; } -static bool IsCustomAspectRatio(const DisplayAspectRatio& ratio) -{ - return std::ranges::none_of(Settings::GetPredefinedDisplayAspectRatios(), - [&ratio](const auto& it) { return (it == ratio); }); -} - GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget* parent) : QWidget(parent), m_dialog(dialog) { @@ -966,6 +960,17 @@ void GraphicsSettingsWidget::populateUpscalingModes(QComboBox* const cb, int max } } +QVariant GraphicsSettingsWidget::packAspectRatio(DisplayAspectRatio ar) +{ + return QVariant(static_cast(ar.numerator) << 16 | static_cast(ar.denominator)); +} + +DisplayAspectRatio GraphicsSettingsWidget::unpackAspectRatio(const QVariant& var) +{ + const uint packed = var.toUInt(); + return DisplayAspectRatio{static_cast(packed >> 16), static_cast(packed & 0xFFFFu)}; +} + void GraphicsSettingsWidget::createAspectRatioSetting(QComboBox* const cb, QSpinBox* const numerator, QLabel* const separator, QSpinBox* const denominator, SettingsInterface* const sif) @@ -984,7 +989,7 @@ void GraphicsSettingsWidget::createAspectRatioSetting(QComboBox* const cb, QSpin for (const DisplayAspectRatio& ratio : Settings::GetPredefinedDisplayAspectRatios()) { cb->addItem(QtUtils::StringViewToQString(Settings::GetDisplayAspectRatioDisplayName(ratio)), - QtUtils::StringViewToQString(Settings::GetDisplayAspectRatioName(ratio))); + packAspectRatio(ratio)); } cb->addItem(tr("Custom")); @@ -999,7 +1004,8 @@ void GraphicsSettingsWidget::createAspectRatioSetting(QComboBox* const cb, QSpin Settings::ParseDisplayAspectRatio(sif ? sif->GetStringValue(CONFIG_SECTION, CONFIG_KEY) : Host::GetBaseStringSettingValue(CONFIG_SECTION, CONFIG_KEY)) .value_or(Settings::DEFAULT_DISPLAY_ASPECT_RATIO); - if ((is_custom_ar = IsCustomAspectRatio(ar))) + if ((is_custom_ar = std::ranges::none_of(Settings::GetPredefinedDisplayAspectRatios(), + [&ar](const auto& it) { return (it == ar); }))) { cb->setCurrentIndex(cb->count() - 1); numerator->setValue(ar.numerator); @@ -1007,7 +1013,7 @@ void GraphicsSettingsWidget::createAspectRatioSetting(QComboBox* const cb, QSpin } else { - cb->setCurrentIndex(cb->findData(QtUtils::StringViewToQString(Settings::GetDisplayAspectRatioName(ar)))); + cb->setCurrentIndex(cb->findData(packAspectRatio(ar))); } } numerator->setVisible(is_custom_ar); @@ -1027,8 +1033,7 @@ void GraphicsSettingsWidget::createAspectRatioSetting(QComboBox* const cb, QSpin } else { - value_to_save.emplace(Settings::ParseDisplayAspectRatio(cb->currentData().toString().toStdString()) - .value_or(Settings::DEFAULT_DISPLAY_ASPECT_RATIO)); + value_to_save.emplace(unpackAspectRatio(cb->currentData())); } } diff --git a/src/duckstation-qt/graphicssettingswidget.h b/src/duckstation-qt/graphicssettingswidget.h index 2512f86cb..5c53746b9 100644 --- a/src/duckstation-qt/graphicssettingswidget.h +++ b/src/duckstation-qt/graphicssettingswidget.h @@ -7,6 +7,8 @@ #include "ui_graphicssettingswidget.h" +#include "core/types.h" + #include "util/gpu_device.h" enum class GPURenderer : u8; @@ -24,6 +26,9 @@ public: ~GraphicsSettingsWidget(); static void populateUpscalingModes(QComboBox* const cb, int max_scale); + + static QVariant packAspectRatio(DisplayAspectRatio ar); + static DisplayAspectRatio unpackAspectRatio(const QVariant& var); static void createAspectRatioSetting(QComboBox* const cb, QSpinBox* const numerator, QLabel* const separator, QSpinBox* const denominator, SettingsInterface* const sif);