123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import { ExcalidrawElement } from "../element/types";
- import { hitTest } from "../element/collision";
- import { getElementAbsoluteCoords } from "../element";
- export const hasBackground = (elements: readonly ExcalidrawElement[]) =>
- elements.some(
- element =>
- element.isSelected &&
- (element.type === "rectangle" ||
- element.type === "ellipse" ||
- element.type === "diamond")
- );
- export const hasStroke = (elements: readonly ExcalidrawElement[]) =>
- elements.some(
- element =>
- element.isSelected &&
- (element.type === "rectangle" ||
- element.type === "ellipse" ||
- element.type === "diamond" ||
- element.type === "arrow" ||
- element.type === "line")
- );
- export const hasText = (elements: readonly ExcalidrawElement[]) =>
- elements.some(element => element.isSelected && element.type === "text");
- export function getElementAtPosition(
- elements: readonly ExcalidrawElement[],
- x: number,
- y: number
- ) {
- let hitElement = null;
- // We need to to hit testing from front (end of the array) to back (beginning of the array)
- for (let i = elements.length - 1; i >= 0; --i) {
- if (hitTest(elements[i], x, y)) {
- hitElement = elements[i];
- break;
- }
- }
- return hitElement;
- }
- export function getElementContainingPosition(
- elements: readonly ExcalidrawElement[],
- x: number,
- y: number
- ) {
- let hitElement = null;
- // We need to to hit testing from front (end of the array) to back (beginning of the array)
- for (let i = elements.length - 1; i >= 0; --i) {
- const [x1, y1, x2, y2] = getElementAbsoluteCoords(elements[i]);
- if (x1 < x && x < x2 && y1 < y && y < y2) {
- hitElement = elements[i];
- break;
- }
- }
- return hitElement;
- }
|