Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/editor/browser/view/viewUserInputEvents.ts
3294 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { IKeyboardEvent } from '../../../base/browser/keyboardEvent.js';
7
import { IEditorMouseEvent, IMouseTarget, IMouseTargetViewZoneData, IPartialEditorMouseEvent, MouseTargetType } from '../editorBrowser.js';
8
import { IMouseWheelEvent } from '../../../base/browser/mouseEvent.js';
9
import { Position } from '../../common/core/position.js';
10
import { ICoordinatesConverter } from '../../common/coordinatesConverter.js';
11
12
export interface EventCallback<T> {
13
(event: T): void;
14
}
15
16
export class ViewUserInputEvents {
17
18
public onKeyDown: EventCallback<IKeyboardEvent> | null = null;
19
public onKeyUp: EventCallback<IKeyboardEvent> | null = null;
20
public onContextMenu: EventCallback<IEditorMouseEvent> | null = null;
21
public onMouseMove: EventCallback<IEditorMouseEvent> | null = null;
22
public onMouseLeave: EventCallback<IPartialEditorMouseEvent> | null = null;
23
public onMouseDown: EventCallback<IEditorMouseEvent> | null = null;
24
public onMouseUp: EventCallback<IEditorMouseEvent> | null = null;
25
public onMouseDrag: EventCallback<IEditorMouseEvent> | null = null;
26
public onMouseDrop: EventCallback<IPartialEditorMouseEvent> | null = null;
27
public onMouseDropCanceled: EventCallback<void> | null = null;
28
public onMouseWheel: EventCallback<IMouseWheelEvent> | null = null;
29
30
private readonly _coordinatesConverter: ICoordinatesConverter;
31
32
constructor(coordinatesConverter: ICoordinatesConverter) {
33
this._coordinatesConverter = coordinatesConverter;
34
}
35
36
public emitKeyDown(e: IKeyboardEvent): void {
37
this.onKeyDown?.(e);
38
}
39
40
public emitKeyUp(e: IKeyboardEvent): void {
41
this.onKeyUp?.(e);
42
}
43
44
public emitContextMenu(e: IEditorMouseEvent): void {
45
this.onContextMenu?.(this._convertViewToModelMouseEvent(e));
46
}
47
48
public emitMouseMove(e: IEditorMouseEvent): void {
49
this.onMouseMove?.(this._convertViewToModelMouseEvent(e));
50
}
51
52
public emitMouseLeave(e: IPartialEditorMouseEvent): void {
53
this.onMouseLeave?.(this._convertViewToModelMouseEvent(e));
54
}
55
56
public emitMouseDown(e: IEditorMouseEvent): void {
57
this.onMouseDown?.(this._convertViewToModelMouseEvent(e));
58
}
59
60
public emitMouseUp(e: IEditorMouseEvent): void {
61
this.onMouseUp?.(this._convertViewToModelMouseEvent(e));
62
}
63
64
public emitMouseDrag(e: IEditorMouseEvent): void {
65
this.onMouseDrag?.(this._convertViewToModelMouseEvent(e));
66
}
67
68
public emitMouseDrop(e: IPartialEditorMouseEvent): void {
69
this.onMouseDrop?.(this._convertViewToModelMouseEvent(e));
70
}
71
72
public emitMouseDropCanceled(): void {
73
this.onMouseDropCanceled?.();
74
}
75
76
public emitMouseWheel(e: IMouseWheelEvent): void {
77
this.onMouseWheel?.(e);
78
}
79
80
private _convertViewToModelMouseEvent(e: IEditorMouseEvent): IEditorMouseEvent;
81
private _convertViewToModelMouseEvent(e: IPartialEditorMouseEvent): IPartialEditorMouseEvent;
82
private _convertViewToModelMouseEvent(e: IEditorMouseEvent | IPartialEditorMouseEvent): IEditorMouseEvent | IPartialEditorMouseEvent {
83
if (e.target) {
84
return {
85
event: e.event,
86
target: this._convertViewToModelMouseTarget(e.target)
87
};
88
}
89
return e;
90
}
91
92
private _convertViewToModelMouseTarget(target: IMouseTarget): IMouseTarget {
93
return ViewUserInputEvents.convertViewToModelMouseTarget(target, this._coordinatesConverter);
94
}
95
96
public static convertViewToModelMouseTarget(target: IMouseTarget, coordinatesConverter: ICoordinatesConverter): IMouseTarget {
97
const result = { ...target };
98
if (result.position) {
99
result.position = coordinatesConverter.convertViewPositionToModelPosition(result.position);
100
}
101
if (result.range) {
102
result.range = coordinatesConverter.convertViewRangeToModelRange(result.range);
103
}
104
if (result.type === MouseTargetType.GUTTER_VIEW_ZONE || result.type === MouseTargetType.CONTENT_VIEW_ZONE) {
105
result.detail = this.convertViewToModelViewZoneData(result.detail, coordinatesConverter);
106
}
107
return result;
108
}
109
110
private static convertViewToModelViewZoneData(data: IMouseTargetViewZoneData, coordinatesConverter: ICoordinatesConverter): IMouseTargetViewZoneData {
111
return {
112
viewZoneId: data.viewZoneId,
113
positionBefore: data.positionBefore ? coordinatesConverter.convertViewPositionToModelPosition(data.positionBefore) : data.positionBefore,
114
positionAfter: data.positionAfter ? coordinatesConverter.convertViewPositionToModelPosition(data.positionAfter) : data.positionAfter,
115
position: coordinatesConverter.convertViewPositionToModelPosition(data.position),
116
afterLineNumber: coordinatesConverter.convertViewPositionToModelPosition(new Position(data.afterLineNumber, 1)).lineNumber,
117
};
118
}
119
}
120
121