From 223ce10e0f18c6292a8b839dbbaa46e4e4bd473f Mon Sep 17 00:00:00 2001 From: lisyarus Date: Tue, 1 Mar 2022 14:18:38 +0300 Subject: [PATCH] Make ui::event_interceptor only intercept mouse events when mouseover --- libs/ui/include/psemek/ui/event_interceptor.hpp | 2 ++ libs/ui/source/event_interceptor.cpp | 11 ++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/libs/ui/include/psemek/ui/event_interceptor.hpp b/libs/ui/include/psemek/ui/event_interceptor.hpp index a39dce5b..00972803 100644 --- a/libs/ui/include/psemek/ui/event_interceptor.hpp +++ b/libs/ui/include/psemek/ui/event_interceptor.hpp @@ -35,6 +35,8 @@ namespace psemek::ui std::shared_ptr child_; element * children_[1]{nullptr}; + bool mouseover_ = false; + std::function mouse_move_callback_; std::function mouse_click_callback_; std::function mouse_wheel_callback_; diff --git a/libs/ui/source/event_interceptor.cpp b/libs/ui/source/event_interceptor.cpp index fa6d41f8..1f36b2e9 100644 --- a/libs/ui/source/event_interceptor.cpp +++ b/libs/ui/source/event_interceptor.cpp @@ -59,21 +59,26 @@ namespace psemek::ui bool event_interceptor::on_event(mouse_move const & event) { - if (mouse_move_callback_) + if (child_) + mouseover_ = child_->shape().contains(geom::cast(event.position)); + else + mouseover_ = false; + + if (mouseover_ && mouse_move_callback_) return mouse_move_callback_(event); return false; } bool event_interceptor::on_event(mouse_click const & event) { - if (mouse_click_callback_) + if (mouseover_ && mouse_click_callback_) return mouse_click_callback_(event); return false; } bool event_interceptor::on_event(mouse_wheel const & event) { - if (mouse_wheel_callback_) + if (mouseover_ && mouse_wheel_callback_) return mouse_wheel_callback_(event); return false; }