feat: shift-clamp when creating multi-point lines/arrows (#5500)

Co-authored-by: Ryan <diweihao@bytedance.com>
This commit is contained in:
Ryan Di 2022-08-01 21:41:50 +08:00 committed by GitHub
parent 426b5d9537
commit 2820cd112e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 2 deletions

View File

@ -2754,6 +2754,27 @@ class App extends React.Component<AppProps, AppState> {
points: points.slice(0, -1),
});
} else {
const [gridX, gridY] = getGridPoint(
scenePointerX,
scenePointerY,
this.state.gridSize,
);
const [lastCommittedX, lastCommittedY] =
multiElement?.lastCommittedPoint ?? [0, 0];
let dxFromLastCommitted = gridX - rx - lastCommittedX;
let dyFromLastCommitted = gridY - ry - lastCommittedY;
if (shouldRotateWithDiscreteAngle(event)) {
({ width: dxFromLastCommitted, height: dyFromLastCommitted } =
getPerfectElementSize(
this.state.activeTool.type,
dxFromLastCommitted,
dyFromLastCommitted,
));
}
if (isPathALoop(points, this.state.zoom.value)) {
setCursor(this.canvas, CURSOR_TYPE.POINTER);
}
@ -2761,7 +2782,10 @@ class App extends React.Component<AppProps, AppState> {
mutateElement(multiElement, {
points: [
...points.slice(0, -1),
[scenePointerX - rx, scenePointerY - ry],
[
lastCommittedX + dxFromLastCommitted,
lastCommittedY + dyFromLastCommitted,
],
],
});
}

View File

@ -80,5 +80,5 @@ export const shouldMaintainAspectRatio = (event: MouseEvent | KeyboardEvent) =>
event.shiftKey;
export const shouldRotateWithDiscreteAngle = (
event: MouseEvent | KeyboardEvent,
event: MouseEvent | KeyboardEvent | React.PointerEvent<HTMLCanvasElement>,
) => event.shiftKey;