49 lines
1.2 KiB
TypeScript
49 lines
1.2 KiB
TypeScript
/* eslint-disable no-restricted-globals */
|
|
|
|
import { getNonDeletedElements } from "../element";
|
|
import { ExcalidrawElement } from "../element/types";
|
|
import { exportToCanvas } from "../scene/export";
|
|
import { AppState } from "../types";
|
|
|
|
const ctx: Worker = self as any;
|
|
let canvas: OffscreenCanvas;
|
|
|
|
ctx.addEventListener("message", (ev) => {
|
|
if (ev.data.type === "INIT") {
|
|
canvas = ev.data.canvas;
|
|
}
|
|
|
|
if (ev.data.type === "DRAW") {
|
|
const { elements, appState, width, height } = ev.data;
|
|
drawScene(canvas, elements, appState, width, height);
|
|
}
|
|
});
|
|
|
|
function drawScene(
|
|
canvas: OffscreenCanvas,
|
|
elements: readonly ExcalidrawElement[],
|
|
appState: AppState,
|
|
minimapWidth: number,
|
|
minimapHeight: number,
|
|
) {
|
|
exportToCanvas(
|
|
getNonDeletedElements(elements),
|
|
appState,
|
|
{
|
|
exportBackground: true,
|
|
viewBackgroundColor: appState.viewBackgroundColor,
|
|
shouldAddWatermark: false,
|
|
},
|
|
(width, height) => {
|
|
const scale = Math.min(minimapWidth / width, minimapHeight / height);
|
|
canvas.width = width * scale;
|
|
canvas.height = height * scale;
|
|
|
|
return {
|
|
canvas,
|
|
scale,
|
|
};
|
|
},
|
|
);
|
|
}
|