From 5dbab76bed4d67a4c6487aa29e4544cebccab5a1 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sat, 8 Jun 2019 19:34:38 -0700 Subject: [PATCH] Move MouseHelper into browser --- src/MouseHelper.test.ts | 2 +- src/SelectionManager.ts | 2 +- src/Terminal.ts | 2 +- src/TestUtils.test.ts | 4 ++-- src/Types.ts | 7 +------ src/browser/Types.ts | 5 +++++ src/{ => browser/input}/MouseHelper.ts | 16 +++++++--------- 7 files changed, 18 insertions(+), 20 deletions(-) rename src/{ => browser/input}/MouseHelper.ts (89%) diff --git a/src/MouseHelper.test.ts b/src/MouseHelper.test.ts index a0669ec0..6f886d75 100644 --- a/src/MouseHelper.test.ts +++ b/src/MouseHelper.test.ts @@ -5,7 +5,7 @@ import jsdom = require('jsdom'); import { assert } from 'chai'; -import { MouseHelper } from './MouseHelper'; +import { MouseHelper } from './browser/input/MouseHelper'; import { MockRenderer, MockCharSizeService } from './TestUtils.test'; const CHAR_WIDTH = 10; diff --git a/src/SelectionManager.ts b/src/SelectionManager.ts index fe36a348..1a8d6b6c 100644 --- a/src/SelectionManager.ts +++ b/src/SelectionManager.ts @@ -6,7 +6,7 @@ import { ITerminal, ISelectionManager, ISelectionRedrawRequestEvent } from './Types'; import { IBuffer } from 'common/buffer/Types'; import { IBufferLine } from 'common/Types'; -import { MouseHelper } from './MouseHelper'; +import { MouseHelper } from './browser/input/MouseHelper'; import * as Browser from 'common/Platform'; import { SelectionModel } from './SelectionModel'; import { AltClickHandler } from './handlers/AltClickHandler'; diff --git a/src/Terminal.ts b/src/Terminal.ts index a48f895c..a18bb209 100644 --- a/src/Terminal.ts +++ b/src/Terminal.ts @@ -37,7 +37,7 @@ import { SelectionManager } from './SelectionManager'; import * as Browser from 'common/Platform'; import { addDisposableDomListener } from 'browser/Lifecycle'; import * as Strings from './Strings'; -import { MouseHelper } from './MouseHelper'; +import { MouseHelper } from './browser/input/MouseHelper'; import { SoundManager } from './SoundManager'; import { MouseZoneManager } from './MouseZoneManager'; import { AccessibilityManager } from './AccessibilityManager'; diff --git a/src/TestUtils.test.ts b/src/TestUtils.test.ts index a206ec10..f26708a6 100644 --- a/src/TestUtils.test.ts +++ b/src/TestUtils.test.ts @@ -4,7 +4,7 @@ */ import { IRenderer, IRenderDimensions, CharacterJoinerHandler } from 'browser/renderer/Types'; -import { IInputHandlingTerminal, IViewport, ICompositionHelper, ITerminal, IBrowser, ISelectionManager, ITerminalOptions, ILinkifier, IMouseHelper, ILinkMatcherOptions } from './Types'; +import { IInputHandlingTerminal, IViewport, ICompositionHelper, ITerminal, IBrowser, ISelectionManager, ITerminalOptions, ILinkifier, ILinkMatcherOptions } from './Types'; import { IBuffer, IBufferStringIterator, IBufferSet } from 'common/buffer/Types'; import { IBufferLine, ICellData, IAttributeData, ICircularList, XtermListener } from 'common/Types'; import { Buffer } from 'common/buffer/Buffer'; @@ -12,7 +12,7 @@ import * as Browser from 'common/Platform'; import { IDisposable, IMarker, IEvent, ISelectionPosition } from 'xterm'; import { Terminal } from './Terminal'; import { AttributeData } from 'common/buffer/BufferLine'; -import { IColorManager, IColorSet } from 'browser/Types'; +import { IColorManager, IColorSet, IMouseHelper } from 'browser/Types'; import { IOptionsService } from 'common/services/Services'; import { ICharSizeService } from 'browser/services/Services'; diff --git a/src/Types.ts b/src/Types.ts index cdd693f4..71987bbe 100644 --- a/src/Types.ts +++ b/src/Types.ts @@ -6,7 +6,7 @@ import { ITerminalOptions as IPublicTerminalOptions, IEventEmitter, IDisposable, IMarker, ISelectionPosition } from 'xterm'; import { ICharset, IAttributeData, CharData } from 'common/Types'; import { IEvent } from 'common/EventEmitter2'; -import { IColorSet } from 'browser/Types'; +import { IColorSet, IMouseHelper } from 'browser/Types'; import { IOptionsService } from 'common/services/Services'; import { IBuffer, IBufferSet } from 'common/buffer/Types'; @@ -277,11 +277,6 @@ export interface ILinkifierAccessor { linkifier: ILinkifier; } -export interface IMouseHelper { - getCoords(event: { clientX: number, clientY: number }, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number]; - getRawByteCoords(event: MouseEvent, element: HTMLElement, colCount: number, rowCount: number): { x: number, y: number }; -} - // TODO: The options that are not in the public API should be reviewed export interface ITerminalOptions extends IPublicTerminalOptions { [key: string]: any; diff --git a/src/browser/Types.ts b/src/browser/Types.ts index ef725ba6..a1ea662c 100644 --- a/src/browser/Types.ts +++ b/src/browser/Types.ts @@ -20,3 +20,8 @@ export interface IColorSet { selection: IColor; ansi: IColor[]; } + +export interface IMouseHelper { + getCoords(event: { clientX: number, clientY: number }, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined; + getRawByteCoords(event: MouseEvent, element: HTMLElement, colCount: number, rowCount: number): { x: number | undefined, y: number | undefined }; +} diff --git a/src/MouseHelper.ts b/src/browser/input/MouseHelper.ts similarity index 89% rename from src/MouseHelper.ts rename to src/browser/input/MouseHelper.ts index 12e8cf0e..b99757db 100644 --- a/src/MouseHelper.ts +++ b/src/browser/input/MouseHelper.ts @@ -3,7 +3,7 @@ * @license MIT */ -import { IMouseHelper } from './Types'; +import { IMouseHelper } from 'browser/Types'; import { RenderService } from 'browser/services/RenderService'; import { ICharSizeService } from 'browser/services/Services'; @@ -31,15 +31,15 @@ export class MouseHelper implements IMouseHelper { * apply an offset to the x value such that the left half of the cell will * select that cell and the right half will select the next cell. */ - public getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] { + public getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined { // Coordinates cannot be measured if there are no valid if (!this._charSizeService.hasValidSize) { - return null; + return undefined; } const coords = MouseHelper.getCoordsRelativeToElement(event, element); if (!coords) { - return null; + return undefined; } coords[0] = Math.ceil((coords[0] + (isSelection ? this._renderService.dimensions.actualCellWidth / 2 : 0)) / this._renderService.dimensions.actualCellWidth); @@ -63,14 +63,12 @@ export class MouseHelper implements IMouseHelper { * @param colCount The number of columns in the terminal. * @param rowCount The number of rows in the terminal. */ - public getRawByteCoords(event: MouseEvent, element: HTMLElement, colCount: number, rowCount: number): { x: number, y: number } { + public getRawByteCoords(event: MouseEvent, element: HTMLElement, colCount: number, rowCount: number): { x: number | undefined, y: number | undefined } { const coords = this.getCoords(event, element, colCount, rowCount); - let x = coords[0]; - let y = coords[1]; // xterm sends raw bytes and starts at 32 (SP) for each. - x += 32; - y += 32; + const x = coords ? coords[0] + 32 : undefined; + const y = coords ? coords[1] + 32 : undefined; return { x, y }; }