@jbrowse/core
Version:
JBrowse 2 core libraries used by plugins
58 lines (57 loc) • 1.67 kB
JavaScript
import { CanvasSequence } from 'canvas-sequencer-ts';
import isNode from 'detect-node';
export { collectTransferables, isDetachedBuffer } from "./transferables.js";
export function isImageBitmap(value) {
return typeof ImageBitmap !== 'undefined' && value instanceof ImageBitmap;
}
export function drawImageOntoCanvasContext(imageData, context) {
if (imageData.serializedCommands) {
const seq = new CanvasSequence(imageData.serializedCommands);
seq.execute(context);
}
else {
context.drawImage(imageData, 0, 0);
}
}
export function createCanvas(width, height) {
if (typeof OffscreenCanvas === 'function') {
return new OffscreenCanvas(width, height);
}
else if (isNode) {
return nodeCreateCanvas(width, height);
}
else {
const context = new CanvasSequence();
return {
width,
height,
getContext() {
return context;
},
};
}
}
export async function createImageBitmap(canvas) {
if (typeof OffscreenCanvas === 'function') {
return canvas.transferToImageBitmap();
}
else if (isNode) {
const dataUri = canvas.toDataURL();
const img = new nodeImage();
return new Promise((resolve, reject) => {
img.onload = () => {
resolve(img);
};
img.onerror = reject;
img.src = dataUri;
});
}
else {
const ctx = canvas.getContext('2d');
return {
height: canvas.height,
width: canvas.width,
serializedCommands: ctx.toJSON(),
};
}
}