From 1156086b773603f29f4e7eae43d81f81995b683d Mon Sep 17 00:00:00 2001 From: Ryan Di Date: Fri, 21 Mar 2025 01:31:07 +1100 Subject: [PATCH] bound text related fixes --- packages/excalidraw/element/bounds.ts | 13 +++++++++++++ packages/excalidraw/lasso/index.ts | 18 +++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/packages/excalidraw/element/bounds.ts b/packages/excalidraw/element/bounds.ts index 066868d7b..5fc578eba 100644 --- a/packages/excalidraw/element/bounds.ts +++ b/packages/excalidraw/element/bounds.ts @@ -315,6 +315,19 @@ export const getElementLineSegments = ( return [...rotatedSides, ...cornerSegments]; } else if (shape.type === "polygon") { + if (isTextElement(element)) { + const container = getContainerElement(element, elementsMap); + if (container && isLinearElement(container)) { + const segments: LineSegment[] = [ + lineSegment(pointFrom(x1, y1), pointFrom(x2, y1)), + lineSegment(pointFrom(x2, y1), pointFrom(x2, y2)), + lineSegment(pointFrom(x2, y2), pointFrom(x1, y2)), + lineSegment(pointFrom(x1, y2), pointFrom(x1, y1)), + ]; + return segments; + } + } + const points = shape.data as GlobalPoint[]; const segments: LineSegment[] = []; for (let i = 0; i < points.length - 1; i++) { diff --git a/packages/excalidraw/lasso/index.ts b/packages/excalidraw/lasso/index.ts index df7df8ebb..53a52a9b8 100644 --- a/packages/excalidraw/lasso/index.ts +++ b/packages/excalidraw/lasso/index.ts @@ -4,7 +4,11 @@ import { type AnimationFrameHandler } from "../animation-frame-handler"; import { getElementLineSegments } from "../element/bounds"; import { LinearElementEditor } from "../element/linearElementEditor"; -import { isFrameLikeElement, isLinearElement } from "../element/typeChecks"; +import { + isFrameLikeElement, + isLinearElement, + isTextElement, +} from "../element/typeChecks"; import { getFrameChildren } from "../frame"; import { selectGroupsForSelectedElements } from "../groups"; @@ -19,6 +23,7 @@ import type { } from "../element/types"; import type App from "../components/App"; import type { LassoWorkerInput, LassoWorkerOutput } from "./types"; +import { getContainerElement } from "../element/textElement"; export class LassoTrail extends AnimatedTrail { private intersectedElements: Set = new Set(); @@ -108,6 +113,17 @@ export class LassoTrail extends AnimatedTrail { delete nextSelectedElementIds[child.id]; } } + + if (element && isTextElement(element)) { + const container = getContainerElement( + element, + this.app.scene.getNonDeletedElementsMap(), + ); + if (container) { + nextSelectedElementIds[container.id] = true; + delete nextSelectedElementIds[element.id]; + } + } } const nextSelection = selectGroupsForSelectedElements(