Skip to content

Commit 77fc181

Browse files
committed
Add IMouseTargetOutsideEditor.outsideDistance
1 parent 25018be commit 77fc181

File tree

4 files changed

+15
-9
lines changed

4 files changed

+15
-9
lines changed

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

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -496,41 +496,45 @@ class MouseDownOperation extends Disposable {
496496
const mouseColumn = this._getMouseColumn(e);
497497

498498
if (e.posy < editorContent.y) {
499-
const verticalOffset = Math.max(viewLayout.getCurrentScrollTop() - (editorContent.y - e.posy), 0);
499+
const outsideDistance = editorContent.y - e.posy;
500+
const verticalOffset = Math.max(viewLayout.getCurrentScrollTop() - outsideDistance, 0);
500501
const viewZoneData = HitTestContext.getZoneAtCoord(this._context, verticalOffset);
501502
if (viewZoneData) {
502503
const newPosition = this._helpPositionJumpOverViewZone(viewZoneData);
503504
if (newPosition) {
504-
return MouseTarget.createOutsideEditor(mouseColumn, newPosition, 'above');
505+
return MouseTarget.createOutsideEditor(mouseColumn, newPosition, 'above', outsideDistance);
505506
}
506507
}
507508

508509
const aboveLineNumber = viewLayout.getLineNumberAtVerticalOffset(verticalOffset);
509-
return MouseTarget.createOutsideEditor(mouseColumn, new Position(aboveLineNumber, 1), 'above');
510+
return MouseTarget.createOutsideEditor(mouseColumn, new Position(aboveLineNumber, 1), 'above', outsideDistance);
510511
}
511512

512513
if (e.posy > editorContent.y + editorContent.height) {
514+
const outsideDistance = e.posy - editorContent.y - editorContent.height;
513515
const verticalOffset = viewLayout.getCurrentScrollTop() + e.relativePos.y;
514516
const viewZoneData = HitTestContext.getZoneAtCoord(this._context, verticalOffset);
515517
if (viewZoneData) {
516518
const newPosition = this._helpPositionJumpOverViewZone(viewZoneData);
517519
if (newPosition) {
518-
return MouseTarget.createOutsideEditor(mouseColumn, newPosition, 'below');
520+
return MouseTarget.createOutsideEditor(mouseColumn, newPosition, 'below', outsideDistance);
519521
}
520522
}
521523

522524
const belowLineNumber = viewLayout.getLineNumberAtVerticalOffset(verticalOffset);
523-
return MouseTarget.createOutsideEditor(mouseColumn, new Position(belowLineNumber, model.getLineMaxColumn(belowLineNumber)), 'below');
525+
return MouseTarget.createOutsideEditor(mouseColumn, new Position(belowLineNumber, model.getLineMaxColumn(belowLineNumber)), 'below', outsideDistance);
524526
}
525527

526528
const possibleLineNumber = viewLayout.getLineNumberAtVerticalOffset(viewLayout.getCurrentScrollTop() + e.relativePos.y);
527529

528530
if (e.posx < editorContent.x) {
529-
return MouseTarget.createOutsideEditor(mouseColumn, new Position(possibleLineNumber, 1), 'left');
531+
const outsideDistance = editorContent.x - e.posx;
532+
return MouseTarget.createOutsideEditor(mouseColumn, new Position(possibleLineNumber, 1), 'left', outsideDistance);
530533
}
531534

532535
if (e.posx > editorContent.x + editorContent.width) {
533-
return MouseTarget.createOutsideEditor(mouseColumn, new Position(possibleLineNumber, model.getLineMaxColumn(possibleLineNumber)), 'right');
536+
const outsideDistance = e.posx - editorContent.x - editorContent.width;
537+
return MouseTarget.createOutsideEditor(mouseColumn, new Position(possibleLineNumber, model.getLineMaxColumn(possibleLineNumber)), 'right', outsideDistance);
534538
}
535539

536540
return null;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ export class MouseTarget {
9999
public static createOverlayWidget(element: Element | null, mouseColumn: number, detail: string): IMouseTargetOverlayWidget {
100100
return { type: MouseTargetType.OVERLAY_WIDGET, element, mouseColumn, position: null, range: null, detail };
101101
}
102-
public static createOutsideEditor(mouseColumn: number, position: Position, outsidePosition: 'above' | 'below' | 'left' | 'right'): IMouseTargetOutsideEditor {
103-
return { type: MouseTargetType.OUTSIDE_EDITOR, element: null, mouseColumn, position, range: this._deduceRage(position), outsidePosition };
102+
public static createOutsideEditor(mouseColumn: number, position: Position, outsidePosition: 'above' | 'below' | 'left' | 'right', outsideDistance: number): IMouseTargetOutsideEditor {
103+
return { type: MouseTargetType.OUTSIDE_EDITOR, element: null, mouseColumn, position, range: this._deduceRage(position), outsidePosition, outsideDistance };
104104
}
105105

106106
private static _typeToString(type: MouseTargetType): string {

src/vs/editor/browser/editorBrowser.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,7 @@ export interface IMouseTargetOverviewRuler extends IBaseMouseTarget {
392392
export interface IMouseTargetOutsideEditor extends IBaseMouseTarget {
393393
readonly type: MouseTargetType.OUTSIDE_EDITOR;
394394
readonly outsidePosition: 'above' | 'below' | 'left' | 'right';
395+
readonly outsideDistance: number;
395396
}
396397
/**
397398
* Target hit with the mouse in the editor.

src/vs/monaco.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5047,6 +5047,7 @@ declare namespace monaco.editor {
50475047
export interface IMouseTargetOutsideEditor extends IBaseMouseTarget {
50485048
readonly type: MouseTargetType.OUTSIDE_EDITOR;
50495049
readonly outsidePosition: 'above' | 'below' | 'left' | 'right';
5050+
readonly outsideDistance: number;
50505051
}
50515052

50525053
/**

0 commit comments

Comments
 (0)