Support ui::button::on_release callback

This commit is contained in:
Nikita Lisitsa 2022-12-22 16:06:02 +03:00
parent d692256580
commit 72cbec959d
2 changed files with 20 additions and 6 deletions

View file

@ -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<void()>;
using callback = std::function<void()>;
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
{

View file

@ -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_);
}
}