From 954d9371a12e90639030ba394b183855f4346c24 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Fri, 29 Jul 2022 11:05:41 -0700 Subject: [PATCH] Inactive selection in webgl --- addons/xterm-addon-webgl/src/WebglAddon.ts | 5 +++-- addons/xterm-addon-webgl/src/WebglRenderer.ts | 9 +++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/addons/xterm-addon-webgl/src/WebglAddon.ts b/addons/xterm-addon-webgl/src/WebglAddon.ts index 4ff31ee9..c04cd0d4 100644 --- a/addons/xterm-addon-webgl/src/WebglAddon.ts +++ b/addons/xterm-addon-webgl/src/WebglAddon.ts @@ -5,7 +5,7 @@ import { Terminal, ITerminalAddon, IEvent } from 'xterm'; import { WebglRenderer } from './WebglRenderer'; -import { ICharacterJoinerService, IRenderService } from 'browser/services/Services'; +import { ICharacterJoinerService, ICoreBrowserService, IRenderService } from 'browser/services/Services'; import { IColorSet } from 'browser/Types'; import { EventEmitter } from 'common/EventEmitter'; import { isSafari } from 'common/Platform'; @@ -31,9 +31,10 @@ export class WebglAddon implements ITerminalAddon { this._terminal = terminal; const renderService: IRenderService = (terminal as any)._core._renderService; const characterJoinerService: ICharacterJoinerService = (terminal as any)._core._characterJoinerService; + const coreBrowserService: ICoreBrowserService = (terminal as any)._core._coreBrowserService; const decorationService: IDecorationService = (terminal as any)._core._decorationService; const colors: IColorSet = (terminal as any)._core._colorManager.colors; - this._renderer = new WebglRenderer(terminal, colors, characterJoinerService, decorationService, this._preserveDrawingBuffer); + this._renderer = new WebglRenderer(terminal, colors, characterJoinerService, coreBrowserService, decorationService, this._preserveDrawingBuffer); this._renderer.onContextLoss(() => this._onContextLoss.fire()); renderService.setRenderer(this._renderer); } diff --git a/addons/xterm-addon-webgl/src/WebglRenderer.ts b/addons/xterm-addon-webgl/src/WebglRenderer.ts index 4a57ae91..af1ceef5 100644 --- a/addons/xterm-addon-webgl/src/WebglRenderer.ts +++ b/addons/xterm-addon-webgl/src/WebglRenderer.ts @@ -21,7 +21,7 @@ import { ITerminal, IColorSet } from 'browser/Types'; import { EventEmitter } from 'common/EventEmitter'; import { CellData } from 'common/buffer/CellData'; import { addDisposableDomListener } from 'browser/Lifecycle'; -import { ICharacterJoinerService } from 'browser/services/Services'; +import { ICharacterJoinerService, ICoreBrowserService } from 'browser/services/Services'; import { CharData, ICellData } from 'common/Types'; import { AttributeData } from 'common/buffer/AttributeData'; import { IDecorationService } from 'common/services/Services'; @@ -55,6 +55,7 @@ export class WebglRenderer extends Disposable implements IRenderer { private _terminal: Terminal, private _colors: IColorSet, private readonly _characterJoinerService: ICharacterJoinerService, + private readonly _coreBrowserService: ICoreBrowserService, private readonly _decorationService: IDecorationService, preserveDrawingBuffer?: boolean ) { @@ -187,12 +188,16 @@ export class WebglRenderer extends Disposable implements IRenderer { for (const l of this._renderLayers) { l.onBlur(this._terminal); } + // Request a redraw for active/inactive selection background + this._requestRedrawViewport(); } public onFocus(): void { for (const l of this._renderLayers) { l.onFocus(this._terminal); } + // Request a redraw for active/inactive selection background + this._requestRedrawViewport(); } public onSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void { @@ -405,7 +410,7 @@ export class WebglRenderer extends Disposable implements IRenderer { // Apply the selection color if needed if (this._isCellSelected(x, y)) { - bgOverride = this._colors.selectionBackgroundOpaque.rgba >> 8 & 0xFFFFFF; + bgOverride = (this._coreBrowserService.isFocused ? this._colors.selectionBackgroundOpaque : this._colors.selectionInactiveBackgroundOpaque).rgba >> 8 & 0xFFFFFF; if (this._colors.selectionForeground) { fgOverride = this._colors.selectionForeground.rgba >> 8 & 0xFFFFFF; }