ClearSelectedArea_Change.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using PixiEditor.DrawingApi.Core.Numerics;
  2. namespace PixiEditor.ChangeableDocument.Changes.Drawing;
  3. internal class ClearSelectedArea_Change : Change
  4. {
  5. private readonly Guid memberGuid;
  6. private readonly bool drawOnMask;
  7. private CommittedChunkStorage? savedChunks;
  8. [GenerateMakeChangeAction]
  9. public ClearSelectedArea_Change(Guid memberGuid, bool drawOnMask)
  10. {
  11. this.memberGuid = memberGuid;
  12. this.drawOnMask = drawOnMask;
  13. }
  14. public override bool InitializeAndValidate(Document target)
  15. {
  16. return !target.Selection.SelectionPath.IsEmpty && DrawingChangeHelper.IsValidForDrawing(target, memberGuid, drawOnMask);
  17. }
  18. public override OneOf<None, IChangeInfo, List<IChangeInfo>> Apply(Document target, bool firstApply, out bool ignoreInUndo)
  19. {
  20. if (savedChunks is not null)
  21. throw new InvalidOperationException("trying to save chunks while they are already saved");
  22. var image = DrawingChangeHelper.GetTargetImageOrThrow(target, memberGuid, drawOnMask);
  23. RectD bounds = target.Selection.SelectionPath.Bounds;
  24. RectI intBounds = (RectI)bounds.Intersect(new RectD(0, 0, target.Size.X, target.Size.Y)).RoundOutwards();
  25. image.EnqueueClearPath(target.Selection.SelectionPath, intBounds);
  26. var affArea = image.FindAffectedArea();
  27. savedChunks = new(image, affArea.Chunks);
  28. image.CommitChanges();
  29. ignoreInUndo = false;
  30. return DrawingChangeHelper.CreateAreaChangeInfo(memberGuid, affArea, drawOnMask);
  31. }
  32. public override OneOf<None, IChangeInfo, List<IChangeInfo>> Revert(Document target)
  33. {
  34. var affArea = DrawingChangeHelper.ApplyStoredChunksDisposeAndSetToNull(target, memberGuid, drawOnMask, ref savedChunks);
  35. return DrawingChangeHelper.CreateAreaChangeInfo(memberGuid, affArea, drawOnMask);
  36. }
  37. public override void Dispose()
  38. {
  39. savedChunks?.Dispose();
  40. }
  41. }