[skip ci] No jumping at the beginning

This commit is contained in:
Mark Tolmacs 2025-03-27 20:12:01 +01:00
parent c8ade51b53
commit ea5ad1412c
2 changed files with 10 additions and 59 deletions

View file

@ -98,28 +98,6 @@ const _newElementBase = <T extends ExcalidrawElement>(
...rest
}: ElementConstructorOpts & Omit<Partial<ExcalidrawGenericElement>, "type">,
) => {
// NOTE (mtolmacs): This is a temporary check to detect extremely large
// element position or sizing
if (
x < -1e6 ||
x > 1e6 ||
y < -1e6 ||
y > 1e6 ||
width < -1e6 ||
width > 1e6 ||
height < -1e6 ||
height > 1e6
) {
console.error("New element size or position is too large", {
x,
y,
width,
height,
// @ts-ignore
points: rest.points,
});
}
// assign type to guard against excess properties
const element: Merge<ExcalidrawGenericElement, { type: T["type"] }> = {
id: rest.id || randomId(),

View file

@ -16,7 +16,6 @@ import {
vectorSubtract,
vectorDot,
vectorNormalize,
lineSegment,
} from "@excalidraw/math";
import { isPointInShape } from "@excalidraw/utils/collision";
import { getSelectionBoxShape } from "@excalidraw/utils/shape";
@ -121,7 +120,6 @@ import {
updateBoundElements,
getSuggestedBindingsForArrows,
getOutlineAvoidingPoint,
FIXED_BINDING_DISTANCE,
} from "@excalidraw/element/binding";
import { LinearElementEditor } from "@excalidraw/element/linearElementEditor";
@ -233,7 +231,6 @@ import {
hitElementBoundText,
hitElementBoundingBoxOnly,
hitElementItself,
intersectElementWithLineSegment,
} from "@excalidraw/element/collision";
import { getVisibleSceneBounds } from "@excalidraw/element/bounds";
@ -7866,43 +7863,19 @@ class App extends React.Component<AppProps, AppState> {
this.state.currentItemArrowType === ARROW_TYPE.elbow ? [] : null,
});
const hoveredElement = getHoveredElementForBinding(
{ x: gridX, y: gridY },
this.scene.getNonDeletedElements(),
this.scene.getNonDeletedElementsMap(),
const [x, y] = getOutlineAvoidingPoint(
arrow,
pointFrom<GlobalPoint>(gridX, gridY),
0,
this.scene,
this.state.zoom,
true,
this.state.currentItemArrowType === ARROW_TYPE.elbow,
);
if (hoveredElement) {
[arrow.x, arrow.y] =
intersectElementWithLineSegment(
hoveredElement,
lineSegment(
pointFrom<GlobalPoint>(gridX, gridY),
pointFrom<GlobalPoint>(
gridX,
hoveredElement.y + hoveredElement.height / 2,
),
),
2 * FIXED_BINDING_DISTANCE,
)[0] ??
intersectElementWithLineSegment(
hoveredElement,
lineSegment(
pointFrom<GlobalPoint>(gridX, gridY),
pointFrom<GlobalPoint>(
hoveredElement.x + hoveredElement.width / 2,
gridY,
),
),
2 * FIXED_BINDING_DISTANCE,
)[0] ??
pointFrom<GlobalPoint>(gridX, gridY);
}
element = arrow;
element = {
...arrow,
x,
y,
};
} else {
element = newLinearElement({
type: elementType,