Document.Constructors.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using PixiEditor.Models.Controllers;
  2. using PixiEditor.Models.Layers;
  3. using PixiEditor.Models.Position;
  4. using PixiEditor.ViewModels;
  5. using System;
  6. using System.Linq;
  7. namespace PixiEditor.Models.DataHolders
  8. {
  9. public partial class Document
  10. {
  11. public Document(int width, int height)
  12. : this()
  13. {
  14. if (width <= 0 || height <= 0)
  15. throw new ArgumentException("Document dimensions must be greater than 0");
  16. Width = width;
  17. Height = height;
  18. Renderer = new LayerStackRenderer(layers, layerStructure, Width, Height);
  19. DocumentSizeChanged?.Invoke(this, new DocumentSizeChangedEventArgs(1, 1, width, height));
  20. }
  21. private Document()
  22. {
  23. SetRelayCommands();
  24. UndoManager = new UndoManager();
  25. LayerStructure = new LayerStructure(this);
  26. XamlAccesibleViewModel = ViewModelMain.Current;
  27. GeneratePreviewLayer();
  28. Layers.CollectionChanged += Layers_CollectionChanged;
  29. LayerStructure.Groups.CollectionChanged += Groups_CollectionChanged;
  30. LayerStructure.LayerStructureChanged += LayerStructure_LayerStructureChanged;
  31. DocumentSizeChanged += (sender, args) =>
  32. {
  33. ActiveSelection = new Selection(Array.Empty<Coordinates>(), new PixelSize(args.NewWidth, args.NewHeight));
  34. Renderer.Resize(args.NewWidth, args.NewHeight);
  35. GeneratePreviewLayer();
  36. };
  37. }
  38. private void LayerStructure_LayerStructureChanged(object sender, LayerStructureChangedEventArgs e)
  39. {
  40. RaisePropertyChanged(nameof(LayerStructure));
  41. foreach (var layerGuid in e.AffectedLayerGuids)
  42. {
  43. Layer layer = Layers.First(x => x.GuidValue == layerGuid);
  44. layer.RaisePropertyChange(nameof(layer.IsVisible));
  45. layer.RaisePropertyChange(nameof(layer.Opacity));
  46. }
  47. }
  48. private void Groups_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
  49. {
  50. if (e.OldItems != e.NewItems)
  51. {
  52. RaisePropertyChanged(nameof(LayerStructure));
  53. }
  54. }
  55. private void Layers_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
  56. {
  57. RaisePropertyChanged(nameof(Layers));
  58. }
  59. }
  60. }