86 lines
2.1 KiB
TypeScript
86 lines
2.1 KiB
TypeScript
|
import { SceneState } from "../scene/types";
|
||
|
import { ExcalidrawElement } from "./types";
|
||
|
|
||
|
export function handlerRectangles(
|
||
|
element: ExcalidrawElement,
|
||
|
sceneState: SceneState
|
||
|
) {
|
||
|
const elementX1 = element.x;
|
||
|
const elementX2 = element.x + element.width;
|
||
|
const elementY1 = element.y;
|
||
|
const elementY2 = element.y + element.height;
|
||
|
|
||
|
const margin = 4;
|
||
|
const minimumSize = 40;
|
||
|
const handlers: { [handler: string]: number[] } = {};
|
||
|
|
||
|
const marginX = element.width < 0 ? 8 : -8;
|
||
|
const marginY = element.height < 0 ? 8 : -8;
|
||
|
|
||
|
if (Math.abs(elementX2 - elementX1) > minimumSize) {
|
||
|
handlers["n"] = [
|
||
|
elementX1 + (elementX2 - elementX1) / 2 + sceneState.scrollX - 4,
|
||
|
elementY1 - margin + sceneState.scrollY + marginY,
|
||
|
8,
|
||
|
8
|
||
|
];
|
||
|
|
||
|
handlers["s"] = [
|
||
|
elementX1 + (elementX2 - elementX1) / 2 + sceneState.scrollX - 4,
|
||
|
elementY2 - margin + sceneState.scrollY - marginY,
|
||
|
8,
|
||
|
8
|
||
|
];
|
||
|
}
|
||
|
|
||
|
if (Math.abs(elementY2 - elementY1) > minimumSize) {
|
||
|
handlers["w"] = [
|
||
|
elementX1 - margin + sceneState.scrollX + marginX,
|
||
|
elementY1 + (elementY2 - elementY1) / 2 + sceneState.scrollY - 4,
|
||
|
8,
|
||
|
8
|
||
|
];
|
||
|
|
||
|
handlers["e"] = [
|
||
|
elementX2 - margin + sceneState.scrollX - marginX,
|
||
|
elementY1 + (elementY2 - elementY1) / 2 + sceneState.scrollY - 4,
|
||
|
8,
|
||
|
8
|
||
|
];
|
||
|
}
|
||
|
|
||
|
handlers["nw"] = [
|
||
|
elementX1 - margin + sceneState.scrollX + marginX,
|
||
|
elementY1 - margin + sceneState.scrollY + marginY,
|
||
|
8,
|
||
|
8
|
||
|
]; // nw
|
||
|
handlers["ne"] = [
|
||
|
elementX2 - margin + sceneState.scrollX - marginX,
|
||
|
elementY1 - margin + sceneState.scrollY + marginY,
|
||
|
8,
|
||
|
8
|
||
|
]; // ne
|
||
|
handlers["sw"] = [
|
||
|
elementX1 - margin + sceneState.scrollX + marginX,
|
||
|
elementY2 - margin + sceneState.scrollY - marginY,
|
||
|
8,
|
||
|
8
|
||
|
]; // sw
|
||
|
handlers["se"] = [
|
||
|
elementX2 - margin + sceneState.scrollX - marginX,
|
||
|
elementY2 - margin + sceneState.scrollY - marginY,
|
||
|
8,
|
||
|
8
|
||
|
]; // se
|
||
|
|
||
|
if (element.type === "arrow") {
|
||
|
return {
|
||
|
nw: handlers.nw,
|
||
|
se: handlers.se
|
||
|
};
|
||
|
}
|
||
|
|
||
|
return handlers;
|
||
|
}
|