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,
             ((Anchor)capturedAnchor, SideFreedom, InternalState.ProportionalAngle1,
                 InternalState.ProportionalAngle2, cornersOnStartAnchorDrag, targetPos + snapped.Delta,
                 InternalState.ProportionalAngle2, cornersOnStartAnchorDrag, targetPos + snapped.Delta,
                 ScaleFromCenter,
                 ScaleFromCenter,
-                SnappingController, out string snapX, out string snapY, out _);
+                SnappingController, out string snapX, out string snapY);
 
 
             string finalSnapX = snapped.SnapAxisXName ?? snapX;
             string finalSnapX = snapped.SnapAxisXName ?? snapX;
             string finalSnapY = snapped.SnapAxisYName ?? snapY;
             string finalSnapY = snapped.SnapAxisYName ?? snapY;
             VecD? finalSnapPoint = null;
             VecD? finalSnapPoint = null;
-            if (newCorners.HasValue)
+            if (newCorners.HasValue && snapped.Delta != VecD.Zero)
             {
             {
                 finalSnapPoint = TransformHelper.GetAnchorPosition(newCorners.Value, (Anchor)capturedAnchor);
                 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);
             VecD oppositePos = TransformHelper.GetAnchorPosition(corners, opposite);
 
 
             snapX = snapY = "";
             snapX = snapY = "";
-            snapPoint = oppositePos;
+            snapPoint = null;
 
 
             // constrain desired pos to a "propotional" diagonal line if needed
             // constrain desired pos to a "propotional" diagonal line if needed
             if (freedom == TransformCornerFreedom.ScaleProportionally && corners.IsRect)
             if (freedom == TransformCornerFreedom.ScaleProportionally && corners.IsRect)
@@ -45,7 +45,7 @@ internal static class TransformUpdateHelper
                 if (snappingController is not null)
                 if (snappingController is not null)
                 {
                 {
                     desiredPos = snappingController.GetSnapPoint(desiredPos, direction, out snapX, out snapY);
                     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)
             else if (freedom == TransformCornerFreedom.ScaleProportionally)
@@ -56,7 +56,7 @@ internal static class TransformUpdateHelper
                 if (snappingController is not null)
                 if (snappingController is not null)
                 {
                 {
                     desiredPos = snappingController.GetSnapPoint(desiredPos, direction, out snapX, out snapY);
                     desiredPos = snappingController.GetSnapPoint(desiredPos, direction, out snapX, out snapY);
-                    snapPoint = desiredPos;
+                    snapPoint = string.IsNullOrEmpty(snapX) && string.IsNullOrEmpty(snapY) ? null : desiredPos;
                 }
                 }
             }
             }
             else
             else
@@ -64,7 +64,7 @@ internal static class TransformUpdateHelper
                 if (snappingController is not null)
                 if (snappingController is not null)
                 {
                 {
                     desiredPos = snappingController.GetSnapPoint(desiredPos, out snapX, out snapY);
                     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
     public static ShapeCorners? UpdateShapeFromSide
     (Anchor targetSide, TransformSideFreedom freedom, double propAngle1, double propAngle2, ShapeCorners corners,
     (Anchor targetSide, TransformSideFreedom freedom, double propAngle1, double propAngle2, ShapeCorners corners,
         VecD desiredPos, bool scaleFromCenter, SnappingController? snappingController, out string snapX,
         VecD desiredPos, bool scaleFromCenter, SnappingController? snappingController, out string snapX,
-        out string snapY, out VecD? snapPoint)
+        out string snapY)
     {
     {
         if (!TransformHelper.IsSide(targetSide))
         if (!TransformHelper.IsSide(targetSide))
             throw new ArgumentException($"{targetSide} is not a side");
             throw new ArgumentException($"{targetSide} is not a side");
 
 
         snapX = snapY = "";
         snapX = snapY = "";
-        snapPoint = null;
 
 
         if (freedom == TransformSideFreedom.Locked)
         if (freedom == TransformSideFreedom.Locked)
             return corners;
             return corners;
@@ -221,7 +220,6 @@ internal static class TransformUpdateHelper
             {
             {
                 VecD scaleDirection = corners.RectCenter - oppositePos;
                 VecD scaleDirection = corners.RectCenter - oppositePos;
                 desiredPos = snappingController.GetSnapPoint(desiredPos, scaleDirection, out snapX, out snapY);
                 desiredPos = snappingController.GetSnapPoint(desiredPos, scaleDirection, out snapX, out snapY);
-                snapPoint = desiredPos;
             }
             }
 
 
             double scalingFactor = (desiredPos - oppositePos) * direction;
             double scalingFactor = (desiredPos - oppositePos) * direction;
@@ -312,7 +310,6 @@ internal static class TransformUpdateHelper
                 {
                 {
                     VecD direction = corners.RectCenter - desiredPos;
                     VecD direction = corners.RectCenter - desiredPos;
                     desiredPos = snappingController.GetSnapPoint(desiredPos, direction, out snapX, out snapY);
                     desiredPos = snappingController.GetSnapPoint(desiredPos, direction, out snapX, out snapY);
-                    snapPoint = desiredPos;
                 }
                 }
             }
             }
             else if (freedom == TransformSideFreedom.Stretch)
             else if (freedom == TransformSideFreedom.Stretch)
@@ -327,7 +324,6 @@ internal static class TransformUpdateHelper
                 {
                 {
                     VecD direction = desiredPos - targetPos;
                     VecD direction = desiredPos - targetPos;
                     desiredPos = snappingController.GetSnapPoint(desiredPos, direction, out snapX, out snapY);
                     desiredPos = snappingController.GetSnapPoint(desiredPos, direction, out snapX, out snapY);
-                    snapPoint = desiredPos;
                 }
                 }
             }
             }