@kmamal/sdl
Version:
SDL bindings for Node.js
1,390 lines (1,162 loc) • 32.4 kB
TypeScript
export namespace Events {
interface BaseEvent { readonly type: string }
export type PreventCallback = () => void
export namespace Display {
interface DisplayEvent extends BaseEvent {
readonly display: Sdl.Video.Display
}
export interface Add extends DisplayEvent {
readonly type: 'deviceAdd'
readonly device: Sdl.Video.Display
}
export interface Remove extends DisplayEvent {
readonly type: 'deviceRemove'
readonly device: Sdl.Video.Display
}
export interface Orient extends DisplayEvent {
readonly type: 'deviceOrient'
readonly device: Sdl.Video.Display
readonly orientation: Sdl.Video.Orientation
}
export interface Move extends DisplayEvent {
readonly type: 'deviceMove'
readonly device: Sdl.Video.Display
}
export type Any = Add | Remove | Orient | Move
}
export namespace Window {
interface WindowEvent extends BaseEvent {}
interface KeyEvent extends WindowEvent {
readonly scancode: Sdl.Keyboard.Scancode
readonly key: Sdl.Keyboard.Key | null
readonly shift: number
readonly ctrl: number
readonly alt: number
readonly super: number
readonly altgr: number
readonly capslock: number
readonly numlock: number
}
export interface KeyDown extends KeyEvent {
readonly type: 'keyDown'
readonly repeat: number
}
export interface KeyUp extends KeyEvent { readonly type: 'keyUp' }
export interface TextInput extends WindowEvent {
readonly type: 'textInput'
readonly text: string
}
interface MouseEvent extends WindowEvent {
readonly x: number
readonly y: number
readonly touch: boolean
}
export interface MouseMove extends MouseEvent { readonly type: 'mouseMove' }
interface MouseButtonEvent extends MouseEvent {
readonly button: number
}
export interface MouseButtonDown extends MouseButtonEvent { readonly type: 'mouseButtonDown' }
export interface MouseButtonUp extends MouseButtonEvent { readonly type: 'mouseButtonUp' }
export interface MouseWheel extends MouseEvent {
readonly type: 'mouseWheel'
readonly dx: number
readonly dy: number
readonly flipped: boolean
}
export interface MouseMove extends MouseEvent { readonly type: 'mouseMove' }
interface FingerEvent extends WindowEvent {
readonly device: Sdl.Touch.Device
readonly fingerId: number
readonly mouse: boolean
readonly x: number
readonly y: number
readonly pressure: number
}
export interface FingerDown extends FingerEvent { readonly type: 'fingerDown' }
export interface FingerUp extends FingerEvent { readonly type: 'fingerUp' }
export interface FingerMove extends FingerEvent {
readonly type: 'fingerMove'
readonly dx: number
readonly dy: number
}
export interface Show extends WindowEvent { readonly type: 'show' }
export interface Hide extends WindowEvent { readonly type: 'hide' }
export interface Expose extends WindowEvent { readonly type: 'expose' }
export interface Minimize extends WindowEvent { readonly type: 'minimize' }
export interface Maximize extends WindowEvent { readonly type: 'maximize' }
export interface Restore extends WindowEvent { readonly type: 'restore' }
export interface Move extends WindowEvent {
readonly type: 'move'
readonly x: number,
readonly y: number
}
export interface Resize extends WindowEvent {
readonly type: 'resize'
readonly width: number
readonly height: number
readonly pixelWidth: number
readonly pixelHeight: number
}
export interface DisplayChange extends WindowEvent {
readonly type: 'displayChange'
readonly display: Sdl.Video.Display
}
export interface Focus extends WindowEvent { readonly type: 'focus' }
export interface Blur extends WindowEvent { readonly type: 'blur' }
export interface Hover extends WindowEvent { readonly type: 'hover' }
export interface Leave extends WindowEvent { readonly type: 'leave' }
export interface BeforeClose extends WindowEvent {
readonly type: 'beforeClose'
readonly prevent: PreventCallback
}
export interface Close extends WindowEvent { readonly type: 'close' }
export interface DropBegin extends WindowEvent { readonly type: 'dropBegin' }
export interface DropText extends WindowEvent {
readonly type: 'dropText'
readonly text: string
}
export interface DropFile extends WindowEvent {
readonly type: 'dropFile'
readonly file: string
}
export interface DropComplete extends WindowEvent { readonly type: 'dropComplete' }
export type Any
= KeyDown
| KeyUp
| TextInput
| MouseMove
| MouseButtonDown
| MouseButtonUp
| MouseWheel
| FingerDown
| FingerUp
| FingerMove
| Show
| Hide
| Expose
| Minimize
| Maximize
| Restore
| Move
| Resize
| DisplayChange
| Focus
| Blur
| Hover
| Leave
| BeforeClose
| Close
| DropBegin
| DropText
| DropFile
| DropComplete
}
export namespace Keyboard {
interface KeyboardEvent extends BaseEvent {}
export interface KeymapChange extends KeyboardEvent { readonly type: 'keymapChange' }
export type Any
= KeymapChange
}
export namespace Joystick {
interface JoystickEvent extends BaseEvent {}
export interface AxisMotion extends JoystickEvent {
readonly type: 'axisMotion'
readonly axis: number
readonly value: number
}
export interface BallMotion extends JoystickEvent {
readonly type: 'ballMotion'
readonly ball: number
readonly x: number
readonly y: number
}
interface ButtonEvent extends JoystickEvent {
readonly button: number
}
export interface ButtonDown extends ButtonEvent { readonly type: 'buttonDown' }
export interface ButtonUp extends ButtonEvent { readonly type: 'buttonUp' }
export interface HatMotion extends JoystickEvent {
readonly type: 'hatMotion'
readonly hat: number
readonly value: Sdl.Joystick.HatPosition
}
export interface PowerUpdate extends JoystickEvent {
readonly type: 'powerUpdate'
readonly power: Sdl.Joystick.PowerLevel | null
}
export interface Close extends JoystickEvent { readonly type: 'close' }
export type Any
= AxisMotion
| BallMotion
| ButtonDown
| ButtonUp
| HatMotion
| PowerUpdate
| Close
}
export namespace JoystickDevice {
interface DeviceEvent extends BaseEvent {
readonly device: Sdl.Joystick.Device
}
export interface Add extends DeviceEvent { readonly type: 'deviceAdd' }
export interface Remove extends DeviceEvent { readonly type: 'deviceRemove' }
export type Any
= Add
| Remove
}
export namespace Controller {
interface ControllerEvent extends BaseEvent {}
export interface AxisMotion extends ControllerEvent {
readonly type: 'axisMotion'
readonly axis: Sdl.Controller.Axis
readonly value: number
}
interface ButtonEvent extends ControllerEvent {
readonly button: Sdl.Controller.Button
}
export interface ButtonDown extends ButtonEvent { readonly type: 'buttonDown' }
export interface ButtonUp extends ButtonEvent { readonly type: 'buttonUp' }
export interface PowerUpdate extends ControllerEvent {
readonly type: 'powerUpdate'
readonly power: Sdl.Joystick.PowerLevel | null
}
export interface SteamHandleUpdate extends ControllerEvent {
readonly type: 'steamHandleUpdate'
readonly steamHandle: Buffer | null
}
export interface Remap extends ControllerEvent { readonly type: 'remap' }
export interface Close extends ControllerEvent { readonly type: 'close' }
export type Any
= AxisMotion
| ButtonDown
| ButtonUp
| PowerUpdate
| SteamHandleUpdate
| Remap
| Close
}
export namespace Sensor {
interface SensorEvent extends BaseEvent {}
export interface Update extends SensorEvent {
readonly type: 'update'
}
export interface Close extends SensorEvent { readonly type: 'close' }
export type Any
= Update
| Close
}
export namespace ControllerDevice {
interface DeviceEvent extends BaseEvent {
readonly device: Sdl.Controller.Device
}
export interface Add extends DeviceEvent { readonly type: 'deviceAdd' }
export interface Remove extends DeviceEvent { readonly type: 'deviceRemove' }
export type Any
= Add
| Remove
}
export namespace Audio {
interface AudioEvent extends BaseEvent {}
export interface Close extends AudioEvent { readonly type: 'close' }
export type Any
= Close
}
export namespace AudioDevice {
interface DeviceEvent extends BaseEvent {
readonly device: Sdl.Audio.Device
}
export interface Add extends DeviceEvent { readonly type: 'deviceAdd' }
export interface Remove extends DeviceEvent { readonly type: 'deviceRemove' }
export type Any
= Add
| Remove
}
export namespace Clipboard {
export interface Update extends BaseEvent { readonly type: 'update' }
export type Any
= Update
}
}
export namespace Sdl {
export interface Info {
readonly version: {
readonly compile: {
readonly major: number
readonly minor: number
readonly patch: number
}
readonly runtime: {
readonly major: number
readonly minor: number
readonly patch: number
}
}
readonly platform: 'Linux' | 'Windows' | 'Mac OS X'
readonly drivers: {
readonly video: {
readonly all: string[]
readonly current: string
}
readonly audio: {
readonly all: string[]
readonly current: string
}
}
readonly initialized: {
readonly video: boolean
readonly audio: boolean
readonly joystick: boolean
readonly controller: boolean
readonly haptic: boolean
readonly sensor: boolean
}
}
export namespace Video {
export type Orientation
= 'portrait'
| 'portraitFlipped'
| 'landscape'
| 'landscapeFlipped'
export type Format
= 'rgb332'
| 'rgb444'
| 'rgb555'
| 'bgr555'
| 'argb4444'
| 'rgba4444'
| 'abgr4444'
| 'bgra4444'
| 'argb1555'
| 'rgba5551'
| 'abgr1555'
| 'bgra5551'
| 'rgb565'
| 'bgr565'
| 'rgb24'
| 'bgr24'
| 'rgb888'
| 'rgbx8888'
| 'bgr888'
| 'bgrx8888'
| 'argb8888'
| 'rgba8888'
| 'abgr8888'
| 'bgra8888'
| 'argb2101010'
| 'rgba32'
| 'argb32'
| 'bgra32'
| 'abgr32'
| 'yv12'
| 'iyuv'
| 'yuy2'
| 'uyvy'
| 'yvyu'
| 'nv12'
| 'nv21'
export type Scaling
= 'nearest'
| 'linear'
| 'best'
export interface Display {
readonly name: string | null
readonly format: Format
readonly frequency: number
readonly geometry: {
readonly x: number
readonly y: number
readonly width: number
readonly height: number
}
readonly usable: {
readonly x: number
readonly y: number
readonly width: number
readonly height: number
}
readonly dpi: {
readonly horizontal: number
readonly vertical: number
readonly diagonal: number
} | null
readonly orientation: Orientation | null
}
export class Window {
on (event: 'show', listener: (event: Events.Window.Show) => void): this
on (event: 'hide', listener: (event: Events.Window.Hide) => void): this
on (event: 'expose', listener: (event: Events.Window.Expose) => void): this
on (event: 'minimize', listener: (event: Events.Window.Minimize) => void): this
on (event: 'maximize', listener: (event: Events.Window.Maximize) => void): this
on (event: 'restore', listener: (event: Events.Window.Restore) => void): this
on (event: 'move', listener: (event: Events.Window.Move) => void): this
on (event: 'resize', listener: (event: Events.Window.Resize) => void): this
on (event: 'displayChange', listener: (event: Events.Window.DisplayChange) => void): this
on (event: 'focus', listener: (event: Events.Window.Focus) => void): this
on (event: 'blur', listener: (event: Events.Window.Blur) => void): this
on (event: 'hover', listener: (event: Events.Window.Hover) => void): this
on (event: 'leave', listener: (event: Events.Window.Leave) => void): this
on (event: 'beforeClose', listener: (event: Events.Window.BeforeClose) => void): this
on (event: 'close', listener: (event: Events.Window.Close) => void): this
on (event: 'keyDown', listener: (event: Events.Window.KeyDown) => void): this
on (event: 'keyUp', listener: (event: Events.Window.KeyUp) => void): this
on (event: 'textInput', listener: (event: Events.Window.TextInput) => void): this
on (event: 'mouseButtonDown', listener: (event: Events.Window.MouseButtonDown) => void): this
on (event: 'mouseButtonUp', listener: (event: Events.Window.MouseButtonUp) => void): this
on (event: 'mouseMove', listener: (event: Events.Window.MouseMove) => void): this
on (event: 'mouseWheel', listener: (event: Events.Window.MouseWheel) => void): this
on (event: 'fingerDown', listener: (event: Events.Window.FingerDown) => void): this
on (event: 'fingerUp', listener: (event: Events.Window.FingerUp) => void): this
on (event: 'fingerMove', listener: (event: Events.Window.FingerMove) => void): this
on (event: 'dropBegin', listener: (event: Events.Window.DropBegin) => void): this
on (event: 'dropText', listener: (event: Events.Window.DropText) => void): this
on (event: 'dropFile', listener: (event: Events.Window.DropFile) => void): this
on (event: 'dropComplete', listener: (event: Events.Window.DropComplete) => void): this
on (event: '*', listener: (type: string, event: Events.Window.Any) => void): this
readonly id: number
readonly title: string
setTitle (title: string): void
readonly x: number
readonly y: number
setPosition (x: number, y: number): void
readonly width: number
readonly height: number
setSize (width: number, height: number): void
readonly pixelWidth: number
readonly pixelHeight: number
setSizeInPixels (pixelWidth: number, pixelHeight: number): void
readonly display: Display
readonly visible: boolean
show (show?: boolean): void
hide (): void
readonly fullscreen: boolean
setFullscreen (fullscreen: boolean): void
readonly resizable: boolean
setResizable (resizable: boolean): void
readonly borderless: boolean
setBorderless (borderless: boolean): void
readonly alwaysOnTop: boolean
readonly accelerated: boolean
setAccelerated (accelerated: boolean): void
readonly vsync: boolean
setVsync (vsync: boolean): void
readonly opengl: boolean
readonly webgpu: boolean
readonly native: { handle: Buffer | null }
readonly maximized: boolean
maximize (): void
readonly minimized: boolean
minimize (): void
restore (): void
readonly focused: boolean
focus (): void
readonly hovered: boolean
readonly skipTaskbar: boolean
readonly popupMenu: boolean
readonly tooltip: boolean
readonly utility: boolean
render (width: number, height: number, stride: number, format: Format, buffer: Buffer, options?: {
scaling?: Scaling,
dstRect?: {
x: number,
y: number,
width: number,
height: number,
}
}): void
setIcon (width: number, height: number, stride: number, format: Format, buffer: Buffer): void
flash (untilFocused?: boolean): void
stopFlashing (): void
readonly destroyed: boolean
destroy (): void
destroyGently (): void
}
interface Module {
on (event: 'displayAdd', listener: (event: Events.Display.Add) => void): this
on (event: 'displayRemove', listener: (event: Events.Display.Remove) => void): this
on (event: 'displayOrient', listener: (event: Events.Display.Orient) => void): this
on (event: 'displayMove', listener: (event: Events.Display.Move) => void): this
on (event: '*', listener: (type: string, event: Events.Display.Any) => void): this
readonly displays: Display[]
readonly windows: Window[]
readonly focused: Window
readonly hovered: Window
createWindow (options?: {
title?: string
display?: Display
x?: number
y?: number
width?: number
height?: number
visible?: boolean
fullscreen?: boolean
resizable?: boolean
borderless?: boolean
alwaysOnTop?: boolean
accelerated?: boolean
vsync?: boolean
opengl?: boolean
webgpu?: boolean
skipTaskbar?: boolean
popupMenu?: boolean
tooltip?: boolean
utility?: boolean
}): Window
}
}
export namespace Keyboard {
export type Scancode = number
export type ScancodeNames
= 'A'
| 'B'
| 'C'
| 'D'
| 'E'
| 'F'
| 'G'
| 'H'
| 'I'
| 'J'
| 'K'
| 'L'
| 'M'
| 'N'
| 'O'
| 'P'
| 'Q'
| 'R'
| 'S'
| 'T'
| 'U'
| 'V'
| 'W'
| 'X'
| 'Y'
| 'Z'
| '1'
| '2'
| '3'
| '4'
| '5'
| '6'
| '7'
| '8'
| '9'
| '0'
| 'RETURN'
| 'ESCAPE'
| 'BACKSPACE'
| 'TAB'
| 'SPACE'
| 'MINUS'
| 'EQUALS'
| 'LEFTBRACKET'
| 'RIGHTBRACKET'
| 'BACKSLASH'
| 'NONUSHASH'
| 'SEMICOLON'
| 'APOSTROPHE'
| 'GRAVE'
| 'COMMA'
| 'PERIOD'
| 'SLASH'
| 'CAPSLOCK'
| 'F1'
| 'F2'
| 'F3'
| 'F4'
| 'F5'
| 'F6'
| 'F7'
| 'F8'
| 'F9'
| 'F10'
| 'F11'
| 'F12'
| 'PRINTSCREEN'
| 'SCROLLLOCK'
| 'PAUSE'
| 'INSERT'
| 'HOME'
| 'PAGEUP'
| 'DELETE'
| 'END'
| 'PAGEDOWN'
| 'RIGHT'
| 'LEFT'
| 'DOWN'
| 'UP'
| 'NUMLOCKCLEAR'
| 'KP_DIVIDE'
| 'KP_MULTIPLY'
| 'KP_MINUS'
| 'KP_PLUS'
| 'KP_ENTER'
| 'KP_1'
| 'KP_2'
| 'KP_3'
| 'KP_4'
| 'KP_5'
| 'KP_6'
| 'KP_7'
| 'KP_8'
| 'KP_9'
| 'KP_0'
| 'KP_PERIOD'
| 'NONUSBACKSLASH'
| 'APPLICATION'
| 'POWER'
| 'KP_EQUALS'
| 'F13'
| 'F14'
| 'F15'
| 'F16'
| 'F17'
| 'F18'
| 'F19'
| 'F20'
| 'F21'
| 'F22'
| 'F23'
| 'F24'
| 'EXECUTE'
| 'HELP'
| 'MENU'
| 'SELECT'
| 'STOP'
| 'AGAIN'
| 'UNDO'
| 'CUT'
| 'COPY'
| 'PASTE'
| 'FIND'
| 'MUTE'
| 'VOLUMEUP'
| 'VOLUMEDOWN'
| 'KP_COMMA'
| 'KP_EQUALSAS400'
| 'INTERNATIONAL1'
| 'INTERNATIONAL2'
| 'INTERNATIONAL3'
| 'INTERNATIONAL4'
| 'INTERNATIONAL5'
| 'INTERNATIONAL6'
| 'INTERNATIONAL7'
| 'INTERNATIONAL8'
| 'INTERNATIONAL9'
| 'LANG1'
| 'LANG2'
| 'LANG3'
| 'LANG4'
| 'LANG5'
| 'LANG6'
| 'LANG7'
| 'LANG8'
| 'LANG9'
| 'ALTERASE'
| 'SYSREQ'
| 'CANCEL'
| 'CLEAR'
| 'PRIOR'
| 'RETURN2'
| 'SEPARATOR'
| 'OUT'
| 'OPER'
| 'CLEARAGAIN'
| 'CRSEL'
| 'EXSEL'
| 'KP_00'
| 'KP_000'
| 'THOUSANDSSEPARATOR'
| 'DECIMALSEPARATOR'
| 'CURRENCYUNIT'
| 'CURRENCYSUBUNIT'
| 'KP_LEFTPAREN'
| 'KP_RIGHTPAREN'
| 'KP_LEFTBRACE'
| 'KP_RIGHTBRACE'
| 'KP_TAB'
| 'KP_BACKSPACE'
| 'KP_A'
| 'KP_B'
| 'KP_C'
| 'KP_D'
| 'KP_E'
| 'KP_F'
| 'KP_XOR'
| 'KP_POWER'
| 'KP_PERCENT'
| 'KP_LESS'
| 'KP_GREATER'
| 'KP_AMPERSAND'
| 'KP_DBLAMPERSAND'
| 'KP_VERTICALBAR'
| 'KP_DBLVERTICALBAR'
| 'KP_COLON'
| 'KP_HASH'
| 'KP_SPACE'
| 'KP_AT'
| 'KP_EXCLAM'
| 'KP_MEMSTORE'
| 'KP_MEMRECALL'
| 'KP_MEMCLEAR'
| 'KP_MEMADD'
| 'KP_MEMSUBTRACT'
| 'KP_MEMMULTIPLY'
| 'KP_MEMDIVIDE'
| 'KP_PLUSMINUS'
| 'KP_CLEAR'
| 'KP_CLEARENTRY'
| 'KP_BINARY'
| 'KP_OCTAL'
| 'KP_DECIMAL'
| 'KP_HEXADECIMAL'
| 'LCTRL'
| 'LSHIFT'
| 'LALT'
| 'LGUI'
| 'RCTRL'
| 'RSHIFT'
| 'RALT'
| 'RGUI'
| 'MODE'
| 'AUDIONEXT'
| 'AUDIOPREV'
| 'AUDIOSTOP'
| 'AUDIOPLAY'
| 'AUDIOMUTE'
| 'MEDIASELECT'
| 'WWW'
| 'MAIL'
| 'CALCULATOR'
| 'COMPUTER'
| 'AC_SEARCH'
| 'AC_HOME'
| 'AC_BACK'
| 'AC_FORWARD'
| 'AC_STOP'
| 'AC_REFRESH'
| 'AC_BOOKMARKS'
| 'BRIGHTNESSDOWN'
| 'BRIGHTNESSUP'
| 'DISPLAYSWITCH'
| 'KBDILLUMTOGGLE'
| 'KBDILLUMDOWN'
| 'KBDILLUMUP'
| 'EJECT'
| 'SLEEP'
| 'APP1'
| 'APP2'
| 'AUDIOREWIND'
| 'AUDIOFASTFORWARD'
export type Key = string
interface Module {
readonly SCANCODE: { [name in ScancodeNames]: Scancode }
on (event: 'keymapChange', listener: (event: Events.Keyboard.KeymapChange) => void): this
getKey (scancode: Scancode): Key | null
getScancode (key: Key): Scancode | null
getState (): boolean[]
}
}
export namespace Mouse {
export type Button = number
export type ButtonNames
= 'LEFT'
| 'MIDDLE'
| 'RIGHT'
export type Cursor
= 'arrow'
| 'ibeam'
| 'wait'
| 'crosshair'
| 'waitarrow'
| 'sizenwse'
| 'sizenesw'
| 'sizewe'
| 'sizens'
| 'sizeall'
| 'no'
| 'hand'
interface Module {
readonly BUTTON: { [name in ButtonNames]: number }
getButton (button: number): boolean
readonly position: {
x: number
y: number
}
setPosition (x: number, y: number): void
setCursor (cursor: Cursor): void
resetCursor (): void
setCursorImage (width: number, height: number, stride: number, format: Video.Format, buffer: Buffer): void
showCursor (show?: boolean): void
hideCursor (): void
redrawCursor (): void
capture (): void
uncapture (): void
}
}
export namespace Touch {
export type DeviceType
= 'direct'
| 'indirectAbsolute'
| 'indirectRelative'
export interface Device {
readonly id: number
readonly name: string | null
readonly type: DeviceType | null
}
interface Module {
readonly devices: Device[]
}
}
export namespace Joystick {
export interface BallPosition {
readonly x: number
readonly y: number
}
export type JoystickType
= null
| 'gamecontroller'
| 'wheel'
| 'arcadestick'
| 'flightstick'
| 'dancepad'
| 'guitar'
| 'drumkit'
| 'arcadepad'
| 'throttle'
export type HatPosition
= 'centered'
| 'up'
| 'right'
| 'down'
| 'left'
| 'rightup'
| 'rightdown'
| 'leftup'
| 'leftdown'
export type PowerLevel
= 'empty'
| 'low'
| 'medium'
| 'full'
| 'wired'
| 'max'
export interface Device {
readonly id: number
readonly name: string | null
readonly path: string | null
readonly type: JoystickType | null
readonly guid: string | null
readonly vendor: number | null
readonly product: number | null
readonly version: number | null
readonly player: number | null
}
export class JoystickInstance {
on (event: 'axisMotion', listener: (event: Events.Joystick.AxisMotion) => void): this
on (event: 'ballMotion', listener: (event: Events.Joystick.BallMotion) => void): this
on (event: 'buttonDown', listener: (event: Events.Joystick.ButtonDown) => void): this
on (event: 'buttonUp', listener: (event: Events.Joystick.ButtonUp) => void): this
on (event: 'hatMotion', listener: (event: Events.Joystick.HatMotion) => void): this
on (event: 'powerUpdate', listener: (event: Events.Joystick.PowerUpdate) => void): this
on (event: 'close', listener: (event: Events.Joystick.Close) => void): this
on (event: '*', listener: (type: string, event: Events.Joystick.Any) => void): this
readonly device: Device
readonly firmwareVersion: number
readonly serialNumber: string
readonly axes: number[]
readonly balls: BallPosition[]
readonly hats: HatPosition[]
readonly buttons: boolean[]
readonly power: PowerLevel | null
setPlayer (index: number): void
resetPlayer (): void
readonly hasLed: boolean
setLed (red: number, green: number, blue: number): void
readonly hasRumble: boolean
rumble (lowFreqRumble: number, highFreqRumble: number, duration: number): void
stopRumble (): void
readonly hasRumbleTriggers: boolean
rumbleTriggers (leftRumble: number, rightRumble: number, duration: number): void
stopRumbleTriggers (): void
readonly closed: boolean
close (): void
}
interface Module {
on (event: 'deviceAdd', listener: (event: Events.JoystickDevice.Add) => void): this
on (event: 'deviceRemove', listener: (event: Events.JoystickDevice.Remove) => void): this
on (event: '*', listener: (type: string, event: Events.JoystickDevice.Any) => void): this
readonly devices: Device[]
openDevice (device: Device): JoystickInstance
}
}
export namespace Controller {
export type ControllerType
= null
| 'xbox360'
| 'xboxOne'
| 'ps3'
| 'ps4'
| 'nintendoSwitchPro'
| 'virtual'
| 'ps5'
| 'amazonLuna'
| 'googleStadia'
| 'nvidiaShield'
| 'nintendoSwitchJoyconLeft'
| 'nintendoSwitchJoyconRight'
| 'nintendoSwitchJoyconPair'
export type Axis
= 'leftStickX'
| 'leftStickY'
| 'rightStickX'
| 'rightStickY'
| 'leftTrigger'
| 'rightTrigger'
export type Button
= 'dpadLeft'
| 'dpadRight'
| 'dpadUp'
| 'dpadDown'
| 'a'
| 'b'
| 'x'
| 'y'
| 'guide'
| 'back'
| 'start'
| 'leftStick'
| 'rightStick'
| 'leftShoulder'
| 'rightShoulder'
| 'paddle1'
| 'paddle2'
| 'paddle3'
| 'paddle4'
export interface Device {
readonly id: number
readonly name: string
readonly path: string | null
readonly type: ControllerType | null
readonly guid: string | null
readonly vendor: number | null
readonly product: number | null
readonly version: number | null
readonly player: number | null
readonly mapping: string | null
}
export class ControllerInstance {
on (event: 'axisMotion', listener: (event: Events.Controller.AxisMotion) => void): this
on (event: 'buttonDown', listener: (event: Events.Controller.ButtonDown) => void): this
on (event: 'buttonUp', listener: (event: Events.Controller.ButtonUp) => void): this
on (event: 'powerUpdate', listener: (event: Events.Controller.PowerUpdate) => void): this
on (event: 'steamHandleUpdate', listener: (event: Events.Controller.SteamHandleUpdate) => void): this
on (event: 'remap', listener: (event: Events.Controller.Remap) => void): this
on (event: 'close', listener: (event: Events.Controller.Close) => void): this
on (event: '*', listener: (type: string, event: Events.Controller.Any) => void): this
readonly device: Device
readonly firmwareVersion: number
readonly serialNumber: string
readonly steamHandle: Buffer | null
readonly axes: {
readonly leftStickX: number
readonly leftStickY: number
readonly rightStickX: number
readonly rightStickY: number
readonly leftTrigger: number
readonly rightTrigger: number
}
readonly buttons: {
readonly dpadLeft: boolean
readonly dpadRight: boolean
readonly dpadUp: boolean
readonly dpadDown: boolean
readonly a: boolean
readonly b: boolean
readonly x: boolean
readonly y: boolean
readonly guide: boolean
readonly back: boolean
readonly start: boolean
readonly leftStick: boolean
readonly rightStick: boolean
readonly leftShoulder: boolean
readonly rightShoulder: boolean
readonly paddle1: boolean
readonly paddle2: boolean
readonly paddle3: boolean
readonly paddle4: boolean
}
readonly power: Joystick.PowerLevel
setPlayer (index: number): void
resetPlayer (): void
readonly hasLed: boolean
setLed (red: number, green: number, blue: number): void
readonly hasRumble: boolean
rumble (lowFreqRumble: number, highFreqRumble: number, duration: number): void
stopRumble (): void
readonly hasRumbleTriggers: boolean
rumbleTriggers (leftRumble: number, rightRumble: number, duration: number): void
stopRumbleTriggers (): void
readonly closed: boolean
close (): void
}
interface Module {
on (event: 'deviceAdd', listener: (event: Events.ControllerDevice.Add) => void): this
on (event: 'deviceRemove', listener: (event: Events.ControllerDevice.Remove) => void): this
on (event: '*', listener: (type: string, event: Events.ControllerDevice.Any) => void): this
addMappings (mappings: string[]): void
readonly devices: Device[]
openDevice (device: Device): ControllerInstance
}
}
export namespace Sensor {
export type Type
= 'unknown'
| 'accelerometer'
| 'gyroscope'
export type Side
= 'left'
| 'right'
export interface Device {
readonly id: number
readonly name: string
readonly type: Type | null
readonly side: Side | null
}
export interface Data {
readonly timestamp: number | null
readonly x: number
readonly y: number
readonly z: number
}
export class SensorInstance {
on (event: 'update', listener: (event: Events.Sensor.Update) => void): this
on (event: 'close', listener: (event: Events.Sensor.Close) => void): this
on (event: '*', listener: (type: string, event: Events.Sensor.Any) => void): this
readonly device: Device
readonly data: Data
readonly closed: boolean
close (): void
}
interface Module {
readonly STANDARD_GRAVITY: 9.80665
readonly devices: Device[]
openDevice (device: Device): SensorInstance
}
}
export namespace Audio {
export type Format
= 's8'
| 'u8'
| 's16lsb'
| 's16msb'
| 's16sys'
| 's16'
| 'u16lsb'
| 'u16msb'
| 'u16sys'
| 'u16'
| 's32lsb'
| 's32msb'
| 's32sys'
| 's32'
| 'f32lsb'
| 'f32msb'
| 'f32sys'
| 'f32'
export interface Device {
readonly type: "recording"|"playback"
readonly name?: string
}
export interface PlaybackDevice extends Device {
readonly type: "playback"
}
export interface RecordingDevice extends Device {
readonly type: "recording"
}
export class AudioInstance {
on (event: 'close', listener: (event: Events.Audio.Close) => void): this
on (event: '*', listener: (type: string, event: Events.Audio.Any) => void): this
readonly id: number
readonly device: Device
readonly channels: number
readonly frequency: number
readonly format: Format
readonly buffered: number
readonly playing: boolean
play (play?: boolean): void
pause (): void
readonly queued: number
clearQueue (): void
readonly bytesPerSample: number
readonly minSampleValue: number
readonly maxSampleValue: number
readonly zeroSampleValue: number
readSample (buffer: Buffer, offset?: number): number
writeSample (buffer: Buffer, value: number, offset?: number): number
readonly closed: boolean
close (): void
}
export class AudioPlaybackInstance extends AudioInstance {
enqueue (buffer: Buffer, bytes?: number): void
}
export class AudioRecordingInstance extends AudioInstance {
dequeue (buffer: Buffer, bytes?: number): number
}
export interface AudioOptions {
readonly channels?: 1 | 2 | 4 | 6
readonly frequency?: number
readonly format?: Format
readonly buffered?: number
}
interface Module {
on (event: 'deviceAdd', listener: (event: Events.AudioDevice.Add) => void): this
on (event: 'deviceRemove', listener: (event: Events.AudioDevice.Remove) => void): this
on (event: '*', listener: (type: string, event: Events.AudioDevice.Any) => void): this
readonly devices: Device[]
openDevice (device: PlaybackDevice, options?: AudioOptions): AudioPlaybackInstance
openDevice (device: RecordingDevice, options?: AudioOptions): AudioRecordingInstance
bytesPerSample (format: Format): number
minSampleValue (format: Format): number
maxSampleValue (format: Format): number
zeroSampleValue (format: Format): number
readSample (format: Format, buffer: Buffer, offset?: number): number
writeSample (format: Format, buffer: Buffer, value: number, offset?: number): number
}
}
export namespace Clipboard {
interface Module {
on (event: 'update', listener: (event: Events.Clipboard.Update) => void): this
on (event: '*', listener: (type: string, event: Events.Clipboard.Any) => void): this
readonly text: string
setText (text: string): void
}
}
export namespace Power {
export type PowerState
= 'noBattery'
| 'battery'
| 'charging'
| 'charged'
export interface PowerInfo {
readonly state: PowerState | null
readonly seconds: number | null
readonly percent: number | null
}
interface Module {
readonly info: PowerInfo
}
}
}
export const info: Sdl.Info
export const video: Sdl.Video.Module
export const keyboard: Sdl.Keyboard.Module
export const mouse: Sdl.Mouse.Module
export const touch: Sdl.Touch.Module
export const joystick: Sdl.Joystick.Module
export const controller: Sdl.Controller.Module
export const sensor: Sdl.Sensor.Module
export const audio: Sdl.Audio.Module
export const clipboard: Sdl.Clipboard.Module
export const power: Sdl.Power.Module