#pragma once #include "foundation/result.h" #include "node.h" #include #include class App; class NodePopupMenu; namespace pp::panopainter { void initialize_legacy_overlay_node(App& app, Node& node); void destroy_legacy_node(Node& node); void detach_legacy_node_from_parent(Node& node); void close_legacy_dialog_node(Node& node); void release_legacy_mouse_capture(Node& node) noexcept; void configure_legacy_popup_overlay(Node& node) noexcept; void activate_legacy_popup_overlay(Node& node) noexcept; void close_legacy_popup_overlay(Node& node) noexcept; void close_legacy_dialog_and_hide_keyboard(App& app, Node& node); void close_legacy_popup_panel( Node& node, const std::function& on_close); [[nodiscard]] pp::foundation::Status attach_legacy_overlay_node( App& app, const std::shared_ptr& node) noexcept; [[nodiscard]] pp::foundation::Status attach_legacy_overlay_node_to_root( Node& anchor, const std::shared_ptr& node) noexcept; [[nodiscard]] pp::foundation::Result> add_legacy_popup_menu( App& app, const char* template_id, float x, float y, float rtl_anchor_width) noexcept; template std::shared_ptr make_legacy_overlay_node(App& app) { auto node = std::make_shared(); initialize_legacy_overlay_node(app, *node); return node; } template std::shared_ptr make_legacy_overlay_node_for_anchor(Node& anchor) { auto node = std::make_shared(); node->set_manager(anchor.m_manager); node->init(); node->create(); node->loaded(); return node; } template std::shared_ptr add_legacy_overlay_node(App& app) { auto node = make_legacy_overlay_node(app); (void)attach_legacy_overlay_node(app, node); return node; } template void bind_legacy_popup_close_destroys_overlay( PopupT& popup, const std::shared_ptr& overlay) noexcept { popup.on_popup_close = [overlay](Node*) { if (overlay) { destroy_legacy_node(*overlay); } }; } template void bind_legacy_click_destroys_node(ButtonT& button, Node& target) noexcept { button.on_click = [&target](Node*) { close_legacy_dialog_node(target); }; } inline std::function legacy_destroy_node_callback(Node& target) { return [&target](Node*) { close_legacy_dialog_node(target); }; } } // namespace pp::panopainter