From cbc2266d823b1987f7954a615b7fafa10d8c516d Mon Sep 17 00:00:00 2001 From: lalalasyun Date: Tue, 12 May 2026 03:30:59 +0900 Subject: [PATCH] fix(dom): avoid leaking cell background to container --- .../@wterm/dom/src/__tests__/renderer.test.ts | 15 +++++++++++++++ packages/@wterm/dom/src/renderer.ts | 19 ------------------- packages/@wterm/dom/src/terminal.css | 2 ++ 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/packages/@wterm/dom/src/__tests__/renderer.test.ts b/packages/@wterm/dom/src/__tests__/renderer.test.ts index 678ea63..8f1daf6 100644 --- a/packages/@wterm/dom/src/__tests__/renderer.test.ts +++ b/packages/@wterm/dom/src/__tests__/renderer.test.ts @@ -121,5 +121,20 @@ describe("Renderer", () => { const span = container.querySelector("span[style]"); expect(span?.getAttribute("style")).toMatch(/font-weight:\s*bold/); }); + + it("does not leak the bottom-right cell background to the container", () => { + const grid = [ + [makeCell("A", 256, 256), makeCell("B", 256, 2)], + ]; + const bridge = createMockBridge(2, 1, grid); + const renderer = new Renderer(container); + + renderer.render(bridge as any); + + expect(container.style.background).toBe(""); + expect(container.querySelector(".term-row")?.getAttribute("style")).toContain( + "background", + ); + }); }); }); diff --git a/packages/@wterm/dom/src/renderer.ts b/packages/@wterm/dom/src/renderer.ts index a5ed237..8644ba6 100644 --- a/packages/@wterm/dom/src/renderer.ts +++ b/packages/@wterm/dom/src/renderer.ts @@ -205,7 +205,6 @@ export class Renderer { private rowEls: HTMLDivElement[] = []; private prevCursorRow = -1; private prevCursorCol = -1; - private prevContainerBg = ""; private prevRowBg: string[] = []; private _scrollbackRowEls: HTMLDivElement[] = []; @@ -438,24 +437,6 @@ export class Renderer { this.prevCursorRow = cursor.row; this.prevCursorCol = cursor.col; - const lastRowDirty = resized || core.isDirtyRow(this.rows - 1); - if (lastRowDirty) { - const bottomRight = core.getCell(this.rows - 1, this.cols - 1); - let gridBgIdx = bottomRight.bg; - let gridBgRgb = bottomRight.bgRgb; - if (bottomRight.flags & FLAG_REVERSE) { - gridBgIdx = bottomRight.fg; - gridBgRgb = bottomRight.fgRgb; - if (gridBgRgb === undefined && gridBgIdx === DEFAULT_COLOR) - gridBgIdx = 7; - } - const containerBg = cellBgCSS(gridBgIdx, gridBgRgb) || ""; - if (containerBg !== this.prevContainerBg) { - this.container.style.background = containerBg; - this.prevContainerBg = containerBg; - } - } - core.clearDirty(); } } diff --git a/packages/@wterm/dom/src/terminal.css b/packages/@wterm/dom/src/terminal.css index a88e475..80901b2 100644 --- a/packages/@wterm/dom/src/terminal.css +++ b/packages/@wterm/dom/src/terminal.css @@ -46,6 +46,8 @@ .term-grid { display: block; white-space: pre; + min-height: 100%; + background: var(--term-bg); contain: layout paint style; will-change: contents; }