|
@@ -4,13 +4,14 @@ using PixiEditor.DrawingApi.Core.Numerics;
|
|
using PixiEditor.Numerics;
|
|
using PixiEditor.Numerics;
|
|
|
|
|
|
namespace PixiEditor.ChangeableDocument.Changes.Drawing;
|
|
namespace PixiEditor.ChangeableDocument.Changes.Drawing;
|
|
|
|
+
|
|
internal class ShiftLayer_UpdateableChange : UpdateableChange
|
|
internal class ShiftLayer_UpdateableChange : UpdateableChange
|
|
{
|
|
{
|
|
private List<Guid> layerGuids;
|
|
private List<Guid> layerGuids;
|
|
private bool keepOriginal;
|
|
private bool keepOriginal;
|
|
private VecI delta;
|
|
private VecI delta;
|
|
private Dictionary<Guid, CommittedChunkStorage?> originalLayerChunks = new();
|
|
private Dictionary<Guid, CommittedChunkStorage?> originalLayerChunks = new();
|
|
-
|
|
|
|
|
|
+
|
|
private List<IChangeInfo> _tempChanges = new();
|
|
private List<IChangeInfo> _tempChanges = new();
|
|
private int frame;
|
|
private int frame;
|
|
|
|
|
|
@@ -36,7 +37,7 @@ internal class ShiftLayer_UpdateableChange : UpdateableChange
|
|
{
|
|
{
|
|
if (!target.HasMember(layer)) return false;
|
|
if (!target.HasMember(layer)) return false;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -47,18 +48,26 @@ internal class ShiftLayer_UpdateableChange : UpdateableChange
|
|
this.keepOriginal = keepOriginal;
|
|
this.keepOriginal = keepOriginal;
|
|
}
|
|
}
|
|
|
|
|
|
- public override OneOf<None, IChangeInfo, List<IChangeInfo>> Apply(Document target, bool firstApply, out bool ignoreInUndo)
|
|
|
|
|
|
+ public override OneOf<None, IChangeInfo, List<IChangeInfo>> Apply(Document target, bool firstApply,
|
|
|
|
+ out bool ignoreInUndo)
|
|
{
|
|
{
|
|
originalLayerChunks = new Dictionary<Guid, CommittedChunkStorage?>();
|
|
originalLayerChunks = new Dictionary<Guid, CommittedChunkStorage?>();
|
|
List<IChangeInfo> changes = new List<IChangeInfo>();
|
|
List<IChangeInfo> changes = new List<IChangeInfo>();
|
|
foreach (var layerGuid in layerGuids)
|
|
foreach (var layerGuid in layerGuids)
|
|
{
|
|
{
|
|
|
|
+ var layer = target.FindMemberOrThrow<LayerNode>(layerGuid);
|
|
|
|
+
|
|
|
|
+ // TODO: This now does't crash, but ignores other layer types. Think how to handle this.
|
|
|
|
+ if (layer is not ImageLayerNode)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
var area = ShiftLayerHelper.DrawShiftedLayer(target, layerGuid, keepOriginal, delta, frame);
|
|
var area = ShiftLayerHelper.DrawShiftedLayer(target, layerGuid, keepOriginal, delta, frame);
|
|
- // TODO: Add support for different Layer types
|
|
|
|
var image = target.FindMemberOrThrow<ImageLayerNode>(layerGuid).GetLayerImageAtFrame(frame);
|
|
var image = target.FindMemberOrThrow<ImageLayerNode>(layerGuid).GetLayerImageAtFrame(frame);
|
|
-
|
|
|
|
|
|
+
|
|
changes.Add(new LayerImageArea_ChangeInfo(layerGuid, area));
|
|
changes.Add(new LayerImageArea_ChangeInfo(layerGuid, area));
|
|
-
|
|
|
|
|
|
+
|
|
originalLayerChunks[layerGuid] = new(image, image.FindAffectedArea().Chunks);
|
|
originalLayerChunks[layerGuid] = new(image, image.FindAffectedArea().Chunks);
|
|
image.CommitChanges();
|
|
image.CommitChanges();
|
|
}
|
|
}
|
|
@@ -73,10 +82,17 @@ internal class ShiftLayer_UpdateableChange : UpdateableChange
|
|
|
|
|
|
foreach (var layerGuid in layerGuids)
|
|
foreach (var layerGuid in layerGuids)
|
|
{
|
|
{
|
|
|
|
+ var layer = target.FindMemberOrThrow<LayerNode>(layerGuid);
|
|
|
|
+
|
|
|
|
+ if (layer is not ImageLayerNode)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
var chunks = ShiftLayerHelper.DrawShiftedLayer(target, layerGuid, keepOriginal, delta, frame);
|
|
var chunks = ShiftLayerHelper.DrawShiftedLayer(target, layerGuid, keepOriginal, delta, frame);
|
|
_tempChanges.Add(new LayerImageArea_ChangeInfo(layerGuid, chunks));
|
|
_tempChanges.Add(new LayerImageArea_ChangeInfo(layerGuid, chunks));
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
return _tempChanges;
|
|
return _tempChanges;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -85,12 +101,19 @@ internal class ShiftLayer_UpdateableChange : UpdateableChange
|
|
List<IChangeInfo> changes = new List<IChangeInfo>();
|
|
List<IChangeInfo> changes = new List<IChangeInfo>();
|
|
foreach (var layerGuid in layerGuids)
|
|
foreach (var layerGuid in layerGuids)
|
|
{
|
|
{
|
|
|
|
+ var layer = target.FindMemberOrThrow<LayerNode>(layerGuid);
|
|
|
|
+
|
|
|
|
+ if (layer is not ImageLayerNode)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
var image = target.FindMemberOrThrow<ImageLayerNode>(layerGuid).GetLayerImageAtFrame(frame);
|
|
var image = target.FindMemberOrThrow<ImageLayerNode>(layerGuid).GetLayerImageAtFrame(frame);
|
|
CommittedChunkStorage? originalChunks = originalLayerChunks[layerGuid];
|
|
CommittedChunkStorage? originalChunks = originalLayerChunks[layerGuid];
|
|
var affected = DrawingChangeHelper.ApplyStoredChunksDisposeAndSetToNull(image, ref originalChunks);
|
|
var affected = DrawingChangeHelper.ApplyStoredChunksDisposeAndSetToNull(image, ref originalChunks);
|
|
changes.Add(new LayerImageArea_ChangeInfo(layerGuid, affected));
|
|
changes.Add(new LayerImageArea_ChangeInfo(layerGuid, affected));
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
return changes;
|
|
return changes;
|
|
}
|
|
}
|
|
|
|
|