|
@@ -9,7 +9,6 @@ using SkiaSharp;
|
|
using System;
|
|
using System;
|
|
using System.Buffers;
|
|
using System.Buffers;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Generic;
|
|
-using System.Collections.ObjectModel;
|
|
|
|
using System.Linq;
|
|
using System.Linq;
|
|
using System.Text.RegularExpressions;
|
|
using System.Text.RegularExpressions;
|
|
using System.Windows;
|
|
using System.Windows;
|
|
@@ -78,7 +77,7 @@ namespace PixiEditor.Models.DataHolders
|
|
get => referenceLayerRenderer;
|
|
get => referenceLayerRenderer;
|
|
}
|
|
}
|
|
|
|
|
|
- public Layer ActiveLayer => Layers.Count > 0 ? Layers.FirstOrDefault(x => x.LayerGuid == ActiveLayerGuid) : null;
|
|
|
|
|
|
+ public Layer ActiveLayer => Layers.Count > 0 ? Layers.FirstOrDefault(x => x.GuidValue == ActiveLayerGuid) : null;
|
|
|
|
|
|
public Guid ActiveLayerGuid
|
|
public Guid ActiveLayerGuid
|
|
{
|
|
{
|
|
@@ -111,7 +110,7 @@ namespace PixiEditor.Models.DataHolders
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- ActiveLayerGuid = Layers[index].LayerGuid;
|
|
|
|
|
|
+ ActiveLayerGuid = Layers[index].GuidValue;
|
|
ActiveLayer.IsActive = true;
|
|
ActiveLayer.IsActive = true;
|
|
LayersChanged?.Invoke(this, new LayersChangedEventArgs(ActiveLayerGuid, LayerAction.SetActive));
|
|
LayersChanged?.Invoke(this, new LayersChangedEventArgs(ActiveLayerGuid, LayerAction.SetActive));
|
|
}
|
|
}
|
|
@@ -126,7 +125,7 @@ namespace PixiEditor.Models.DataHolders
|
|
{
|
|
{
|
|
foreach (var layer in Layers)
|
|
foreach (var layer in Layers)
|
|
{
|
|
{
|
|
- if (layer.LayerGuid == ActiveLayerGuid)
|
|
|
|
|
|
+ if (layer.GuidValue == ActiveLayerGuid)
|
|
{
|
|
{
|
|
layer.LayerHighlightColor = MainSelectedLayerColor;
|
|
layer.LayerHighlightColor = MainSelectedLayerColor;
|
|
}
|
|
}
|
|
@@ -141,7 +140,7 @@ namespace PixiEditor.Models.DataHolders
|
|
{
|
|
{
|
|
var args = new object[] { layerGuid, referenceLayer, above };
|
|
var args = new object[] { layerGuid, referenceLayer, above };
|
|
|
|
|
|
- Layer layer = Layers.First(x => x.LayerGuid == layerGuid);
|
|
|
|
|
|
+ Layer layer = Layers.First(x => x.GuidValue == layerGuid);
|
|
|
|
|
|
int oldIndex = Layers.IndexOf(layer);
|
|
int oldIndex = Layers.IndexOf(layer);
|
|
|
|
|
|
@@ -167,8 +166,8 @@ namespace PixiEditor.Models.DataHolders
|
|
{
|
|
{
|
|
var args = new object[] { groupGuid, referenceLayer, above };
|
|
var args = new object[] { groupGuid, referenceLayer, above };
|
|
|
|
|
|
- var topLayer = Layers.First(x => x.LayerGuid == LayerStructure.GetGroupByGuid(groupGuid).EndLayerGuid);
|
|
|
|
- var bottomLayer = Layers.First(x => x.LayerGuid == LayerStructure.GetGroupByGuid(groupGuid).StartLayerGuid);
|
|
|
|
|
|
+ var topLayer = Layers.First(x => x.GuidValue == LayerStructure.GetGroupByGuid(groupGuid).EndLayerGuid);
|
|
|
|
+ var bottomLayer = Layers.First(x => x.GuidValue == LayerStructure.GetGroupByGuid(groupGuid).StartLayerGuid);
|
|
|
|
|
|
int indexOfTopLayer = Layers.IndexOf(topLayer);
|
|
int indexOfTopLayer = Layers.IndexOf(topLayer);
|
|
Guid oldReferenceLayerGuid;
|
|
Guid oldReferenceLayerGuid;
|
|
@@ -176,12 +175,12 @@ namespace PixiEditor.Models.DataHolders
|
|
|
|
|
|
if (indexOfTopLayer + 1 < Layers.Count)
|
|
if (indexOfTopLayer + 1 < Layers.Count)
|
|
{
|
|
{
|
|
- oldReferenceLayerGuid = topLayer.LayerGuid;
|
|
|
|
|
|
+ oldReferenceLayerGuid = topLayer.GuidValue;
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
int indexOfBottomLayer = Layers.IndexOf(bottomLayer);
|
|
int indexOfBottomLayer = Layers.IndexOf(bottomLayer);
|
|
- oldReferenceLayerGuid = Layers[indexOfBottomLayer - 1].LayerGuid;
|
|
|
|
|
|
+ oldReferenceLayerGuid = Layers[indexOfBottomLayer - 1].GuidValue;
|
|
oldAbove = true;
|
|
oldAbove = true;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -241,12 +240,12 @@ namespace PixiEditor.Models.DataHolders
|
|
UndoManager.AddUndoChange(
|
|
UndoManager.AddUndoChange(
|
|
storageChange.ToChange(
|
|
storageChange.ToChange(
|
|
RemoveLayerProcess,
|
|
RemoveLayerProcess,
|
|
- new object[] { Layers[^1].LayerGuid },
|
|
|
|
|
|
+ new object[] { Layers[^1].GuidValue },
|
|
RestoreLayersProcess,
|
|
RestoreLayersProcess,
|
|
"Add layer"));
|
|
"Add layer"));
|
|
}
|
|
}
|
|
|
|
|
|
- LayersChanged?.Invoke(this, new LayersChangedEventArgs(Layers[^1].LayerGuid, LayerAction.Add));
|
|
|
|
|
|
+ LayersChanged?.Invoke(this, new LayersChangedEventArgs(Layers[^1].GuidValue, LayerAction.Add));
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// <summary>
|
|
@@ -267,7 +266,7 @@ namespace PixiEditor.Models.DataHolders
|
|
UndoManager.AddUndoChange(
|
|
UndoManager.AddUndoChange(
|
|
storageChange.ToChange(
|
|
storageChange.ToChange(
|
|
RemoveLayerProcess,
|
|
RemoveLayerProcess,
|
|
- new object[] { duplicate.LayerGuid },
|
|
|
|
|
|
+ new object[] { duplicate.GuidValue },
|
|
RestoreLayersProcess,
|
|
RestoreLayersProcess,
|
|
"Duplicate Layer"));
|
|
"Duplicate Layer"));
|
|
|
|
|
|
@@ -294,9 +293,9 @@ namespace PixiEditor.Models.DataHolders
|
|
var selectedLayers = Layers.Where(x => x.IsActive);
|
|
var selectedLayers = Layers.Where(x => x.IsActive);
|
|
foreach (var layer in selectedLayers)
|
|
foreach (var layer in selectedLayers)
|
|
{
|
|
{
|
|
- if (layer.LayerGuid != lastLayerGuid)
|
|
|
|
|
|
+ if (layer.GuidValue != lastLayerGuid)
|
|
{
|
|
{
|
|
- ActiveLayerGuid = layer.LayerGuid;
|
|
|
|
|
|
+ ActiveLayerGuid = layer.GuidValue;
|
|
LayersChanged?.Invoke(this, new LayersChangedEventArgs(ActiveLayerGuid, LayerAction.SetActive));
|
|
LayersChanged?.Invoke(this, new LayersChangedEventArgs(ActiveLayerGuid, LayerAction.SetActive));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
@@ -313,9 +312,9 @@ namespace PixiEditor.Models.DataHolders
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- if (ActiveLayerGuid == layer.LayerGuid)
|
|
|
|
|
|
+ if (ActiveLayerGuid == layer.GuidValue)
|
|
{
|
|
{
|
|
- SetNextSelectedLayerAsActive(layer.LayerGuid);
|
|
|
|
|
|
+ SetNextSelectedLayerAsActive(layer.GuidValue);
|
|
}
|
|
}
|
|
|
|
|
|
layer.IsActive = !layer.IsActive;
|
|
layer.IsActive = !layer.IsActive;
|
|
@@ -358,7 +357,7 @@ namespace PixiEditor.Models.DataHolders
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- LayerStructure.AssignParent(Layers[layerIndex].LayerGuid, null);
|
|
|
|
|
|
+ LayerStructure.AssignParent(Layers[layerIndex].GuidValue, null);
|
|
|
|
|
|
bool wasActive = Layers[layerIndex].IsActive;
|
|
bool wasActive = Layers[layerIndex].IsActive;
|
|
|
|
|
|
@@ -366,7 +365,7 @@ namespace PixiEditor.Models.DataHolders
|
|
{
|
|
{
|
|
StorageBasedChange change = new(this, new[] { Layers[layerIndex] });
|
|
StorageBasedChange change = new(this, new[] { Layers[layerIndex] });
|
|
UndoManager.AddUndoChange(
|
|
UndoManager.AddUndoChange(
|
|
- change.ToChange(RestoreLayersProcess, RemoveLayerProcess, new object[] { Layers[layerIndex].LayerGuid }));
|
|
|
|
|
|
+ change.ToChange(RestoreLayersProcess, RemoveLayerProcess, new object[] { Layers[layerIndex].GuidValue }));
|
|
}
|
|
}
|
|
|
|
|
|
Layers.RemoveAt(layerIndex);
|
|
Layers.RemoveAt(layerIndex);
|
|
@@ -393,7 +392,7 @@ namespace PixiEditor.Models.DataHolders
|
|
Layer[] layers = Layers.Where(x => x.IsActive).ToArray();
|
|
Layer[] layers = Layers.Where(x => x.IsActive).ToArray();
|
|
int firstIndex = Layers.IndexOf(layers[0]);
|
|
int firstIndex = Layers.IndexOf(layers[0]);
|
|
|
|
|
|
- object[] guidArgs = new object[] { layers.Select(x => x.LayerGuid).ToArray() };
|
|
|
|
|
|
+ object[] guidArgs = new object[] { layers.Select(x => x.GuidValue).ToArray() };
|
|
|
|
|
|
StorageBasedChange change = new(this, layers);
|
|
StorageBasedChange change = new(this, layers);
|
|
|
|
|
|
@@ -440,11 +439,11 @@ namespace PixiEditor.Models.DataHolders
|
|
|
|
|
|
Layer mergedLayer = layersToMerge[0];
|
|
Layer mergedLayer = layersToMerge[0];
|
|
|
|
|
|
- var groupParent = LayerStructure.GetGroupByLayer(layersToMerge[^1].LayerGuid);
|
|
|
|
|
|
+ var groupParent = LayerStructure.GetGroupByLayer(layersToMerge[^1].GuidValue);
|
|
|
|
|
|
Layer placeholderLayer = new("_placeholder");
|
|
Layer placeholderLayer = new("_placeholder");
|
|
Layers.Insert(index, placeholderLayer);
|
|
Layers.Insert(index, placeholderLayer);
|
|
- LayerStructure.AssignParent(placeholderLayer.LayerGuid, groupParent?.GroupGuid);
|
|
|
|
|
|
+ LayerStructure.AssignParent(placeholderLayer.GuidValue, groupParent?.GroupGuid);
|
|
|
|
|
|
for (int i = 0; i < layersToMerge.Length - 1; i++)
|
|
for (int i = 0; i < layersToMerge.Length - 1; i++)
|
|
{
|
|
{
|
|
@@ -455,7 +454,7 @@ namespace PixiEditor.Models.DataHolders
|
|
}
|
|
}
|
|
|
|
|
|
Layers.Insert(index, mergedLayer);
|
|
Layers.Insert(index, mergedLayer);
|
|
- LayerStructure.AssignParent(mergedLayer.LayerGuid, groupParent?.GroupGuid);
|
|
|
|
|
|
+ LayerStructure.AssignParent(mergedLayer.GuidValue, groupParent?.GroupGuid);
|
|
|
|
|
|
RemoveLayer(placeholderLayer, false);
|
|
RemoveLayer(placeholderLayer, false);
|
|
RemoveLayer(layersToMerge[^1], false);
|
|
RemoveLayer(layersToMerge[^1], false);
|
|
@@ -488,7 +487,7 @@ namespace PixiEditor.Models.DataHolders
|
|
InsertLayersAtIndexesProcess,
|
|
InsertLayersAtIndexesProcess,
|
|
new object[] { indexes[0] },
|
|
new object[] { indexes[0] },
|
|
MergeLayersProcess,
|
|
MergeLayersProcess,
|
|
- new object[] { indexes, nameIsLastLayers, layer.LayerGuid }));
|
|
|
|
|
|
+ new object[] { indexes, nameIsLastLayers, layer.GuidValue }));
|
|
|
|
|
|
UndoManager.SquashUndoChanges(2, "Undo merge layers");
|
|
UndoManager.SquashUndoChanges(2, "Undo merge layers");
|
|
|
|
|
|
@@ -531,13 +530,13 @@ namespace PixiEditor.Models.DataHolders
|
|
int indexTo = (int)props[0];
|
|
int indexTo = (int)props[0];
|
|
Guid layerGuid = (Guid)props[1];
|
|
Guid layerGuid = (Guid)props[1];
|
|
|
|
|
|
- Guid layerAtOldIndex = Layers[indexTo].LayerGuid;
|
|
|
|
|
|
+ Guid layerAtOldIndex = Layers[indexTo].GuidValue;
|
|
|
|
|
|
var startGroup = LayerStructure.GetGroupByLayer(layerGuid);
|
|
var startGroup = LayerStructure.GetGroupByLayer(layerGuid);
|
|
|
|
|
|
LayerStructure.PreMoveReassignBounds(new GroupData(startGroup?.GroupGuid), layerGuid);
|
|
LayerStructure.PreMoveReassignBounds(new GroupData(startGroup?.GroupGuid), layerGuid);
|
|
|
|
|
|
- Layers.Move(Layers.IndexOf(Layers.First(x => x.LayerGuid == layerGuid)), indexTo);
|
|
|
|
|
|
+ Layers.Move(Layers.IndexOf(Layers.First(x => x.GuidValue == layerGuid)), indexTo);
|
|
|
|
|
|
var newGroup = LayerStructure.GetGroupByLayer(layerAtOldIndex);
|
|
var newGroup = LayerStructure.GetGroupByLayer(layerAtOldIndex);
|
|
|
|
|
|
@@ -607,7 +606,7 @@ namespace PixiEditor.Models.DataHolders
|
|
Layers.Insert(data[i].LayerIndex, layer);
|
|
Layers.Insert(data[i].LayerIndex, layer);
|
|
}
|
|
}
|
|
|
|
|
|
- ActiveLayerGuid = layers.First(x => x.LayerHighlightColor == MainSelectedLayerColor).LayerGuid;
|
|
|
|
|
|
+ ActiveLayerGuid = layers.First(x => x.LayerHighlightColor == MainSelectedLayerColor).GuidValue;
|
|
// Identifying main layer by highlightColor is a bit hacky, but shhh
|
|
// Identifying main layer by highlightColor is a bit hacky, but shhh
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -645,15 +644,15 @@ namespace PixiEditor.Models.DataHolders
|
|
GuidStructureItem group = LayerStructure.GetGroupByGuid(groupGuid);
|
|
GuidStructureItem group = LayerStructure.GetGroupByGuid(groupGuid);
|
|
GuidStructureItem referenceLayerGroup = LayerStructure.GetGroupByLayer(referenceLayerGuid);
|
|
GuidStructureItem referenceLayerGroup = LayerStructure.GetGroupByLayer(referenceLayerGuid);
|
|
|
|
|
|
- Layer referenceLayer = Layers.First(x => x.LayerGuid == referenceLayerGuid);
|
|
|
|
|
|
+ Layer referenceLayer = Layers.First(x => x.GuidValue == referenceLayerGuid);
|
|
|
|
|
|
int layerIndex = Layers.IndexOf(referenceLayer);
|
|
int layerIndex = Layers.IndexOf(referenceLayer);
|
|
- int folderTopIndex = Layers.IndexOf(Layers.First(x => x.LayerGuid == group?.EndLayerGuid));
|
|
|
|
|
|
+ int folderTopIndex = Layers.IndexOf(Layers.First(x => x.GuidValue == group?.EndLayerGuid));
|
|
int oldIndex = folderTopIndex;
|
|
int oldIndex = folderTopIndex;
|
|
|
|
|
|
if (layerIndex < folderTopIndex)
|
|
if (layerIndex < folderTopIndex)
|
|
{
|
|
{
|
|
- int folderBottomIndex = Layers.IndexOf(Layers.First(x => x.LayerGuid == group.StartLayerGuid));
|
|
|
|
|
|
+ int folderBottomIndex = Layers.IndexOf(Layers.First(x => x.GuidValue == group.StartLayerGuid));
|
|
oldIndex = folderBottomIndex;
|
|
oldIndex = folderBottomIndex;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -690,8 +689,8 @@ namespace PixiEditor.Models.DataHolders
|
|
Guid referenceLayer = (Guid)parameter[1];
|
|
Guid referenceLayer = (Guid)parameter[1];
|
|
bool above = (bool)parameter[2];
|
|
bool above = (bool)parameter[2];
|
|
|
|
|
|
- int layerIndex = Layers.IndexOf(Layers.First(x => x.LayerGuid == referenceLayer));
|
|
|
|
- int oldIndex = Layers.IndexOf(Layers.First(x => x.LayerGuid == layer));
|
|
|
|
|
|
+ int layerIndex = Layers.IndexOf(Layers.First(x => x.GuidValue == referenceLayer));
|
|
|
|
+ int oldIndex = Layers.IndexOf(Layers.First(x => x.GuidValue == layer));
|
|
int newIndex = CalculateNewIndex(layerIndex, above, oldIndex);
|
|
int newIndex = CalculateNewIndex(layerIndex, above, oldIndex);
|
|
|
|
|
|
var startGroup = LayerStructure.GetGroupByLayer(layer);
|
|
var startGroup = LayerStructure.GetGroupByLayer(layer);
|
|
@@ -710,6 +709,7 @@ namespace PixiEditor.Models.DataHolders
|
|
}
|
|
}
|
|
|
|
|
|
RaisePropertyChanged(nameof(LayerStructure));
|
|
RaisePropertyChanged(nameof(LayerStructure));
|
|
|
|
+ Renderer.ForceRerender();
|
|
}
|
|
}
|
|
|
|
|
|
private void RestoreLayersProcess(Layer[] layers, UndoLayer[] layersData)
|
|
private void RestoreLayersProcess(Layer[] layers, UndoLayer[] layersData)
|
|
@@ -730,19 +730,19 @@ namespace PixiEditor.Models.DataHolders
|
|
{
|
|
{
|
|
if (parameters is { Length: > 0 } && parameters[0] is Guid layerGuid)
|
|
if (parameters is { Length: > 0 } && parameters[0] is Guid layerGuid)
|
|
{
|
|
{
|
|
- Layer layer = Layers.First(x => x.LayerGuid == layerGuid);
|
|
|
|
|
|
+ Layer layer = Layers.First(x => x.GuidValue == layerGuid);
|
|
int index = Layers.IndexOf(layer);
|
|
int index = Layers.IndexOf(layer);
|
|
bool wasActive = layer.IsActive;
|
|
bool wasActive = layer.IsActive;
|
|
|
|
|
|
- var layerGroup = LayerStructure.GetGroupByLayer(layer.LayerGuid);
|
|
|
|
|
|
+ var layerGroup = LayerStructure.GetGroupByLayer(layer.GuidValue);
|
|
|
|
|
|
LayerStructure.ExpandParentGroups(layerGroup);
|
|
LayerStructure.ExpandParentGroups(layerGroup);
|
|
|
|
|
|
- if (layerGroup?.Parent != null && LayerStructure.GroupContainsOnlyLayer(layer.LayerGuid, layerGroup))
|
|
|
|
|
|
+ if (layerGroup?.Parent != null && LayerStructure.GroupContainsOnlyLayer(layer.GuidValue, layerGroup))
|
|
{
|
|
{
|
|
LayerStructure.PreMoveReassignBounds(new GroupData(layerGroup.Parent.GroupGuid), new GroupData(layerGroup.GroupGuid));
|
|
LayerStructure.PreMoveReassignBounds(new GroupData(layerGroup.Parent.GroupGuid), new GroupData(layerGroup.GroupGuid));
|
|
}
|
|
}
|
|
- LayerStructure.AssignParent(Layers[index].LayerGuid, null);
|
|
|
|
|
|
+ LayerStructure.AssignParent(Layers[index].GuidValue, null);
|
|
RemoveGroupsIfEmpty(layer, layerGroup);
|
|
RemoveGroupsIfEmpty(layer, layerGroup);
|
|
|
|
|
|
Layers.Remove(layer);
|
|
Layers.Remove(layer);
|
|
@@ -758,7 +758,7 @@ namespace PixiEditor.Models.DataHolders
|
|
|
|
|
|
private void RemoveGroupsIfEmpty(Layer layer, GuidStructureItem layerGroup)
|
|
private void RemoveGroupsIfEmpty(Layer layer, GuidStructureItem layerGroup)
|
|
{
|
|
{
|
|
- if (LayerStructure.GroupContainsOnlyLayer(layer.LayerGuid, layerGroup))
|
|
|
|
|
|
+ if (LayerStructure.GroupContainsOnlyLayer(layer.GuidValue, layerGroup))
|
|
{
|
|
{
|
|
if (layerGroup.Parent != null)
|
|
if (layerGroup.Parent != null)
|
|
{
|
|
{
|