Document.Constructors.cs 2.3 KB

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