cappedElementCanvasSize

This commit is contained in:
zsviczian 2023-04-04 16:01:47 +02:00 committed by GitHub
parent 028ad1ee81
commit 619e4061f5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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();