mirror of
https://github.com/Microsoft/vscode
synced 2024-08-27 04:49:35 +00:00
Have the drag event contain a good target
This commit is contained in:
parent
f8309e4ecb
commit
669ab8b0a4
|
@ -12,7 +12,7 @@ import { Position } from 'vs/editor/common/core/position';
|
|||
import { Selection } from 'vs/editor/common/core/selection';
|
||||
import * as editorCommon from 'vs/editor/common/editorCommon';
|
||||
import { ViewEventHandler } from 'vs/editor/common/viewModel/viewEventHandler';
|
||||
import { MouseTargetFactory } from 'vs/editor/browser/controller/mouseTarget';
|
||||
import { MouseTarget, MouseTargetFactory } from 'vs/editor/browser/controller/mouseTarget';
|
||||
import * as editorBrowser from 'vs/editor/browser/editorBrowser';
|
||||
import { TimeoutTimer, RunOnceScheduler } from 'vs/base/common/async';
|
||||
import { ViewContext } from 'vs/editor/common/view/viewContext';
|
||||
|
@ -78,16 +78,6 @@ class EventGateKeeper<T> extends Disposable {
|
|||
}
|
||||
}
|
||||
|
||||
class MousePosition {
|
||||
public position: Position;
|
||||
public mouseColumn: number;
|
||||
|
||||
constructor(position: Position, mouseColumn: number) {
|
||||
this.position = position;
|
||||
this.mouseColumn = mouseColumn;
|
||||
}
|
||||
}
|
||||
|
||||
export interface IPointerHandlerHelper {
|
||||
viewDomNode: HTMLElement;
|
||||
linesContentDomNode: HTMLElement;
|
||||
|
@ -403,21 +393,9 @@ class MouseDownOperation extends Disposable {
|
|||
}
|
||||
|
||||
if (this._mouseState.isDragAndDrop) {
|
||||
let target = this._createMouseTarget(e, true);
|
||||
if (!target.position) {
|
||||
target = {
|
||||
element: target.element,
|
||||
type: target.type,
|
||||
position: position.position,
|
||||
mouseColumn: target.mouseColumn,
|
||||
range: target.range,
|
||||
detail: target.detail
|
||||
};
|
||||
}
|
||||
|
||||
this._viewController.emitMouseDrag({
|
||||
event: e,
|
||||
target: target
|
||||
target: position
|
||||
});
|
||||
} else {
|
||||
this._dispatchMouse(position, true);
|
||||
|
@ -513,35 +491,35 @@ class MouseDownOperation extends Disposable {
|
|||
this._currentSelection = e.selection;
|
||||
}
|
||||
|
||||
private _getPositionOutsideEditor(e: EditorMouseEvent): MousePosition {
|
||||
private _getPositionOutsideEditor(e: EditorMouseEvent): MouseTarget {
|
||||
const editorContent = e.editorPos;
|
||||
|
||||
let mouseColumn = this._getMouseColumn(e);
|
||||
|
||||
if (e.posy < editorContent.y) {
|
||||
let aboveLineNumber = this._viewHelper.getLineNumberAtVerticalOffset(Math.max(this._viewHelper.getScrollTop() - (editorContent.y - e.posy), 0));
|
||||
return new MousePosition(new Position(aboveLineNumber, 1), mouseColumn);
|
||||
return new MouseTarget(null, editorCommon.MouseTargetType.OUTSIDE_EDITOR, mouseColumn, new Position(aboveLineNumber, 1));
|
||||
}
|
||||
|
||||
if (e.posy > editorContent.y + editorContent.height) {
|
||||
let belowLineNumber = this._viewHelper.getLineNumberAtVerticalOffset(this._viewHelper.getScrollTop() + (e.posy - editorContent.y));
|
||||
return new MousePosition(new Position(belowLineNumber, this._context.model.getLineMaxColumn(belowLineNumber)), mouseColumn);
|
||||
return new MouseTarget(null, editorCommon.MouseTargetType.OUTSIDE_EDITOR, mouseColumn, new Position(belowLineNumber, this._context.model.getLineMaxColumn(belowLineNumber)));
|
||||
}
|
||||
|
||||
let possibleLineNumber = this._viewHelper.getLineNumberAtVerticalOffset(this._viewHelper.getScrollTop() + (e.posy - editorContent.y));
|
||||
|
||||
if (e.posx < editorContent.x) {
|
||||
return new MousePosition(new Position(possibleLineNumber, 1), mouseColumn);
|
||||
return new MouseTarget(null, editorCommon.MouseTargetType.OUTSIDE_EDITOR, mouseColumn, new Position(possibleLineNumber, 1));
|
||||
}
|
||||
|
||||
if (e.posx > editorContent.x + editorContent.width) {
|
||||
return new MousePosition(new Position(possibleLineNumber, this._context.model.getLineMaxColumn(possibleLineNumber)), mouseColumn);
|
||||
return new MouseTarget(null, editorCommon.MouseTargetType.OUTSIDE_EDITOR, mouseColumn, new Position(possibleLineNumber, this._context.model.getLineMaxColumn(possibleLineNumber)));
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private _findMousePosition(e: EditorMouseEvent, testEventTarget: boolean): MousePosition {
|
||||
private _findMousePosition(e: EditorMouseEvent, testEventTarget: boolean): MouseTarget {
|
||||
let positionOutsideEditor = this._getPositionOutsideEditor(e);
|
||||
if (positionOutsideEditor) {
|
||||
return positionOutsideEditor;
|
||||
|
@ -562,17 +540,17 @@ class MouseDownOperation extends Disposable {
|
|||
|
||||
if (positionBefore && positionAfter) {
|
||||
if (positionBefore.isBefore(selectionStart)) {
|
||||
return new MousePosition(positionBefore, t.mouseColumn);
|
||||
return new MouseTarget(t.element, t.type, t.mouseColumn, positionBefore, null, t.detail);
|
||||
} else {
|
||||
return new MousePosition(positionAfter, t.mouseColumn);
|
||||
return new MouseTarget(t.element, t.type, t.mouseColumn, positionAfter, null, t.detail);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return new MousePosition(hintedPosition, t.mouseColumn);
|
||||
return t;
|
||||
}
|
||||
|
||||
private _dispatchMouse(position: MousePosition, inSelectionMode: boolean): void {
|
||||
private _dispatchMouse(position: MouseTarget, inSelectionMode: boolean): void {
|
||||
this._viewController.dispatchMouse({
|
||||
position: position.position,
|
||||
mouseColumn: position.mouseColumn,
|
||||
|
|
|
@ -3102,7 +3102,11 @@ export enum MouseTargetType {
|
|||
/**
|
||||
* Mouse is on top of an overlay widget.
|
||||
*/
|
||||
OVERLAY_WIDGET
|
||||
OVERLAY_WIDGET,
|
||||
/**
|
||||
* Mouse is outside of the editor.
|
||||
*/
|
||||
OUTSIDE_EDITOR,
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
4
src/vs/monaco.d.ts
vendored
4
src/vs/monaco.d.ts
vendored
|
@ -2791,6 +2791,10 @@ declare module monaco.editor {
|
|||
* Mouse is on top of an overlay widget.
|
||||
*/
|
||||
OVERLAY_WIDGET = 12,
|
||||
/**
|
||||
* Mouse is outside of the editor.
|
||||
*/
|
||||
OUTSIDE_EDITOR = 13,
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue