From c7122e8447beea0dac15cd25982f7cf68adc67a2 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Sat, 30 Jul 2022 10:29:41 -0700 Subject: [PATCH] Fix dim flag applying to selection in webgl Fixes #3970 --- addons/xterm-addon-webgl/src/WebglRenderer.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/addons/xterm-addon-webgl/src/WebglRenderer.ts b/addons/xterm-addon-webgl/src/WebglRenderer.ts index d2d4f478..6616db6e 100644 --- a/addons/xterm-addon-webgl/src/WebglRenderer.ts +++ b/addons/xterm-addon-webgl/src/WebglRenderer.ts @@ -402,6 +402,7 @@ export class WebglRenderer extends Disposable implements IRenderer { // override logic throughout the different sub-renderers let bgOverride: number | undefined; let fgOverride: number | undefined; + let isSelected: boolean = false; // Apply decorations on the bottom layer for (const d of this._decorationService.getDecorationsAtCell(x, y, 'bottom')) { @@ -414,7 +415,8 @@ export class WebglRenderer extends Disposable implements IRenderer { } // Apply the selection color if needed - if (this._isCellSelected(x, y)) { + isSelected = this._isCellSelected(x, y); + if (isSelected) { bgOverride = (this._coreBrowserService.isFocused ? this._colors.selectionBackgroundOpaque : this._colors.selectionInactiveBackgroundOpaque).rgba >> 8 & 0xFFFFFF; if (this._colors.selectionForeground) { fgOverride = this._colors.selectionForeground.rgba >> 8 & 0xFFFFFF; @@ -434,8 +436,13 @@ export class WebglRenderer extends Disposable implements IRenderer { // Convert any overrides from rgba to the fg/bg packed format. This resolves the inverse flag // ahead of time in order to use the correct cache key if (bgOverride !== undefined) { - // Non-RGB attributes from model + override + force RGB color mode - bgOverride = (this._workCell.bg & ~Attributes.RGB_MASK) | bgOverride | Attributes.CM_RGB; + if (isSelected) { + // Non-RGB attributes from model + force non-dim + override + force RGB color mode + bgOverride = (this._workCell.bg & ~Attributes.RGB_MASK & ~BgFlags.DIM) | bgOverride | Attributes.CM_RGB; + } else { + // Non-RGB attributes from model + override + force RGB color mode + bgOverride = (this._workCell.bg & ~Attributes.RGB_MASK) | bgOverride | Attributes.CM_RGB; + } } if (fgOverride !== undefined) { // Non-RGB attributes from model + force disable inverse + override + force RGB color mode