64 lines
2.0 KiB
TypeScript
64 lines
2.0 KiB
TypeScript
/**
|
|
* Copyright (c) 2019 The xterm.js authors. All rights reserved.
|
|
* @license MIT
|
|
*/
|
|
|
|
import { IRenderer } from './Types';
|
|
import { RenderDebouncer } from '../ui/RenderDebouncer';
|
|
import { EventEmitter2, IEvent } from '../common/EventEmitter2';
|
|
|
|
export class RenderCoordinator {
|
|
private _renderDebouncer: RenderDebouncer;
|
|
|
|
private _onCanvasResize = new EventEmitter2<{ width: number, height: number }>();
|
|
public get onCanvasResize(): IEvent<{ width: number, height: number }> { return this._onCanvasResize.event; }
|
|
private _onRender = new EventEmitter2<{ start: number, end: number }>();
|
|
public get onRender(): IEvent<{ start: number, end: number }> { return this._onRender.event; }
|
|
|
|
private _canvasWidth: number = 0;
|
|
private _canvasHeight: number = 0;
|
|
|
|
constructor(
|
|
private _renderer: IRenderer,
|
|
private _rowCount: number
|
|
) {
|
|
this._renderDebouncer = new RenderDebouncer((start, end) => this._renderRows(start, end));
|
|
}
|
|
|
|
public refreshRows(start: number, end: number): void {
|
|
this._renderDebouncer.refresh(start, end, this._rowCount);
|
|
}
|
|
|
|
private _renderRows(start: number, end: number): void {
|
|
this._renderer.renderRows(start, end);
|
|
this._onRender.fire({ start, end });
|
|
}
|
|
|
|
public resize(cols: number, rows: number): void {
|
|
this._rowCount = rows;
|
|
this._fireOnCanvasResize();
|
|
}
|
|
|
|
public changeOptions(): void {
|
|
this._renderer.onOptionsChanged();
|
|
this._fireOnCanvasResize();
|
|
}
|
|
|
|
private _fireOnCanvasResize(): void {
|
|
// Don't fire the event if the dimensions haven't changed
|
|
if (this._renderer.dimensions.canvasWidth === this._canvasWidth && this._renderer.dimensions.canvasHeight === this._canvasHeight) {
|
|
return;
|
|
}
|
|
this._canvasWidth = this._renderer.dimensions.canvasWidth;
|
|
this._canvasHeight = this._renderer.dimensions.canvasHeight;
|
|
this._onCanvasResize.fire({
|
|
width: this._canvasWidth,
|
|
height: this._canvasHeight
|
|
});
|
|
}
|
|
|
|
public setRenderer(renderer: IRenderer): void {
|
|
this._renderer = renderer;
|
|
}
|
|
}
|