diff --git a/rpcs3/rpcs3qt/settings_dialog.cpp b/rpcs3/rpcs3qt/settings_dialog.cpp index 973fd69a72..b107660b65 100644 --- a/rpcs3/rpcs3qt/settings_dialog.cpp +++ b/rpcs3/rpcs3qt/settings_dialog.cpp @@ -468,6 +468,7 @@ settings_dialog::settings_dialog(std::shared_ptr guiSettings, std: { ui->resolutionScale->setValue(resolutionScaleDef); }); + SnapSlider(ui->resolutionScale, 25); xemu_settings->EnhanceSlider(ui->minimumScalableDimension, emu_settings::MinimumScalableDimension); SubscribeTooltip(ui->gb_minimumScalableDimension, json_gpu_slid["minimumScalableDimension"].toString()); @@ -953,6 +954,7 @@ settings_dialog::settings_dialog(std::shared_ptr guiSettings, std: }); EnhanceSlider(emu_settings::VBlankRate, ui->vblank, ui->vblankText, tr("%0 Hz")); + SnapSlider(ui->vblank, 30); int vblankDef = stoi(xemu_settings->GetSettingDefault(emu_settings::VBlankRate)); connect(ui->vblankReset, &QAbstractButton::clicked, [=]() { @@ -960,6 +962,7 @@ settings_dialog::settings_dialog(std::shared_ptr guiSettings, std: }); EnhanceSlider(emu_settings::ClocksScale, ui->clockScale, ui->clockScaleText, tr("%0 %")); + SnapSlider(ui->clockScale, 10); int clocksScaleDef = stoi(xemu_settings->GetSettingDefault(emu_settings::ResolutionScale)); connect(ui->clockScaleReset, &QAbstractButton::clicked, [=]() { @@ -1629,6 +1632,28 @@ void settings_dialog::EnhanceSlider(emu_settings::SettingsType settings_type, QS } } +void settings_dialog::SnapSlider(QSlider *slider, int interval) +{ + connect(slider, &QSlider::sliderPressed, [this, slider]() + { + m_currentSlider = slider; + }); + + connect(slider, &QSlider::sliderReleased, [this]() + { + m_currentSlider = nullptr; + }); + + connect(slider, &QSlider::valueChanged, [this, slider, interval](int value) + { + if (slider != m_currentSlider) + { + return; + } + slider->setValue(::rounded_div(value, interval) * interval); + }); +} + void settings_dialog::AddConfigs() { ui->combo_configs->clear(); diff --git a/rpcs3/rpcs3qt/settings_dialog.h b/rpcs3/rpcs3qt/settings_dialog.h index 3cae16a3f5..cdbc7e7396 100644 --- a/rpcs3/rpcs3qt/settings_dialog.h +++ b/rpcs3/rpcs3qt/settings_dialog.h @@ -36,6 +36,10 @@ private Q_SLOTS: private: void EnhanceSlider(emu_settings::SettingsType settings_type, QSlider* slider, QLabel* label, const QString& label_text); + // Snapping of sliders when moved with mouse + void SnapSlider(QSlider* slider, int interval); + QSlider* m_currentSlider = nullptr; + // Emulator tab void AddConfigs(); void AddStylesheets();