mirror of
https://github.com/excalidraw/excalidraw.git
synced 2025-09-16 14:00:56 +02:00
Compare commits
8 Commits
zsviczian-
...
zsviczian-
Author | SHA1 | Date | |
---|---|---|---|
![]() |
60a3584e86 | ||
![]() |
fa0e653236 | ||
![]() |
16de3d9243 | ||
![]() |
c65d6506f7 | ||
![]() |
a249f332a2 | ||
![]() |
2e61926a6b | ||
![]() |
e921bfb1ae | ||
![]() |
e6f74350ac |
@@ -106,6 +106,13 @@ export class LaserPathManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
startPath(x: number, y: number) {
|
startPath(x: number, y: number) {
|
||||||
|
if (this.container) {
|
||||||
|
this.container.style.top = "0px";
|
||||||
|
this.container.style.left = "0px";
|
||||||
|
const { x, y } = this.container.getBoundingClientRect();
|
||||||
|
this.container.style.top = `${-y}px`;
|
||||||
|
this.container.style.left = `${-x}px`;
|
||||||
|
}
|
||||||
this.ownState.currentPath = instantiatePath();
|
this.ownState.currentPath = instantiatePath();
|
||||||
this.ownState.currentPath.addPoint([x, y, performance.now()]);
|
this.ownState.currentPath.addPoint([x, y, performance.now()]);
|
||||||
this.updatePath(this.ownState);
|
this.updatePath(this.ownState);
|
||||||
|
@@ -6,7 +6,6 @@
|
|||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
|
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
|
|
||||||
.LaserToolOverlayCanvas {
|
.LaserToolOverlayCanvas {
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
import { updateBoundElements } from "./binding";
|
import { updateBoundElements } from "./binding";
|
||||||
import { Bounds, getCommonBounds } from "./bounds";
|
import { getCommonBounds } from "./bounds";
|
||||||
import { mutateElement } from "./mutateElement";
|
import { mutateElement } from "./mutateElement";
|
||||||
import { getPerfectElementSize } from "./sizeHelpers";
|
import { getPerfectElementSize } from "./sizeHelpers";
|
||||||
import { NonDeletedExcalidrawElement } from "./types";
|
import { NonDeletedExcalidrawElement } from "./types";
|
||||||
@@ -41,16 +41,14 @@ export const dragSelectedElements = (
|
|||||||
elementsInFrames.forEach((element) => elementsToUpdate.add(element));
|
elementsInFrames.forEach((element) => elementsToUpdate.add(element));
|
||||||
}
|
}
|
||||||
|
|
||||||
const commonBounds = getCommonBounds(Array.from(elementsToUpdate));
|
|
||||||
const adjustedOffset = calculateOffset(
|
|
||||||
commonBounds,
|
|
||||||
offset,
|
|
||||||
snapOffset,
|
|
||||||
gridSize,
|
|
||||||
);
|
|
||||||
|
|
||||||
elementsToUpdate.forEach((element) => {
|
elementsToUpdate.forEach((element) => {
|
||||||
updateElementCoords(pointerDownState, element, adjustedOffset);
|
updateElementCoords(
|
||||||
|
pointerDownState,
|
||||||
|
element,
|
||||||
|
offset,
|
||||||
|
snapOffset,
|
||||||
|
gridSize,
|
||||||
|
);
|
||||||
// update coords of bound text only if we're dragging the container directly
|
// update coords of bound text only if we're dragging the container directly
|
||||||
// (we don't drag the group that it's part of)
|
// (we don't drag the group that it's part of)
|
||||||
if (
|
if (
|
||||||
@@ -68,7 +66,13 @@ export const dragSelectedElements = (
|
|||||||
// updating its coords again
|
// updating its coords again
|
||||||
(!textElement.frameId || !frames.includes(textElement.frameId))
|
(!textElement.frameId || !frames.includes(textElement.frameId))
|
||||||
) {
|
) {
|
||||||
updateElementCoords(pointerDownState, textElement, adjustedOffset);
|
updateElementCoords(
|
||||||
|
pointerDownState,
|
||||||
|
textElement,
|
||||||
|
offset,
|
||||||
|
snapOffset,
|
||||||
|
gridSize,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
updateBoundElements(element, {
|
updateBoundElements(element, {
|
||||||
@@ -77,20 +81,23 @@ export const dragSelectedElements = (
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const calculateOffset = (
|
const updateElementCoords = (
|
||||||
commonBounds: Bounds,
|
pointerDownState: PointerDownState,
|
||||||
|
element: NonDeletedExcalidrawElement,
|
||||||
dragOffset: { x: number; y: number },
|
dragOffset: { x: number; y: number },
|
||||||
snapOffset: { x: number; y: number },
|
snapOffset: { x: number; y: number },
|
||||||
gridSize: AppState["gridSize"],
|
gridSize: AppState["gridSize"],
|
||||||
): { x: number; y: number } => {
|
) => {
|
||||||
const [x, y] = commonBounds;
|
const originalElement =
|
||||||
let nextX = x + dragOffset.x + snapOffset.x;
|
pointerDownState.originalElements.get(element.id) ?? element;
|
||||||
let nextY = y + dragOffset.y + snapOffset.y;
|
|
||||||
|
let nextX = originalElement.x + dragOffset.x + snapOffset.x;
|
||||||
|
let nextY = originalElement.y + dragOffset.y + snapOffset.y;
|
||||||
|
|
||||||
if (snapOffset.x === 0 || snapOffset.y === 0) {
|
if (snapOffset.x === 0 || snapOffset.y === 0) {
|
||||||
const [nextGridX, nextGridY] = getGridPoint(
|
const [nextGridX, nextGridY] = getGridPoint(
|
||||||
x + dragOffset.x,
|
originalElement.x + dragOffset.x,
|
||||||
y + dragOffset.y,
|
originalElement.y + dragOffset.y,
|
||||||
gridSize,
|
gridSize,
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -102,22 +109,6 @@ const calculateOffset = (
|
|||||||
nextY = nextGridY;
|
nextY = nextGridY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {
|
|
||||||
x: nextX - x,
|
|
||||||
y: nextY - y,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const updateElementCoords = (
|
|
||||||
pointerDownState: PointerDownState,
|
|
||||||
element: NonDeletedExcalidrawElement,
|
|
||||||
dragOffset: { x: number; y: number },
|
|
||||||
) => {
|
|
||||||
const originalElement =
|
|
||||||
pointerDownState.originalElements.get(element.id) ?? element;
|
|
||||||
|
|
||||||
const nextX = originalElement.x + dragOffset.x;
|
|
||||||
const nextY = originalElement.y + dragOffset.y;
|
|
||||||
|
|
||||||
mutateElement(element, {
|
mutateElement(element, {
|
||||||
x: nextX,
|
x: nextX,
|
||||||
|
Reference in New Issue
Block a user