|
@@ -11,6 +11,8 @@ import type {
|
|
ExcalidrawTextElementWithContainer,
|
|
ExcalidrawTextElementWithContainer,
|
|
ExcalidrawImageElement,
|
|
ExcalidrawImageElement,
|
|
ElementsMap,
|
|
ElementsMap,
|
|
|
|
+ NonDeletedSceneElementsMap,
|
|
|
|
+ SceneElementsMap,
|
|
} from "./types";
|
|
} from "./types";
|
|
import type { Mutable } from "../utility-types";
|
|
import type { Mutable } from "../utility-types";
|
|
import {
|
|
import {
|
|
@@ -69,7 +71,7 @@ export const transformElements = (
|
|
originalElements: PointerDownState["originalElements"],
|
|
originalElements: PointerDownState["originalElements"],
|
|
transformHandleType: MaybeTransformHandleType,
|
|
transformHandleType: MaybeTransformHandleType,
|
|
selectedElements: readonly NonDeletedExcalidrawElement[],
|
|
selectedElements: readonly NonDeletedExcalidrawElement[],
|
|
- elementsMap: ElementsMap,
|
|
|
|
|
|
+ elementsMap: SceneElementsMap,
|
|
shouldRotateWithDiscreteAngle: boolean,
|
|
shouldRotateWithDiscreteAngle: boolean,
|
|
shouldResizeFromCenter: boolean,
|
|
shouldResizeFromCenter: boolean,
|
|
shouldMaintainAspectRatio: boolean,
|
|
shouldMaintainAspectRatio: boolean,
|
|
@@ -77,7 +79,6 @@ export const transformElements = (
|
|
pointerY: number,
|
|
pointerY: number,
|
|
centerX: number,
|
|
centerX: number,
|
|
centerY: number,
|
|
centerY: number,
|
|
- scene: Scene,
|
|
|
|
) => {
|
|
) => {
|
|
if (selectedElements.length === 1) {
|
|
if (selectedElements.length === 1) {
|
|
const [element] = selectedElements;
|
|
const [element] = selectedElements;
|
|
@@ -90,7 +91,7 @@ export const transformElements = (
|
|
pointerY,
|
|
pointerY,
|
|
shouldRotateWithDiscreteAngle,
|
|
shouldRotateWithDiscreteAngle,
|
|
);
|
|
);
|
|
- updateBoundElements(element, elementsMap, scene);
|
|
|
|
|
|
+ updateBoundElements(element, elementsMap);
|
|
}
|
|
}
|
|
} else if (isTextElement(element) && transformHandleType) {
|
|
} else if (isTextElement(element) && transformHandleType) {
|
|
resizeSingleTextElement(
|
|
resizeSingleTextElement(
|
|
@@ -102,7 +103,7 @@ export const transformElements = (
|
|
pointerX,
|
|
pointerX,
|
|
pointerY,
|
|
pointerY,
|
|
);
|
|
);
|
|
- updateBoundElements(element, elementsMap, scene);
|
|
|
|
|
|
+ updateBoundElements(element, elementsMap);
|
|
} else if (transformHandleType) {
|
|
} else if (transformHandleType) {
|
|
resizeSingleElement(
|
|
resizeSingleElement(
|
|
originalElements,
|
|
originalElements,
|
|
@@ -113,7 +114,6 @@ export const transformElements = (
|
|
shouldResizeFromCenter,
|
|
shouldResizeFromCenter,
|
|
pointerX,
|
|
pointerX,
|
|
pointerY,
|
|
pointerY,
|
|
- scene,
|
|
|
|
);
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -129,7 +129,6 @@ export const transformElements = (
|
|
shouldRotateWithDiscreteAngle,
|
|
shouldRotateWithDiscreteAngle,
|
|
centerX,
|
|
centerX,
|
|
centerY,
|
|
centerY,
|
|
- scene,
|
|
|
|
);
|
|
);
|
|
return true;
|
|
return true;
|
|
} else if (transformHandleType) {
|
|
} else if (transformHandleType) {
|
|
@@ -142,7 +141,6 @@ export const transformElements = (
|
|
shouldMaintainAspectRatio,
|
|
shouldMaintainAspectRatio,
|
|
pointerX,
|
|
pointerX,
|
|
pointerY,
|
|
pointerY,
|
|
- scene,
|
|
|
|
);
|
|
);
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
@@ -434,12 +432,11 @@ export const resizeSingleElement = (
|
|
originalElements: PointerDownState["originalElements"],
|
|
originalElements: PointerDownState["originalElements"],
|
|
shouldMaintainAspectRatio: boolean,
|
|
shouldMaintainAspectRatio: boolean,
|
|
element: NonDeletedExcalidrawElement,
|
|
element: NonDeletedExcalidrawElement,
|
|
- elementsMap: ElementsMap,
|
|
|
|
|
|
+ elementsMap: SceneElementsMap,
|
|
transformHandleDirection: TransformHandleDirection,
|
|
transformHandleDirection: TransformHandleDirection,
|
|
shouldResizeFromCenter: boolean,
|
|
shouldResizeFromCenter: boolean,
|
|
pointerX: number,
|
|
pointerX: number,
|
|
pointerY: number,
|
|
pointerY: number,
|
|
- scene: Scene,
|
|
|
|
) => {
|
|
) => {
|
|
const stateAtResizeStart = originalElements.get(element.id)!;
|
|
const stateAtResizeStart = originalElements.get(element.id)!;
|
|
// Gets bounds corners
|
|
// Gets bounds corners
|
|
@@ -710,7 +707,7 @@ export const resizeSingleElement = (
|
|
) {
|
|
) {
|
|
mutateElement(element, resizedElement);
|
|
mutateElement(element, resizedElement);
|
|
|
|
|
|
- updateBoundElements(element, elementsMap, scene, {
|
|
|
|
|
|
+ updateBoundElements(element, elementsMap, {
|
|
oldSize: {
|
|
oldSize: {
|
|
width: stateAtResizeStart.width,
|
|
width: stateAtResizeStart.width,
|
|
height: stateAtResizeStart.height,
|
|
height: stateAtResizeStart.height,
|
|
@@ -734,13 +731,12 @@ export const resizeSingleElement = (
|
|
export const resizeMultipleElements = (
|
|
export const resizeMultipleElements = (
|
|
originalElements: PointerDownState["originalElements"],
|
|
originalElements: PointerDownState["originalElements"],
|
|
selectedElements: readonly NonDeletedExcalidrawElement[],
|
|
selectedElements: readonly NonDeletedExcalidrawElement[],
|
|
- elementsMap: ElementsMap,
|
|
|
|
|
|
+ elementsMap: NonDeletedSceneElementsMap | SceneElementsMap,
|
|
transformHandleType: TransformHandleDirection,
|
|
transformHandleType: TransformHandleDirection,
|
|
shouldResizeFromCenter: boolean,
|
|
shouldResizeFromCenter: boolean,
|
|
shouldMaintainAspectRatio: boolean,
|
|
shouldMaintainAspectRatio: boolean,
|
|
pointerX: number,
|
|
pointerX: number,
|
|
pointerY: number,
|
|
pointerY: number,
|
|
- scene: Scene,
|
|
|
|
) => {
|
|
) => {
|
|
// map selected elements to the original elements. While it never should
|
|
// map selected elements to the original elements. While it never should
|
|
// happen that pointerDownState.originalElements won't contain the selected
|
|
// happen that pointerDownState.originalElements won't contain the selected
|
|
@@ -974,12 +970,19 @@ export const resizeMultipleElements = (
|
|
mutateElement(element, update, false);
|
|
mutateElement(element, update, false);
|
|
|
|
|
|
if (isArrowElement(element) && isElbowArrow(element)) {
|
|
if (isArrowElement(element) && isElbowArrow(element)) {
|
|
- mutateElbowArrow(element, scene, element.points, undefined, undefined, {
|
|
|
|
- informMutation: false,
|
|
|
|
- });
|
|
|
|
|
|
+ mutateElbowArrow(
|
|
|
|
+ element,
|
|
|
|
+ elementsMap,
|
|
|
|
+ element.points,
|
|
|
|
+ undefined,
|
|
|
|
+ undefined,
|
|
|
|
+ {
|
|
|
|
+ informMutation: false,
|
|
|
|
+ },
|
|
|
|
+ );
|
|
}
|
|
}
|
|
|
|
|
|
- updateBoundElements(element, elementsMap, scene, {
|
|
|
|
|
|
+ updateBoundElements(element, elementsMap, {
|
|
simultaneouslyUpdated: elementsToUpdate,
|
|
simultaneouslyUpdated: elementsToUpdate,
|
|
oldSize: { width: oldWidth, height: oldHeight },
|
|
oldSize: { width: oldWidth, height: oldHeight },
|
|
});
|
|
});
|
|
@@ -1004,13 +1007,12 @@ export const resizeMultipleElements = (
|
|
const rotateMultipleElements = (
|
|
const rotateMultipleElements = (
|
|
originalElements: PointerDownState["originalElements"],
|
|
originalElements: PointerDownState["originalElements"],
|
|
elements: readonly NonDeletedExcalidrawElement[],
|
|
elements: readonly NonDeletedExcalidrawElement[],
|
|
- elementsMap: ElementsMap,
|
|
|
|
|
|
+ elementsMap: SceneElementsMap,
|
|
pointerX: number,
|
|
pointerX: number,
|
|
pointerY: number,
|
|
pointerY: number,
|
|
shouldRotateWithDiscreteAngle: boolean,
|
|
shouldRotateWithDiscreteAngle: boolean,
|
|
centerX: number,
|
|
centerX: number,
|
|
centerY: number,
|
|
centerY: number,
|
|
- scene: Scene,
|
|
|
|
) => {
|
|
) => {
|
|
let centerAngle =
|
|
let centerAngle =
|
|
(5 * Math.PI) / 2 + Math.atan2(pointerY - centerY, pointerX - centerX);
|
|
(5 * Math.PI) / 2 + Math.atan2(pointerY - centerY, pointerX - centerX);
|
|
@@ -1037,7 +1039,7 @@ const rotateMultipleElements = (
|
|
|
|
|
|
if (isArrowElement(element) && isElbowArrow(element)) {
|
|
if (isArrowElement(element) && isElbowArrow(element)) {
|
|
const points = getArrowLocalFixedPoints(element, elementsMap);
|
|
const points = getArrowLocalFixedPoints(element, elementsMap);
|
|
- mutateElbowArrow(element, scene, points);
|
|
|
|
|
|
+ mutateElbowArrow(element, elementsMap, points);
|
|
} else {
|
|
} else {
|
|
mutateElement(
|
|
mutateElement(
|
|
element,
|
|
element,
|
|
@@ -1050,7 +1052,7 @@ const rotateMultipleElements = (
|
|
);
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
- updateBoundElements(element, elementsMap, scene, {
|
|
|
|
|
|
+ updateBoundElements(element, elementsMap, {
|
|
simultaneouslyUpdated: elements,
|
|
simultaneouslyUpdated: elements,
|
|
});
|
|
});
|
|
|
|
|