diff --git a/addons/xterm-addon-canvas/src/BaseRenderLayer.ts b/addons/xterm-addon-canvas/src/BaseRenderLayer.ts index da7ae912..b3b5fe10 100644 --- a/addons/xterm-addon-canvas/src/BaseRenderLayer.ts +++ b/addons/xterm-addon-canvas/src/BaseRenderLayer.ts @@ -19,7 +19,7 @@ import { ICellData } from 'common/Types'; import { Terminal } from 'xterm'; import { IRenderLayer } from './Types'; import { CellColorResolver } from 'browser/renderer/shared/CellColorResolver'; -import { Disposable } from 'common/Lifecycle'; +import { Disposable, toDisposable } from 'common/Lifecycle'; export abstract class BaseRenderLayer extends Disposable implements IRenderLayer { private _canvas: HTMLCanvasElement; @@ -60,11 +60,11 @@ export abstract class BaseRenderLayer extends Disposable implements IRenderLayer this._initCanvas(); this._container.appendChild(this._canvas); this._refreshCharAtlas(this._colors); - } - public dispose(): void { - removeElementFromParent(this._canvas); - this._charAtlas?.dispose(); + this.register(toDisposable(() => { + removeElementFromParent(this._canvas); + this._charAtlas?.dispose(); + })); } private _initCanvas(): void { diff --git a/addons/xterm-addon-canvas/src/CanvasRenderer.ts b/addons/xterm-addon-canvas/src/CanvasRenderer.ts index 868bedd6..b4e41282 100644 --- a/addons/xterm-addon-canvas/src/CanvasRenderer.ts +++ b/addons/xterm-addon-canvas/src/CanvasRenderer.ts @@ -9,7 +9,7 @@ import { IRenderDimensions, IRenderer, IRequestRedrawEvent } from 'browser/rende import { ICharacterJoinerService, ICharSizeService, ICoreBrowserService } from 'browser/services/Services'; import { IColorSet, ILinkifier2 } from 'browser/Types'; import { EventEmitter } from 'common/EventEmitter'; -import { Disposable } from 'common/Lifecycle'; +import { Disposable, toDisposable } from 'common/Lifecycle'; import { IBufferService, ICoreService, IDecorationService, IOptionsService } from 'common/services/Services'; import { Terminal } from 'xterm'; import { CursorRenderLayer } from './CursorRenderLayer'; @@ -70,14 +70,13 @@ export class CanvasRenderer extends Disposable implements IRenderer { this.register(observeDevicePixelDimensions(this._renderLayers[0].canvas, this._coreBrowserService.window, (w, h) => this._setCanvasDevicePixelDimensions(w, h))); this.onOptionsChanged(); - } - public dispose(): void { - for (const l of this._renderLayers) { - l.dispose(); - } - super.dispose(); - removeTerminalFromCache(this._terminal); + this.register(toDisposable(() => { + for (const l of this._renderLayers) { + l.dispose(); + } + removeTerminalFromCache(this._terminal); + })); } public get textureAtlas(): HTMLCanvasElement | undefined {