From bd34cdbbb39fd63e4048c6d2c9d64a1f4f846a34 Mon Sep 17 00:00:00 2001 From: thankyouverycool <66646555+thankyouverycool@users.noreply.github.com> Date: Sun, 7 Mar 2021 14:51:14 -0500 Subject: [PATCH] LibGUI: Ignore scroll length multiplier in SpinBoxes & Sliders Prevents discrete values from being skipped when using the mouse wheel on SpinBoxes and proportional Sliders. Wheel delta can be accelerated by holding Ctrl. --- Userland/Libraries/LibGUI/Slider.cpp | 9 ++++++--- Userland/Libraries/LibGUI/SpinBox.cpp | 5 ++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Userland/Libraries/LibGUI/Slider.cpp b/Userland/Libraries/LibGUI/Slider.cpp index 9aac47ee11..5689a36868 100644 --- a/Userland/Libraries/LibGUI/Slider.cpp +++ b/Userland/Libraries/LibGUI/Slider.cpp @@ -144,14 +144,17 @@ void Slider::mouseup_event(MouseEvent& event) void Slider::mousewheel_event(MouseEvent& event) { auto acceleration_modifier = step(); + auto wheel_delta = event.wheel_delta(); - if (event.modifiers() == KeyModifier::Mod_Ctrl && knob_size_mode() == KnobSizeMode::Fixed) + if (event.modifiers() == KeyModifier::Mod_Ctrl) acceleration_modifier *= 6; + if (knob_size_mode() == KnobSizeMode::Proportional) + wheel_delta /= abs(wheel_delta); if (orientation() == Orientation::Horizontal) - set_value(value() - event.wheel_delta() * acceleration_modifier); + set_value(value() - wheel_delta * acceleration_modifier); else - set_value(value() + event.wheel_delta() * acceleration_modifier); + set_value(value() + wheel_delta * acceleration_modifier); Widget::mousewheel_event(event); } diff --git a/Userland/Libraries/LibGUI/SpinBox.cpp b/Userland/Libraries/LibGUI/SpinBox.cpp index 35967afab5..f0c82b935e 100644 --- a/Userland/Libraries/LibGUI/SpinBox.cpp +++ b/Userland/Libraries/LibGUI/SpinBox.cpp @@ -105,7 +105,10 @@ void SpinBox::set_range(int min, int max) void SpinBox::mousewheel_event(MouseEvent& event) { - set_value(m_value - event.wheel_delta()); + auto wheel_delta = event.wheel_delta() / abs(event.wheel_delta()); + if (event.modifiers() == KeyModifier::Mod_Ctrl) + wheel_delta *= 6; + set_value(m_value - wheel_delta); } void SpinBox::resize_event(ResizeEvent& event)