From 13862d8b47dfbbf2a90c53ca1e5034549d0c9742 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Tue, 30 Jul 2024 23:51:28 +0300 Subject: [PATCH] Fix handling state in ui::impl::button_base --- .../ui/include/psemek/ui/impl/button_base.hpp | 3 --- libs/ui/source/impl/button_base.cpp | 24 +++++++------------ 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/libs/ui/include/psemek/ui/impl/button_base.hpp b/libs/ui/include/psemek/ui/impl/button_base.hpp index 3151dfe2..a5bfd6fb 100644 --- a/libs/ui/include/psemek/ui/impl/button_base.hpp +++ b/libs/ui/include/psemek/ui/impl/button_base.hpp @@ -17,9 +17,6 @@ namespace psemek::ui::impl void update(button const & value); private: - bool is_mouseover_ = false; - bool is_mousedown_ = false; - react::source mouseover_; react::source mousedown_; }; diff --git a/libs/ui/source/impl/button_base.cpp b/libs/ui/source/impl/button_base.cpp index d66a87c3..b6391bac 100644 --- a/libs/ui/source/impl/button_base.cpp +++ b/libs/ui/source/impl/button_base.cpp @@ -11,28 +11,22 @@ namespace psemek::ui::impl { bool const mouseover = geom::contains(shape(), geom::cast(event.position)); - if (is_mouseover_ != mouseover) - { - is_mouseover_ = mouseover; - mouseover_.set(is_mouseover_); - } + if (*mouseover_ != mouseover) + mouseover_.set(mouseover); - return is_mouseover_; + return false; } bool button_base::on_event(mouse_button_event const & event) { - if (is_mouseover_) + bool const mousedown = event.button == app::mouse_button::left && event.down; + + if (*mouseover_ || !mousedown) { - bool const mousedown = event.button == app::mouse_button::left && event.down; + if (*mousedown_ != mousedown) + mousedown_.set(mousedown); - if (is_mousedown_ != mousedown) - { - is_mousedown_ = mousedown; - mousedown_.set(is_mousedown_); - } - - return true; + return *mouseover_ && mousedown; } return false;