diff --git a/libs/ui/source/default_element_factory.cpp b/libs/ui/source/default_element_factory.cpp index 895ad890..cb62ec32 100644 --- a/libs/ui/source/default_element_factory.cpp +++ b/libs/ui/source/default_element_factory.cpp @@ -235,7 +235,7 @@ namespace psemek::ui on_close_ = std::move(callback); } - bool on_event(mouse_move const & e) + bool on_event(mouse_move const & e) override { mouse_ = e.position; @@ -244,22 +244,29 @@ namespace psemek::ui shape_.box += geom::cast(e.position - *drag_); drag_ = e.position; post_reshape(); - return true; } - return false; + + return shape().contains(geom::cast(*mouse_)); } - bool on_event(mouse_click const & e) + bool on_event(mouse_click const & e) override { - if (e.button == mouse_button::left) + if (!mouse_ || !shape().contains(geom::cast(*mouse_))) + return false; + + if (e.button == mouse_button::left && mouse_) { - if (mouse_ && e.down) + if (e.down) drag_ = *mouse_; else drag_ = std::nullopt; - return true; } - return false; + return true; + } + + bool on_event(mouse_wheel const &) override + { + return mouse_ && shape().contains(geom::cast(*mouse_)); } struct shape const & shape() const override