Skip to content

Commit 7a76532

Browse files
committed
Move ViewEventEmitter out of viewModelImpl
1 parent 0e8cd85 commit 7a76532

5 files changed

Lines changed: 68 additions & 67 deletions

File tree

src/vs/editor/common/view/viewEvents.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import { Selection } from 'vs/editor/common/core/selection';
1010
import { ScrollEvent } from 'vs/base/common/scrollable';
1111
import { IConfigurationChangedEvent } from 'vs/editor/common/config/editorOptions';
1212
import { VerticalRevealType } from 'vs/editor/common/controller/cursorEvents';
13+
import * as errors from 'vs/base/common/errors';
14+
import { IDisposable, Disposable } from "vs/base/common/lifecycle";
1315

1416
export const enum ViewEventType {
1517
ViewConfigurationChanged = 1,
@@ -311,3 +313,51 @@ export type ViewEvent = (
311313
| ViewZonesChangedEvent
312314
| ViewThemeChangedEvent
313315
);
316+
317+
export interface IViewEventListener {
318+
(events: ViewEvent[]): void;
319+
}
320+
321+
export class ViewEventEmitter extends Disposable {
322+
private _listeners: IViewEventListener[];
323+
324+
constructor() {
325+
super();
326+
this._listeners = [];
327+
}
328+
329+
public dispose(): void {
330+
this._listeners = [];
331+
super.dispose();
332+
}
333+
334+
protected _emit(events: ViewEvent[]): void {
335+
const listeners = this._listeners.slice(0);
336+
for (let i = 0, len = listeners.length; i < len; i++) {
337+
safeInvokeListener(listeners[i], events);
338+
}
339+
}
340+
341+
public addEventListener(listener: (events: ViewEvent[]) => void): IDisposable {
342+
this._listeners.push(listener);
343+
return {
344+
dispose: () => {
345+
let listeners = this._listeners;
346+
for (let i = 0, len = listeners.length; i < len; i++) {
347+
if (listeners[i] === listener) {
348+
listeners.splice(i, 1);
349+
break;
350+
}
351+
}
352+
}
353+
};
354+
}
355+
}
356+
357+
function safeInvokeListener(listener: IViewEventListener, events: ViewEvent[]): void {
358+
try {
359+
listener(events);
360+
} catch (e) {
361+
errors.onUnexpectedError(e);
362+
}
363+
}

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { ViewLineToken } from 'vs/editor/common/core/viewLineToken';
99
import { Position, IPosition } from 'vs/editor/common/core/position';
1010
import { Range } from 'vs/editor/common/core/range';
1111
import { Selection } from 'vs/editor/common/core/selection';
12-
import { ViewEvent } from 'vs/editor/common/view/viewEvents';
12+
import { ViewEvent, IViewEventListener } from 'vs/editor/common/view/viewEvents';
1313
import { IDisposable } from 'vs/base/common/lifecycle';
1414
import { Scrollable } from "vs/base/common/scrollable";
1515
import { IPartialViewLinesViewportData } from "vs/editor/common/viewLayout/viewLinesViewportData";
@@ -104,13 +104,9 @@ export interface ICoordinatesConverter {
104104
modelPositionIsVisible(modelPosition: Position): boolean;
105105
}
106106

107-
export interface IViewModelListener {
108-
(events: ViewEvent[]): void;
109-
}
110-
111107
export interface IViewModel {
112108

113-
addEventListener(listener: IViewModelListener): IDisposable;
109+
addEventListener(listener: IViewEventListener): IDisposable;
114110

115111
readonly coordinatesConverter: ICoordinatesConverter;
116112

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import { Selection } from 'vs/editor/common/core/selection';
1111
import * as viewEvents from 'vs/editor/common/view/viewEvents';
1212
import { ICursorRevealRangeEvent, CursorEventType, CursorScrollRequest } from 'vs/editor/common/controller/cursorEvents';
1313
import { Cursor } from "vs/editor/common/controller/cursor";
14-
import { ViewEventEmitter } from "vs/editor/common/viewModel/viewModelImpl";
1514
import { EmitterEvent } from "vs/base/common/eventEmitter";
1615

1716
export interface ICursorPositionChangedEvent {
@@ -38,7 +37,7 @@ function containsLineMappingChanged(events: viewEvents.ViewEvent[]): boolean {
3837
return false;
3938
}
4039

41-
export class ViewModelCursors extends ViewEventEmitter {
40+
export class ViewModelCursors extends viewEvents.ViewEventEmitter {
4241

4342
private readonly configuration: editorCommon.IConfiguration;
4443
private readonly viewModel: IViewModel;

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ import { IDisposable } from 'vs/base/common/lifecycle';
88
import { Range } from 'vs/editor/common/core/range';
99
import { Position } from 'vs/editor/common/core/position';
1010
import * as editorCommon from 'vs/editor/common/editorCommon';
11-
import { InlineDecoration, ViewModelDecoration, ICoordinatesConverter, ViewEventsCollector } from 'vs/editor/common/viewModel/viewModel';
12-
import * as viewEvents from 'vs/editor/common/view/viewEvents';
11+
import { InlineDecoration, ViewModelDecoration, ICoordinatesConverter } from 'vs/editor/common/viewModel/viewModel';
1312
import { IModelDecorationsChangedEvent } from 'vs/editor/common/model/textModelEvents';
1413

1514
export interface IDecorationsViewportData {
@@ -59,7 +58,7 @@ export class ViewModelDecorations implements IDisposable {
5958
this._clearCachedModelDecorationsResolver();
6059
}
6160

62-
public onModelDecorationsChanged(eventsCollector: ViewEventsCollector, e: IModelDecorationsChangedEvent): void {
61+
public onModelDecorationsChanged(e: IModelDecorationsChangedEvent): void {
6362
let changedDecorations = e.changedDecorations;
6463
for (let i = 0, len = changedDecorations.length; i < len; i++) {
6564
let changedDecoration = changedDecorations[i];
@@ -78,14 +77,12 @@ export class ViewModelDecorations implements IDisposable {
7877
}
7978

8079
this._clearCachedModelDecorationsResolver();
81-
eventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());
8280
}
8381

84-
public onLineMappingChanged(eventsCollector: ViewEventsCollector): void {
82+
public onLineMappingChanged(): void {
8583
this._decorationsCache = Object.create(null);
8684

8785
this._clearCachedModelDecorationsResolver();
88-
eventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());
8986
}
9087

9188
private _getOrCreateViewModelDecoration(modelDecoration: editorCommon.IModelDecoration): ViewModelDecoration {

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

Lines changed: 12 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
'use strict';
66

77
import { EmitterEvent } from 'vs/base/common/eventEmitter';
8-
import { IDisposable, Disposable } from 'vs/base/common/lifecycle';
98
import * as strings from 'vs/base/common/strings';
109
import { Position, IPosition } from 'vs/editor/common/core/position';
1110
import { Range } from 'vs/editor/common/core/range';
@@ -14,10 +13,9 @@ import * as editorCommon from 'vs/editor/common/editorCommon';
1413
import { TokenizationRegistry, ColorId, LanguageId } from 'vs/editor/common/modes';
1514
import { tokenizeLineToHTML } from 'vs/editor/common/modes/textToHtmlTokenizer';
1615
import { ViewModelDecorations } from 'vs/editor/common/viewModel/viewModelDecorations';
17-
import { MinimapLinesRenderingData, ViewLineRenderingData, ViewModelDecoration, IViewModelListener, IViewModel, ICoordinatesConverter, ViewEventsCollector } from 'vs/editor/common/viewModel/viewModel';
16+
import { MinimapLinesRenderingData, ViewLineRenderingData, ViewModelDecoration, IViewModel, ICoordinatesConverter, ViewEventsCollector } from 'vs/editor/common/viewModel/viewModel';
1817
import { SplitLinesCollection } from 'vs/editor/common/viewModel/splitLinesCollection';
1918
import * as viewEvents from 'vs/editor/common/view/viewEvents';
20-
import * as errors from 'vs/base/common/errors';
2119
import { MinimapTokensColorTracker } from 'vs/editor/common/view/minimapCharRenderer';
2220
import * as textModelEvents from 'vs/editor/common/model/textModelEvents';
2321
import { IConfigurationChangedEvent } from 'vs/editor/common/config/editorOptions';
@@ -85,43 +83,7 @@ export class CoordinatesConverter implements ICoordinatesConverter {
8583

8684
}
8785

88-
export class ViewEventEmitter extends Disposable {
89-
private _listeners: IViewModelListener[];
90-
91-
constructor() {
92-
super();
93-
this._listeners = [];
94-
}
95-
96-
public dispose(): void {
97-
this._listeners = [];
98-
super.dispose();
99-
}
100-
101-
protected _emit(events: viewEvents.ViewEvent[]): void {
102-
const listeners = this._listeners.slice(0);
103-
for (let i = 0, len = listeners.length; i < len; i++) {
104-
safeInvokeListener(listeners[i], events);
105-
}
106-
}
107-
108-
public addEventListener(listener: (events: viewEvents.ViewEvent[]) => void): IDisposable {
109-
this._listeners.push(listener);
110-
return {
111-
dispose: () => {
112-
let listeners = this._listeners;
113-
for (let i = 0, len = listeners.length; i < len; i++) {
114-
if (listeners[i] === listener) {
115-
listeners.splice(i, 1);
116-
break;
117-
}
118-
}
119-
}
120-
};
121-
}
122-
}
123-
124-
export class ViewModel extends ViewEventEmitter implements IViewModel {
86+
export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel {
12587

12688
private readonly editorId: number;
12789
private readonly configuration: editorCommon.IConfiguration;
@@ -214,7 +176,8 @@ export class ViewModel extends ViewEventEmitter implements IViewModel {
214176
if (this.lines.setWrappingSettings(conf.wrappingInfo.wrappingIndent, conf.wrappingInfo.wrappingColumn, conf.fontInfo.typicalFullwidthCharacterWidth / conf.fontInfo.typicalHalfwidthCharacterWidth)) {
215177
eventsCollector.emit(new viewEvents.ViewFlushedEvent());
216178
eventsCollector.emit(new viewEvents.ViewLineMappingChangedEvent());
217-
this.decorations.onLineMappingChanged(eventsCollector);
179+
eventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());
180+
this.decorations.onLineMappingChanged();
218181
this.viewLayout.onFlushed(this.getLineCount());
219182
revealPreviousCenteredModelRange = true;
220183
}
@@ -356,15 +319,17 @@ export class ViewModel extends ViewEventEmitter implements IViewModel {
356319
if (this.lines.setTabSize(this.model.getOptions().tabSize)) {
357320
eventsCollector.emit(new viewEvents.ViewFlushedEvent());
358321
eventsCollector.emit(new viewEvents.ViewLineMappingChangedEvent());
359-
this.decorations.onLineMappingChanged(eventsCollector);
322+
eventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());
323+
this.decorations.onLineMappingChanged();
360324
this.viewLayout.onFlushed(this.getLineCount());
361325
}
362326

363327
break;
364328
}
365329
case textModelEvents.TextModelEventType.ModelDecorationsChanged: {
366330
const e = <textModelEvents.IModelDecorationsChangedEvent>data;
367-
this.decorations.onModelDecorationsChanged(eventsCollector, e);
331+
this.decorations.onModelDecorationsChanged(e);
332+
eventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());
368333
break;
369334
}
370335
case textModelEvents.TextModelEventType.ModelDispose: {
@@ -379,7 +344,8 @@ export class ViewModel extends ViewEventEmitter implements IViewModel {
379344

380345
if (!hadOtherModelChange && hadModelLineChangeThatChangedLineMapping) {
381346
eventsCollector.emit(new viewEvents.ViewLineMappingChangedEvent());
382-
this.decorations.onLineMappingChanged(eventsCollector);
347+
eventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());
348+
this.decorations.onLineMappingChanged();
383349
}
384350
}
385351

@@ -389,7 +355,8 @@ export class ViewModel extends ViewEventEmitter implements IViewModel {
389355
if (lineMappingChanged) {
390356
eventsCollector.emit(new viewEvents.ViewFlushedEvent());
391357
eventsCollector.emit(new viewEvents.ViewLineMappingChangedEvent());
392-
this.decorations.onLineMappingChanged(eventsCollector);
358+
eventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());
359+
this.decorations.onLineMappingChanged();
393360
this.viewLayout.onFlushed(this.getLineCount());
394361
}
395362
this._emit(eventsCollector.finalize());
@@ -623,11 +590,3 @@ export class ViewModel extends ViewEventEmitter implements IViewModel {
623590
return result;
624591
}
625592
}
626-
627-
function safeInvokeListener(listener: IViewModelListener, events: viewEvents.ViewEvent[]): void {
628-
try {
629-
listener(events);
630-
} catch (e) {
631-
errors.onUnexpectedError(e);
632-
}
633-
}

0 commit comments

Comments
 (0)