summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar bunnei2023-02-06 17:10:44 -0800
committerGravatar GitHub2023-02-06 17:10:44 -0800
commitecbf74b87a2c4216002ae37026d2301bc39c93a9 (patch)
tree5661522767c87ff7f0e3f5f42ca37142f253df88
parentMerge pull request #9735 from merryhime/dynarmic-6.4.5 (diff)
parentremove disambiguation argument from mute text (diff)
downloadyuzu-ecbf74b87a2c4216002ae37026d2301bc39c93a9.tar.gz
yuzu-ecbf74b87a2c4216002ae37026d2301bc39c93a9.tar.xz
yuzu-ecbf74b87a2c4216002ae37026d2301bc39c93a9.zip
Merge pull request #9644 from SaiKai/volume_quicksetting
add volume quicksetting with volume slider
-rw-r--r--src/yuzu/main.cpp105
-rw-r--r--src/yuzu/main.h9
2 files changed, 90 insertions, 24 deletions
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index 42b7b64c8..f5e6e0f58 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -957,6 +957,38 @@ void GMainWindow::InitializeWidgets() {
957 tas_label->setFocusPolicy(Qt::NoFocus); 957 tas_label->setFocusPolicy(Qt::NoFocus);
958 statusBar()->insertPermanentWidget(0, tas_label); 958 statusBar()->insertPermanentWidget(0, tas_label);
959 959
960 volume_popup = new QWidget(this);
961 volume_popup->setWindowFlags(Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint | Qt::Popup);
962 volume_popup->setLayout(new QVBoxLayout());
963 volume_popup->setMinimumWidth(200);
964
965 volume_slider = new QSlider(Qt::Horizontal);
966 volume_slider->setObjectName(QStringLiteral("volume_slider"));
967 volume_slider->setMaximum(200);
968 volume_slider->setPageStep(5);
969 connect(volume_slider, &QSlider::valueChanged, this, [this](int percentage) {
970 Settings::values.audio_muted = false;
971 const auto volume = static_cast<u8>(percentage);
972 Settings::values.volume.SetValue(volume);
973 UpdateVolumeUI();
974 });
975 volume_popup->layout()->addWidget(volume_slider);
976
977 volume_button = new QPushButton();
978 volume_button->setObjectName(QStringLiteral("TogglableStatusBarButton"));
979 volume_button->setFocusPolicy(Qt::NoFocus);
980 volume_button->setCheckable(true);
981 UpdateVolumeUI();
982 connect(volume_button, &QPushButton::clicked, this, [&] {
983 UpdateVolumeUI();
984 volume_popup->setVisible(!volume_popup->isVisible());
985 QRect rect = volume_button->geometry();
986 QPoint bottomLeft = statusBar()->mapToGlobal(rect.topLeft());
987 bottomLeft.setY(bottomLeft.y() - volume_popup->geometry().height());
988 volume_popup->setGeometry(QRect(bottomLeft, QSize(rect.width(), rect.height())));
989 });
990 statusBar()->insertPermanentWidget(0, volume_button);
991
960 // setup AA button 992 // setup AA button
961 aa_status_button = new QPushButton(); 993 aa_status_button = new QPushButton();
962 aa_status_button->setObjectName(QStringLiteral("TogglableStatusBarButton")); 994 aa_status_button->setObjectName(QStringLiteral("TogglableStatusBarButton"));
@@ -1119,30 +1151,9 @@ void GMainWindow::InitializeHotkeys() {
1119 &GMainWindow::OnToggleAdaptingFilter); 1151 &GMainWindow::OnToggleAdaptingFilter);
1120 connect_shortcut(QStringLiteral("Change Docked Mode"), &GMainWindow::OnToggleDockedMode); 1152 connect_shortcut(QStringLiteral("Change Docked Mode"), &GMainWindow::OnToggleDockedMode);
1121 connect_shortcut(QStringLiteral("Change GPU Accuracy"), &GMainWindow::OnToggleGpuAccuracy); 1153 connect_shortcut(QStringLiteral("Change GPU Accuracy"), &GMainWindow::OnToggleGpuAccuracy);
1122 connect_shortcut(QStringLiteral("Audio Mute/Unmute"), 1154 connect_shortcut(QStringLiteral("Audio Mute/Unmute"), &GMainWindow::OnMute);
1123 [] { Settings::values.audio_muted = !Settings::values.audio_muted; }); 1155 connect_shortcut(QStringLiteral("Audio Volume Down"), &GMainWindow::OnDecreaseVolume);
1124 connect_shortcut(QStringLiteral("Audio Volume Down"), [] { 1156 connect_shortcut(QStringLiteral("Audio Volume Up"), &GMainWindow::OnIncreaseVolume);
1125 const auto current_volume = static_cast<s32>(Settings::values.volume.GetValue());
1126 int step = 5;
1127 if (current_volume <= 30) {
1128 step = 2;
1129 }
1130 if (current_volume <= 6) {
1131 step = 1;
1132 }
1133 Settings::values.volume.SetValue(std::max(current_volume - step, 0));
1134 });
1135 connect_shortcut(QStringLiteral("Audio Volume Up"), [] {
1136 const auto current_volume = static_cast<s32>(Settings::values.volume.GetValue());
1137 int step = 5;
1138 if (current_volume < 30) {
1139 step = 2;
1140 }
1141 if (current_volume < 6) {
1142 step = 1;
1143 }
1144 Settings::values.volume.SetValue(current_volume + step);
1145 });
1146 connect_shortcut(QStringLiteral("Toggle Framerate Limit"), [] { 1157 connect_shortcut(QStringLiteral("Toggle Framerate Limit"), [] {
1147 Settings::values.use_speed_limit.SetValue(!Settings::values.use_speed_limit.GetValue()); 1158 Settings::values.use_speed_limit.SetValue(!Settings::values.use_speed_limit.GetValue());
1148 }); 1159 });
@@ -3456,6 +3467,39 @@ void GMainWindow::OnToggleGpuAccuracy() {
3456 UpdateGPUAccuracyButton(); 3467 UpdateGPUAccuracyButton();
3457} 3468}
3458 3469
3470void GMainWindow::OnMute() {
3471 Settings::values.audio_muted = !Settings::values.audio_muted;
3472 UpdateVolumeUI();
3473}
3474
3475void GMainWindow::OnDecreaseVolume() {
3476 Settings::values.audio_muted = false;
3477 const auto current_volume = static_cast<s32>(Settings::values.volume.GetValue());
3478 int step = 5;
3479 if (current_volume <= 30) {
3480 step = 2;
3481 }
3482 if (current_volume <= 6) {
3483 step = 1;
3484 }
3485 Settings::values.volume.SetValue(std::max(current_volume - step, 0));
3486 UpdateVolumeUI();
3487}
3488
3489void GMainWindow::OnIncreaseVolume() {
3490 Settings::values.audio_muted = false;
3491 const auto current_volume = static_cast<s32>(Settings::values.volume.GetValue());
3492 int step = 5;
3493 if (current_volume < 30) {
3494 step = 2;
3495 }
3496 if (current_volume < 6) {
3497 step = 1;
3498 }
3499 Settings::values.volume.SetValue(current_volume + step);
3500 UpdateVolumeUI();
3501}
3502
3459void GMainWindow::OnToggleAdaptingFilter() { 3503void GMainWindow::OnToggleAdaptingFilter() {
3460 auto filter = Settings::values.scaling_filter.GetValue(); 3504 auto filter = Settings::values.scaling_filter.GetValue();
3461 if (filter == Settings::ScalingFilter::LastFilter) { 3505 if (filter == Settings::ScalingFilter::LastFilter) {
@@ -3914,6 +3958,18 @@ void GMainWindow::UpdateAAText() {
3914 } 3958 }
3915} 3959}
3916 3960
3961void GMainWindow::UpdateVolumeUI() {
3962 const auto volume_value = static_cast<int>(Settings::values.volume.GetValue());
3963 volume_slider->setValue(volume_value);
3964 if (Settings::values.audio_muted) {
3965 volume_button->setChecked(false);
3966 volume_button->setText(tr("VOLUME: MUTE"));
3967 } else {
3968 volume_button->setChecked(true);
3969 volume_button->setText(tr("VOLUME: %1%", "Volume percentage (e.g. 50%)").arg(volume_value));
3970 }
3971}
3972
3917void GMainWindow::UpdateStatusButtons() { 3973void GMainWindow::UpdateStatusButtons() {
3918 renderer_status_button->setChecked(Settings::values.renderer_backend.GetValue() == 3974 renderer_status_button->setChecked(Settings::values.renderer_backend.GetValue() ==
3919 Settings::RendererBackend::Vulkan); 3975 Settings::RendererBackend::Vulkan);
@@ -3922,6 +3978,7 @@ void GMainWindow::UpdateStatusButtons() {
3922 UpdateDockedButton(); 3978 UpdateDockedButton();
3923 UpdateFilterText(); 3979 UpdateFilterText();
3924 UpdateAAText(); 3980 UpdateAAText();
3981 UpdateVolumeUI();
3925} 3982}
3926 3983
3927void GMainWindow::UpdateUISettings() { 3984void GMainWindow::UpdateUISettings() {
diff --git a/src/yuzu/main.h b/src/yuzu/main.h
index 0f61abc7a..a23b373a5 100644
--- a/src/yuzu/main.h
+++ b/src/yuzu/main.h
@@ -37,6 +37,8 @@ class QLabel;
37class MultiplayerState; 37class MultiplayerState;
38class QPushButton; 38class QPushButton;
39class QProgressDialog; 39class QProgressDialog;
40class QSlider;
41class QHBoxLayout;
40class WaitTreeWidget; 42class WaitTreeWidget;
41enum class GameListOpenTarget; 43enum class GameListOpenTarget;
42enum class GameListRemoveTarget; 44enum class GameListRemoveTarget;
@@ -312,6 +314,9 @@ private slots:
312 void OnMenuRecentFile(); 314 void OnMenuRecentFile();
313 void OnConfigure(); 315 void OnConfigure();
314 void OnConfigureTas(); 316 void OnConfigureTas();
317 void OnDecreaseVolume();
318 void OnIncreaseVolume();
319 void OnMute();
315 void OnTasStartStop(); 320 void OnTasStartStop();
316 void OnTasRecord(); 321 void OnTasRecord();
317 void OnTasReset(); 322 void OnTasReset();
@@ -364,6 +369,7 @@ private:
364 void UpdateAPIText(); 369 void UpdateAPIText();
365 void UpdateFilterText(); 370 void UpdateFilterText();
366 void UpdateAAText(); 371 void UpdateAAText();
372 void UpdateVolumeUI();
367 void UpdateStatusBar(); 373 void UpdateStatusBar();
368 void UpdateGPUAccuracyButton(); 374 void UpdateGPUAccuracyButton();
369 void UpdateStatusButtons(); 375 void UpdateStatusButtons();
@@ -412,6 +418,9 @@ private:
412 QPushButton* dock_status_button = nullptr; 418 QPushButton* dock_status_button = nullptr;
413 QPushButton* filter_status_button = nullptr; 419 QPushButton* filter_status_button = nullptr;
414 QPushButton* aa_status_button = nullptr; 420 QPushButton* aa_status_button = nullptr;
421 QPushButton* volume_button = nullptr;
422 QWidget* volume_popup = nullptr;
423 QSlider* volume_slider = nullptr;
415 QTimer status_bar_update_timer; 424 QTimer status_bar_update_timer;
416 425
417 std::unique_ptr<Config> config; 426 std::unique_ptr<Config> config;