From 65b9a6cfc41889a53d11f92a3cd99005fc46ae18 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Mon, 14 Mar 2022 15:52:32 -0700 Subject: [PATCH] Fix dependency injection for decoration service --- src/browser/Decorations/BufferDecorationRenderer.ts | 6 +++--- src/browser/Decorations/OverviewRulerRenderer.ts | 6 +++--- src/browser/Terminal.ts | 6 +++--- src/common/services/DecorationService.ts | 8 +++++--- src/common/services/Services.ts | 1 + 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/browser/Decorations/BufferDecorationRenderer.ts b/src/browser/Decorations/BufferDecorationRenderer.ts index 9e3b2d72..2f91d968 100644 --- a/src/browser/Decorations/BufferDecorationRenderer.ts +++ b/src/browser/Decorations/BufferDecorationRenderer.ts @@ -16,10 +16,10 @@ export class BufferDecorationRenderer extends Disposable { private _altBufferIsActive: boolean = false; constructor( + private readonly _screenElement: HTMLElement, @IBufferService private readonly _bufferService: IBufferService, - @IRenderService private readonly _renderService: IRenderService, - private readonly _decorationService: IDecorationService, - private readonly _screenElement: HTMLElement + @IDecorationService private readonly _decorationService: IDecorationService, + @IRenderService private readonly _renderService: IRenderService ) { super(); diff --git a/src/browser/Decorations/OverviewRulerRenderer.ts b/src/browser/Decorations/OverviewRulerRenderer.ts index 2ee0970c..b880fa33 100644 --- a/src/browser/Decorations/OverviewRulerRenderer.ts +++ b/src/browser/Decorations/OverviewRulerRenderer.ts @@ -23,12 +23,12 @@ export class OverviewRulerRenderer extends Disposable { private _x: number | undefined; constructor( + private readonly _viewportElement: HTMLElement, + private readonly _screenElement: HTMLElement, @IBufferService private readonly _bufferService: IBufferService, - @IRenderService private readonly _renderService: IRenderService, @IDecorationService private readonly _decorationService: IDecorationService, @IInstantiationService private readonly _instantiationService: IInstantiationService, - private readonly _viewportElement: HTMLElement, - private readonly _screenElement: HTMLElement + @IRenderService private readonly _renderService: IRenderService ) { super(); this._canvas = document.createElement('canvas'); diff --git a/src/browser/Terminal.ts b/src/browser/Terminal.ts index d07b9c30..3d490d08 100644 --- a/src/browser/Terminal.ts +++ b/src/browser/Terminal.ts @@ -587,14 +587,14 @@ export class Terminal extends CoreTerminal implements ITerminal { this.linkifier.attachToDom(this.element, this._mouseZoneManager); this.linkifier2.attachToDom(this.screenElement, this._mouseService, this._renderService); if (this._decorationService) { - this._bufferDecorationRenderer = new BufferDecorationRenderer(this._bufferService, this._renderService, this._decorationService, this.screenElement); + this._bufferDecorationRenderer = this._instantiationService.createInstance(BufferDecorationRenderer, this.screenElement); } if (this.options.overviewRulerWidth && this._decorationService) { - this._overviewRulerRenderer = new OverviewRulerRenderer(this._bufferService, this._renderService, this._decorationService, this._instantiationService, this._viewportElement, this.screenElement); + this._overviewRulerRenderer = this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement); } this.optionsService.onOptionChange(() => { if (!this._overviewRulerRenderer && this.options.overviewRulerWidth && this._renderService && this._viewportElement && this.screenElement && this._decorationService) { - this._overviewRulerRenderer = new OverviewRulerRenderer(this._bufferService, this._renderService, this._decorationService, this._instantiationService, this._viewportElement, this.screenElement); + this._overviewRulerRenderer = this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement); }}); // This event listener must be registered aftre MouseZoneManager is created this.register(addDisposableDomListener(this.element, 'mousedown', (e: MouseEvent) => this._selectionService!.onMouseDown(e))); diff --git a/src/common/services/DecorationService.ts b/src/common/services/DecorationService.ts index af1d30b0..693f8944 100644 --- a/src/common/services/DecorationService.ts +++ b/src/common/services/DecorationService.ts @@ -3,19 +3,21 @@ * @license MIT */ - import { EventEmitter } from 'common/EventEmitter'; import { Disposable } from 'common/Lifecycle'; import { IDecorationService, IInternalDecoration } from 'common/services/Services'; import { IDecorationOptions, IDecoration, IMarker, IEvent } from 'xterm'; export class DecorationService extends Disposable implements IDecorationService { + public serviceBrand: any; + + private readonly _decorations: IInternalDecoration[] = []; private _animationFrame: number | undefined; + private _onDecorationRegistered = this.register(new EventEmitter()); public get onDecorationRegistered(): IEvent { return this._onDecorationRegistered.event; } private _onDecorationRemoved = this.register(new EventEmitter()); public get onDecorationRemoved(): IEvent { return this._onDecorationRemoved.event; } - private _decorations: IInternalDecoration[] = []; public get decorations(): IterableIterator { return this._decorations.values(); } @@ -45,7 +47,7 @@ export class DecorationService extends Disposable implements IDecorationService this._onDecorationRemoved.fire(decoration); decoration.dispose(); } - this._decorations = []; + this._decorations.length = 0; } private _queueRefresh(): void { diff --git a/src/common/services/Services.ts b/src/common/services/Services.ts index 67bbb5ee..876d90bc 100644 --- a/src/common/services/Services.ts +++ b/src/common/services/Services.ts @@ -303,6 +303,7 @@ export interface IUnicodeVersionProvider { export const IDecorationService = createDecorator('DecorationService'); export interface IDecorationService extends IDisposable { + serviceBrand: undefined; readonly decorations: IterableIterator; readonly onDecorationRegistered: IEvent; readonly onDecorationRemoved: IEvent;