Jelajahi Sumber

GScrollBar: Allow scrolling the scrollbar by mouse-wheeling over it

Andreas Kling 6 tahun lalu
induk
melakukan
dc3c6be6f2
2 mengubah file dengan 11 tambahan dan 0 penghapusan
  1. 8 0
      Libraries/LibGUI/GScrollBar.cpp
  2. 3 0
      Libraries/LibGUI/GScrollBar.h

+ 8 - 0
Libraries/LibGUI/GScrollBar.cpp

@@ -281,6 +281,14 @@ void GScrollBar::mouseup_event(GMouseEvent& event)
     update();
 }
 
+void GScrollBar::mousewheel_event(GMouseEvent& event)
+{
+    if (!is_scrollable())
+        return;
+    set_value(value() + event.wheel_delta());
+    GWidget::mousewheel_event(event);
+}
+
 void GScrollBar::set_automatic_scrolling_active(bool active)
 {
     if (active) {

+ 3 - 0
Libraries/LibGUI/GScrollBar.h

@@ -12,6 +12,8 @@ public:
 
     Orientation orientation() const { return m_orientation; }
 
+    bool is_scrollable() const { return max() != min(); }
+
     int value() const { return m_value; }
     int min() const { return m_min; }
     int max() const { return m_max; }
@@ -41,6 +43,7 @@ private:
     virtual void mousedown_event(GMouseEvent&) override;
     virtual void mouseup_event(GMouseEvent&) override;
     virtual void mousemove_event(GMouseEvent&) override;
+    virtual void mousewheel_event(GMouseEvent&) override;
     virtual void leave_event(CEvent&) override;
     virtual void change_event(GEvent&) override;