Extract menu, stylus, and canvas draw helpers
This commit is contained in:
@@ -33,6 +33,8 @@
|
||||
|
||||
namespace pp::panopainter {
|
||||
void bind_legacy_file_menu(App& app);
|
||||
void bind_legacy_about_menu(App& app);
|
||||
void bind_legacy_layer_menu(App& app);
|
||||
void bind_legacy_tools_menu(App& app);
|
||||
}
|
||||
|
||||
@@ -93,39 +95,6 @@ void close_legacy_overlay_handles_if_open(
|
||||
}
|
||||
}
|
||||
|
||||
pp::app::DocumentLayerMenuPlan make_layer_menu_plan(
|
||||
pp::app::DocumentLayerMenuCommand command,
|
||||
App& app)
|
||||
{
|
||||
const bool has_current_layer = app.layers && app.layers->m_current_layer;
|
||||
const int current_index = app.canvas && app.canvas->m_canvas
|
||||
? app.canvas->m_canvas->m_current_layer_idx
|
||||
: 0;
|
||||
const int animation_duration = Canvas::I
|
||||
? Canvas::I->anim_duration()
|
||||
: 0;
|
||||
const std::string current_name = has_current_layer
|
||||
? app.layers->m_current_layer->m_label_text
|
||||
: std::string {};
|
||||
std::string lower_name;
|
||||
if (app.canvas && app.canvas->m_canvas && current_index > 0
|
||||
&& current_index - 1 < static_cast<int>(app.canvas->m_canvas->m_layers.size()))
|
||||
{
|
||||
lower_name = app.canvas->m_canvas->m_layers[current_index - 1]->m_name;
|
||||
}
|
||||
|
||||
const auto plan = pp::app::plan_document_layer_menu(
|
||||
command,
|
||||
has_current_layer,
|
||||
current_index,
|
||||
animation_duration,
|
||||
current_name,
|
||||
lower_name);
|
||||
if (plan)
|
||||
return plan.value();
|
||||
return {};
|
||||
}
|
||||
|
||||
[[nodiscard]] bool should_open_tools_panel(const pp::app::ToolsPanelPlan& plan) noexcept
|
||||
{
|
||||
return plan.action == pp::app::ToolsPanelAction::open_floating_panel;
|
||||
@@ -154,23 +123,11 @@ void execute_main_toolbar_plan(App& app, const pp::app::MainToolbarPlan& plan)
|
||||
pp::panopainter::execute_legacy_main_toolbar_plan(app, plan);
|
||||
}
|
||||
|
||||
void execute_about_menu_plan(App& app, const pp::app::AboutMenuPlan& plan)
|
||||
{
|
||||
pp::panopainter::execute_legacy_about_menu_plan(app, plan);
|
||||
}
|
||||
|
||||
void execute_tools_menu_plan(App& app, const pp::app::ToolsMenuPlan& plan)
|
||||
{
|
||||
pp::panopainter::execute_legacy_tools_menu_plan(app, plan);
|
||||
}
|
||||
|
||||
void execute_document_layer_menu_plan(App& app, const pp::app::DocumentLayerMenuPlan& plan)
|
||||
{
|
||||
const auto status = pp::panopainter::execute_legacy_document_layer_menu_plan(app, plan);
|
||||
if (!status.ok())
|
||||
LOG("Layer menu action failed: %s", status.message);
|
||||
}
|
||||
|
||||
void execute_document_layer_merge_plan(App& app, const pp::app::DocumentLayerMergePlan& plan)
|
||||
{
|
||||
const auto status = pp::panopainter::execute_legacy_document_layer_merge_plan(app, plan);
|
||||
@@ -764,113 +721,7 @@ void App::init_menu_tools()
|
||||
|
||||
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_root, popup_handle](Node*) {
|
||||
const auto plan = pp::app::plan_about_menu_command(
|
||||
pp::app::AboutMenuCommand::about_app,
|
||||
g_version_major,
|
||||
g_version_minor,
|
||||
g_version_fix);
|
||||
execute_about_menu_plan(*this, plan);
|
||||
if (plan.closes_root_popup)
|
||||
{
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
}
|
||||
};
|
||||
|
||||
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(
|
||||
pp::app::AboutMenuCommand::help_guide,
|
||||
g_version_major,
|
||||
g_version_minor,
|
||||
g_version_fix);
|
||||
execute_about_menu_plan(*this, plan);
|
||||
if (plan.closes_root_popup)
|
||||
{
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
}
|
||||
};
|
||||
|
||||
if (auto item = popup->find<NodeButtonCustom>("about-news"))
|
||||
{
|
||||
if (auto text = item->find<NodeText>("menu-label"))
|
||||
{
|
||||
const auto plan = pp::app::plan_about_menu_command(
|
||||
pp::app::AboutMenuCommand::whats_new,
|
||||
g_version_major,
|
||||
g_version_minor,
|
||||
g_version_fix);
|
||||
text->set_text(plan.label.c_str());
|
||||
}
|
||||
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,
|
||||
g_version_minor,
|
||||
g_version_fix);
|
||||
execute_about_menu_plan(*this, plan);
|
||||
if (plan.closes_root_popup)
|
||||
{
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
if (auto b = popup->find<NodeButtonCustom>("about-crash"))
|
||||
{
|
||||
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,
|
||||
g_version_minor,
|
||||
g_version_fix);
|
||||
execute_about_menu_plan(*this, plan);
|
||||
if (plan.closes_root_popup)
|
||||
{
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
if (auto b = popup->find<NodeButtonCustom>("about-perf"))
|
||||
{
|
||||
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,
|
||||
g_version_minor,
|
||||
g_version_fix,
|
||||
true,
|
||||
Canvas::I != nullptr);
|
||||
execute_about_menu_plan(*this, plan);
|
||||
if (plan.closes_root_popup)
|
||||
{
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
pp::panopainter::bind_legacy_about_menu(*this);
|
||||
}
|
||||
|
||||
void App::brush_update(bool update_color, bool update_brush)
|
||||
@@ -933,63 +784,7 @@ void App::brush_update(bool update_color, bool update_brush)
|
||||
|
||||
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_root, popup_handle](Node*) {
|
||||
const auto plan = make_layer_menu_plan(pp::app::DocumentLayerMenuCommand::clear, *this);
|
||||
execute_document_layer_menu_plan(*this, plan);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
};
|
||||
{
|
||||
const auto plan = make_layer_menu_plan(pp::app::DocumentLayerMenuCommand::clear, *this);
|
||||
popup->find<NodeButtonCustom>("layer-clear")->
|
||||
find<NodeText>("menu-label")->
|
||||
set_text(plan.label.c_str());
|
||||
}
|
||||
|
||||
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);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
};
|
||||
{
|
||||
const auto plan = make_layer_menu_plan(pp::app::DocumentLayerMenuCommand::rename, *this);
|
||||
popup->find<NodeButtonCustom>("layer-rename")->
|
||||
find<NodeText>("menu-label")->
|
||||
set_text(plan.label.c_str());
|
||||
}
|
||||
|
||||
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);
|
||||
close_legacy_overlay_handle_ignoring_status(*popup_root, popup_handle);
|
||||
};
|
||||
{
|
||||
const auto plan = make_layer_menu_plan(pp::app::DocumentLayerMenuCommand::merge_down, *this);
|
||||
popup->find<NodeButtonCustom>("layer-merge")->
|
||||
find<NodeText>("menu-label")->
|
||||
set_text(plan.label.c_str());
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
pp::panopainter::bind_legacy_layer_menu(*this);
|
||||
}
|
||||
|
||||
void App::initLayout()
|
||||
|
||||
Reference in New Issue
Block a user