From 6746b684907680e73c75437e9b3025510d17e414 Mon Sep 17 00:00:00 2001 From: Equbuxu Date: Sun, 3 Dec 2023 00:24:49 +0300 Subject: [PATCH] Fix crash when undoing, redoing, and undoing a no-op resize operation --- .../Changes/Root/ClipCanvas_Change.cs | 8 +------- .../Changes/Root/ResizeBasedChangeBase.cs | 6 +++--- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/PixiEditor.ChangeableDocument/Changes/Root/ClipCanvas_Change.cs b/src/PixiEditor.ChangeableDocument/Changes/Root/ClipCanvas_Change.cs index ed3ca868a..416635329 100644 --- a/src/PixiEditor.ChangeableDocument/Changes/Root/ClipCanvas_Change.cs +++ b/src/PixiEditor.ChangeableDocument/Changes/Root/ClipCanvas_Change.cs @@ -24,7 +24,7 @@ internal class ClipCanvas_Change : ResizeBasedChangeBase } }); - if (!bounds.HasValue) + if (!bounds.HasValue || bounds.Value.IsZeroOrNegativeArea || bounds.Value == new RectI(VecI.Zero, target.Size)) { ignoreInUndo = true; return new None(); @@ -48,12 +48,6 @@ internal class ClipCanvas_Change : ResizeBasedChangeBase Resize(member.Mask, member.GuidValue, newBounds.Size, -newBounds.Pos, deletedMaskChunks); }); - - if (newBounds.IsZeroOrNegativeArea) - { - ignoreInUndo = true; - return new None(); - } ignoreInUndo = false; return new Size_ChangeInfo(newBounds.Size, target.VerticalSymmetryAxisX, target.HorizontalSymmetryAxisY); diff --git a/src/PixiEditor.ChangeableDocument/Changes/Root/ResizeBasedChangeBase.cs b/src/PixiEditor.ChangeableDocument/Changes/Root/ResizeBasedChangeBase.cs index 62c082897..388a5aaeb 100644 --- a/src/PixiEditor.ChangeableDocument/Changes/Root/ResizeBasedChangeBase.cs +++ b/src/PixiEditor.ChangeableDocument/Changes/Root/ResizeBasedChangeBase.cs @@ -19,6 +19,9 @@ public override bool InitializeAndValidate(Document target) return true; } + /// + /// Notice: this commits image changes, you won't have a chance to revert or set ignoreInUndo to true + /// protected virtual void Resize(ChunkyImage img, Guid memberGuid, VecI size, VecI offset, Dictionary deletedChunksDict) { img.EnqueueResize(size); @@ -31,9 +34,6 @@ protected virtual void Resize(ChunkyImage img, Guid memberGuid, VecI size, VecI public override OneOf> Revert(Document target) { - if (target.Size == _originalSize) - return new None(); - target.Size = _originalSize; target.ForEveryMember((member) => {