Procházet zdrojové kódy

LibGUI: Add mouse wheel event and step property to Slider

Tibor Nagy před 5 roky
rodič
revize
c7f549ba19
2 změnil soubory, kde provedl 17 přidání a 0 odebrání
  1. 13 0
      Libraries/LibGUI/Slider.cpp
  2. 4 0
      Libraries/LibGUI/Slider.h

+ 13 - 0
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())

+ 4 - 0
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 };