|
@@ -92,71 +92,69 @@ export const bindTextToShapeAfterDuplication = (
|
|
|
};
|
|
|
|
|
|
export const handleBindTextResize = (
|
|
|
- elements: readonly NonDeletedExcalidrawElement[],
|
|
|
+ element: NonDeletedExcalidrawElement,
|
|
|
transformHandleType: MaybeTransformHandleType,
|
|
|
) => {
|
|
|
- elements.forEach((element) => {
|
|
|
- const boundTextElementId = getBoundTextElementId(element);
|
|
|
- if (boundTextElementId) {
|
|
|
- const textElement = Scene.getScene(element)!.getElement(
|
|
|
- boundTextElementId,
|
|
|
- ) as ExcalidrawTextElement;
|
|
|
- if (textElement && textElement.text) {
|
|
|
- if (!element) {
|
|
|
- return;
|
|
|
- }
|
|
|
- let text = textElement.text;
|
|
|
- let nextHeight = textElement.height;
|
|
|
- let containerHeight = element.height;
|
|
|
- let nextBaseLine = textElement.baseline;
|
|
|
- if (transformHandleType !== "n" && transformHandleType !== "s") {
|
|
|
- if (text) {
|
|
|
- text = wrapText(
|
|
|
- textElement.originalText,
|
|
|
- getFontString(textElement),
|
|
|
- element.width,
|
|
|
- );
|
|
|
- }
|
|
|
-
|
|
|
- const dimensions = measureText(
|
|
|
- text,
|
|
|
+ const boundTextElementId = getBoundTextElementId(element);
|
|
|
+ if (boundTextElementId) {
|
|
|
+ const textElement = Scene.getScene(element)!.getElement(
|
|
|
+ boundTextElementId,
|
|
|
+ ) as ExcalidrawTextElement;
|
|
|
+ if (textElement && textElement.text) {
|
|
|
+ if (!element) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ let text = textElement.text;
|
|
|
+ let nextHeight = textElement.height;
|
|
|
+ let containerHeight = element.height;
|
|
|
+ let nextBaseLine = textElement.baseline;
|
|
|
+ if (transformHandleType !== "n" && transformHandleType !== "s") {
|
|
|
+ if (text) {
|
|
|
+ text = wrapText(
|
|
|
+ textElement.originalText,
|
|
|
getFontString(textElement),
|
|
|
element.width,
|
|
|
);
|
|
|
- nextHeight = dimensions.height;
|
|
|
- nextBaseLine = dimensions.baseline;
|
|
|
- }
|
|
|
- // increase height in case text element height exceeds
|
|
|
- if (nextHeight > element.height - BOUND_TEXT_PADDING * 2) {
|
|
|
- containerHeight = nextHeight + BOUND_TEXT_PADDING * 2;
|
|
|
- const diff = containerHeight - element.height;
|
|
|
- // fix the y coord when resizing from ne/nw/n
|
|
|
- const updatedY =
|
|
|
- transformHandleType === "ne" ||
|
|
|
- transformHandleType === "nw" ||
|
|
|
- transformHandleType === "n"
|
|
|
- ? element.y - diff
|
|
|
- : element.y;
|
|
|
- mutateElement(element, {
|
|
|
- height: containerHeight,
|
|
|
- y: updatedY,
|
|
|
- });
|
|
|
}
|
|
|
|
|
|
- const updatedY = element.y + containerHeight / 2 - nextHeight / 2;
|
|
|
-
|
|
|
- mutateElement(textElement, {
|
|
|
+ const dimensions = measureText(
|
|
|
text,
|
|
|
- // preserve padding and set width correctly
|
|
|
- width: element.width - BOUND_TEXT_PADDING * 2,
|
|
|
- height: nextHeight,
|
|
|
- x: element.x + BOUND_TEXT_PADDING,
|
|
|
+ getFontString(textElement),
|
|
|
+ element.width,
|
|
|
+ );
|
|
|
+ nextHeight = dimensions.height;
|
|
|
+ nextBaseLine = dimensions.baseline;
|
|
|
+ }
|
|
|
+ // increase height in case text element height exceeds
|
|
|
+ if (nextHeight > element.height - BOUND_TEXT_PADDING * 2) {
|
|
|
+ containerHeight = nextHeight + BOUND_TEXT_PADDING * 2;
|
|
|
+ const diff = containerHeight - element.height;
|
|
|
+ // fix the y coord when resizing from ne/nw/n
|
|
|
+ const updatedY =
|
|
|
+ transformHandleType === "ne" ||
|
|
|
+ transformHandleType === "nw" ||
|
|
|
+ transformHandleType === "n"
|
|
|
+ ? element.y - diff
|
|
|
+ : element.y;
|
|
|
+ mutateElement(element, {
|
|
|
+ height: containerHeight,
|
|
|
y: updatedY,
|
|
|
- baseline: nextBaseLine,
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
+ const updatedY = element.y + containerHeight / 2 - nextHeight / 2;
|
|
|
+
|
|
|
+ mutateElement(textElement, {
|
|
|
+ text,
|
|
|
+ // preserve padding and set width correctly
|
|
|
+ width: element.width - BOUND_TEXT_PADDING * 2,
|
|
|
+ height: nextHeight,
|
|
|
+ x: element.x + BOUND_TEXT_PADDING,
|
|
|
+ y: updatedY,
|
|
|
+ baseline: nextBaseLine,
|
|
|
+ });
|
|
|
}
|
|
|
- });
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
// https://github.com/grassator/canvas-text-editor/blob/master/lib/FontMetrics.js
|