2 * Copyright (c) 2019 The xterm.js authors. All rights reserved.
6 import { IEvent } from 'common/EventEmitter';
7 import { IRenderDimensions, IRenderer, CharacterJoinerHandler } from 'browser/renderer/Types';
8 import { IColorSet } from 'browser/Types';
9 import { ISelectionRedrawRequestEvent } from 'browser/selection/Types';
10 import { createDecorator } from 'common/services/ServiceRegistry';
11 import { IDisposable } from 'common/Types';
13 export const ICharSizeService = createDecorator<ICharSizeService>('CharSizeService');
14 export interface ICharSizeService {
17 readonly width: number;
18 readonly height: number;
19 readonly hasValidSize: boolean;
21 readonly onCharSizeChange: IEvent<void>;
26 export const IMouseService = createDecorator<IMouseService>('MouseService');
27 export interface IMouseService {
30 getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined;
31 getRawByteCoords(event: MouseEvent, element: HTMLElement, colCount: number, rowCount: number): { x: number, y: number } | undefined;
34 export const IRenderService = createDecorator<IRenderService>('RenderService');
35 export interface IRenderService extends IDisposable {
38 onDimensionsChange: IEvent<IRenderDimensions>;
39 onRender: IEvent<{ start: number, end: number }>;
40 onRefreshRequest: IEvent<{ start: number, end: number }>;
42 dimensions: IRenderDimensions;
44 refreshRows(start: number, end: number): void;
45 resize(cols: number, rows: number): void;
46 changeOptions(): void;
47 setRenderer(renderer: IRenderer): void;
48 setColors(colors: IColorSet): void;
49 onDevicePixelRatioChange(): void;
50 onResize(cols: number, rows: number): void;
51 // TODO: Is this useful when we have onResize?
52 onCharSizeChanged(): void;
55 onSelectionChanged(start: [number, number], end: [number, number], columnSelectMode: boolean): void;
58 registerCharacterJoiner(handler: CharacterJoinerHandler): number;
59 deregisterCharacterJoiner(joinerId: number): boolean;
62 export const ISelectionService = createDecorator<ISelectionService>('SelectionService');
63 export interface ISelectionService {
66 readonly selectionText: string;
67 readonly hasSelection: boolean;
68 readonly selectionStart: [number, number] | undefined;
69 readonly selectionEnd: [number, number] | undefined;
71 readonly onLinuxMouseSelection: IEvent<string>;
72 readonly onRedrawRequest: IEvent<ISelectionRedrawRequestEvent>;
73 readonly onSelectionChange: IEvent<void>;
78 setSelection(row: number, col: number, length: number): void;
80 selectLines(start: number, end: number): void;
81 clearSelection(): void;
82 isClickInSelection(event: MouseEvent): boolean;
83 selectWordAtCursor(event: MouseEvent): void;
84 shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean;
85 shouldForceSelection(event: MouseEvent): boolean;
86 refresh(isLinuxMouseSelection?: boolean): void;
87 onMouseDown(event: MouseEvent): void;
90 export const ISoundService = createDecorator<ISoundService>('SoundService');
91 export interface ISoundService {
94 playBellSound(): void;