--- /dev/null
+/**
+ * Copyright (c) 2019 The xterm.js authors. All rights reserved.
+ * @license MIT
+ */
+
+import { IDisposable } from 'common/Types';
+import { IColorSet } from 'browser/Types';
+
+export type CharacterJoinerHandler = (text: string) => [number, number][];
+
+export interface IRenderDimensions {
+ scaledCharWidth: number;
+ scaledCharHeight: number;
+ scaledCellWidth: number;
+ scaledCellHeight: number;
+ scaledCharLeft: number;
+ scaledCharTop: number;
+ scaledCanvasWidth: number;
+ scaledCanvasHeight: number;
+ canvasWidth: number;
+ canvasHeight: number;
+ actualCellWidth: number;
+ actualCellHeight: number;
+}
+
+/**
+ * Note that IRenderer implementations should emit the refresh event after
+ * rendering rows to the screen.
+ */
+export interface IRenderer extends IDisposable {
+ readonly dimensions: IRenderDimensions;
+
+ dispose(): void;
+ setColors(colors: IColorSet): void;
+ onDevicePixelRatioChange(): void;
+ onResize(cols: number, rows: number): void;
+ onCharSizeChanged(): void;
+ onBlur(): void;
+ onFocus(): void;
+ onSelectionChanged(start: [number, number], end: [number, number], columnSelectMode: boolean): void;
+ onCursorMove(): void;
+ onOptionsChanged(): void;
+ clear(): void;
+ renderRows(start: number, end: number): void;
+ registerCharacterJoiner(handler: CharacterJoinerHandler): number;
+ deregisterCharacterJoiner(joinerId: number): boolean;
+}
+
+export interface ICharacterJoiner {
+ id: number;
+ handler: CharacterJoinerHandler;
+}
+
+export interface ICharacterJoinerRegistry {
+ registerCharacterJoiner(handler: (text: string) => [number, number][]): number;
+ deregisterCharacterJoiner(joinerId: number): boolean;
+ getJoinedCharacters(row: number): [number, number][];
+}
+
+export interface IRenderLayer extends IDisposable {
+ /**
+ * Called when the terminal loses focus.
+ */
+ onBlur(): void;
+
+ /**
+ * * Called when the terminal gets focus.
+ */
+ onFocus(): void;
+
+ /**
+ * Called when the cursor is moved.
+ */
+ onCursorMove(): void;
+
+ /**
+ * Called when options change.
+ */
+ onOptionsChanged(): void;
+
+ /**
+ * Called when the theme changes.
+ */
+ setColors(colorSet: IColorSet): void;
+
+ /**
+ * Called when the data in the grid has changed (or needs to be rendered
+ * again).
+ */
+ onGridChanged(startRow: number, endRow: number): void;
+
+ /**
+ * Calls when the selection changes.
+ */
+ onSelectionChanged(start: [number, number], end: [number, number], columnSelectMode: boolean): void;
+
+ /**
+ * Registers a handler to join characters to render as a group
+ */
+ registerCharacterJoiner?(joiner: ICharacterJoiner): void;
+
+ /**
+ * Deregisters the specified character joiner handler
+ */
+ deregisterCharacterJoiner?(joinerId: number): void;
+
+ /**
+ * Resize the render layer.
+ */
+ resize(dim: IRenderDimensions): void;
+
+ /**
+ * Clear the state of the render layer.
+ */
+ reset(): void;
+}