From 92b90518383e6da5b01546207e0b9ad5fbe633a2 Mon Sep 17 00:00:00 2001 From: Mark Tolmacs Date: Sat, 30 Aug 2025 16:02:32 +0200 Subject: [PATCH] Simplify state --- packages/element/src/binding.ts | 10 ++++------ packages/element/src/linearElementEditor.ts | 11 +++++------ packages/excalidraw/actions/actionFinalize.tsx | 2 +- packages/excalidraw/components/App.tsx | 2 +- 4 files changed, 11 insertions(+), 14 deletions(-) diff --git a/packages/element/src/binding.ts b/packages/element/src/binding.ts index 1c5b520efe..abc23c34bf 100644 --- a/packages/element/src/binding.ts +++ b/packages/element/src/binding.ts @@ -303,8 +303,7 @@ const bindingStrategyForNewSimpleArrowEndpointDragging = ( // With new arrows it represents the continuous dragging of the end point if (endDragged) { - const arrowOriginalStartPoint = - appState?.selectedLinearElement?.pointerDownState.arrowOriginalStartPoint; + const origin = appState?.selectedLinearElement?.pointerDownState.origin; // Inside -> inside binding if (hit && arrow.startBinding?.elementId === hit.id) { @@ -317,7 +316,7 @@ const bindingStrategyForNewSimpleArrowEndpointDragging = ( start: { mode: "inside", element: hit, - focusPoint: arrowOriginalStartPoint ?? center, + focusPoint: origin ?? center, }, end: { mode: "inside", element: hit, focusPoint: point }, }; @@ -337,12 +336,11 @@ const bindingStrategyForNewSimpleArrowEndpointDragging = ( mode: otherIsInsideBinding ? "inside" : "orbit", element: otherElement, focusPoint: otherIsInsideBinding - ? arrowOriginalStartPoint ?? pointFrom(arrow.x, arrow.y) + ? origin ?? pointFrom(arrow.x, arrow.y) : snapToCenter( otherElement, elementsMap, - arrowOriginalStartPoint ?? - pointFrom(arrow.x, arrow.y), + origin ?? pointFrom(arrow.x, arrow.y), ), }; diff --git a/packages/element/src/linearElementEditor.ts b/packages/element/src/linearElementEditor.ts index 084187f706..129ecd9586 100644 --- a/packages/element/src/linearElementEditor.ts +++ b/packages/element/src/linearElementEditor.ts @@ -135,13 +135,12 @@ export class LinearElementEditor { prevSelectedPointsIndices: readonly number[] | null; /** index */ lastClickedPoint: number; - origin: Readonly<{ x: number; y: number }> | null; + origin: Readonly | null; segmentMidpoint: { value: GlobalPoint | null; index: number | null; added: boolean; }; - arrowOriginalStartPoint?: GlobalPoint; arrowStartIsInside: boolean; }>; @@ -631,7 +630,7 @@ export class LinearElementEditor { customLineAngle: null, pointerDownState: { ...editingLinearElement.pointerDownState, - arrowOriginalStartPoint: undefined, + origin: null, arrowStartIsInside: false, }, }; @@ -933,7 +932,7 @@ export class LinearElementEditor { pointerDownState: { prevSelectedPointsIndices: linearElementEditor.selectedPointsIndices, lastClickedPoint: -1, - origin: { x: scenePointer.x, y: scenePointer.y }, + origin: pointFrom(scenePointer.x, scenePointer.y), segmentMidpoint: { value: segmentMidpoint, index: segmentMidpointIndex, @@ -994,7 +993,7 @@ export class LinearElementEditor { pointerDownState: { prevSelectedPointsIndices: linearElementEditor.selectedPointsIndices, lastClickedPoint: clickedPointIndex, - origin: { x: scenePointer.x, y: scenePointer.y }, + origin: pointFrom(scenePointer.x, scenePointer.y), segmentMidpoint: { value: segmentMidpoint, index: segmentMidpointIndex, @@ -1525,7 +1524,7 @@ export class LinearElementEditor { const origin = linearElementEditor.pointerDownState.origin!; const dist = pointDistance( - pointFrom(origin.x, origin.y), + origin, pointFrom(pointerCoords.x, pointerCoords.y), ); if ( diff --git a/packages/excalidraw/actions/actionFinalize.tsx b/packages/excalidraw/actions/actionFinalize.tsx index 3a9be58313..7e29a935b9 100644 --- a/packages/excalidraw/actions/actionFinalize.tsx +++ b/packages/excalidraw/actions/actionFinalize.tsx @@ -280,7 +280,7 @@ export const actionFinalize = register({ : selectedLinearElement.isEditing, pointerDownState: { ...selectedLinearElement.pointerDownState, - arrowOriginalStartPoint: undefined, + origin: null, }, } : selectedLinearElement; diff --git a/packages/excalidraw/components/App.tsx b/packages/excalidraw/components/App.tsx index d4a515ea6c..debc67cc24 100644 --- a/packages/excalidraw/components/App.tsx +++ b/packages/excalidraw/components/App.tsx @@ -8346,7 +8346,7 @@ class App extends React.Component { pointerDownState: { ...linearElementEditor.pointerDownState, lastClickedPoint: endIdx, - arrowOriginalStartPoint: pointFrom( + origin: pointFrom( pointerDownState.origin.x, pointerDownState.origin.y, ),