@@ -23,6 +23,7 @@ interface ISelectionState {
2323export class RenderService extends Disposable implements IRenderService {
2424 public serviceBrand : undefined ;
2525
26+ private _renderer : IRenderer | undefined ;
2627 private _renderDebouncer : IRenderDebouncerWithCallback ;
2728 private _screenDprMonitor : ScreenDprMonitor ;
2829 private _pausedResizeTask = new DebouncedIdleTask ( ) ;
@@ -48,10 +49,9 @@ export class RenderService extends Disposable implements IRenderService {
4849 private readonly _onRefreshRequest = new EventEmitter < { start : number , end : number } > ( ) ;
4950 public readonly onRefreshRequest = this . _onRefreshRequest . event ;
5051
51- public get dimensions ( ) : IRenderDimensions { return this . _renderer . dimensions ; }
52+ public get dimensions ( ) : IRenderDimensions { return this . _renderer ! . dimensions ; }
5253
5354 constructor (
54- private _renderer : IRenderer ,
5555 private _rowCount : number ,
5656 screenElement : HTMLElement ,
5757 @IOptionsService optionsService : IOptionsService ,
@@ -62,7 +62,7 @@ export class RenderService extends Disposable implements IRenderService {
6262 ) {
6363 super ( ) ;
6464
65- this . register ( { dispose : ( ) => this . _renderer . dispose ( ) } ) ;
65+ this . register ( { dispose : ( ) => this . _renderer ? .dispose ( ) } ) ;
6666
6767 this . _renderDebouncer = new RenderDebouncer ( coreBrowserService . window , ( start , end ) => this . _renderRows ( start , end ) ) ;
6868 this . register ( this . _renderDebouncer ) ;
@@ -83,7 +83,7 @@ export class RenderService extends Disposable implements IRenderService {
8383 this . register ( decorationService . onDecorationRemoved ( ( ) => this . _fullRefresh ( ) ) ) ;
8484
8585 // No need to register this as renderer is explicitly disposed in RenderService.dispose
86- this . _renderer . onRequestRedraw ( e => this . refreshRows ( e . start , e . end , true ) ) ;
86+ // this._renderer.onRequestRedraw(e => this.refreshRows(e.start, e.end, true));
8787
8888 // dprchange should handle this case, we need this as well for browsers that don't support the
8989 // matchMedia query.
@@ -125,6 +125,9 @@ export class RenderService extends Disposable implements IRenderService {
125125 }
126126
127127 private _renderRows ( start : number , end : number ) : void {
128+ if ( ! this . _renderer ) {
129+ return ;
130+ }
128131 this . _renderer . renderRows ( start , end ) ;
129132
130133 // Update selection if needed
@@ -147,12 +150,18 @@ export class RenderService extends Disposable implements IRenderService {
147150 }
148151
149152 private _handleOptionsChanged ( ) : void {
153+ if ( ! this . _renderer ) {
154+ return ;
155+ }
150156 this . _renderer . onOptionsChanged ( ) ;
151157 this . refreshRows ( 0 , this . _rowCount - 1 ) ;
152158 this . _fireOnCanvasResize ( ) ;
153159 }
154160
155161 private _fireOnCanvasResize ( ) : void {
162+ if ( ! this . _renderer ) {
163+ return ;
164+ }
156165 // Don't fire the event if the dimensions haven't changed
157166 if ( this . _renderer . dimensions . canvasWidth === this . _canvasWidth && this . _renderer . dimensions . canvasHeight === this . _canvasHeight ) {
158167 return ;
@@ -164,9 +173,13 @@ export class RenderService extends Disposable implements IRenderService {
164173 super . dispose ( ) ;
165174 }
166175
176+ public hasRenderer ( ) : boolean {
177+ return ! ! this . _renderer ;
178+ }
179+
167180 public setRenderer ( renderer : IRenderer ) : void {
168181 // TODO: RenderService should be the only one to dispose the renderer
169- this . _renderer . dispose ( ) ;
182+ this . _renderer ? .dispose ( ) ;
170183 this . _renderer = renderer ;
171184 this . _renderer . onRequestRedraw ( e => this . refreshRows ( e . start , e . end , true ) ) ;
172185
@@ -188,11 +201,17 @@ export class RenderService extends Disposable implements IRenderService {
188201 }
189202
190203 public clearTextureAtlas ( ) : void {
191- this . _renderer ?. clearTextureAtlas ?.( ) ;
204+ if ( ! this . _renderer ) {
205+ return ;
206+ }
207+ this . _renderer . clearTextureAtlas ?.( ) ;
192208 this . _fullRefresh ( ) ;
193209 }
194210
195211 public setColors ( colors : IColorSet ) : void {
212+ if ( ! this . _renderer ) {
213+ return ;
214+ }
196215 this . _renderer . setColors ( colors ) ;
197216 this . _fullRefresh ( ) ;
198217 }
@@ -202,13 +221,19 @@ export class RenderService extends Disposable implements IRenderService {
202221 // when devicePixelRatio changes
203222 this . _charSizeService . measure ( ) ;
204223
224+ if ( ! this . _renderer ) {
225+ return ;
226+ }
205227 this . _renderer . onDevicePixelRatioChange ( ) ;
206228 this . refreshRows ( 0 , this . _rowCount - 1 ) ;
207229 }
208230
209231 public onResize ( cols : number , rows : number ) : void {
232+ if ( ! this . _renderer ) {
233+ return ;
234+ }
210235 if ( this . _isPaused ) {
211- this . _pausedResizeTask . set ( ( ) => this . _renderer . onResize ( cols , rows ) ) ;
236+ this . _pausedResizeTask . set ( ( ) => this . _renderer ! . onResize ( cols , rows ) ) ;
212237 } else {
213238 this . _renderer . onResize ( cols , rows ) ;
214239 }
@@ -217,29 +242,29 @@ export class RenderService extends Disposable implements IRenderService {
217242
218243 // TODO: Is this useful when we have onResize?
219244 public onCharSizeChanged ( ) : void {
220- this . _renderer . onCharSizeChanged ( ) ;
245+ this . _renderer ? .onCharSizeChanged ( ) ;
221246 }
222247
223248 public onBlur ( ) : void {
224- this . _renderer . onBlur ( ) ;
249+ this . _renderer ? .onBlur ( ) ;
225250 }
226251
227252 public onFocus ( ) : void {
228- this . _renderer . onFocus ( ) ;
253+ this . _renderer ? .onFocus ( ) ;
229254 }
230255
231256 public onSelectionChanged ( start : [ number , number ] | undefined , end : [ number , number ] | undefined , columnSelectMode : boolean ) : void {
232257 this . _selectionState . start = start ;
233258 this . _selectionState . end = end ;
234259 this . _selectionState . columnSelectMode = columnSelectMode ;
235- this . _renderer . onSelectionChanged ( start , end , columnSelectMode ) ;
260+ this . _renderer ? .onSelectionChanged ( start , end , columnSelectMode ) ;
236261 }
237262
238263 public onCursorMove ( ) : void {
239- this . _renderer . onCursorMove ( ) ;
264+ this . _renderer ? .onCursorMove ( ) ;
240265 }
241266
242267 public clear ( ) : void {
243- this . _renderer . clear ( ) ;
268+ this . _renderer ? .clear ( ) ;
244269 }
245270}
0 commit comments