diff --git a/libs/ui/include/psemek/ui/label.hpp b/libs/ui/include/psemek/ui/label.hpp index d49b7a75..7dccb510 100644 --- a/libs/ui/include/psemek/ui/label.hpp +++ b/libs/ui/include/psemek/ui/label.hpp @@ -67,8 +67,10 @@ namespace psemek::ui virtual void set_tag_mapper(tagged_text::mapper mapper); - using link_callback = std::function; + using link_mouseover_callback = std::function const &)>; + using link_callback = std::function; + virtual void on_link_mouseover(link_mouseover_callback callback); virtual void on_link_click(link_callback callback); struct shape const & shape() const override { return shape_; } @@ -103,6 +105,7 @@ namespace psemek::ui struct image_provider * image_provider_ = nullptr; tagged_text::mapper tag_mapper_ = nullptr; + link_mouseover_callback link_mouseover_callback_; link_callback link_callback_; box_shape shape_; diff --git a/libs/ui/source/label.cpp b/libs/ui/source/label.cpp index 8d58d359..3c2b8e52 100644 --- a/libs/ui/source/label.cpp +++ b/libs/ui/source/label.cpp @@ -193,6 +193,11 @@ namespace psemek::ui tag_mapper_ = std::move(mapper); } + void label::on_link_mouseover(link_mouseover_callback callback) + { + link_mouseover_callback_ = std::move(callback); + } + void label::on_link_click(link_callback callback) { link_callback_ = std::move(callback); @@ -232,6 +237,11 @@ namespace psemek::ui else sdl2::set_cursor(sdl2::cursor_type::arrow); + if (link_mouseover_callback_) + post([cb = link_mouseover_callback_, value = new_selected_link]{ + cb(value); + }); + selected_link_ = new_selected_link; mouse_down_ = false; on_state_changed();