UNPKG

molstar

Version:

A comprehensive macromolecular library.

137 lines (136 loc) 4.25 kB
/** * Copyright (c) 2018-2021 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> * @author David Sehnal <david.sehnal@gmail.com> */ import { Observable } from 'rxjs'; import { BitFlags } from '../../mol-util'; export declare function getButtons(event: MouseEvent | Touch): number; export declare function getButton(event: MouseEvent | Touch): number; export declare function getModifiers(event: MouseEvent | Touch): ModifiersKeys; export declare const DefaultInputObserverProps: { noScroll: boolean; noMiddleClickScroll: boolean; noContextMenu: boolean; noPinchZoom: boolean; noTextSelect: boolean; preventGestures: boolean; mask: (x: number, y: number) => boolean; pixelScale: number; }; export declare type InputObserverProps = Partial<typeof DefaultInputObserverProps>; export declare type ModifiersKeys = { shift: boolean; alt: boolean; control: boolean; meta: boolean; }; export declare namespace ModifiersKeys { const None: ModifiersKeys; function areEqual(a: ModifiersKeys, b: ModifiersKeys): boolean; function size(a?: ModifiersKeys): number; function create(modifierKeys?: Partial<ModifiersKeys>): ModifiersKeys; } export declare type ButtonsType = BitFlags<ButtonsType.Flag>; export declare namespace ButtonsType { const has: (btn: ButtonsType, f: Flag) => boolean; const create: (fs: Flag) => ButtonsType; const enum Flag { /** No button or un-initialized */ None = 0, /** Primary button (usually left) */ Primary = 1, /** Secondary button (usually right) */ Secondary = 2, /** Auxilary button (usually middle or mouse wheel button) */ Auxilary = 4, /** 4th button (typically the "Browser Back" button) */ Forth = 8, /** 5th button (typically the "Browser Forward" button) */ Five = 16 } } declare type BaseInput = { buttons: ButtonsType; button: ButtonsType.Flag; modifiers: ModifiersKeys; }; export declare type DragInput = { x: number; y: number; dx: number; dy: number; pageX: number; pageY: number; isStart: boolean; } & BaseInput; export declare type WheelInput = { x: number; y: number; pageX: number; pageY: number; dx: number; dy: number; dz: number; spinX: number; spinY: number; } & BaseInput; export declare type ClickInput = { x: number; y: number; pageX: number; pageY: number; } & BaseInput; export declare type MoveInput = { x: number; y: number; pageX: number; pageY: number; inside: boolean; } & BaseInput; export declare type PinchInput = { delta: number; fraction: number; fractionDelta: number; distance: number; isStart: boolean; } & BaseInput; export declare type GestureInput = { scale: number; rotation: number; deltaScale: number; deltaRotation: number; isStart?: boolean; isEnd?: boolean; }; export declare type KeyInput = { key: string; modifiers: ModifiersKeys; }; export declare type ResizeInput = {}; interface InputObserver { noScroll: boolean; noContextMenu: boolean; readonly width: number; readonly height: number; readonly pixelRatio: number; readonly drag: Observable<DragInput>; readonly interactionEnd: Observable<undefined>; readonly wheel: Observable<WheelInput>; readonly pinch: Observable<PinchInput>; readonly gesture: Observable<GestureInput>; readonly click: Observable<ClickInput>; readonly move: Observable<MoveInput>; readonly leave: Observable<undefined>; readonly enter: Observable<undefined>; readonly resize: Observable<ResizeInput>; readonly modifiers: Observable<ModifiersKeys>; readonly key: Observable<KeyInput>; dispose: () => void; } declare namespace InputObserver { function create(props?: InputObserverProps): InputObserver; function fromElement(element: Element, props?: InputObserverProps): InputObserver; } export { InputObserver };