diff options
| author | 2023-02-06 17:10:44 -0800 | |
|---|---|---|
| committer | 2023-02-06 17:10:44 -0800 | |
| commit | ecbf74b87a2c4216002ae37026d2301bc39c93a9 (patch) | |
| tree | 5661522767c87ff7f0e3f5f42ca37142f253df88 /src | |
| parent | Merge pull request #9735 from merryhime/dynarmic-6.4.5 (diff) | |
| parent | remove disambiguation argument from mute text (diff) | |
| download | yuzu-ecbf74b87a2c4216002ae37026d2301bc39c93a9.tar.gz yuzu-ecbf74b87a2c4216002ae37026d2301bc39c93a9.tar.xz yuzu-ecbf74b87a2c4216002ae37026d2301bc39c93a9.zip | |
Merge pull request #9644 from SaiKai/volume_quicksetting
add volume quicksetting with volume slider
Diffstat (limited to 'src')
| -rw-r--r-- | src/yuzu/main.cpp | 105 | ||||
| -rw-r--r-- | src/yuzu/main.h | 9 |
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 | ||
| 3470 | void GMainWindow::OnMute() { | ||
| 3471 | Settings::values.audio_muted = !Settings::values.audio_muted; | ||
| 3472 | UpdateVolumeUI(); | ||
| 3473 | } | ||
| 3474 | |||
| 3475 | void 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 | |||
| 3489 | void 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 | |||
| 3459 | void GMainWindow::OnToggleAdaptingFilter() { | 3503 | void 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 | ||
| 3961 | void 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 | |||
| 3917 | void GMainWindow::UpdateStatusButtons() { | 3973 | void 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 | ||
| 3927 | void GMainWindow::UpdateUISettings() { | 3984 | void 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; | |||
| 37 | class MultiplayerState; | 37 | class MultiplayerState; |
| 38 | class QPushButton; | 38 | class QPushButton; |
| 39 | class QProgressDialog; | 39 | class QProgressDialog; |
| 40 | class QSlider; | ||
| 41 | class QHBoxLayout; | ||
| 40 | class WaitTreeWidget; | 42 | class WaitTreeWidget; |
| 41 | enum class GameListOpenTarget; | 43 | enum class GameListOpenTarget; |
| 42 | enum class GameListRemoveTarget; | 44 | enum 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; |