UNPKG

tldraw

Version:

A tiny little drawing editor.

46 lines (45 loc) 1.44 kB
import canvasSize from "canvas-size"; let maxSizePromise = null; function getBrowserCanvasMaxSize() { if (!maxSizePromise) { maxSizePromise = calculateBrowserCanvasMaxSize(); } return maxSizePromise; } async function calculateBrowserCanvasMaxSize() { const maxWidth = await canvasSize.maxWidth({ usePromise: true }); const maxHeight = await canvasSize.maxHeight({ usePromise: true }); const maxArea = await canvasSize.maxArea({ usePromise: true }); return { maxWidth: maxWidth.width, maxHeight: maxHeight.height, maxArea: maxArea.width * maxArea.height }; } const MAX_SAFE_CANVAS_DIMENSION = 8192; const MAX_SAFE_CANVAS_AREA = 4096 * 4096; async function clampToBrowserMaxCanvasSize(width, height) { if (width <= MAX_SAFE_CANVAS_DIMENSION && height <= MAX_SAFE_CANVAS_DIMENSION && width * height <= MAX_SAFE_CANVAS_AREA) { return [width, height]; } const { maxWidth, maxHeight, maxArea } = await getBrowserCanvasMaxSize(); const aspectRatio = width / height; if (width > maxWidth) { width = maxWidth; height = width / aspectRatio; } if (height > maxHeight) { height = maxHeight; width = height * aspectRatio; } if (width * height > maxArea) { const ratio = Math.sqrt(maxArea / (width * height)); width *= ratio; height *= ratio; } return [width, height]; } export { clampToBrowserMaxCanvasSize }; //# sourceMappingURL=getBrowserCanvasMaxSize.mjs.map