Browse Source

Fixed wrong Mask value calls

flabbet 1 year ago
parent
commit
ddc327d42b

+ 1 - 1
src/PixiEditor.AvaloniaUI/Views/Rendering/Scene.cs

@@ -496,7 +496,7 @@ internal class DrawSceneOperation : SkiaDrawOperation
 
 
     public override void Render(ISkiaSharpApiLease lease)
     public override void Render(ISkiaSharpApiLease lease)
     {
     {
-        if (Surface == null || Document == null) return;
+        if (Surface == null || Surface.IsDisposed || Document == null) return;
 
 
         SKCanvas canvas = lease.SkCanvas;
         SKCanvas canvas = lease.SkCanvas;
 
 

+ 1 - 1
src/PixiEditor.ChangeableDocument/Changes/Drawing/ApplyLayerMask_Change.cs

@@ -63,7 +63,7 @@ internal class ApplyLayerMask_Change : Change
     public override OneOf<None, IChangeInfo, List<IChangeInfo>> Revert(Document target)
     public override OneOf<None, IChangeInfo, List<IChangeInfo>> Revert(Document target)
     {
     {
         var layer = target.FindMemberOrThrow<ImageLayerNode>(layerGuid);
         var layer = target.FindMemberOrThrow<ImageLayerNode>(layerGuid);
-        if (layer.Mask is not null)
+        if (layer.Mask.Value is not null)
             throw new InvalidOperationException("Cannot restore layer mask, it already has one");
             throw new InvalidOperationException("Cannot restore layer mask, it already has one");
         if (savedLayer is null || savedMask is null)
         if (savedLayer is null || savedMask is null)
             throw new InvalidOperationException("Cannot restore layer mask, no saved data");
             throw new InvalidOperationException("Cannot restore layer mask, no saved data");

+ 1 - 1
src/PixiEditor.ChangeableDocument/Changes/Drawing/DrawingChangeHelper.cs

@@ -109,7 +109,7 @@ internal static class DrawingChangeHelper
         return drawOnMask switch
         return drawOnMask switch
         {
         {
             // If it should draw on the mask, the mask can't be null
             // If it should draw on the mask, the mask can't be null
-            true when member.Mask.Value is null => false,
+            true when member.Mask.NonOverridenValue is null => false,
             // If it should not draw on the mask, the member can't be a folder
             // If it should not draw on the mask, the member can't be a folder
             false when member is FolderNode => false,
             false when member is FolderNode => false,
             _ => true
             _ => true

+ 4 - 4
src/PixiEditor.ChangeableDocument/Changes/Properties/LayerStructure/DeleteStructureMemberMask_Change.cs

@@ -15,17 +15,17 @@ internal class DeleteStructureMemberMask_Change : Change
 
 
     public override bool InitializeAndValidate(Document target)
     public override bool InitializeAndValidate(Document target)
     {
     {
-        if (!target.TryFindMember(memberGuid, out var member) || member.Mask is null)
+        if (!target.TryFindMember(memberGuid, out var member) || member.Mask.NonOverridenValue is null)
             return false;
             return false;
         
         
-        storedMask = member.Mask.Value.CloneFromCommitted();
+        storedMask = member.Mask.NonOverridenValue.CloneFromCommitted();
         return true;
         return true;
     }
     }
 
 
     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)
     {
     {
         var member = target.FindMemberOrThrow(memberGuid);
         var member = target.FindMemberOrThrow(memberGuid);
-        if (member.Mask is null)
+        if (member.Mask.NonOverridenValue is null)
             throw new InvalidOperationException("Cannot delete the mask; Target member has no mask");
             throw new InvalidOperationException("Cannot delete the mask; Target member has no mask");
         member.Mask.NonOverridenValue.Dispose();
         member.Mask.NonOverridenValue.Dispose();
         member.Mask.NonOverridenValue = null;
         member.Mask.NonOverridenValue = null;
@@ -37,7 +37,7 @@ internal class DeleteStructureMemberMask_Change : Change
     public override OneOf<None, IChangeInfo, List<IChangeInfo>> Revert(Document target)
     public override OneOf<None, IChangeInfo, List<IChangeInfo>> Revert(Document target)
     {
     {
         var member = target.FindMemberOrThrow(memberGuid);
         var member = target.FindMemberOrThrow(memberGuid);
-        if (member.Mask is not null)
+        if (member.Mask.NonOverridenValue is not null)
             throw new InvalidOperationException("Cannot revert mask deletion; The target member already has a mask");
             throw new InvalidOperationException("Cannot revert mask deletion; The target member already has a mask");
         member.Mask.NonOverridenValue = storedMask!.CloneFromCommitted();
         member.Mask.NonOverridenValue = storedMask!.CloneFromCommitted();
 
 

+ 2 - 2
src/PixiEditor.ChangeableDocument/Changes/Root/ClipCanvas_Change.cs

@@ -52,10 +52,10 @@ internal class ClipCanvas_Change : ResizeBasedChangeBase
                 });
                 });
             }
             }
             
             
-            if (member.Mask is null)
+            if (member.Mask.NonOverridenValue is null)
                 return;
                 return;
             
             
-            Resize(member.Mask.Value, member.Id, newBounds.Size, -newBounds.Pos, deletedMaskChunks);
+            Resize(member.Mask.NonOverridenValue, member.Id, newBounds.Size, -newBounds.Pos, deletedMaskChunks);
         });
         });
 
 
         ignoreInUndo = false;
         ignoreInUndo = false;

+ 2 - 2
src/PixiEditor.ChangeableDocument/Changes/Root/Crop_Change.cs

@@ -42,10 +42,10 @@ internal class Crop_Change : ResizeBasedChangeBase
                     Resize(frame, layer.Id, rect.Size, rect.Pos * -1, deletedChunks);
                     Resize(frame, layer.Id, rect.Size, rect.Pos * -1, deletedChunks);
                 });
                 });
             }
             }
-            if (member.Mask.Value is null)
+            if (member.Mask.NonOverridenValue is null)
                 return;
                 return;
 
 
-            Resize(member.Mask.Value, member.Id, rect.Size, rect.Pos * -1, deletedMaskChunks);
+            Resize(member.Mask.NonOverridenValue, member.Id, rect.Size, rect.Pos * -1, deletedMaskChunks);
         });
         });
         
         
         ignoreInUndo = false;
         ignoreInUndo = false;

+ 4 - 4
src/PixiEditor.ChangeableDocument/Changes/Root/FlipImage_Change.cs

@@ -113,12 +113,12 @@ internal sealed class FlipImage_Change : Change
                 }
                 }
                 // TODO: Add support for non-raster layers
                 // TODO: Add support for non-raster layers
 
 
-                if (member.Mask.Value is not null)
+                if (member.Mask.NonOverridenValue is not null)
                 {
                 {
-                    FlipImage(member.Mask.Value);
+                    FlipImage(member.Mask.NonOverridenValue);
                     changes.Add(
                     changes.Add(
-                        new MaskArea_ChangeInfo(member.Id, member.Mask.Value.FindAffectedArea()));
-                    member.Mask.Value.CommitChanges();
+                        new MaskArea_ChangeInfo(member.Id, member.Mask.NonOverridenValue.FindAffectedArea()));
+                    member.Mask.NonOverridenValue.CommitChanges();
                 }
                 }
             }
             }
         });
         });

+ 4 - 4
src/PixiEditor.ChangeableDocument/Changes/Root/ResizeBasedChangeBase.cs

@@ -60,11 +60,11 @@ internal abstract class ResizeBasedChangeBase : Change
 
 
             // TODO: Add support for different Layer types?
             // TODO: Add support for different Layer types?
 
 
-            if (member.Mask.Value is null)
+            if (member.Mask.NonOverridenValue is null)
                 return;
                 return;
-            member.Mask.Value.EnqueueResize(_originalSize);
-            deletedMaskChunks[member.Id][0].ApplyChunksToImage(member.Mask.Value);
-            member.Mask.Value.CommitChanges();
+            member.Mask.NonOverridenValue.EnqueueResize(_originalSize);
+            deletedMaskChunks[member.Id][0].ApplyChunksToImage(member.Mask.NonOverridenValue);
+            member.Mask.NonOverridenValue.CommitChanges();
         });
         });
 
 
         target.HorizontalSymmetryAxisY = _originalHorAxisY;
         target.HorizontalSymmetryAxisY = _originalHorAxisY;

+ 25 - 12
src/PixiEditor.ChangeableDocument/Changes/Root/RotateImage_Change.cs

@@ -158,10 +158,10 @@ internal sealed class RotateImage_Change : Change
 
 
                 // TODO: Add support for different Layer types
                 // TODO: Add support for different Layer types
 
 
-                if (member.Mask.Value is null)
+                if (member.Mask.NonOverridenValue is null)
                     return;
                     return;
 
 
-                Resize(member.Mask.Value, member.Id, deletedMaskChunks, null);
+                Resize(member.Mask.NonOverridenValue, member.Id, deletedMaskChunks, null);
             }
             }
         });
         });
 
 
@@ -199,10 +199,10 @@ internal sealed class RotateImage_Change : Change
                 }
                 }
             }
             }
 
 
-            if (member.Mask.Value is null)
+            if (member.Mask.NonOverridenValue is null)
                 return;
                 return;
 
 
-            Resize(member.Mask.Value, member.Id, deletedMaskChunks, null);
+            Resize(member.Mask.NonOverridenValue, member.Id, deletedMaskChunks, null);
         });
         });
 
 
         return new Size_ChangeInfo(newSize, target.VerticalSymmetryAxisX, target.HorizontalSymmetryAxisY);
         return new Size_ChangeInfo(newSize, target.VerticalSymmetryAxisX, target.HorizontalSymmetryAxisY);
@@ -237,19 +237,32 @@ internal sealed class RotateImage_Change : Change
             if (membersToRotate.Count > 0 && !membersToRotate.Contains(member.Id)) return;
             if (membersToRotate.Count > 0 && !membersToRotate.Contains(member.Id)) return;
             if (member is ImageLayerNode layer)
             if (member is ImageLayerNode layer)
             {
             {
-                var layerImage = layer.GetLayerImageAtFrame(frame.Value);
-                layerImage.EnqueueResize(originalSize);
-                deletedChunks[layer.Id].ApplyChunksToImage(layerImage);
-                revertChanges.Add(new LayerImageArea_ChangeInfo(layer.Id, layerImage.FindAffectedArea()));
-                layerImage.CommitChanges();
+                if (frame != null)
+                {
+                    var layerImage = layer.GetLayerImageAtFrame(frame.Value);
+                    layerImage.EnqueueResize(originalSize);
+                    deletedChunks[layer.Id].ApplyChunksToImage(layerImage);
+                    revertChanges.Add(new LayerImageArea_ChangeInfo(layer.Id, layerImage.FindAffectedArea()));
+                    layerImage.CommitChanges();
+                }
+                else
+                {
+                    layer.ForEveryFrame(img =>
+                    {
+                        img.EnqueueResize(originalSize);
+                        deletedChunks[layer.Id].ApplyChunksToImage(img);
+                        revertChanges.Add(new LayerImageArea_ChangeInfo(layer.Id, img.FindAffectedArea()));
+                        img.CommitChanges();
+                    });
+                }
             }
             }
 
 
-            if (member.Mask.Value is null)
+            if (member.Mask.NonOverridenValue is null)
                 return;
                 return;
-            member.Mask.Value.EnqueueResize(originalSize);
+            member.Mask.NonOverridenValue.EnqueueResize(originalSize);
             deletedMaskChunks[member.Id].ApplyChunksToImage(member.Mask.Value);
             deletedMaskChunks[member.Id].ApplyChunksToImage(member.Mask.Value);
             revertChanges.Add(new LayerImageArea_ChangeInfo(member.Id, member.Mask.Value.FindAffectedArea()));
             revertChanges.Add(new LayerImageArea_ChangeInfo(member.Id, member.Mask.Value.FindAffectedArea()));
-            member.Mask.Value.CommitChanges();
+            member.Mask.NonOverridenValue.CommitChanges();
         });
         });
 
 
         DisposeDeletedChunks();
         DisposeDeletedChunks();