Browse Source

[skip ci] No jumping at the beginning

Mark Tolmacs 5 months ago
parent
commit
05d8ce55e4
2 changed files with 10 additions and 59 deletions
  1. 0 22
      packages/element/src/newElement.ts
  2. 10 37
      packages/excalidraw/components/App.tsx

+ 0 - 22
packages/element/src/newElement.ts

@@ -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(),

+ 10 - 37
packages/excalidraw/components/App.tsx

@@ -16,7 +16,6 @@ import {
   vectorSubtract,
   vectorDot,
   vectorNormalize,
-  lineSegment,
 } from "@excalidraw/math";
 import { isPointInShape } from "@excalidraw/utils/collision";
 import { getSelectionBoxShape } from "@excalidraw/utils/shape";
@@ -120,7 +119,6 @@ import {
   updateBoundElements,
   getSuggestedBindingsForArrows,
   getOutlineAvoidingPoint,
-  FIXED_BINDING_DISTANCE,
 } from "@excalidraw/element/binding";
 
 import { LinearElementEditor } from "@excalidraw/element/linearElementEditor";
@@ -232,7 +230,6 @@ import {
   hitElementBoundText,
   hitElementBoundingBoxOnly,
   hitElementItself,
-  intersectElementWithLineSegment,
 } from "@excalidraw/element/collision";
 
 import { getVisibleSceneBounds } from "@excalidraw/element/bounds";
@@ -7830,43 +7827,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,