diff options
Diffstat (limited to 'src/yuzu/configuration/configure_audio.cpp')
-rw-r--r-- | src/yuzu/configuration/configure_audio.cpp | 86 |
1 files changed, 75 insertions, 11 deletions
diff --git a/src/yuzu/configuration/configure_audio.cpp b/src/yuzu/configuration/configure_audio.cpp index f370c690fe..db9518798f 100644 --- a/src/yuzu/configuration/configure_audio.cpp +++ b/src/yuzu/configuration/configure_audio.cpp @@ -11,6 +11,7 @@ #include "core/core.h" #include "core/settings.h" #include "ui_configure_audio.h" +#include "yuzu/configuration/configuration_shared.h" #include "yuzu/configuration/configure_audio.h" ConfigureAudio::ConfigureAudio(QWidget* parent) @@ -24,6 +25,11 @@ ConfigureAudio::ConfigureAudio(QWidget* parent) connect(ui->output_sink_combo_box, qOverload<int>(&QComboBox::currentIndexChanged), this, &ConfigureAudio::UpdateAudioDevices); + ui->volume_label->setVisible(Settings::IsConfiguringGlobal()); + ui->volume_combo_box->setVisible(!Settings::IsConfiguringGlobal()); + + SetupPerGameUI(); + SetConfiguration(); const bool is_powered_on = Core::System::GetInstance().IsPoweredOn(); @@ -41,8 +47,21 @@ void ConfigureAudio::SetConfiguration() { SetAudioDeviceFromDeviceID(); - ui->toggle_audio_stretching->setChecked(Settings::values.enable_audio_stretching); - ui->volume_slider->setValue(Settings::values.volume * ui->volume_slider->maximum()); + ui->volume_slider->setValue(Settings::values.volume.GetValue() * ui->volume_slider->maximum()); + + ui->toggle_audio_stretching->setChecked(Settings::values.enable_audio_stretching.GetValue()); + + if (!Settings::IsConfiguringGlobal()) { + if (Settings::values.volume.UsingGlobal()) { + ui->volume_combo_box->setCurrentIndex(0); + ui->volume_slider->setEnabled(false); + } else { + ui->volume_combo_box->setCurrentIndex(1); + ui->volume_slider->setEnabled(true); + } + ConfigurationShared::SetHighlight(ui->volume_layout, + !Settings::values.volume.UsingGlobal()); + } SetVolumeIndicatorText(ui->volume_slider->sliderPosition()); } @@ -80,15 +99,37 @@ void ConfigureAudio::SetVolumeIndicatorText(int percentage) { } void ConfigureAudio::ApplyConfiguration() { - Settings::values.sink_id = - ui->output_sink_combo_box->itemText(ui->output_sink_combo_box->currentIndex()) - .toStdString(); - Settings::values.enable_audio_stretching = ui->toggle_audio_stretching->isChecked(); - Settings::values.audio_device_id = - ui->audio_device_combo_box->itemText(ui->audio_device_combo_box->currentIndex()) - .toStdString(); - Settings::values.volume = - static_cast<float>(ui->volume_slider->sliderPosition()) / ui->volume_slider->maximum(); + if (Settings::IsConfiguringGlobal()) { + Settings::values.sink_id = + ui->output_sink_combo_box->itemText(ui->output_sink_combo_box->currentIndex()) + .toStdString(); + Settings::values.audio_device_id = + ui->audio_device_combo_box->itemText(ui->audio_device_combo_box->currentIndex()) + .toStdString(); + + // Guard if during game and set to game-specific value + if (Settings::values.enable_audio_stretching.UsingGlobal()) { + Settings::values.enable_audio_stretching.SetValue( + ui->toggle_audio_stretching->isChecked()); + } + if (Settings::values.volume.UsingGlobal()) { + Settings::values.volume.SetValue( + static_cast<float>(ui->volume_slider->sliderPosition()) / + ui->volume_slider->maximum()); + } + } else { + ConfigurationShared::ApplyPerGameSetting(&Settings::values.enable_audio_stretching, + ui->toggle_audio_stretching, + enable_audio_stretching); + if (ui->volume_combo_box->currentIndex() == 0) { + Settings::values.volume.SetGlobal(true); + } else { + Settings::values.volume.SetGlobal(false); + Settings::values.volume.SetValue( + static_cast<float>(ui->volume_slider->sliderPosition()) / + ui->volume_slider->maximum()); + } + } } void ConfigureAudio::changeEvent(QEvent* event) { @@ -122,3 +163,26 @@ void ConfigureAudio::RetranslateUI() { ui->retranslateUi(this); SetVolumeIndicatorText(ui->volume_slider->sliderPosition()); } + +void ConfigureAudio::SetupPerGameUI() { + if (Settings::IsConfiguringGlobal()) { + ui->volume_slider->setEnabled(Settings::values.volume.UsingGlobal()); + ui->toggle_audio_stretching->setEnabled( + Settings::values.enable_audio_stretching.UsingGlobal()); + + return; + } + + ConfigurationShared::SetColoredTristate(ui->toggle_audio_stretching, + Settings::values.enable_audio_stretching, + enable_audio_stretching); + connect(ui->volume_combo_box, qOverload<int>(&QComboBox::activated), this, [this](int index) { + ui->volume_slider->setEnabled(index == 1); + ConfigurationShared::SetHighlight(ui->volume_layout, index == 1); + }); + + ui->output_sink_combo_box->setVisible(false); + ui->output_sink_label->setVisible(false); + ui->audio_device_combo_box->setVisible(false); + ui->audio_device_label->setVisible(false); +} |