@stringsync/vexml
Version:
MusicXML to Vexflow
51 lines (50 loc) • 1.64 kB
TypeScript
import * as events from '../events';
import { Rect } from '../spatial';
import { CursorFrame, CursorStateHintProvider } from './types';
import { CursorPath } from './cursorpath';
import { ElementDescriber } from './elementdescriber';
export type CursorState = {
index: number;
hasNext: boolean;
hasPrevious: boolean;
rect: Rect;
frame: CursorFrame;
hints: CursorStateHintProvider;
};
export type CursorEventMap = {
change: CursorState;
};
export declare class Cursor {
private path;
private locator;
private scroller;
private elementDescriber;
private topic;
private index;
private alpha;
private previousFrame;
private constructor();
static create(path: CursorPath, scrollContainer: HTMLElement, elementDescriber: ElementDescriber): Cursor;
iterable(): Iterable<CursorState>;
getCurrentState(): CursorState;
next(): void;
previous(): void;
goTo(index: number): void;
/** Snaps to the closest sequence entry step. */
snap(timeMs: number): void;
/** Seeks to the exact position, interpolating as needed. */
seek(timestampMs: number): void;
isFullyVisible(): boolean;
scrollIntoView(behavior?: ScrollBehavior): void;
addEventListener<N extends keyof CursorEventMap>(name: N, listener: events.EventListener<CursorEventMap[N]>, opts?: {
emitBootstrapEvent?: boolean;
}): number;
removeEventListener(...ids: number[]): void;
removeAllEventListeners(): void;
private getCurrentFrame;
private getScrollPoint;
private normalize;
private getDuration;
private getCursorRect;
private update;
}