From 9b62f2e7d1086a3febe0027aa02b0e9daf876abe Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Sat, 9 Nov 2024 12:58:18 +0100 Subject: [PATCH] Polyfill `ImageData` in Node.js environments Given that `ImageData` has been supported for many years in all browsers, see [MDN](https://developer.mozilla.org/en-US/docs/Web/API/ImageData#browser_compatibility), we have a `typeof` check that's only necessary in Node.js environments. Since the `@napi-rs/canvas` package provides that functionality, we can thus add an `ImageData` polyfill which allows us to ever so slightly simplify the code. --- src/display/canvas.js | 2 +- src/display/node_utils.js | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/display/canvas.js b/src/display/canvas.js index 098741ce9..a7b16572f 100644 --- a/src/display/canvas.js +++ b/src/display/canvas.js @@ -586,7 +586,7 @@ class CanvasExtraState { } function putBinaryImageData(ctx, imgData) { - if (typeof ImageData !== "undefined" && imgData instanceof ImageData) { + if (imgData instanceof ImageData) { ctx.putImageData(imgData, 0, 0); return; } diff --git a/src/display/node_utils.js b/src/display/node_utils.js index 6518e32d9..4edd7bb3a 100644 --- a/src/display/node_utils.js +++ b/src/display/node_utils.js @@ -51,6 +51,13 @@ if ( warn("Cannot polyfill `DOMMatrix`, rendering may be broken."); } } + if (!globalThis.ImageData) { + if (canvas?.ImageData) { + globalThis.ImageData = canvas.ImageData; + } else { + warn("Cannot polyfill `ImageData`, rendering may be broken."); + } + } if (!globalThis.Path2D) { if (canvas?.Path2D) { globalThis.Path2D = canvas.Path2D;