diff --git a/Libraries/LibGUI/Slider.cpp b/Libraries/LibGUI/Slider.cpp index bb4eb142e7..540806846f 100644 --- a/Libraries/LibGUI/Slider.cpp +++ b/Libraries/LibGUI/Slider.cpp @@ -167,6 +167,19 @@ void Slider::mouseup_event(MouseEvent& event) return Widget::mouseup_event(event); } +void Slider::mousewheel_event(MouseEvent& event) +{ + if (!is_enabled()) + return; + + if (orientation() == Orientation::Horizontal) + set_value(value() - event.wheel_delta() * m_step); + else + set_value(value() + event.wheel_delta() * m_step); + + Widget::mousewheel_event(event); +} + void Slider::leave_event(Core::Event& event) { if (!is_enabled()) diff --git a/Libraries/LibGUI/Slider.h b/Libraries/LibGUI/Slider.h index 3bd8611497..5b26cc6161 100644 --- a/Libraries/LibGUI/Slider.h +++ b/Libraries/LibGUI/Slider.h @@ -45,12 +45,14 @@ public: int value() const { return m_value; } int min() const { return m_min; } int max() const { return m_max; } + int step() const { return m_step; } void set_range(int min, int max); void set_value(int); void set_min(int min) { set_range(min, max()); } void set_max(int max) { set_range(min(), max); } + void set_step(int step) { m_step = step; } void set_knob_size_mode(KnobSizeMode mode) { m_knob_size_mode = mode; } KnobSizeMode knob_size_mode() const { return m_knob_size_mode; } @@ -79,6 +81,7 @@ protected: virtual void mousedown_event(MouseEvent&) override; virtual void mousemove_event(MouseEvent&) override; virtual void mouseup_event(MouseEvent&) override; + virtual void mousewheel_event(MouseEvent&) override; virtual void leave_event(Core::Event&) override; virtual void change_event(Event&) override; @@ -88,6 +91,7 @@ private: int m_value { 0 }; int m_min { 0 }; int m_max { 100 }; + int m_step { 1 }; bool m_knob_hovered { false }; bool m_dragging { false }; int m_drag_origin_value { 0 };