diff --git a/src/duckstation-qt/mainwindow.cpp b/src/duckstation-qt/mainwindow.cpp index ada85e362..64b5194c0 100644 --- a/src/duckstation-qt/mainwindow.cpp +++ b/src/duckstation-qt/mainwindow.cpp @@ -575,6 +575,19 @@ void MainWindow::setupAdditionalUi() } updateDebugMenuGPURenderer(); + for (u32 i = 0; i < static_cast(DisplayCropMode::Count); i++) + { + const DisplayCropMode crop_mode = static_cast(i); + QAction* action = m_ui.menuCropMode->addAction(tr(Settings::GetDisplayCropModeDisplayName(crop_mode))); + action->setCheckable(true); + connect(action, &QAction::triggered, [this, crop_mode]() { + m_host_interface->SetStringSettingValue("Display", "CropMode", Settings::GetDisplayCropModeName(crop_mode)); + m_host_interface->applySettings(); + updateDebugMenuCropMode(); + }); + } + updateDebugMenuCropMode(); + const QString current_language( QString::fromStdString(m_host_interface->GetStringSettingValue("Main", "Language", ""))); QActionGroup* language_group = new QActionGroup(m_ui.menuSettingsLanguage); @@ -786,6 +799,10 @@ void MainWindow::connectSignals() m_host_interface->populateSaveStateMenus(nullptr, m_ui.menuLoadState, m_ui.menuSaveState); + SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.actionDisableInterlacing, "GPU", + "DisableInterlacing"); + SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.actionForceNTSCTimings, "GPU", + "ForceNTSCTimings"); SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.actionDebugDumpCPUtoVRAMCopies, "Debug", "DumpCPUToVRAMCopies"); SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.actionDebugDumpVRAMtoCPUCopies, "Debug", @@ -1061,6 +1078,22 @@ void MainWindow::updateDebugMenuGPURenderer() } } +void MainWindow::updateDebugMenuCropMode() +{ + std::optional current_crop_mode = + Settings::ParseDisplayCropMode(m_host_interface->GetStringSettingValue("Display", "CropMode").c_str()); + if (!current_crop_mode.has_value()) + return; + + const QString current_crop_mode_display_name(tr(Settings::GetDisplayCropModeDisplayName(current_crop_mode.value()))); + for (QObject* obj : m_ui.menuCropMode->children()) + { + QAction* action = qobject_cast(obj); + if (action) + action->setChecked(action->text() == current_crop_mode_display_name); + } +} + void MainWindow::closeEvent(QCloseEvent* event) { m_host_interface->synchronousPowerOffSystem(); diff --git a/src/duckstation-qt/mainwindow.h b/src/duckstation-qt/mainwindow.h index 85e9b6137..a384f4cbe 100644 --- a/src/duckstation-qt/mainwindow.h +++ b/src/duckstation-qt/mainwindow.h @@ -110,6 +110,7 @@ private: void doSettings(SettingsDialog::Category category = SettingsDialog::Category::Count); void updateDebugMenuCPUExecutionMode(); void updateDebugMenuGPURenderer(); + void updateDebugMenuCropMode(); Ui::MainWindow m_ui; diff --git a/src/duckstation-qt/mainwindow.ui b/src/duckstation-qt/mainwindow.ui index 4d46f91ee..afc93399d 100644 --- a/src/duckstation-qt/mainwindow.ui +++ b/src/duckstation-qt/mainwindow.ui @@ -161,8 +161,15 @@ Switch CPU Emulation Mode - + + + Switch Crop Mode + + + + + @@ -560,6 +567,22 @@ Dump VRAM to CPU Copies + + + true + + + Disable Interlacing + + + + + true + + + Force NTSC Timings + + true