CreateRasterKeyFrame_Change.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using PixiEditor.ChangeableDocument.Changeables.Animations;
  2. using PixiEditor.ChangeableDocument.ChangeInfos.Animation;
  3. namespace PixiEditor.ChangeableDocument.Changes.Animation;
  4. internal class CreateRasterKeyFrame_Change : Change
  5. {
  6. private readonly Guid _targetLayerGuid;
  7. private readonly int _frame;
  8. private readonly bool _cloneFromExisting;
  9. private RasterLayer? _layer;
  10. private Guid createdKeyFrameId;
  11. [GenerateMakeChangeAction]
  12. public CreateRasterKeyFrame_Change(Guid targetLayerGuid, int frame, bool cloneFromExisting = false)
  13. {
  14. _targetLayerGuid = targetLayerGuid;
  15. _frame = frame;
  16. _cloneFromExisting = cloneFromExisting;
  17. }
  18. public override bool InitializeAndValidate(Document target)
  19. {
  20. return target.TryFindMember(_targetLayerGuid, out _layer);
  21. }
  22. public override OneOf<None, IChangeInfo, List<IChangeInfo>> Apply(Document target, bool firstApply, out bool ignoreInUndo)
  23. {
  24. var keyFrame =
  25. new RasterKeyFrame(_targetLayerGuid, _frame, target, _cloneFromExisting ? _layer.LayerImage : null);
  26. if (firstApply)
  27. {
  28. createdKeyFrameId = keyFrame.Id;
  29. }
  30. else
  31. {
  32. keyFrame.Id = createdKeyFrameId;
  33. }
  34. target.AnimationData.AddKeyFrame(keyFrame);
  35. ignoreInUndo = false;
  36. return new CreateRasterKeyFrame_ChangeInfo(_targetLayerGuid, _frame, createdKeyFrameId, _cloneFromExisting);
  37. }
  38. public override OneOf<None, IChangeInfo, List<IChangeInfo>> Revert(Document target)
  39. {
  40. target.AnimationData.RemoveKeyFrame(createdKeyFrameId);
  41. return new DeleteKeyFrame_ChangeInfo(_frame, createdKeyFrameId);
  42. }
  43. }