Browse Source

Fixed multiple layers selected bug, draw undo record and move layer loop

flabbet 4 years ago
parent
commit
cbf370bfdc

+ 2 - 2
PixiEditor/Models/Controllers/UndoManager.cs

@@ -39,9 +39,9 @@ namespace PixiEditor.Models.Controllers
         /// <summary>
         ///     Adds property change to UndoStack.
         /// </summary>
-        public void AddUndoChange(Change change)
+        public void AddUndoChange(Change change, bool invokedInsideSetter = false)
         {
-            if (change.Property != null && ChangeIsBlockedProperty(change))
+            if (change.Property != null && (ChangeIsBlockedProperty(change) && invokedInsideSetter == true))
             {
                 newUndoChangeBlockedProperty = null;
                 return;

+ 9 - 7
PixiEditor/Models/DataHolders/Document.cs

@@ -288,7 +288,8 @@ namespace PixiEditor.Models.DataHolders
 
             if (Layers.Any(x => x.IsActive))
             {
-                Layers.First(x => x.IsActive).IsActive = false;
+                var guids = Layers.Where(x => x.IsActive).Select(y => y.LayerGuid);
+                guids.ToList().ForEach(x => Layers.First(layer => layer.LayerGuid == x).IsActive = false);
             }
 
             ActiveLayerIndex = index;
@@ -298,11 +299,7 @@ namespace PixiEditor.Models.DataHolders
 
         public void MoveLayerIndexBy(int layerIndex, int amount)
         {
-            Layers.Move(layerIndex, layerIndex + amount);
-            if (ActiveLayerIndex == layerIndex)
-            {
-                SetActiveLayer(layerIndex + amount);
-            }
+            MoveLayerProcess(new object[] { layerIndex, amount });
 
             UndoManager.AddUndoChange(new Change(
                 MoveLayerProcess,
@@ -478,7 +475,12 @@ namespace PixiEditor.Models.DataHolders
         {
             int layerIndex = (int)parameter[0];
             int amount = (int)parameter[1];
-            MoveLayerIndexBy(layerIndex, amount);
+
+            Layers.Move(layerIndex, layerIndex + amount);
+            if (ActiveLayerIndex == layerIndex)
+            {
+                SetActiveLayer(layerIndex + amount);
+            }
         }
 
         private void RestoreLayersProcess(Layer[] layers, UndoLayer[] layersData)

+ 4 - 3
PixiEditor/Models/Layers/Layer.cs

@@ -93,7 +93,7 @@ namespace PixiEditor.Models.Layers
                             value,
                             LayerHelper.FindLayerByGuidProcess,
                             new object[] { LayerGuid },
-                            "Change layer visibility"));
+                            "Change layer visibility"), true);
                     isVisible = value;
                     RaisePropertyChanged("IsVisible");
                 }
@@ -128,13 +128,14 @@ namespace PixiEditor.Models.Layers
                 if (opacity != value)
                 {
                     ViewModelMain.Current?.BitmapManager?.ActiveDocument?.UndoManager
-                        .AddUndoChange(new Change(
+                        .AddUndoChange(
+                            new Change(
                             nameof(Opacity),
                             opacity,
                             value,
                             LayerHelper.FindLayerByGuidProcess,
                             new object[] { LayerGuid },
-                            "Change layer opacity"));
+                            "Change layer opacity"), true);
                     opacity = value;
                     RaisePropertyChanged("Opacity");
                 }