diff options
author | FrozenAra <macjordan02@googlemail.com> | 2023-10-29 02:46:25 +0200 |
---|---|---|
committer | FrozenAra <macjordan02@googlemail.com> | 2023-10-29 20:29:17 +0100 |
commit | 0bb1c7c804a5dd8825acfe80f05b639c5752baf6 (patch) | |
tree | 2625bc15c111207c23f6c9350768b2c8676f607c /src/yuzu/main.cpp | |
parent | 43be2bfe332d5537041262eb08037993239eaf5f (diff) |
Implemented wheel event for volume control in VolumeButton
Diffstat (limited to 'src/yuzu/main.cpp')
-rw-r--r-- | src/yuzu/main.cpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 1431cf2fe..5e687891f 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -1072,7 +1072,7 @@ void GMainWindow::InitializeWidgets() { }); volume_popup->layout()->addWidget(volume_slider); - volume_button = new QPushButton(); + volume_button = new VolumeButton(); volume_button->setObjectName(QStringLiteral("TogglableStatusBarButton")); volume_button->setFocusPolicy(Qt::NoFocus); volume_button->setCheckable(true); @@ -1103,6 +1103,8 @@ void GMainWindow::InitializeWidgets() { context_menu.exec(volume_button->mapToGlobal(menu_location)); volume_button->repaint(); }); + connect(volume_button, &VolumeButton::VolumeChanged, this, &GMainWindow::UpdateVolumeUI); + statusBar()->insertPermanentWidget(0, volume_button); // setup AA button @@ -5126,6 +5128,32 @@ void GMainWindow::changeEvent(QEvent* event) { QWidget::changeEvent(event); } +void VolumeButton::wheelEvent(QWheelEvent* event) { + + int num_degrees = event->angleDelta().y() / 8; + int num_steps = (num_degrees / 15) * scroll_multiplier; + // Stated in QT docs: Most mouse types work in steps of 15 degrees, in which case the delta + // value is a multiple of 120; i.e., 120 units * 1/8 = 15 degrees. + + if (num_steps > 0) { + Settings::values.volume.SetValue( + std::min(200, Settings::values.volume.GetValue() + num_steps)); + } else { + Settings::values.volume.SetValue( + std::max(0, Settings::values.volume.GetValue() + num_steps)); + } + + scroll_multiplier = std::min(MaxMultiplier, scroll_multiplier * 2); + scroll_timer.start(100); // reset the multiplier if no scroll event occurs within 100 ms + + emit VolumeChanged(); + event->accept(); +} + +void VolumeButton::ResetMultiplier() { + scroll_multiplier = 1; +} + #ifdef main #undef main #endif |