From 543b3d6c9f45b2b2b5141e02c20cca0b76a1cfc8 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Wed, 4 Dec 2019 10:54:17 -0800 Subject: [PATCH 1/3] Fix minimumContrastRatio on dom/truecolor Fixes #2593 --- src/browser/Color.ts | 2 +- .../renderer/dom/DomRendererRowFactory.ts | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/browser/Color.ts b/src/browser/Color.ts index e20f62e6..e40ff9e1 100644 --- a/src/browser/Color.ts +++ b/src/browser/Color.ts @@ -108,7 +108,7 @@ export function contrastRatio(l1: number, l2: number): number { return (l1 + 0.05) / (l2 + 0.05); } -function rgbaToColor(r: number, g: number, b: number): IColor { +export function rgbaToColor(r: number, g: number, b: number): IColor { return { css: toCss(r, g, b), rgba: toRgba(r, g, b) diff --git a/src/browser/renderer/dom/DomRendererRowFactory.ts b/src/browser/renderer/dom/DomRendererRowFactory.ts index cffc5624..bd922f57 100644 --- a/src/browser/renderer/dom/DomRendererRowFactory.ts +++ b/src/browser/renderer/dom/DomRendererRowFactory.ts @@ -8,7 +8,7 @@ import { INVERTED_DEFAULT_COLOR } from 'browser/renderer/atlas/Constants'; import { NULL_CELL_CODE, WHITESPACE_CELL_CHAR, Attributes } from 'common/buffer/Constants'; import { CellData } from 'common/buffer/CellData'; import { IOptionsService } from 'common/services/Services'; -import { ensureContrastRatio } from 'browser/Color'; +import { ensureContrastRatio, rgbaToColor } from 'browser/Color'; import { IColorSet, IColor } from 'browser/Types'; export const BOLD_CLASS = 'xterm-bold'; @@ -129,7 +129,14 @@ export class DomRendererRowFactory { } break; case Attributes.CM_RGB: - charElement.setAttribute('style', `${charElement.getAttribute('style') || ''}color:#${padStart(fg.toString(16), '0', 6)};`); + const color = rgbaToColor( + (fg >> 16) & 0xFF, + (fg >> 8) & 0xFF, + (fg ) & 0xFF + ); + if (!this._applyMinimumContrast(charElement, this._colors.background, color)) { + this._addStyle(charElement, `color:#${padStart(fg.toString(16), '0', 6)}`); + } break; case Attributes.CM_DEFAULT: default: @@ -147,7 +154,7 @@ export class DomRendererRowFactory { charElement.classList.add(`xterm-bg-${bg}`); break; case Attributes.CM_RGB: - charElement.setAttribute('style', `${charElement.getAttribute('style') || ''}background-color:#${padStart(bg.toString(16), '0', 6)};`); + this._addStyle(charElement, `background-color:#${padStart(bg.toString(16), '0', 6)}`); break; case Attributes.CM_DEFAULT: default: @@ -176,12 +183,16 @@ export class DomRendererRowFactory { } if (adjustedColor) { - element.setAttribute('style', `${element.getAttribute('style') || ''}color:${adjustedColor.css}`); + this._addStyle(element, `color:${adjustedColor.css}`); return true; } return false; } + + private _addStyle(element: HTMLElement, style: string): void { + element.setAttribute('style', `${element.getAttribute('style') || ''}${style};`); + } } function padStart(text: string, padChar: string, length: number): string { From c9babb9477324e49d5ce7a0a3f087b8f29755741 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Thu, 5 Dec 2019 12:34:36 -0800 Subject: [PATCH 2/3] v4.3.0 --- addons/xterm-addon-attach/package.json | 2 +- addons/xterm-addon-search/package.json | 2 +- addons/xterm-addon-webgl/package.json | 2 +- package.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/xterm-addon-attach/package.json b/addons/xterm-addon-attach/package.json index 5718f356..dd134308 100644 --- a/addons/xterm-addon-attach/package.json +++ b/addons/xterm-addon-attach/package.json @@ -1,6 +1,6 @@ { "name": "xterm-addon-attach", - "version": "0.3.0", + "version": "0.4.0", "author": { "name": "The xterm.js authors", "url": "https://xtermjs.org/" diff --git a/addons/xterm-addon-search/package.json b/addons/xterm-addon-search/package.json index c426ee3b..d66e8a68 100644 --- a/addons/xterm-addon-search/package.json +++ b/addons/xterm-addon-search/package.json @@ -1,6 +1,6 @@ { "name": "xterm-addon-search", - "version": "0.3.0", + "version": "0.4.0", "author": { "name": "The xterm.js authors", "url": "https://xtermjs.org/" diff --git a/addons/xterm-addon-webgl/package.json b/addons/xterm-addon-webgl/package.json index a6befe08..21e394d1 100644 --- a/addons/xterm-addon-webgl/package.json +++ b/addons/xterm-addon-webgl/package.json @@ -1,6 +1,6 @@ { "name": "xterm-addon-webgl", - "version": "0.3.0", + "version": "0.4.0", "author": { "name": "The xterm.js authors", "url": "https://xtermjs.org/" diff --git a/package.json b/package.json index c37594af..e04a1ff8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "xterm", "description": "Full xterm terminal, in your browser", - "version": "4.2.0", + "version": "4.3.0", "main": "lib/xterm.js", "style": "css/xterm.css", "types": "typings/xterm.d.ts", From c5e144f327e7990853f2623f05562d877e133058 Mon Sep 17 00:00:00 2001 From: Steven Degutis Date: Fri, 6 Dec 2019 15:57:26 -0600 Subject: [PATCH 3/3] Avoid roundtrip to browser when double-disposing. --- src/browser/Lifecycle.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/browser/Lifecycle.ts b/src/browser/Lifecycle.ts index 1344ea9b..a8172db5 100644 --- a/src/browser/Lifecycle.ts +++ b/src/browser/Lifecycle.ts @@ -17,12 +17,13 @@ export function addDisposableDomListener( useCapture?: boolean ): IDisposable { node.addEventListener(type, handler, useCapture); + let disposed = false; return { dispose: () => { - if (!handler) { - // Already disposed + if (!disposed) { return; } + disposed = true; node.removeEventListener(type, handler, useCapture); } };