This commit is contained in:
meganrogge
2022-02-07 10:14:56 -06:00
parent 8f7db4b270
commit ac6877aba7
+17 -20
View File
@@ -34,7 +34,6 @@ export class DecorationsService extends Disposable implements IDecorationsServic
if (decorationOptions.marker.isDisposed) {
return undefined;
}
this._resolveDimensions(decorationOptions);
const bufferDecoration = new BufferDecoration(decorationOptions, this._screenElement, this._renderService);
this._decorations.push(bufferDecoration);
return bufferDecoration;
@@ -54,27 +53,13 @@ export class DecorationsService extends Disposable implements IDecorationsServic
if (line < 0 || line > this._bufferService.rows) {
decoration.element.style.display = 'none';
} else {
decoration.element.style.top = `${line *this._renderService.dimensions.scaledCellHeight}px`;
decoration.element.style.top = `${line * this._renderService.dimensions.scaledCellHeight}px`;
decoration.element.style.display = 'block';
}
}
this._animationFrame = undefined;
}
private _resolveDimensions(decorationOptions: IBufferDecorationOptions): void {
if (this._renderService.dimensions.scaledCellWidth) {
decorationOptions.width = decorationOptions.width ? decorationOptions.width * this._renderService.dimensions.scaledCellWidth : this._renderService.dimensions.scaledCellWidth;
} else {
throw new Error('unknown cell width');
}
if (this._renderService.dimensions.scaledCellHeight) {
decorationOptions.height = decorationOptions.height ? decorationOptions.height * this._renderService.dimensions.scaledCellHeight : this._renderService.dimensions.scaledCellHeight;
} else {
throw new Error('unknown cell height');
}
}
public dispose(): void {
if (this._animationFrame) {
window.cancelAnimationFrame(this._animationFrame);
@@ -126,12 +111,9 @@ class BufferDecoration extends Disposable implements IDecoration {
private _createElement(): void {
this._element = document.createElement('div');
this._element.classList.add('xterm-decoration');
this._resolveDimensions();
this._element.style.width = `${this._decorationOptions.width}px`;
this._element.style.height = `${this._decorationOptions.height}px`;
this._element.style.top = `${this._marker.line * this._renderService.dimensions.scaledCellHeight}px`;
if (this._decorationOptions.x && this._decorationOptions.x < 0) {
throw new Error(`Cannot create a decoration with a negative x offset: ${this._decorationOptions.x}`);
}
if (this._decorationOptions.anchor === 'right') {
this._element.style.right = this._decorationOptions.x ? `${this._decorationOptions.x * this._renderService.dimensions.scaledCellWidth}px` : '';
} else {
@@ -139,6 +121,21 @@ class BufferDecoration extends Disposable implements IDecoration {
}
}
private _resolveDimensions(): void {
if (this._renderService.dimensions.scaledCellWidth) {
this._decorationOptions.width = this._decorationOptions.width ? this._decorationOptions.width * this._renderService.dimensions.scaledCellWidth : this._renderService.dimensions.scaledCellWidth;
} else {
throw new Error('unknown cell width');
}
if (this._renderService.dimensions.scaledCellHeight) {
this._decorationOptions.height = this._decorationOptions.height ? this._decorationOptions.height * this._renderService.dimensions.scaledCellHeight : this._renderService.dimensions.scaledCellHeight;
} else {
throw new Error('unknown cell height');
}
}
private _render(): void {
if (this._screenElement && this._element) {
this._screenElement.append(this._element);