cappedElementCanvasSize
This commit is contained in:
parent
028ad1ee81
commit
619e4061f5
@ -93,20 +93,18 @@ export interface ExcalidrawElementWithCanvas {
|
|||||||
boundTextElementVersion: number | null;
|
boundTextElementVersion: number | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const generateElementCanvas = (
|
export const cappedElementCanvasSize = (
|
||||||
element: NonDeletedExcalidrawElement,
|
element: NonDeletedExcalidrawElement,
|
||||||
zoom: Zoom,
|
zoom: Zoom,
|
||||||
renderConfig: RenderConfig,
|
renderConfig: RenderConfig,
|
||||||
): ExcalidrawElementWithCanvas => {
|
): {
|
||||||
const canvas = document.createElement("canvas");
|
width: number;
|
||||||
const context = canvas.getContext("2d")!;
|
height: number;
|
||||||
const padding = getCanvasPadding(element);
|
zoomValue: NormalizedZoomValue;
|
||||||
|
} => {
|
||||||
const sizelimit = 16777216; // 2^24
|
const sizelimit = 16777216; // 2^24
|
||||||
let zoomValue = zoom.value;
|
let zoomValue = zoom.value;
|
||||||
|
|
||||||
let canvasOffsetX = 0;
|
|
||||||
let canvasOffsetY = 0;
|
|
||||||
|
|
||||||
if (isLinearElement(element) || isFreeDrawElement(element)) {
|
if (isLinearElement(element) || isFreeDrawElement(element)) {
|
||||||
const [x1, y1, x2, y2] = getElementAbsoluteCoords(element);
|
const [x1, y1, x2, y2] = getElementAbsoluteCoords(element);
|
||||||
|
|
||||||
@ -127,21 +125,6 @@ const generateElementCanvas = (
|
|||||||
distance(y1, y2) * window.devicePixelRatio * zoomValue +
|
distance(y1, y2) * window.devicePixelRatio * zoomValue +
|
||||||
padding * zoomValue * 2;
|
padding * zoomValue * 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
canvas.width = width;
|
|
||||||
canvas.height = height;
|
|
||||||
|
|
||||||
canvasOffsetX =
|
|
||||||
element.x > x1
|
|
||||||
? distance(element.x, x1) * window.devicePixelRatio * zoomValue
|
|
||||||
: 0;
|
|
||||||
|
|
||||||
canvasOffsetY =
|
|
||||||
element.y > y1
|
|
||||||
? distance(element.y, y1) * window.devicePixelRatio * zoomValue
|
|
||||||
: 0;
|
|
||||||
|
|
||||||
context.translate(canvasOffsetX, canvasOffsetY);
|
|
||||||
} else {
|
} else {
|
||||||
let width =
|
let width =
|
||||||
element.width * window.devicePixelRatio * zoomValue +
|
element.width * window.devicePixelRatio * zoomValue +
|
||||||
@ -160,8 +143,45 @@ const generateElementCanvas = (
|
|||||||
element.height * window.devicePixelRatio * zoomValue +
|
element.height * window.devicePixelRatio * zoomValue +
|
||||||
padding * zoomValue * 2;
|
padding * zoomValue * 2;
|
||||||
}
|
}
|
||||||
canvas.width = width;
|
}
|
||||||
canvas.height = height;
|
return {width, height, zoomValue};
|
||||||
|
}
|
||||||
|
|
||||||
|
const generateElementCanvas = (
|
||||||
|
element: NonDeletedExcalidrawElement,
|
||||||
|
zoom: Zoom,
|
||||||
|
renderConfig: RenderConfig,
|
||||||
|
): ExcalidrawElementWithCanvas => {
|
||||||
|
const canvas = document.createElement("canvas");
|
||||||
|
const context = canvas.getContext("2d")!;
|
||||||
|
const padding = getCanvasPadding(element);
|
||||||
|
|
||||||
|
const {width, height, zoomValue} = calcElementCanvasSize (
|
||||||
|
element,
|
||||||
|
zoom,
|
||||||
|
renderConfig,
|
||||||
|
);
|
||||||
|
|
||||||
|
canvas.width = widht;
|
||||||
|
canvas.height = height;
|
||||||
|
|
||||||
|
let canvasOffsetX = 0;
|
||||||
|
let canvasOffsetY = 0;
|
||||||
|
|
||||||
|
if (isLinearElement(element) || isFreeDrawElement(element)) {
|
||||||
|
const [x1, y1, x2, y2] = getElementAbsoluteCoords(element);
|
||||||
|
|
||||||
|
canvasOffsetX =
|
||||||
|
element.x > x1
|
||||||
|
? distance(element.x, x1) * window.devicePixelRatio * zoomValue
|
||||||
|
: 0;
|
||||||
|
|
||||||
|
canvasOffsetY =
|
||||||
|
element.y > y1
|
||||||
|
? distance(element.y, y1) * window.devicePixelRatio * zoomValue
|
||||||
|
: 0;
|
||||||
|
|
||||||
|
context.translate(canvasOffsetX, canvasOffsetY);
|
||||||
}
|
}
|
||||||
|
|
||||||
context.save();
|
context.save();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user