diff --git a/Arona/src/widget/misc/slider.h b/Arona/src/widget/misc/slider.h index 3feb5b1..630eb33 100644 --- a/Arona/src/widget/misc/slider.h +++ b/Arona/src/widget/misc/slider.h @@ -25,10 +25,25 @@ public: value = (T)0.5; _internal_value = *value; _mode = in_mode; - value.subscribe([this](T in_value) { + + _value_changed = value.subscribe([this](T in_value) { _internal_value = in_value; request_redraw(); }); + _max_value_changed = max_value.subscribe([this](T in_value) { + if (_internal_value > in_value) { + _internal_value = in_value; + value = _internal_value; + } + request_redraw(); + }); + _min_value_changed = min_value.subscribe([this](T in_value) { + if (_internal_value < in_value) { + _internal_value = in_value; + value = _internal_value; + } + request_redraw(); + }); } hi::box_constraints update_constraints() noexcept override { @@ -111,7 +126,6 @@ public: } _internal_value = std::clamp(static_cast(_internal_value), *min_value, *max_value); value = _internal_value; - request_redraw(); return true; } break; @@ -123,7 +137,6 @@ public: _internal_value += event.mouse().wheel_delta.y() * 0.001f; _internal_value = std::clamp((T)_internal_value, *min_value, *max_value); value = _internal_value; - request_redraw(); return true; } break; @@ -171,4 +184,7 @@ private: float _down_value = 0; bool _tiny_controls = false; hi::box_constraints _constraints; + hi::callback _value_changed; + hi::callback _max_value_changed; + hi::callback _min_value_changed; };