Skip to content

Commit 3883540

Browse files
author
Steven Vancoillie
committed
fix: use proper types for the canvas context
1 parent d9fa50a commit 3883540

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

lib/components/canvas/index.ts

+20-5
Original file line numberDiff line numberDiff line change
@@ -111,25 +111,40 @@ export class CanvasSink extends Sink {
111111
// Note: drawImage can also be used instead of transferFromImageBitmap, but it caused
112112
// very large memory use in Chrome (goes up to ~2-3GB, then drops again).
113113
// Do do not call el.getContext twice, safari returns null for second call
114-
let ctx = window.createImageBitmap ? el.getContext('bitmaprenderer') : null
114+
let ctx:
115+
| ImageBitmapRenderingContext
116+
| CanvasRenderingContext2D
117+
| null = null
118+
if (window.createImageBitmap !== undefined) {
119+
ctx = el.getContext('bitmaprenderer')
120+
}
121+
if (ctx === null) {
122+
ctx = el.getContext('2d')
123+
}
124+
125+
// Set up the drawing callback to be used by the scheduler,
126+
// it receives a blob of a JPEG image.
115127
let drawImageBlob: BlobMessageHandler
116-
if (ctx !== null) {
128+
if (ctx === null) {
129+
drawImageBlob = () => {}
130+
} else if ('transferFromImageBitmap' in ctx) {
131+
const ctxBitmaprenderer = ctx
117132
drawImageBlob = ({ blob }) => {
118133
info.renderedFrames++
119134
window
120135
.createImageBitmap(blob)
121136
.then(imageBitmap => {
122-
;(ctx as any).transferFromImageBitmap(imageBitmap)
137+
ctxBitmaprenderer.transferFromImageBitmap(imageBitmap)
123138
})
124139
.catch(() => {
125140
/** ignore */
126141
})
127142
}
128143
} else {
129-
ctx = el.getContext('2d')
144+
const ctx2d = ctx
130145
const img = new Image()
131146
img.onload = () => {
132-
;(ctx as CanvasRenderingContext2D).drawImage(img, 0, 0)
147+
ctx2d.drawImage(img, 0, 0)
133148
}
134149
drawImageBlob = ({ blob }) => {
135150
info.renderedFrames++

0 commit comments

Comments
 (0)