Move retained popups to checked handles
This commit is contained in:
@@ -79,6 +79,27 @@ std::shared_ptr<NodePopupMenu> add_menu_popup(
|
||||
return popup.value();
|
||||
}
|
||||
|
||||
void close_legacy_overlay_handle_ignoring_status(
|
||||
Node& anchor,
|
||||
pp::ui::NodeHandle overlay) noexcept
|
||||
{
|
||||
(void)pp::panopainter::close_legacy_overlay_node(anchor, overlay);
|
||||
}
|
||||
|
||||
template <typename PopupOverlay, typename TickOverlay>
|
||||
void close_legacy_overlay_handles_if_open(
|
||||
Node& anchor,
|
||||
const PopupOverlay& popup_overlay,
|
||||
const TickOverlay& tick_overlay) noexcept
|
||||
{
|
||||
if (popup_overlay) {
|
||||
close_legacy_overlay_handle_ignoring_status(anchor, popup_overlay.value());
|
||||
}
|
||||
if (tick_overlay) {
|
||||
close_legacy_overlay_handle_ignoring_status(anchor, tick_overlay.value());
|
||||
}
|
||||
}
|
||||
|
||||
pp::app::DocumentLayerMenuPlan make_layer_menu_plan(
|
||||
pp::app::DocumentLayerMenuCommand command,
|
||||
App& app)
|
||||
@@ -463,7 +484,11 @@ void App::init_sidebar()
|
||||
if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-stroke"))
|
||||
{
|
||||
button->on_click = [this, button](Node*) {
|
||||
auto screen = layout[main_id]->m_size;
|
||||
auto* popup_root = layout[main_id];
|
||||
if (!popup_root) {
|
||||
return;
|
||||
}
|
||||
auto screen = popup_root->m_size;
|
||||
glm::vec2 pos = button->m_pos + glm::vec2(button->m_size.x * 0.5f, button->m_size.y);
|
||||
if (stroke->m_parent)
|
||||
{
|
||||
@@ -473,24 +498,35 @@ void App::init_sidebar()
|
||||
pp::panopainter::close_legacy_dialog_node(*fp);
|
||||
}
|
||||
}
|
||||
(void)pp::panopainter::attach_legacy_overlay_node(*this, stroke);
|
||||
const auto popup_overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*popup_root, stroke);
|
||||
if (!popup_overlay) {
|
||||
return;
|
||||
}
|
||||
stroke->SetSize(350, glm::max(100.f, screen.y - pos.y - 50.f));
|
||||
stroke->find("title")->SetVisibility(true);
|
||||
auto tick = pp::panopainter::make_legacy_overlay_node_for_anchor<NodeImage>(*layout[main_id]);
|
||||
auto tick = pp::panopainter::make_legacy_overlay_node_for_anchor<NodeImage>(*popup_root);
|
||||
tick->SetPositioning(YGPositionTypeAbsolute);
|
||||
tick->SetSize(32, 16);
|
||||
tick->SetPosition(pos.x - 16, pos.y);
|
||||
tick->set_image("data/ui/popup-tick-up.png");
|
||||
(void)pp::panopainter::attach_legacy_overlay_node(*this, tick);
|
||||
layout[main_id]->update();
|
||||
auto tick_overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*popup_root, tick);
|
||||
if (!popup_overlay || !tick_overlay)
|
||||
{
|
||||
close_legacy_overlay_handles_if_open(*popup_root, popup_overlay, tick_overlay);
|
||||
return;
|
||||
}
|
||||
const auto popup_handle = popup_overlay.value();
|
||||
const auto tick_handle = tick_overlay.value();
|
||||
popup_root->update();
|
||||
|
||||
stroke->SetPosition(pos.x - stroke->m_size.x / 2.f, pos.y + 16);
|
||||
stroke->SetPositioning(YGPositionTypeAbsolute);
|
||||
pp::panopainter::activate_legacy_popup_overlay(*stroke);
|
||||
auto scroll = stroke->find<NodeScroll>("scroller");
|
||||
//scroll->SetHeight(glm::max(100.f, screen.y - pos.y - 200.f));
|
||||
stroke->m_popup_overlay_handle = popup_handle;
|
||||
stroke->m_tick_overlay_handle = tick_handle;
|
||||
|
||||
pp::panopainter::bind_legacy_popup_close_destroys_overlay(*stroke, tick);
|
||||
};
|
||||
}
|
||||
//if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-brush"))
|
||||
@@ -512,9 +548,17 @@ void App::init_sidebar()
|
||||
if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-color"))
|
||||
{
|
||||
button->on_click = [this, button](Node*) {
|
||||
auto screen = layout[main_id]->m_size;
|
||||
auto* popup_root = layout[main_id];
|
||||
if (!popup_root) {
|
||||
return;
|
||||
}
|
||||
glm::vec2 pos = button->m_pos + glm::vec2(button->m_size.x * 0.5f, button->m_size.y);
|
||||
(void)pp::panopainter::attach_legacy_overlay_node(*this, color);
|
||||
const auto popup_overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*popup_root, color);
|
||||
if (!popup_overlay)
|
||||
{
|
||||
LOG("Color popup overlay failed: %s", popup_overlay.status().message);
|
||||
return;
|
||||
}
|
||||
color->find("title")->SetVisibility(true);
|
||||
color->SetSize(350, 350);
|
||||
auto tick = pp::panopainter::make_legacy_overlay_node_for_anchor<NodeImage>(*layout[main_id]);
|
||||
@@ -522,20 +566,33 @@ void App::init_sidebar()
|
||||
tick->SetSize(32, 16);
|
||||
tick->SetPosition(pos.x - 16, pos.y);
|
||||
tick->set_image("data/ui/popup-tick-up.png");
|
||||
(void)pp::panopainter::attach_legacy_overlay_node(*this, tick);
|
||||
layout[main_id]->update();
|
||||
auto tick_overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*popup_root, tick);
|
||||
if (!popup_overlay || !tick_overlay)
|
||||
{
|
||||
close_legacy_overlay_handles_if_open(*popup_root, popup_overlay, tick_overlay);
|
||||
return;
|
||||
}
|
||||
const auto popup_handle = popup_overlay.value();
|
||||
const auto tick_handle = tick_overlay.value();
|
||||
popup_root->update();
|
||||
|
||||
color->SetPosition(pos.x - color->m_size.x / 2.f, pos.y + 16);
|
||||
color->SetPositioning(YGPositionTypeAbsolute);
|
||||
pp::panopainter::activate_legacy_popup_overlay(*color);
|
||||
|
||||
pp::panopainter::bind_legacy_popup_close_destroys_overlay(*color, tick);
|
||||
color->on_popup_close = [popup_root, popup_handle, tick_handle](Node*) {
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, tick_handle);
|
||||
};
|
||||
};
|
||||
}
|
||||
if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-layer"))
|
||||
{
|
||||
button->on_click = [this, button](Node*) {
|
||||
auto screen = layout[main_id]->m_size;
|
||||
auto* popup_root = layout[main_id];
|
||||
if (!popup_root) {
|
||||
return;
|
||||
}
|
||||
auto screen = popup_root->m_size;
|
||||
glm::vec2 pos = button->m_pos + glm::vec2(button->m_size.x * 0.5f, button->m_size.y);
|
||||
layers->find("title")->SetVisibility(true);
|
||||
layers->SetSize(350, YGUndefined);
|
||||
@@ -547,28 +604,45 @@ void App::init_sidebar()
|
||||
pp::panopainter::close_legacy_dialog_node(*fp);
|
||||
}
|
||||
}
|
||||
(void)pp::panopainter::attach_legacy_overlay_node(*this, layers);
|
||||
auto tick = pp::panopainter::make_legacy_overlay_node_for_anchor<NodeImage>(*layout[main_id]);
|
||||
const auto popup_overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*popup_root, layers);
|
||||
if (!popup_overlay) {
|
||||
return;
|
||||
}
|
||||
auto tick = pp::panopainter::make_legacy_overlay_node_for_anchor<NodeImage>(*popup_root);
|
||||
tick->SetPositioning(YGPositionTypeAbsolute);
|
||||
tick->SetSize(32, 16);
|
||||
tick->SetPosition(pos.x - 16, pos.y);
|
||||
tick->set_image("data/ui/popup-tick-up.png");
|
||||
(void)pp::panopainter::attach_legacy_overlay_node(*this, tick);
|
||||
layout[main_id]->update();
|
||||
auto tick_overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*popup_root, tick);
|
||||
if (!popup_overlay || !tick_overlay)
|
||||
{
|
||||
close_legacy_overlay_handles_if_open(*popup_root, popup_overlay, tick_overlay);
|
||||
return;
|
||||
}
|
||||
const auto popup_handle = popup_overlay.value();
|
||||
const auto tick_handle = tick_overlay.value();
|
||||
popup_root->update();
|
||||
|
||||
layers->SetPosition(pos.x - layers->m_size.x / 2.f, pos.y + 16);
|
||||
layers->SetPositioning(YGPositionTypeAbsolute);
|
||||
pp::panopainter::activate_legacy_popup_overlay(*layers);
|
||||
auto scroll = layers->find<NodeScroll>("layers-container");
|
||||
scroll->SetMaxHeight(glm::max(100.f, screen.y - pos.y - 200.f));
|
||||
layers->on_popup_close = [popup_root, popup_handle, tick_handle](Node*) {
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, tick_handle);
|
||||
};
|
||||
|
||||
pp::panopainter::bind_legacy_popup_close_destroys_overlay(*layers, tick);
|
||||
};
|
||||
}
|
||||
if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-grids-panel"))
|
||||
{
|
||||
button->on_click = [this, button](Node*) {
|
||||
auto screen = layout[main_id]->m_size;
|
||||
auto* popup_root = layout[main_id];
|
||||
if (!popup_root) {
|
||||
return;
|
||||
}
|
||||
auto screen = popup_root->m_size;
|
||||
glm::vec2 pos = button->m_pos + glm::vec2(button->m_size.x * 0.5f, button->m_size.y);
|
||||
grid->find("title")->SetVisibility(true);
|
||||
grid->SetSize(350, YGUndefined);
|
||||
@@ -580,14 +654,26 @@ void App::init_sidebar()
|
||||
pp::panopainter::close_legacy_dialog_node(*fp);
|
||||
}
|
||||
}
|
||||
(void)pp::panopainter::attach_legacy_overlay_node(*this, grid);
|
||||
auto tick = pp::panopainter::make_legacy_overlay_node_for_anchor<NodeImage>(*layout[main_id]);
|
||||
const auto popup_overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*popup_root, grid);
|
||||
if (!popup_overlay)
|
||||
{
|
||||
LOG("Grid popup overlay failed: %s", popup_overlay.status().message);
|
||||
return;
|
||||
}
|
||||
auto tick = pp::panopainter::make_legacy_overlay_node_for_anchor<NodeImage>(*popup_root);
|
||||
tick->SetPositioning(YGPositionTypeAbsolute);
|
||||
tick->SetSize(32, 16);
|
||||
tick->SetPosition(pos.x - 16, pos.y);
|
||||
tick->set_image("data/ui/popup-tick-up.png");
|
||||
(void)pp::panopainter::attach_legacy_overlay_node(*this, tick);
|
||||
layout[main_id]->update();
|
||||
auto tick_overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*popup_root, tick);
|
||||
if (!popup_overlay || !tick_overlay)
|
||||
{
|
||||
close_legacy_overlay_handles_if_open(*popup_root, popup_overlay, tick_overlay);
|
||||
return;
|
||||
}
|
||||
const auto popup_handle = popup_overlay.value();
|
||||
const auto tick_handle = tick_overlay.value();
|
||||
popup_root->update();
|
||||
|
||||
grid->SetPosition(pos.x - grid->m_size.x / 2.f, pos.y + 16);
|
||||
grid->SetPositioning(YGPositionTypeAbsolute);
|
||||
@@ -595,7 +681,10 @@ void App::init_sidebar()
|
||||
auto scroll = grid->find<NodeScroll>("scroller");
|
||||
scroll->SetMaxHeight(glm::max(100.f, screen.y - pos.y - 250.f));
|
||||
|
||||
pp::panopainter::bind_legacy_popup_close_destroys_overlay(*grid, tick);
|
||||
grid->on_popup_close = [popup_root, popup_handle, tick_handle](Node*) {
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, tick_handle);
|
||||
};
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -661,113 +750,133 @@ void App::init_menu_file()
|
||||
{
|
||||
if (auto* menu_file = layout[main_id]->find<NodeButtonCustom>("menu-file"))
|
||||
{
|
||||
menu_file->on_click = [=](Node*) {
|
||||
menu_file->on_click = [this, menu_file](Node*) {
|
||||
auto* popup_root = layout[main_id];
|
||||
if (!popup_root) {
|
||||
return;
|
||||
}
|
||||
const auto open_checked_menu_popup = [this, popup_root](const char* id, glm::vec2 pos, float width)
|
||||
-> std::pair<std::shared_ptr<NodePopupMenu>, pp::ui::NodeHandle>
|
||||
{
|
||||
auto popup = add_menu_popup(*this, id, pos, width);
|
||||
if (!popup) {
|
||||
return {};
|
||||
}
|
||||
pp::panopainter::detach_legacy_node_from_parent(*popup);
|
||||
auto popup_overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*popup_root, popup);
|
||||
if (!popup_overlay) {
|
||||
pp::panopainter::destroy_legacy_node(*popup);
|
||||
return {};
|
||||
}
|
||||
return { popup, popup_overlay.value() };
|
||||
};
|
||||
|
||||
glm::vec2 pos = menu_file->m_pos + glm::vec2(0, menu_file->m_size.y);
|
||||
auto popup = add_menu_popup(*this, "file-menu", pos, menu_file->m_size.x);
|
||||
const auto [popup, popup_handle] = open_checked_menu_popup("file-menu", pos, menu_file->m_size.x);
|
||||
if (!popup)
|
||||
return;
|
||||
|
||||
if (auto b = popup->find<NodeButtonCustom>("file-newdoc"))
|
||||
b->on_click = [this, popup](Node*) {
|
||||
b->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
apply_file_menu_plan(*this, pp::app::FileMenuCommand::new_document);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
};
|
||||
if (auto b = popup->find<NodeButtonCustom>("file-import"))
|
||||
b->on_click = [this, popup](Node*) {
|
||||
b->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
apply_file_menu_plan(*this, pp::app::FileMenuCommand::import_image);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
};
|
||||
if (auto b = popup->find<NodeButtonCustom>("file-open"))
|
||||
b->on_click = [this, popup](Node*) {
|
||||
b->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
apply_file_menu_plan(*this, pp::app::FileMenuCommand::open_project);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
};
|
||||
if (auto b = popup->find<NodeButtonCustom>("file-browse"))
|
||||
b->on_click = [this, popup](Node*) {
|
||||
b->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
apply_file_menu_plan(*this, pp::app::FileMenuCommand::browse_cloud);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
};
|
||||
if (auto b = popup->find<NodeButtonCustom>("file-save"))
|
||||
b->on_click = [this, popup](Node*) {
|
||||
b->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
apply_file_menu_plan(*this, pp::app::FileMenuCommand::save);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
};
|
||||
if (auto b = popup->find<NodeButtonCustom>("file-save-as"))
|
||||
b->on_click = [this, popup](Node*) {
|
||||
b->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
apply_file_menu_plan(*this, pp::app::FileMenuCommand::save_as);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
};
|
||||
if (auto b = popup->find<NodeButtonCustom>("file-save-ver"))
|
||||
b->on_click = [this, popup](Node*) {
|
||||
b->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
apply_file_menu_plan(*this, pp::app::FileMenuCommand::save_version);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
};
|
||||
if (auto b = popup->find<NodeButtonCustom>("file-export"))
|
||||
b->on_click = [this, popup](Node*) {
|
||||
b->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
apply_file_menu_plan(*this, pp::app::FileMenuCommand::export_jpeg);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
};
|
||||
if (auto b = popup->find<NodeButtonCustom>("file-export-tick"))
|
||||
b->on_click = [this, b, popup](Node*) {
|
||||
b->on_click = [this, b, popup_root, popup_handle, open_checked_menu_popup](Node*) {
|
||||
glm::vec2 pos = b->m_pos + glm::vec2(b->m_size.x, 0);
|
||||
auto subpopup = add_menu_popup(*this, "file-submenu-export", pos, b->m_size.x);
|
||||
const auto [subpopup, subpopup_handle] = open_checked_menu_popup("file-submenu-export", pos, b->m_size.x);
|
||||
if (!subpopup)
|
||||
return;
|
||||
subpopup->find<NodeButtonCustom>("file-submenu-export-png")->on_click = [this, subpopup, popup](Node*) {
|
||||
subpopup->find<NodeButtonCustom>("file-submenu-export-png")->on_click = [this, popup_root, popup_handle, subpopup_handle](Node*) {
|
||||
apply_document_export_menu_plan(*this, pp::app::DocumentExportMenuKind::png);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
pp::panopainter::close_legacy_popup_overlay(*subpopup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, subpopup_handle);
|
||||
};
|
||||
subpopup->find<NodeButtonCustom>("file-submenu-export-layers")->on_click = [this, subpopup, popup](Node*) {
|
||||
subpopup->find<NodeButtonCustom>("file-submenu-export-layers")->on_click = [this, popup_root, popup_handle, subpopup_handle](Node*) {
|
||||
apply_document_export_menu_plan(*this, pp::app::DocumentExportMenuKind::layers);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
pp::panopainter::close_legacy_popup_overlay(*subpopup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, subpopup_handle);
|
||||
};
|
||||
subpopup->find<NodeButtonCustom>("file-submenu-export-cube")->on_click = [this, subpopup, popup](Node*) {
|
||||
subpopup->find<NodeButtonCustom>("file-submenu-export-cube")->on_click = [this, popup_root, popup_handle, subpopup_handle](Node*) {
|
||||
apply_document_export_menu_plan(*this, pp::app::DocumentExportMenuKind::cube_faces);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
pp::panopainter::close_legacy_popup_overlay(*subpopup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, subpopup_handle);
|
||||
};
|
||||
subpopup->find<NodeButtonCustom>("file-submenu-export-depth")->on_click = [this, subpopup, popup](Node*) {
|
||||
subpopup->find<NodeButtonCustom>("file-submenu-export-depth")->on_click = [this, popup_root, popup_handle, subpopup_handle](Node*) {
|
||||
apply_document_export_menu_plan(*this, pp::app::DocumentExportMenuKind::depth);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
pp::panopainter::close_legacy_popup_overlay(*subpopup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, subpopup_handle);
|
||||
};
|
||||
subpopup->find<NodeButtonCustom>("file-submenu-export-anim")->on_click = [this, subpopup, popup](Node*) {
|
||||
subpopup->find<NodeButtonCustom>("file-submenu-export-anim")->on_click = [this, popup_root, popup_handle, subpopup_handle](Node*) {
|
||||
apply_document_export_menu_plan(*this, pp::app::DocumentExportMenuKind::animation_frames);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
pp::panopainter::close_legacy_popup_overlay(*subpopup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, subpopup_handle);
|
||||
};
|
||||
subpopup->find<NodeButtonCustom>("file-submenu-export-anim-mp4")->on_click = [this, subpopup, popup](Node*) {
|
||||
subpopup->find<NodeButtonCustom>("file-submenu-export-anim-mp4")->on_click = [this, popup_root, popup_handle, subpopup_handle](Node*) {
|
||||
apply_document_export_menu_plan(*this, pp::app::DocumentExportMenuKind::animation_mp4);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
pp::panopainter::close_legacy_popup_overlay(*subpopup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, subpopup_handle);
|
||||
};
|
||||
subpopup->find<NodeButtonCustom>("file-submenu-export-timelapse")->on_click = [this, subpopup, popup](Node*) {
|
||||
subpopup->find<NodeButtonCustom>("file-submenu-export-timelapse")->on_click = [this, popup_root, popup_handle, subpopup_handle](Node*) {
|
||||
apply_document_export_menu_plan(*this, pp::app::DocumentExportMenuKind::timelapse);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
pp::panopainter::close_legacy_popup_overlay(*subpopup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, subpopup_handle);
|
||||
};
|
||||
};
|
||||
if (auto b = popup->find<NodeButtonCustom>("file-share"))
|
||||
b->on_click = [this, popup](Node*) {
|
||||
b->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
apply_file_menu_plan(*this, pp::app::FileMenuCommand::share);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
};
|
||||
if (auto b = popup->find<NodeButtonCustom>("file-resize"))
|
||||
b->on_click = [this, popup](Node*) {
|
||||
b->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
apply_file_menu_plan(*this, pp::app::FileMenuCommand::resize);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
};
|
||||
if (auto b = popup->find<NodeButtonCustom>("file-cloud-upload"))
|
||||
b->on_click = [this, popup](Node*) {
|
||||
b->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
apply_file_menu_plan(*this, pp::app::FileMenuCommand::cloud_upload);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
};
|
||||
if (auto b = popup->find<NodeButtonCustom>("file-cloud-browse"))
|
||||
b->on_click = [this, popup](Node*) {
|
||||
b->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
apply_file_menu_plan(*this, pp::app::FileMenuCommand::cloud_browse);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -798,16 +907,39 @@ void App::init_menu_tools()
|
||||
if (!popup_exp)
|
||||
return;
|
||||
|
||||
if (auto tick = popup_exp->find<NodeButtonCustom>("tools-panels")) tick->on_click = [this, popup_exp](Node* b)
|
||||
if (auto tick = popup_exp->find<NodeButtonCustom>("tools-panels")) tick->on_click = [this, popup_exp, main](Node* b)
|
||||
{
|
||||
const auto menu_plan = pp::app::plan_tools_menu_command(pp::app::ToolsMenuCommand::panels);
|
||||
if (menu_plan.action != pp::app::ToolsMenuAction::show_panels_submenu)
|
||||
return;
|
||||
|
||||
pp::panopainter::detach_legacy_node_from_parent(*popup_exp);
|
||||
const auto popup_exp_overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*main, popup_exp);
|
||||
if (!popup_exp_overlay)
|
||||
return;
|
||||
const auto popup_exp_handle = popup_exp_overlay.value();
|
||||
|
||||
glm::vec2 pos = b->m_pos + glm::vec2(b->m_size.x, 0);
|
||||
auto popup_time = add_menu_popup(*this, "panels-menu", pos, b->m_size.x);
|
||||
if (!popup_time)
|
||||
{
|
||||
close_legacy_overlay_handle_ignoring_status(*main, popup_exp_handle);
|
||||
return;
|
||||
}
|
||||
pp::panopainter::detach_legacy_node_from_parent(*popup_time);
|
||||
const auto popup_time_overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*main, popup_time);
|
||||
if (!popup_time_overlay)
|
||||
{
|
||||
close_legacy_overlay_handle_ignoring_status(*main, popup_exp_handle);
|
||||
return;
|
||||
}
|
||||
const auto popup_time_handle = popup_time_overlay.value();
|
||||
|
||||
const auto close_panel_popups = [main, popup_exp_handle, popup_time_handle]()
|
||||
{
|
||||
close_legacy_overlay_handle_ignoring_status(*main, popup_exp_handle);
|
||||
close_legacy_overlay_handle_ignoring_status(*main, popup_time_handle);
|
||||
};
|
||||
|
||||
auto visible = [this](Node* panel) {
|
||||
if (!panel)
|
||||
@@ -823,7 +955,7 @@ void App::init_menu_tools()
|
||||
return false;
|
||||
};
|
||||
|
||||
popup_time->find<NodeButtonCustom>("panel-presets")->on_click = [this, popup_time, popup_exp, visible](Node*) {
|
||||
popup_time->find<NodeButtonCustom>("panel-presets")->on_click = [this, close_panel_popups, visible](Node*) {
|
||||
const auto plan = pp::app::plan_tools_panel(
|
||||
pp::app::ToolsPanel::presets,
|
||||
visible(floating_presets.get()));
|
||||
@@ -846,11 +978,10 @@ void App::init_menu_tools()
|
||||
{
|
||||
fpanel->m_container->add_child(floating_presets);
|
||||
}
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup_exp);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup_time);
|
||||
close_panel_popups();
|
||||
};
|
||||
|
||||
popup_time->find<NodeButtonCustom>("panel-color")->on_click = [this, popup_time, popup_exp, visible](Node*) {
|
||||
popup_time->find<NodeButtonCustom>("panel-color")->on_click = [this, close_panel_popups, visible](Node*) {
|
||||
const auto plan = pp::app::plan_tools_panel(
|
||||
pp::app::ToolsPanel::color,
|
||||
visible(floating_color.get()));
|
||||
@@ -874,10 +1005,9 @@ void App::init_menu_tools()
|
||||
{
|
||||
fpanel->m_container->add_child(floating_color);
|
||||
}
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup_exp);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup_time);
|
||||
close_panel_popups();
|
||||
};
|
||||
popup_time->find<NodeButtonCustom>("panel-color-adv")->on_click = [this, popup_time, popup_exp, visible](Node*) {
|
||||
popup_time->find<NodeButtonCustom>("panel-color-adv")->on_click = [this, close_panel_popups, visible](Node*) {
|
||||
const auto plan = pp::app::plan_tools_panel(
|
||||
pp::app::ToolsPanel::color_advanced,
|
||||
visible(floating_picker.get()));
|
||||
@@ -901,10 +1031,9 @@ void App::init_menu_tools()
|
||||
{
|
||||
fpanel->m_container->add_child(floating_picker);
|
||||
}
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup_exp);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup_time);
|
||||
close_panel_popups();
|
||||
};
|
||||
popup_time->find<NodeButtonCustom>("panel-layers")->on_click = [this, popup_time, popup_exp, visible](Node*) {
|
||||
popup_time->find<NodeButtonCustom>("panel-layers")->on_click = [this, close_panel_popups, visible](Node*) {
|
||||
const auto plan = pp::app::plan_tools_panel(
|
||||
pp::app::ToolsPanel::layers,
|
||||
visible(layers.get()));
|
||||
@@ -922,10 +1051,9 @@ void App::init_menu_tools()
|
||||
if (plan.hides_embedded_title)
|
||||
layers->find("title")->SetVisibility(false);
|
||||
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup_exp);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup_time);
|
||||
close_panel_popups();
|
||||
};
|
||||
popup_time->find<NodeButtonCustom>("panel-brush")->on_click = [this, popup_time, popup_exp, visible](Node*) {
|
||||
popup_time->find<NodeButtonCustom>("panel-brush")->on_click = [this, close_panel_popups, visible](Node*) {
|
||||
const auto plan = pp::app::plan_tools_panel(
|
||||
pp::app::ToolsPanel::brush,
|
||||
visible(stroke.get()));
|
||||
@@ -942,10 +1070,9 @@ void App::init_menu_tools()
|
||||
if (plan.hides_embedded_title)
|
||||
stroke->find("title")->SetVisibility(false);
|
||||
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup_exp);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup_time);
|
||||
close_panel_popups();
|
||||
};
|
||||
popup_time->find<NodeButtonCustom>("panel-grids")->on_click = [this, popup_time, popup_exp, visible](Node*) {
|
||||
popup_time->find<NodeButtonCustom>("panel-grids")->on_click = [this, close_panel_popups, visible](Node*) {
|
||||
const auto plan = pp::app::plan_tools_panel(
|
||||
pp::app::ToolsPanel::grids,
|
||||
visible(grid.get()));
|
||||
@@ -962,10 +1089,9 @@ void App::init_menu_tools()
|
||||
if (plan.hides_embedded_title)
|
||||
grid->find("title")->SetVisibility(false);
|
||||
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup_exp);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup_time);
|
||||
close_panel_popups();
|
||||
};
|
||||
popup_time->find<NodeButtonCustom>("panel-animation")->on_click = [this, popup_time, popup_exp, visible](Node*) {
|
||||
popup_time->find<NodeButtonCustom>("panel-animation")->on_click = [this, close_panel_popups, visible](Node*) {
|
||||
const auto plan = pp::app::plan_tools_panel(
|
||||
pp::app::ToolsPanel::animation,
|
||||
visible(animation.get()));
|
||||
@@ -980,8 +1106,7 @@ void App::init_menu_tools()
|
||||
animation->SetWidthP(100);
|
||||
animation->SetHeightP(100);
|
||||
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup_exp);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup_time);
|
||||
close_panel_popups();
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1143,29 +1268,41 @@ void App::init_menu_tools()
|
||||
};
|
||||
|
||||
popup_exp->find<NodeButtonCustom>("clear-grids")->on_click = [this, popup_exp](Node*) {
|
||||
auto popup_exp_overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*popup_exp->root(), popup_exp);
|
||||
if (!popup_exp_overlay)
|
||||
return;
|
||||
const auto popup_exp_handle = popup_exp_overlay.value();
|
||||
const auto plan = pp::app::plan_tools_menu_command(pp::app::ToolsMenuCommand::clear_grids);
|
||||
execute_tools_menu_plan(*this, plan);
|
||||
if (plan.closes_root_popup)
|
||||
{
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup_exp);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_exp->root(), popup_exp_handle);
|
||||
}
|
||||
};
|
||||
|
||||
popup_exp->find<NodeButtonCustom>("camera-reset")->on_click = [this, popup_exp](Node*) {
|
||||
auto popup_exp_overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*popup_exp->root(), popup_exp);
|
||||
if (!popup_exp_overlay)
|
||||
return;
|
||||
const auto popup_exp_handle = popup_exp_overlay.value();
|
||||
const auto plan = pp::app::plan_tools_menu_command(pp::app::ToolsMenuCommand::reset_camera);
|
||||
execute_tools_menu_plan(*this, plan);
|
||||
if (plan.closes_root_popup)
|
||||
{
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup_exp);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_exp->root(), popup_exp_handle);
|
||||
}
|
||||
};
|
||||
|
||||
popup_exp->find<NodeButtonCustom>("shortcuts")->on_click = [this, popup_exp](Node*) {
|
||||
auto popup_exp_overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*popup_exp->root(), popup_exp);
|
||||
if (!popup_exp_overlay)
|
||||
return;
|
||||
const auto popup_exp_handle = popup_exp_overlay.value();
|
||||
const auto plan = pp::app::plan_tools_menu_command(pp::app::ToolsMenuCommand::shortcuts);
|
||||
execute_tools_menu_plan(*this, plan);
|
||||
if (plan.closes_root_popup)
|
||||
{
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup_exp);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_exp->root(), popup_exp_handle);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1179,13 +1316,17 @@ void App::init_menu_tools()
|
||||
if (platform_supports_sonarpen())
|
||||
{
|
||||
popup_exp->find<NodeButtonCustom>("sonarpen")->on_click = [this, popup_exp](Node*) {
|
||||
auto popup_exp_overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*popup_exp->root(), popup_exp);
|
||||
if (!popup_exp_overlay)
|
||||
return;
|
||||
const auto popup_exp_handle = popup_exp_overlay.value();
|
||||
const auto plan = pp::app::plan_tools_menu_command(
|
||||
pp::app::ToolsMenuCommand::sonarpen,
|
||||
platform_supports_sonarpen());
|
||||
execute_tools_menu_plan(*this, plan);
|
||||
if (plan.closes_root_popup)
|
||||
{
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup_exp);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_exp->root(), popup_exp_handle);
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -1198,12 +1339,23 @@ void App::init_menu_about()
|
||||
if (auto* menu_file = layout[main_id]->find<NodeButtonCustom>("menu-about"))
|
||||
{
|
||||
menu_file->on_click = [=](Node*) {
|
||||
auto* popup_root = layout[main_id];
|
||||
if (!popup_root) {
|
||||
return;
|
||||
}
|
||||
glm::vec2 pos = menu_file->m_pos + glm::vec2(0, menu_file->m_size.y);
|
||||
auto popup = add_menu_popup(*this, "about-menu", pos, menu_file->m_size.x);
|
||||
if (!popup)
|
||||
return;
|
||||
pp::panopainter::detach_legacy_node_from_parent(*popup);
|
||||
auto popup_overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*popup_root, popup);
|
||||
if (!popup_overlay) {
|
||||
pp::panopainter::destroy_legacy_node(*popup);
|
||||
return;
|
||||
}
|
||||
auto popup_handle = popup_overlay.value();
|
||||
|
||||
popup->find<NodeButtonCustom>("about-app")->on_click = [this, popup](Node*) {
|
||||
popup->find<NodeButtonCustom>("about-app")->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
const auto plan = pp::app::plan_about_menu_command(
|
||||
pp::app::AboutMenuCommand::about_app,
|
||||
g_version_major,
|
||||
@@ -1212,11 +1364,11 @@ void App::init_menu_about()
|
||||
execute_about_menu_plan(*this, plan);
|
||||
if (plan.closes_root_popup)
|
||||
{
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
}
|
||||
};
|
||||
|
||||
popup->find<NodeButtonCustom>("about-doc")->on_click = [this, popup](Node*) {
|
||||
popup->find<NodeButtonCustom>("about-doc")->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
// auto path = Asset::absolute("data/doc/test.pdf");
|
||||
// display_file(path);
|
||||
const auto plan = pp::app::plan_about_menu_command(
|
||||
@@ -1227,7 +1379,7 @@ void App::init_menu_about()
|
||||
execute_about_menu_plan(*this, plan);
|
||||
if (plan.closes_root_popup)
|
||||
{
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1242,7 +1394,7 @@ void App::init_menu_about()
|
||||
g_version_fix);
|
||||
text->set_text(plan.label.c_str());
|
||||
}
|
||||
item->on_click = [this, popup](Node*) {
|
||||
item->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
const auto plan = pp::app::plan_about_menu_command(
|
||||
pp::app::AboutMenuCommand::whats_new,
|
||||
g_version_major,
|
||||
@@ -1251,14 +1403,14 @@ void App::init_menu_about()
|
||||
execute_about_menu_plan(*this, plan);
|
||||
if (plan.closes_root_popup)
|
||||
{
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
if (auto b = popup->find<NodeButtonCustom>("about-crash"))
|
||||
{
|
||||
b->on_click = [this, popup](Node*) {
|
||||
b->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
const auto plan = pp::app::plan_about_menu_command(
|
||||
pp::app::AboutMenuCommand::induce_crash,
|
||||
g_version_major,
|
||||
@@ -1267,14 +1419,14 @@ void App::init_menu_about()
|
||||
execute_about_menu_plan(*this, plan);
|
||||
if (plan.closes_root_popup)
|
||||
{
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
if (auto b = popup->find<NodeButtonCustom>("about-perf"))
|
||||
{
|
||||
b->on_click = [this, popup](Node*) {
|
||||
b->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
const auto plan = pp::app::plan_about_menu_command(
|
||||
pp::app::AboutMenuCommand::performance_test,
|
||||
g_version_major,
|
||||
@@ -1285,7 +1437,7 @@ void App::init_menu_about()
|
||||
execute_about_menu_plan(*this, plan);
|
||||
if (plan.closes_root_popup)
|
||||
{
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -1356,15 +1508,26 @@ void App::init_menu_layer()
|
||||
if (auto* menu_file = layout[main_id]->find<NodeButtonCustom>("menu-layers"))
|
||||
{
|
||||
menu_file->on_click = [=](Node*) {
|
||||
auto* popup_root = layout[main_id];
|
||||
if (!popup_root) {
|
||||
return;
|
||||
}
|
||||
glm::vec2 pos = menu_file->m_pos + glm::vec2(0, menu_file->m_size.y);
|
||||
auto popup = add_menu_popup(*this, "layers-menu", pos, menu_file->m_size.x);
|
||||
if (!popup)
|
||||
return;
|
||||
pp::panopainter::detach_legacy_node_from_parent(*popup);
|
||||
auto popup_overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*popup_root, popup);
|
||||
if (!popup_overlay) {
|
||||
pp::panopainter::destroy_legacy_node(*popup);
|
||||
return;
|
||||
}
|
||||
auto popup_handle = popup_overlay.value();
|
||||
|
||||
popup->find<NodeButtonCustom>("layer-clear")->on_click = [this, popup](Node*) {
|
||||
popup->find<NodeButtonCustom>("layer-clear")->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
const auto plan = make_layer_menu_plan(pp::app::DocumentLayerMenuCommand::clear, *this);
|
||||
execute_document_layer_menu_plan(*this, plan);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
};
|
||||
{
|
||||
const auto plan = make_layer_menu_plan(pp::app::DocumentLayerMenuCommand::clear, *this);
|
||||
@@ -1373,10 +1536,10 @@ void App::init_menu_layer()
|
||||
set_text(plan.label.c_str());
|
||||
}
|
||||
|
||||
popup->find<NodeButtonCustom>("layer-rename")->on_click = [this, popup](Node*) {
|
||||
popup->find<NodeButtonCustom>("layer-rename")->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
const auto plan = make_layer_menu_plan(pp::app::DocumentLayerMenuCommand::rename, *this);
|
||||
execute_document_layer_menu_plan(*this, plan);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
};
|
||||
{
|
||||
const auto plan = make_layer_menu_plan(pp::app::DocumentLayerMenuCommand::rename, *this);
|
||||
@@ -1385,10 +1548,10 @@ void App::init_menu_layer()
|
||||
set_text(plan.label.c_str());
|
||||
}
|
||||
|
||||
popup->find<NodeButtonCustom>("layer-merge")->on_click = [this, popup](Node*) {
|
||||
popup->find<NodeButtonCustom>("layer-merge")->on_click = [this, popup_root, popup_handle](Node*) {
|
||||
const auto plan = make_layer_menu_plan(pp::app::DocumentLayerMenuCommand::merge_down, *this);
|
||||
execute_document_layer_menu_plan(*this, plan);
|
||||
pp::panopainter::close_legacy_popup_overlay(*popup);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
};
|
||||
{
|
||||
const auto plan = make_layer_menu_plan(pp::app::DocumentLayerMenuCommand::merge_down, *this);
|
||||
|
||||
Reference in New Issue
Block a user