Skip to content

Commit da112cd

Browse files
committed
changes for microsoft#81574
1 parent f0ec837 commit da112cd

8 files changed

Lines changed: 47 additions & 41 deletions

File tree

src/vs/base/browser/dom.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ export interface DOMEvent {
443443
}
444444

445445
const MINIMUM_TIME_MS = 16;
446-
const DEFAULT_EVENT_MERGER: IEventMerger<DOMEvent, DOMEvent> = function (lastEvent: DOMEvent, currentEvent: DOMEvent) {
446+
const DEFAULT_EVENT_MERGER: IEventMerger<DOMEvent, DOMEvent> = function (lastEvent: DOMEvent | null, currentEvent: DOMEvent) {
447447
return currentEvent;
448448
};
449449

src/vs/base/browser/globalMouseMoveMonitor.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export interface IStandardMouseMoveEventData {
1616
}
1717

1818
export interface IEventMerger<R> {
19-
(lastEvent: R, currentEvent: MouseEvent): R;
19+
(lastEvent: R | null, currentEvent: MouseEvent): R;
2020
}
2121

2222
export interface IMouseMoveCallback<R> {
@@ -90,7 +90,7 @@ export class GlobalMouseMoveMonitor<R> implements IDisposable {
9090
for (const element of windowChain) {
9191
this.hooks.add(dom.addDisposableThrottledListener(element.window.document, mouseMove,
9292
(data: R) => this.mouseMoveCallback!(data),
93-
(lastEvent: R, currentEvent) => this.mouseMoveEventMerger!(lastEvent, currentEvent as MouseEvent)
93+
(lastEvent: R | null, currentEvent) => this.mouseMoveEventMerger!(lastEvent, currentEvent as MouseEvent)
9494
));
9595
this.hooks.add(dom.addDisposableListener(element.window.document, mouseUp, (e: MouseEvent) => this.stopMonitoring(true)));
9696
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import { EditorOption } from 'vs/editor/common/config/editorOptions';
2727
* Merges mouse events when mouse move events are throttled
2828
*/
2929
export function createMouseMoveEventMerger(mouseTargetFactory: MouseTargetFactory | null) {
30-
return function (lastEvent: EditorMouseEvent, currentEvent: EditorMouseEvent): EditorMouseEvent {
30+
return function (lastEvent: EditorMouseEvent | null, currentEvent: EditorMouseEvent): EditorMouseEvent {
3131
let targetIsWidget = false;
3232
if (mouseTargetFactory) {
3333
targetIsWidget = mouseTargetFactory.mouseTargetIsWidget(currentEvent);

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ interface IThrottledGestureEvent {
1818
translationY: number;
1919
}
2020

21-
function gestureChangeEventMerger(lastEvent: IThrottledGestureEvent, currentEvent: MSGestureEvent): IThrottledGestureEvent {
21+
function gestureChangeEventMerger(lastEvent: IThrottledGestureEvent | null, currentEvent: MSGestureEvent): IThrottledGestureEvent {
2222
const r = {
2323
translationY: currentEvent.translationY,
2424
translationX: currentEvent.translationX
@@ -53,7 +53,7 @@ class MsPointerHandler extends MouseHandler implements IDisposable {
5353
const penGesture = new MSGesture();
5454
touchGesture.target = this.viewHelper.linesContentDomNode;
5555
penGesture.target = this.viewHelper.linesContentDomNode;
56-
this.viewHelper.linesContentDomNode.addEventListener('MSPointerDown', (e: MSPointerEvent) => {
56+
this.viewHelper.linesContentDomNode.addEventListener(<any>'MSPointerDown', (e: MSPointerEvent) => {
5757
// Circumvent IE11 breaking change in e.pointerType & TypeScript's stale definitions
5858
const pointerType = <any>e.pointerType;
5959
if (pointerType === ((<any>e).MSPOINTER_TYPE_MOUSE || 'mouse')) {
@@ -67,7 +67,7 @@ class MsPointerHandler extends MouseHandler implements IDisposable {
6767
penGesture.addPointer(e.pointerId);
6868
}
6969
});
70-
this._register(dom.addDisposableThrottledListener<IThrottledGestureEvent>(this.viewHelper.linesContentDomNode, 'MSGestureChange', (e) => this._onGestureChange(e), gestureChangeEventMerger));
70+
this._register(dom.addDisposableThrottledListener<IThrottledGestureEvent, MSGestureEvent>(this.viewHelper.linesContentDomNode, 'MSGestureChange', (e) => this._onGestureChange(e), gestureChangeEventMerger));
7171
this._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, 'MSGestureTap', (e) => this._onCaptureGestureTap(e), true));
7272
}
7373
}, 100);
@@ -132,7 +132,7 @@ class StandardPointerHandler extends MouseHandler implements IDisposable {
132132
const penGesture = new MSGesture();
133133
touchGesture.target = this.viewHelper.linesContentDomNode;
134134
penGesture.target = this.viewHelper.linesContentDomNode;
135-
this.viewHelper.linesContentDomNode.addEventListener('pointerdown', (e: MSPointerEvent) => {
135+
this.viewHelper.linesContentDomNode.addEventListener('pointerdown', (e: PointerEvent) => {
136136
const pointerType = <any>e.pointerType;
137137
if (pointerType === 'mouse') {
138138
this._lastPointerType = 'mouse';
@@ -145,7 +145,7 @@ class StandardPointerHandler extends MouseHandler implements IDisposable {
145145
penGesture.addPointer(e.pointerId);
146146
}
147147
});
148-
this._register(dom.addDisposableThrottledListener<IThrottledGestureEvent>(this.viewHelper.linesContentDomNode, 'MSGestureChange', (e) => this._onGestureChange(e), gestureChangeEventMerger));
148+
this._register(dom.addDisposableThrottledListener<IThrottledGestureEvent, MSGestureEvent>(this.viewHelper.linesContentDomNode, 'MSGestureChange', (e) => this._onGestureChange(e), gestureChangeEventMerger));
149149
this._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, 'MSGestureTap', (e) => this._onCaptureGestureTap(e), true));
150150
}
151151
}, 100);

src/vs/editor/browser/editorDom.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ export class EditorMouseEvent extends StandardMouseEvent {
8484
}
8585

8686
export interface EditorMouseEventMerger {
87-
(lastEvent: EditorMouseEvent, currentEvent: EditorMouseEvent): EditorMouseEvent;
87+
(lastEvent: EditorMouseEvent | null, currentEvent: EditorMouseEvent): EditorMouseEvent;
8888
}
8989

9090
export class EditorMouseEventFactory {
@@ -124,7 +124,7 @@ export class EditorMouseEventFactory {
124124
}
125125

126126
public onMouseMoveThrottled(target: HTMLElement, callback: (e: EditorMouseEvent) => void, merger: EditorMouseEventMerger, minimumTimeMs: number): IDisposable {
127-
const myMerger: dom.IEventMerger<EditorMouseEvent, MouseEvent> = (lastEvent: EditorMouseEvent, currentEvent: MouseEvent): EditorMouseEvent => {
127+
const myMerger: dom.IEventMerger<EditorMouseEvent, MouseEvent> = (lastEvent: EditorMouseEvent | null, currentEvent: MouseEvent): EditorMouseEvent => {
128128
return merger(lastEvent, this._create(currentEvent));
129129
};
130130
return dom.addDisposableThrottledListener<EditorMouseEvent, MouseEvent>(target, 'mousemove', callback, myMerger, minimumTimeMs);
@@ -162,7 +162,7 @@ export class EditorPointerEventFactory {
162162
}
163163

164164
public onPointerMoveThrottled(target: HTMLElement, callback: (e: EditorMouseEvent) => void, merger: EditorMouseEventMerger, minimumTimeMs: number): IDisposable {
165-
const myMerger: dom.IEventMerger<EditorMouseEvent, MouseEvent> = (lastEvent: EditorMouseEvent, currentEvent: MouseEvent): EditorMouseEvent => {
165+
const myMerger: dom.IEventMerger<EditorMouseEvent, MouseEvent> = (lastEvent: EditorMouseEvent | null, currentEvent: MouseEvent): EditorMouseEvent => {
166166
return merger(lastEvent, this._create(currentEvent));
167167
};
168168
return dom.addDisposableThrottledListener<EditorMouseEvent, MouseEvent>(target, 'pointermove', callback, myMerger, minimumTimeMs);
@@ -195,7 +195,7 @@ export class GlobalEditorMouseMoveMonitor extends Disposable {
195195
this._globalMouseMoveMonitor.stopMonitoring(true);
196196
}, true);
197197

198-
const myMerger: dom.IEventMerger<EditorMouseEvent, MouseEvent> = (lastEvent: EditorMouseEvent, currentEvent: MouseEvent): EditorMouseEvent => {
198+
const myMerger: dom.IEventMerger<EditorMouseEvent, MouseEvent> = (lastEvent: EditorMouseEvent | null, currentEvent: MouseEvent): EditorMouseEvent => {
199199
return merger(lastEvent, new EditorMouseEvent(currentEvent, this._editorViewDomNode));
200200
};
201201

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

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ class FastRenderedViewLine implements IRenderedViewLine {
407407
*/
408408
class RenderedViewLine implements IRenderedViewLine {
409409

410-
public domNode: FastDomNode<HTMLElement>;
410+
public domNode: FastDomNode<HTMLElement> | null;
411411
public readonly input: RenderLineInput;
412412

413413
protected readonly _characterMapping: CharacterMapping;
@@ -420,7 +420,7 @@ class RenderedViewLine implements IRenderedViewLine {
420420
*/
421421
private readonly _pixelOffsetCache: Int32Array | null;
422422

423-
constructor(domNode: FastDomNode<HTMLElement>, renderLineInput: RenderLineInput, characterMapping: CharacterMapping, containsRTL: boolean, containsForeignElements: ForeignElementType) {
423+
constructor(domNode: FastDomNode<HTMLElement> | null, renderLineInput: RenderLineInput, characterMapping: CharacterMapping, containsRTL: boolean, containsForeignElements: ForeignElementType) {
424424
this.domNode = domNode;
425425
this.input = renderLineInput;
426426
this._characterMapping = characterMapping;
@@ -439,16 +439,19 @@ class RenderedViewLine implements IRenderedViewLine {
439439

440440
// --- Reading from the DOM methods
441441

442-
protected _getReadingTarget(): HTMLElement {
443-
return <HTMLSpanElement>this.domNode.domNode.firstChild;
442+
protected _getReadingTarget(myDomNode: FastDomNode<HTMLElement>): HTMLElement {
443+
return <HTMLSpanElement>myDomNode.domNode.firstChild;
444444
}
445445

446446
/**
447447
* Width of the line in pixels
448448
*/
449449
public getWidth(): number {
450+
if (!this.domNode) {
451+
return 0;
452+
}
450453
if (this._cachedWidth === -1) {
451-
this._cachedWidth = this._getReadingTarget().offsetWidth;
454+
this._cachedWidth = this._getReadingTarget(this.domNode).offsetWidth;
452455
}
453456
return this._cachedWidth;
454457
}
@@ -464,38 +467,41 @@ class RenderedViewLine implements IRenderedViewLine {
464467
* Visible ranges for a model range
465468
*/
466469
public getVisibleRangesForRange(startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] | null {
470+
if (!this.domNode) {
471+
return null;
472+
}
467473
if (this._pixelOffsetCache !== null) {
468474
// the text is LTR
469-
const startOffset = this._readPixelOffset(startColumn, context);
475+
const startOffset = this._readPixelOffset(this.domNode, startColumn, context);
470476
if (startOffset === -1) {
471477
return null;
472478
}
473479

474-
const endOffset = this._readPixelOffset(endColumn, context);
480+
const endOffset = this._readPixelOffset(this.domNode, endColumn, context);
475481
if (endOffset === -1) {
476482
return null;
477483
}
478484

479485
return [new HorizontalRange(startOffset, endOffset - startOffset)];
480486
}
481487

482-
return this._readVisibleRangesForRange(startColumn, endColumn, context);
488+
return this._readVisibleRangesForRange(this.domNode, startColumn, endColumn, context);
483489
}
484490

485-
protected _readVisibleRangesForRange(startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] | null {
491+
protected _readVisibleRangesForRange(domNode: FastDomNode<HTMLElement>, startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] | null {
486492
if (startColumn === endColumn) {
487-
const pixelOffset = this._readPixelOffset(startColumn, context);
493+
const pixelOffset = this._readPixelOffset(domNode, startColumn, context);
488494
if (pixelOffset === -1) {
489495
return null;
490496
} else {
491497
return [new HorizontalRange(pixelOffset, 0)];
492498
}
493499
} else {
494-
return this._readRawVisibleRangesForRange(startColumn, endColumn, context);
500+
return this._readRawVisibleRangesForRange(domNode, startColumn, endColumn, context);
495501
}
496502
}
497503

498-
protected _readPixelOffset(column: number, context: DomReadingContext): number {
504+
protected _readPixelOffset(domNode: FastDomNode<HTMLElement>, column: number, context: DomReadingContext): number {
499505
if (this._characterMapping.length === 0) {
500506
// This line has no content
501507
if (this._containsForeignElements === ForeignElementType.None) {
@@ -520,18 +526,18 @@ class RenderedViewLine implements IRenderedViewLine {
520526
return cachedPixelOffset;
521527
}
522528

523-
const result = this._actualReadPixelOffset(column, context);
529+
const result = this._actualReadPixelOffset(domNode, column, context);
524530
this._pixelOffsetCache[column] = result;
525531
return result;
526532
}
527533

528-
return this._actualReadPixelOffset(column, context);
534+
return this._actualReadPixelOffset(domNode, column, context);
529535
}
530536

531-
private _actualReadPixelOffset(column: number, context: DomReadingContext): number {
537+
private _actualReadPixelOffset(domNode: FastDomNode<HTMLElement>, column: number, context: DomReadingContext): number {
532538
if (this._characterMapping.length === 0) {
533539
// This line has no content
534-
const r = RangeUtil.readHorizontalRanges(this._getReadingTarget(), 0, 0, 0, 0, context.clientRectDeltaLeft, context.endNode);
540+
const r = RangeUtil.readHorizontalRanges(this._getReadingTarget(domNode), 0, 0, 0, 0, context.clientRectDeltaLeft, context.endNode);
535541
if (!r || r.length === 0) {
536542
return -1;
537543
}
@@ -547,14 +553,14 @@ class RenderedViewLine implements IRenderedViewLine {
547553
const partIndex = CharacterMapping.getPartIndex(partData);
548554
const charOffsetInPart = CharacterMapping.getCharIndex(partData);
549555

550-
const r = RangeUtil.readHorizontalRanges(this._getReadingTarget(), partIndex, charOffsetInPart, partIndex, charOffsetInPart, context.clientRectDeltaLeft, context.endNode);
556+
const r = RangeUtil.readHorizontalRanges(this._getReadingTarget(domNode), partIndex, charOffsetInPart, partIndex, charOffsetInPart, context.clientRectDeltaLeft, context.endNode);
551557
if (!r || r.length === 0) {
552558
return -1;
553559
}
554560
return r[0].left;
555561
}
556562

557-
private _readRawVisibleRangesForRange(startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] | null {
563+
private _readRawVisibleRangesForRange(domNode: FastDomNode<HTMLElement>, startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] | null {
558564

559565
if (startColumn === 1 && endColumn === this._characterMapping.length) {
560566
// This branch helps IE with bidi text & gives a performance boost to other browsers when reading visible ranges for an entire line
@@ -570,7 +576,7 @@ class RenderedViewLine implements IRenderedViewLine {
570576
const endPartIndex = CharacterMapping.getPartIndex(endPartData);
571577
const endCharOffsetInPart = CharacterMapping.getCharIndex(endPartData);
572578

573-
return RangeUtil.readHorizontalRanges(this._getReadingTarget(), startPartIndex, startCharOffsetInPart, endPartIndex, endCharOffsetInPart, context.clientRectDeltaLeft, context.endNode);
579+
return RangeUtil.readHorizontalRanges(this._getReadingTarget(domNode), startPartIndex, startCharOffsetInPart, endPartIndex, endCharOffsetInPart, context.clientRectDeltaLeft, context.endNode);
574580
}
575581

576582
/**
@@ -591,8 +597,8 @@ class RenderedViewLine implements IRenderedViewLine {
591597
}
592598

593599
class WebKitRenderedViewLine extends RenderedViewLine {
594-
protected _readVisibleRangesForRange(startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] | null {
595-
const output = super._readVisibleRangesForRange(startColumn, endColumn, context);
600+
protected _readVisibleRangesForRange(domNode: FastDomNode<HTMLElement>, startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] | null {
601+
const output = super._readVisibleRangesForRange(domNode, startColumn, endColumn, context);
596602

597603
if (!output || output.length === 0 || startColumn === endColumn || (startColumn === 1 && endColumn === this._characterMapping.length)) {
598604
return output;
@@ -603,7 +609,7 @@ class WebKitRenderedViewLine extends RenderedViewLine {
603609
if (!this.input.containsRTL) {
604610
// This is an attempt to patch things up
605611
// Find position of last column
606-
const endPixelOffset = this._readPixelOffset(endColumn, context);
612+
const endPixelOffset = this._readPixelOffset(domNode, endColumn, context);
607613
if (endPixelOffset !== -1) {
608614
const lastRange = output[output.length - 1];
609615
if (lastRange.left < endPixelOffset) {
@@ -624,10 +630,10 @@ const createRenderedLine: (domNode: FastDomNode<HTMLElement> | null, renderLineI
624630
return createNormalRenderedLine;
625631
})();
626632

627-
function createWebKitRenderedLine(domNode: FastDomNode<HTMLElement>, renderLineInput: RenderLineInput, characterMapping: CharacterMapping, containsRTL: boolean, containsForeignElements: ForeignElementType): RenderedViewLine {
633+
function createWebKitRenderedLine(domNode: FastDomNode<HTMLElement> | null, renderLineInput: RenderLineInput, characterMapping: CharacterMapping, containsRTL: boolean, containsForeignElements: ForeignElementType): RenderedViewLine {
628634
return new WebKitRenderedViewLine(domNode, renderLineInput, characterMapping, containsRTL, containsForeignElements);
629635
}
630636

631-
function createNormalRenderedLine(domNode: FastDomNode<HTMLElement>, renderLineInput: RenderLineInput, characterMapping: CharacterMapping, containsRTL: boolean, containsForeignElements: ForeignElementType): RenderedViewLine {
637+
function createNormalRenderedLine(domNode: FastDomNode<HTMLElement> | null, renderLineInput: RenderLineInput, characterMapping: CharacterMapping, containsRTL: boolean, containsForeignElements: ForeignElementType): RenderedViewLine {
632638
return new RenderedViewLine(domNode, renderLineInput, characterMapping, containsRTL, containsForeignElements);
633639
}

src/vs/editor/contrib/dnd/dnd.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
88
import { Disposable } from 'vs/base/common/lifecycle';
99
import { isMacintosh } from 'vs/base/common/platform';
1010
import { KeyCode } from 'vs/base/common/keyCodes';
11-
import { ICodeEditor, IEditorMouseEvent, IMouseTarget, MouseTargetType } from 'vs/editor/browser/editorBrowser';
11+
import { ICodeEditor, IEditorMouseEvent, IMouseTarget, MouseTargetType, IPartialEditorMouseEvent } from 'vs/editor/browser/editorBrowser';
1212
import { registerEditorContribution } from 'vs/editor/browser/editorExtensions';
1313
import * as editorCommon from 'vs/editor/common/editorCommon';
1414
import { Position } from 'vs/editor/common/core/position';
@@ -50,7 +50,7 @@ export class DragAndDropController extends Disposable implements editorCommon.IE
5050
this._register(this._editor.onMouseDown((e: IEditorMouseEvent) => this._onEditorMouseDown(e)));
5151
this._register(this._editor.onMouseUp((e: IEditorMouseEvent) => this._onEditorMouseUp(e)));
5252
this._register(this._editor.onMouseDrag((e: IEditorMouseEvent) => this._onEditorMouseDrag(e)));
53-
this._register(this._editor.onMouseDrop((e: IEditorMouseEvent) => this._onEditorMouseDrop(e)));
53+
this._register(this._editor.onMouseDrop((e: IPartialEditorMouseEvent) => this._onEditorMouseDrop(e)));
5454
this._register(this._editor.onKeyDown((e: IKeyboardEvent) => this.onEditorKeyDown(e)));
5555
this._register(this._editor.onKeyUp((e: IKeyboardEvent) => this.onEditorKeyUp(e)));
5656
this._register(this._editor.onDidBlurEditorWidget(() => this.onEditorBlur()));
@@ -143,7 +143,7 @@ export class DragAndDropController extends Disposable implements editorCommon.IE
143143
}
144144
}
145145

146-
private _onEditorMouseDrop(mouseEvent: IEditorMouseEvent): void {
146+
private _onEditorMouseDrop(mouseEvent: IPartialEditorMouseEvent): void {
147147
if (mouseEvent.target && (this._hitContent(mouseEvent.target) || this._hitMargin(mouseEvent.target)) && mouseEvent.target.position) {
148148
let newCursorPosition = new Position(mouseEvent.target.position.lineNumber, mouseEvent.target.position.column);
149149

src/vs/editor/standalone/browser/standaloneServices.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export module StaticServices {
8989

9090
let _all: LazyStaticService<any>[] = [];
9191

92-
function define<T>(serviceId: ServiceIdentifier<T>, factory: (overrides: IEditorOverrideServices) => T): LazyStaticService<T> {
92+
function define<T>(serviceId: ServiceIdentifier<T>, factory: (overrides: IEditorOverrideServices | undefined) => T): LazyStaticService<T> {
9393
let r = new LazyStaticService(serviceId, factory);
9494
_all.push(r);
9595
return r;

0 commit comments

Comments
 (0)