Skip to content

Commit eec5326

Browse files
authored
Merge pull request #3779 from Tyriar/3773
Layout dimension left/right after renderer dims change
2 parents 87bc48f + 900200b commit eec5326

File tree

4 files changed

+24
-12
lines changed

4 files changed

+24
-12
lines changed

src/browser/TestUtils.test.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -396,9 +396,6 @@ export class MockRenderService implements IRenderService {
396396
public resize(cols: number, rows: number): void {
397397
throw new Error('Method not implemented.');
398398
}
399-
public changeOptions(): void {
400-
throw new Error('Method not implemented.');
401-
}
402399
public setRenderer(renderer: IRenderer): void {
403400
throw new Error('Method not implemented.');
404401
}

src/browser/decorations/BufferDecorationRenderer.ts

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export class BufferDecorationRenderer extends Disposable {
1414

1515
private _animationFrame: number | undefined;
1616
private _altBufferIsActive: boolean = false;
17+
private _dimensionsChanged: boolean = false;
1718

1819
constructor(
1920
private readonly _screenElement: HTMLElement,
@@ -28,7 +29,10 @@ export class BufferDecorationRenderer extends Disposable {
2829
this._screenElement.appendChild(this._container);
2930

3031
this.register(this._renderService.onRenderedBufferChange(() => this._queueRefresh()));
31-
this.register(this._renderService.onDimensionsChange(() => this._queueRefresh()));
32+
this.register(this._renderService.onDimensionsChange(() => {
33+
this._dimensionsChanged = true;
34+
this._queueRefresh();
35+
}));
3236
this.register(addDisposableDomListener(window, 'resize', () => this._queueRefresh()));
3337
this.register(this._bufferService.buffers.onBufferActivate(() => {
3438
this._altBufferIsActive = this._bufferService.buffer === this._bufferService.buffers.alt;
@@ -57,10 +61,14 @@ export class BufferDecorationRenderer extends Disposable {
5761
for (const decoration of this._decorationService.decorations) {
5862
this._renderDecoration(decoration);
5963
}
64+
this._dimensionsChanged = false;
6065
}
6166

6267
private _renderDecoration(decoration: IInternalDecoration): void {
6368
this._refreshStyle(decoration);
69+
if (this._dimensionsChanged) {
70+
this._refreshXPosition(decoration);
71+
}
6472
}
6573

6674
private _createElement(decoration: IInternalDecoration): HTMLElement {
@@ -76,11 +84,7 @@ export class BufferDecorationRenderer extends Disposable {
7684
// exceeded the container width, so hide
7785
element.style.display = 'none';
7886
}
79-
if ((decoration.options.anchor || 'left') === 'right') {
80-
element.style.right = x ? `${x * this._renderService.dimensions.actualCellWidth}px` : '';
81-
} else {
82-
element.style.left = x ? `${x * this._renderService.dimensions.actualCellWidth}px` : '';
83-
}
87+
this._refreshXPosition(decoration);
8488

8589
return element;
8690
}
@@ -108,6 +112,18 @@ export class BufferDecorationRenderer extends Disposable {
108112
}
109113
}
110114

115+
private _refreshXPosition(decoration: IInternalDecoration): void {
116+
if (!decoration.element) {
117+
return;
118+
}
119+
const x = decoration.options.x ?? 0;
120+
if ((decoration.options.anchor || 'left') === 'right') {
121+
decoration.element.style.right = x ? `${x * this._renderService.dimensions.actualCellWidth}px` : '';
122+
} else {
123+
decoration.element.style.left = x ? `${x * this._renderService.dimensions.actualCellWidth}px` : '';
124+
}
125+
}
126+
111127
private _removeDecoration(decoration: IInternalDecoration): void {
112128
this._decorationElements.get(decoration)?.remove();
113129
this._decorationElements.delete(decoration);

src/browser/services/RenderService.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ export class RenderService extends Disposable implements IRenderService {
7070

7171
this.register(bufferService.onResize(() => this._fullRefresh()));
7272
this.register(bufferService.buffers.onBufferActivate(() => this._renderer?.clear()));
73-
this.register(optionsService.onOptionChange(() => this._renderer.onOptionsChanged()));
73+
this.register(optionsService.onOptionChange(() => this._handleOptionsChanged()));
7474
this.register(this._charSizeService.onCharSizeChange(() => this.onCharSizeChanged()));
7575

7676
// Do a full refresh whenever any decoration is added or removed. This may not actually result
@@ -142,7 +142,7 @@ export class RenderService extends Disposable implements IRenderService {
142142
this._fireOnCanvasResize();
143143
}
144144

145-
public changeOptions(): void {
145+
private _handleOptionsChanged(): void {
146146
this._renderer.onOptionsChanged();
147147
this.refreshRows(0, this._rowCount - 1);
148148
this._fireOnCanvasResize();

src/browser/services/Services.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ export interface IRenderService extends IDisposable {
6161
refreshRows(start: number, end: number): void;
6262
clearTextureAtlas(): void;
6363
resize(cols: number, rows: number): void;
64-
changeOptions(): void;
6564
setRenderer(renderer: IRenderer): void;
6665
setColors(colors: IColorSet): void;
6766
onDevicePixelRatioChange(): void;

0 commit comments

Comments
 (0)