From 90d5917ef431ef4e04a5a94e7584c2b1bc030ecb Mon Sep 17 00:00:00 2001 From: lisyarus Date: Wed, 21 Jul 2021 22:04:59 +0300 Subject: [PATCH] Fix default window event handling: events are considered processed if mouse is over window --- libs/ui/source/default_element_factory.cpp | 23 ++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) 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