PixelChangesController.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using PixiEditor.Models.DataHolders;
  2. using PixiEditor.Models.Position;
  3. using PixiEditor.Models.Tools;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Windows.Media;
  8. namespace PixiEditor.Models.Controllers
  9. {
  10. public class PixelChangesController
  11. {
  12. LayerChanges LastChanges { get; set; }
  13. LayerChanges LastOldValues { get; set; }
  14. public void AddChanges(LayerChanges changes, LayerChanges oldValues)
  15. {
  16. if(LastChanges == null)
  17. {
  18. LastChanges = changes;
  19. LastOldValues = oldValues;
  20. return;
  21. }
  22. foreach (var change in changes.PixelChanges.ChangedPixels)
  23. {
  24. if (LastChanges.PixelChanges.ChangedPixels.ContainsKey(change.Key))
  25. {
  26. continue;
  27. }
  28. else
  29. {
  30. LastChanges.PixelChanges.ChangedPixels.Add(change.Key, change.Value);
  31. }
  32. }
  33. foreach (var change in oldValues.PixelChanges.ChangedPixels)
  34. {
  35. if (LastOldValues.PixelChanges.ChangedPixels.ContainsKey(change.Key))
  36. {
  37. continue;
  38. }
  39. else
  40. {
  41. LastOldValues.PixelChanges.ChangedPixels.Add(change.Key, change.Value);
  42. }
  43. }
  44. }
  45. public Tuple<LayerChanges, LayerChanges> PopChanges()
  46. {
  47. Dictionary<Coordinates, Color> pixelChanges = LastChanges.PixelChanges.ChangedPixels.ToDictionary(entry => entry.Key, entry => entry.Value);
  48. Dictionary<Coordinates, Color> oldValues = LastOldValues.PixelChanges.ChangedPixels.ToDictionary(entry => entry.Key, entry => entry.Value);
  49. var tmp = new LayerChanges(new BitmapPixelChanges(pixelChanges), LastChanges.LayerIndex);
  50. var oldValuesTmp = new LayerChanges(new BitmapPixelChanges(oldValues), LastOldValues.LayerIndex);
  51. Tuple<LayerChanges, LayerChanges> outputChanges = new Tuple<LayerChanges, LayerChanges>(tmp, oldValuesTmp);
  52. LastChanges = null;
  53. LastOldValues = null;
  54. return outputChanges;
  55. }
  56. }
  57. }