Skip to content

Commit a7c698c

Browse files
committed
Move view layout modification through view model
1 parent 4bb364c commit a7c698c

12 files changed

Lines changed: 58 additions & 50 deletions

File tree

src/vs/editor/browser/controller/pointerHandler.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ class StandardPointerHandler extends MouseHandler implements IDisposable {
100100
}
101101

102102
private _onGestureChange(e: IThrottledGestureEvent): void {
103-
this._context.viewLayout.deltaScrollNow(-e.translationX, -e.translationY);
103+
this._context.model.deltaScrollNow(-e.translationX, -e.translationY);
104104
}
105105

106106
public dispose(): void {
@@ -177,7 +177,7 @@ export class PointerEventHandler extends MouseHandler {
177177

178178
private onChange(e: GestureEvent): void {
179179
if (this._lastPointerType === 'touch') {
180-
this._context.viewLayout.deltaScrollNow(-e.translationX, -e.translationY);
180+
this._context.model.deltaScrollNow(-e.translationX, -e.translationY);
181181
}
182182
}
183183

@@ -215,7 +215,7 @@ class TouchHandler extends MouseHandler {
215215
}
216216

217217
private onChange(e: GestureEvent): void {
218-
this._context.viewLayout.deltaScrollNow(-e.translationX, -e.translationY);
218+
this._context.model.deltaScrollNow(-e.translationX, -e.translationY);
219219
}
220220
}
221221

src/vs/editor/browser/view/viewImpl.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -443,11 +443,11 @@ export class View extends ViewEventHandler {
443443
}
444444

445445
public restoreState(scrollPosition: { scrollLeft: number; scrollTop: number; }): void {
446-
this._context.viewLayout.setScrollPosition({ scrollTop: scrollPosition.scrollTop }, ScrollType.Immediate);
446+
this._context.model.setScrollPosition({ scrollTop: scrollPosition.scrollTop }, ScrollType.Immediate);
447447
this._context.model.tokenizeViewport();
448448
this._renderNow();
449449
this.viewLines.updateLineWidths();
450-
this._context.viewLayout.setScrollPosition({ scrollLeft: scrollPosition.scrollLeft }, ScrollType.Immediate);
450+
this._context.model.setScrollPosition({ scrollLeft: scrollPosition.scrollLeft }, ScrollType.Immediate);
451451
}
452452

453453
public getOffsetForColumn(modelLineNumber: number, modelColumn: number): number {
@@ -480,7 +480,6 @@ export class View extends ViewEventHandler {
480480
return this._renderOnce(() => {
481481
const zonesHaveChanged = this.viewZones.changeViewZones(callback);
482482
if (zonesHaveChanged) {
483-
this._context.viewLayout.onHeightMaybeChanged();
484483
this._context.privateViewEventBus.emit(new viewEvents.ViewZonesChangedEvent());
485484
}
486485
return zonesHaveChanged;

src/vs/editor/browser/viewParts/editorScrollbar/editorScrollbar.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ export class EditorScrollbar extends ViewPart {
8888
}
8989
}
9090

91-
this._context.viewLayout.setScrollPosition(newScrollPosition, ScrollType.Immediate);
91+
this._context.model.setScrollPosition(newScrollPosition, ScrollType.Immediate);
9292
};
9393

9494
// I've seen this happen both on the view dom node & on the lines content dom node.

src/vs/editor/browser/viewParts/lines/viewLines.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
282282

283283
const scrollTopDelta = Math.abs(this._context.viewLayout.getCurrentScrollTop() - newScrollPosition.scrollTop);
284284
const scrollType = (scrollTopDelta <= this._lineHeight ? ScrollType.Immediate : e.scrollType);
285-
this._context.viewLayout.setScrollPosition(newScrollPosition, scrollType);
285+
this._context.model.setScrollPosition(newScrollPosition, scrollType);
286286

287287
return true;
288288
}
@@ -307,7 +307,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
307307
return this._visibleLines.onTokensChanged(e);
308308
}
309309
public onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {
310-
this._context.viewLayout.onMaxLineWidthChanged(this._maxLineWidth);
310+
this._context.model.setMaxLineWidth(this._maxLineWidth);
311311
return this._visibleLines.onZonesChanged(e);
312312
}
313313
public onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean {
@@ -587,7 +587,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
587587
this._ensureMaxLineWidth(newScrollLeft.maxHorizontalOffset);
588588
}
589589
// set `scrollLeft`
590-
this._context.viewLayout.setScrollPosition({
590+
this._context.model.setScrollPosition({
591591
scrollLeft: newScrollLeft.scrollLeft
592592
}, horizontalRevealRequest.scrollType);
593593
}
@@ -626,7 +626,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
626626
const iLineWidth = Math.ceil(lineWidth);
627627
if (this._maxLineWidth < iLineWidth) {
628628
this._maxLineWidth = iLineWidth;
629-
this._context.viewLayout.onMaxLineWidthChanged(this._maxLineWidth);
629+
this._context.model.setMaxLineWidth(this._maxLineWidth);
630630
}
631631
}
632632

src/vs/editor/browser/viewParts/minimap/minimap.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1022,7 +1022,7 @@ export class Minimap extends ViewPart implements IMinimapModel {
10221022
}
10231023

10241024
public setScrollTop(scrollTop: number): void {
1025-
this._context.viewLayout.setScrollPosition({
1025+
this._context.model.setScrollPosition({
10261026
scrollTop: scrollTop
10271027
}, ScrollType.Immediate);
10281028
}

src/vs/editor/browser/viewParts/viewZones/viewZones.ts

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,8 @@ export class ViewZones extends ViewPart {
7979
for (const whitespace of whitespaces) {
8080
oldWhitespaces.set(whitespace.id, whitespace);
8181
}
82-
return this._context.viewLayout.changeWhitespace((whitespaceAccessor: IWhitespaceChangeAccessor) => {
83-
let hadAChange = false;
84-
82+
let hadAChange = false;
83+
this._context.model.changeWhitespace((whitespaceAccessor: IWhitespaceChangeAccessor) => {
8584
const keys = Object.keys(this._zones);
8685
for (let i = 0, len = keys.length; i < len; i++) {
8786
const id = keys[i];
@@ -94,9 +93,8 @@ export class ViewZones extends ViewPart {
9493
hadAChange = true;
9594
}
9695
}
97-
98-
return hadAChange;
9996
});
97+
return hadAChange;
10098
}
10199

102100
public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {
@@ -115,11 +113,7 @@ export class ViewZones extends ViewPart {
115113
}
116114

117115
public onLineMappingChanged(e: viewEvents.ViewLineMappingChangedEvent): boolean {
118-
const hadAChange = this._recomputeWhitespacesProps();
119-
if (hadAChange) {
120-
this._context.viewLayout.onHeightMaybeChanged();
121-
}
122-
return hadAChange;
116+
return this._recomputeWhitespacesProps();
123117
}
124118

125119
public onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {
@@ -199,9 +193,9 @@ export class ViewZones extends ViewPart {
199193
}
200194

201195
public changeViewZones(callback: (changeAccessor: IViewZoneChangeAccessor) => any): boolean {
196+
let zonesHaveChanged = false;
202197

203-
return this._context.viewLayout.changeWhitespace((whitespaceAccessor: IWhitespaceChangeAccessor) => {
204-
let zonesHaveChanged = false;
198+
this._context.model.changeWhitespace((whitespaceAccessor: IWhitespaceChangeAccessor) => {
205199

206200
const changeAccessor: IViewZoneChangeAccessor = {
207201
addZone: (zone: IViewZone): string => {
@@ -231,6 +225,8 @@ export class ViewZones extends ViewPart {
231225

232226
return zonesHaveChanged;
233227
});
228+
229+
return zonesHaveChanged;
234230
}
235231

236232
private _addZone(whitespaceAccessor: IWhitespaceChangeAccessor, zone: IViewZone): string {

src/vs/editor/browser/widget/codeEditorWidget.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -862,7 +862,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE
862862
if (typeof newScrollLeft !== 'number') {
863863
throw new Error('Invalid arguments');
864864
}
865-
this._modelData.viewModel.viewLayout.setScrollPosition({
865+
this._modelData.viewModel.setScrollPosition({
866866
scrollLeft: newScrollLeft
867867
}, scrollType);
868868
}
@@ -873,15 +873,15 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE
873873
if (typeof newScrollTop !== 'number') {
874874
throw new Error('Invalid arguments');
875875
}
876-
this._modelData.viewModel.viewLayout.setScrollPosition({
876+
this._modelData.viewModel.setScrollPosition({
877877
scrollTop: newScrollTop
878878
}, scrollType);
879879
}
880880
public setScrollPosition(position: editorCommon.INewScrollPosition, scrollType: editorCommon.ScrollType = editorCommon.ScrollType.Immediate): void {
881881
if (!this._modelData) {
882882
return;
883883
}
884-
this._modelData.viewModel.viewLayout.setScrollPosition(position, scrollType);
884+
this._modelData.viewModel.setScrollPosition(position, scrollType);
885885
}
886886

887887
public saveViewState(): editorCommon.ICodeEditorViewState | null {

src/vs/editor/common/viewLayout/linesLayout.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -180,33 +180,36 @@ export class LinesLayout {
180180
this._lineCount = lineCount;
181181
}
182182

183-
public changeWhitespace<T>(callback: (accessor: IWhitespaceChangeAccessor) => T): T {
183+
public changeWhitespace(callback: (accessor: IWhitespaceChangeAccessor) => void): boolean {
184+
let hadAChange = false;
184185
try {
185-
const accessor = {
186+
const accessor: IWhitespaceChangeAccessor = {
186187
insertWhitespace: (afterLineNumber: number, ordinal: number, heightInPx: number, minWidth: number): string => {
188+
hadAChange = true;
187189
afterLineNumber = afterLineNumber | 0;
188190
ordinal = ordinal | 0;
189191
heightInPx = heightInPx | 0;
190192
minWidth = minWidth | 0;
191-
192193
const id = this._instanceId + (++this._lastWhitespaceId);
193194
this._pendingChanges.insert(new EditorWhitespace(id, afterLineNumber, ordinal, heightInPx, minWidth));
194195
return id;
195196
},
196197
changeOneWhitespace: (id: string, newAfterLineNumber: number, newHeight: number): void => {
198+
hadAChange = true;
197199
newAfterLineNumber = newAfterLineNumber | 0;
198200
newHeight = newHeight | 0;
199-
200201
this._pendingChanges.change({ id, newAfterLineNumber, newHeight });
201202
},
202203
removeWhitespace: (id: string): void => {
204+
hadAChange = true;
203205
this._pendingChanges.remove({ id });
204206
}
205207
};
206-
return callback(accessor);
208+
callback(accessor);
207209
} finally {
208210
this._pendingChanges.commit(this);
209211
}
212+
return hadAChange;
210213
}
211214

212215
public _commitPendingChanges(inserts: EditorWhitespace[], changes: IPendingChange[], removes: IPendingRemove[]): void {

src/vs/editor/common/viewLayout/viewLayout.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ export class ViewLayout extends Disposable implements IViewLayout {
324324
}
325325
}
326326

327-
public onMaxLineWidthChanged(maxLineWidth: number): void {
327+
public setMaxLineWidth(maxLineWidth: number): void {
328328
const scrollDimensions = this._scrollable.getScrollDimensions();
329329
// const newScrollWidth = ;
330330
this._scrollable.setScrollDimensions(new EditorScrollDimensions(
@@ -353,8 +353,11 @@ export class ViewLayout extends Disposable implements IViewLayout {
353353
}
354354

355355
// ---- IVerticalLayoutProvider
356-
public changeWhitespace<T>(callback: (accessor: IWhitespaceChangeAccessor) => T): T {
357-
return this._linesLayout.changeWhitespace(callback);
356+
public changeWhitespace(callback: (accessor: IWhitespaceChangeAccessor) => void): void {
357+
const hadAChange = this._linesLayout.changeWhitespace(callback);
358+
if (hadAChange) {
359+
this.onHeightMaybeChanged();
360+
}
358361
}
359362
public getVerticalOffsetForLineNumber(lineNumber: number): number {
360363
return this._linesLayout.getVerticalOffsetForLineNumber(lineNumber);

src/vs/editor/common/viewModel/viewModel.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@ export interface IViewLayout {
4444

4545
getScrollable(): Scrollable;
4646

47-
onMaxLineWidthChanged(width: number): void;
48-
4947
getScrollWidth(): number;
5048
getScrollHeight(): number;
5149

@@ -56,8 +54,6 @@ export interface IViewLayout {
5654
getFutureViewport(): Viewport;
5755

5856
validateScrollPosition(scrollPosition: INewScrollPosition): IScrollPosition;
59-
setScrollPosition(position: INewScrollPosition, type: ScrollType): void;
60-
deltaScrollNow(deltaScrollLeft: number, deltaScrollTop: number): void;
6157

6258
getLinesViewportData(): IPartialViewLinesViewportData;
6359
getLinesViewportDataAtScrollTop(scrollTop: number): IPartialViewLinesViewportData;
@@ -68,18 +64,10 @@ export interface IViewLayout {
6864
getVerticalOffsetForLineNumber(lineNumber: number): number;
6965
getWhitespaceAtVerticalOffset(verticalOffset: number): IViewWhitespaceViewportData | null;
7066

71-
// --------------- Begin vertical whitespace management
72-
changeWhitespace<T>(callback: (accessor: IWhitespaceChangeAccessor) => T): T;
73-
7467
/**
7568
* Get the layout information for whitespaces currently in the viewport
7669
*/
7770
getWhitespaceViewportData(): IViewWhitespaceViewportData[];
78-
79-
// TODO@Alex whitespace management should work via a change accessor sort of thing
80-
onHeightMaybeChanged(): void;
81-
82-
// --------------- End vertical whitespace management
8371
}
8472

8573
export interface ICoordinatesConverter {
@@ -169,6 +157,10 @@ export interface IViewModel extends IViewEventEmitter, ICursorSimpleModel {
169157
getVerticalOffsetForLineNumber(viewLineNumber: number): number;
170158
getScrollTop(): number;
171159
setScrollTop(newScrollTop: number, scrollType: ScrollType): void;
160+
setScrollPosition(position: INewScrollPosition, type: ScrollType): void;
161+
deltaScrollNow(deltaScrollLeft: number, deltaScrollTop: number): void;
162+
changeWhitespace(callback: (accessor: IWhitespaceChangeAccessor) => void): void;
163+
setMaxLineWidth(maxLineWidth: number): void;
172164
//#endregion
173165
}
174166

0 commit comments

Comments
 (0)