Browse Source

Fixed crash

flabbet 1 năm trước cách đây
mục cha
commit
f2e0660af8

+ 31 - 8
src/PixiEditor.ChangeableDocument/Changes/Drawing/ShiftLayer_UpdateableChange.cs

@@ -4,13 +4,14 @@ using PixiEditor.DrawingApi.Core.Numerics;
 using PixiEditor.Numerics;
 
 namespace PixiEditor.ChangeableDocument.Changes.Drawing;
+
 internal class ShiftLayer_UpdateableChange : UpdateableChange
 {
     private List<Guid> layerGuids;
     private bool keepOriginal;
     private VecI delta;
     private Dictionary<Guid, CommittedChunkStorage?> originalLayerChunks = new();
-    
+
     private List<IChangeInfo> _tempChanges = new();
     private int frame;
 
@@ -36,7 +37,7 @@ internal class ShiftLayer_UpdateableChange : UpdateableChange
         {
             if (!target.HasMember(layer)) return false;
         }
-        
+
         return true;
     }
 
@@ -47,18 +48,26 @@ internal class ShiftLayer_UpdateableChange : UpdateableChange
         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?>();
         List<IChangeInfo> changes = new List<IChangeInfo>();
         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);
-            // TODO: Add support for different Layer types
             var image = target.FindMemberOrThrow<ImageLayerNode>(layerGuid).GetLayerImageAtFrame(frame);
-            
+
             changes.Add(new LayerImageArea_ChangeInfo(layerGuid, area));
-            
+
             originalLayerChunks[layerGuid] = new(image, image.FindAffectedArea().Chunks);
             image.CommitChanges();
         }
@@ -73,10 +82,17 @@ internal class ShiftLayer_UpdateableChange : UpdateableChange
 
         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);
             _tempChanges.Add(new LayerImageArea_ChangeInfo(layerGuid, chunks));
         }
-        
+
         return _tempChanges;
     }
 
@@ -85,12 +101,19 @@ internal class ShiftLayer_UpdateableChange : UpdateableChange
         List<IChangeInfo> changes = new List<IChangeInfo>();
         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);
             CommittedChunkStorage? originalChunks = originalLayerChunks[layerGuid];
             var affected = DrawingChangeHelper.ApplyStoredChunksDisposeAndSetToNull(image, ref originalChunks);
             changes.Add(new LayerImageArea_ChangeInfo(layerGuid, affected));
         }
-        
+
         return changes;
     }