Dom Renderer using SelectionRenderModel

This commit is contained in:
tisilent
2023-10-10 22:53:01 +08:00
parent d3e075f37b
commit 6b5fc260ca
6 changed files with 27 additions and 32 deletions
@@ -3,7 +3,9 @@
* @license MIT
*/
import { ITerminal } from 'browser/Types';
import { ISelectionRenderModel } from 'browser/renderer/shared/Types';
import { BufferNamespaceApi } from 'common/public/BufferNamespaceApi';
import { Terminal } from 'xterm';
class SelectionRenderModel implements ISelectionRenderModel {
@@ -17,6 +19,7 @@ class SelectionRenderModel implements ISelectionRenderModel {
public endCol!: number;
public selectionStart: [number, number] | undefined;
public selectionEnd: [number, number] | undefined;
private _buffer: BufferNamespaceApi | undefined;
constructor() {
this.clear();
@@ -35,7 +38,11 @@ class SelectionRenderModel implements ISelectionRenderModel {
this.selectionEnd = undefined;
}
public update(terminal: Terminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {
public update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {
if (!this._buffer) {
this._buffer = new BufferNamespaceApi(terminal);
}
this.selectionStart = start;
this.selectionEnd = end;
// Selection does not exist
@@ -45,8 +52,8 @@ class SelectionRenderModel implements ISelectionRenderModel {
}
// Translate from buffer position to viewport position
const viewportStartRow = start[1] - terminal.buffer.active.viewportY;
const viewportEndRow = end[1] - terminal.buffer.active.viewportY;
const viewportStartRow = start[1] - this._buffer.active.viewportY;
const viewportEndRow = end[1] - this._buffer.active.viewportY;
const viewportCappedStartRow = Math.max(viewportStartRow, 0);
const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);