diff --git a/src/duckstation-qt/advancedsettingswidget.cpp b/src/duckstation-qt/advancedsettingswidget.cpp index f7cf057d8..f58570a67 100644 --- a/src/duckstation-qt/advancedsettingswidget.cpp +++ b/src/duckstation-qt/advancedsettingswidget.cpp @@ -18,6 +18,25 @@ AdvancedSettingsWidget::AdvancedSettingsWidget(QtHostInterface* host_interface, SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.logToWindow, QStringLiteral("Logging/LogToWindow")); SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.logToFile, QStringLiteral("Logging/LogToFile")); + + // Tweaks/Hacks section + SettingWidgetBinder::BindWidgetToIntSetting(m_host_interface, m_ui.dmaMaxSliceTicks, + QStringLiteral("Hacks/DMAHaltTicks")); + SettingWidgetBinder::BindWidgetToIntSetting(m_host_interface, m_ui.dmaHaltTicks, + QStringLiteral("Hacks/DMAMaxSliceTicks")); + SettingWidgetBinder::BindWidgetToIntSetting(m_host_interface, m_ui.gpuFIFOSize, QStringLiteral("Hacks/GPUFIFOSize")); + SettingWidgetBinder::BindWidgetToIntSetting(m_host_interface, m_ui.gpuMaxRunAhead, + QStringLiteral("Hacks/GPUMaxRunAhead")); + + connect(m_ui.resetToDefaultButton, &QPushButton::clicked, this, &AdvancedSettingsWidget::onResetToDefaultClicked); } AdvancedSettingsWidget::~AdvancedSettingsWidget() = default; + +void AdvancedSettingsWidget::onResetToDefaultClicked() +{ + m_ui.dmaMaxSliceTicks->setValue(static_cast(Settings::DEFAULT_DMA_MAX_SLICE_TICKS)); + m_ui.dmaHaltTicks->setValue(static_cast(Settings::DEFAULT_DMA_HALT_TICKS)); + m_ui.gpuFIFOSize->setValue(static_cast(Settings::DEFAULT_GPU_FIFO_SIZE)); + m_ui.gpuMaxRunAhead->setValue(static_cast(Settings::DEFAULT_GPU_MAX_RUN_AHEAD)); +} diff --git a/src/duckstation-qt/advancedsettingswidget.h b/src/duckstation-qt/advancedsettingswidget.h index c4c0ee61b..366cef5b9 100644 --- a/src/duckstation-qt/advancedsettingswidget.h +++ b/src/duckstation-qt/advancedsettingswidget.h @@ -18,5 +18,7 @@ public: private: Ui::AdvancedSettingsWidget m_ui; + void onResetToDefaultClicked(); + QtHostInterface* m_host_interface; }; diff --git a/src/duckstation-qt/advancedsettingswidget.ui b/src/duckstation-qt/advancedsettingswidget.ui index 7c2a49532..485ac6152 100644 --- a/src/duckstation-qt/advancedsettingswidget.ui +++ b/src/duckstation-qt/advancedsettingswidget.ui @@ -110,12 +110,22 @@ - DMA Max Slice Size: + DMA Max Slice Ticks: - + + + 100 + + + 10000 + + + 1000 + + @@ -125,10 +135,30 @@ - + + + 100 + + + 10000 + + + 100 + + - + + + 16 + + + 4096 + + + 16 + + @@ -145,10 +175,17 @@ - + + + 1000 + + + 128 + + - + Reset To Default diff --git a/src/duckstation-qt/settingwidgetbinder.h b/src/duckstation-qt/settingwidgetbinder.h index 798a3c831..e381ee15d 100644 --- a/src/duckstation-qt/settingwidgetbinder.h +++ b/src/duckstation-qt/settingwidgetbinder.h @@ -10,6 +10,7 @@ #include #include #include +#include namespace SettingWidgetBinder { @@ -111,6 +112,25 @@ struct SettingAccessor } }; +template<> +struct SettingAccessor +{ + static bool getBoolValue(const QSpinBox* widget) { return widget->value() > 0; } + static void setBoolValue(QSpinBox* widget, bool value) { widget->setValue(value ? 1 : 0); } + + static int getIntValue(const QSpinBox* widget) { return widget->value(); } + static void setIntValue(QSpinBox* widget, int value) { widget->setValue(value); } + + static QString getStringValue(const QSpinBox* widget) { return QStringLiteral("%1").arg(widget->value()); } + static void setStringValue(QSpinBox* widget, const QString& value) { widget->setValue(value.toInt()); } + + template + static void connectValueChanged(QSpinBox* widget, F func) + { + widget->connect(widget, QOverload::of(&QSpinBox::valueChanged), func); + } +}; + template<> struct SettingAccessor { @@ -213,4 +233,4 @@ void BindWidgetToEnumSetting(QtHostInterface* hi, WidgetType* widget, const QStr }); } -} // namespace SettingWidgetBinder \ No newline at end of file +} // namespace SettingWidgetBinder