mirror of
https://github.com/excalidraw/excalidraw
synced 2025-07-25 13:58:22 +08:00
Arrow dragging gets a little drag to avoid accidental unbinding
This commit is contained in:
@ -107,8 +107,21 @@ export const dragSelectedElements = (
|
|||||||
);
|
);
|
||||||
|
|
||||||
elementsToUpdate.forEach((element) => {
|
elementsToUpdate.forEach((element) => {
|
||||||
updateElementCoords(pointerDownState, element, scene, adjustedOffset);
|
const isArrow = !isArrowElement(element);
|
||||||
|
const isStartBoundElementSelected =
|
||||||
|
isArrow ||
|
||||||
|
(element.startBinding
|
||||||
|
? elementsToUpdateIds.has(element.startBinding.elementId)
|
||||||
|
: false);
|
||||||
|
const isEndBoundElementSelected =
|
||||||
|
isArrow ||
|
||||||
|
(element.endBinding
|
||||||
|
? elementsToUpdateIds.has(element.endBinding.elementId)
|
||||||
|
: false);
|
||||||
|
|
||||||
if (!isArrowElement(element)) {
|
if (!isArrowElement(element)) {
|
||||||
|
updateElementCoords(pointerDownState, element, scene, adjustedOffset);
|
||||||
|
|
||||||
// skip arrow labels since we calculate its position during render
|
// skip arrow labels since we calculate its position during render
|
||||||
const textElement = getBoundTextElement(
|
const textElement = getBoundTextElement(
|
||||||
element,
|
element,
|
||||||
@ -126,13 +139,12 @@ export const dragSelectedElements = (
|
|||||||
updateBoundElements(element, scene, {
|
updateBoundElements(element, scene, {
|
||||||
simultaneouslyUpdated: Array.from(elementsToUpdate),
|
simultaneouslyUpdated: Array.from(elementsToUpdate),
|
||||||
});
|
});
|
||||||
} else {
|
} else if (
|
||||||
const isStartBoundElementSelected = element.startBinding
|
// NOTE: Add a little initial drag to the arrow dragging to avoid
|
||||||
? elementsToUpdateIds.has(element.startBinding.elementId)
|
// accidentally unbinding the arrow when the user just wants to select it.
|
||||||
: false;
|
Math.max(Math.abs(adjustedOffset.x), Math.abs(adjustedOffset.y)) > 1
|
||||||
const isEndBoundElementSelected = element.endBinding
|
) {
|
||||||
? elementsToUpdateIds.has(element.endBinding.elementId)
|
updateElementCoords(pointerDownState, element, scene, adjustedOffset);
|
||||||
: false;
|
|
||||||
|
|
||||||
const shouldUnbindStart =
|
const shouldUnbindStart =
|
||||||
element.startBinding && !isStartBoundElementSelected;
|
element.startBinding && !isStartBoundElementSelected;
|
||||||
|
Reference in New Issue
Block a user