Fix duplicate layer undo-redo
This commit is contained in:
+10
-2
@@ -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];
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user