Path: blob/main/src/vs/editor/browser/view/viewUserInputEvents.ts
3294 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { IKeyboardEvent } from '../../../base/browser/keyboardEvent.js';6import { IEditorMouseEvent, IMouseTarget, IMouseTargetViewZoneData, IPartialEditorMouseEvent, MouseTargetType } from '../editorBrowser.js';7import { IMouseWheelEvent } from '../../../base/browser/mouseEvent.js';8import { Position } from '../../common/core/position.js';9import { ICoordinatesConverter } from '../../common/coordinatesConverter.js';1011export interface EventCallback<T> {12(event: T): void;13}1415export class ViewUserInputEvents {1617public onKeyDown: EventCallback<IKeyboardEvent> | null = null;18public onKeyUp: EventCallback<IKeyboardEvent> | null = null;19public onContextMenu: EventCallback<IEditorMouseEvent> | null = null;20public onMouseMove: EventCallback<IEditorMouseEvent> | null = null;21public onMouseLeave: EventCallback<IPartialEditorMouseEvent> | null = null;22public onMouseDown: EventCallback<IEditorMouseEvent> | null = null;23public onMouseUp: EventCallback<IEditorMouseEvent> | null = null;24public onMouseDrag: EventCallback<IEditorMouseEvent> | null = null;25public onMouseDrop: EventCallback<IPartialEditorMouseEvent> | null = null;26public onMouseDropCanceled: EventCallback<void> | null = null;27public onMouseWheel: EventCallback<IMouseWheelEvent> | null = null;2829private readonly _coordinatesConverter: ICoordinatesConverter;3031constructor(coordinatesConverter: ICoordinatesConverter) {32this._coordinatesConverter = coordinatesConverter;33}3435public emitKeyDown(e: IKeyboardEvent): void {36this.onKeyDown?.(e);37}3839public emitKeyUp(e: IKeyboardEvent): void {40this.onKeyUp?.(e);41}4243public emitContextMenu(e: IEditorMouseEvent): void {44this.onContextMenu?.(this._convertViewToModelMouseEvent(e));45}4647public emitMouseMove(e: IEditorMouseEvent): void {48this.onMouseMove?.(this._convertViewToModelMouseEvent(e));49}5051public emitMouseLeave(e: IPartialEditorMouseEvent): void {52this.onMouseLeave?.(this._convertViewToModelMouseEvent(e));53}5455public emitMouseDown(e: IEditorMouseEvent): void {56this.onMouseDown?.(this._convertViewToModelMouseEvent(e));57}5859public emitMouseUp(e: IEditorMouseEvent): void {60this.onMouseUp?.(this._convertViewToModelMouseEvent(e));61}6263public emitMouseDrag(e: IEditorMouseEvent): void {64this.onMouseDrag?.(this._convertViewToModelMouseEvent(e));65}6667public emitMouseDrop(e: IPartialEditorMouseEvent): void {68this.onMouseDrop?.(this._convertViewToModelMouseEvent(e));69}7071public emitMouseDropCanceled(): void {72this.onMouseDropCanceled?.();73}7475public emitMouseWheel(e: IMouseWheelEvent): void {76this.onMouseWheel?.(e);77}7879private _convertViewToModelMouseEvent(e: IEditorMouseEvent): IEditorMouseEvent;80private _convertViewToModelMouseEvent(e: IPartialEditorMouseEvent): IPartialEditorMouseEvent;81private _convertViewToModelMouseEvent(e: IEditorMouseEvent | IPartialEditorMouseEvent): IEditorMouseEvent | IPartialEditorMouseEvent {82if (e.target) {83return {84event: e.event,85target: this._convertViewToModelMouseTarget(e.target)86};87}88return e;89}9091private _convertViewToModelMouseTarget(target: IMouseTarget): IMouseTarget {92return ViewUserInputEvents.convertViewToModelMouseTarget(target, this._coordinatesConverter);93}9495public static convertViewToModelMouseTarget(target: IMouseTarget, coordinatesConverter: ICoordinatesConverter): IMouseTarget {96const result = { ...target };97if (result.position) {98result.position = coordinatesConverter.convertViewPositionToModelPosition(result.position);99}100if (result.range) {101result.range = coordinatesConverter.convertViewRangeToModelRange(result.range);102}103if (result.type === MouseTargetType.GUTTER_VIEW_ZONE || result.type === MouseTargetType.CONTENT_VIEW_ZONE) {104result.detail = this.convertViewToModelViewZoneData(result.detail, coordinatesConverter);105}106return result;107}108109private static convertViewToModelViewZoneData(data: IMouseTargetViewZoneData, coordinatesConverter: ICoordinatesConverter): IMouseTargetViewZoneData {110return {111viewZoneId: data.viewZoneId,112positionBefore: data.positionBefore ? coordinatesConverter.convertViewPositionToModelPosition(data.positionBefore) : data.positionBefore,113positionAfter: data.positionAfter ? coordinatesConverter.convertViewPositionToModelPosition(data.positionAfter) : data.positionAfter,114position: coordinatesConverter.convertViewPositionToModelPosition(data.position),115afterLineNumber: coordinatesConverter.convertViewPositionToModelPosition(new Position(data.afterLineNumber, 1)).lineNumber,116};117}118}119120121