fix: binding text to non-bindable containers and not always preferring selection (#4655)

This commit is contained in:
David Luzar 2022-03-02 17:04:09 +01:00 committed by GitHub
parent 8e26d5b500
commit 6d0716eb6b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 336 additions and 85 deletions

View file

@ -1,9 +1,11 @@
import {
ExcalidrawElement,
ExcalidrawTextContainer,
NonDeletedExcalidrawElement,
} from "../element/types";
import { getElementAbsoluteCoords } from "../element";
import { isTextBindableContainer } from "../element/typeChecks";
export const hasBackground = (type: string) =>
type === "rectangle" ||
@ -72,11 +74,11 @@ export const getElementsAtPosition = (
);
};
export const getElementContainingPosition = (
export const getTextBindableContainerAtPosition = (
elements: readonly ExcalidrawElement[],
x: number,
y: number,
) => {
): ExcalidrawTextContainer | null => {
let hitElement = null;
// We need to to hit testing from front (end of the array) to back (beginning of the array)
for (let index = elements.length - 1; index >= 0; --index) {
@ -89,5 +91,5 @@ export const getElementContainingPosition = (
break;
}
}
return hitElement;
return isTextBindableContainer(hitElement) ? hitElement : null;
};

View file

@ -14,7 +14,7 @@ export {
canHaveArrowheads,
canChangeSharpness,
getElementAtPosition,
getElementContainingPosition,
getTextBindableContainerAtPosition,
hasText,
getElementsAtPosition,
} from "./comparisons";