CreateStructureMemberMask_Change.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using PixiEditor.ChangeableDocument.ChangeInfos.Properties;
  2. namespace PixiEditor.ChangeableDocument.Changes.Properties.LayerStructure;
  3. internal class CreateStructureMemberMask_Change : Change
  4. {
  5. private Guid targetMember;
  6. [GenerateMakeChangeAction]
  7. public CreateStructureMemberMask_Change(Guid memberGuid)
  8. {
  9. targetMember = memberGuid;
  10. }
  11. public override bool InitializeAndValidate(Document target)
  12. {
  13. return target.TryFindMember(targetMember, out var member) && member.Mask.NonOverridenValue is null;
  14. }
  15. public override OneOf<None, IChangeInfo, List<IChangeInfo>> Apply(Document target, bool firstApply, out bool ignoreInUndo)
  16. {
  17. var member = target.FindMemberOrThrow(targetMember);
  18. if (member.Mask.NonOverridenValue is not null)
  19. throw new InvalidOperationException("Cannot create a mask; the target member already has one");
  20. member.Mask.NonOverridenValue = new ChunkyImage(target.Size);
  21. ignoreInUndo = false;
  22. return new StructureMemberMask_ChangeInfo(targetMember, true);
  23. }
  24. public override OneOf<None, IChangeInfo, List<IChangeInfo>> Revert(Document target)
  25. {
  26. var member = target.FindMemberOrThrow(targetMember);
  27. if (member.Mask.NonOverridenValue is null)
  28. throw new InvalidOperationException("Cannot delete the mask; the target member has no mask");
  29. member.Mask.NonOverridenValue.Dispose();
  30. member.Mask.NonOverridenValue = null;
  31. return new StructureMemberMask_ChangeInfo(targetMember, false);
  32. }
  33. }