From 086d012b0542e7b5f65556d84e90cee512c4f743 Mon Sep 17 00:00:00 2001 From: Mark Tolmacs Date: Thu, 24 Apr 2025 21:44:07 +0200 Subject: [PATCH] Fix errorneous corner snap for sharp diamonds Signed-off-by: Mark Tolmacs --- packages/element/src/binding.ts | 7 +++---- packages/excalidraw/renderer/interactiveScene.ts | 14 +++++++------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/packages/element/src/binding.ts b/packages/element/src/binding.ts index 0033bdd1ba..2e01b2950a 100644 --- a/packages/element/src/binding.ts +++ b/packages/element/src/binding.ts @@ -108,7 +108,6 @@ export const isBindingEnabled = (appState: AppState): boolean => { export const FIXED_BINDING_DISTANCE = 5; const BINDING_HIGHLIGHT_THICKNESS = 10; -export const BINDING_HIGHLIGHT_OFFSET = 4; const getNonDeletedElements = ( scene: Scene, @@ -1105,7 +1104,7 @@ export const snapToMid = ( if ( element.type === "diamond" - ? nonRotated[0] <= x + width * (element.roundness ? 0.035 : 1) + ? nonRotated[0] <= x + width * (element.roundness ? 0.035 : 0) : nonRotated[0] <= x + width / 2 && nonRotated[1] > center[1] - verticalThrehsold && nonRotated[1] < center[1] + verticalThrehsold @@ -1118,7 +1117,7 @@ export const snapToMid = ( ); } else if ( element.type === "diamond" - ? nonRotated[1] <= y + height * (element.roundness ? 0.035 : 1) + ? nonRotated[1] <= y + height * (element.roundness ? 0.035 : 0) : nonRotated[1] <= y + height / 2 && nonRotated[0] > center[0] - horizontalThrehsold && nonRotated[0] < center[0] + horizontalThrehsold @@ -1528,7 +1527,7 @@ export const maxBindingGap = ( // bigger bindable boundary for bigger elements Math.min(0.25 * smallerDimension, 32), // keep in sync with the zoomed highlight - BINDING_HIGHLIGHT_THICKNESS / zoomValue + BINDING_HIGHLIGHT_OFFSET, + BINDING_HIGHLIGHT_THICKNESS / zoomValue + FIXED_BINDING_DISTANCE, ); }; diff --git a/packages/excalidraw/renderer/interactiveScene.ts b/packages/excalidraw/renderer/interactiveScene.ts index 419a315f32..4388233000 100644 --- a/packages/excalidraw/renderer/interactiveScene.ts +++ b/packages/excalidraw/renderer/interactiveScene.ts @@ -17,10 +17,7 @@ import { throttleRAF, } from "@excalidraw/common"; -import { - BINDING_HIGHLIGHT_OFFSET, - maxBindingGap, -} from "@excalidraw/element/binding"; +import { maxBindingGap } from "@excalidraw/element/binding"; import { LinearElementEditor } from "@excalidraw/element/linearElementEditor"; import { getOmitSidesForDevice, @@ -373,9 +370,12 @@ const renderBindingHighlightForBindableElement = ( context.strokeStyle = "rgba(0,0,0,.05)"; context.fillStyle = "rgba(0,0,0,.05)"; // When zooming out, make line width greater for visibility - context.lineWidth = - maxBindingGap(element, element.width, element.height, zoom) - - BINDING_HIGHLIGHT_OFFSET; + context.lineWidth = maxBindingGap( + element, + element.width, + element.height, + zoom, + ); // To ensure the binding highlight doesn't overlap the element itself const padding = maxBindingGap(element, element.width, element.height, zoom); //context.lineWidth / 2 + BINDING_HIGHLIGHT_OFFSET;