Skip to content

Commit 38bb240

Browse files
committed
Qt: Avoid extra string storage
1 parent a50997a commit 38bb240

File tree

2 files changed

+21
-11
lines changed

2 files changed

+21
-11
lines changed

src/duckstation-qt/graphicssettingswidget.cpp

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,6 @@ static void DecodeMSAAModeValue(const QVariant& userdata, uint* multisamples, bo
4747
*ssaa = (value & (1u << 31)) != 0u;
4848
}
4949

50-
static bool IsCustomAspectRatio(const DisplayAspectRatio& ratio)
51-
{
52-
return std::ranges::none_of(Settings::GetPredefinedDisplayAspectRatios(),
53-
[&ratio](const auto& it) { return (it == ratio); });
54-
}
55-
5650
GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget* parent)
5751
: QWidget(parent), m_dialog(dialog)
5852
{
@@ -966,6 +960,17 @@ void GraphicsSettingsWidget::populateUpscalingModes(QComboBox* const cb, int max
966960
}
967961
}
968962

963+
QVariant GraphicsSettingsWidget::packAspectRatio(DisplayAspectRatio ar)
964+
{
965+
return QVariant(static_cast<uint>(ar.numerator) << 16 | static_cast<uint>(ar.denominator));
966+
}
967+
968+
DisplayAspectRatio GraphicsSettingsWidget::unpackAspectRatio(const QVariant& var)
969+
{
970+
const uint packed = var.toUInt();
971+
return DisplayAspectRatio{static_cast<s16>(packed >> 16), static_cast<s16>(packed & 0xFFFFu)};
972+
}
973+
969974
void GraphicsSettingsWidget::createAspectRatioSetting(QComboBox* const cb, QSpinBox* const numerator,
970975
QLabel* const separator, QSpinBox* const denominator,
971976
SettingsInterface* const sif)
@@ -984,7 +989,7 @@ void GraphicsSettingsWidget::createAspectRatioSetting(QComboBox* const cb, QSpin
984989
for (const DisplayAspectRatio& ratio : Settings::GetPredefinedDisplayAspectRatios())
985990
{
986991
cb->addItem(QtUtils::StringViewToQString(Settings::GetDisplayAspectRatioDisplayName(ratio)),
987-
QtUtils::StringViewToQString(Settings::GetDisplayAspectRatioName(ratio)));
992+
packAspectRatio(ratio));
988993
}
989994
cb->addItem(tr("Custom"));
990995

@@ -999,15 +1004,16 @@ void GraphicsSettingsWidget::createAspectRatioSetting(QComboBox* const cb, QSpin
9991004
Settings::ParseDisplayAspectRatio(sif ? sif->GetStringValue(CONFIG_SECTION, CONFIG_KEY) :
10001005
Host::GetBaseStringSettingValue(CONFIG_SECTION, CONFIG_KEY))
10011006
.value_or(Settings::DEFAULT_DISPLAY_ASPECT_RATIO);
1002-
if ((is_custom_ar = IsCustomAspectRatio(ar)))
1007+
if ((is_custom_ar = std::ranges::none_of(Settings::GetPredefinedDisplayAspectRatios(),
1008+
[&ar](const auto& it) { return (it == ar); })))
10031009
{
10041010
cb->setCurrentIndex(cb->count() - 1);
10051011
numerator->setValue(ar.numerator);
10061012
denominator->setValue(ar.denominator);
10071013
}
10081014
else
10091015
{
1010-
cb->setCurrentIndex(cb->findData(QtUtils::StringViewToQString(Settings::GetDisplayAspectRatioName(ar))));
1016+
cb->setCurrentIndex(cb->findData(packAspectRatio(ar)));
10111017
}
10121018
}
10131019
numerator->setVisible(is_custom_ar);
@@ -1027,8 +1033,7 @@ void GraphicsSettingsWidget::createAspectRatioSetting(QComboBox* const cb, QSpin
10271033
}
10281034
else
10291035
{
1030-
value_to_save.emplace(Settings::ParseDisplayAspectRatio(cb->currentData().toString().toStdString())
1031-
.value_or(Settings::DEFAULT_DISPLAY_ASPECT_RATIO));
1036+
value_to_save.emplace(unpackAspectRatio(cb->currentData()));
10321037
}
10331038
}
10341039

src/duckstation-qt/graphicssettingswidget.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
#include "ui_graphicssettingswidget.h"
99

10+
#include "core/types.h"
11+
1012
#include "util/gpu_device.h"
1113

1214
enum class GPURenderer : u8;
@@ -24,6 +26,9 @@ class GraphicsSettingsWidget : public QWidget
2426
~GraphicsSettingsWidget();
2527

2628
static void populateUpscalingModes(QComboBox* const cb, int max_scale);
29+
30+
static QVariant packAspectRatio(DisplayAspectRatio ar);
31+
static DisplayAspectRatio unpackAspectRatio(const QVariant& var);
2732
static void createAspectRatioSetting(QComboBox* const cb, QSpinBox* const numerator, QLabel* const separator,
2833
QSpinBox* const denominator, SettingsInterface* const sif);
2934

0 commit comments

Comments
 (0)