From f3a7cac49f2df91b4acf14a9682b404bcd74f3f0 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Tue, 3 Feb 2026 03:55:25 -0800 Subject: [PATCH] Handle options within blink state manager --- addons/addon-webgl/src/WebglRenderer.ts | 5 ++--- src/browser/renderer/dom/DomRenderer.ts | 5 ++--- src/browser/renderer/shared/TextBlinkStateManager.ts | 8 +++++++- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/addons/addon-webgl/src/WebglRenderer.ts b/addons/addon-webgl/src/WebglRenderer.ts index 3e93ca85..351b9f27 100644 --- a/addons/addon-webgl/src/WebglRenderer.ts +++ b/addons/addon-webgl/src/WebglRenderer.ts @@ -109,9 +109,9 @@ export class WebglRenderer extends Disposable implements IRenderer { this._register(_optionsService.onOptionChange(() => this._handleOptionsChanged())); this._textBlinkStateManager = this._register(new TextBlinkStateManager( () => this._requestRedrawViewport(), - this._coreBrowserService + this._coreBrowserService, + this._optionsService )); - this._textBlinkStateManager.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration); this._deviceMaxTextureSize = this._gl.getParameter(this._gl.MAX_TEXTURE_SIZE); @@ -257,7 +257,6 @@ export class WebglRenderer extends Disposable implements IRenderer { this._updateDimensions(); this._refreshCharAtlas(); this._updateCursorBlink(); - this._textBlinkStateManager.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration); } /** diff --git a/src/browser/renderer/dom/DomRenderer.ts b/src/browser/renderer/dom/DomRenderer.ts index 23273308..50f94e8b 100644 --- a/src/browser/renderer/dom/DomRenderer.ts +++ b/src/browser/renderer/dom/DomRenderer.ts @@ -100,9 +100,9 @@ export class DomRenderer extends Disposable implements IRenderer { this._register(toDisposable(() => this._cursorBlinkStateManager.dispose())); this._textBlinkStateManager = this._register(new TextBlinkStateManager( () => this._onRequestRedraw.fire({ start: 0, end: this._bufferService.rows - 1 }), - this._coreBrowserService + this._coreBrowserService, + this._optionsService )); - this._textBlinkStateManager.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration); this._register(toDisposable(() => { this._element.classList.remove(TERMINAL_CLASS_PREFIX + this._terminalClass); @@ -447,7 +447,6 @@ export class DomRenderer extends Disposable implements IRenderer { this._optionsService.rawOptions.fontWeightBold ); this._setDefaultSpacing(); - this._textBlinkStateManager.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration); } public clear(): void { diff --git a/src/browser/renderer/shared/TextBlinkStateManager.ts b/src/browser/renderer/shared/TextBlinkStateManager.ts index 21f2d606..564bbdd9 100644 --- a/src/browser/renderer/shared/TextBlinkStateManager.ts +++ b/src/browser/renderer/shared/TextBlinkStateManager.ts @@ -5,6 +5,7 @@ import { ICoreBrowserService } from 'browser/services/Services'; import { Disposable, toDisposable } from 'common/Lifecycle'; +import { IOptionsService } from 'common/services/Services'; export class TextBlinkStateManager extends Disposable { private _intervalDuration: number = 0; @@ -13,9 +14,14 @@ export class TextBlinkStateManager extends Disposable { constructor( private readonly _renderCallback: () => void, - private readonly _coreBrowserService: ICoreBrowserService + private readonly _coreBrowserService: ICoreBrowserService, + private readonly _optionsService: IOptionsService ) { super(); + this._register(this._optionsService.onSpecificOptionChange('blinkIntervalDuration', duration => { + this.setIntervalDuration(duration); + })); + this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration); this._register(toDisposable(() => this._clearInterval())); }