提交 7465e3a3 编写于 作者: A Alex Dima

Fixes #58254: better logic for restoring top of viewport

上级 80a9557b
...@@ -35,7 +35,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel ...@@ -35,7 +35,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
private hasFocus: boolean; private hasFocus: boolean;
private viewportStartLine: number; private viewportStartLine: number;
private viewportStartLineTrackedRange: string; private viewportStartLineTrackedRange: string;
private viewportStartLineTop: number; private viewportStartLineDelta: number;
private readonly lines: IViewModelLinesCollection; private readonly lines: IViewModelLinesCollection;
public readonly coordinatesConverter: ICoordinatesConverter; public readonly coordinatesConverter: ICoordinatesConverter;
public readonly viewLayout: ViewLayout; public readonly viewLayout: ViewLayout;
...@@ -51,7 +51,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel ...@@ -51,7 +51,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
this.hasFocus = false; this.hasFocus = false;
this.viewportStartLine = -1; this.viewportStartLine = -1;
this.viewportStartLineTrackedRange = null; this.viewportStartLineTrackedRange = null;
this.viewportStartLineTop = 0; this.viewportStartLineDelta = 0;
if (USE_IDENTITY_LINES_COLLECTION && this.model.isTooLargeForTokenization()) { if (USE_IDENTITY_LINES_COLLECTION && this.model.isTooLargeForTokenization()) {
...@@ -162,7 +162,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel ...@@ -162,7 +162,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
if (restorePreviousViewportStart && previousViewportStartModelPosition) { if (restorePreviousViewportStart && previousViewportStartModelPosition) {
const viewPosition = this.coordinatesConverter.convertModelPositionToViewPosition(previousViewportStartModelPosition); const viewPosition = this.coordinatesConverter.convertModelPositionToViewPosition(previousViewportStartModelPosition);
const viewPositionTop = this.viewLayout.getVerticalOffsetForLineNumber(viewPosition.lineNumber); 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 ...@@ -252,7 +252,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
if (modelRange) { if (modelRange) {
const viewPosition = this.coordinatesConverter.convertModelPositionToViewPosition(modelRange.getStartPosition()); const viewPosition = this.coordinatesConverter.convertModelPositionToViewPosition(modelRange.getStartPosition());
const viewPositionTop = this.viewLayout.getVerticalOffsetForLineNumber(viewPosition.lineNumber); 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 ...@@ -450,7 +450,9 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
this.viewportStartLine = startLineNumber; this.viewportStartLine = startLineNumber;
let position = this.coordinatesConverter.convertViewPositionToModelPosition(new Position(startLineNumber, this.getLineMinColumn(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.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 { public getActiveIndentGuide(lineNumber: number, minLineNumber: number, maxLineNumber: number): IActiveIndentGuideInfo {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册