diff options
author | Leo Kettmeir <crowlkats@toaxl.com> | 2024-01-22 12:08:01 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-22 12:08:01 +0100 |
commit | 8f767627938ef10802864419061e58a8a75db567 (patch) | |
tree | 81f61ba0f8c14fb820a72500840eb0c619d54362 /runtime/js/98_global_scope_shared.js | |
parent | b4990d1aa233db662cf22d7f872d45b3a947e0f6 (diff) |
feat(web): ImageBitmap (#21898)
Diffstat (limited to 'runtime/js/98_global_scope_shared.js')
-rw-r--r-- | runtime/js/98_global_scope_shared.js | 62 |
1 files changed, 60 insertions, 2 deletions
diff --git a/runtime/js/98_global_scope_shared.js b/runtime/js/98_global_scope_shared.js index 04a6e4bd3..8ef269539 100644 --- a/runtime/js/98_global_scope_shared.js +++ b/runtime/js/98_global_scope_shared.js @@ -31,11 +31,67 @@ import * as messagePort from "ext:deno_web/13_message_port.js"; import * as webidl from "ext:deno_webidl/00_webidl.js"; import { DOMException } from "ext:deno_web/01_dom_exception.js"; import * as abortSignal from "ext:deno_web/03_abort_signal.js"; -import * as imageData from "ext:deno_web/16_image_data.js"; import { webgpu, webGPUNonEnumerable } from "ext:deno_webgpu/00_init.js"; import * as webgpuSurface from "ext:deno_webgpu/02_surface.js"; import { unstableIds } from "ext:runtime/90_deno_ns.js"; +const { op_lazy_load_esm } = core.ensureFastOps(true); +let image; + +function ImageNonEnumerable(getter) { + let valueIsSet = false; + let value; + + return { + get() { + loadImage(); + + if (valueIsSet) { + return value; + } else { + return getter(); + } + }, + set(v) { + loadImage(); + + valueIsSet = true; + value = v; + }, + enumerable: false, + configurable: true, + }; +} +function ImageWritable(getter) { + let valueIsSet = false; + let value; + + return { + get() { + loadImage(); + + if (valueIsSet) { + return value; + } else { + return getter(); + } + }, + set(v) { + loadImage(); + + valueIsSet = true; + value = v; + }, + enumerable: true, + configurable: true, + }; +} +function loadImage() { + if (!image) { + image = op_lazy_load_esm("ext:deno_canvas/01_image.js"); + } +} + // https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope const windowOrWorkerGlobalScope = { AbortController: util.nonEnumerable(abortSignal.AbortController), @@ -60,7 +116,8 @@ const windowOrWorkerGlobalScope = { FileReader: util.nonEnumerable(fileReader.FileReader), FormData: util.nonEnumerable(formData.FormData), Headers: util.nonEnumerable(headers.Headers), - ImageData: util.nonEnumerable(imageData.ImageData), + ImageData: ImageNonEnumerable(() => image.ImageData), + ImageBitmap: ImageNonEnumerable(() => image.ImageBitmap), MessageEvent: util.nonEnumerable(event.MessageEvent), Performance: util.nonEnumerable(performance.Performance), PerformanceEntry: util.nonEnumerable(performance.PerformanceEntry), @@ -110,6 +167,7 @@ const windowOrWorkerGlobalScope = { ), atob: util.writable(base64.atob), btoa: util.writable(base64.btoa), + createImageBitmap: ImageWritable(() => image.createImageBitmap), clearInterval: util.writable(timers.clearInterval), clearTimeout: util.writable(timers.clearTimeout), caches: { |