Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c7a829e22b |
@@ -67,6 +67,7 @@ import {
|
|||||||
deconstructRectanguloidElement,
|
deconstructRectanguloidElement,
|
||||||
projectFixedPointOntoDiagonal,
|
projectFixedPointOntoDiagonal,
|
||||||
} from "./utils";
|
} from "./utils";
|
||||||
|
import { moveArrowAboveBindable } from "./zindex";
|
||||||
|
|
||||||
import type { Scene } from "./Scene";
|
import type { Scene } from "./Scene";
|
||||||
|
|
||||||
@@ -1084,6 +1085,7 @@ export const updateBoundElements = (
|
|||||||
simultaneouslyUpdated?: readonly ExcalidrawElement[];
|
simultaneouslyUpdated?: readonly ExcalidrawElement[];
|
||||||
changedElements?: Map<string, ExcalidrawElement>;
|
changedElements?: Map<string, ExcalidrawElement>;
|
||||||
indirectArrowUpdate?: boolean;
|
indirectArrowUpdate?: boolean;
|
||||||
|
skipArrowZindexUpdate?: boolean;
|
||||||
},
|
},
|
||||||
) => {
|
) => {
|
||||||
if (!isBindableElement(changedElement)) {
|
if (!isBindableElement(changedElement)) {
|
||||||
@@ -1152,6 +1154,21 @@ export const updateBoundElements = (
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (point) {
|
if (point) {
|
||||||
|
if (!options?.skipArrowZindexUpdate) {
|
||||||
|
moveArrowAboveBindable(
|
||||||
|
LinearElementEditor.getPointGlobalCoordinates(
|
||||||
|
element,
|
||||||
|
point,
|
||||||
|
elementsMap,
|
||||||
|
),
|
||||||
|
element,
|
||||||
|
scene.getNonDeletedElements(),
|
||||||
|
scene.getNonDeletedElementsMap(),
|
||||||
|
scene,
|
||||||
|
changedElement,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
bindingProp === "startBinding" ? 0 : element.points.length - 1,
|
bindingProp === "startBinding" ? 0 : element.points.length - 1,
|
||||||
{ point },
|
{ point },
|
||||||
|
|||||||
@@ -1970,6 +1970,7 @@ export class ElementsDelta implements DeltaContainer<SceneElementsMap> {
|
|||||||
// TODO: with precise bindings this is quite expensive, so consider optimisation so it's only triggered when the arrow does not intersect (imprecise) element bounds
|
// TODO: with precise bindings this is quite expensive, so consider optimisation so it's only triggered when the arrow does not intersect (imprecise) element bounds
|
||||||
updateBoundElements(element, scene, {
|
updateBoundElements(element, scene, {
|
||||||
changedElements: changed,
|
changedElements: changed,
|
||||||
|
skipArrowZindexUpdate: true,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ import type {
|
|||||||
NonDeletedExcalidrawElement,
|
NonDeletedExcalidrawElement,
|
||||||
NonDeletedSceneElementsMap,
|
NonDeletedSceneElementsMap,
|
||||||
Ordered,
|
Ordered,
|
||||||
OrderedExcalidrawElement,
|
|
||||||
} from "./types";
|
} from "./types";
|
||||||
|
|
||||||
const isOfTargetFrame = (element: ExcalidrawElement, frameId: string) => {
|
const isOfTargetFrame = (element: ExcalidrawElement, frameId: string) => {
|
||||||
@@ -157,7 +156,7 @@ export const moveArrowAboveBindable = (
|
|||||||
elementsMap: NonDeletedSceneElementsMap,
|
elementsMap: NonDeletedSceneElementsMap,
|
||||||
scene: Scene,
|
scene: Scene,
|
||||||
hit?: NonDeletedExcalidrawElement,
|
hit?: NonDeletedExcalidrawElement,
|
||||||
): readonly OrderedExcalidrawElement[] => {
|
) => {
|
||||||
const hoveredElement = hit
|
const hoveredElement = hit
|
||||||
? hit
|
? hit
|
||||||
: getHoveredElementForBinding(point, elements, elementsMap);
|
: getHoveredElementForBinding(point, elements, elementsMap);
|
||||||
|
|||||||
Reference in New Issue
Block a user