Add layer menu service boundary

This commit is contained in:
2026-06-03 12:56:25 +02:00
parent ea96f38875
commit defa9fc212
5 changed files with 204 additions and 17 deletions

View File

@@ -419,6 +419,39 @@ private:
App& app_;
};
class LegacyDocumentLayerMenuServices final : public pp::app::DocumentLayerMenuServices {
public:
explicit LegacyDocumentLayerMenuServices(App& app) noexcept
: app_(app)
{
}
void clear_current_layer() override
{
if (app_.canvas && app_.canvas->m_canvas)
app_.canvas->m_canvas->clear();
}
void show_rename_dialog() override
{
app_.dialog_layer_rename();
}
void merge_with_lower_layer(int from_index, int to_index) override
{
if (app_.layers)
app_.layers->merge(from_index, to_index, true);
}
void show_merge_animated_not_supported() override
{
app_.message_box("Not supported", "Merging animated layers is not supported yet.");
}
private:
App& app_;
};
void execute_main_toolbar_plan(App& app, const pp::app::MainToolbarPlan& plan)
{
LegacyMainToolbarServices services(app);
@@ -443,6 +476,14 @@ void execute_tools_menu_plan(App& app, const pp::app::ToolsMenuPlan& plan)
LOG("Tools menu action failed: %s", status.message);
}
void execute_document_layer_menu_plan(App& app, const pp::app::DocumentLayerMenuPlan& plan)
{
LegacyDocumentLayerMenuServices services(app);
const auto status = pp::app::execute_document_layer_menu_plan(plan, services);
if (!status.ok())
LOG("Layer menu action failed: %s", status.message);
}
} // namespace
void App::title_update()
@@ -1832,8 +1873,7 @@ void App::init_menu_layer()
popup->find<NodeButtonCustom>("layer-clear")->on_click = [this, popup](Node*) {
const auto plan = make_layer_menu_plan(pp::app::DocumentLayerMenuCommand::clear, *this);
if (plan.action == pp::app::DocumentLayerMenuAction::clear_current_layer)
canvas->m_canvas->clear();
execute_document_layer_menu_plan(*this, plan);
popup->mouse_release();
popup->destroy();
};
@@ -1846,8 +1886,7 @@ void App::init_menu_layer()
popup->find<NodeButtonCustom>("layer-rename")->on_click = [this, popup](Node*) {
const auto plan = make_layer_menu_plan(pp::app::DocumentLayerMenuCommand::rename, *this);
if (plan.action == pp::app::DocumentLayerMenuAction::show_rename_dialog)
dialog_layer_rename();
execute_document_layer_menu_plan(*this, plan);
popup->mouse_release();
popup->destroy();
};
@@ -1860,14 +1899,7 @@ void App::init_menu_layer()
popup->find<NodeButtonCustom>("layer-merge")->on_click = [this, popup](Node*) {
const auto plan = make_layer_menu_plan(pp::app::DocumentLayerMenuCommand::merge_down, *this);
if (plan.action == pp::app::DocumentLayerMenuAction::show_merge_animated_not_supported)
{
message_box("Not supported", "Merging animated layers is not supported yet.");
}
else if (plan.action == pp::app::DocumentLayerMenuAction::merge_with_lower_layer)
{
layers->merge(plan.from_index, plan.to_index, true);
}
execute_document_layer_menu_plan(*this, plan);
popup->mouse_release();
popup->destroy();
};