Route layer merge through app core

This commit is contained in:
2026-06-03 20:20:07 +02:00
parent b184b3e075
commit 16a1d1e15b
7 changed files with 287 additions and 5 deletions

View File

@@ -167,6 +167,8 @@ void execute_document_canvas_clear_plan(App& app, const pp::app::DocumentCanvasC
LOG("Canvas clear failed: %s", status.message);
}
void execute_document_layer_merge_plan(App& app, const pp::app::DocumentLayerMergePlan& plan);
bool apply_document_export_menu_plan(App& app, pp::app::DocumentExportMenuKind kind)
{
class LegacyDocumentExportMenuServices final : public pp::app::DocumentExportMenuServices {
@@ -605,8 +607,21 @@ public:
void merge_with_lower_layer(int from_index, int to_index) override
{
if (app_.layers)
app_.layers->merge(from_index, to_index, true);
const int layer_count = app_.canvas && app_.canvas->m_canvas
? static_cast<int>(app_.canvas->m_canvas->m_layers.size())
: 0;
const int animation_duration = Canvas::I
? Canvas::I->anim_duration()
: 0;
const auto plan = pp::app::plan_document_layer_merge(
layer_count,
from_index,
to_index,
animation_duration);
if (!plan)
return;
execute_document_layer_merge_plan(app_, plan.value());
}
void show_merge_animated_not_supported() override
@@ -618,6 +633,23 @@ private:
App& app_;
};
class LegacyDocumentLayerMergeServices final : public pp::app::DocumentLayerMergeServices {
public:
explicit LegacyDocumentLayerMergeServices(App& app) noexcept
: app_(app)
{
}
void merge_layers(int from_index, int to_index, bool create_history) override
{
if (app_.layers)
app_.layers->merge(from_index, to_index, create_history);
}
private:
App& app_;
};
class LegacyDocumentLayerOperationServices final : public pp::app::DocumentLayerOperationServices {
public:
LegacyDocumentLayerOperationServices(
@@ -786,6 +818,14 @@ void execute_document_layer_menu_plan(App& app, const pp::app::DocumentLayerMenu
LOG("Layer menu action failed: %s", status.message);
}
void execute_document_layer_merge_plan(App& app, const pp::app::DocumentLayerMergePlan& plan)
{
LegacyDocumentLayerMergeServices services(app);
const auto status = pp::app::execute_document_layer_merge_plan(plan, services);
if (!status.ok())
LOG("Layer merge failed: %s", status.message);
}
void execute_document_layer_operation_plan(
App& app,
const pp::app::DocumentLayerOperationPlan& plan,