Browse Source

Toolbar works

flabbet 5 years ago
parent
commit
46c4fae50e

+ 1 - 1
PixiEditor/Helpers/Behaviours/TextBoxNumericFinisherBehavior.cs

@@ -53,7 +53,7 @@ namespace PixiEditor.Helpers.Behaviours
         private void ConvertValue()
         {
             if (_valueConverted == true) return;
-            if (int.TryParse(AssociatedObject.Text, out int result) == true)
+            if (int.TryParse(AssociatedObject.Text, out _) == true)
             {
                 AssociatedObject.Text = string.Format("{0} {1}", AssociatedObject.Text, "px");
             }

+ 3 - 0
PixiEditor/Helpers/Converters/ToolSizeToIntConverter.cs

@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using System.Globalization;
 using System.Linq;
 using System.Text;
+using System.Text.RegularExpressions;
 using System.Threading.Tasks;
 using System.Windows.Data;
 
@@ -20,6 +21,8 @@ namespace PixiEditor.Helpers
         {
             if (string.IsNullOrWhiteSpace(value as string)) return null;
             string slicedString = value.ToString().Split(' ').First();
+            slicedString = Regex.Replace(slicedString, "[^0-9.]", "");
+            if (slicedString == "") return null;
             return int.Parse(slicedString);
         }
     }

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

@@ -125,7 +125,7 @@ namespace PixiEditor.Models.Controllers
             }
             if (!SelectedTool.RequiresPreviewLayer)
             {
-                BitmapPixelChanges changedPixels = SelectedTool.Use(Layers[ActiveLayerIndex], mouseMoveCords.ToArray(), PrimaryColor, ToolSize);
+                BitmapPixelChanges changedPixels = SelectedTool.Use(Layers[ActiveLayerIndex], mouseMoveCords.ToArray(), PrimaryColor);
                 BitmapPixelChanges oldPixelsValues = GetOldPixelsValues(changedPixels.ChangedPixels.Keys.ToArray());
                 ActiveLayer.ApplyPixels(changedPixels);
                 BitmapChanged?.Invoke(this, new BitmapChangedEventArgs(changedPixels, oldPixelsValues, ActiveLayerIndex));
@@ -183,7 +183,7 @@ namespace PixiEditor.Models.Controllers
             {
                 GeneratePreviewLayer();
                 PreviewLayer.Clear();
-                changedPixels = SelectedTool.Use(Layers[ActiveLayerIndex], mouseMove.ToArray(), PrimaryColor, ToolSize);
+                changedPixels = SelectedTool.Use(Layers[ActiveLayerIndex], mouseMove.ToArray(), PrimaryColor);
                 PreviewLayer.ApplyPixels(changedPixels);
                 _lastChangedPixels = changedPixels;
             }

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

@@ -13,7 +13,7 @@ namespace PixiEditor.Models.Tools
     {
         public override abstract ToolType ToolType { get; }
 
-        public abstract override BitmapPixelChanges Use(Layer layer, Coordinates[] coordinates, Color color, int toolSize);
+        public abstract override BitmapPixelChanges Use(Layer layer, Coordinates[] coordinates, Color color);
 
         public ShapeTool()
         {

+ 4 - 2
PixiEditor/Models/Tools/Tool.cs

@@ -1,6 +1,7 @@
 using PixiEditor.Helpers;
 using PixiEditor.Models.Layers;
 using PixiEditor.Models.Position;
+using PixiEditor.Models.Tools.ToolSettings;
 using System.Windows.Input;
 using System.Windows.Media;
 
@@ -8,9 +9,9 @@ namespace PixiEditor.Models.Tools
 {
     public abstract class Tool : NotifyableObject
     {
-        public abstract BitmapPixelChanges Use(Layer layer, Coordinates[] pixels, Color color, int toolSize);
+        public abstract BitmapPixelChanges Use(Layer layer, Coordinates[] pixels, Color color);
         public abstract ToolType ToolType { get; }
-        public string ImagePath => $"/Images/{ToolType.ToString()}Image.png";
+        public string ImagePath => $"/Images/{ToolType}Image.png";
         public bool RequiresPreviewLayer { get; set; }
         public string Tooltip { get; set; }
 
@@ -26,5 +27,6 @@ namespace PixiEditor.Models.Tools
         }
 
         public Cursor Cursor { get; set; } = Cursors.Arrow;
+        public Toolbar Toolbar { get; set; }
     }
 }

+ 17 - 0
PixiEditor/Models/Tools/ToolSettings/BasicToolbar.cs

@@ -0,0 +1,17 @@
+using PixiEditor.Models.Tools.ToolSettings.Settings;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Text;
+using System.Windows.Controls;
+
+namespace PixiEditor.Models.Tools.ToolSettings
+{
+    public class BasicToolbar : Toolbar
+    {
+        public BasicToolbar()
+        {
+            Settings.Add(new SizeSetting("ToolSize"));
+        }
+    }
+}

+ 27 - 0
PixiEditor/Models/Tools/ToolSettings/Settings/Setting.cs

@@ -0,0 +1,27 @@
+using PixiEditor.Helpers;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Controls;
+
+namespace PixiEditor.Models.Tools.ToolSettings
+{
+    public abstract class Setting : NotifyableObject
+    {
+        public string Name { get; protected set; }
+        private object value;
+        public object Value { get => value;
+            set
+            {
+                this.value = value;
+                RaisePropertyChanged("Value");
+            }
+        }
+        public Control SettingControl { get; set; }
+
+        public Setting(string name)
+        {
+            Name = name;
+        }
+	}
+}

+ 42 - 0
PixiEditor/Models/Tools/ToolSettings/Settings/SizeSetting.cs

@@ -0,0 +1,42 @@
+using PixiEditor.Helpers;
+using PixiEditor.Helpers.Behaviours;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Interactivity;
+
+namespace PixiEditor.Models.Tools.ToolSettings.Settings
+{
+    public class SizeSetting : Setting
+    {
+        public SizeSetting(string name) : base(name)
+        {
+            Value = 1;
+            SettingControl = GenerateTextBox();
+        }
+
+        private TextBox GenerateTextBox()
+        {
+            TextBox tb = new TextBox()
+            {
+                Style = Application.Current.FindResource("DarkTextBoxStyle") as Style,
+                TextAlignment = TextAlignment.Center,
+                MaxLength = 4,
+                Width = 40,
+            };
+            //TextBoxNumericFinisherBehavior behavor = new TextBoxNumericFinisherBehavior();
+            //Interaction.GetBehaviors(tb).Add(behavor);
+            Binding binding = new Binding("Value")
+            {
+                Converter = new ToolSizeToIntConverter(),
+                Mode = BindingMode.TwoWay,
+                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
+            };
+            tb.SetBinding(TextBox.TextProperty, binding);
+            return tb;
+        }
+    }
+}

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

@@ -0,0 +1,16 @@
+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.First(x => x.Name == name);
+        }
+    }
+}

+ 3 - 3
PixiEditor/Models/Tools/Tools/BrightnessTool.cs

@@ -19,13 +19,13 @@ namespace PixiEditor.Models.Tools.Tools
             Tooltip = "Makes pixel brighter or darker pixel (U)";
         }
 
-        public override BitmapPixelChanges Use(Layer layer, Coordinates[] coordinates, Color color, int toolSize)
+        public override BitmapPixelChanges Use(Layer layer, Coordinates[] coordinates, Color color)
         {
             if(Keyboard.IsKeyDown(Key.LeftCtrl))
             {
-                return ChangeBrightness(layer, coordinates[0], toolSize, DarkenFactor);
+                return ChangeBrightness(layer, coordinates[0], 1, DarkenFactor);
             }
-                return ChangeBrightness(layer, coordinates[0], toolSize, LightenFactor);
+                return ChangeBrightness(layer, coordinates[0], 1, LightenFactor);
         }       
 
         private BitmapPixelChanges ChangeBrightness(Layer layer, Coordinates coordinates, int toolSize, float correctionFactor)

+ 2 - 2
PixiEditor/Models/Tools/Tools/CircleTool.cs

@@ -18,10 +18,10 @@ namespace PixiEditor.Models.Tools.Tools
             Tooltip = "Draws circle on cavnas (C)";
         }
 
-        public override BitmapPixelChanges Use(Layer layer, Coordinates[] coordinates, Color color, int toolSize)
+        public override BitmapPixelChanges Use(Layer layer, Coordinates[] coordinates, Color color)
         {
             DoubleCords fixedCoordinates = CalculateCoordinatesForShapeRotation(coordinates[^1], coordinates[0]);
-            return BitmapPixelChanges.FromSingleColoredArray(CreateEllipse(fixedCoordinates.Coords1, fixedCoordinates.Coords2, false, toolSize), color);
+            return BitmapPixelChanges.FromSingleColoredArray(CreateEllipse(fixedCoordinates.Coords1, fixedCoordinates.Coords2, false, 1), color);
         }
 
         public Coordinates[] CreateEllipse(Coordinates startCoordinates, Coordinates endCoordinates, bool filled, int thickness)

+ 2 - 2
PixiEditor/Models/Tools/Tools/EarserTool.cs

@@ -16,10 +16,10 @@ namespace PixiEditor.Models.Tools.Tools
             Tooltip = "Earsers color from pixel (E)";
         }
 
-        public override BitmapPixelChanges Use(Layer layer, Coordinates[] coordinates, Color color, int toolSize)
+        public override BitmapPixelChanges Use(Layer layer, Coordinates[] coordinates, Color color)
         {
             PenTool pen = new PenTool();
-            return pen.Draw(coordinates[0], System.Windows.Media.Colors.Transparent, toolSize);
+            return pen.Draw(coordinates[0], System.Windows.Media.Colors.Transparent, 1);
         }
     }
 }

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

@@ -16,7 +16,7 @@ namespace PixiEditor.Models.Tools.Tools
             Tooltip = "Fills area with color (G)";
         }
 
-        public override BitmapPixelChanges Use(Layer layer, Coordinates[] coordinates, Color color, int toolSize)
+        public override BitmapPixelChanges Use(Layer layer, Coordinates[] coordinates, Color color)
         {
             return ForestFire(layer, coordinates[0], color);
         }

+ 2 - 2
PixiEditor/Models/Tools/Tools/LineTool.cs

@@ -18,9 +18,9 @@ namespace PixiEditor.Models.Tools.Tools
             Tooltip = "Draws line on canvas (L)";
         }
 
-        public override BitmapPixelChanges Use(Layer layer, Coordinates[] coordinates, Color color, int toolSize)
+        public override BitmapPixelChanges Use(Layer layer, Coordinates[] coordinates, Color color)
         {
-            return BitmapPixelChanges.FromSingleColoredArray(CreateLine(coordinates, toolSize), color);
+            return BitmapPixelChanges.FromSingleColoredArray(CreateLine(coordinates, 1), color);
         }
 
         public Coordinates[] CreateLine(Coordinates[] coordinates, int thickness)

+ 4 - 5
PixiEditor/Models/Tools/Tools/PenTool.cs

@@ -1,8 +1,6 @@
 using PixiEditor.Models.Layers;
 using PixiEditor.Models.Position;
-using System;
-using System.Collections.Generic;
-using System.Text;
+using PixiEditor.Models.Tools.ToolSettings;
 using System.Windows.Input;
 using System.Windows.Media;
 
@@ -16,11 +14,12 @@ namespace PixiEditor.Models.Tools.Tools
         {
             Cursor = Cursors.Pen;
             Tooltip = "Standard brush (B)";
+            Toolbar = new BasicToolbar();
         }
 
-        public override BitmapPixelChanges Use(Layer layer, Coordinates[] coordinates, Color color, int toolSize)
+        public override BitmapPixelChanges Use(Layer layer, Coordinates[] coordinates, Color color)
         {
-            return Draw(coordinates[0], color, toolSize);
+            return Draw(coordinates[0], color, (int)Toolbar.GetSetting("ToolSize").Value);
         }
 
         public BitmapPixelChanges Draw(Coordinates startingCoords, Color color, int toolSize)

+ 2 - 2
PixiEditor/Models/Tools/Tools/RectangleTool.cs

@@ -17,9 +17,9 @@ namespace PixiEditor.Models.Tools.Tools
             Tooltip = "Draws rectanlge on cavnas (R)";
         }
 
-        public override BitmapPixelChanges Use(Layer layer, Coordinates[] coordinates, Color color, int toolSize)
+        public override BitmapPixelChanges Use(Layer layer, Coordinates[] coordinates, Color color)
         {
-            return BitmapPixelChanges.FromSingleColoredArray(CreateRectangle(coordinates, toolSize), color);
+            return BitmapPixelChanges.FromSingleColoredArray(CreateRectangle(coordinates, 1), color);
         }
 
         public Coordinates[] CreateRectangle(Coordinates[] coordinates, int thickness)

+ 1 - 0
PixiEditor/ViewModels/ViewModelMain.cs

@@ -41,6 +41,7 @@ namespace PixiEditor.ViewModels
         public RelayCommand MoveToFrontCommand { get; set; }
         public RelayCommand SwapColorsCommand { get; set; }
 
+
         private double _mouseXonCanvas;
 
         public double MouseXOnCanvas //Mouse X coordinate relative to canvas

+ 9 - 1
PixiEditor/Views/MainWindow.xaml

@@ -70,7 +70,15 @@
                 </vws:MenuButton.Item>
             </vws:MenuButton>
         </WrapPanel>
-        <StackPanel Background="#404040" Orientation="Horizontal" Grid.ColumnSpan="2" Margin="0,30,0,0" Grid.RowSpan="2"/>
+        <StackPanel Background="#404040" Orientation="Horizontal" Grid.ColumnSpan="2" Margin="0,30,0,0" Grid.RowSpan="2">
+            <ItemsControl ItemsSource="{Binding BitmapUtility.SelectedTool.Toolbar.Settings}">
+                <ItemsControl.ItemTemplate>
+                    <DataTemplate>
+                        <ContentPresenter Content="{Binding SettingControl}"/>
+                    </DataTemplate>
+                </ItemsControl.ItemTemplate>
+            </ItemsControl>
+        </StackPanel>
         <Grid Grid.Column="1" Grid.Row="2" Background="#303030" Margin="0,7,5,0">
             <Grid>
                 <vws:MainDrawingPanel x:Name="DrawingPanel" CenterOnStart="True" Cursor="{Binding ToolCursor}">