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
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 5 additions and 16 deletions

View File

@ -20,6 +20,7 @@ import {
tupleToCoors,
getSizeFromPoints,
isDevEnv,
arrayToMap,
} from "@excalidraw/common";
import type { AppState } from "@excalidraw/excalidraw/types";
@ -2208,20 +2209,12 @@ const getGlobalPoint = (
return initialPoint;
}
if (element && elementsMap) {
const fixedGlobalPoint = getGlobalFixedPointForBindableElement(
if (element) {
return getGlobalFixedPointForBindableElement(
fixedPointRatio || [0, 0],
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;

View File

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