Skip to content

Commit bca1805

Browse files
committed
feat: add utility to check if screen position is inside a div element for macOS drag-and-drop
1 parent 884871f commit bca1805

2 files changed

Lines changed: 19 additions & 0 deletions

File tree

apps/web/src/core/vscode/use-mac-webview-drag-bridge.hook.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { useCanvasContext } from '#core/providers';
33
import {
44
convertFromDivElementCoordsToKonvaCoords,
55
getScrollFromDiv,
6+
isScreenPositionInsideDivElement,
67
portScreenPositionToDivCoordinates,
78
} from '#pods/canvas/canvas.util';
89
import { calculateShapeOffsetToXDropCoordinate } from '#pods/canvas/use-monitor.business';
@@ -70,6 +71,10 @@ export const useMacWebviewDragBridge = (
7071
}
7172

7273
const screenPosition = { x: clientX, y: clientY };
74+
if (!isScreenPositionInsideDivElement(dropDivElement, screenPosition)) {
75+
return;
76+
}
77+
7378
const relativeDivPosition = portScreenPositionToDivCoordinates(
7479
dropDivElement,
7580
screenPosition

apps/web/src/pods/canvas/canvas.util.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,20 @@ export const portScreenPositionToDivCoordinates = (
2424
return { x, y };
2525
};
2626

27+
export const isScreenPositionInsideDivElement = (
28+
divElement: HTMLDivElement,
29+
screenPosition: Coord
30+
) => {
31+
const { left, right, top, bottom } = divElement.getBoundingClientRect();
32+
33+
return (
34+
screenPosition.x >= left &&
35+
screenPosition.x <= right &&
36+
screenPosition.y >= top &&
37+
screenPosition.y <= bottom
38+
);
39+
};
40+
2741
interface PositionInfo {
2842
screenPosition: Coord;
2943
relativeDivPosition: Coord;

0 commit comments

Comments
 (0)