perf: Improve elbow arrow indirect binding logic (#9624)

This commit is contained in:
Márk Tolmács
2025-06-11 19:15:48 +02:00
committed by GitHub
parent 18808481fd
commit f42e1ab64e
2 changed files with 5 additions and 16 deletions

View File

@ -20,6 +20,7 @@ import {
tupleToCoors, tupleToCoors,
getSizeFromPoints, getSizeFromPoints,
isDevEnv, isDevEnv,
arrayToMap,
} from "@excalidraw/common"; } from "@excalidraw/common";
import type { AppState } from "@excalidraw/excalidraw/types"; import type { AppState } from "@excalidraw/excalidraw/types";
@ -2208,20 +2209,12 @@ const getGlobalPoint = (
return initialPoint; return initialPoint;
} }
if (element && elementsMap) { if (element) {
const fixedGlobalPoint = getGlobalFixedPointForBindableElement( return getGlobalFixedPointForBindableElement(
fixedPointRatio || [0, 0], fixedPointRatio || [0, 0],
element, element,
elementsMap, elementsMap ?? arrayToMap([element]),
); );
// NOTE: Resize scales the binding position point too, so we need to update it
return Math.abs(
distanceToElement(element, elementsMap, fixedGlobalPoint) -
FIXED_BINDING_DISTANCE,
) > 0.01
? bindPointToSnapToElementOutline(arrow, element, startOrEnd, elementsMap)
: fixedGlobalPoint;
} }
return initialPoint; return initialPoint;

View File

@ -1518,11 +1518,7 @@ export const resizeMultipleElements = (
} of elementsAndUpdates) { } of elementsAndUpdates) {
const { width, height, angle } = update; const { width, height, angle } = update;
scene.mutateElement(element, update, { scene.mutateElement(element, update);
informMutation: true,
// needed for the fixed binding point udpate to take effect
isDragging: true,
});
updateBoundElements(element, scene, { updateBoundElements(element, scene, {
simultaneouslyUpdated: elementsToUpdate, simultaneouslyUpdated: elementsToUpdate,