diff --git a/libs/ui/include/psemek/ui/selector.hpp b/libs/ui/include/psemek/ui/selector.hpp index 9f283f80..41497d9e 100644 --- a/libs/ui/include/psemek/ui/selector.hpp +++ b/libs/ui/include/psemek/ui/selector.hpp @@ -39,6 +39,7 @@ namespace psemek::ui virtual std::optional selected() const { return selected_; } virtual void on_selected(callback_type callback); + virtual void on_mouseover(std::function)> callback); virtual callback_type on_selected() const; @@ -68,6 +69,7 @@ namespace psemek::ui std::optional selected_; callback_type callback_; + std::function)> mouseover_callback_; }; bool spawn(element * root, std::shared_ptr selector, geom::point const & position); diff --git a/libs/ui/source/selector.cpp b/libs/ui/source/selector.cpp index 92e08451..facd5da2 100644 --- a/libs/ui/source/selector.cpp +++ b/libs/ui/source/selector.cpp @@ -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)> callback) + { + mouseover_callback_ = std::move(callback); + } + selector::callback_type selector::on_selected() const { return callback_;