Browse Source

Infobox while drawing shape

flabbet 9 months ago
parent
commit
6d5f2ed41c

+ 7 - 0
src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/ComplexShapeToolExecutor.cs

@@ -60,6 +60,9 @@ internal abstract class ComplexShapeToolExecutor<T> : SimpleShapeToolExecutor wh
                 toolbar.StrokeColor = colorsVM.PrimaryColor.ToColor();
                 toolbar.StrokeColor = colorsVM.PrimaryColor.ToColor();
             }
             }
 
 
+            document!.TransformHandler.ShowTransform(TransformMode, false, new ShapeCorners((RectD)lastRect.Inflate(1)), false);
+            document.TransformHandler.ShowHandles = false;
+            document.TransformHandler.IsSizeBoxEnabled = true;
             return ExecutionState.Success;
             return ExecutionState.Success;
         }
         }
 
 
@@ -209,6 +212,9 @@ internal abstract class ComplexShapeToolExecutor<T> : SimpleShapeToolExecutor wh
         noMovement = false;
         noMovement = false;
 
 
         DrawShape((VecI)snapped.Floor(), lastRadians, false);
         DrawShape((VecI)snapped.Floor(), lastRadians, false);
+
+        document!.TransformHandler.ShowTransform(TransformMode, false, new ShapeCorners((RectD)lastRect), false);
+        document!.TransformHandler.Corners = new ShapeCorners((RectD)lastRect);
     }
     }
 
 
     protected VecD Snap(VecD pos, VecD adjustPos, bool highlight = false)
     protected VecD Snap(VecD pos, VecD adjustPos, bool highlight = false)
@@ -273,6 +279,7 @@ internal abstract class ComplexShapeToolExecutor<T> : SimpleShapeToolExecutor wh
         base.StartMode(mode);
         base.StartMode(mode);
         if (mode == ShapeToolMode.Transform)
         if (mode == ShapeToolMode.Transform)
         {
         {
+            document.TransformHandler.HideTransform();
             document!.TransformHandler.ShowTransform(TransformMode, false, new ShapeCorners((RectD)lastRect), true);
             document!.TransformHandler.ShowTransform(TransformMode, false, new ShapeCorners((RectD)lastRect), true);
         }
         }
     }
     }

+ 6 - 0
src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/LineExecutor.cs

@@ -54,6 +54,10 @@ internal abstract class LineExecutor<T> : SimpleShapeToolExecutor where T : ILin
                 toolbar.StrokeColor = colorsVM.PrimaryColor.ToColor();
                 toolbar.StrokeColor = colorsVM.PrimaryColor.ToColor();
             }
             }
 
 
+            document.LineToolOverlayHandler.Show(startDrawingPos, startDrawingPos, false);
+            document.LineToolOverlayHandler.ShowHandles = false;
+            document.LineToolOverlayHandler.IsSizeBoxEnabled = true;
+            
             return ExecutionState.Success;
             return ExecutionState.Success;
         }
         }
 
 
@@ -103,6 +107,7 @@ internal abstract class LineExecutor<T> : SimpleShapeToolExecutor where T : ILin
         }
         }
 
 
         HighlightSnapping(snapX, snapY);
         HighlightSnapping(snapX, snapY);
+        document!.LineToolOverlayHandler.LineEnd = snapped;
 
 
         curPos = snapped;
         curPos = snapped;
 
 
@@ -119,6 +124,7 @@ internal abstract class LineExecutor<T> : SimpleShapeToolExecutor where T : ILin
             return;
             return;
         }
         }
 
 
+        document!.LineToolOverlayHandler.Hide();
         document!.LineToolOverlayHandler.Show(startDrawingPos, curPos, true);
         document!.LineToolOverlayHandler.Show(startDrawingPos, curPos, true);
         base.OnLeftMouseButtonUp();
         base.OnLeftMouseButtonUp();
     }
     }

+ 4 - 0
src/PixiEditor/Models/Handlers/ILineOverlayHandler.cs

@@ -12,4 +12,8 @@ internal interface ILineOverlayHandler
     public void Show(VecD startPos, VecD endPos, bool showApplyButton);
     public void Show(VecD startPos, VecD endPos, bool showApplyButton);
     public bool HasUndo { get; }
     public bool HasUndo { get; }
     public bool HasRedo { get; }
     public bool HasRedo { get; }
+    public VecD LineStart { get; set; }
+    public VecD LineEnd { get; set; }
+    public bool ShowHandles { get; set; }
+    public bool IsSizeBoxEnabled { get; set; }
 }
 }

+ 3 - 0
src/PixiEditor/Models/Handlers/ITransformHandler.cs

@@ -15,4 +15,7 @@ internal interface ITransformHandler : IHandler
     public bool Nudge(VecD distance);
     public bool Nudge(VecD distance);
     public bool HasUndo { get; }
     public bool HasUndo { get; }
     public bool HasRedo { get; }
     public bool HasRedo { get; }
+    public ShapeCorners Corners { get; set; }
+    public bool ShowHandles { get; set; }
+    public bool IsSizeBoxEnabled { get; set; }
 }
 }

+ 19 - 0
src/PixiEditor/ViewModels/Document/TransformOverlays/DocumentTransformViewModel.cs

@@ -102,7 +102,23 @@ internal class DocumentTransformViewModel : ObservableObject, ITransformHandler
             TransformMoved?.Invoke(this, value);
             TransformMoved?.Invoke(this, value);
         }
         }
     }
     }
+
+    private bool showHandles;
+
+    public bool ShowHandles
+    {
+        get => showHandles;
+        set => SetProperty(ref showHandles, value);
+    } 
     
     
+    private bool isSizeBoxEnabled;
+
+    public bool IsSizeBoxEnabled
+    {
+        get => isSizeBoxEnabled;
+        set => SetProperty(ref isSizeBoxEnabled, value);
+    } 
+
     private bool enableSnapping = true;
     private bool enableSnapping = true;
     public bool EnableSnapping
     public bool EnableSnapping
     {
     {
@@ -206,6 +222,9 @@ internal class DocumentTransformViewModel : ObservableObject, ITransformHandler
         TransformActive = true;
         TransformActive = true;
         ShowTransformControls = showApplyButton;
         ShowTransformControls = showApplyButton;
 
 
+        IsSizeBoxEnabled = false;
+        ShowHandles = true;
+
         RequestCornersExecutor?.Execute(this, initPos);
         RequestCornersExecutor?.Execute(this, initPos);
         undoStack.AddState((Corners, InternalState), TransformOverlayStateType.Initial);
         undoStack.AddState((Corners, InternalState), TransformOverlayStateType.Initial);
     }
     }

+ 17 - 1
src/PixiEditor/ViewModels/Document/TransformOverlays/LineToolOverlayViewModel.cs

@@ -35,7 +35,21 @@ internal class LineToolOverlayViewModel : ObservableObject, ILineOverlayHandler
                 LineMoved?.Invoke(this, (lineStart, lineEnd));
                 LineMoved?.Invoke(this, (lineStart, lineEnd));
         }
         }
     }
     }
-    
+
+    private bool showHandles;
+    public bool ShowHandles
+    {
+        get => showHandles;
+        set => SetProperty(ref showHandles, value);
+    }
+
+    private bool isSizeBoxEnabled;
+    public bool IsSizeBoxEnabled
+    {
+        get => isSizeBoxEnabled;
+        set => SetProperty(ref isSizeBoxEnabled, value);
+    }
+
     private bool isEnabled;
     private bool isEnabled;
 
 
     public bool IsEnabled
     public bool IsEnabled
@@ -78,6 +92,8 @@ internal class LineToolOverlayViewModel : ObservableObject, ILineOverlayHandler
         LineEnd = endPos; 
         LineEnd = endPos; 
         IsEnabled = true;
         IsEnabled = true;
         ShowApplyButton = showApplyButton;
         ShowApplyButton = showApplyButton;
+        ShowHandles = true;
+        IsSizeBoxEnabled = false;
     }
     }
 
 
     public bool HasUndo => undoStack is not null && undoStack.UndoCount > 0;
     public bool HasUndo => undoStack is not null && undoStack.UndoCount > 0;

+ 24 - 0
src/PixiEditor/Views/Main/ViewportControls/ViewportOverlays.cs

@@ -219,12 +219,24 @@ internal class ViewportOverlays
         {
         {
             Source = Viewport, Path = "Document.LineToolOverlayViewModel.LineEnd", Mode = BindingMode.TwoWay
             Source = Viewport, Path = "Document.LineToolOverlayViewModel.LineEnd", Mode = BindingMode.TwoWay
         };
         };
+        
+        Binding showHandlesBinding = new()
+        {
+            Source = Viewport, Path = "Document.LineToolOverlayViewModel.ShowHandles", Mode = BindingMode.TwoWay
+        };
+        
+        Binding isSizeBoxEnabledBinding = new()
+        {
+            Source = Viewport, Path = "Document.LineToolOverlayViewModel.IsSizeBoxEnabled", Mode = BindingMode.TwoWay
+        };
 
 
         lineToolOverlay.Bind(Visual.IsVisibleProperty, isVisibleBinding);
         lineToolOverlay.Bind(Visual.IsVisibleProperty, isVisibleBinding);
         lineToolOverlay.Bind(LineToolOverlay.SnappingControllerProperty, snappingBinding);
         lineToolOverlay.Bind(LineToolOverlay.SnappingControllerProperty, snappingBinding);
         lineToolOverlay.Bind(LineToolOverlay.ActionCompletedProperty, actionCompletedBinding);
         lineToolOverlay.Bind(LineToolOverlay.ActionCompletedProperty, actionCompletedBinding);
         lineToolOverlay.Bind(LineToolOverlay.LineStartProperty, lineStartBinding);
         lineToolOverlay.Bind(LineToolOverlay.LineStartProperty, lineStartBinding);
         lineToolOverlay.Bind(LineToolOverlay.LineEndProperty, lineEndBinding);
         lineToolOverlay.Bind(LineToolOverlay.LineEndProperty, lineEndBinding);
+        lineToolOverlay.Bind(LineToolOverlay.ShowHandlesProperty, showHandlesBinding);
+        lineToolOverlay.Bind(LineToolOverlay.IsSizeBoxEnabledProperty, isSizeBoxEnabledBinding);
     }
     }
 
 
     private void BindTransformOverlay()
     private void BindTransformOverlay()
@@ -285,6 +297,16 @@ internal class ViewportOverlays
         {
         {
             Source = Viewport, Path = "Document.TransformViewModel.InternalState", Mode = BindingMode.TwoWay
             Source = Viewport, Path = "Document.TransformViewModel.InternalState", Mode = BindingMode.TwoWay
         };
         };
+        
+        Binding showHandlesBinding = new()
+        {
+            Source = Viewport, Path = "Document.TransformViewModel.ShowHandles", Mode = BindingMode.TwoWay
+        };
+        
+        Binding isSizeBoxEnabledBinding = new()
+        {
+            Source = Viewport, Path = "Document.TransformViewModel.IsSizeBoxEnabled", Mode = BindingMode.TwoWay
+        };
 
 
         Binding zoomboxAngleBinding = new() { Source = Viewport, Path = "Zoombox.Angle", Mode = BindingMode.OneWay };
         Binding zoomboxAngleBinding = new() { Source = Viewport, Path = "Zoombox.Angle", Mode = BindingMode.OneWay };
 
 
@@ -300,6 +322,8 @@ internal class ViewportOverlays
         transformOverlay.Bind(TransformOverlay.SnapToAnglesProperty, snapToAnglesBinding);
         transformOverlay.Bind(TransformOverlay.SnapToAnglesProperty, snapToAnglesBinding);
         transformOverlay.Bind(TransformOverlay.InternalStateProperty, internalStateBinding);
         transformOverlay.Bind(TransformOverlay.InternalStateProperty, internalStateBinding);
         transformOverlay.Bind(TransformOverlay.ZoomboxAngleProperty, zoomboxAngleBinding);
         transformOverlay.Bind(TransformOverlay.ZoomboxAngleProperty, zoomboxAngleBinding);
+        transformOverlay.Bind(TransformOverlay.ShowHandlesProperty, showHandlesBinding);
+        transformOverlay.Bind(TransformOverlay.IsSizeBoxEnabledProperty, isSizeBoxEnabledBinding);
     }
     }
 
 
     private void BindSnappingOverlay()
     private void BindSnappingOverlay()

+ 35 - 5
src/PixiEditor/Views/Overlays/LineToolOverlay/LineToolOverlay.cs

@@ -55,6 +55,24 @@ internal class LineToolOverlay : Overlay
         set => SetValue(SnappingControllerProperty, value);
         set => SetValue(SnappingControllerProperty, value);
     }
     }
 
 
+    public static readonly StyledProperty<bool> ShowHandlesProperty = AvaloniaProperty.Register<LineToolOverlay, bool>(
+        nameof(ShowHandles), defaultValue: true);
+
+    public bool ShowHandles
+    {
+        get => GetValue(ShowHandlesProperty);
+        set => SetValue(ShowHandlesProperty, value);
+    }
+
+    public static readonly StyledProperty<bool> IsSizeBoxEnabledProperty = AvaloniaProperty.Register<LineToolOverlay, bool>(
+        nameof(IsSizeBoxEnabled));
+
+    public bool IsSizeBoxEnabled
+    {
+        get => GetValue(IsSizeBoxEnabledProperty);
+        set => SetValue(IsSizeBoxEnabledProperty, value);
+    }
+    
     static LineToolOverlay()
     static LineToolOverlay()
     {
     {
         LineStartProperty.Changed.Subscribe(RenderAffectingPropertyChanged);
         LineStartProperty.Changed.Subscribe(RenderAffectingPropertyChanged);
@@ -115,6 +133,12 @@ internal class LineToolOverlay : Overlay
         infoBox = new InfoBox();
         infoBox = new InfoBox();
     }
     }
 
 
+    protected override void OnOverlayPointerMoved(OverlayPointerArgs args)
+    {
+        base.OnOverlayPointerMoved(args);
+        lastMousePos = args.Point;
+    }
+
     private void OnHandleRelease(Handle obj)
     private void OnHandleRelease(Handle obj)
     {
     {
         if (SnappingController != null)
         if (SnappingController != null)
@@ -125,6 +149,7 @@ internal class LineToolOverlay : Overlay
         }
         }
         
         
         isDraggingHandle = false;
         isDraggingHandle = false;
+        IsSizeBoxEnabled = false;
     }
     }
 
 
     protected override void ZoomChanged(double newZoom)
     protected override void ZoomChanged(double newZoom)
@@ -159,12 +184,15 @@ internal class LineToolOverlay : Overlay
 
 
         context.DrawLine(new VecD(mappedStart.X, mappedStart.Y), new VecD(mappedEnd.X, mappedEnd.Y), blackPaint);
         context.DrawLine(new VecD(mappedStart.X, mappedStart.Y), new VecD(mappedEnd.X, mappedEnd.Y), blackPaint);
         context.DrawLine(new VecD(mappedStart.X, mappedStart.Y), new VecD(mappedEnd.X, mappedEnd.Y), whiteDashPaint);
         context.DrawLine(new VecD(mappedStart.X, mappedStart.Y), new VecD(mappedEnd.X, mappedEnd.Y), whiteDashPaint);
-        
-        startHandle.Draw(context);
-        endHandle.Draw(context);
-        moveHandle.Draw(context);
 
 
-        if (isDraggingHandle)
+        if (ShowHandles)
+        {
+            startHandle.Draw(context);
+            endHandle.Draw(context);
+            moveHandle.Draw(context);
+        }
+
+        if (IsSizeBoxEnabled)
         {
         {
             string length = $"L: {(mappedEnd - mappedStart).Length:0.#} px";
             string length = $"L: {(mappedEnd - mappedStart).Length:0.#} px";
             infoBox.DrawInfo(context, length, lastMousePos);
             infoBox.DrawInfo(context, length, lastMousePos);
@@ -192,6 +220,7 @@ internal class LineToolOverlay : Overlay
         
         
         lastMousePos = position;
         lastMousePos = position;
         isDraggingHandle = true;
         isDraggingHandle = true;
+        IsSizeBoxEnabled = true;
     }
     }
 
 
     private void EndHandleOnDrag(Handle source, VecD position)
     private void EndHandleOnDrag(Handle source, VecD position)
@@ -204,6 +233,7 @@ internal class LineToolOverlay : Overlay
         
         
         isDraggingHandle = true;
         isDraggingHandle = true;
         lastMousePos = position;
         lastMousePos = position;
+        IsSizeBoxEnabled = true;
     }
     }
 
 
     private VecD SnapAndHighlight(VecD position)
     private VecD SnapAndHighlight(VecD position)

+ 82 - 47
src/PixiEditor/Views/Overlays/TransformOverlay/TransformOverlay.cs

@@ -131,6 +131,25 @@ internal class TransformOverlay : Overlay
         set => SetValue(SnappingControllerProperty, value);
         set => SetValue(SnappingControllerProperty, value);
     }
     }
 
 
+    public static readonly StyledProperty<bool> ShowHandlesProperty = AvaloniaProperty.Register<TransformOverlay, bool>(
+        nameof(ShowHandles));
+
+    public bool ShowHandles
+    {
+        get => GetValue(ShowHandlesProperty);
+        set => SetValue(ShowHandlesProperty, value);
+    }
+
+    public static readonly StyledProperty<bool> IsSizeBoxEnabledProperty =
+        AvaloniaProperty.Register<TransformOverlay, bool>(
+            nameof(IsSizeBoxEnabled));
+
+    public bool IsSizeBoxEnabled
+    {
+        get => GetValue(IsSizeBoxEnabledProperty);
+        set => SetValue(IsSizeBoxEnabledProperty, value);
+    }
+
     static TransformOverlay()
     static TransformOverlay()
     {
     {
         AffectsRender<TransformOverlay>(CornersProperty, ZoomScaleProperty, SideFreedomProperty, CornerFreedomProperty,
         AffectsRender<TransformOverlay>(CornersProperty, ZoomScaleProperty, SideFreedomProperty, CornerFreedomProperty,
@@ -231,7 +250,7 @@ internal class TransformOverlay : Overlay
     private VecD lastPointerPos;
     private VecD lastPointerPos;
     private InfoBox infoBox;
     private InfoBox infoBox;
     private VecD lastSize;
     private VecD lastSize;
-    
+
     public TransformOverlay()
     public TransformOverlay()
     {
     {
         topLeftHandle = new AnchorHandle(this);
         topLeftHandle = new AnchorHandle(this);
@@ -284,7 +303,7 @@ internal class TransformOverlay : Overlay
 
 
         moveHandle.OnPress += OnMoveHandlePressed;
         moveHandle.OnPress += OnMoveHandlePressed;
         moveHandle.OnRelease += OnMoveHandleReleased;
         moveHandle.OnRelease += OnMoveHandleReleased;
-
+        
         infoBox = new InfoBox();
         infoBox = new InfoBox();
     }
     }
 
 
@@ -367,37 +386,40 @@ internal class TransformOverlay : Overlay
 
 
         // corner anchors
         // corner anchors
 
 
-        centerHandle.Position = VecD.Zero;
-        topLeftHandle.Position = topLeft;
-        topRightHandle.Position = topRight;
-        bottomLeftHandle.Position = bottomLeft;
-        bottomRightHandle.Position = bottomRight;
-        topHandle.Position = top;
-        bottomHandle.Position = bottom;
-        leftHandle.Position = left;
-        rightHandle.Position = right;
-        originHandle.Position = InternalState.Origin;
-        moveHandle.Position = TransformHelper.GetHandlePos(Corners, ZoomScale, moveHandle.Size);
-
-        topLeftHandle.Draw(context);
-        topRightHandle.Draw(context);
-        bottomLeftHandle.Draw(context);
-        bottomRightHandle.Draw(context);
-        topHandle.Draw(context);
-        bottomHandle.Draw(context);
-        leftHandle.Draw(context);
-        rightHandle.Draw(context);
-        originHandle.Draw(context);
-        moveHandle.Draw(context);
-
-        if (capturedAnchor == Anchor.Origin)
-        {
-            centerHandle.Position = Corners.RectCenter;
-            centerHandle.Draw(context);
+        if (ShowHandles)
+        {
+            centerHandle.Position = VecD.Zero;
+            topLeftHandle.Position = topLeft;
+            topRightHandle.Position = topRight;
+            bottomLeftHandle.Position = bottomLeft;
+            bottomRightHandle.Position = bottomRight;
+            topHandle.Position = top;
+            bottomHandle.Position = bottom;
+            leftHandle.Position = left;
+            rightHandle.Position = right;
+            originHandle.Position = InternalState.Origin;
+            moveHandle.Position = TransformHelper.GetHandlePos(Corners, ZoomScale, moveHandle.Size);
+
+            topLeftHandle.Draw(context);
+            topRightHandle.Draw(context);
+            bottomLeftHandle.Draw(context);
+            bottomRightHandle.Draw(context);
+            topHandle.Draw(context);
+            bottomHandle.Draw(context);
+            leftHandle.Draw(context);
+            rightHandle.Draw(context);
+            originHandle.Draw(context);
+            moveHandle.Draw(context);
+
+            if (capturedAnchor == Anchor.Origin)
+            {
+                centerHandle.Position = Corners.RectCenter;
+                centerHandle.Draw(context);
+            }
         }
         }
 
 
         int saved = context.Save();
         int saved = context.Save();
-        if (rotationCursorActive)
+        if (ShowHandles && rotationCursorActive)
         {
         {
             var matrix = Matrix3X3.CreateTranslation((float)lastPointerPos.X, (float)lastPointerPos.Y);
             var matrix = Matrix3X3.CreateTranslation((float)lastPointerPos.X, (float)lastPointerPos.Y);
             double angle = (lastPointerPos - InternalState.Origin).Angle * 180 / Math.PI - 90;
             double angle = (lastPointerPos - InternalState.Origin).Angle * 180 / Math.PI - 90;
@@ -414,18 +436,23 @@ internal class TransformOverlay : Overlay
         context.RestoreToCount(saved);
         context.RestoreToCount(saved);
 
 
         infoBox.ZoomScale = ZoomScale;
         infoBox.ZoomScale = ZoomScale;
-        if (capturedAnchor is not null && capturedAnchor != Anchor.Origin)
-        {
-            VecD rectSize = Corners.RectSize;
-            string sizeText = $"W: {rectSize.X:0.#} H: {rectSize.Y:0.#} px";
-            infoBox.DrawInfo(context, sizeText, lastPointerPos);
-        }
-        else if (isRotating)
+
+        if (IsSizeBoxEnabled)
         {
         {
-            infoBox.DrawInfo(context, $"{(RadiansToDegreesNormalized(corners.RectRotation)):0.#}\u00b0", lastPointerPos);
+            if (isRotating)
+            {
+                infoBox.DrawInfo(context, $"{(RadiansToDegreesNormalized(corners.RectRotation)):0.#}\u00b0",
+                    lastPointerPos);
+            }
+            else
+            {
+                VecD rectSize = Corners.RectSize;
+                string sizeText = $"W: {rectSize.X:0.#} H: {rectSize.Y:0.#} px";
+                infoBox.DrawInfo(context, sizeText, lastPointerPos);
+            }
         }
         }
     }
     }
-    
+
     private double RadiansToDegreesNormalized(double radians)
     private double RadiansToDegreesNormalized(double radians)
     {
     {
         double degrees = double.RadiansToDegrees(radians);
         double degrees = double.RadiansToDegrees(radians);
@@ -439,9 +466,11 @@ internal class TransformOverlay : Overlay
         cornersOnStartAnchorDrag = Corners;
         cornersOnStartAnchorDrag = Corners;
         originOnStartAnchorDrag = InternalState.Origin;
         originOnStartAnchorDrag = InternalState.Origin;
         mousePosOnStartAnchorDrag = lastPointerPos;
         mousePosOnStartAnchorDrag = lastPointerPos;
+        IsSizeBoxEnabled = true;
 
 
         if (source == originHandle)
         if (source == originHandle)
         {
         {
+            IsSizeBoxEnabled = false;
             snapHandleOfOrigin = null;
             snapHandleOfOrigin = null;
         }
         }
     }
     }
@@ -525,6 +554,11 @@ internal class TransformOverlay : Overlay
                 finalCursor = TransformHelper.GetResizeCursor((Anchor)anchor, Corners, ZoomboxAngle);
                 finalCursor = TransformHelper.GetResizeCursor((Anchor)anchor, Corners, ZoomboxAngle);
         }
         }
 
 
+        if (!ShowHandles)
+        {
+            finalCursor = new Cursor(StandardCursorType.Arrow);
+        }
+
         if (Cursor != finalCursor)
         if (Cursor != finalCursor)
             Cursor = finalCursor;
             Cursor = finalCursor;
 
 
@@ -567,6 +601,7 @@ internal class TransformOverlay : Overlay
 
 
         SnappingController.HighlightedXAxis = string.Empty;
         SnappingController.HighlightedXAxis = string.Empty;
         SnappingController.HighlightedYAxis = string.Empty;
         SnappingController.HighlightedYAxis = string.Empty;
+        IsSizeBoxEnabled = false;
     }
     }
 
 
     private void StartMoving(VecD position)
     private void StartMoving(VecD position)
@@ -715,7 +750,7 @@ internal class TransformOverlay : Overlay
             {
             {
                 projected = targetPos;
                 projected = targetPos;
             }
             }
-            
+
             VecD anchorRelativeDelta = projected - originalAnchorPos;
             VecD anchorRelativeDelta = projected - originalAnchorPos;
 
 
             var adjacentAnchors = TransformHelper.GetAdjacentAnchors((Anchor)capturedAnchor);
             var adjacentAnchors = TransformHelper.GetAdjacentAnchors((Anchor)capturedAnchor);
@@ -754,9 +789,9 @@ internal class TransformOverlay : Overlay
                     snapped = TrySnapAnchor(targetPos);
                     snapped = TrySnapAnchor(targetPos);
                 }
                 }
             }
             }
-            
+
             VecD potentialPos = targetPos + snapped.Delta;
             VecD potentialPos = targetPos + snapped.Delta;
-            if(potentialPos.X < 0 || potentialPos.Y < 0 || potentialPos.X > lastSize.X || potentialPos.Y > lastSize.Y)
+            if (potentialPos.X < 0 || potentialPos.Y < 0 || potentialPos.X > lastSize.X || potentialPos.Y > lastSize.Y)
             {
             {
                 snapped = new SnapData();
                 snapped = new SnapData();
             }
             }
@@ -800,12 +835,12 @@ internal class TransformOverlay : Overlay
         VecD snapOrigin = TransformHelper.GetAnchorPosition(cornersOnStartAnchorDrag, adjacent) + anchorRelativeDelta;
         VecD snapOrigin = TransformHelper.GetAnchorPosition(cornersOnStartAnchorDrag, adjacent) + anchorRelativeDelta;
         var snapped = TrySnapAnchorAlongLine(adjacentAnchorPos, snapOrigin);
         var snapped = TrySnapAnchorAlongLine(adjacentAnchorPos, snapOrigin);
         double maxDistance = GetSizeToOppositeSide(cornersOnStartAnchorDrag, capturedAnchor.Value) / 8f;
         double maxDistance = GetSizeToOppositeSide(cornersOnStartAnchorDrag, capturedAnchor.Value) / 8f;
-        
-        if(snapped.Delta.Length > maxDistance)
+
+        if (snapped.Delta.Length > maxDistance)
         {
         {
             snapped = new SnapData();
             snapped = new SnapData();
         }
         }
-        
+
         if (snapped.Delta == VecI.Zero)
         if (snapped.Delta == VecI.Zero)
         {
         {
             adjacentAnchorPos = TransformHelper.GetAnchorPosition(cornersOnStartAnchorDrag, adjacentAnchors.Item2) +
             adjacentAnchorPos = TransformHelper.GetAnchorPosition(cornersOnStartAnchorDrag, adjacentAnchors.Item2) +
@@ -815,7 +850,7 @@ internal class TransformOverlay : Overlay
             snapOrigin = TransformHelper.GetAnchorPosition(cornersOnStartAnchorDrag, adjacent) + anchorRelativeDelta;
             snapOrigin = TransformHelper.GetAnchorPosition(cornersOnStartAnchorDrag, adjacent) + anchorRelativeDelta;
 
 
             snapped = TrySnapAnchorAlongLine(adjacentAnchorPos, snapOrigin);
             snapped = TrySnapAnchorAlongLine(adjacentAnchorPos, snapOrigin);
-            if(snapped.Delta.Length > maxDistance)
+            if (snapped.Delta.Length > maxDistance)
             {
             {
                 snapped = new SnapData();
                 snapped = new SnapData();
             }
             }
@@ -823,7 +858,7 @@ internal class TransformOverlay : Overlay
 
 
         return snapped;
         return snapped;
     }
     }
-    
+
     private double GetSizeToOppositeSide(ShapeCorners corners, Anchor anchor1)
     private double GetSizeToOppositeSide(ShapeCorners corners, Anchor anchor1)
     {
     {
         Anchor opposite = TransformHelper.GetOppositeAnchor(anchor1);
         Anchor opposite = TransformHelper.GetOppositeAnchor(anchor1);