Merge remote-tracking branch 'upstream/master' into 439_wide_char_class

This commit is contained in:
Daniel Imms
2017-01-08 16:56:47 -08:00
2 changed files with 3 additions and 27 deletions
-10
View File
@@ -1,11 +1,6 @@
import { assert } from 'chai';
import { Viewport } from './Viewport';
class MockWindow {
// Disable refreshLoop in test
public requestAnimationFrame() { }
}
describe('Viewport', () => {
let terminal;
let viewportElement;
@@ -16,7 +11,6 @@ describe('Viewport', () => {
const CHARACTER_HEIGHT = 10;
beforeEach(() => {
(<any>global).window = new MockWindow();
terminal = {
lines: [],
rows: 0,
@@ -73,14 +67,10 @@ describe('Viewport', () => {
terminal.rows = 1;
assert.equal(scrollAreaElement.style.height, 0 * CHARACTER_HEIGHT + 'px');
viewport.syncScrollArea();
assert.ok(viewport.isRefreshQueued);
viewport.refresh();
assert.equal(viewportElement.style.height, 1 * CHARACTER_HEIGHT + 'px');
assert.equal(scrollAreaElement.style.height, 1 * CHARACTER_HEIGHT + 'px');
terminal.lines.push('');
viewport.syncScrollArea();
assert.ok(viewport.isRefreshQueued);
viewport.refresh();
assert.equal(viewportElement.style.height, 1 * CHARACTER_HEIGHT + 'px');
assert.equal(scrollAreaElement.style.height, 2 * CHARACTER_HEIGHT + 'px');
});
+3 -17
View File
@@ -13,7 +13,6 @@ export class Viewport {
private currentRowHeight: number;
private lastRecordedBufferLength: number;
private lastRecordedViewportHeight: number;
private isRefreshQueued: boolean;
/**
* Creates a new Viewport.
@@ -31,25 +30,12 @@ export class Viewport {
this.currentRowHeight = 0;
this.lastRecordedBufferLength = 0;
this.lastRecordedViewportHeight = 0;
this.isRefreshQueued = false;
this.terminal.on('scroll', this.syncScrollArea.bind(this));
this.terminal.on('resize', this.syncScrollArea.bind(this));
this.viewportElement.addEventListener('scroll', this.onScroll.bind(this));
this.syncScrollArea();
this.refreshLoop();
}
/**
* Queues a refresh to be done on next animation frame.
*/
private refreshLoop(): void {
if (this.isRefreshQueued) {
this.refresh();
this.isRefreshQueued = false;
}
window.requestAnimationFrame(this.refreshLoop.bind(this));
}
/**
@@ -82,14 +68,14 @@ export class Viewport {
if (this.lastRecordedBufferLength !== this.terminal.lines.length) {
// If buffer height changed
this.lastRecordedBufferLength = this.terminal.lines.length;
this.isRefreshQueued = true;
this.refresh();
} else if (this.lastRecordedViewportHeight !== this.terminal.rows) {
// If viewport height changed
this.isRefreshQueued = true;
this.refresh();
} else {
// If size has changed, refresh viewport
if (this.charMeasure.height !== this.currentRowHeight) {
this.isRefreshQueued = true;
this.refresh();
}
}