From 39dccc28f0a0dbf97beb42b35ec97f6f0bc78113 Mon Sep 17 00:00:00 2001 From: MathemanFlo Date: Wed, 16 Mar 2022 21:15:35 +0100 Subject: [PATCH] Fix duplicate layer undo-redo --- Sources/arm/History.hx | 12 ++++++++++-- Sources/arm/Layers.hx | 11 ----------- Sources/arm/ui/TabLayers.hx | 2 ++ 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/Sources/arm/History.hx b/Sources/arm/History.hx index cfd5b1f3..e083fe47 100644 --- a/Sources/arm/History.hx +++ b/Sources/arm/History.hx @@ -73,7 +73,12 @@ class History { Context.layerPreviewDirty = true; } else if (step.name == tr("Duplicate Layer")) { - Context.layer = Project.layers[step.layer + 1]; + var children = Project.layers[step.layer].getRecursiveChildren(); + var position = step.layer + 1; + if (children != null) + position += children.length; + + Context.layer = Project.layers[position]; Context.layer.delete(); } else if (step.name == tr("Order Layers")) { @@ -266,7 +271,10 @@ class History { } else if (step.name == tr("Duplicate Layer")) { Context.layer = Project.layers[step.layer]; - Context.layer = Context.layer.duplicate(); + function _next() { + Layers.duplicateLayer(Context.layer); + } + App.notifyOnNextFrame(_next); } else if (step.name == tr("Order Layers")) { var target = Project.layers[step.prev_order]; diff --git a/Sources/arm/Layers.hx b/Sources/arm/Layers.hx index d6aa651f..5d9ea0f6 100644 --- a/Sources/arm/Layers.hx +++ b/Sources/arm/Layers.hx @@ -372,15 +372,11 @@ class Layers { public static function duplicateLayer(l: LayerSlot) { if (!l.isGroup()) { - Context.setLayer(l); - History.duplicateLayer(); var newLayer = l.duplicate(); Context.setLayer(newLayer); var masks = l.getMasks(false); if (masks != null) { for (m in masks) { - Context.setLayer(m); - History.duplicateLayer(); m = m.duplicate(); m.parent = newLayer; Project.layers.remove(m); @@ -390,23 +386,18 @@ class Layers { Context.setLayer(newLayer); } else { - // TODO: add undo-redo support for creating a new group var newGroup = Layers.newGroup(); Project.layers.remove(newGroup); Project.layers.insert(Project.layers.indexOf(l) + 1, newGroup); // group.show_panel = true; for (c in l.getChildren()) { var masks = c.getMasks(false); - Context.setLayer(c); - History.duplicateLayer(); var newLayer = c.duplicate(); newLayer.parent = newGroup; Project.layers.remove(newLayer); Project.layers.insert(Project.layers.indexOf(newGroup), newLayer); if (masks != null) { for (m in masks) { - Context.setLayer(m); - History.duplicateLayer(); var newMask = m.duplicate(); newMask.parent = newLayer; Project.layers.remove(newMask); @@ -417,8 +408,6 @@ class Layers { var groupMasks = l.getMasks(); if (groupMasks != null) { for (m in groupMasks) { - Context.setLayer(m); - History.duplicateLayer(); var newMask = m.duplicate(); newMask.parent = newGroup; Project.layers.remove(newMask); diff --git a/Sources/arm/ui/TabLayers.hx b/Sources/arm/ui/TabLayers.hx index add18da7..38368060 100644 --- a/Sources/arm/ui/TabLayers.hx +++ b/Sources/arm/ui/TabLayers.hx @@ -619,6 +619,8 @@ class TabLayers { ui.enabled = true; if (ui.button(tr("Duplicate"), Left)) { function _init() { + Context.setLayer(l); + History.duplicateLayer(); Layers.duplicateLayer(l); } iron.App.notifyOnInit(_init);