diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/view/SliderSetting.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/view/SliderSetting.kt index 46ed42905..757d25865 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/view/SliderSetting.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/view/SliderSetting.kt @@ -20,7 +20,8 @@ class SliderSetting( val units: String, val key: String? = null, val defaultValue: Float? = null, - override var isEnabled: Boolean = true + override var isEnabled: Boolean = true, + val showSlider: Boolean = true ) : SettingsItem(setting, titleId, descriptionId) { override val type = TYPE_SLIDER val selectedFloat: Float diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsAdapter.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsAdapter.kt index 4bd5d3b5f..e1f9f7ecc 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsAdapter.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsAdapter.kt @@ -15,6 +15,7 @@ import android.text.InputType import android.text.TextWatcher import android.text.format.DateFormat import android.view.LayoutInflater +import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity @@ -315,7 +316,6 @@ class SettingsAdapter( clickedPosition = position sliderProgress = (item.selectedFloat * 100f).roundToInt() / 100f - val inflater = LayoutInflater.from(context) val sliderBinding = DialogSliderBinding.inflate(inflater) textInputLayout = sliderBinding.textInput @@ -335,6 +335,11 @@ class SettingsAdapter( valueFrom = item.min.toFloat() valueTo = item.max.toFloat() value = sliderProgress + if (!item.showSlider) { + isEnabled = false + visibility = View.GONE + } + textSliderValue?.addTextChangedListener(object : TextWatcher { override fun afterTextChanged(s: Editable) { var textValue = s.toString().toFloatOrNull(); diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt index d4baf6166..bf672b633 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt @@ -230,10 +230,11 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) R.string.frame_limit_slider, R.string.frame_limit_slider_description, 1, - 200, + 9999, "%", IntSetting.FRAME_LIMIT.key, - IntSetting.FRAME_LIMIT.defaultValue.toFloat() + IntSetting.FRAME_LIMIT.defaultValue.toFloat(), + showSlider = false ) ) add( @@ -241,11 +242,12 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) IntSetting.TURBO_LIMIT, R.string.turbo_limit, R.string.turbo_limit_description, - 100, - 400, + 1, + 9999, "%", IntSetting.TURBO_LIMIT.key, - IntSetting.TURBO_LIMIT.defaultValue.toFloat() + IntSetting.TURBO_LIMIT.defaultValue.toFloat(), + showSlider = false ) ) add( diff --git a/src/citra_qt/configuration/configure_general.cpp b/src/citra_qt/configuration/configure_general.cpp index 9a2d58a68..f655a3a81 100644 --- a/src/citra_qt/configuration/configure_general.cpp +++ b/src/citra_qt/configuration/configure_general.cpp @@ -28,16 +28,9 @@ ConfigureGeneral::ConfigureGeneral(QWidget* parent) : QWidget(parent), ui(std::make_unique()) { ui->setupUi(this); - connect(ui->turbo_limit, &QSlider::valueChanged, this, [&](double value) { - Settings::values.turbo_limit.SetValue(SliderToSettings(value)); - ui->turbo_limit_display_label->setText( - QStringLiteral("%1%").arg(Settings::values.turbo_limit.GetValue())); - }); - // Set a minimum width for the label to prevent the slider from changing size. // This scales across DPIs, and is acceptable for uncapitalized strings. const auto width = static_cast(tr("unthrottled").size() * 6); - ui->emulation_speed_display_label->setMinimumWidth(width); ui->emulation_speed_combo->setVisible(!Settings::IsConfiguringGlobal()); ui->screenshot_combo->setVisible(!Settings::IsConfiguringGlobal()); #ifndef __unix__ @@ -53,17 +46,6 @@ ConfigureGeneral::ConfigureGeneral(QWidget* parent) connect(ui->button_reset_defaults, &QPushButton::clicked, this, &ConfigureGeneral::ResetDefaults); - connect(ui->frame_limit, &QSlider::valueChanged, this, [&](int value) { - if (value == ui->frame_limit->maximum()) { - ui->emulation_speed_display_label->setText(tr("unthrottled")); - } else { - ui->emulation_speed_display_label->setText( - QStringLiteral("%1%") - .arg(SliderToSettings(value)) - .rightJustified(tr("unthrottled").size())); - } - }); - connect(ui->change_screenshot_dir, &QToolButton::clicked, this, [this] { ui->change_screenshot_dir->setEnabled(false); const QString dir_path = QFileDialog::getExistingDirectory( @@ -80,9 +62,7 @@ ConfigureGeneral::~ConfigureGeneral() = default; void ConfigureGeneral::SetConfiguration() { if (Settings::IsConfiguringGlobal()) { - ui->turbo_limit->setValue(SettingsToSlider(Settings::values.turbo_limit.GetValue())); - ui->turbo_limit_display_label->setText( - QStringLiteral("%1%").arg(Settings::values.turbo_limit.GetValue())); + ui->turbo_limit->setValue(Settings::values.turbo_limit.GetValue()); ui->toggle_check_exit->setChecked(UISettings::values.confirm_before_closing.GetValue()); ui->toggle_background_pause->setChecked( @@ -97,19 +77,7 @@ void ConfigureGeneral::SetConfiguration() { #endif } - if (Settings::values.frame_limit.GetValue() == 0) { - ui->frame_limit->setValue(ui->frame_limit->maximum()); - } else { - ui->frame_limit->setValue(SettingsToSlider(Settings::values.frame_limit.GetValue())); - } - if (ui->frame_limit->value() == ui->frame_limit->maximum()) { - ui->emulation_speed_display_label->setText(tr("unthrottled")); - } else { - ui->emulation_speed_display_label->setText( - QStringLiteral("%1%") - .arg(SliderToSettings(ui->frame_limit->value())) - .rightJustified(tr("unthrottled").size())); - } + ui->frame_limit->setValue(Settings::values.frame_limit.GetValue()); if (!Settings::IsConfiguringGlobal()) { if (Settings::values.frame_limit.UsingGlobal()) { @@ -163,11 +131,9 @@ void ConfigureGeneral::ResetDefaults() { } void ConfigureGeneral::ApplyConfiguration() { - ConfigurationShared::ApplyPerGameSetting( - &Settings::values.frame_limit, ui->emulation_speed_combo, [this](s32) { - const bool is_maximum = ui->frame_limit->value() == ui->frame_limit->maximum(); - return is_maximum ? 0 : SliderToSettings(ui->frame_limit->value()); - }); + ConfigurationShared::ApplyPerGameSetting(&Settings::values.frame_limit, + ui->emulation_speed_combo, + [this](s32) { return ui->frame_limit->value(); }); ConfigurationShared::ApplyPerGameSetting( &UISettings::values.screenshot_path, ui->screenshot_combo, @@ -182,6 +148,7 @@ void ConfigureGeneral::ApplyConfiguration() { #ifdef __unix__ Settings::values.enable_gamemode = ui->toggle_gamemode->isChecked(); #endif + Settings::values.turbo_limit = ui->turbo_limit->value(); } } diff --git a/src/citra_qt/configuration/configure_general.ui b/src/citra_qt/configuration/configure_general.ui index a4fee730a..cfafe4c57 100644 --- a/src/citra_qt/configuration/configure_general.ui +++ b/src/citra_qt/configuration/configure_general.ui @@ -105,44 +105,32 @@ - Emulation Speed + Emulation Speed: - - - 0 - + - 199 + 9999 - - 5 - - - 15 - - - 19 - - - Qt::Horizontal - - - QSlider::TicksBelow + + % - - - + + + Qt::Orientation::Horizontal - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 40 + 20 + - + @@ -170,56 +158,28 @@ - - - 0 - + - 198 + 9999 - - 5 - - - 15 - - - 19 - - - Qt::Horizontal - - - QSlider::TicksBelow + + % - Qt::Horizontal - - - QSizePolicy::Fixed + Qt::Orientation::Horizontal - 32 + 40 20 - - - - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - @@ -287,7 +247,7 @@ - + Reset All Settings @@ -297,7 +257,7 @@ - Qt::Vertical + Qt::Orientation::Vertical diff --git a/src/common/settings.h b/src/common/settings.h index 589de0057..b04ea8f0e 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -509,8 +509,8 @@ struct Values { SwitchableSetting use_vsync{true, "use_vsync"}; Setting use_shader_jit{true, "use_shader_jit"}; SwitchableSetting resolution_factor{1, 0, 10, "resolution_factor"}; - SwitchableSetting frame_limit{100, 0, 1000, "frame_limit"}; - SwitchableSetting turbo_limit{200, 0, 1000, "turbo_limit"}; + SwitchableSetting frame_limit{100, 1, 9999, "frame_limit"}; + SwitchableSetting turbo_limit{200, 1, 9999, "turbo_limit"}; SwitchableSetting texture_filter{TextureFilter::NoFilter, "texture_filter"}; SwitchableSetting texture_sampling{TextureSampling::GameControlled, "texture_sampling"};