simplify properties further
This commit is contained in:
parent
50e4a0b37d
commit
bccd2bf30d
@ -441,13 +441,7 @@ import {
|
||||
getLinkDirectionFromKey,
|
||||
} from "../element/flowchart";
|
||||
import type { LocalPoint, Radians } from "../../math";
|
||||
import {
|
||||
clamp,
|
||||
point,
|
||||
pointDistance,
|
||||
pointRotateRads,
|
||||
vector,
|
||||
} from "../../math";
|
||||
import { clamp, point, pointDistance, vector } from "../../math";
|
||||
import { cropElement } from "../element/cropElement";
|
||||
|
||||
const AppContext = React.createContext<AppClassProperties>(null!);
|
||||
@ -9448,8 +9442,6 @@ class App extends React.Component<AppProps, AppState> {
|
||||
y,
|
||||
width,
|
||||
height,
|
||||
initialWidth: width,
|
||||
initialHeight: height,
|
||||
crop: {
|
||||
x: 0,
|
||||
y: 0,
|
||||
|
@ -255,9 +255,6 @@ const restoreElement = (
|
||||
fileId: element.fileId,
|
||||
scale: element.scale || [1, 1],
|
||||
crop: element.crop ?? null,
|
||||
initialWidth: element.initialWidth ?? element.width,
|
||||
initialHeight: element.initialHeight ?? element.height,
|
||||
resizeFactors: element.resizeFactors ?? [1, 1],
|
||||
});
|
||||
case "line":
|
||||
// @ts-ignore LEGACY type
|
||||
|
@ -14,7 +14,7 @@ import {
|
||||
} from "../../math";
|
||||
import { updateBoundElements } from "./binding";
|
||||
import { mutateElement } from "./mutateElement";
|
||||
import { TransformHandleType } from "./transformHandles";
|
||||
import type { TransformHandleType } from "./transformHandles";
|
||||
import type {
|
||||
ElementsMap,
|
||||
ExcalidrawElement,
|
||||
@ -26,19 +26,24 @@ import {
|
||||
getElementAbsoluteCoords,
|
||||
getResizedElementAbsoluteCoords,
|
||||
} from "./bounds";
|
||||
import { AppClassProperties } from "../types";
|
||||
import type { AppClassProperties } from "../types";
|
||||
import { isInitializedImageElement } from "./typeChecks";
|
||||
|
||||
const _cropElement = (
|
||||
element: ExcalidrawImageElement,
|
||||
image: HTMLImageElement,
|
||||
transformHandle: TransformHandleType,
|
||||
naturalWidth: number,
|
||||
naturalHeight: number,
|
||||
pointerX: number,
|
||||
pointerY: number,
|
||||
) => {
|
||||
const uncroppedWidth = element.initialWidth * element.resizeFactors[0];
|
||||
const uncroppedHeight = element.initialHeight * element.resizeFactors[1];
|
||||
const uncroppedWidth =
|
||||
element.width /
|
||||
(element.crop ? element.crop.width / image.naturalWidth : 1);
|
||||
const uncroppedHeight =
|
||||
element.height /
|
||||
(element.crop ? element.crop.height / image.naturalHeight : 1);
|
||||
|
||||
const naturalWidthToUncropped = naturalWidth / uncroppedWidth;
|
||||
const naturalHeightToUncropped = naturalHeight / uncroppedHeight;
|
||||
@ -154,6 +159,7 @@ export const cropElement = (
|
||||
if (image && !(image instanceof Promise)) {
|
||||
const mutation = _cropElement(
|
||||
element,
|
||||
image,
|
||||
transformHandle,
|
||||
image.naturalWidth,
|
||||
image.naturalHeight,
|
||||
@ -240,8 +246,9 @@ export const getUncroppedImageElement = (
|
||||
|
||||
if (image && !(image instanceof Promise)) {
|
||||
if (element.crop) {
|
||||
const width = element.initialWidth * element.resizeFactors[0];
|
||||
const height = element.initialHeight * element.resizeFactors[1];
|
||||
const width = element.width / (element.crop.width / image.naturalWidth);
|
||||
const height =
|
||||
element.height / (element.crop.height / image.naturalHeight);
|
||||
|
||||
const [x1, y1, x2, y2, cx, cy] = getElementAbsoluteCoords(
|
||||
element,
|
||||
|
@ -489,9 +489,6 @@ export const newImageElement = (
|
||||
status: opts.status ?? "pending",
|
||||
fileId: opts.fileId ?? null,
|
||||
scale: opts.scale ?? [1, 1],
|
||||
initialWidth: opts.width ?? 0,
|
||||
initialHeight: opts.height ?? 0,
|
||||
resizeFactors: [1, 1],
|
||||
crop: opts.crop ?? null,
|
||||
};
|
||||
};
|
||||
|
@ -696,13 +696,6 @@ export const resizeSingleElement = (
|
||||
points: rescaledPoints,
|
||||
};
|
||||
|
||||
// TODO: this is not the best approach
|
||||
updateInternalScale(
|
||||
element,
|
||||
eleNewWidth / element.width,
|
||||
eleNewHeight / element.height,
|
||||
);
|
||||
|
||||
if ("scale" in element && "scale" in stateAtResizeStart) {
|
||||
mutateElement(element, {
|
||||
scale: [
|
||||
@ -757,38 +750,6 @@ export const resizeSingleElement = (
|
||||
}
|
||||
};
|
||||
|
||||
const updateInternalScale = (
|
||||
element: NonDeletedExcalidrawElement,
|
||||
scaleX: number,
|
||||
scaleY: number,
|
||||
) => {
|
||||
if ("type" in element && element.type === "image") {
|
||||
element = element as ExcalidrawImageElement;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
// if the scales happen to be 0 (which is insanely unlikely), it will
|
||||
// zero out the rolling multiplier and cause weird bugs with cropping.
|
||||
// if zero is detected, just set the scales to an obnoxiously small number
|
||||
if (scaleX === 0) {
|
||||
scaleX = Number.EPSILON;
|
||||
}
|
||||
if (scaleY === 0) {
|
||||
scaleY = Number.EPSILON;
|
||||
}
|
||||
|
||||
scaleX = Math.abs(scaleX);
|
||||
scaleY = Math.abs(scaleY);
|
||||
|
||||
mutateElement(element, {
|
||||
resizeFactors: [
|
||||
element.resizeFactors[0] * scaleX,
|
||||
element.resizeFactors[1] * scaleY,
|
||||
],
|
||||
});
|
||||
};
|
||||
|
||||
export const resizeMultipleElements = (
|
||||
originalElements: PointerDownState["originalElements"],
|
||||
selectedElements: readonly NonDeletedExcalidrawElement[],
|
||||
|
@ -141,12 +141,6 @@ export type ExcalidrawImageElement = _ExcalidrawElementBase &
|
||||
/** X and Y scale factors <-1, 1>, used for image axis flipping */
|
||||
scale: [number, number];
|
||||
|
||||
/** the image's dimension after initialization */
|
||||
initialWidth: number;
|
||||
initialHeight: number;
|
||||
/** how much the image has been resized with respect the dimension at creation */
|
||||
resizeFactors: [number, number];
|
||||
|
||||
crop: {
|
||||
x: number;
|
||||
y: number;
|
||||
|
Loading…
x
Reference in New Issue
Block a user