From ac5612db2aeb0986655d9f14d71f6b67e6cae7c8 Mon Sep 17 00:00:00 2001 From: Mark Tolmacs Date: Sat, 2 Aug 2025 08:24:56 +0200 Subject: [PATCH] Different approach to inside binding Signed-off-by: Mark Tolmacs --- packages/element/src/binding.ts | 3 ++- packages/element/src/linearElementEditor.ts | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/element/src/binding.ts b/packages/element/src/binding.ts index e524c0e396..ec62b51ff2 100644 --- a/packages/element/src/binding.ts +++ b/packages/element/src/binding.ts @@ -409,7 +409,8 @@ const bindingStrategyForNewSimpleArrowEndpointDragging = ( otherElement.x + otherElement.width / 2, otherElement.y + otherElement.height / 2, ); - const otherIsInsideBinding = arrow.startBinding?.mode === "inside"; + const otherIsInsideBinding = + !!appState.selectedLinearElement?.pointerDownState.arrowStartIsInside; // We need to "jump" the start point out with the detached // focus point of the center of the bound element diff --git a/packages/element/src/linearElementEditor.ts b/packages/element/src/linearElementEditor.ts index dd3d49e1cc..347d6a889f 100644 --- a/packages/element/src/linearElementEditor.ts +++ b/packages/element/src/linearElementEditor.ts @@ -143,6 +143,7 @@ export class LinearElementEditor { added: boolean; }; arrowOriginalStartPoint?: GlobalPoint; + arrowStartIsInside: boolean; }>; /** whether you're dragging a point */ @@ -186,6 +187,7 @@ export class LinearElementEditor { index: null, added: false, }, + arrowStartIsInside: false, }; this.hoverPointIndex = -1; this.segmentMidPointHoveredCoords = null; @@ -582,6 +584,7 @@ export class LinearElementEditor { pointerDownState: { ...editingLinearElement.pointerDownState, arrowOriginalStartPoint: undefined, + arrowStartIsInside: false, }, }; } @@ -889,6 +892,9 @@ export class LinearElementEditor { index: segmentMidpointIndex, added: false, }, + arrowStartIsInside: + !!app.state.newElement && + (app.state.bindMode === "inside" || app.state.bindMode === "skip"), }, selectedPointsIndices: [element.points.length - 1], lastUncommittedPoint: null, @@ -948,6 +954,9 @@ export class LinearElementEditor { index: segmentMidpointIndex, added: false, }, + arrowStartIsInside: + !!app.state.newElement && + (app.state.bindMode === "inside" || app.state.bindMode === "skip"), }, selectedPointsIndices: nextSelectedPointsIndices, pointerOffset: targetPoint