From 29d3b8281b475a204a499b83ac2741c6cce1caf6 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sat, 18 May 2019 23:38:49 -0700 Subject: [PATCH] Copy over typed array utils to webgl --- src/common/TypedArrayUtils.test.ts | 105 +--------- src/common/TypedArrayUtils.ts | 26 --- src/renderer/webgl/ColorUtils.ts | 2 +- src/renderer/webgl/GlyphRenderer.ts | 4 +- src/renderer/webgl/RectangleRenderer.ts | 4 +- src/renderer/webgl/RenderModel.ts | 2 +- src/renderer/webgl/TypedArray.test.ts | 191 ++++++++++++++++++ src/renderer/webgl/TypedArray.ts | 67 ++++++ src/renderer/webgl/WebglRenderer.ts | 2 +- src/renderer/webgl/atlas/CharAtlasCache.ts | 2 +- .../webgl/atlas/CharAtlasGenerator.ts | 3 +- src/renderer/webgl/atlas/CharAtlasUtils.ts | 4 +- src/renderer/webgl/atlas/Types.ts | 3 +- src/renderer/webgl/atlas/WebglCharAtlas.ts | 2 +- typings/xterm.d.ts | 20 ++ 15 files changed, 292 insertions(+), 145 deletions(-) create mode 100644 src/renderer/webgl/TypedArray.test.ts create mode 100644 src/renderer/webgl/TypedArray.ts diff --git a/src/common/TypedArrayUtils.test.ts b/src/common/TypedArrayUtils.test.ts index 8e838d2c..99b0fd82 100644 --- a/src/common/TypedArrayUtils.test.ts +++ b/src/common/TypedArrayUtils.test.ts @@ -3,7 +3,7 @@ * @license MIT */ import { assert } from 'chai'; -import { fillFallback, sliceFallback, concat } from './TypedArrayUtils'; +import { fillFallback, concat } from './TypedArrayUtils'; type TypedArray = Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Int8Array | Int16Array | Int32Array @@ -85,109 +85,6 @@ describe('polyfill conformance tests', function(): void { } }); }); - - describe('TypedArray.slice', () => { - describe('should work with all typed array types', () => { - it('Uint8Array', () => { - const a = new Uint8Array(5); - deepEquals(sliceFallback(a, 2), a.slice(2)); - deepEquals(sliceFallback(a, 65535), a.slice(65535)); - deepEquals(sliceFallback(a, -1), a.slice(-1)); - }); - it('Uint16Array', () => { - const u161 = new Uint16Array(5); - const u162 = new Uint16Array(5); - deepEquals(sliceFallback(u161, 2), u162.slice(2)); - deepEquals(sliceFallback(u161, 65535), u162.slice(65535)); - deepEquals(sliceFallback(u161, -1), u162.slice(-1)); - }); - it('Uint32Array', () => { - const u321 = new Uint32Array(5); - const u322 = new Uint32Array(5); - deepEquals(sliceFallback(u321, 2), u322.slice(2)); - deepEquals(sliceFallback(u321, 65537), u322.slice(65537)); - deepEquals(sliceFallback(u321, -1), u322.slice(-1)); - }); - it('Int8Array', () => { - const i81 = new Int8Array(5); - const i82 = new Int8Array(5); - deepEquals(sliceFallback(i81, 2), i82.slice(2)); - deepEquals(sliceFallback(i81, 65537), i82.slice(65537)); - deepEquals(sliceFallback(i81, -1), i82.slice(-1)); - }); - it('Int16Array', () => { - const i161 = new Int16Array(5); - const i162 = new Int16Array(5); - deepEquals(sliceFallback(i161, 2), i162.slice(2)); - deepEquals(sliceFallback(i161, 65535), i162.slice(65535)); - deepEquals(sliceFallback(i161, -1), i162.slice(-1)); - }); - it('Int32Array', () => { - const i321 = new Int32Array(5); - const i322 = new Int32Array(5); - deepEquals(sliceFallback(i321, 2), i322.slice(2)); - deepEquals(sliceFallback(i321, 65537), i322.slice(65537)); - deepEquals(sliceFallback(i321, -1), i322.slice(-1)); - }); - it('Float32Array', () => { - const f321 = new Float32Array(5); - const f322 = new Float32Array(5); - deepEquals(sliceFallback(f321, 2), f322.slice(2)); - deepEquals(sliceFallback(f321, 65537), f322.slice(65537)); - deepEquals(sliceFallback(f321, -1), f322.slice(-1)); - }); - it('Float64Array', () => { - const f641 = new Float64Array(5); - const f642 = new Float64Array(5); - deepEquals(sliceFallback(f641, 2), f642.slice(2)); - deepEquals(sliceFallback(f641, 65537), f642.slice(65537)); - deepEquals(sliceFallback(f641, -1), f642.slice(-1)); - }); - it('Uint8ClampedArray', () => { - const u8Clamped1 = new Uint8ClampedArray(5); - const u8Clamped2 = new Uint8ClampedArray(5); - deepEquals(sliceFallback(u8Clamped1, 2), u8Clamped2.slice(2)); - deepEquals(sliceFallback(u8Clamped1, 65537), u8Clamped2.slice(65537)); - deepEquals(sliceFallback(u8Clamped1, -1), u8Clamped2.slice(-1)); - }); - }); - it('start', () => { - const arr = new Uint32Array([1, 2, 3, 4, 5]); - deepEquals(sliceFallback(arr, -1), arr.slice(-1)); - deepEquals(sliceFallback(arr, 0), arr.slice(0)); - deepEquals(sliceFallback(arr, 1), arr.slice(1)); - deepEquals(sliceFallback(arr, 2), arr.slice(2)); - deepEquals(sliceFallback(arr, 3), arr.slice(3)); - deepEquals(sliceFallback(arr, 4), arr.slice(4)); - deepEquals(sliceFallback(arr, 5), arr.slice(5)); - }); - it('end', () => { - const arr = new Uint32Array([1, 2, 3, 4, 5]); - deepEquals(sliceFallback(arr, -1, -2), arr.slice(-1, -2)); - deepEquals(sliceFallback(arr, 0, -2), arr.slice(0, -2)); - deepEquals(sliceFallback(arr, 1, -2), arr.slice(1, -2)); - deepEquals(sliceFallback(arr, 2, -2), arr.slice(2, -2)); - deepEquals(sliceFallback(arr, 3, -2), arr.slice(3, -2)); - deepEquals(sliceFallback(arr, 4, -2), arr.slice(4, -2)); - deepEquals(sliceFallback(arr, 5, -2), arr.slice(5, -2)); - - deepEquals(sliceFallback(arr, -1, 3), arr.slice(-1, 3)); - deepEquals(sliceFallback(arr, 0, 3), arr.slice(0, 3)); - deepEquals(sliceFallback(arr, 1, 3), arr.slice(1, 3)); - deepEquals(sliceFallback(arr, 2, 3), arr.slice(2, 3)); - deepEquals(sliceFallback(arr, 3, 3), arr.slice(3, 3)); - deepEquals(sliceFallback(arr, 4, 3), arr.slice(4, 3)); - deepEquals(sliceFallback(arr, 5, 3), arr.slice(5, 3)); - - deepEquals(sliceFallback(arr, -1, 8), arr.slice(-1, 8)); - deepEquals(sliceFallback(arr, 0, 8), arr.slice(0, 8)); - deepEquals(sliceFallback(arr, 1, 8), arr.slice(1, 8)); - deepEquals(sliceFallback(arr, 2, 8), arr.slice(2, 8)); - deepEquals(sliceFallback(arr, 3, 8), arr.slice(3, 8)); - deepEquals(sliceFallback(arr, 4, 8), arr.slice(4, 8)); - deepEquals(sliceFallback(arr, 5, 8), arr.slice(5, 8)); - }); - }); }); describe('typed array convenience functions', () => { diff --git a/src/common/TypedArrayUtils.ts b/src/common/TypedArrayUtils.ts index f2651aa0..54699835 100644 --- a/src/common/TypedArrayUtils.ts +++ b/src/common/TypedArrayUtils.ts @@ -40,32 +40,6 @@ export function fillFallback(array: T, value: number, star return array; } -export function slice(array: T, start?: number, end?: number): T { - // all modern engines that support .slice - if (array.slice) { - return array.slice(start, end) as T; - } - return sliceFallback(array, start, end); -} - -export function sliceFallback(array: T, start: number = 0, end: number = array.length): T { - if (start < 0) { - start = (array.length + start) % array.length; - } - if (end >= array.length) { - end = array.length; - } else { - end = (array.length + end) % array.length; - } - start = Math.min(start, end); - - const result: T = new (array.constructor as any)(end - start); - for (let i = 0; i < end - start; ++i) { - result[i] = array[i + start]; - } - return result; -} - /** * Concat two typed arrays `a` and `b`. * Returns a new typed array. diff --git a/src/renderer/webgl/ColorUtils.ts b/src/renderer/webgl/ColorUtils.ts index 9efdeb9c..56127656 100644 --- a/src/renderer/webgl/ColorUtils.ts +++ b/src/renderer/webgl/ColorUtils.ts @@ -3,7 +3,7 @@ * Copyright (c) 2018 The xterm.js authors. All rights reserved. */ -import { IColor } from '../../ui/Types'; +import { IColor } from 'xterm'; export function getLuminance(color: IColor): number { // Coefficients taken from: https://www.w3.org/TR/AERT/#color-contrast diff --git a/src/renderer/webgl/GlyphRenderer.ts b/src/renderer/webgl/GlyphRenderer.ts index 95b1e325..9d61b065 100644 --- a/src/renderer/webgl/GlyphRenderer.ts +++ b/src/renderer/webgl/GlyphRenderer.ts @@ -10,11 +10,11 @@ import WebglCharAtlas from './atlas/WebglCharAtlas'; import { IWebGL2RenderingContext, IWebGLVertexArrayObject, IRenderModel, IRasterizedGlyph } from './Types'; import { INDICIES_PER_CELL } from './WebglRenderer'; import { COMBINED_CHAR_BIT_MASK } from './RenderModel'; -import { fill, slice } from '../../common/TypedArrayUtils'; +import { fill, slice } from './TypedArray'; import { NULL_CELL_CODE, WHITESPACE_CELL_CODE, CHAR_DATA_CHAR_INDEX } from '../../core/buffer/BufferLine'; import { IBufferLine } from '../../core/Types'; -import { IColorSet } from '../../ui/Types'; import { getLuminance } from './ColorUtils'; +import { IColorSet } from 'xterm'; interface IVertices { attributes: Float32Array; diff --git a/src/renderer/webgl/RectangleRenderer.ts b/src/renderer/webgl/RectangleRenderer.ts index 62731bc5..a133abd4 100644 --- a/src/renderer/webgl/RectangleRenderer.ts +++ b/src/renderer/webgl/RectangleRenderer.ts @@ -7,11 +7,11 @@ import { ITerminal } from '../../Types'; import { IRenderDimensions } from '../Types'; import { createProgram, expandFloat32Array, PROJECTION_MATRIX } from './WebglUtils'; import { IRenderModel, IWebGLVertexArrayObject, IWebGL2RenderingContext, ISelectionRenderModel } from './Types'; -import { fill } from '../../common/TypedArrayUtils'; +import { fill } from './TypedArray'; import { INVERTED_DEFAULT_COLOR } from './atlas/Types'; import { is256Color } from './atlas/CharAtlasUtils'; import { DEFAULT_COLOR } from '../../common/Types'; -import { IColorSet, IColor } from '../../ui/Types'; +import { IColorSet, IColor } from 'xterm'; const enum VertexAttribLocations { POSITION = 0, diff --git a/src/renderer/webgl/RenderModel.ts b/src/renderer/webgl/RenderModel.ts index 54fc91ca..71d256d3 100644 --- a/src/renderer/webgl/RenderModel.ts +++ b/src/renderer/webgl/RenderModel.ts @@ -4,7 +4,7 @@ */ import { IRenderModel, ISelectionRenderModel } from './Types'; -import { fill } from '../../common/TypedArrayUtils'; +import { fill } from './TypedArray'; export const RENDER_MODEL_INDICIES_PER_CELL = 4; diff --git a/src/renderer/webgl/TypedArray.test.ts b/src/renderer/webgl/TypedArray.test.ts new file mode 100644 index 00000000..25676248 --- /dev/null +++ b/src/renderer/webgl/TypedArray.test.ts @@ -0,0 +1,191 @@ +/** + * Copyright (c) 2018 The xterm.js authors. All rights reserved. + * @license MIT + */ +import { assert } from 'chai'; +import { fillFallback, sliceFallback } from './TypedArray'; + +type TypedArray = Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray + | Int8Array | Int16Array | Int32Array + | Float32Array | Float64Array; + +function deepEquals(a: TypedArray, b: TypedArray): void { + assert.equal(a.length, b.length); + for (let i = 0; i < a.length; ++i) { + assert.equal(a[i], b[i]); + } +} + +describe('polyfill conformance tests', function(): void { + describe('TypedArray.fill', function(): void { + it('should work with all typed array types', function(): void { + const u81 = new Uint8Array(5); + const u82 = new Uint8Array(5); + deepEquals(fillFallback(u81, 2), u82.fill(2)); + deepEquals(fillFallback(u81, -1), u82.fill(-1)); + const u161 = new Uint16Array(5); + const u162 = new Uint16Array(5); + deepEquals(fillFallback(u161, 2), u162.fill(2)); + deepEquals(fillFallback(u161, 65535), u162.fill(65535)); + deepEquals(fillFallback(u161, -1), u162.fill(-1)); + const u321 = new Uint32Array(5); + const u322 = new Uint32Array(5); + deepEquals(fillFallback(u321, 2), u322.fill(2)); + deepEquals(fillFallback(u321, 65537), u322.fill(65537)); + deepEquals(fillFallback(u321, -1), u322.fill(-1)); + const i81 = new Int8Array(5); + const i82 = new Int8Array(5); + deepEquals(fillFallback(i81, 2), i82.fill(2)); + deepEquals(fillFallback(i81, -1), i82.fill(-1)); + const i161 = new Int16Array(5); + const i162 = new Int16Array(5); + deepEquals(fillFallback(i161, 2), i162.fill(2)); + deepEquals(fillFallback(i161, 65535), i162.fill(65535)); + deepEquals(fillFallback(i161, -1), i162.fill(-1)); + const i321 = new Int32Array(5); + const i322 = new Int32Array(5); + deepEquals(fillFallback(i321, 2), i322.fill(2)); + deepEquals(fillFallback(i321, 65537), i322.fill(65537)); + deepEquals(fillFallback(i321, -1), i322.fill(-1)); + const f321 = new Float32Array(5); + const f322 = new Float32Array(5); + deepEquals(fillFallback(f321, 1.2345), f322.fill(1.2345)); + const f641 = new Float64Array(5); + const f642 = new Float64Array(5); + deepEquals(fillFallback(f641, 1.2345), f642.fill(1.2345)); + const u8Clamped1 = new Uint8ClampedArray(5); + const u8Clamped2 = new Uint8ClampedArray(5); + deepEquals(fillFallback(u8Clamped1, 2), u8Clamped2.fill(2)); + deepEquals(fillFallback(u8Clamped1, 257), u8Clamped2.fill(257)); + }); + it('start offset', function(): void { + for (let i = -2; i < 10; ++i) { + const u81 = new Uint8Array(5); + const u83 = new Uint8Array(5); + deepEquals(fillFallback(u81, 2, i), u83.fill(2, i)); + deepEquals(fillFallback(u81, -1, i), u83.fill(-1, i)); + } + }); + it('end offset', function(): void { + for (let i = -2; i < 10; ++i) { + const u81 = new Uint8Array(5); + const u83 = new Uint8Array(5); + deepEquals(fillFallback(u81, 2, 0, i), u83.fill(2, 0, i)); + deepEquals(fillFallback(u81, -1, 0, i), u83.fill(-1, 0, i)); + } + }); + it('start/end offset', function(): void { + for (let i = -2; i < 10; ++i) { + for (let j = -2; j < 10; ++j) { + const u81 = new Uint8Array(5); + const u83 = new Uint8Array(5); + deepEquals(fillFallback(u81, 2, i, j), u83.fill(2, i, j)); + deepEquals(fillFallback(u81, -1, i, j), u83.fill(-1, i, j)); + } + } + }); + }); + + describe('TypedArray.slice', () => { + describe('should work with all typed array types', () => { + it('Uint8Array', () => { + const a = new Uint8Array(5); + deepEquals(sliceFallback(a, 2), a.slice(2)); + deepEquals(sliceFallback(a, 65535), a.slice(65535)); + deepEquals(sliceFallback(a, -1), a.slice(-1)); + }); + it('Uint16Array', () => { + const u161 = new Uint16Array(5); + const u162 = new Uint16Array(5); + deepEquals(sliceFallback(u161, 2), u162.slice(2)); + deepEquals(sliceFallback(u161, 65535), u162.slice(65535)); + deepEquals(sliceFallback(u161, -1), u162.slice(-1)); + }); + it('Uint32Array', () => { + const u321 = new Uint32Array(5); + const u322 = new Uint32Array(5); + deepEquals(sliceFallback(u321, 2), u322.slice(2)); + deepEquals(sliceFallback(u321, 65537), u322.slice(65537)); + deepEquals(sliceFallback(u321, -1), u322.slice(-1)); + }); + it('Int8Array', () => { + const i81 = new Int8Array(5); + const i82 = new Int8Array(5); + deepEquals(sliceFallback(i81, 2), i82.slice(2)); + deepEquals(sliceFallback(i81, 65537), i82.slice(65537)); + deepEquals(sliceFallback(i81, -1), i82.slice(-1)); + }); + it('Int16Array', () => { + const i161 = new Int16Array(5); + const i162 = new Int16Array(5); + deepEquals(sliceFallback(i161, 2), i162.slice(2)); + deepEquals(sliceFallback(i161, 65535), i162.slice(65535)); + deepEquals(sliceFallback(i161, -1), i162.slice(-1)); + }); + it('Int32Array', () => { + const i321 = new Int32Array(5); + const i322 = new Int32Array(5); + deepEquals(sliceFallback(i321, 2), i322.slice(2)); + deepEquals(sliceFallback(i321, 65537), i322.slice(65537)); + deepEquals(sliceFallback(i321, -1), i322.slice(-1)); + }); + it('Float32Array', () => { + const f321 = new Float32Array(5); + const f322 = new Float32Array(5); + deepEquals(sliceFallback(f321, 2), f322.slice(2)); + deepEquals(sliceFallback(f321, 65537), f322.slice(65537)); + deepEquals(sliceFallback(f321, -1), f322.slice(-1)); + }); + it('Float64Array', () => { + const f641 = new Float64Array(5); + const f642 = new Float64Array(5); + deepEquals(sliceFallback(f641, 2), f642.slice(2)); + deepEquals(sliceFallback(f641, 65537), f642.slice(65537)); + deepEquals(sliceFallback(f641, -1), f642.slice(-1)); + }); + it('Uint8ClampedArray', () => { + const u8Clamped1 = new Uint8ClampedArray(5); + const u8Clamped2 = new Uint8ClampedArray(5); + deepEquals(sliceFallback(u8Clamped1, 2), u8Clamped2.slice(2)); + deepEquals(sliceFallback(u8Clamped1, 65537), u8Clamped2.slice(65537)); + deepEquals(sliceFallback(u8Clamped1, -1), u8Clamped2.slice(-1)); + }); + }); + it('start', () => { + const arr = new Uint32Array([1, 2, 3, 4, 5]); + deepEquals(sliceFallback(arr, -1), arr.slice(-1)); + deepEquals(sliceFallback(arr, 0), arr.slice(0)); + deepEquals(sliceFallback(arr, 1), arr.slice(1)); + deepEquals(sliceFallback(arr, 2), arr.slice(2)); + deepEquals(sliceFallback(arr, 3), arr.slice(3)); + deepEquals(sliceFallback(arr, 4), arr.slice(4)); + deepEquals(sliceFallback(arr, 5), arr.slice(5)); + }); + it('end', () => { + const arr = new Uint32Array([1, 2, 3, 4, 5]); + deepEquals(sliceFallback(arr, -1, -2), arr.slice(-1, -2)); + deepEquals(sliceFallback(arr, 0, -2), arr.slice(0, -2)); + deepEquals(sliceFallback(arr, 1, -2), arr.slice(1, -2)); + deepEquals(sliceFallback(arr, 2, -2), arr.slice(2, -2)); + deepEquals(sliceFallback(arr, 3, -2), arr.slice(3, -2)); + deepEquals(sliceFallback(arr, 4, -2), arr.slice(4, -2)); + deepEquals(sliceFallback(arr, 5, -2), arr.slice(5, -2)); + + deepEquals(sliceFallback(arr, -1, 3), arr.slice(-1, 3)); + deepEquals(sliceFallback(arr, 0, 3), arr.slice(0, 3)); + deepEquals(sliceFallback(arr, 1, 3), arr.slice(1, 3)); + deepEquals(sliceFallback(arr, 2, 3), arr.slice(2, 3)); + deepEquals(sliceFallback(arr, 3, 3), arr.slice(3, 3)); + deepEquals(sliceFallback(arr, 4, 3), arr.slice(4, 3)); + deepEquals(sliceFallback(arr, 5, 3), arr.slice(5, 3)); + + deepEquals(sliceFallback(arr, -1, 8), arr.slice(-1, 8)); + deepEquals(sliceFallback(arr, 0, 8), arr.slice(0, 8)); + deepEquals(sliceFallback(arr, 1, 8), arr.slice(1, 8)); + deepEquals(sliceFallback(arr, 2, 8), arr.slice(2, 8)); + deepEquals(sliceFallback(arr, 3, 8), arr.slice(3, 8)); + deepEquals(sliceFallback(arr, 4, 8), arr.slice(4, 8)); + deepEquals(sliceFallback(arr, 5, 8), arr.slice(5, 8)); + }); + }); +}); diff --git a/src/renderer/webgl/TypedArray.ts b/src/renderer/webgl/TypedArray.ts new file mode 100644 index 00000000..33d59ea1 --- /dev/null +++ b/src/renderer/webgl/TypedArray.ts @@ -0,0 +1,67 @@ +/** + * Copyright (c) 2018 The xterm.js authors. All rights reserved. + * @license MIT + */ + +export type TypedArray = Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray + | Int8Array | Int16Array | Int32Array + | Float32Array | Float64Array; + + +/** + * polyfill for TypedArray.fill + * This is needed to support .fill in all safari versions and IE 11. + */ +export function fill(array: T, value: number, start?: number, end?: number): T { + // all modern engines that support .fill + if (array.fill) { + return array.fill(value, start, end) as T; + } + return fillFallback(array, value, start, end); +} + +export function fillFallback(array: T, value: number, start: number = 0, end: number = array.length): T { + // safari and IE 11 + // since IE 11 does not support Array.prototype.fill either + // we cannot use the suggested polyfill from MDN + // instead we simply fall back to looping + if (start >= array.length) { + return array; + } + start = (array.length + start) % array.length; + if (end >= array.length) { + end = array.length; + } else { + end = (array.length + end) % array.length; + } + for (let i = start; i < end; ++i) { + array[i] = value; + } + return array; +} + +export function slice(array: T, start?: number, end?: number): T { + // all modern engines that support .slice + if (array.slice) { + return array.slice(start, end) as T; + } + return sliceFallback(array, start, end); +} + +export function sliceFallback(array: T, start: number = 0, end: number = array.length): T { + if (start < 0) { + start = (array.length + start) % array.length; + } + if (end >= array.length) { + end = array.length; + } else { + end = (array.length + end) % array.length; + } + start = Math.min(start, end); + + const result: T = new (array.constructor as any)(end - start); + for (let i = 0; i < end - start; ++i) { + result[i] = array[i + start]; + } + return result; +} diff --git a/src/renderer/webgl/WebglRenderer.ts b/src/renderer/webgl/WebglRenderer.ts index d93080d7..27404a8a 100644 --- a/src/renderer/webgl/WebglRenderer.ts +++ b/src/renderer/webgl/WebglRenderer.ts @@ -17,7 +17,7 @@ import { RenderModel, COMBINED_CHAR_BIT_MASK } from './RenderModel'; import { Disposable } from '../../common/Lifecycle'; import { CHAR_DATA_CHAR_INDEX, CHAR_DATA_CODE_INDEX, CHAR_DATA_ATTR_INDEX, NULL_CELL_CODE } from '../../core/buffer/BufferLine'; import { DEFAULT_COLOR } from '../../common/Types'; -import { IColorSet } from '../../ui/Types'; +import { IColorSet } from 'xterm'; import { getLuminance } from './ColorUtils'; export const INDICIES_PER_CELL = 4; diff --git a/src/renderer/webgl/atlas/CharAtlasCache.ts b/src/renderer/webgl/atlas/CharAtlasCache.ts index 9d16893b..05bdadc2 100644 --- a/src/renderer/webgl/atlas/CharAtlasCache.ts +++ b/src/renderer/webgl/atlas/CharAtlasCache.ts @@ -8,7 +8,7 @@ import { generateConfig, configEquals } from './CharAtlasUtils'; import BaseCharAtlas from './BaseCharAtlas'; import WebglCharAtlas from './WebglCharAtlas'; import { ICharAtlasConfig } from './Types'; -import { IColorSet } from '../../../ui/Types'; +import { IColorSet } from 'xterm'; interface ICharAtlasCacheEntry { atlas: BaseCharAtlas; diff --git a/src/renderer/webgl/atlas/CharAtlasGenerator.ts b/src/renderer/webgl/atlas/CharAtlasGenerator.ts index e844f37a..0d343a43 100644 --- a/src/renderer/webgl/atlas/CharAtlasGenerator.ts +++ b/src/renderer/webgl/atlas/CharAtlasGenerator.ts @@ -3,10 +3,9 @@ * @license MIT */ -import { FontWeight } from 'xterm'; +import { FontWeight, IColor } from 'xterm'; import { isFirefox, isSafari } from '../../../common/Platform'; import { ICharAtlasConfig, CHAR_ATLAS_CELL_SPACING } from './Types'; -import { IColor } from '../../../ui/Types'; /** * Generates a char atlas. diff --git a/src/renderer/webgl/atlas/CharAtlasUtils.ts b/src/renderer/webgl/atlas/CharAtlasUtils.ts index b11ca085..855e32c8 100644 --- a/src/renderer/webgl/atlas/CharAtlasUtils.ts +++ b/src/renderer/webgl/atlas/CharAtlasUtils.ts @@ -6,11 +6,11 @@ import { ITerminal } from '../../../Types'; import { ICharAtlasConfig } from './Types'; import { DEFAULT_COLOR } from '../../../common/Types'; -import { IColorSet } from '../../../ui/Types'; +import { IColorSet } from 'xterm'; export function generateConfig(scaledCharWidth: number, scaledCharHeight: number, terminal: ITerminal, colors: IColorSet): ICharAtlasConfig { // null out some fields that don't matter - const clonedColors = { + const clonedColors: IColorSet = { foreground: colors.foreground, background: colors.background, cursor: null, diff --git a/src/renderer/webgl/atlas/Types.ts b/src/renderer/webgl/atlas/Types.ts index 1bdaf3b9..ee6dc665 100644 --- a/src/renderer/webgl/atlas/Types.ts +++ b/src/renderer/webgl/atlas/Types.ts @@ -3,8 +3,7 @@ * @license MIT */ -import { FontWeight } from 'xterm'; -import { IColorSet } from '../../../ui/Types'; +import { FontWeight, IColorSet } from 'xterm'; export const INVERTED_DEFAULT_COLOR = 257; export const DIM_OPACITY = 0.5; diff --git a/src/renderer/webgl/atlas/WebglCharAtlas.ts b/src/renderer/webgl/atlas/WebglCharAtlas.ts index 5da955bc..a9cd8e7d 100644 --- a/src/renderer/webgl/atlas/WebglCharAtlas.ts +++ b/src/renderer/webgl/atlas/WebglCharAtlas.ts @@ -11,8 +11,8 @@ import { is256Color } from './CharAtlasUtils'; import { clearColor } from './CharAtlasGenerator'; import { DEFAULT_ATTR } from '../../../core/buffer/BufferLine'; import { DEFAULT_COLOR } from '../../../common/Types'; -import { IColor } from '../../../ui/Types'; import { DEFAULT_ANSI_COLORS } from '../../../ui/ColorManager'; +import { IColor } from 'xterm'; // In practice we're probably never going to exhaust a texture this large. For debugging purposes, // however, it can be useful to set this to a really tiny value, to verify that LRU eviction works. diff --git a/typings/xterm.d.ts b/typings/xterm.d.ts index de4051ed..7d79d959 100644 --- a/typings/xterm.d.ts +++ b/typings/xterm.d.ts @@ -897,6 +897,26 @@ declare module 'xterm' { setRenderer(renderer: any): void; } + /** + * (EXPERIMENTAL) + */ + export interface IColor { + css: string; + rgba: number; + } + + /** + * (EXPERIMENTAL) + */ + export interface IColorSet { + foreground: IColor; + background: IColor; + cursor: IColor; + cursorAccent: IColor; + selection: IColor; + ansi: IColor[]; + } + /** * An addon that can provide additional functionality to the terminal. */