Fixes #58254: better logic for restoring top of viewport
This commit is contained in:
parent
80a9557b4a
commit
7465e3a35a
|
@ -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 {
|
||||
|
|
Loading…
Reference in a new issue