From 2a9ec8fd1d31863055bdfddc9fbc759a03d38d22 Mon Sep 17 00:00:00 2001 From: Kelvin Date: Tue, 11 Apr 2023 13:43:32 -0400 Subject: [PATCH 1/4] Re-render browser DOM style onOptionsChanged, fixes xtermjs#4474 Fixes https://github.com/xtermjs/xterm.js/issues/4474 --- src/browser/renderer/dom/DomRenderer.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/browser/renderer/dom/DomRenderer.ts b/src/browser/renderer/dom/DomRenderer.ts index fe6cba2d..d79a88e1 100644 --- a/src/browser/renderer/dom/DomRenderer.ts +++ b/src/browser/renderer/dom/DomRenderer.ts @@ -67,7 +67,10 @@ export class DomRenderer extends Disposable implements IRenderer { this.dimensions = createRenderDimensions(); this._updateDimensions(); - this.register(this._optionsService.onOptionChange(() => this._handleOptionsChanged())); + this.register(this._optionsService.onOptionChange(() => { + this._handleOptionsChanged(); + this._injectCss(themeService.colors); + })); this.register(themeService.onChangeColors(e => this._injectCss(e))); this._injectCss(themeService.colors); From 854e2736f66ca3e5d3ab5a7b65bf3fd6fba8b707 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Sun, 7 May 2023 06:27:56 -0700 Subject: [PATCH 2/4] Move inject into _handleOptionsChanged --- src/browser/renderer/dom/DomRenderer.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/browser/renderer/dom/DomRenderer.ts b/src/browser/renderer/dom/DomRenderer.ts index d79a88e1..3135e9d2 100644 --- a/src/browser/renderer/dom/DomRenderer.ts +++ b/src/browser/renderer/dom/DomRenderer.ts @@ -53,7 +53,7 @@ export class DomRenderer extends Disposable implements IRenderer { @IOptionsService private readonly _optionsService: IOptionsService, @IBufferService private readonly _bufferService: IBufferService, @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService, - @IThemeService themeService: IThemeService + @IThemeService private readonly _themeService: IThemeService ) { super(); this._rowContainer = document.createElement('div'); @@ -67,13 +67,10 @@ export class DomRenderer extends Disposable implements IRenderer { this.dimensions = createRenderDimensions(); this._updateDimensions(); - this.register(this._optionsService.onOptionChange(() => { - this._handleOptionsChanged(); - this._injectCss(themeService.colors); - })); + this.register(this._optionsService.onOptionChange(() => this._handleOptionsChanged())); - this.register(themeService.onChangeColors(e => this._injectCss(e))); - this._injectCss(themeService.colors); + this.register(this._themeService.onChangeColors(e => this._injectCss(e))); + this._injectCss(this._themeService.colors); this._rowFactory = instantiationService.createInstance(DomRendererRowFactory, document); @@ -343,6 +340,8 @@ export class DomRenderer extends Disposable implements IRenderer { private _handleOptionsChanged(): void { // Force a refresh this._updateDimensions(); + // Refresh CSS + this._injectCss(this._themeService.colors); } public clear(): void { From 8c9e44c2191aa3b18b282eecb1d057b553658cf7 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Tue, 9 May 2023 07:35:41 -0700 Subject: [PATCH 3/4] Disallow glyphs to exceed atlas texture size Fixes #4507 --- src/browser/renderer/shared/TextureAtlas.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/browser/renderer/shared/TextureAtlas.ts b/src/browser/renderer/shared/TextureAtlas.ts index ce168465..0850e268 100644 --- a/src/browser/renderer/shared/TextureAtlas.ts +++ b/src/browser/renderer/shared/TextureAtlas.ts @@ -429,12 +429,12 @@ export class TextureAtlas implements ITextureAtlas { // Allow 1 cell width per character, with a minimum of 2 (CJK), plus some padding. This is used // to draw the glyph to the canvas as well as to restrict the bounding box search to ensure // giant ligatures (eg. =====>) don't impact overall performance. - const allowedWidth = this._config.deviceCellWidth * Math.max(chars.length, 2) + TMP_CANVAS_GLYPH_PADDING * 2; + const allowedWidth = Math.min(this._config.deviceCellWidth * Math.max(chars.length, 2) + TMP_CANVAS_GLYPH_PADDING * 2, this._textureSize); if (this._tmpCanvas.width < allowedWidth) { this._tmpCanvas.width = allowedWidth; } // Include line height when drawing glyphs - const allowedHeight = this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 4; + const allowedHeight = Math.min(this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 4, this._textureSize); if (this._tmpCanvas.height < allowedHeight) { this._tmpCanvas.height = allowedHeight; } From 96ea9fe188c4e5b7df19a98cc2b63396a3bec9fb Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 10 May 2023 06:31:54 -0700 Subject: [PATCH 4/4] Add FAQ to new issue report Hopefully this will reduce issue count a little --- .github/ISSUE_TEMPLATE/config.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 59beeeb9..5ec6e6c7 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,8 @@ blank_issues_enabled: false contact_links: + - name: FAQ + url: https://github.com/xtermjs/xterm.js/wiki/FAQ + about: See our frequently asked questions before filing a bug report - name: Support / Q&A url: https://github.com/xtermjs/xterm.js/discussions/categories/q-a about: Use GitHub Discussions for community support and general Q&A