提交 5ab42104 编写于 作者: A Alex Dima

Establish IViewLayout shape

上级 1c3d756b
...@@ -127,7 +127,6 @@ export class View extends ViewEventHandler implements editorBrowser.IView, IDisp ...@@ -127,7 +127,6 @@ export class View extends ViewEventHandler implements editorBrowser.IView, IDisp
// - whitespaces (a.k.a. view zones) management & co. // - whitespaces (a.k.a. view zones) management & co.
// - line heights updating & co. // - line heights updating & co.
this.layoutProvider = new LayoutProvider(configuration, model, this.eventDispatcher); this.layoutProvider = new LayoutProvider(configuration, model, this.eventDispatcher);
this.eventDispatcher.addEventHandler(this.layoutProvider);
this._scrollbar = new EditorScrollbar(this.layoutProvider.getScrollable(), configuration, this.eventDispatcher, this.linesContent, this.domNode, this.overflowGuardContainer); this._scrollbar = new EditorScrollbar(this.layoutProvider.getScrollable(), configuration, this.eventDispatcher, this.linesContent, this.domNode, this.overflowGuardContainer);
...@@ -448,6 +447,18 @@ export class View extends ViewEventHandler implements editorBrowser.IView, IDisp ...@@ -448,6 +447,18 @@ export class View extends ViewEventHandler implements editorBrowser.IView, IDisp
// --- begin event handlers // --- begin event handlers
public onModelFlushed(): boolean {
this.layoutProvider.onModelFlushed();
return false;
}
public onModelLinesDeleted(e: editorCommon.IViewLinesDeletedEvent): boolean {
this.layoutProvider.onModelLinesDeleted(e);
return false;
}
public onModelLinesInserted(e: editorCommon.IViewLinesInsertedEvent): boolean {
this.layoutProvider.onModelLinesInserted(e);
return false;
}
public onLayoutChanged(layoutInfo: editorCommon.EditorLayoutInfo): boolean { public onLayoutChanged(layoutInfo: editorCommon.EditorLayoutInfo): boolean {
if (browser.isChrome) { if (browser.isChrome) {
/* tslint:disable:no-unused-variable */ /* tslint:disable:no-unused-variable */
...@@ -479,6 +490,7 @@ export class View extends ViewEventHandler implements editorBrowser.IView, IDisp ...@@ -479,6 +490,7 @@ export class View extends ViewEventHandler implements editorBrowser.IView, IDisp
if (e.viewInfo.ariaLabel) { if (e.viewInfo.ariaLabel) {
this.textArea.setAttribute('aria-label', this._context.configuration.editor.viewInfo.ariaLabel); this.textArea.setAttribute('aria-label', this._context.configuration.editor.viewInfo.ariaLabel);
} }
this.layoutProvider.onConfigurationChanged(e);
return false; return false;
} }
public onScrollChanged(e: editorCommon.IScrollEvent): boolean { public onScrollChanged(e: editorCommon.IScrollEvent): boolean {
......
...@@ -12,21 +12,21 @@ import { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay'; ...@@ -12,21 +12,21 @@ import { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay';
import { Configuration } from 'vs/editor/browser/config/configuration'; import { Configuration } from 'vs/editor/browser/config/configuration';
import { ViewContext } from 'vs/editor/common/view/viewContext'; import { ViewContext } from 'vs/editor/common/view/viewContext';
import { IRenderingContext, IRestrictedRenderingContext } from 'vs/editor/common/view/renderingContext'; import { IRenderingContext, IRestrictedRenderingContext } from 'vs/editor/common/view/renderingContext';
import { ILayoutProvider } from 'vs/editor/browser/viewLayout/layoutProvider'; import { IViewLayout } from 'vs/editor/common/viewModel/viewModel';
import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData'; import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData';
export class ViewOverlays extends ViewLayer<ViewOverlayLine> { export class ViewOverlays extends ViewLayer<ViewOverlayLine> {
private _dynamicOverlays: DynamicViewOverlay[]; private _dynamicOverlays: DynamicViewOverlay[];
private _isFocused: boolean; private _isFocused: boolean;
_layoutProvider: ILayoutProvider; protected _viewLayout: IViewLayout;
constructor(context: ViewContext, layoutProvider: ILayoutProvider) { constructor(context: ViewContext, viewLayout: IViewLayout) {
super(context); super(context);
this._dynamicOverlays = []; this._dynamicOverlays = [];
this._isFocused = false; this._isFocused = false;
this._layoutProvider = layoutProvider; this._viewLayout = viewLayout;
this.domNode.setClassName('view-overlays'); this.domNode.setClassName('view-overlays');
} }
...@@ -48,7 +48,7 @@ export class ViewOverlays extends ViewLayer<ViewOverlayLine> { ...@@ -48,7 +48,7 @@ export class ViewOverlays extends ViewLayer<ViewOverlayLine> {
public dispose(): void { public dispose(): void {
super.dispose(); super.dispose();
this._layoutProvider = null; this._viewLayout = null;
for (let i = 0, len = this._dynamicOverlays.length; i < len; i++) { for (let i = 0, len = this._dynamicOverlays.length; i < len; i++) {
let dynamicOverlay = this._dynamicOverlays[i]; let dynamicOverlay = this._dynamicOverlays[i];
...@@ -183,10 +183,10 @@ export class ContentViewOverlays extends ViewOverlays { ...@@ -183,10 +183,10 @@ export class ContentViewOverlays extends ViewOverlays {
private _scrollWidth: number; private _scrollWidth: number;
private _contentWidth: number; private _contentWidth: number;
constructor(context: ViewContext, layoutProvider: ILayoutProvider) { constructor(context: ViewContext, viewLayout: IViewLayout) {
super(context, layoutProvider); super(context, viewLayout);
this._scrollWidth = this._layoutProvider.getScrollWidth(); this._scrollWidth = this._viewLayout.getScrollWidth();
this._contentWidth = this._context.configuration.editor.layoutInfo.contentWidth; this._contentWidth = this._context.configuration.editor.layoutInfo.contentWidth;
this.domNode.setWidth(this._scrollWidth); this.domNode.setWidth(this._scrollWidth);
...@@ -216,8 +216,8 @@ export class MarginViewOverlays extends ViewOverlays { ...@@ -216,8 +216,8 @@ export class MarginViewOverlays extends ViewOverlays {
private _contentLeft: number; private _contentLeft: number;
private _canUseTranslate3d: boolean; private _canUseTranslate3d: boolean;
constructor(context: ViewContext, layoutProvider: ILayoutProvider) { constructor(context: ViewContext, viewLayout: IViewLayout) {
super(context, layoutProvider); super(context, viewLayout);
this._contentLeft = context.configuration.editor.layoutInfo.contentLeft; this._contentLeft = context.configuration.editor.layoutInfo.contentLeft;
this._canUseTranslate3d = context.configuration.editor.viewInfo.canUseTranslate3d; this._canUseTranslate3d = context.configuration.editor.viewInfo.canUseTranslate3d;
...@@ -250,7 +250,7 @@ export class MarginViewOverlays extends ViewOverlays { ...@@ -250,7 +250,7 @@ export class MarginViewOverlays extends ViewOverlays {
_viewOverlaysRender(ctx: IRestrictedRenderingContext): void { _viewOverlaysRender(ctx: IRestrictedRenderingContext): void {
super._viewOverlaysRender(ctx); super._viewOverlaysRender(ctx);
let height = Math.min(this._layoutProvider.getTotalHeight(), 1000000); let height = Math.min(this._viewLayout.getTotalHeight(), 1000000);
this.domNode.setHeight(height); this.domNode.setHeight(height);
this.domNode.setWidth(this._contentLeft); this.domNode.setWidth(this._contentLeft);
} }
......
...@@ -8,89 +8,11 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle'; ...@@ -8,89 +8,11 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { Scrollable, ScrollbarVisibility } from 'vs/base/common/scrollable'; import { Scrollable, ScrollbarVisibility } from 'vs/base/common/scrollable';
import * as editorCommon from 'vs/editor/common/editorCommon'; import * as editorCommon from 'vs/editor/common/editorCommon';
import { LinesLayout } from 'vs/editor/common/viewLayout/linesLayout'; import { LinesLayout } from 'vs/editor/common/viewLayout/linesLayout';
import { ViewEventHandler } from 'vs/editor/common/viewModel/viewEventHandler'; import { IViewLayout, IViewModel } from 'vs/editor/common/viewModel/viewModel';
import { IViewModel } from 'vs/editor/common/viewModel/viewModel';
import { IPartialViewLinesViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData'; import { IPartialViewLinesViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData';
import { IViewEventBus } from 'vs/editor/common/view/viewContext'; import { IViewEventBus } from 'vs/editor/common/view/viewContext';
import { ILayoutProvider as IRenderingLayoutProvider } from 'vs/editor/common/view/renderingContext';
export interface IWhitespaceManager { export class LayoutProvider implements IDisposable, IViewLayout {
/**
* Reserve rendering space.
* @param height is specified in pixels.
* @return an identifier that can be later used to remove or change the whitespace.
*/
addWhitespace(afterLineNumber: number, ordinal: number, height: number): number;
/**
* Change the properties of a whitespace.
* @param height is specified in pixels.
*/
changeWhitespace(id: number, newAfterLineNumber: number, newHeight: number): boolean;
/**
* Remove rendering space
*/
removeWhitespace(id: number): boolean;
/**
* Get the layout information for whitespaces currently in the viewport
*/
getWhitespaceViewportData(): editorCommon.IViewWhitespaceViewportData[];
getWhitespaces(): editorCommon.IEditorWhitespace[];
}
export interface ILayoutProvider extends IVerticalLayoutProvider, IScrollingProvider {
dispose(): void;
getCurrentViewport(): editorCommon.Viewport;
onMaxLineWidthChanged(width: number): void;
saveState(): editorCommon.IViewState;
restoreState(state: editorCommon.IViewState): void;
}
export interface IScrollingProvider {
// This is for the glyphs, line numbers, etc.
getScrolledTopFromAbsoluteTop(top: number): number;
getScrollWidth(): number;
getScrollLeft(): number;
getScrollHeight(): number;
getScrollTop(): number;
setScrollPosition(position: editorCommon.INewScrollPosition): void;
}
export interface IVerticalLayoutProvider {
/**
* Compute vertical offset (top) of line number
*/
getVerticalOffsetForLineNumber(lineNumber: number): number;
/**
* Return line number at `verticalOffset` or closest line number
*/
getLineNumberAtVerticalOffset(verticalOffset: number): number;
/**
* Compute content height (including one extra scroll page if necessary)
*/
getTotalHeight(): number;
/**
* Compute the lines that need to be rendered in the current viewport position.
*/
getLinesViewportData(): IPartialViewLinesViewportData;
}
export class LayoutProvider extends ViewEventHandler implements IDisposable, ILayoutProvider, IWhitespaceManager, IRenderingLayoutProvider {
static LINES_HORIZONTAL_EXTRA_PX = 30; static LINES_HORIZONTAL_EXTRA_PX = 30;
...@@ -102,8 +24,6 @@ export class LayoutProvider extends ViewEventHandler implements IDisposable, ILa ...@@ -102,8 +24,6 @@ export class LayoutProvider extends ViewEventHandler implements IDisposable, ILa
private _scrollable: Scrollable; private _scrollable: Scrollable;
constructor(configuration: editorCommon.IConfiguration, model: IViewModel, privateViewEventBus: IViewEventBus) { constructor(configuration: editorCommon.IConfiguration, model: IViewModel, privateViewEventBus: IViewEventBus) {
super();
this._scrollable = new Scrollable(); this._scrollable = new Scrollable();
this._scrollable.updateState({ this._scrollable.updateState({
width: configuration.editor.layoutInfo.contentWidth, width: configuration.editor.layoutInfo.contentWidth,
...@@ -131,38 +51,31 @@ export class LayoutProvider extends ViewEventHandler implements IDisposable, ILa ...@@ -131,38 +51,31 @@ export class LayoutProvider extends ViewEventHandler implements IDisposable, ILa
return this._scrollable; return this._scrollable;
} }
private _updateLineCount(): void {
this._configuration.setMaxLineNumber(this._model.getMaxLineNumber());
}
public onHeightMaybeChanged(): void { public onHeightMaybeChanged(): void {
this._updateHeight(); this._updateHeight();
} }
// ---- begin view event handlers // ---- begin view event handlers
public onModelFlushed(): boolean { public onModelFlushed(): void {
this._linesLayout.onModelFlushed(this._model.getLineCount()); this._linesLayout.onModelFlushed(this._model.getLineCount());
this._updateLineCount(); this._configuration.setMaxLineNumber(this._model.getMaxLineNumber());
this._updateHeight(); this._updateHeight();
return false;
} }
public onModelLinesDeleted(e: editorCommon.IViewLinesDeletedEvent): boolean { public onModelLinesDeleted(e: editorCommon.IViewLinesDeletedEvent): void {
this._linesLayout.onModelLinesDeleted(e.fromLineNumber, e.toLineNumber); this._linesLayout.onModelLinesDeleted(e.fromLineNumber, e.toLineNumber);
this._updateLineCount(); this._configuration.setMaxLineNumber(this._model.getMaxLineNumber());
this._updateHeight(); this._updateHeight();
return false;
} }
public onModelLinesInserted(e: editorCommon.IViewLinesInsertedEvent): boolean { public onModelLinesInserted(e: editorCommon.IViewLinesInsertedEvent): void {
this._linesLayout.onModelLinesInserted(e.fromLineNumber, e.toLineNumber); this._linesLayout.onModelLinesInserted(e.fromLineNumber, e.toLineNumber);
this._updateLineCount(); this._configuration.setMaxLineNumber(this._model.getMaxLineNumber());
this._updateHeight(); this._updateHeight();
return false;
} }
public onConfigurationChanged(e: editorCommon.IConfigurationChangedEvent): boolean { public onConfigurationChanged(e: editorCommon.IConfigurationChangedEvent): void {
if (e.lineHeight) { if (e.lineHeight) {
this._linesLayout.setLineHeight(this._configuration.editor.lineHeight); this._linesLayout.setLineHeight(this._configuration.editor.lineHeight);
} }
...@@ -174,7 +87,6 @@ export class LayoutProvider extends ViewEventHandler implements IDisposable, ILa ...@@ -174,7 +87,6 @@ export class LayoutProvider extends ViewEventHandler implements IDisposable, ILa
this._emitLayoutChangedEvent(); this._emitLayoutChangedEvent();
} }
this._updateHeight(); this._updateHeight();
return false;
} }
private _updateHeight(): void { private _updateHeight(): void {
......
...@@ -10,33 +10,33 @@ import * as editorCommon from 'vs/editor/common/editorCommon'; ...@@ -10,33 +10,33 @@ import * as editorCommon from 'vs/editor/common/editorCommon';
import { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay'; import { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay';
import { ViewContext } from 'vs/editor/common/view/viewContext'; import { ViewContext } from 'vs/editor/common/view/viewContext';
import { IRenderingContext } from 'vs/editor/common/view/renderingContext'; import { IRenderingContext } from 'vs/editor/common/view/renderingContext';
import { ILayoutProvider } from 'vs/editor/browser/viewLayout/layoutProvider'; import { IViewLayout } from 'vs/editor/common/viewModel/viewModel';
export class CurrentLineHighlightOverlay extends DynamicViewOverlay { export class CurrentLineHighlightOverlay extends DynamicViewOverlay {
private _context: ViewContext; private _context: ViewContext;
private _lineHeight: number; private _lineHeight: number;
private _readOnly: boolean; private _readOnly: boolean;
private _renderLineHighlight: 'none' | 'gutter' | 'line' | 'all'; private _renderLineHighlight: 'none' | 'gutter' | 'line' | 'all';
private _layoutProvider: ILayoutProvider; private _viewLayout: IViewLayout;
private _selectionIsEmpty: boolean; private _selectionIsEmpty: boolean;
private _primaryCursorIsInEditableRange: boolean; private _primaryCursorIsInEditableRange: boolean;
private _primaryCursorLineNumber: number; private _primaryCursorLineNumber: number;
private _scrollWidth: number; private _scrollWidth: number;
private _contentWidth: number; private _contentWidth: number;
constructor(context: ViewContext, layoutProvider: ILayoutProvider) { constructor(context: ViewContext, viewLayout: IViewLayout) {
super(); super();
this._context = context; this._context = context;
this._lineHeight = this._context.configuration.editor.lineHeight; this._lineHeight = this._context.configuration.editor.lineHeight;
this._readOnly = this._context.configuration.editor.readOnly; this._readOnly = this._context.configuration.editor.readOnly;
this._renderLineHighlight = this._context.configuration.editor.viewInfo.renderLineHighlight; this._renderLineHighlight = this._context.configuration.editor.viewInfo.renderLineHighlight;
this._layoutProvider = layoutProvider; this._viewLayout = viewLayout;
this._selectionIsEmpty = true; this._selectionIsEmpty = true;
this._primaryCursorIsInEditableRange = true; this._primaryCursorIsInEditableRange = true;
this._primaryCursorLineNumber = 1; this._primaryCursorLineNumber = 1;
this._scrollWidth = this._layoutProvider.getScrollWidth(); this._scrollWidth = this._viewLayout.getScrollWidth();
this._contentWidth = this._context.configuration.editor.layoutInfo.contentWidth; this._contentWidth = this._context.configuration.editor.layoutInfo.contentWidth;
this._context.addEventHandler(this); this._context.addEventHandler(this);
...@@ -53,7 +53,7 @@ export class CurrentLineHighlightOverlay extends DynamicViewOverlay { ...@@ -53,7 +53,7 @@ export class CurrentLineHighlightOverlay extends DynamicViewOverlay {
this._primaryCursorIsInEditableRange = true; this._primaryCursorIsInEditableRange = true;
this._selectionIsEmpty = true; this._selectionIsEmpty = true;
this._primaryCursorLineNumber = 1; this._primaryCursorLineNumber = 1;
this._scrollWidth = this._layoutProvider.getScrollWidth(); this._scrollWidth = this._viewLayout.getScrollWidth();
return true; return true;
} }
public onModelLinesDeleted(e: editorCommon.IViewLinesDeletedEvent): boolean { public onModelLinesDeleted(e: editorCommon.IViewLinesDeletedEvent): boolean {
......
...@@ -10,24 +10,24 @@ import * as editorCommon from 'vs/editor/common/editorCommon'; ...@@ -10,24 +10,24 @@ import * as editorCommon from 'vs/editor/common/editorCommon';
import { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay'; import { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay';
import { ViewContext } from 'vs/editor/common/view/viewContext'; import { ViewContext } from 'vs/editor/common/view/viewContext';
import { IRenderingContext } from 'vs/editor/common/view/renderingContext'; import { IRenderingContext } from 'vs/editor/common/view/renderingContext';
import { ILayoutProvider } from 'vs/editor/browser/viewLayout/layoutProvider'; import { IViewLayout } from 'vs/editor/common/viewModel/viewModel';
export class CurrentLineMarginHighlightOverlay extends DynamicViewOverlay { export class CurrentLineMarginHighlightOverlay extends DynamicViewOverlay {
private _context: ViewContext; private _context: ViewContext;
private _lineHeight: number; private _lineHeight: number;
private _renderLineHighlight: 'none' | 'gutter' | 'line' | 'all'; private _renderLineHighlight: 'none' | 'gutter' | 'line' | 'all';
private _layoutProvider: ILayoutProvider; private _viewLayout: IViewLayout;
private _primaryCursorIsInEditableRange: boolean; private _primaryCursorIsInEditableRange: boolean;
private _primaryCursorLineNumber: number; private _primaryCursorLineNumber: number;
private _contentLeft: number; private _contentLeft: number;
constructor(context: ViewContext, layoutProvider: ILayoutProvider) { constructor(context: ViewContext, viewLayout: IViewLayout) {
super(); super();
this._context = context; this._context = context;
this._lineHeight = this._context.configuration.editor.lineHeight; this._lineHeight = this._context.configuration.editor.lineHeight;
this._renderLineHighlight = this._context.configuration.editor.viewInfo.renderLineHighlight; this._renderLineHighlight = this._context.configuration.editor.viewInfo.renderLineHighlight;
this._layoutProvider = layoutProvider; this._viewLayout = viewLayout;
this._primaryCursorIsInEditableRange = true; this._primaryCursorIsInEditableRange = true;
this._primaryCursorLineNumber = 1; this._primaryCursorLineNumber = 1;
......
...@@ -17,7 +17,7 @@ import { Configuration } from 'vs/editor/browser/config/configuration'; ...@@ -17,7 +17,7 @@ import { Configuration } from 'vs/editor/browser/config/configuration';
import { ViewContext } from 'vs/editor/common/view/viewContext'; import { ViewContext } from 'vs/editor/common/view/viewContext';
import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData'; import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData';
import { IViewLines, VisibleRange, LineVisibleRanges } from 'vs/editor/common/view/renderingContext'; import { IViewLines, VisibleRange, LineVisibleRanges } from 'vs/editor/common/view/renderingContext';
import { ILayoutProvider } from 'vs/editor/browser/viewLayout/layoutProvider'; import { IViewLayout } from 'vs/editor/common/viewModel/viewModel';
import { PartFingerprint, PartFingerprints } from 'vs/editor/browser/view/viewPart'; import { PartFingerprint, PartFingerprints } from 'vs/editor/browser/view/viewPart';
class LastRenderedData { class LastRenderedData {
...@@ -58,7 +58,7 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines { ...@@ -58,7 +58,7 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines {
private static HORIZONTAL_EXTRA_PX = 30; private static HORIZONTAL_EXTRA_PX = 30;
private _layoutProvider: ILayoutProvider; private _viewLayout: IViewLayout;
private _textRangeRestingSpot: HTMLElement; private _textRangeRestingSpot: HTMLElement;
// --- config // --- config
...@@ -75,14 +75,14 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines { ...@@ -75,14 +75,14 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines {
private _lastCursorRevealRangeHorizontallyEvent: editorCommon.IViewRevealRangeEvent; private _lastCursorRevealRangeHorizontallyEvent: editorCommon.IViewRevealRangeEvent;
private _lastRenderedData: LastRenderedData; private _lastRenderedData: LastRenderedData;
constructor(context: ViewContext, layoutProvider: ILayoutProvider) { constructor(context: ViewContext, viewLayout: IViewLayout) {
super(context); super(context);
this._lineHeight = this._context.configuration.editor.lineHeight; this._lineHeight = this._context.configuration.editor.lineHeight;
this._isViewportWrapping = this._context.configuration.editor.wrappingInfo.isViewportWrapping; this._isViewportWrapping = this._context.configuration.editor.wrappingInfo.isViewportWrapping;
this._revealHorizontalRightPadding = this._context.configuration.editor.viewInfo.revealHorizontalRightPadding; this._revealHorizontalRightPadding = this._context.configuration.editor.viewInfo.revealHorizontalRightPadding;
this._canUseTranslate3d = this._context.configuration.editor.viewInfo.canUseTranslate3d; this._canUseTranslate3d = this._context.configuration.editor.viewInfo.canUseTranslate3d;
this._viewLineOptions = new ViewLineOptions(this._context.configuration); this._viewLineOptions = new ViewLineOptions(this._context.configuration);
this._layoutProvider = layoutProvider; this._viewLayout = viewLayout;
PartFingerprints.write(this.domNode.domNode, PartFingerprint.ViewLines); PartFingerprints.write(this.domNode.domNode, PartFingerprint.ViewLines);
this.domNode.setClassName(ClassNames.VIEW_LINES); this.domNode.setClassName(ClassNames.VIEW_LINES);
...@@ -103,7 +103,7 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines { ...@@ -103,7 +103,7 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines {
public dispose(): void { public dispose(): void {
this._asyncUpdateLineWidths.dispose(); this._asyncUpdateLineWidths.dispose();
this._layoutProvider = null; this._viewLayout = null;
super.dispose(); super.dispose();
} }
...@@ -175,13 +175,13 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines { ...@@ -175,13 +175,13 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines {
} }
public onCursorRevealRange(e: editorCommon.IViewRevealRangeEvent): boolean { public onCursorRevealRange(e: editorCommon.IViewRevealRangeEvent): boolean {
let newScrollTop = this._computeScrollTopToRevealRange(this._layoutProvider.getCurrentViewport(), e.range, e.verticalType); let newScrollTop = this._computeScrollTopToRevealRange(this._viewLayout.getCurrentViewport(), e.range, e.verticalType);
if (e.revealHorizontal) { if (e.revealHorizontal) {
this._lastCursorRevealRangeHorizontallyEvent = e; this._lastCursorRevealRangeHorizontallyEvent = e;
} }
this._layoutProvider.setScrollPosition({ this._viewLayout.setScrollPosition({
scrollTop: newScrollTop scrollTop: newScrollTop
}); });
...@@ -189,9 +189,9 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines { ...@@ -189,9 +189,9 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines {
} }
public onCursorScrollRequest(e: editorCommon.IViewScrollRequestEvent): boolean { public onCursorScrollRequest(e: editorCommon.IViewScrollRequestEvent): boolean {
let currentScrollTop = this._layoutProvider.getScrollTop(); let currentScrollTop = this._viewLayout.getScrollTop();
let newScrollTop = currentScrollTop + e.deltaLines * this._lineHeight; let newScrollTop = currentScrollTop + e.deltaLines * this._lineHeight;
this._layoutProvider.setScrollPosition({ this._viewLayout.setScrollPosition({
scrollTop: newScrollTop scrollTop: newScrollTop
}); });
return true; return true;
...@@ -371,7 +371,7 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines { ...@@ -371,7 +371,7 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines {
continue; continue;
} }
let adjustedLineNumberVerticalOffset = this._layoutProvider.getVerticalOffsetForLineNumber(lineNumber) - bigNumbersDelta + deltaTop; let adjustedLineNumberVerticalOffset = this._viewLayout.getVerticalOffsetForLineNumber(lineNumber) - bigNumbersDelta + deltaTop;
for (let i = 0, len = visibleRangesForLine.length; i < len; i++) { for (let i = 0, len = visibleRangesForLine.length; i < len; i++) {
result.push(new VisibleRange(adjustedLineNumberVerticalOffset, visibleRangesForLine[i].left, visibleRangesForLine[i].width)); result.push(new VisibleRange(adjustedLineNumberVerticalOffset, visibleRangesForLine[i].left, visibleRangesForLine[i].width));
} }
...@@ -420,8 +420,8 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines { ...@@ -420,8 +420,8 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines {
super._renderLines(viewportData); super._renderLines(viewportData);
this._lastRenderedData.setBigNumbersDelta(viewportData.bigNumbersDelta); this._lastRenderedData.setBigNumbersDelta(viewportData.bigNumbersDelta);
this._lastRenderedData.setCurrentVisibleRange(viewportData.visibleRange); this._lastRenderedData.setCurrentVisibleRange(viewportData.visibleRange);
this.domNode.setWidth(this._layoutProvider.getScrollWidth()); this.domNode.setWidth(this._viewLayout.getScrollWidth());
this.domNode.setHeight(Math.min(this._layoutProvider.getTotalHeight(), 1000000)); this.domNode.setHeight(Math.min(this._viewLayout.getTotalHeight(), 1000000));
// (2) execute DOM writing that forces sync layout (e.g. textArea manipulation) // (2) execute DOM writing that forces sync layout (e.g. textArea manipulation)
onAfterLinesRendered(); onAfterLinesRendered();
...@@ -446,21 +446,21 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines { ...@@ -446,21 +446,21 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines {
} }
// set `scrollLeft` // set `scrollLeft`
this._layoutProvider.setScrollPosition({ this._viewLayout.setScrollPosition({
scrollLeft: newScrollLeft.scrollLeft scrollLeft: newScrollLeft.scrollLeft
}); });
} }
// (4) handle scrolling // (4) handle scrolling
if (this._canUseTranslate3d) { if (this._canUseTranslate3d) {
let transform = 'translate3d(' + -this._layoutProvider.getScrollLeft() + 'px, ' + viewportData.visibleRangesDeltaTop + 'px, 0px)'; let transform = 'translate3d(' + -this._viewLayout.getScrollLeft() + 'px, ' + viewportData.visibleRangesDeltaTop + 'px, 0px)';
StyleMutator.setTransform(<HTMLElement>this.domNode.domNode.parentNode, transform); StyleMutator.setTransform(<HTMLElement>this.domNode.domNode.parentNode, transform);
StyleMutator.setTop(<HTMLElement>this.domNode.domNode.parentNode, 0); // TODO@Alex StyleMutator.setTop(<HTMLElement>this.domNode.domNode.parentNode, 0); // TODO@Alex
StyleMutator.setLeft(<HTMLElement>this.domNode.domNode.parentNode, 0); // TODO@Alex StyleMutator.setLeft(<HTMLElement>this.domNode.domNode.parentNode, 0); // TODO@Alex
} else { } else {
StyleMutator.setTransform(<HTMLElement>this.domNode.domNode.parentNode, ''); StyleMutator.setTransform(<HTMLElement>this.domNode.domNode.parentNode, '');
StyleMutator.setTop(<HTMLElement>this.domNode.domNode.parentNode, viewportData.visibleRangesDeltaTop); // TODO@Alex StyleMutator.setTop(<HTMLElement>this.domNode.domNode.parentNode, viewportData.visibleRangesDeltaTop); // TODO@Alex
StyleMutator.setLeft(<HTMLElement>this.domNode.domNode.parentNode, -this._layoutProvider.getScrollLeft()); // TODO@Alex StyleMutator.setLeft(<HTMLElement>this.domNode.domNode.parentNode, -this._viewLayout.getScrollLeft()); // TODO@Alex
} }
// Update max line width (not so important, it is just so the horizontal scrollbar doesn't get too small) // Update max line width (not so important, it is just so the horizontal scrollbar doesn't get too small)
...@@ -473,7 +473,7 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines { ...@@ -473,7 +473,7 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines {
let iLineWidth = Math.ceil(lineWidth); let iLineWidth = Math.ceil(lineWidth);
if (this._maxLineWidth < iLineWidth) { if (this._maxLineWidth < iLineWidth) {
this._maxLineWidth = iLineWidth; this._maxLineWidth = iLineWidth;
this._layoutProvider.onMaxLineWidthChanged(this._maxLineWidth); this._viewLayout.onMaxLineWidthChanged(this._maxLineWidth);
} }
} }
...@@ -485,8 +485,8 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines { ...@@ -485,8 +485,8 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines {
let boxEndY: number; let boxEndY: number;
// Have a box that includes one extra line height (for the horizontal scrollbar) // Have a box that includes one extra line height (for the horizontal scrollbar)
boxStartY = this._layoutProvider.getVerticalOffsetForLineNumber(range.startLineNumber); boxStartY = this._viewLayout.getVerticalOffsetForLineNumber(range.startLineNumber);
boxEndY = this._layoutProvider.getVerticalOffsetForLineNumber(range.endLineNumber) + this._lineHeight; boxEndY = this._viewLayout.getVerticalOffsetForLineNumber(range.endLineNumber) + this._lineHeight;
if (verticalType === editorCommon.VerticalRevealType.Simple || verticalType === editorCommon.VerticalRevealType.Bottom) { if (verticalType === editorCommon.VerticalRevealType.Simple || verticalType === editorCommon.VerticalRevealType.Bottom) {
// Reveal one line more when the last line would be covered by the scrollbar - arrow down case or revealing a line explicitly at bottom // Reveal one line more when the last line would be covered by the scrollbar - arrow down case or revealing a line explicitly at bottom
boxEndY += this._lineHeight; boxEndY += this._lineHeight;
...@@ -522,7 +522,7 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines { ...@@ -522,7 +522,7 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines {
}; };
} }
let viewport = this._layoutProvider.getCurrentViewport(); let viewport = this._viewLayout.getCurrentViewport();
let viewportStartX = viewport.left; let viewportStartX = viewport.left;
let viewportEndX = viewportStartX + viewport.width; let viewportEndX = viewportStartX + viewport.width;
......
...@@ -11,20 +11,20 @@ import { ClassNames } from 'vs/editor/browser/editorBrowser'; ...@@ -11,20 +11,20 @@ import { ClassNames } from 'vs/editor/browser/editorBrowser';
import { ViewPart } from 'vs/editor/browser/view/viewPart'; import { ViewPart } from 'vs/editor/browser/view/viewPart';
import { ViewContext } from 'vs/editor/common/view/viewContext'; import { ViewContext } from 'vs/editor/common/view/viewContext';
import { IRenderingContext, IRestrictedRenderingContext } from 'vs/editor/common/view/renderingContext'; import { IRenderingContext, IRestrictedRenderingContext } from 'vs/editor/common/view/renderingContext';
import { ILayoutProvider } from 'vs/editor/browser/viewLayout/layoutProvider'; import { IViewLayout } from 'vs/editor/common/viewModel/viewModel';
export class Margin extends ViewPart { export class Margin extends ViewPart {
public domNode: HTMLElement; public domNode: HTMLElement;
private _layoutProvider: ILayoutProvider; private _viewLayout: IViewLayout;
private _canUseTranslate3d: boolean; private _canUseTranslate3d: boolean;
private _contentLeft: number; private _contentLeft: number;
private _glyphMarginLeft: number; private _glyphMarginLeft: number;
private _glyphMarginWidth: number; private _glyphMarginWidth: number;
private _glyphMarginBackgroundDomNode: FastDomNode; private _glyphMarginBackgroundDomNode: FastDomNode;
constructor(context: ViewContext, layoutProvider: ILayoutProvider) { constructor(context: ViewContext, viewLayout: IViewLayout) {
super(context); super(context);
this._layoutProvider = layoutProvider; this._viewLayout = viewLayout;
this._canUseTranslate3d = this._context.configuration.editor.viewInfo.canUseTranslate3d; this._canUseTranslate3d = this._context.configuration.editor.viewInfo.canUseTranslate3d;
this._contentLeft = this._context.configuration.editor.layoutInfo.contentLeft; this._contentLeft = this._context.configuration.editor.layoutInfo.contentLeft;
this._glyphMarginLeft = this._context.configuration.editor.layoutInfo.glyphMarginLeft; this._glyphMarginLeft = this._context.configuration.editor.layoutInfo.glyphMarginLeft;
...@@ -89,7 +89,7 @@ export class Margin extends ViewPart { ...@@ -89,7 +89,7 @@ export class Margin extends ViewPart {
StyleMutator.setTop(this.domNode, ctx.viewportData.visibleRangesDeltaTop); StyleMutator.setTop(this.domNode, ctx.viewportData.visibleRangesDeltaTop);
} }
let height = Math.min(this._layoutProvider.getTotalHeight(), 1000000); let height = Math.min(this._viewLayout.getTotalHeight(), 1000000);
StyleMutator.setHeight(this.domNode, height); StyleMutator.setHeight(this.domNode, height);
StyleMutator.setWidth(this.domNode, this._contentLeft); StyleMutator.setWidth(this.domNode, this._contentLeft);
......
...@@ -11,19 +11,19 @@ import * as editorCommon from 'vs/editor/common/editorCommon'; ...@@ -11,19 +11,19 @@ import * as editorCommon from 'vs/editor/common/editorCommon';
import { ViewPart } from 'vs/editor/browser/view/viewPart'; import { ViewPart } from 'vs/editor/browser/view/viewPart';
import { ViewContext } from 'vs/editor/common/view/viewContext'; import { ViewContext } from 'vs/editor/common/view/viewContext';
import { IRenderingContext, IRestrictedRenderingContext } from 'vs/editor/common/view/renderingContext'; import { IRenderingContext, IRestrictedRenderingContext } from 'vs/editor/common/view/renderingContext';
import { ILayoutProvider } from 'vs/editor/browser/viewLayout/layoutProvider'; import { IViewLayout } from 'vs/editor/common/viewModel/viewModel';
export class Rulers extends ViewPart { export class Rulers extends ViewPart {
public domNode: HTMLElement; public domNode: HTMLElement;
private _layoutProvider: ILayoutProvider; private _viewLayout: IViewLayout;
private _rulers: number[]; private _rulers: number[];
private _height: number; private _height: number;
private _typicalHalfwidthCharacterWidth: number; private _typicalHalfwidthCharacterWidth: number;
constructor(context: ViewContext, layoutProvider: ILayoutProvider) { constructor(context: ViewContext, viewLayout: IViewLayout) {
super(context); super(context);
this._layoutProvider = layoutProvider; this._viewLayout = viewLayout;
this.domNode = document.createElement('div'); this.domNode = document.createElement('div');
this.domNode.className = 'view-rulers'; this.domNode.className = 'view-rulers';
this._rulers = this._context.configuration.editor.viewInfo.rulers; this._rulers = this._context.configuration.editor.viewInfo.rulers;
...@@ -79,7 +79,7 @@ export class Rulers extends ViewPart { ...@@ -79,7 +79,7 @@ export class Rulers extends ViewPart {
this.domNode.appendChild(node); this.domNode.appendChild(node);
} }
StyleMutator.setHeight(node, Math.min(this._layoutProvider.getTotalHeight(), 1000000)); StyleMutator.setHeight(node, Math.min(this._viewLayout.getTotalHeight(), 1000000));
StyleMutator.setLeft(node, this._rulers[i] * this._typicalHalfwidthCharacterWidth); StyleMutator.setLeft(node, this._rulers[i] * this._typicalHalfwidthCharacterWidth);
} }
} }
......
...@@ -12,7 +12,7 @@ import { ViewPart } from 'vs/editor/browser/view/viewPart'; ...@@ -12,7 +12,7 @@ import { ViewPart } from 'vs/editor/browser/view/viewPart';
import { ViewContext } from 'vs/editor/common/view/viewContext'; import { ViewContext } from 'vs/editor/common/view/viewContext';
import { Position } from 'vs/editor/common/core/position'; import { Position } from 'vs/editor/common/core/position';
import { IRenderingContext, IRestrictedRenderingContext } from 'vs/editor/common/view/renderingContext'; import { IRenderingContext, IRestrictedRenderingContext } from 'vs/editor/common/view/renderingContext';
import { IWhitespaceManager } from 'vs/editor/browser/viewLayout/layoutProvider'; import { IViewLayout } from 'vs/editor/common/viewModel/viewModel';
export interface IMyViewZone { export interface IMyViewZone {
whitespaceId: number; whitespaceId: number;
...@@ -31,7 +31,7 @@ interface IComputedViewZoneProps { ...@@ -31,7 +31,7 @@ interface IComputedViewZoneProps {
export class ViewZones extends ViewPart { export class ViewZones extends ViewPart {
private _whitespaceManager: IWhitespaceManager; private _viewLayout: IViewLayout;
private _zones: { [id: string]: IMyViewZone; }; private _zones: { [id: string]: IMyViewZone; };
private _lineHeight: number; private _lineHeight: number;
private _contentWidth: number; private _contentWidth: number;
...@@ -41,12 +41,12 @@ export class ViewZones extends ViewPart { ...@@ -41,12 +41,12 @@ export class ViewZones extends ViewPart {
public marginDomNode: HTMLElement; public marginDomNode: HTMLElement;
constructor(context: ViewContext, whitespaceManager: IWhitespaceManager) { constructor(context: ViewContext, viewLayout: IViewLayout) {
super(context); super(context);
this._lineHeight = this._context.configuration.editor.lineHeight; this._lineHeight = this._context.configuration.editor.lineHeight;
this._contentWidth = this._context.configuration.editor.layoutInfo.contentWidth; this._contentWidth = this._context.configuration.editor.layoutInfo.contentWidth;
this._contentLeft = this._context.configuration.editor.layoutInfo.contentLeft; this._contentLeft = this._context.configuration.editor.layoutInfo.contentLeft;
this._whitespaceManager = whitespaceManager; this._viewLayout = viewLayout;
this.domNode = document.createElement('div'); this.domNode = document.createElement('div');
this.domNode.className = ClassNames.VIEW_ZONES; this.domNode.className = ClassNames.VIEW_ZONES;
...@@ -65,7 +65,7 @@ export class ViewZones extends ViewPart { ...@@ -65,7 +65,7 @@ export class ViewZones extends ViewPart {
public dispose(): void { public dispose(): void {
super.dispose(); super.dispose();
this._whitespaceManager = null; this._viewLayout = null;
this._zones = {}; this._zones = {};
} }
...@@ -79,7 +79,7 @@ export class ViewZones extends ViewPart { ...@@ -79,7 +79,7 @@ export class ViewZones extends ViewPart {
let id = keys[i]; let id = keys[i];
let zone = this._zones[id]; let zone = this._zones[id];
let props = this._computeWhitespaceProps(zone.delegate); let props = this._computeWhitespaceProps(zone.delegate);
if (this._whitespaceManager.changeWhitespace(parseInt(id, 10), props.afterViewLineNumber, props.heightInPx)) { if (this._viewLayout.changeWhitespace(parseInt(id, 10), props.afterViewLineNumber, props.heightInPx)) {
this._safeCallOnComputedHeight(zone.delegate, props.heightInPx); this._safeCallOnComputedHeight(zone.delegate, props.heightInPx);
hadAChange = true; hadAChange = true;
} }
...@@ -188,7 +188,7 @@ export class ViewZones extends ViewPart { ...@@ -188,7 +188,7 @@ export class ViewZones extends ViewPart {
public addZone(zone: IViewZone): number { public addZone(zone: IViewZone): number {
let props = this._computeWhitespaceProps(zone); let props = this._computeWhitespaceProps(zone);
let whitespaceId = this._whitespaceManager.addWhitespace(props.afterViewLineNumber, this._getZoneOrdinal(zone), props.heightInPx); let whitespaceId = this._viewLayout.addWhitespace(props.afterViewLineNumber, this._getZoneOrdinal(zone), props.heightInPx);
let myZone: IMyViewZone = { let myZone: IMyViewZone = {
whitespaceId: whitespaceId, whitespaceId: whitespaceId,
...@@ -224,7 +224,7 @@ export class ViewZones extends ViewPart { ...@@ -224,7 +224,7 @@ export class ViewZones extends ViewPart {
if (this._zones.hasOwnProperty(id.toString())) { if (this._zones.hasOwnProperty(id.toString())) {
let zone = this._zones[id.toString()]; let zone = this._zones[id.toString()];
delete this._zones[id.toString()]; delete this._zones[id.toString()];
this._whitespaceManager.removeWhitespace(zone.whitespaceId); this._viewLayout.removeWhitespace(zone.whitespaceId);
zone.delegate.domNode.removeAttribute('monaco-visible-view-zone'); zone.delegate.domNode.removeAttribute('monaco-visible-view-zone');
zone.delegate.domNode.removeAttribute('monaco-view-zone'); zone.delegate.domNode.removeAttribute('monaco-view-zone');
...@@ -249,7 +249,7 @@ export class ViewZones extends ViewPart { ...@@ -249,7 +249,7 @@ export class ViewZones extends ViewPart {
let zone = this._zones[id.toString()]; let zone = this._zones[id.toString()];
let props = this._computeWhitespaceProps(zone.delegate); let props = this._computeWhitespaceProps(zone.delegate);
// let newOrdinal = this._getZoneOrdinal(zone.delegate); // let newOrdinal = this._getZoneOrdinal(zone.delegate);
changed = this._whitespaceManager.changeWhitespace(zone.whitespaceId, props.afterViewLineNumber, props.heightInPx) || changed; changed = this._viewLayout.changeWhitespace(zone.whitespaceId, props.afterViewLineNumber, props.heightInPx) || changed;
// TODO@Alex: change `newOrdinal` too // TODO@Alex: change `newOrdinal` too
if (changed) { if (changed) {
...@@ -306,7 +306,7 @@ export class ViewZones extends ViewPart { ...@@ -306,7 +306,7 @@ export class ViewZones extends ViewPart {
} }
public render(ctx: IRestrictedRenderingContext): void { public render(ctx: IRestrictedRenderingContext): void {
let visibleWhitespaces = this._whitespaceManager.getWhitespaceViewportData(); let visibleWhitespaces = this._viewLayout.getWhitespaceViewportData();
let visibleZones: { [id: string]: editorCommon.IViewWhitespaceViewportData; } = {}; let visibleZones: { [id: string]: editorCommon.IViewWhitespaceViewportData; } = {};
let hasVisibleZone = false; let hasVisibleZone = false;
......
...@@ -4,20 +4,10 @@ ...@@ -4,20 +4,10 @@
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
'use strict'; 'use strict';
import { ViewModelDecoration } from 'vs/editor/common/viewModel/viewModel'; import { IViewLayout, ViewModelDecoration } from 'vs/editor/common/viewModel/viewModel';
import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData'; import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData';
import { Range } from 'vs/editor/common/core/range'; import { Range } from 'vs/editor/common/core/range';
import { Position } from 'vs/editor/common/core/position'; import { Position } from 'vs/editor/common/core/position';
import { Viewport } from 'vs/editor/common/editorCommon';
export interface ILayoutProvider {
getScrollWidth(): number;
getScrollHeight(): number;
getCurrentViewport(): Viewport;
getScrolledTopFromAbsoluteTop(top: number): number;
getVerticalOffsetForLineNumber(lineNumber: number): number;
}
export interface IViewLines { export interface IViewLines {
linesVisibleRangesForRange(range: Range, includeNewLines: boolean): LineVisibleRanges[]; linesVisibleRangesForRange(range: Range, includeNewLines: boolean): LineVisibleRanges[];
...@@ -41,21 +31,21 @@ export class RenderingContext implements IRenderingContext { ...@@ -41,21 +31,21 @@ export class RenderingContext implements IRenderingContext {
public readonly viewportHeight: number; public readonly viewportHeight: number;
public readonly viewportLeft: number; public readonly viewportLeft: number;
private readonly _layoutProvider: ILayoutProvider; private readonly _viewLayout: IViewLayout;
private readonly _viewLines: IViewLines; private readonly _viewLines: IViewLines;
constructor(viewLines: IViewLines, layoutProvider: ILayoutProvider, viewportData: ViewportData) { constructor(viewLines: IViewLines, viewLayout: IViewLayout, viewportData: ViewportData) {
this._viewLines = viewLines; this._viewLines = viewLines;
this._layoutProvider = layoutProvider; this._viewLayout = viewLayout;
this.viewportData = viewportData; this.viewportData = viewportData;
this.scrollWidth = this._layoutProvider.getScrollWidth(); this.scrollWidth = this._viewLayout.getScrollWidth();
this.scrollHeight = this._layoutProvider.getScrollHeight(); this.scrollHeight = this._viewLayout.getScrollHeight();
this.visibleRange = this.viewportData.visibleRange; this.visibleRange = this.viewportData.visibleRange;
this.bigNumbersDelta = this.viewportData.bigNumbersDelta; this.bigNumbersDelta = this.viewportData.bigNumbersDelta;
const vInfo = this._layoutProvider.getCurrentViewport(); const vInfo = this._viewLayout.getCurrentViewport();
this.viewportWidth = vInfo.width; this.viewportWidth = vInfo.width;
this.viewportHeight = vInfo.height; this.viewportHeight = vInfo.height;
this.viewportLeft = vInfo.left; this.viewportLeft = vInfo.left;
...@@ -63,12 +53,12 @@ export class RenderingContext implements IRenderingContext { ...@@ -63,12 +53,12 @@ export class RenderingContext implements IRenderingContext {
} }
public getScrolledTopFromAbsoluteTop(absoluteTop: number): number { public getScrolledTopFromAbsoluteTop(absoluteTop: number): number {
return this._layoutProvider.getScrolledTopFromAbsoluteTop(absoluteTop); return this._viewLayout.getScrolledTopFromAbsoluteTop(absoluteTop);
} }
public getViewportVerticalOffsetForLineNumber(lineNumber: number): number { public getViewportVerticalOffsetForLineNumber(lineNumber: number): number {
const verticalOffset = this._layoutProvider.getVerticalOffsetForLineNumber(lineNumber); const verticalOffset = this._viewLayout.getVerticalOffsetForLineNumber(lineNumber);
const scrolledTop = this._layoutProvider.getScrolledTopFromAbsoluteTop(verticalOffset); const scrolledTop = this._viewLayout.getScrolledTopFromAbsoluteTop(verticalOffset);
return scrolledTop; return scrolledTop;
} }
......
...@@ -5,11 +5,49 @@ ...@@ -5,11 +5,49 @@
'use strict'; 'use strict';
import { IEventEmitter } from 'vs/base/common/eventEmitter'; import { IEventEmitter } from 'vs/base/common/eventEmitter';
import { IModelDecoration, EndOfLinePreference, IPosition } from 'vs/editor/common/editorCommon'; import { INewScrollPosition, IViewWhitespaceViewportData, Viewport, IModelDecoration, EndOfLinePreference, IPosition } from 'vs/editor/common/editorCommon';
import { ViewLineToken } from 'vs/editor/common/core/viewLineToken'; import { ViewLineToken } from 'vs/editor/common/core/viewLineToken';
import { Position } from 'vs/editor/common/core/position'; import { Position } from 'vs/editor/common/core/position';
import { Range } from 'vs/editor/common/core/range'; import { Range } from 'vs/editor/common/core/range';
import { Selection } from 'vs/editor/common/core/selection'; import { Selection } from 'vs/editor/common/core/selection';
// import { Viewport } from 'vs/editor/common/editorCommon';
export interface IViewLayout {
onMaxLineWidthChanged(width: number): void;
getScrollLeft(): number;
getScrollWidth(): number;
getScrollHeight(): number;
getScrollTop(): number;
getCurrentViewport(): Viewport;
getTotalHeight(): number;
getScrolledTopFromAbsoluteTop(top: number): number;
getVerticalOffsetForLineNumber(lineNumber: number): number;
setScrollPosition(position: INewScrollPosition): void;
// --------------- Begin vertical whitespace management
/**
* Reserve rendering space.
* @return an identifier that can be later used to remove or change the whitespace.
*/
addWhitespace(afterLineNumber: number, ordinal: number, height: number): number;
/**
* Change the properties of a whitespace.
*/
changeWhitespace(id: number, newAfterLineNumber: number, newHeight: number): boolean;
/**
* Remove rendering space
*/
removeWhitespace(id: number): boolean;
/**
* Get the layout information for whitespaces currently in the viewport
*/
getWhitespaceViewportData(): IViewWhitespaceViewportData[];
// --------------- End vertical whitespace management
}
export interface ICoordinatesConverter { export interface ICoordinatesConverter {
// View -> Model conversion and related methods // View -> Model conversion and related methods
...@@ -17,7 +55,7 @@ export interface ICoordinatesConverter { ...@@ -17,7 +55,7 @@ export interface ICoordinatesConverter {
convertViewRangeToModelRange(viewRange: Range): Range; convertViewRangeToModelRange(viewRange: Range): Range;
convertViewSelectionToModelSelection(viewSelection: Selection): Selection; convertViewSelectionToModelSelection(viewSelection: Selection): Selection;
validateViewPosition(viewPosition: Position, expectedModelPosition: Position): Position; validateViewPosition(viewPosition: Position, expectedModelPosition: Position): Position;
validateViewRange(viewRange: Range, modelRange: Range): Range; validateViewRange(viewRange: Range, expectedModelRange: Range): Range;
// Model -> View conversion and related methods // Model -> View conversion and related methods
convertModelPositionToViewPosition(modelPosition: Position): Position; convertModelPositionToViewPosition(modelPosition: Position): Position;
...@@ -52,9 +90,9 @@ export interface IViewModel extends IEventEmitter { ...@@ -52,9 +90,9 @@ export interface IViewModel extends IEventEmitter {
getEOL(): string; getEOL(): string;
getValueInRange(range: Range, eol: EndOfLinePreference): string; getValueInRange(range: Range, eol: EndOfLinePreference): string;
getModelLineContent(lineNumber: number): string; getModelLineContent(modelLineNumber: number): string;
getModelLineMaxColumn(modelLineNumber: number): number; getModelLineMaxColumn(modelLineNumber: number): number;
validateModelPosition(position: IPosition): Position; validateModelPosition(modelPosition: IPosition): Position;
} }
export class ViewLineRenderingData { export class ViewLineRenderingData {
......
...@@ -46,9 +46,9 @@ export class CoordinatesConverter implements ICoordinatesConverter { ...@@ -46,9 +46,9 @@ export class CoordinatesConverter implements ICoordinatesConverter {
return this._lines.validateViewPosition(viewPosition.lineNumber, viewPosition.column, expectedModelPosition); return this._lines.validateViewPosition(viewPosition.lineNumber, viewPosition.column, expectedModelPosition);
} }
public validateViewRange(viewRange: Range, modelRange: Range): Range { public validateViewRange(viewRange: Range, expectedModelRange: Range): Range {
var validViewStart = this._lines.validateViewPosition(viewRange.startLineNumber, viewRange.startColumn, modelRange.getStartPosition()); var validViewStart = this._lines.validateViewPosition(viewRange.startLineNumber, viewRange.startColumn, expectedModelRange.getStartPosition());
var validViewEnd = this._lines.validateViewPosition(viewRange.endLineNumber, viewRange.endColumn, modelRange.getEndPosition()); var validViewEnd = this._lines.validateViewPosition(viewRange.endLineNumber, viewRange.endColumn, expectedModelRange.getEndPosition());
return new Range(validViewStart.lineNumber, validViewStart.column, validViewEnd.lineNumber, validViewEnd.column); return new Range(validViewStart.lineNumber, validViewStart.column, validViewEnd.lineNumber, validViewEnd.column);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册