Fixes #58254: better logic for restoring top of viewport

This commit is contained in:
Alex Dima 2018-09-13 11:03:34 +02:00
parent 80a9557b4a
commit 7465e3a35a

View file

@ -35,7 +35,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
private hasFocus: boolean;
private viewportStartLine: number;
private viewportStartLineTrackedRange: string;
private viewportStartLineTop: number;
private viewportStartLineDelta: number;
private readonly lines: IViewModelLinesCollection;
public readonly coordinatesConverter: ICoordinatesConverter;
public readonly viewLayout: ViewLayout;
@ -51,7 +51,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
this.hasFocus = false;
this.viewportStartLine = -1;
this.viewportStartLineTrackedRange = null;
this.viewportStartLineTop = 0;
this.viewportStartLineDelta = 0;
if (USE_IDENTITY_LINES_COLLECTION && this.model.isTooLargeForTokenization()) {
@ -162,7 +162,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
if (restorePreviousViewportStart && previousViewportStartModelPosition) {
const viewPosition = this.coordinatesConverter.convertModelPositionToViewPosition(previousViewportStartModelPosition);
const viewPositionTop = this.viewLayout.getVerticalOffsetForLineNumber(viewPosition.lineNumber);
this.viewLayout.deltaScrollNow(0, viewPositionTop - this.viewportStartLineTop);
this.viewLayout.setScrollPositionNow({ scrollTop: viewPositionTop + this.viewportStartLineDelta });
}
}
@ -252,7 +252,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
if (modelRange) {
const viewPosition = this.coordinatesConverter.convertModelPositionToViewPosition(modelRange.getStartPosition());
const viewPositionTop = this.viewLayout.getVerticalOffsetForLineNumber(viewPosition.lineNumber);
this.viewLayout.deltaScrollNow(0, viewPositionTop - this.viewportStartLineTop);
this.viewLayout.setScrollPositionNow({ scrollTop: viewPositionTop + this.viewportStartLineDelta });
}
}
}));
@ -450,7 +450,9 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
this.viewportStartLine = startLineNumber;
let position = this.coordinatesConverter.convertViewPositionToModelPosition(new Position(startLineNumber, this.getLineMinColumn(startLineNumber)));
this.viewportStartLineTrackedRange = this.model._setTrackedRange(this.viewportStartLineTrackedRange, new Range(position.lineNumber, position.column, position.lineNumber, position.column), TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges);
this.viewportStartLineTop = this.viewLayout.getVerticalOffsetForLineNumber(startLineNumber);
const viewportStartLineTop = this.viewLayout.getVerticalOffsetForLineNumber(startLineNumber);
const scrollTop = this.viewLayout.getCurrentScrollTop();
this.viewportStartLineDelta = scrollTop - viewportStartLineTop;
}
public getActiveIndentGuide(lineNumber: number, minLineNumber: number, maxLineNumber: number): IActiveIndentGuideInfo {