Skip to content

Commit 4baccf9

Browse files
authored
Merge pull request #534 from vizzuhq/set-canvas-element
Add set canvas element
2 parents e55a800 + dba3429 commit 4baccf9

File tree

2 files changed

+28
-9
lines changed

2 files changed

+28
-9
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
- Do not calculate disabled markers to the color normalization.
88
- More precise TS type for transform matrix in event handlers.
9+
- Add missing canvas change function in htmlcanvas plugin.
910
- On split charts the first range was not part of the separation calculation.
1011
- When the first marker was disabled it was calculated as an enabled marker on the XY normalization.
1112

src/apps/weblib/ts-api/plugins/htmlcanvas.ts

+27-9
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ export type Event<T> = Events.Event<T> & {
1818
export interface HtmlCanvasApi extends PluginApi {
1919
/** Returns the underlying canvas element. */
2020
get element(): HTMLCanvasElement
21+
/** Update the underlying canvas element. */
22+
set element(element: HTMLCanvasElement)
2123
/** Returns the actual canvas context */
2224
get context(): CanvasRenderingContext2D
2325
clientToCanvas(clientPos: Geom.Point): Geom.Point
@@ -29,9 +31,9 @@ export class HtmlCanvas implements Plugin, HtmlCanvasAlternative {
2931
private _container?: HTMLElement
3032
private _offscreenCanvas: HTMLCanvasElement
3133
private _offscreenContext: CanvasRenderingContext2D
32-
private _mainCanvas: HTMLCanvasElement
33-
private _context: CanvasRenderingContext2D
34-
private _resizeObserver: ResizeObserver
34+
private _mainCanvas!: HTMLCanvasElement
35+
private _context!: CanvasRenderingContext2D
36+
private _resizeObserver!: ResizeObserver
3537
private _resizeHandler: () => void
3638
private _prevUpdateHash: string = ''
3739
private _scaleFactor: number = 1
@@ -41,8 +43,15 @@ export class HtmlCanvas implements Plugin, HtmlCanvasAlternative {
4143
meta = { name: 'htmlCanvas' }
4244

4345
get api(): HtmlCanvasApi {
46+
// eslint-disable-next-line @typescript-eslint/no-this-alias
47+
const self = this
4448
return {
45-
element: this.element,
49+
get element(): HTMLCanvasElement {
50+
return self._mainCanvas
51+
},
52+
set element(newCanvasElement: HTMLCanvasElement) {
53+
self._setCanvas(newCanvasElement)
54+
},
4655
context: this.context,
4756
clientToCanvas: this._clientToCanvas.bind(this),
4857
canvasToClient: this._canvasToClient.bind(this)
@@ -102,20 +111,25 @@ export class HtmlCanvas implements Plugin, HtmlCanvasAlternative {
102111
}
103112

104113
constructor(options: CanvasOptions) {
105-
this._mainCanvas = this._toCanvasElement(options.element)
106114
this._offscreenCanvas = document.createElement<'canvas'>('canvas')
107115
const offCtx = this._offscreenCanvas.getContext('2d')
108116
if (!offCtx) throw Error('Cannot get rendering context of internal canvas')
109117
this._offscreenContext = offCtx
118+
this._resizeHandler = (): void => {
119+
this._update(true)
120+
}
121+
this._setCanvas(options.element)
122+
window.addEventListener('resize', this._resizeHandler)
123+
}
124+
125+
private _setCanvas(element: HTMLElement): void {
126+
this._mainCanvas = this._toCanvasElement(element)
127+
this._prevUpdateHash = ''
110128
const ctx = this._mainCanvas.getContext('2d')
111129
if (!ctx) throw Error('Cannot get rendering context of canvas')
112130
this._context = ctx
113131
this._calcSize()
114132
this._resizeObserver = this._createResizeObserverFor(this._mainCanvas)
115-
this._resizeHandler = (): void => {
116-
this._update(true)
117-
}
118-
window.addEventListener('resize', this._resizeHandler)
119133
}
120134

121135
unregister(): void {
@@ -128,6 +142,10 @@ export class HtmlCanvas implements Plugin, HtmlCanvasAlternative {
128142
return this._mainCanvas
129143
}
130144

145+
set element(element: HTMLCanvasElement) {
146+
this._setCanvas(element)
147+
}
148+
131149
get context(): CanvasRenderingContext2D {
132150
return this._offscreenContext
133151
}

0 commit comments

Comments
 (0)