mirror of
https://github.com/excalidraw/excalidraw.git
synced 2025-05-03 10:00:07 -04:00
resize elements from center point (#1225)
* add hint & support multi-line hints * resize from center point using the new resize maths * resize with origin element when lifting alt key * add readonly to elementOriginPosition * add setResizeWithCenterKeyLifted * isResizeFromCenter logic * offsetX and offsetY * simplify equations * creating element from center point * lint * lint * lint * remove revert on key up logic Co-authored-by: dwelle <luzar.david@gmail.com> Co-authored-by: daishi <daishi@axlight.com>
This commit is contained in:
parent
8c49770e3b
commit
ed6fb60337
6 changed files with 69 additions and 22 deletions
35
src/math.ts
35
src/math.ts
|
@ -63,26 +63,43 @@ const adjustXYWithRotation = (
|
|||
angle: number,
|
||||
deltaX: number,
|
||||
deltaY: number,
|
||||
isResizeFromCenter: boolean,
|
||||
) => {
|
||||
const cos = Math.cos(angle);
|
||||
const sin = Math.sin(angle);
|
||||
deltaX /= 2;
|
||||
deltaY /= 2;
|
||||
if (side === "e" || side === "ne" || side === "se") {
|
||||
x += deltaX * (1 - cos);
|
||||
y += deltaX * -sin;
|
||||
if (isResizeFromCenter) {
|
||||
x += deltaX;
|
||||
} else {
|
||||
x += deltaX * (1 - cos);
|
||||
y += deltaX * -sin;
|
||||
}
|
||||
}
|
||||
if (side === "s" || side === "sw" || side === "se") {
|
||||
x += deltaY * sin;
|
||||
y += deltaY * (1 - cos);
|
||||
if (isResizeFromCenter) {
|
||||
y += deltaY;
|
||||
} else {
|
||||
x += deltaY * sin;
|
||||
y += deltaY * (1 - cos);
|
||||
}
|
||||
}
|
||||
if (side === "w" || side === "nw" || side === "sw") {
|
||||
x += deltaX * (1 + cos);
|
||||
y += deltaX * sin;
|
||||
if (isResizeFromCenter) {
|
||||
x += deltaX;
|
||||
} else {
|
||||
x += deltaX * (1 + cos);
|
||||
y += deltaX * sin;
|
||||
}
|
||||
}
|
||||
if (side === "n" || side === "nw" || side === "ne") {
|
||||
x += deltaY * -sin;
|
||||
y += deltaY * (1 + cos);
|
||||
if (isResizeFromCenter) {
|
||||
y += deltaY;
|
||||
} else {
|
||||
x += deltaY * -sin;
|
||||
y += deltaY * (1 + cos);
|
||||
}
|
||||
}
|
||||
return { x, y };
|
||||
};
|
||||
|
@ -100,6 +117,7 @@ export const resizeXYWidthHightWithRotation = (
|
|||
yPointer: number,
|
||||
offsetPointer: number,
|
||||
sidesWithSameLength: boolean,
|
||||
isResizeFromCenter: boolean,
|
||||
) => {
|
||||
// center point for rotation
|
||||
const cx = x + width / 2;
|
||||
|
@ -139,6 +157,7 @@ export const resizeXYWidthHightWithRotation = (
|
|||
angle,
|
||||
width - nextWidth,
|
||||
height - nextHeight,
|
||||
isResizeFromCenter,
|
||||
),
|
||||
};
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue