diff --git a/packages/excalidraw/components/App.tsx b/packages/excalidraw/components/App.tsx index 54b90778b4..319445dac0 100644 --- a/packages/excalidraw/components/App.tsx +++ b/packages/excalidraw/components/App.tsx @@ -456,7 +456,7 @@ import { vectorFromPoint, vectorSubtract, vectorDot, - vectorMagnitude, + vectorNormalize, } from "../../math"; import { cropElement } from "../element/cropElement"; @@ -7969,34 +7969,20 @@ class App extends React.Component { croppingElement.angle, ), ); - const topEdge = vectorSubtract(topRight, topLeft); - const leftEdge = vectorSubtract(bottomLeft, topLeft); + const topEdge = vectorNormalize( + vectorSubtract(topRight, topLeft), + ); + const leftEdge = vectorNormalize( + vectorSubtract(bottomLeft, topLeft), + ); /** - * project instantDrafOffset onto leftEdge to find out the y scalar - * topEdge to find out the x scalar + * project instantDrafOffset onto leftEdge and topEdge to decompose */ - const scaleY = - vectorDot(instantDragOffset, leftEdge) / - vectorDot(leftEdge, leftEdge); - const scaleX = - vectorDot(instantDragOffset, topEdge) / - vectorDot(topEdge, topEdge); - - instantDragOffset = vectorScale( - vector(scaleX, scaleY), - /** - * projection results in small x and y scalars - * scale to account for this - */ - Math.min( - Math.max( - vectorMagnitude(topEdge), - vectorMagnitude(leftEdge), - ), - 100, - ), + instantDragOffset = vector( + vectorDot(instantDragOffset, topEdge), + vectorDot(instantDragOffset, leftEdge), ); }