46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
/**
|
|
* Copyright (c) 2019 The xterm.js authors. All rights reserved.
|
|
* @license MIT
|
|
*/
|
|
|
|
import { IBufferService, IOptionsService } from 'common/services/Services';
|
|
import { BufferSet } from 'common/buffer/BufferSet';
|
|
import { IBufferSet, IBuffer } from 'common/buffer/Types';
|
|
import { EventEmitter, IEvent } from 'common/EventEmitter';
|
|
|
|
export const MINIMUM_COLS = 2; // Less than 2 can mess with wide chars
|
|
export const MINIMUM_ROWS = 1;
|
|
|
|
export class BufferService implements IBufferService {
|
|
public serviceBrand: any;
|
|
|
|
public cols: number;
|
|
public rows: number;
|
|
public buffers: IBufferSet;
|
|
|
|
private _onResize = new EventEmitter<{ cols: number, rows: number }>();
|
|
public get onResize(): IEvent<{ cols: number, rows: number }> { return this._onResize.event; }
|
|
|
|
public get buffer(): IBuffer { return this.buffers.active; }
|
|
|
|
constructor(
|
|
@IOptionsService private _optionsService: IOptionsService
|
|
) {
|
|
this.cols = Math.max(_optionsService.options.cols, MINIMUM_COLS);
|
|
this.rows = Math.max(_optionsService.options.rows, MINIMUM_ROWS);
|
|
this.buffers = new BufferSet(_optionsService, this);
|
|
}
|
|
|
|
public resize(cols: number, rows: number): void {
|
|
this.cols = cols;
|
|
this.rows = rows;
|
|
this.buffers.resize(cols, rows);
|
|
this.buffers.setupTabStops(this.cols);
|
|
this._onResize.fire({ cols, rows });
|
|
}
|
|
|
|
public reset(): void {
|
|
this.buffers = new BufferSet(this._optionsService, this);
|
|
}
|
|
}
|