Browse Source

LibGUI: Add DoClamp option to AbstractSlider::set_value()

Itamar 3 years ago
parent
commit
1d522e4b4c

+ 2 - 2
Userland/Applications/SoundPlayer/Common.h

@@ -13,11 +13,11 @@ class AutoSlider final : public GUI::Slider {
 public:
     ~AutoSlider() override = default;
     Function<void(int)> on_knob_released;
-    virtual void set_value(int value, GUI::AllowCallback allow_callback = GUI::AllowCallback::Yes) override
+    virtual void set_value(int value, GUI::AllowCallback allow_callback = GUI::AllowCallback::Yes, DoClamp do_clamp = DoClamp::Yes) override
     {
         m_in_drag_value = value;
         if (!knob_dragging() && !mouse_is_down())
-            GUI::Slider::set_value(value, allow_callback);
+            GUI::Slider::set_value(value, allow_callback, do_clamp);
     }
 
     bool mouse_is_down() const { return m_mouse_is_down; }

+ 3 - 2
Userland/Libraries/LibGUI/AbstractSlider.cpp

@@ -50,9 +50,10 @@ void AbstractSlider::set_range(int min, int max)
     update();
 }
 
-void AbstractSlider::set_value(int value, AllowCallback allow_callback)
+void AbstractSlider::set_value(int value, AllowCallback allow_callback, DoClamp do_clamp)
 {
-    value = clamp(value, m_min, m_max);
+    if (do_clamp == DoClamp::Yes)
+        value = clamp(value, m_min, m_max);
     if (m_value == value)
         return;
     m_value = value;

+ 6 - 1
Userland/Libraries/LibGUI/AbstractSlider.h

@@ -30,7 +30,12 @@ public:
     bool is_max() const { return m_value == m_max; }
 
     void set_range(int min, int max);
-    virtual void set_value(int, AllowCallback = AllowCallback::Yes);
+
+    enum class DoClamp {
+        Yes = 1,
+        No = 0
+    };
+    virtual void set_value(int, AllowCallback = AllowCallback::Yes, DoClamp = DoClamp::Yes);
 
     void set_min(int min) { set_range(min, max()); }
     void set_max(int max) { set_range(min(), max); }

+ 2 - 2
Userland/Libraries/LibGUI/Scrollbar.cpp

@@ -119,13 +119,13 @@ void Scrollbar::set_scroll_animation(Animation scroll_animation)
     m_scroll_animation = scroll_animation;
 }
 
-void Scrollbar::set_value(int value, AllowCallback allow_callback)
+void Scrollbar::set_value(int value, AllowCallback allow_callback, DoClamp do_clamp)
 {
     m_target_value = value;
     if (!(m_animated_scrolling_timer.is_null()))
         m_animated_scrolling_timer->stop();
 
-    AbstractSlider::set_value(value, allow_callback);
+    AbstractSlider::set_value(value, allow_callback, do_clamp);
 }
 
 void Scrollbar::set_target_value(int new_target_value)

+ 1 - 1
Userland/Libraries/LibGUI/Scrollbar.h

@@ -30,7 +30,7 @@ public:
 
     void set_scroll_animation(Animation scroll_animation);
 
-    virtual void set_value(int, AllowCallback = AllowCallback::Yes) override;
+    virtual void set_value(int, AllowCallback = AllowCallback::Yes, DoClamp = DoClamp::Yes) override;
     void set_target_value(int);
 
     virtual void increase_slider_by(int delta) override { set_target_value(m_target_value + delta); }

+ 2 - 2
Userland/Libraries/LibGUI/ValueSlider.cpp

@@ -142,9 +142,9 @@ int ValueSlider::value_at(const Gfx::IntPoint& position) const
     return (int)(relative_offset * (float)max());
 }
 
-void ValueSlider::set_value(int value, AllowCallback allow_callback)
+void ValueSlider::set_value(int value, AllowCallback allow_callback, DoClamp do_clamp)
 {
-    AbstractSlider::set_value(value, allow_callback);
+    AbstractSlider::set_value(value, allow_callback, do_clamp);
     m_textbox->set_text(formatted_value());
 }
 

+ 1 - 1
Userland/Libraries/LibGUI/ValueSlider.h

@@ -25,7 +25,7 @@ public:
     void set_suffix(String suffix) { m_suffix = move(suffix); }
     void set_knob_style(KnobStyle knobstyle) { m_knob_style = knobstyle; }
 
-    virtual void set_value(int value, AllowCallback = AllowCallback::Yes) override;
+    virtual void set_value(int value, AllowCallback = AllowCallback::Yes, DoClamp = DoClamp::Yes) override;
 
 protected:
     virtual void paint_event(PaintEvent&) override;