diff --git a/libs/ui/include/psemek/ui/slider.hpp b/libs/ui/include/psemek/ui/slider.hpp index c5e0d7c0..0eb28bcf 100644 --- a/libs/ui/include/psemek/ui/slider.hpp +++ b/libs/ui/include/psemek/ui/slider.hpp @@ -43,7 +43,7 @@ namespace psemek::ui int value_ = 0; state_t state_ = state_t::normal; - std::optional mouse_x_; + std::optional> mouse_; on_value_changed_callback callback_; diff --git a/libs/ui/source/slider.cpp b/libs/ui/source/slider.cpp index 8fab1b55..1fd868d9 100644 --- a/libs/ui/source/slider.cpp +++ b/libs/ui/source/slider.cpp @@ -6,7 +6,7 @@ namespace psemek::ui bool slider::on_event(mouse_move const & e) { bool const over = shape().contains(geom::cast(e.position)); - mouse_x_ = e.position[0]; + mouse_ = e.position; switch (state_) { case state_t::normal: @@ -24,8 +24,8 @@ namespace psemek::ui } break; case state_t::mousedown: - if (mouse_x_) - set_value(compute_value(*mouse_x_)); + if (mouse_) + set_value(compute_value((*mouse_)[0])); break; } @@ -43,8 +43,8 @@ namespace psemek::ui if (e.down) { state_ = state_t::mousedown; - if (mouse_x_) - set_value(compute_value(*mouse_x_)); + if (mouse_) + set_value(compute_value((*mouse_)[0])); on_state_changed(state_t::mouseover); return true; } @@ -52,7 +52,10 @@ namespace psemek::ui case state_t::mousedown: if (!e.down) { - state_ = state_t::mouseover; + if (mouse_ && shape().contains(geom::cast(*mouse_))) + state_ = state_t::mouseover; + else + state_ = state_t::normal; on_state_changed(state_t::mousedown); return true; }