mirror of
https://github.com/excalidraw/excalidraw.git
synced 2025-05-03 10:00:07 -04:00
Fix multielements (#987)
This commit is contained in:
parent
0dc07135b7
commit
b603337c3f
3 changed files with 87 additions and 56 deletions
|
@ -99,6 +99,7 @@ import { mutateElement, newElementWith } from "../element/mutateElement";
|
|||
import { invalidateShapeForElement } from "../renderer/renderElement";
|
||||
import { unstable_batchedUpdates } from "react-dom";
|
||||
import { SceneStateCallbackRemover } from "../scene/globalScene";
|
||||
import { rescalePoints } from "../points";
|
||||
|
||||
function withBatchedUpdates<
|
||||
TFunction extends ((event: any) => void) | (() => void)
|
||||
|
@ -1801,89 +1802,68 @@ export class App extends React.Component<any, AppState> {
|
|||
}
|
||||
break;
|
||||
case "n": {
|
||||
let points;
|
||||
if (element.points.length > 0) {
|
||||
const len = element.points.length;
|
||||
points = [...element.points].sort((a, b) => a[1] - b[1]) as [
|
||||
number,
|
||||
number,
|
||||
][];
|
||||
|
||||
for (let i = 1; i < points.length; ++i) {
|
||||
const pnt = points[i];
|
||||
pnt[1] -= deltaY / (len - i);
|
||||
}
|
||||
const height = element.height - deltaY;
|
||||
if (height <= 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
mutateElement(element, {
|
||||
height: element.height - deltaY,
|
||||
height,
|
||||
y: element.y + deltaY,
|
||||
points,
|
||||
points:
|
||||
element.points.length > 0
|
||||
? rescalePoints(1, height, element.points)
|
||||
: undefined,
|
||||
});
|
||||
|
||||
break;
|
||||
}
|
||||
case "w": {
|
||||
let points;
|
||||
if (element.points.length > 0) {
|
||||
const len = element.points.length;
|
||||
points = [...element.points].sort((a, b) => a[0] - b[0]) as [
|
||||
number,
|
||||
number,
|
||||
][];
|
||||
const width = element.width - deltaX;
|
||||
|
||||
for (let i = 0; i < points.length; ++i) {
|
||||
const pnt = points[i];
|
||||
pnt[0] -= deltaX / (len - i);
|
||||
}
|
||||
if (width <= 0) {
|
||||
// Someday we should implement logic to flip the shape. But for now, just stop.
|
||||
break;
|
||||
}
|
||||
|
||||
mutateElement(element, {
|
||||
width: element.width - deltaX,
|
||||
width,
|
||||
x: element.x + deltaX,
|
||||
points,
|
||||
points:
|
||||
element.points.length > 0
|
||||
? rescalePoints(0, width, element.points)
|
||||
: undefined,
|
||||
});
|
||||
break;
|
||||
}
|
||||
case "s": {
|
||||
let points;
|
||||
|
||||
if (element.points.length > 0) {
|
||||
const len = element.points.length;
|
||||
points = [...element.points].sort((a, b) => a[1] - b[1]) as [
|
||||
number,
|
||||
number,
|
||||
][];
|
||||
|
||||
for (let i = 1; i < points.length; ++i) {
|
||||
const pnt = points[i];
|
||||
pnt[1] += deltaY / (len - i);
|
||||
}
|
||||
const height = element.height + deltaY;
|
||||
if (height <= 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
mutateElement(element, {
|
||||
height: element.height + deltaY,
|
||||
points,
|
||||
height,
|
||||
points:
|
||||
element.points.length > 0
|
||||
? rescalePoints(1, height, element.points)
|
||||
: undefined,
|
||||
});
|
||||
|
||||
break;
|
||||
}
|
||||
case "e": {
|
||||
let points;
|
||||
if (element.points.length > 0) {
|
||||
const len = element.points.length;
|
||||
points = [...element.points].sort((a, b) => a[0] - b[0]) as [
|
||||
number,
|
||||
number,
|
||||
][];
|
||||
|
||||
for (let i = 1; i < points.length; ++i) {
|
||||
const pnt = points[i];
|
||||
pnt[0] += deltaX / (len - i);
|
||||
}
|
||||
const width = element.width + deltaX;
|
||||
if (width <= 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
mutateElement(element, {
|
||||
width: element.width + deltaX,
|
||||
points,
|
||||
width,
|
||||
points:
|
||||
element.points.length > 0
|
||||
? rescalePoints(0, width, element.points)
|
||||
: undefined,
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue