Merge branch 'master' into 2452_website_update
This commit is contained in:
+1
-1
@@ -107,7 +107,7 @@ jobs:
|
|||||||
- Windows
|
- Windows
|
||||||
- Linux_IntegrationTests
|
- Linux_IntegrationTests
|
||||||
- macOS_IntegrationTests
|
- macOS_IntegrationTests
|
||||||
condition: and(succeeded(), or(eq(variables['Build.SourceBranch'], 'refs/heads/master'), eq(variables['Build.SourceBranch'], 'refs/heads/release/*')))
|
condition: and(succeeded(), or(eq(variables['Build.SourceBranch'], 'refs/heads/master'), eq(variables['FORCE_RELEASE'], 'true')))
|
||||||
pool:
|
pool:
|
||||||
vmImage: 'ubuntu-16.04'
|
vmImage: 'ubuntu-16.04'
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
@@ -1469,6 +1469,10 @@ export class Terminal extends Disposable implements ITerminal, IDisposable, IInp
|
|||||||
this._charSizeService.measure();
|
this._charSizeService.measure();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sync the scroll area to make sure scroll events don't fire and scroll the viewport to an
|
||||||
|
// invalid location
|
||||||
|
this.viewport.syncScrollArea(true);
|
||||||
|
|
||||||
this.refresh(0, this.rows - 1);
|
this.refresh(0, this.rows - 1);
|
||||||
this._onResize.fire({ cols: x, rows: y });
|
this._onResize.fire({ cols: x, rows: y });
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1
-1
@@ -35,7 +35,7 @@ export interface IPartialColorSet {
|
|||||||
|
|
||||||
export interface IViewport extends IDisposable {
|
export interface IViewport extends IDisposable {
|
||||||
scrollBarWidth: number;
|
scrollBarWidth: number;
|
||||||
syncScrollArea(): void;
|
syncScrollArea(immediate?: boolean): void;
|
||||||
getLinesScrolled(ev: WheelEvent): number;
|
getLinesScrolled(ev: WheelEvent): number;
|
||||||
onWheel(ev: WheelEvent): boolean;
|
onWheel(ev: WheelEvent): boolean;
|
||||||
onTouchStart(ev: TouchEvent): void;
|
onTouchStart(ev: TouchEvent): void;
|
||||||
|
|||||||
+14
-8
@@ -61,7 +61,14 @@ export class Viewport extends Disposable implements IViewport {
|
|||||||
* Refreshes row height, setting line-height, viewport height and scroll area height if
|
* Refreshes row height, setting line-height, viewport height and scroll area height if
|
||||||
* necessary.
|
* necessary.
|
||||||
*/
|
*/
|
||||||
private _refresh(): void {
|
private _refresh(immediate: boolean): void {
|
||||||
|
if (immediate) {
|
||||||
|
this._innerRefresh();
|
||||||
|
if (this._refreshAnimationFrame !== null) {
|
||||||
|
cancelAnimationFrame(this._refreshAnimationFrame);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (this._refreshAnimationFrame === null) {
|
if (this._refreshAnimationFrame === null) {
|
||||||
this._refreshAnimationFrame = requestAnimationFrame(() => this._innerRefresh());
|
this._refreshAnimationFrame = requestAnimationFrame(() => this._innerRefresh());
|
||||||
}
|
}
|
||||||
@@ -89,40 +96,39 @@ export class Viewport extends Disposable implements IViewport {
|
|||||||
|
|
||||||
this._refreshAnimationFrame = null;
|
this._refreshAnimationFrame = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates dimensions and synchronizes the scroll area if necessary.
|
* Updates dimensions and synchronizes the scroll area if necessary.
|
||||||
*/
|
*/
|
||||||
public syncScrollArea(): void {
|
public syncScrollArea(immediate: boolean = false): void {
|
||||||
// If buffer height changed
|
// If buffer height changed
|
||||||
if (this._lastRecordedBufferLength !== this._bufferService.buffer.lines.length) {
|
if (this._lastRecordedBufferLength !== this._bufferService.buffer.lines.length) {
|
||||||
this._lastRecordedBufferLength = this._bufferService.buffer.lines.length;
|
this._lastRecordedBufferLength = this._bufferService.buffer.lines.length;
|
||||||
this._refresh();
|
this._refresh(immediate);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If viewport height changed
|
// If viewport height changed
|
||||||
if (this._lastRecordedViewportHeight !== this._renderService.dimensions.canvasHeight) {
|
if (this._lastRecordedViewportHeight !== this._renderService.dimensions.canvasHeight) {
|
||||||
this._refresh();
|
this._refresh(immediate);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the buffer position doesn't match last scroll top
|
// If the buffer position doesn't match last scroll top
|
||||||
const newScrollTop = this._bufferService.buffer.ydisp * this._currentRowHeight;
|
const newScrollTop = this._bufferService.buffer.ydisp * this._currentRowHeight;
|
||||||
if (this._lastScrollTop !== newScrollTop) {
|
if (this._lastScrollTop !== newScrollTop) {
|
||||||
this._refresh();
|
this._refresh(immediate);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If element's scroll top changed, this can happen when hiding the element
|
// If element's scroll top changed, this can happen when hiding the element
|
||||||
if (this._lastScrollTop !== this._viewportElement.scrollTop) {
|
if (this._lastScrollTop !== this._viewportElement.scrollTop) {
|
||||||
this._refresh();
|
this._refresh(immediate);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If row height changed
|
// If row height changed
|
||||||
if (this._renderService.dimensions.scaledCellHeight / window.devicePixelRatio !== this._currentRowHeight) {
|
if (this._renderService.dimensions.scaledCellHeight / window.devicePixelRatio !== this._currentRowHeight) {
|
||||||
this._refresh();
|
this._refresh(immediate);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+18
-12
@@ -167,19 +167,25 @@ export class Buffer implements IBuffer {
|
|||||||
if (this._rows < newRows) {
|
if (this._rows < newRows) {
|
||||||
for (let y = this._rows; y < newRows; y++) {
|
for (let y = this._rows; y < newRows; y++) {
|
||||||
if (this.lines.length < newRows + this.ybase) {
|
if (this.lines.length < newRows + this.ybase) {
|
||||||
if (this.ybase > 0 && this.lines.length <= this.ybase + this.y + addToY + 1) {
|
if (this._optionsService.options.windowsMode) {
|
||||||
// There is room above the buffer and there are no empty elements below the line,
|
// Just add the new missing rows on Windows as conpty reprints the screen with it's
|
||||||
// scroll up
|
// view of the world. Once a line enters scrollback for conpty it remains there
|
||||||
this.ybase--;
|
|
||||||
addToY++;
|
|
||||||
if (this.ydisp > 0) {
|
|
||||||
// Viewport is at the top of the buffer, must increase downwards
|
|
||||||
this.ydisp--;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Add a blank line if there is no buffer left at the top to scroll to, or if there
|
|
||||||
// are blank lines after the cursor
|
|
||||||
this.lines.push(new BufferLine(newCols, nullCell));
|
this.lines.push(new BufferLine(newCols, nullCell));
|
||||||
|
} else {
|
||||||
|
if (this.ybase > 0 && this.lines.length <= this.ybase + this.y + addToY + 1) {
|
||||||
|
// There is room above the buffer and there are no empty elements below the line,
|
||||||
|
// scroll up
|
||||||
|
this.ybase--;
|
||||||
|
addToY++;
|
||||||
|
if (this.ydisp > 0) {
|
||||||
|
// Viewport is at the top of the buffer, must increase downwards
|
||||||
|
this.ydisp--;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Add a blank line if there is no buffer left at the top to scroll to, or if there
|
||||||
|
// are blank lines after the cursor
|
||||||
|
this.lines.push(new BufferLine(newCols, nullCell));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user