Przeglądaj źródła

Added shared toolbar settings

flabbet 5 lat temu
rodzic
commit
4e23d1d06f

+ 12 - 2
PixiEditor/Models/Controllers/BitmapOperationsUtility.cs

@@ -22,8 +22,8 @@ namespace PixiEditor.Models.Controllers
         public Tool SelectedTool
         {
             get => _selectedTool;
-            set
-            {
+            private set
+            {                
                 _selectedTool = value;
                 RaisePropertyChanged("SelectedTool");
             }
@@ -81,6 +81,16 @@ namespace PixiEditor.Models.Controllers
             MouseController.StoppedRecordingChanges += MouseController_StoppedRecordingChanges;
         }
 
+        public void SetActiveTool(Tool tool)
+        {
+            if (SelectedTool != null)
+            {
+                SelectedTool.Toolbar.SaveToolbarSettings();
+            }
+            SelectedTool = tool;
+            SelectedTool.Toolbar.LoadSharedSettings();
+        }
+
         private void MouseController_StartedRecordingChanges(object sender, EventArgs e)
         {
             if (PreviewLayer != null)

+ 1 - 1
PixiEditor/Models/Tools/Tool.cs

@@ -27,6 +27,6 @@ namespace PixiEditor.Models.Tools
         }
 
         public Cursor Cursor { get; set; } = Cursors.Arrow;
-        public Toolbar Toolbar { get; set; }
+        public Toolbar Toolbar { get; set; } = new EmptyToolbar();
     }
 }

+ 0 - 16
PixiEditor/Models/Tools/ToolSettings/Toolbar.cs

@@ -1,16 +0,0 @@
-using System.Collections.ObjectModel;
-using System.Linq;
-using System.Windows.Controls;
-
-namespace PixiEditor.Models.Tools.ToolSettings
-{
-    public abstract class Toolbar
-    {
-        public ObservableCollection<Setting> Settings { get; set; } = new ObservableCollection<Setting>();
-
-        public virtual Setting GetSetting(string name)
-        {
-            return Settings.FirstOrDefault(x => x.Name == name);
-        }
-    }
-}

+ 0 - 0
PixiEditor/Models/Tools/ToolSettings/BasicShapeToolbar.cs → PixiEditor/Models/Tools/ToolSettings/Toolbars/BasicShapeToolbar.cs


+ 0 - 0
PixiEditor/Models/Tools/ToolSettings/BasicToolbar.cs → PixiEditor/Models/Tools/ToolSettings/Toolbars/BasicToolbar.cs


+ 11 - 0
PixiEditor/Models/Tools/ToolSettings/Toolbars/EmptyToolbar.cs

@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace PixiEditor.Models.Tools.ToolSettings
+{
+    public class EmptyToolbar : Toolbar
+    {
+
+    }
+}

+ 49 - 0
PixiEditor/Models/Tools/ToolSettings/Toolbars/Toolbar.cs

@@ -0,0 +1,49 @@
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Windows.Controls;
+
+namespace PixiEditor.Models.Tools.ToolSettings
+{
+    public abstract class Toolbar
+    {
+        public ObservableCollection<Setting> Settings { get; set; } = new ObservableCollection<Setting>();
+        private static List<Setting> _sharedSettings = new List<Setting>();
+
+        public virtual Setting GetSetting(string name)
+        {
+            return Settings.FirstOrDefault(x => x.Name == name);
+        }
+
+        /// <summary>
+        /// Saves current toolbar state, so other toolbars with common settings can load them.
+        /// </summary>
+        public void SaveToolbarSettings()
+        {
+            for (int i = 0; i < Settings.Count; i++)
+            {
+                if(_sharedSettings.Any(x=> x.Name == Settings[i].Name))
+                {
+                    _sharedSettings.First(x => x.Name == Settings[i].Name).Value = Settings[i].Value;
+                }
+                else
+                {
+                    _sharedSettings.Add(Settings[i]);
+                }
+
+
+            }
+        }
+
+        public void LoadSharedSettings()
+        {
+            for (int i = 0; i < _sharedSettings.Count; i++)
+            {
+                if(Settings.Any(x=> x.Name == _sharedSettings[i].Name))
+                {
+                    Settings.First(x => x.Name == _sharedSettings[i].Name).Value = _sharedSettings[i].Value;
+                }
+            }
+        }
+    }
+}

+ 5 - 2
PixiEditor/Models/Tools/Tools/BrightnessTool.cs

@@ -1,6 +1,7 @@
 using PixiEditor.Models.Colors;
 using PixiEditor.Models.Layers;
 using PixiEditor.Models.Position;
+using PixiEditor.Models.Tools.ToolSettings;
 using System.Collections.Generic;
 using System.Windows.Input;
 using System.Windows.Media;
@@ -17,15 +18,17 @@ namespace PixiEditor.Models.Tools.Tools
         public BrightnessTool()
         {
             Tooltip = "Makes pixel brighter or darker pixel (U)";
+            Toolbar = new BasicToolbar();
         }
 
         public override BitmapPixelChanges Use(Layer layer, Coordinates[] coordinates, Color color)
         {
+            int toolSize = (int)Toolbar.GetSetting("ToolSize").Value;
             if(Keyboard.IsKeyDown(Key.LeftCtrl))
             {
-                return ChangeBrightness(layer, coordinates[0], 1, DarkenFactor);
+                return ChangeBrightness(layer, coordinates[0], toolSize, DarkenFactor);
             }
-                return ChangeBrightness(layer, coordinates[0], 1, LightenFactor);
+                return ChangeBrightness(layer, coordinates[0], toolSize, LightenFactor);
         }       
 
         private BitmapPixelChanges ChangeBrightness(Layer layer, Coordinates coordinates, int toolSize, float correctionFactor)

+ 3 - 1
PixiEditor/Models/Tools/Tools/EarserTool.cs

@@ -1,5 +1,6 @@
 using PixiEditor.Models.Layers;
 using PixiEditor.Models.Position;
+using PixiEditor.Models.Tools.ToolSettings;
 using System;
 using System.Collections.Generic;
 using System.Text;
@@ -14,12 +15,13 @@ namespace PixiEditor.Models.Tools.Tools
         public EarserTool()
         {
             Tooltip = "Earsers color from pixel (E)";
+            Toolbar = new BasicToolbar();
         }
 
         public override BitmapPixelChanges Use(Layer layer, Coordinates[] coordinates, Color color)
         {
             PenTool pen = new PenTool();
-            return pen.Draw(coordinates[0], System.Windows.Media.Colors.Transparent, 1);
+            return pen.Draw(coordinates[0], System.Windows.Media.Colors.Transparent, (int)Toolbar.GetSetting("ToolSize").Value);
         }
     }
 }

+ 1 - 1
PixiEditor/ViewModels/ViewModelMain.cs

@@ -298,7 +298,7 @@ namespace PixiEditor.ViewModels
 
         private void SetActiveTool(ToolType tool)
         {
-            BitmapUtility.SelectedTool = ToolSet.First(x=> x.ToolType == tool);
+            BitmapUtility.SetActiveTool(ToolSet.First(x=> x.ToolType == tool));
             Tool activeTool = ToolSet.FirstOrDefault(x => x.IsActive);
             if(activeTool != null)
             {