#include "pch.h" #include "legacy_ui_overlay_services.h" #include "app.h" #include "node.h" #include "node_popup_menu.h" namespace pp::panopainter { void initialize_legacy_overlay_node(App& app, Node& node) { node.set_manager(&app.layout); node.init(); node.create(); node.loaded(); } pp::foundation::Status attach_legacy_overlay_node( App& app, const std::shared_ptr& node) noexcept { if (!node) { return pp::foundation::Status::invalid_argument("legacy overlay node is null"); } auto* root = app.layout[app.main_id]; if (!root) { return pp::foundation::Status::invalid_argument("legacy overlay root is missing"); } root->add_child(node); return pp::foundation::Status::success(); } pp::foundation::Result> add_legacy_popup_menu( App& app, const char* template_id, float x, float y, float rtl_anchor_width) noexcept { if (!template_id) { return pp::foundation::Result>::failure( pp::foundation::Status::invalid_argument("legacy popup template id is null")); } auto* template_root = app.layout[const_hash(template_id)]; if (!template_root || template_root->m_children.empty()) { return pp::foundation::Result>::failure( pp::foundation::Status::invalid_argument("legacy popup template is missing")); } auto popup = template_root->m_children[0]->clone(); if (!popup) { return pp::foundation::Result>::failure( pp::foundation::Status::invalid_argument("legacy popup clone failed")); } popup->update(); if (auto* root = app.layout[app.main_id]) { if (YGNodeStyleGetDirection(root->y_node) == YGDirectionRTL) { x = x - popup->m_size.x + rtl_anchor_width; } } popup->SetPositioning(YGPositionTypeAbsolute); popup->SetPosition(x, y); const auto status = attach_legacy_overlay_node(app, popup); if (!status.ok()) { return pp::foundation::Result>::failure(status); } return pp::foundation::Result>::success(popup); } } // namespace pp::panopainter