diff --git a/src/vs/editor/browser/editorBrowser.ts b/src/vs/editor/browser/editorBrowser.ts index 79d5d54e20bbfd625e48f67de1ae2a2d6df0b44a..ff17e8b8e36bd223f491185a009fb91f8fc0a3dd 100644 --- a/src/vs/editor/browser/editorBrowser.ts +++ b/src/vs/editor/browser/editorBrowser.ts @@ -619,11 +619,6 @@ export interface ICodeEditor extends editorCommon.IEditor { */ getLayoutInfo(): editorOptions.EditorLayoutInfo; - /** - * Returns the range that is currently centered in the view port. - */ - getCenteredRangeInViewport(): Range; - /** * Returns the ranges that are currently visible. * Does not account for horizontal scrolling. diff --git a/src/vs/editor/common/commonCodeEditor.ts b/src/vs/editor/common/commonCodeEditor.ts index c37585f2df699afb71bf0d3c44ca2910cb763345..b233f9e4f2cf832aaa5b44fe57a1499d710c7106 100644 --- a/src/vs/editor/common/commonCodeEditor.ts +++ b/src/vs/editor/common/commonCodeEditor.ts @@ -253,13 +253,6 @@ export abstract class CommonCodeEditor extends Disposable { } } - public getCenteredRangeInViewport(): Range { - if (!this.hasView) { - return null; - } - return this.viewModel.getCenteredRangeInViewport(); - } - public getVisibleRanges(): Range[] { if (!this.hasView) { return []; diff --git a/src/vs/editor/common/viewModel/viewModelImpl.ts b/src/vs/editor/common/viewModel/viewModelImpl.ts index fa9273c3f0b2965c27b4c9903d4068eedb622a9a..3f9ff85de8c7c39e46ed8ff609bce83876be0311 100644 --- a/src/vs/editor/common/viewModel/viewModelImpl.ts +++ b/src/vs/editor/common/viewModel/viewModelImpl.ts @@ -33,6 +33,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel private readonly configuration: editorCommon.IConfiguration; private readonly model: ITextModel; private hasFocus: boolean; + private viewportStartLine: number; private viewportStartLineTrackedRange: string; private viewportStartLineTop: number; private readonly lines: IViewModelLinesCollection; @@ -41,8 +42,6 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel private readonly decorations: ViewModelDecorations; - private _centeredViewLine: number; - constructor(editorId: number, configuration: editorCommon.IConfiguration, model: ITextModel, scheduleAtNextAnimationFrame: (callback: () => void) => IDisposable) { super(); @@ -50,6 +49,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel this.configuration = configuration; this.model = model; this.hasFocus = false; + this.viewportStartLine = -1; this.viewportStartLineTrackedRange = null; this.viewportStartLineTop = 0; @@ -89,8 +89,6 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel } })); - this._centeredViewLine = -1; - this.decorations = new ViewModelDecorations(this.editorId, this.model, this.configuration, this.lines, this.coordinatesConverter); this._registerModelEvents(); @@ -130,8 +128,12 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel private _onConfigurationChanged(eventsCollector: viewEvents.ViewEventsCollector, e: IConfigurationChangedEvent): void { // We might need to restore the current centered view range, so save it (if available) - const previousCenteredModelRange = this.getCenteredRangeInViewport(); - let revealPreviousCenteredModelRange = false; + let previousViewportStartModelPosition: Position = null; + if (this.viewportStartLine !== -1) { + let previousViewportStartViewPosition = new Position(this.viewportStartLine, this.getLineMinColumn(this.viewportStartLine)); + previousViewportStartModelPosition = this.coordinatesConverter.convertViewPositionToModelPosition(previousViewportStartViewPosition); + } + let restorePreviousViewportStart = false; const conf = this.configuration.editor; @@ -144,7 +146,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel if (this.viewLayout.getCurrentScrollTop() !== 0) { // Never change the scroll position from 0 to something else... - revealPreviousCenteredModelRange = true; + restorePreviousViewportStart = true; } } @@ -157,17 +159,10 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel eventsCollector.emit(new viewEvents.ViewConfigurationChangedEvent(e)); this.viewLayout.onConfigurationChanged(e); - if (revealPreviousCenteredModelRange && previousCenteredModelRange) { - // modelLine -> viewLine - const newCenteredViewRange = this.coordinatesConverter.convertModelRangeToViewRange(previousCenteredModelRange); - - // Send a reveal event to restore the centered content - eventsCollector.emit(new viewEvents.ViewRevealRangeRequestEvent( - newCenteredViewRange, - viewEvents.VerticalRevealType.Center, - false, - editorCommon.ScrollType.Immediate - )); + if (restorePreviousViewportStart && previousViewportStartModelPosition) { + const viewPosition = this.coordinatesConverter.convertModelPositionToViewPosition(previousViewportStartModelPosition); + const viewPositionTop = this.viewLayout.getVerticalOffsetForLineNumber(viewPosition.lineNumber); + this.viewLayout.deltaScrollNow(0, viewPositionTop - this.viewportStartLineTop); } } @@ -247,7 +242,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel } // Update the configuration and reset the centered view line - this._centeredViewLine = -1; + this.viewportStartLine = -1; this.configuration.setMaxLineNumber(this.model.getLineCount()); // Recover viewport @@ -332,16 +327,6 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel } } - public getCenteredRangeInViewport(): Range { - if (this._centeredViewLine === -1) { - // Never got rendered or not rendered since last content change event - return null; - } - let viewLineNumber = this._centeredViewLine; - let currentCenteredViewRange = new Range(viewLineNumber, this.getLineMinColumn(viewLineNumber), viewLineNumber, this.getLineMaxColumn(viewLineNumber)); - return this.coordinatesConverter.convertViewRangeToModelRange(currentCenteredViewRange); - } - public getVisibleRanges(): Range[] { const visibleViewRange = this.getCompletelyVisibleViewRange(); const visibleRange = this.coordinatesConverter.convertViewRangeToModelRange(visibleViewRange); @@ -458,9 +443,9 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel * Gives a hint that a lot of requests are about to come in for these line numbers. */ public setViewport(startLineNumber: number, endLineNumber: number, centeredLineNumber: number): void { - this._centeredViewLine = centeredLineNumber; this.lines.warmUpLookupCache(startLineNumber, endLineNumber); + 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); diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index d7164a77c2e9385c98e0151e85c77beabefa25b5..effd0f9e66d110f6a0aa7c746c8ba4d9b8eb59e1 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -3782,10 +3782,6 @@ declare namespace monaco.editor { * Get the layout info for the editor. */ getLayoutInfo(): EditorLayoutInfo; - /** - * Returns the range that is currently centered in the view port. - */ - getCenteredRangeInViewport(): Range; /** * Returns the ranges that are currently visible. * Does not account for horizontal scrolling.