Răsfoiți Sursa

Fixed shapes color updating

flabbet 8 luni în urmă
părinte
comite
68498dad65

+ 8 - 2
src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/ComplexShapeToolExecutor.cs

@@ -54,6 +54,12 @@ internal abstract class ComplexShapeToolExecutor<T> : SimpleShapeToolExecutor wh
 
         if (ActiveMode == ShapeToolMode.Drawing)
         {
+            if (toolbar.SyncWithPrimaryColor)
+            {
+                toolbar.FillColor = colorsVM.PrimaryColor.ToColor();
+                toolbar.StrokeColor = colorsVM.PrimaryColor.ToColor();
+            }
+
             return ExecutionState.Success;
         }
 
@@ -66,7 +72,7 @@ internal abstract class ComplexShapeToolExecutor<T> : SimpleShapeToolExecutor wh
                 return ExecutionState.Error;
             }
 
-            if (!InitShapeData(node.ShapeData))
+            if (node.ShapeData == null || !InitShapeData(node.ShapeData))
             {
                 ActiveMode = ShapeToolMode.Preview;
                 return ExecutionState.Success;
@@ -168,7 +174,7 @@ internal abstract class ComplexShapeToolExecutor<T> : SimpleShapeToolExecutor wh
 
     public override void OnColorChanged(Color color, bool primary)
     {
-        if (primary && toolbar.SyncWithPrimaryColor)
+        if (primary && toolbar.SyncWithPrimaryColor && ActiveMode == ShapeToolMode.Transform)
         {
             toolbar.StrokeColor = color.ToColor();
             toolbar.FillColor = color.ToColor();

+ 8 - 4
src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/LineExecutor.cs

@@ -26,9 +26,9 @@ internal abstract class LineExecutor<T> : SimpleShapeToolExecutor where T : ILin
     private IColorsHandler? colorsVM;
     protected ILineToolbar? toolbar;
 
-    public override bool CanUndo => document.LineToolOverlayHandler.HasUndo; 
+    public override bool CanUndo => document.LineToolOverlayHandler.HasUndo;
     public override bool CanRedo => document.LineToolOverlayHandler.HasRedo;
-    
+
     public override ExecutionState Start()
     {
         if (base.Start() == ExecutionState.Error)
@@ -49,6 +49,11 @@ internal abstract class LineExecutor<T> : SimpleShapeToolExecutor where T : ILin
 
         if (ActiveMode == ShapeToolMode.Drawing)
         {
+            if (toolbar.SyncWithPrimaryColor)
+            {
+                toolbar.StrokeColor = colorsVM.PrimaryColor.ToColor();
+            }
+
             return ExecutionState.Success;
         }
 
@@ -62,7 +67,6 @@ internal abstract class LineExecutor<T> : SimpleShapeToolExecutor where T : ILin
                 return ExecutionState.Success;
             }
 
-            toolbar.StrokeColor = data.StrokeColor.ToColor();
 
             if (!InitShapeData(data))
             {
@@ -133,7 +137,7 @@ internal abstract class LineExecutor<T> : SimpleShapeToolExecutor where T : ILin
 
     public override void OnColorChanged(Color color, bool primary)
     {
-        if (!primary)
+        if (!primary || !toolbar!.SyncWithPrimaryColor || ActiveMode != ShapeToolMode.Transform)
             return;
 
         toolbar!.StrokeColor = color.ToColor();

+ 1 - 0
src/PixiEditor/Models/Handlers/Toolbars/ILineToolbar.cs

@@ -6,4 +6,5 @@ internal interface ILineToolbar : IBasicToolbar
 {
     public Color StrokeColor { get; set; }
     public bool AntiAliasing { get; set; }
+    public bool SyncWithPrimaryColor { get; }
 }

+ 1 - 1
src/PixiEditor/ViewModels/SubViewModels/IoViewModel.cs

@@ -193,8 +193,8 @@ internal class IoViewModel : SubViewModel<ViewModelMain>
             return;
 
         drawingWithRight = args.Button == MouseButton.Right;
-        Owner.ToolsSubViewModel.UseToolEventInlet(args.PositionOnCanvas, args.Button);
         activeDocument.EventInlet.OnCanvasLeftMouseButtonDown(args.PositionOnCanvas);
+        Owner.ToolsSubViewModel.UseToolEventInlet(args.PositionOnCanvas, args.Button);
 
         Analytics.SendUseTool(Owner.ToolsSubViewModel.ActiveTool, args.PositionOnCanvas, activeDocument.SizeBindable);
     }

+ 10 - 0
src/PixiEditor/ViewModels/Tools/ToolSettings/Toolbars/LineToolbar.cs

@@ -31,9 +31,19 @@ internal class LineToolbar : BasicToolbar, ILineToolbar
         }
     }
 
+    public bool SyncWithPrimaryColor
+    {
+        get => GetSetting<BoolSettingViewModel>(nameof(SyncWithPrimaryColor)).Value;
+        set
+        {
+            GetSetting<BoolSettingViewModel>(nameof(SyncWithPrimaryColor)).Value = value;
+        }
+    }
+
     public LineToolbar()
     {
         AddSetting(new ColorSettingViewModel(nameof(StrokeColor), "STROKE_COLOR_LABEL"));
         AddSetting(new BoolSettingViewModel(nameof(AntiAliasing), "ANTI_ALIASING_LABEL") { IsExposed = false, Value = false });
+        AddSetting(new BoolSettingViewModel(nameof(SyncWithPrimaryColor), "SYNC_WITH_PRIMARY_COLOR_LABEL") { Value = true });
     }
 }

+ 1 - 1
src/PixiEditor/ViewModels/Tools/Tools/RasterLineToolViewModel.cs

@@ -60,5 +60,5 @@ internal class RasterLineToolViewModel : ShapeTool, ILineToolHandler
         
         var document = ViewModelMain.Current?.DocumentManagerSubViewModel.ActiveDocument;
         document.Tools.UseRasterLineTool();
-    }
+    } 
 }