Browse Source

BrightnessToolExecutor

Equbuxu 3 years ago
parent
commit
4759b89fd1

+ 2 - 6
src/PixiEditor/Models/DocumentModels/Public/DocumentToolsModule.cs

@@ -1,9 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using PixiEditor.Models.DocumentModels;
+using PixiEditor.Models.DocumentModels;
 using PixiEditor.Models.DocumentModels.UpdateableChangeExecutors;
 using PixiEditor.Models.DocumentModels.UpdateableChangeExecutors;
 using PixiEditor.ViewModels.SubViewModels.Document;
 using PixiEditor.ViewModels.SubViewModels.Document;
 
 
@@ -35,4 +30,5 @@ internal class DocumentToolsModule
 
 
     public void UseSelectTool() => Internals.ChangeController.TryStartUpdateableChange<SelectToolExecutor>();
     public void UseSelectTool() => Internals.ChangeController.TryStartUpdateableChange<SelectToolExecutor>();
 
 
+    public void UseBrightnessTool() => Internals.ChangeController.TryStartUpdateableChange<BrightnessToolExecutor>();
 }
 }

+ 56 - 0
src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/BrightnessToolExecutor.cs

@@ -0,0 +1,56 @@
+using ChunkyImageLib.DataHolders;
+using PixiEditor.Models.Enums;
+using PixiEditor.ViewModels.SubViewModels.Document;
+using PixiEditor.ViewModels.SubViewModels.Tools.Tools;
+using PixiEditor.ViewModels.SubViewModels.Tools.ToolSettings.Toolbars;
+
+namespace PixiEditor.Models.DocumentModels.UpdateableChangeExecutors;
+#nullable enable
+internal class BrightnessToolExecutor : UpdateableChangeExecutor
+{
+    private Guid guidValue;
+    private bool repeat;
+    private bool darken;
+    private float correctionFactor;
+    private int toolSize;
+
+    public override ExecutionState Start()
+    {
+        ViewModelMain? vm = ViewModelMain.Current;
+        StructureMemberViewModel? member = document!.SelectedStructureMember;
+        BrightnessToolViewModel? brightnessTool = vm?.ToolsSubViewModel.GetTool<BrightnessToolViewModel>();
+        BrightnessToolToolbar? toolbar = brightnessTool?.Toolbar as BrightnessToolToolbar;
+        if (vm is null || brightnessTool is null || member is null || toolbar is null)
+            return ExecutionState.Error;
+        if (member is not LayerViewModel layer || layer.ShouldDrawOnMask)
+            return ExecutionState.Error;
+
+        guidValue = member.GuidValue;
+        repeat = toolbar.BrightnessMode == BrightnessMode.Repeat;
+        toolSize = toolbar.ToolSize;
+        darken = brightnessTool.Darken;
+        correctionFactor = toolbar.CorrectionFactor;
+
+        ChangeBrightness_Action action = new(guidValue, controller!.LastPixelPosition, correctionFactor, toolSize, repeat, darken);
+        internals!.ActionAccumulator.AddActions(action);
+
+        return ExecutionState.Success;
+    }
+
+    public override void OnPixelPositionChange(VecI pos)
+    {
+        ChangeBrightness_Action action = new(guidValue, pos, correctionFactor, toolSize, repeat, darken);
+        internals!.ActionAccumulator.AddActions(action);
+    }
+
+    public override void OnLeftMouseButtonUp()
+    {
+        internals!.ActionAccumulator.AddFinishedActions(new EndChangeBrightness_Action());
+        onEnded?.Invoke(this);
+    }
+
+    public override void ForceStop()
+    {
+        internals!.ActionAccumulator.AddFinishedActions(new EndChangeBrightness_Action());
+    }
+}

+ 13 - 2
src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/BrightnessToolViewModel.cs

@@ -1,6 +1,6 @@
 using System.Windows.Input;
 using System.Windows.Input;
+using ChunkyImageLib.DataHolders;
 using PixiEditor.Models.Commands.Attributes.Commands;
 using PixiEditor.Models.Commands.Attributes.Commands;
-using PixiEditor.Models.Enums;
 using PixiEditor.ViewModels.SubViewModels.Tools.ToolSettings.Toolbars;
 using PixiEditor.ViewModels.SubViewModels.Tools.ToolSettings.Toolbars;
 using PixiEditor.Views.UserControls.BrushShapeOverlay;
 using PixiEditor.Views.UserControls.BrushShapeOverlay;
 
 
@@ -23,13 +23,24 @@ internal class BrightnessToolViewModel : ToolViewModel
 
 
     public override BrushShape BrushShape => BrushShape.Circle;
     public override BrushShape BrushShape => BrushShape.Circle;
 
 
-    public BrightnessMode Mode { get; set; } = BrightnessMode.Default;
+    public bool Darken { get; private set; } = false;
 
 
     public override void UpdateActionDisplay(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
     public override void UpdateActionDisplay(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
     {
     {
         if (!ctrlIsDown)
         if (!ctrlIsDown)
+        {
             ActionDisplay = defaultActionDisplay;
             ActionDisplay = defaultActionDisplay;
+            Darken = false;
+        }
         else
         else
+        {
             ActionDisplay = "Draw on pixels to make them darker. Release Ctrl to brighten.";
             ActionDisplay = "Draw on pixels to make them darker. Release Ctrl to brighten.";
+            Darken = true;
+        }
+    }
+
+    public override void OnLeftMouseButtonDown(VecD pos)
+    {
+        ViewModelMain.Current?.DocumentManagerSubViewModel.ActiveDocument?.Tools.UseBrightnessTool();
     }
     }
 }
 }