From 440ab765c458497fcb43d55b71c44afc5fe96803 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 27 Jul 2022 09:22:05 -0700 Subject: [PATCH] Remove rendererType setting --- .../xterm-addon-attach/test/AttachAddon.api.ts | 4 ++-- .../test/SerializeAddon.api.ts | 2 +- .../test/WebLinksAddon.api.ts | 2 +- .../xterm-addon-webgl/test/WebglRenderer.api.ts | 8 ++++---- demo/client.ts | 1 - src/browser/Terminal.ts | 12 +----------- src/common/services/OptionsService.ts | 2 -- src/common/services/Services.ts | 3 --- test/api/Terminal.api.ts | 17 ++++++++--------- test/api/TestUtils.ts | 6 +----- typings/xterm.d.ts | 15 --------------- 11 files changed, 18 insertions(+), 54 deletions(-) diff --git a/addons/xterm-addon-attach/test/AttachAddon.api.ts b/addons/xterm-addon-attach/test/AttachAddon.api.ts index 8335cf0f..a4827656 100644 --- a/addons/xterm-addon-attach/test/AttachAddon.api.ts +++ b/addons/xterm-addon-attach/test/AttachAddon.api.ts @@ -28,7 +28,7 @@ describe('AttachAddon', () => { beforeEach(async () => await page.goto(APP)); it('string', async function(): Promise { - await openTerminal(page, { rendererType: 'dom' }); + await openTerminal(page); const port = 8080; const server = new WebSocket.Server({ port }); server.on('connection', socket => socket.send('foo')); @@ -38,7 +38,7 @@ describe('AttachAddon', () => { }); it('utf8', async function(): Promise { - await openTerminal(page, { rendererType: 'dom' }); + await openTerminal(page); const port = 8080; const server = new WebSocket.Server({ port }); const data = new Uint8Array([102, 111, 111]); diff --git a/addons/xterm-addon-serialize/test/SerializeAddon.api.ts b/addons/xterm-addon-serialize/test/SerializeAddon.api.ts index b86b066b..157b7072 100644 --- a/addons/xterm-addon-serialize/test/SerializeAddon.api.ts +++ b/addons/xterm-addon-serialize/test/SerializeAddon.api.ts @@ -42,7 +42,7 @@ describe('SerializeAddon', () => { page = await (await browser.newContext()).newPage(); await page.setViewportSize({ width, height }); await page.goto(APP); - await openTerminal(page, { rows: 10, cols: 10, rendererType: 'dom' }); + await openTerminal(page, { rows: 10, cols: 10 }); await page.evaluate(` window.serializeAddon = new SerializeAddon(); window.term.loadAddon(window.serializeAddon); diff --git a/addons/xterm-addon-web-links/test/WebLinksAddon.api.ts b/addons/xterm-addon-web-links/test/WebLinksAddon.api.ts index fe44dc31..bc978085 100644 --- a/addons/xterm-addon-web-links/test/WebLinksAddon.api.ts +++ b/addons/xterm-addon-web-links/test/WebLinksAddon.api.ts @@ -38,7 +38,7 @@ describe('WebLinksAddon', () => { }); async function testHostName(hostname: string): Promise { - await openTerminal(page, { rendererType: 'dom', cols: 40 }); + await openTerminal(page, { cols: 40 }); await page.evaluate(`window.term.loadAddon(new window.WebLinksAddon())`); const data = ` http://${hostname} \\r\\n` + ` http://${hostname}/a~b#c~d?e~f \\r\\n` + diff --git a/addons/xterm-addon-webgl/test/WebglRenderer.api.ts b/addons/xterm-addon-webgl/test/WebglRenderer.api.ts index 13a15cf3..797f0531 100644 --- a/addons/xterm-addon-webgl/test/WebglRenderer.api.ts +++ b/addons/xterm-addon-webgl/test/WebglRenderer.api.ts @@ -860,7 +860,7 @@ describe('WebGL Renderer Integration Tests', async () => { describe('allowTransparency', async () => { if (areTestsEnabled) { - before(async () => setupBrowser({ rendererType: 'dom', allowTransparency: true })); + before(async () => setupBrowser({ allowTransparency: true })); after(async () => browser.close()); beforeEach(async () => page.evaluate(`window.term.reset()`)); } @@ -879,7 +879,7 @@ describe('WebGL Renderer Integration Tests', async () => { describe('selectionForeground', () => { if (areTestsEnabled) { - before(async () => setupBrowser({ rendererType: 'dom' })); + before(async () => setupBrowser()); after(async () => browser.close()); beforeEach(async () => page.evaluate(`window.term.reset()`)); } @@ -898,7 +898,7 @@ describe('WebGL Renderer Integration Tests', async () => { describe('decoration color overrides', async () => { if (areTestsEnabled) { - before(async () => setupBrowser({ rendererType: 'dom' })); + before(async () => setupBrowser()); after(async () => browser.close()); beforeEach(async () => page.evaluate(`window.term.reset()`)); } @@ -1014,7 +1014,7 @@ async function getCellPixels(col: number, row: number): Promise { return await page.evaluate(`Array.from(window.result)`); } -async function setupBrowser(options: ITerminalOptions = { rendererType: 'dom' }): Promise { +async function setupBrowser(options: ITerminalOptions = {}): Promise { browser = await launchBrowser(); page = await (await browser.newContext()).newPage(); await page.setViewportSize({ width, height }); diff --git a/demo/client.ts b/demo/client.ts index b2468ec3..d3b5af9c 100644 --- a/demo/client.ts +++ b/demo/client.ts @@ -331,7 +331,6 @@ function initOptions(term: TerminalType): void { fontWeight: ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'], fontWeightBold: ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'], logLevel: ['debug', 'info', 'warn', 'error', 'off'], - rendererType: ['dom', 'canvas'], theme: ['default', 'xtermjs', 'sapphire', 'light'], wordSeparator: null }; diff --git a/src/browser/Terminal.ts b/src/browser/Terminal.ts index 053071d0..91c4a920 100644 --- a/src/browser/Terminal.ts +++ b/src/browser/Terminal.ts @@ -296,12 +296,6 @@ export class Terminal extends CoreTerminal implements ITerminal { this.refresh(0, this.rows - 1); } break; - case 'rendererType': - if (this._renderService) { - this._renderService.setRenderer(this._createRenderer()); - this._renderService.onResize(this.cols, this.rows); - } - break; case 'scrollback': this.viewport?.syncScrollArea(); break; @@ -615,11 +609,7 @@ export class Terminal extends CoreTerminal implements ITerminal { } private _createRenderer(): IRenderer { - switch (this.options.rendererType) { - case 'canvas': return this._instantiationService.createInstance(Renderer, this._colorManager!.colors, this.screenElement!, this.linkifier2); - case 'dom': return this._instantiationService.createInstance(DomRenderer, this._colorManager!.colors, this.element!, this.screenElement!, this._viewportElement!, this.linkifier2); - default: throw new Error(`Unrecognized rendererType "${this.options.rendererType}"`); - } + return this._instantiationService.createInstance(Renderer, this._colorManager!.colors, this.screenElement!, this.linkifier2); } /** diff --git a/src/common/services/OptionsService.ts b/src/common/services/OptionsService.ts index 911cc9b2..550adb31 100644 --- a/src/common/services/OptionsService.ts +++ b/src/common/services/OptionsService.ts @@ -37,7 +37,6 @@ export const DEFAULT_OPTIONS: Readonly = { tabStopWidth: 8, theme: {}, rightClickSelectsWord: isMac, - rendererType: 'canvas', windowOptions: {}, windowsMode: false, wordSeparator: ' ()[]{}\',"`', @@ -120,7 +119,6 @@ export class OptionsService implements IOptionsService { } break; case 'cursorStyle': - case 'rendererType': case 'wordSeparator': if (!value) { value = DEFAULT_OPTIONS[key]; diff --git a/src/common/services/Services.ts b/src/common/services/Services.ts index 22bff06d..709e171f 100644 --- a/src/common/services/Services.ts +++ b/src/common/services/Services.ts @@ -203,8 +203,6 @@ export interface IOptionsService { export type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number; export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'off'; -export type RendererType = 'dom' | 'canvas'; - export interface ITerminalOptions { allowProposedApi: boolean; allowTransparency: boolean; @@ -229,7 +227,6 @@ export interface ITerminalOptions { macOptionIsMeta: boolean; macOptionClickForcesSelection: boolean; minimumContrastRatio: number; - rendererType: RendererType; rightClickSelectsWord: boolean; rows: number; screenReaderMode: boolean; diff --git a/test/api/Terminal.api.ts b/test/api/Terminal.api.ts index 80e46be0..fa19b5b4 100644 --- a/test/api/Terminal.api.ts +++ b/test/api/Terminal.api.ts @@ -157,7 +157,6 @@ describe('API Integration Tests', function(): void { describe('options', () => { it('getter', async () => { await openTerminal(page); - assert.equal(await page.evaluate(`window.term.options.rendererType`), 'canvas'); assert.equal(await page.evaluate(`window.term.options.cols`), 80); assert.equal(await page.evaluate(`window.term.options.rows`), 24); }); @@ -190,7 +189,7 @@ describe('API Integration Tests', function(): void { describe('renderer', () => { it('foreground', async () => { - await openTerminal(page, { rendererType: 'dom' }); + await openTerminal(page); await writeSync(page, '\\x1b[30m0\\x1b[31m1\\x1b[32m2\\x1b[33m3\\x1b[34m4\\x1b[35m5\\x1b[36m6\\x1b[37m7'); await pollFor(page, `document.querySelectorAll('.xterm-rows > :nth-child(1) > *').length`, 9); assert.deepEqual(await page.evaluate(` @@ -215,7 +214,7 @@ describe('API Integration Tests', function(): void { }); it('background', async () => { - await openTerminal(page, { rendererType: 'dom' }); + await openTerminal(page); await writeSync(page, '\\x1b[40m0\\x1b[41m1\\x1b[42m2\\x1b[43m3\\x1b[44m4\\x1b[45m5\\x1b[46m6\\x1b[47m7'); await pollFor(page, `document.querySelectorAll('.xterm-rows > :nth-child(1) > *').length`, 9); assert.deepEqual(await page.evaluate(` @@ -784,7 +783,7 @@ describe('API Integration Tests', function(): void { describe('registerLinkProvider', () => { it('should fire provideLinks when hovering cells', async () => { - await openTerminal(page, { rendererType: 'dom' }); + await openTerminal(page); // Focus the terminal as the cursor will show and trigger a rerender, which can clear the // active link await page.evaluate('window.term.focus()'); @@ -806,7 +805,7 @@ describe('API Integration Tests', function(): void { }); it('should fire hover and leave events on the link', async () => { - await openTerminal(page, { rendererType: 'dom' }); + await openTerminal(page); // Focus the terminal as the cursor will show and trigger a rerender, which can clear the // active link await page.evaluate('window.term.focus()'); @@ -844,7 +843,7 @@ describe('API Integration Tests', function(): void { }); it('should work fine when hover and leave callbacks are not provided', async () => { - await openTerminal(page, { rendererType: 'dom' }); + await openTerminal(page); // Focus the terminal as the cursor will show and trigger a rerender, which can clear the // active link await page.evaluate('window.term.focus()'); @@ -887,7 +886,7 @@ describe('API Integration Tests', function(): void { }); it('should fire activate events when clicking the link', async () => { - await openTerminal(page, { rendererType: 'dom' }); + await openTerminal(page); // Focus the terminal as the cursor will show and trigger a rerender, which can clear the // active link await page.evaluate('window.term.focus()'); @@ -929,7 +928,7 @@ describe('API Integration Tests', function(): void { }); it('should work when multiple links are provided on the same line', async () => { - await openTerminal(page, { rendererType: 'dom' }); + await openTerminal(page); // Focus the terminal as the cursor will show and trigger a rerender, which can clear the // active link await page.evaluate('window.term.focus()'); @@ -978,7 +977,7 @@ describe('API Integration Tests', function(): void { }); it('should dispose links when hovering away', async () => { - await openTerminal(page, { rendererType: 'dom' }); + await openTerminal(page); // Focus the terminal as the cursor will show and trigger a rerender, which can clear the // active link await page.evaluate('window.term.focus()'); diff --git a/test/api/TestUtils.ts b/test/api/TestUtils.ts index e059c92c..2b4e96a4 100644 --- a/test/api/TestUtils.ts +++ b/test/api/TestUtils.ts @@ -46,11 +46,7 @@ export async function timeout(ms: number): Promise { export async function openTerminal(page: playwright.Page, options: ITerminalOptions = {}): Promise { await page.evaluate(`window.term = new Terminal(${JSON.stringify({ allowProposedApi: true, ...options })})`); await page.evaluate(`window.term.open(document.querySelector('#terminal-container'))`); - if (options.rendererType === 'dom') { - await page.waitForSelector('.xterm-rows'); - } else { - await page.waitForSelector('.xterm-text-layer'); - } + await page.waitForSelector('.xterm-rows'); } export function getBrowserType(): playwright.BrowserType | playwright.BrowserType | playwright.BrowserType { diff --git a/typings/xterm.d.ts b/typings/xterm.d.ts index eb90202c..f16ff970 100644 --- a/typings/xterm.d.ts +++ b/typings/xterm.d.ts @@ -20,11 +20,6 @@ declare module 'xterm' { */ export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'off'; - /** - * A string representing a renderer type. - */ - export type RendererType = 'dom' | 'canvas'; - /** * An object containing start up options for the terminal. */ @@ -176,16 +171,6 @@ declare module 'xterm' { */ minimumContrastRatio?: number; - /** - * The type of renderer to use, this allows using the fallback DOM renderer - * when canvas is too slow for the environment. The following features do - * not work when the DOM renderer is used: - * - * - Letter spacing - * - Cursor blink - */ - rendererType?: RendererType; - /** * Whether to select the word under the cursor on right click, this is * standard behavior in a lot of macOS applications.