Browse Source

Fixed always returning snap point

Krzysztof Krysiński 4 months ago
parent
commit
387c6a31d5

+ 2 - 2
src/PixiEditor/Views/Overlays/TransformOverlay/TransformOverlay.cs

@@ -984,12 +984,12 @@ internal class TransformOverlay : Overlay
             ((Anchor)capturedAnchor, SideFreedom, InternalState.ProportionalAngle1,
                 InternalState.ProportionalAngle2, cornersOnStartAnchorDrag, targetPos + snapped.Delta,
                 ScaleFromCenter,
-                SnappingController, out string snapX, out string snapY, out _);
+                SnappingController, out string snapX, out string snapY);
 
             string finalSnapX = snapped.SnapAxisXName ?? snapX;
             string finalSnapY = snapped.SnapAxisYName ?? snapY;
             VecD? finalSnapPoint = null;
-            if (newCorners.HasValue)
+            if (newCorners.HasValue && snapped.Delta != VecD.Zero)
             {
                 finalSnapPoint = TransformHelper.GetAnchorPosition(newCorners.Value, (Anchor)capturedAnchor);
             }

+ 5 - 9
src/PixiEditor/Views/Overlays/TransformOverlay/TransformUpdateHelper.cs

@@ -33,7 +33,7 @@ internal static class TransformUpdateHelper
             VecD oppositePos = TransformHelper.GetAnchorPosition(corners, opposite);
 
             snapX = snapY = "";
-            snapPoint = oppositePos;
+            snapPoint = null;
 
             // constrain desired pos to a "propotional" diagonal line if needed
             if (freedom == TransformCornerFreedom.ScaleProportionally && corners.IsRect)
@@ -45,7 +45,7 @@ internal static class TransformUpdateHelper
                 if (snappingController is not null)
                 {
                     desiredPos = snappingController.GetSnapPoint(desiredPos, direction, out snapX, out snapY);
-                    snapPoint = desiredPos;
+                    snapPoint = string.IsNullOrEmpty(snapX) && string.IsNullOrEmpty(snapY) ? null : desiredPos;
                 }
             }
             else if (freedom == TransformCornerFreedom.ScaleProportionally)
@@ -56,7 +56,7 @@ internal static class TransformUpdateHelper
                 if (snappingController is not null)
                 {
                     desiredPos = snappingController.GetSnapPoint(desiredPos, direction, out snapX, out snapY);
-                    snapPoint = desiredPos;
+                    snapPoint = string.IsNullOrEmpty(snapX) && string.IsNullOrEmpty(snapY) ? null : desiredPos;
                 }
             }
             else
@@ -64,7 +64,7 @@ internal static class TransformUpdateHelper
                 if (snappingController is not null)
                 {
                     desiredPos = snappingController.GetSnapPoint(desiredPos, out snapX, out snapY);
-                    snapPoint = desiredPos;
+                    snapPoint = string.IsNullOrEmpty(snapX) && string.IsNullOrEmpty(snapY) ? null : desiredPos;
                 }
             }
 
@@ -195,13 +195,12 @@ internal static class TransformUpdateHelper
     public static ShapeCorners? UpdateShapeFromSide
     (Anchor targetSide, TransformSideFreedom freedom, double propAngle1, double propAngle2, ShapeCorners corners,
         VecD desiredPos, bool scaleFromCenter, SnappingController? snappingController, out string snapX,
-        out string snapY, out VecD? snapPoint)
+        out string snapY)
     {
         if (!TransformHelper.IsSide(targetSide))
             throw new ArgumentException($"{targetSide} is not a side");
 
         snapX = snapY = "";
-        snapPoint = null;
 
         if (freedom == TransformSideFreedom.Locked)
             return corners;
@@ -221,7 +220,6 @@ internal static class TransformUpdateHelper
             {
                 VecD scaleDirection = corners.RectCenter - oppositePos;
                 desiredPos = snappingController.GetSnapPoint(desiredPos, scaleDirection, out snapX, out snapY);
-                snapPoint = desiredPos;
             }
 
             double scalingFactor = (desiredPos - oppositePos) * direction;
@@ -312,7 +310,6 @@ internal static class TransformUpdateHelper
                 {
                     VecD direction = corners.RectCenter - desiredPos;
                     desiredPos = snappingController.GetSnapPoint(desiredPos, direction, out snapX, out snapY);
-                    snapPoint = desiredPos;
                 }
             }
             else if (freedom == TransformSideFreedom.Stretch)
@@ -327,7 +324,6 @@ internal static class TransformUpdateHelper
                 {
                     VecD direction = desiredPos - targetPos;
                     desiredPos = snappingController.GetSnapPoint(desiredPos, direction, out snapX, out snapY);
-                    snapPoint = desiredPos;
                 }
             }