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);
+2 -2
View File
@@ -4,7 +4,7 @@
*/
import { FontWeight, Terminal } from 'xterm';
import { IColorSet } from 'browser/Types';
import { IColorSet, ITerminal } from 'browser/Types';
import { IDisposable } from 'common/Types';
import { IEvent } from 'common/EventEmitter';
@@ -168,6 +168,6 @@ export interface ISelectionRenderModel {
readonly selectionStart: [number, number] | undefined;
readonly selectionEnd: [number, number] | undefined;
clear(): void;
update(terminal: Terminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode?: boolean): void;
update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode?: boolean): void;
isCellSelected(terminal: Terminal, x: number, y: number): boolean;
}