Merge branch 'master' into reuse_bufferlines
This commit is contained in:
@@ -477,6 +477,7 @@ export class Terminal extends EventEmitter implements ITerminal, IDisposable, II
|
|||||||
if (this._theme) {
|
if (this._theme) {
|
||||||
this.renderer.setTheme(this._theme);
|
this.renderer.setTheme(this._theme);
|
||||||
}
|
}
|
||||||
|
this.mouseHelper.setRenderer(this.renderer);
|
||||||
break;
|
break;
|
||||||
case 'scrollback':
|
case 'scrollback':
|
||||||
this.buffers.resize(this.cols, this.rows);
|
this.buffers.resize(this.cols, this.rows);
|
||||||
|
|||||||
@@ -94,22 +94,23 @@ export class DomRenderer extends EventEmitter implements IRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private _updateDimensions(): void {
|
private _updateDimensions(): void {
|
||||||
this.dimensions.scaledCharWidth = this._terminal.charMeasure.width * window.devicePixelRatio;
|
this.dimensions.scaledCharWidth = Math.floor(this._terminal.charMeasure.width * window.devicePixelRatio);
|
||||||
this.dimensions.scaledCharHeight = this._terminal.charMeasure.height * window.devicePixelRatio;
|
this.dimensions.scaledCharHeight = Math.ceil(this._terminal.charMeasure.height * window.devicePixelRatio);
|
||||||
this.dimensions.scaledCellWidth = this.dimensions.scaledCharWidth;
|
this.dimensions.scaledCellWidth = this.dimensions.scaledCharWidth + Math.round(this._terminal.options.letterSpacing);
|
||||||
this.dimensions.scaledCellHeight = this.dimensions.scaledCharHeight;
|
this.dimensions.scaledCellHeight = Math.floor(this.dimensions.scaledCharHeight * this._terminal.options.lineHeight);
|
||||||
this.dimensions.scaledCharLeft = 0;
|
this.dimensions.scaledCharLeft = 0;
|
||||||
this.dimensions.scaledCharTop = 0;
|
this.dimensions.scaledCharTop = 0;
|
||||||
this.dimensions.scaledCanvasWidth = this.dimensions.scaledCellWidth * this._terminal.cols;
|
this.dimensions.scaledCanvasWidth = this.dimensions.scaledCellWidth * this._terminal.cols;
|
||||||
this.dimensions.scaledCanvasHeight = this.dimensions.scaledCellHeight * this._terminal.rows;
|
this.dimensions.scaledCanvasHeight = this.dimensions.scaledCellHeight * this._terminal.rows;
|
||||||
this.dimensions.canvasWidth = this._terminal.charMeasure.width * this._terminal.cols;
|
this.dimensions.canvasWidth = Math.round(this.dimensions.scaledCanvasWidth / window.devicePixelRatio);
|
||||||
this.dimensions.canvasHeight = this._terminal.charMeasure.height * this._terminal.rows;
|
this.dimensions.canvasHeight = Math.round(this.dimensions.scaledCanvasHeight / window.devicePixelRatio);
|
||||||
this.dimensions.actualCellWidth = this._terminal.charMeasure.width;
|
this.dimensions.actualCellWidth = this.dimensions.canvasWidth / this._terminal.cols;
|
||||||
this.dimensions.actualCellHeight = this._terminal.charMeasure.height;
|
this.dimensions.actualCellHeight = this.dimensions.canvasHeight / this._terminal.rows;
|
||||||
|
|
||||||
this._rowElements.forEach(element => {
|
this._rowElements.forEach(element => {
|
||||||
element.style.width = `${this.dimensions.canvasWidth}px`;
|
element.style.width = `${this.dimensions.canvasWidth}px`;
|
||||||
element.style.height = `${this._terminal.charMeasure.height}px`;
|
element.style.height = `${this.dimensions.actualCellHeight}px`;
|
||||||
|
element.style.lineHeight = `${this.dimensions.actualCellHeight}px`;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!this._dimensionsStyleElement) {
|
if (!this._dimensionsStyleElement) {
|
||||||
@@ -130,6 +131,8 @@ export class DomRenderer extends EventEmitter implements IRenderer {
|
|||||||
this._selectionContainer.style.height = (<any>this._terminal)._viewportElement.style.height;
|
this._selectionContainer.style.height = (<any>this._terminal)._viewportElement.style.height;
|
||||||
this._rowContainer.style.width = `${this.dimensions.canvasWidth}px`;
|
this._rowContainer.style.width = `${this.dimensions.canvasWidth}px`;
|
||||||
this._rowContainer.style.height = `${this.dimensions.canvasHeight}px`;
|
this._rowContainer.style.height = `${this.dimensions.canvasHeight}px`;
|
||||||
|
this._terminal.screenElement.style.width = '';
|
||||||
|
this._terminal.screenElement.style.height = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
public setTheme(theme: ITheme | undefined): IColorSet {
|
public setTheme(theme: ITheme | undefined): IColorSet {
|
||||||
@@ -290,10 +293,10 @@ export class DomRenderer extends EventEmitter implements IRenderer {
|
|||||||
*/
|
*/
|
||||||
private _createSelectionElement(row: number, colStart: number, colEnd: number, rowCount: number = 1): HTMLElement {
|
private _createSelectionElement(row: number, colStart: number, colEnd: number, rowCount: number = 1): HTMLElement {
|
||||||
const element = document.createElement('div');
|
const element = document.createElement('div');
|
||||||
element.style.height = `${rowCount * this._terminal.charMeasure.height}px`;
|
element.style.height = `${rowCount * this.dimensions.actualCellHeight}px`;
|
||||||
element.style.top = `${row * this._terminal.charMeasure.height}px`;
|
element.style.top = `${row * this.dimensions.actualCellHeight}px`;
|
||||||
element.style.left = `${colStart * this._terminal.charMeasure.width}px`;
|
element.style.left = `${colStart * this.dimensions.actualCellWidth}px`;
|
||||||
element.style.width = `${this._terminal.charMeasure.width * (colEnd - colStart)}px`;
|
element.style.width = `${this.dimensions.actualCellWidth * (colEnd - colStart)}px`;
|
||||||
return element;
|
return element;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,10 @@ import { IRenderer } from '../renderer/Types';
|
|||||||
export class MouseHelper {
|
export class MouseHelper {
|
||||||
constructor(private _renderer: IRenderer) {}
|
constructor(private _renderer: IRenderer) {}
|
||||||
|
|
||||||
|
public setRenderer(renderer: IRenderer): void {
|
||||||
|
this._renderer = renderer;
|
||||||
|
}
|
||||||
|
|
||||||
public static getCoordsRelativeToElement(event: {pageX: number, pageY: number}, element: HTMLElement): [number, number] {
|
public static getCoordsRelativeToElement(event: {pageX: number, pageY: number}, element: HTMLElement): [number, number] {
|
||||||
// Ignore browsers that don't support MouseEvent.pageX
|
// Ignore browsers that don't support MouseEvent.pageX
|
||||||
if (event.pageX === null || event.pageX === undefined) {
|
if (event.pageX === null || event.pageX === undefined) {
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ export class MockTerminal implements ITerminal {
|
|||||||
handler(data: string): void {
|
handler(data: string): void {
|
||||||
throw new Error('Method not implemented.');
|
throw new Error('Method not implemented.');
|
||||||
}
|
}
|
||||||
on(event: string, callback: () => void): void {
|
on(event: string, callback: (...args: any[]) => void): void {
|
||||||
throw new Error('Method not implemented.');
|
throw new Error('Method not implemented.');
|
||||||
}
|
}
|
||||||
off(type: string, listener: XtermListener): void {
|
off(type: string, listener: XtermListener): void {
|
||||||
|
|||||||
Vendored
+6
-7
@@ -163,7 +163,6 @@ declare module 'xterm' {
|
|||||||
* when canvas is too slow for the environment. The following features do
|
* when canvas is too slow for the environment. The following features do
|
||||||
* not work when the DOM renderer is used:
|
* not work when the DOM renderer is used:
|
||||||
*
|
*
|
||||||
* - Line height
|
|
||||||
* - Letter spacing
|
* - Letter spacing
|
||||||
* - Cursor blink
|
* - Cursor blink
|
||||||
*/
|
*/
|
||||||
@@ -390,37 +389,37 @@ declare module 'xterm' {
|
|||||||
* @param type The type of the event.
|
* @param type The type of the event.
|
||||||
* @param listener The listener.
|
* @param listener The listener.
|
||||||
*/
|
*/
|
||||||
on(type: 'key', listener: (key?: string, event?: KeyboardEvent) => void): void;
|
on(type: 'key', listener: (key: string, event: KeyboardEvent) => void): void;
|
||||||
/**
|
/**
|
||||||
* Registers an event listener.
|
* Registers an event listener.
|
||||||
* @param type The type of the event.
|
* @param type The type of the event.
|
||||||
* @param listener The listener.
|
* @param listener The listener.
|
||||||
*/
|
*/
|
||||||
on(type: 'keypress' | 'keydown', listener: (event?: KeyboardEvent) => void): void;
|
on(type: 'keypress' | 'keydown', listener: (event: KeyboardEvent) => void): void;
|
||||||
/**
|
/**
|
||||||
* Registers an event listener.
|
* Registers an event listener.
|
||||||
* @param type The type of the event.
|
* @param type The type of the event.
|
||||||
* @param listener The listener.
|
* @param listener The listener.
|
||||||
*/
|
*/
|
||||||
on(type: 'refresh', listener: (data?: {start: number, end: number}) => void): void;
|
on(type: 'refresh', listener: (data: {start: number, end: number}) => void): void;
|
||||||
/**
|
/**
|
||||||
* Registers an event listener.
|
* Registers an event listener.
|
||||||
* @param type The type of the event.
|
* @param type The type of the event.
|
||||||
* @param listener The listener.
|
* @param listener The listener.
|
||||||
*/
|
*/
|
||||||
on(type: 'resize', listener: (data?: {cols: number, rows: number}) => void): void;
|
on(type: 'resize', listener: (data: {cols: number, rows: number}) => void): void;
|
||||||
/**
|
/**
|
||||||
* Registers an event listener.
|
* Registers an event listener.
|
||||||
* @param type The type of the event.
|
* @param type The type of the event.
|
||||||
* @param listener The listener.
|
* @param listener The listener.
|
||||||
*/
|
*/
|
||||||
on(type: 'scroll', listener: (ydisp?: number) => void): void;
|
on(type: 'scroll', listener: (ydisp: number) => void): void;
|
||||||
/**
|
/**
|
||||||
* Registers an event listener.
|
* Registers an event listener.
|
||||||
* @param type The type of the event.
|
* @param type The type of the event.
|
||||||
* @param listener The listener.
|
* @param listener The listener.
|
||||||
*/
|
*/
|
||||||
on(type: 'title', listener: (title?: string) => void): void;
|
on(type: 'title', listener: (title: string) => void): void;
|
||||||
/**
|
/**
|
||||||
* Registers an event listener.
|
* Registers an event listener.
|
||||||
* @param type The type of the event.
|
* @param type The type of the event.
|
||||||
|
|||||||
Reference in New Issue
Block a user