From 72cbec959d4f2e0b457c38a08bf66f012100ac9a Mon Sep 17 00:00:00 2001 From: lisyarus Date: Thu, 22 Dec 2022 16:06:02 +0300 Subject: [PATCH] Support ui::button::on_release callback --- libs/ui/include/psemek/ui/button.hpp | 15 +++++++++++---- libs/ui/source/button.cpp | 11 +++++++++-- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/libs/ui/include/psemek/ui/button.hpp b/libs/ui/include/psemek/ui/button.hpp index 3dfca9dc..846fa5a2 100644 --- a/libs/ui/include/psemek/ui/button.hpp +++ b/libs/ui/include/psemek/ui/button.hpp @@ -24,11 +24,16 @@ namespace psemek::ui void set_enabled(bool value) override; void set_hidden(bool value) override; - using on_click_callback = std::function; + using callback = std::function; - void on_click(on_click_callback callback) + void on_click(callback callback) { - callback_ = std::move(callback); + on_click_callback_ = std::move(callback); + } + + void on_release(callback callback) + { + on_release_callback_ = std::move(callback); } virtual void set_repeat(float wait, float period); @@ -46,11 +51,13 @@ namespace psemek::ui virtual void on_state_changed(state_t old); virtual void post_on_click(); + virtual void post_on_release(); private: state_t state_ = state_t::normal; - on_click_callback callback_; + callback on_click_callback_; + callback on_release_callback_; struct repeat { diff --git a/libs/ui/source/button.cpp b/libs/ui/source/button.cpp index fc58788b..505bab14 100644 --- a/libs/ui/source/button.cpp +++ b/libs/ui/source/button.cpp @@ -59,6 +59,7 @@ namespace psemek::ui if (!e.down) { state_ = state_t::mouseover; + post_on_release(); on_state_changed(state_t::mousedown); return true; } @@ -145,8 +146,14 @@ namespace psemek::ui void button::post_on_click() { - if (callback_) - post(callback_); + if (on_click_callback_) + post(on_click_callback_); + } + + void button::post_on_release() + { + if (on_release_callback_) + post(on_release_callback_); } }