Browse Source

Added circle settings

flabbet 5 years ago
parent
commit
e264b094fc

+ 13 - 2
PixiEditor/Helpers/Extensions/DictionaryHelper.cs

@@ -4,11 +4,22 @@ namespace PixiEditor.Helpers.Extensions
 {
     public static class DictionaryHelper
     {
-        public static void AddRangeOverride<TKey, TValue>(this IDictionary<TKey, TValue> dic, IDictionary<TKey, TValue> dictToAdd)
+        public static void AddRangeOverride<TKey, TValue>(this IDictionary<TKey, TValue> dict, IDictionary<TKey, TValue> dictToAdd)
         {
             foreach (var item in dictToAdd)
             {
-                dic[item.Key] = item.Value;
+                dict[item.Key] = item.Value;
+            }
+        }
+
+        public static void AddRangeNewOnly<TKey, TValue>(this IDictionary<TKey, TValue> dict, IDictionary<TKey, TValue> dictToAdd)
+        {
+            foreach (var item in dictToAdd)
+            {
+                if (!dict.ContainsKey(item.Key))
+                {
+                    dict.Add(item.Key, item.Value);
+                }
             }
         }
     }

+ 14 - 9
PixiEditor/Models/Tools/Tools/CircleTool.cs

@@ -1,4 +1,5 @@
-using PixiEditor.Models.ImageManipulation;
+using PixiEditor.Helpers.Extensions;
+using PixiEditor.Models.ImageManipulation;
 using PixiEditor.Models.Layers;
 using PixiEditor.Models.Position;
 using System;
@@ -20,12 +21,21 @@ namespace PixiEditor.Models.Tools.Tools
 
         public override BitmapPixelChanges Use(Layer layer, Coordinates[] coordinates, Color color)
         {
+            int thickness = (int)Toolbar.GetSetting("ToolSize").Value;
             DoubleCords fixedCoordinates = CalculateCoordinatesForShapeRotation(coordinates[^1], coordinates[0]);
-            return BitmapPixelChanges.FromSingleColoredArray(
-                CreateEllipse(fixedCoordinates.Coords1, fixedCoordinates.Coords2, false, (int)Toolbar.GetSetting("ToolSize").Value), color);
+            Coordinates[] outline = CreateEllipse(fixedCoordinates.Coords1, fixedCoordinates.Coords2, thickness);
+            BitmapPixelChanges pixels = BitmapPixelChanges.FromSingleColoredArray(outline, color);
+            if ((bool)Toolbar.GetSetting("Fill").Value)
+            {
+                Color fillColor = (Color)Toolbar.GetSetting("FillColor").Value;
+                pixels.ChangedPixels.AddRangeNewOnly(
+                    BitmapPixelChanges.FromSingleColoredArray(CalculateFillForEllipse(outline), fillColor).ChangedPixels);
+            }
+
+            return pixels;
         }
 
-        public Coordinates[] CreateEllipse(Coordinates startCoordinates, Coordinates endCoordinates, bool filled, int thickness)
+        public Coordinates[] CreateEllipse(Coordinates startCoordinates, Coordinates endCoordinates, int thickness)
         {
             Coordinates centerCoordinates = CoordinatesCalculator.GetCenterPoint(startCoordinates, endCoordinates);
             int radiusX = endCoordinates.X - centerCoordinates.X;
@@ -40,11 +50,6 @@ namespace PixiEditor.Models.Tools.Tools
             {
                 output.AddRange(GetThickShape(ellipse, thickness));
             }
-
-            if (filled)
-            {
-                output.AddRange(CalculateFillForEllipse(ellipse));
-            }
             return output.Distinct().ToArray();
         }