Support mouseover callback in ui::selector

This commit is contained in:
Nikita Lisitsa 2022-05-03 15:43:37 +03:00
parent b5145b9596
commit 8354ee1753
2 changed files with 10 additions and 0 deletions

View file

@ -39,6 +39,7 @@ namespace psemek::ui
virtual std::optional<std::size_t> selected() const { return selected_; }
virtual void on_selected(callback_type callback);
virtual void on_mouseover(std::function<void(std::optional<std::size_t>)> callback);
virtual callback_type on_selected() const;
@ -68,6 +69,7 @@ namespace psemek::ui
std::optional<std::size_t> selected_;
callback_type callback_;
std::function<void(std::optional<std::size_t>)> mouseover_callback_;
};
bool spawn(element * root, std::shared_ptr<selector> selector, geom::point<float, 2> const & position);

View file

@ -112,6 +112,9 @@ namespace psemek::ui
if (new_selected && new_selected != selected_)
on_submenu(*new_selected);
if (new_selected != selected_ && mouseover_callback_)
post([cb = mouseover_callback_, i = new_selected]{ cb(i); });
selected_ = new_selected;
return false;
@ -187,6 +190,11 @@ namespace psemek::ui
callback_ = std::move(callback);
}
void selector::on_mouseover(std::function<void(std::optional<std::size_t>)> callback)
{
mouseover_callback_ = std::move(callback);
}
selector::callback_type selector::on_selected() const
{
return callback_;