mirror of
https://github.com/excalidraw/excalidraw.git
synced 2025-05-03 10:00:07 -04:00
fix: bound text scaling when resizing
This commit is contained in:
parent
61d86b88eb
commit
42002279e0
1 changed files with 10 additions and 43 deletions
|
@ -697,7 +697,7 @@ export const resizeMultipleElements = (
|
||||||
points?: Point[];
|
points?: Point[];
|
||||||
fontSize?: number;
|
fontSize?: number;
|
||||||
baseline?: number;
|
baseline?: number;
|
||||||
scale?: [-1 | 1, -1 | 1];
|
scale?: [number, number];
|
||||||
} = {
|
} = {
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
|
@ -709,56 +709,23 @@ export const resizeMultipleElements = (
|
||||||
|
|
||||||
if (isImageElement(element) && targetElements.length === 1) {
|
if (isImageElement(element) && targetElements.length === 1) {
|
||||||
update.scale = [
|
update.scale = [
|
||||||
(element.scale[0] * flipFactorX) as -1 | 1,
|
element.scale[0] * flipFactorX,
|
||||||
(element.scale[1] * flipFactorY) as -1 | 1,
|
element.scale[1] * flipFactorY,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
let boundTextUpdates: {
|
if (isTextElement(element)) {
|
||||||
angle: number;
|
const textMeasurements = measureFontSizeFromWH(element, width, height);
|
||||||
fontSize: number;
|
update.fontSize = textMeasurements?.size ?? element.fontSize;
|
||||||
baseline: number;
|
update.baseline = textMeasurements?.baseline ?? element.baseline;
|
||||||
} | null = null;
|
|
||||||
|
|
||||||
const boundTextElement = getBoundTextElement(latestElement);
|
|
||||||
|
|
||||||
if (boundTextElement || isTextElement(element)) {
|
|
||||||
const optionalPadding = getBoundTextElementOffset(boundTextElement) * 2;
|
|
||||||
const textMeasurements = measureFontSizeFromWH(
|
|
||||||
boundTextElement ?? (element as ExcalidrawTextElement),
|
|
||||||
width - optionalPadding,
|
|
||||||
height - optionalPadding,
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!textMeasurements) {
|
|
||||||
return; // FIXME
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isTextElement(element)) {
|
|
||||||
update.fontSize = textMeasurements.size;
|
|
||||||
update.baseline = textMeasurements.baseline;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (boundTextElement) {
|
|
||||||
if (isArrowElement(element)) {
|
|
||||||
const { angle, fontSize, baseline } = boundTextElement;
|
|
||||||
boundTextUpdates = { angle, fontSize, baseline };
|
|
||||||
} else {
|
|
||||||
boundTextUpdates = {
|
|
||||||
angle,
|
|
||||||
fontSize: textMeasurements.size,
|
|
||||||
baseline: textMeasurements.baseline,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
updateBoundElements(latestElement, { newSize: { width, height } });
|
updateBoundElements(latestElement, { newSize: { width, height } });
|
||||||
|
|
||||||
mutateElement(latestElement, update);
|
mutateElement(latestElement, update);
|
||||||
|
|
||||||
if (boundTextElement && boundTextUpdates) {
|
const boundTextElement = getBoundTextElement(latestElement);
|
||||||
mutateElement(boundTextElement, boundTextUpdates);
|
if (boundTextElement) {
|
||||||
|
mutateElement(boundTextElement, { angle });
|
||||||
handleBindTextResize(latestElement, transformHandleType);
|
handleBindTextResize(latestElement, transformHandleType);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue