molstar
Version:
A comprehensive macromolecular library.
137 lines (136 loc) • 4.25 kB
TypeScript
/**
* 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 };