AtlatestRepositorysigil-raylib
sigil-raylib / tree / src / raylibinput.sgl
1
;;; (raylib input) — Keyboard, mouse, gamepad, touch, and gesture input2
;;;3
;;; Provides input polling functions and all input-related constants4
;;; (KEY_*, MOUSE_BUTTON_*, MOUSE_CURSOR_*, GAMEPAD_BUTTON_*,5
;;; GAMEPAD_AXIS_*, GESTURE_*).7
(define-library (raylib input)8
(import (sigil core)9
(sigil ffi)10
(raylib core))12
(export13
;; Keyboard keys14
KEY_NULL KEY_APOSTROPHE KEY_COMMA KEY_MINUS KEY_PERIOD KEY_SLASH15
KEY_ZERO KEY_ONE KEY_TWO KEY_THREE KEY_FOUR KEY_FIVE KEY_SIX16
KEY_SEVEN KEY_EIGHT KEY_NINE KEY_SEMICOLON KEY_EQUAL17
KEY_A KEY_B KEY_C KEY_D KEY_E KEY_F KEY_G KEY_H KEY_I KEY_J18
KEY_K KEY_L KEY_M KEY_N KEY_O KEY_P KEY_Q KEY_R KEY_S KEY_T19
KEY_U KEY_V KEY_W KEY_X KEY_Y KEY_Z20
KEY_LEFT_BRACKET KEY_BACKSLASH KEY_RIGHT_BRACKET KEY_GRAVE21
KEY_SPACE KEY_ESCAPE KEY_ENTER KEY_TAB KEY_BACKSPACE KEY_INSERT22
KEY_DELETE KEY_RIGHT KEY_LEFT KEY_DOWN KEY_UP23
KEY_PAGE_UP KEY_PAGE_DOWN KEY_HOME KEY_END24
KEY_CAPS_LOCK KEY_SCROLL_LOCK KEY_NUM_LOCK KEY_PRINT_SCREEN25
KEY_PAUSE26
KEY_F1 KEY_F2 KEY_F3 KEY_F4 KEY_F5 KEY_F6 KEY_F7 KEY_F827
KEY_F9 KEY_F10 KEY_F11 KEY_F1228
KEY_LEFT_SHIFT KEY_LEFT_CONTROL KEY_LEFT_ALT KEY_LEFT_SUPER29
KEY_RIGHT_SHIFT KEY_RIGHT_CONTROL KEY_RIGHT_ALT KEY_RIGHT_SUPER30
KEY_KB_MENU31
KEY_KP_0 KEY_KP_1 KEY_KP_2 KEY_KP_3 KEY_KP_4 KEY_KP_532
KEY_KP_6 KEY_KP_7 KEY_KP_8 KEY_KP_933
KEY_KP_DECIMAL KEY_KP_DIVIDE KEY_KP_MULTIPLY KEY_KP_SUBTRACT34
KEY_KP_ADD KEY_KP_ENTER KEY_KP_EQUAL KEY_BACK KEY_VOLUME_UP KEY_VOLUME_DOWN36
;; Mouse buttons37
MOUSE_BUTTON_LEFT MOUSE_BUTTON_RIGHT MOUSE_BUTTON_MIDDLE38
MOUSE_BUTTON_SIDE MOUSE_BUTTON_EXTRA MOUSE_BUTTON_FORWARD39
MOUSE_BUTTON_BACK41
;; Mouse cursors42
MOUSE_CURSOR_DEFAULT MOUSE_CURSOR_ARROW MOUSE_CURSOR_IBEAM43
MOUSE_CURSOR_CROSSHAIR MOUSE_CURSOR_POINTING_HAND44
MOUSE_CURSOR_RESIZE_EW MOUSE_CURSOR_RESIZE_NS45
MOUSE_CURSOR_RESIZE_NWSE MOUSE_CURSOR_RESIZE_NESW46
MOUSE_CURSOR_RESIZE_ALL MOUSE_CURSOR_NOT_ALLOWED48
;; Gamepad buttons49
GAMEPAD_BUTTON_UNKNOWN50
GAMEPAD_BUTTON_LEFT_FACE_UP GAMEPAD_BUTTON_LEFT_FACE_RIGHT51
GAMEPAD_BUTTON_LEFT_FACE_DOWN GAMEPAD_BUTTON_LEFT_FACE_LEFT52
GAMEPAD_BUTTON_RIGHT_FACE_UP GAMEPAD_BUTTON_RIGHT_FACE_RIGHT53
GAMEPAD_BUTTON_RIGHT_FACE_DOWN GAMEPAD_BUTTON_RIGHT_FACE_LEFT54
GAMEPAD_BUTTON_LEFT_TRIGGER_1 GAMEPAD_BUTTON_LEFT_TRIGGER_255
GAMEPAD_BUTTON_RIGHT_TRIGGER_1 GAMEPAD_BUTTON_RIGHT_TRIGGER_256
GAMEPAD_BUTTON_MIDDLE_LEFT GAMEPAD_BUTTON_MIDDLE57
GAMEPAD_BUTTON_MIDDLE_RIGHT58
GAMEPAD_BUTTON_LEFT_THUMB GAMEPAD_BUTTON_RIGHT_THUMB60
;; Gamepad axes61
GAMEPAD_AXIS_LEFT_X GAMEPAD_AXIS_LEFT_Y62
GAMEPAD_AXIS_RIGHT_X GAMEPAD_AXIS_RIGHT_Y63
GAMEPAD_AXIS_LEFT_TRIGGER GAMEPAD_AXIS_RIGHT_TRIGGER65
;; Gesture types66
GESTURE_NONE GESTURE_TAP GESTURE_DOUBLETAP GESTURE_HOLD67
GESTURE_DRAG GESTURE_SWIPE_RIGHT GESTURE_SWIPE_LEFT68
GESTURE_SWIPE_UP GESTURE_SWIPE_DOWN GESTURE_PINCH_IN69
GESTURE_PINCH_OUT71
;; Input — Keyboard72
key-pressed? key-pressed-repeat? key-down? key-released? key-up?73
get-key-pressed get-char-pressed set-exit-key75
;; Input — Mouse76
mouse-button-pressed? mouse-button-down?77
mouse-button-released? mouse-button-up?78
get-mouse-x get-mouse-y79
set-mouse-position set-mouse-offset set-mouse-scale80
get-mouse-wheel-move set-mouse-cursor82
;; Input — Gamepad83
gamepad-available? get-gamepad-name84
gamepad-button-pressed? gamepad-button-down?85
gamepad-button-released? gamepad-button-up?86
get-gamepad-button-pressed get-gamepad-axis-count87
get-gamepad-axis-movement set-gamepad-mappings89
;; Input — Touch90
get-touch-x get-touch-y get-touch-point-id get-touch-point-count92
;; Input — Gesture93
set-gestures-enabled gesture-detected? get-gesture-detected94
get-gesture-hold-duration get-gesture-drag-angle95
get-gesture-pinch-angle)97
(begin99
;; ============================================================100
;; Keyboard Keys101
;; ============================================================103
(define KEY_NULL 0)104
(define KEY_APOSTROPHE 39)105
(define KEY_COMMA 44)106
(define KEY_MINUS 45)107
(define KEY_PERIOD 46)108
(define KEY_SLASH 47)109
(define KEY_ZERO 48)110
(define KEY_ONE 49)111
(define KEY_TWO 50)112
(define KEY_THREE 51)113
(define KEY_FOUR 52)114
(define KEY_FIVE 53)115
(define KEY_SIX 54)116
(define KEY_SEVEN 55)117
(define KEY_EIGHT 56)118
(define KEY_NINE 57)119
(define KEY_SEMICOLON 59)120
(define KEY_EQUAL 61)121
(define KEY_A 65)122
(define KEY_B 66)123
(define KEY_C 67)124
(define KEY_D 68)125
(define KEY_E 69)126
(define KEY_F 70)127
(define KEY_G 71)128
(define KEY_H 72)129
(define KEY_I 73)130
(define KEY_J 74)131
(define KEY_K 75)132
(define KEY_L 76)133
(define KEY_M 77)134
(define KEY_N 78)135
(define KEY_O 79)136
(define KEY_P 80)137
(define KEY_Q 81)138
(define KEY_R 82)139
(define KEY_S 83)140
(define KEY_T 84)141
(define KEY_U 85)142
(define KEY_V 86)143
(define KEY_W 87)144
(define KEY_X 88)145
(define KEY_Y 89)146
(define KEY_Z 90)147
(define KEY_LEFT_BRACKET 91)148
(define KEY_BACKSLASH 92)149
(define KEY_RIGHT_BRACKET 93)150
(define KEY_GRAVE 96)151
(define KEY_SPACE 32)152
(define KEY_ESCAPE 256)153
(define KEY_ENTER 257)154
(define KEY_TAB 258)155
(define KEY_BACKSPACE 259)156
(define KEY_INSERT 260)157
(define KEY_DELETE 261)158
(define KEY_RIGHT 262)159
(define KEY_LEFT 263)160
(define KEY_DOWN 264)161
(define KEY_UP 265)162
(define KEY_PAGE_UP 266)163
(define KEY_PAGE_DOWN 267)164
(define KEY_HOME 268)165
(define KEY_END 269)166
(define KEY_CAPS_LOCK 280)167
(define KEY_SCROLL_LOCK 281)168
(define KEY_NUM_LOCK 282)169
(define KEY_PRINT_SCREEN 283)170
(define KEY_PAUSE 284)171
(define KEY_F1 290)172
(define KEY_F2 291)173
(define KEY_F3 292)174
(define KEY_F4 293)175
(define KEY_F5 294)176
(define KEY_F6 295)177
(define KEY_F7 296)178
(define KEY_F8 297)179
(define KEY_F9 298)180
(define KEY_F10 299)181
(define KEY_F11 300)182
(define KEY_F12 301)183
(define KEY_LEFT_SHIFT 340)184
(define KEY_LEFT_CONTROL 341)185
(define KEY_LEFT_ALT 342)186
(define KEY_LEFT_SUPER 343)187
(define KEY_RIGHT_SHIFT 344)188
(define KEY_RIGHT_CONTROL 345)189
(define KEY_RIGHT_ALT 346)190
(define KEY_RIGHT_SUPER 347)191
(define KEY_KB_MENU 348)192
(define KEY_KP_0 320)193
(define KEY_KP_1 321)194
(define KEY_KP_2 322)195
(define KEY_KP_3 323)196
(define KEY_KP_4 324)197
(define KEY_KP_5 325)198
(define KEY_KP_6 326)199
(define KEY_KP_7 327)200
(define KEY_KP_8 328)201
(define KEY_KP_9 329)202
(define KEY_KP_DECIMAL 330)203
(define KEY_KP_DIVIDE 331)204
(define KEY_KP_MULTIPLY 332)205
(define KEY_KP_SUBTRACT 333)206
(define KEY_KP_ADD 334)207
(define KEY_KP_ENTER 335)208
(define KEY_KP_EQUAL 336)209
(define KEY_BACK 4)210
(define KEY_VOLUME_UP 24)211
(define KEY_VOLUME_DOWN 25)213
;; ============================================================214
;; Mouse Buttons215
;; ============================================================217
(define MOUSE_BUTTON_LEFT 0)218
(define MOUSE_BUTTON_RIGHT 1)219
(define MOUSE_BUTTON_MIDDLE 2)220
(define MOUSE_BUTTON_SIDE 3)221
(define MOUSE_BUTTON_EXTRA 4)222
(define MOUSE_BUTTON_FORWARD 5)223
(define MOUSE_BUTTON_BACK 6)225
;; ============================================================226
;; Mouse Cursors227
;; ============================================================229
(define MOUSE_CURSOR_DEFAULT 0)230
(define MOUSE_CURSOR_ARROW 1)231
(define MOUSE_CURSOR_IBEAM 2)232
(define MOUSE_CURSOR_CROSSHAIR 3)233
(define MOUSE_CURSOR_POINTING_HAND 4)234
(define MOUSE_CURSOR_RESIZE_EW 5)235
(define MOUSE_CURSOR_RESIZE_NS 6)236
(define MOUSE_CURSOR_RESIZE_NWSE 7)237
(define MOUSE_CURSOR_RESIZE_NESW 8)238
(define MOUSE_CURSOR_RESIZE_ALL 9)239
(define MOUSE_CURSOR_NOT_ALLOWED 10)241
;; ============================================================242
;; Gamepad Buttons243
;; ============================================================245
(define GAMEPAD_BUTTON_UNKNOWN 0)246
(define GAMEPAD_BUTTON_LEFT_FACE_UP 1)247
(define GAMEPAD_BUTTON_LEFT_FACE_RIGHT 2)248
(define GAMEPAD_BUTTON_LEFT_FACE_DOWN 3)249
(define GAMEPAD_BUTTON_LEFT_FACE_LEFT 4)250
(define GAMEPAD_BUTTON_RIGHT_FACE_UP 5)251
(define GAMEPAD_BUTTON_RIGHT_FACE_RIGHT 6)252
(define GAMEPAD_BUTTON_RIGHT_FACE_DOWN 7)253
(define GAMEPAD_BUTTON_RIGHT_FACE_LEFT 8)254
(define GAMEPAD_BUTTON_LEFT_TRIGGER_1 9)255
(define GAMEPAD_BUTTON_LEFT_TRIGGER_2 10)256
(define GAMEPAD_BUTTON_RIGHT_TRIGGER_1 11)257
(define GAMEPAD_BUTTON_RIGHT_TRIGGER_2 12)258
(define GAMEPAD_BUTTON_MIDDLE_LEFT 13)259
(define GAMEPAD_BUTTON_MIDDLE 14)260
(define GAMEPAD_BUTTON_MIDDLE_RIGHT 15)261
(define GAMEPAD_BUTTON_LEFT_THUMB 16)262
(define GAMEPAD_BUTTON_RIGHT_THUMB 17)264
;; ============================================================265
;; Gamepad Axes266
;; ============================================================268
(define GAMEPAD_AXIS_LEFT_X 0)269
(define GAMEPAD_AXIS_LEFT_Y 1)270
(define GAMEPAD_AXIS_RIGHT_X 2)271
(define GAMEPAD_AXIS_RIGHT_Y 3)272
(define GAMEPAD_AXIS_LEFT_TRIGGER 4)273
(define GAMEPAD_AXIS_RIGHT_TRIGGER 5)275
;; ============================================================276
;; Gesture Types277
;; ============================================================279
(define GESTURE_NONE 0)280
(define GESTURE_TAP 1)281
(define GESTURE_DOUBLETAP 2)282
(define GESTURE_HOLD 4)283
(define GESTURE_DRAG 8)284
(define GESTURE_SWIPE_RIGHT 16)285
(define GESTURE_SWIPE_LEFT 32)286
(define GESTURE_SWIPE_UP 64)287
(define GESTURE_SWIPE_DOWN 128)288
(define GESTURE_PINCH_IN 256)289
(define GESTURE_PINCH_OUT 512)291
;; ============================================================292
;; Raw FFI Bindings (private)293
;; ============================================================295
;; --- Input: Keyboard ---296
(define %key-pressed (c-function rl-lib "IsKeyPressed" (list ffi/int) ffi/int))297
(define %key-pressed-repeat (c-function rl-lib "IsKeyPressedRepeat" (list ffi/int) ffi/int))298
(define %key-down (c-function rl-lib "IsKeyDown" (list ffi/int) ffi/int))299
(define %key-released (c-function rl-lib "IsKeyReleased" (list ffi/int) ffi/int))300
(define %key-up (c-function rl-lib "IsKeyUp" (list ffi/int) ffi/int))301
(define %get-key-pressed (c-function rl-lib "GetKeyPressed" '() ffi/int))302
(define %get-char-pressed (c-function rl-lib "GetCharPressed" '() ffi/int))303
(define %set-exit-key (c-function rl-lib "SetExitKey" (list ffi/int) ffi/void))305
;; --- Input: Mouse ---306
(define %mouse-button-pressed (c-function rl-lib "IsMouseButtonPressed" (list ffi/int) ffi/int))307
(define %mouse-button-down (c-function rl-lib "IsMouseButtonDown" (list ffi/int) ffi/int))308
(define %mouse-button-released (c-function rl-lib "IsMouseButtonReleased" (list ffi/int) ffi/int))309
(define %mouse-button-up (c-function rl-lib "IsMouseButtonUp" (list ffi/int) ffi/int))310
(define %get-mouse-x (c-function rl-lib "GetMouseX" '() ffi/int))311
(define %get-mouse-y (c-function rl-lib "GetMouseY" '() ffi/int))312
(define %set-mouse-position (c-function rl-lib "SetMousePosition" (list ffi/int ffi/int) ffi/void))313
(define %set-mouse-offset (c-function rl-lib "SetMouseOffset" (list ffi/int ffi/int) ffi/void))314
(define %set-mouse-scale (c-function rl-lib "SetMouseScale" (list ffi/float ffi/float) ffi/void))315
(define %get-mouse-wheel-move (c-function rl-lib "GetMouseWheelMove" '() ffi/float))316
(define %set-mouse-cursor (c-function rl-lib "SetMouseCursor" (list ffi/int) ffi/void))318
;; --- Input: Gamepad ---319
(define %gamepad-available (c-function rl-lib "IsGamepadAvailable" (list ffi/int) ffi/int))320
(define %get-gamepad-name (c-function rl-lib "GetGamepadName" (list ffi/int) ffi/string))321
(define %gamepad-button-pressed (c-function rl-lib "IsGamepadButtonPressed" (list ffi/int ffi/int) ffi/int))322
(define %gamepad-button-down (c-function rl-lib "IsGamepadButtonDown" (list ffi/int ffi/int) ffi/int))323
(define %gamepad-button-released (c-function rl-lib "IsGamepadButtonReleased" (list ffi/int ffi/int) ffi/int))324
(define %gamepad-button-up (c-function rl-lib "IsGamepadButtonUp" (list ffi/int ffi/int) ffi/int))325
(define %get-gamepad-button-pressed (c-function rl-lib "GetGamepadButtonPressed" '() ffi/int))326
(define %get-gamepad-axis-count (c-function rl-lib "GetGamepadAxisCount" (list ffi/int) ffi/int))327
(define %get-gamepad-axis-movement (c-function rl-lib "GetGamepadAxisMovement" (list ffi/int ffi/int) ffi/float))328
(define %set-gamepad-mappings (c-function rl-lib "SetGamepadMappings" (list ffi/string) ffi/int))330
;; --- Input: Touch ---331
(define %get-touch-x (c-function rl-lib "GetTouchX" '() ffi/int))332
(define %get-touch-y (c-function rl-lib "GetTouchY" '() ffi/int))333
(define %get-touch-point-id (c-function rl-lib "GetTouchPointId" (list ffi/int) ffi/int))334
(define %get-touch-point-count (c-function rl-lib "GetTouchPointCount" '() ffi/int))336
;; --- Gesture ---337
(define %set-gestures-enabled (c-function rl-lib "SetGesturesEnabled" (list ffi/uint) ffi/void))338
(define %gesture-detected (c-function rl-lib "IsGestureDetected" (list ffi/uint) ffi/int))339
(define %get-gesture-detected (c-function rl-lib "GetGestureDetected" '() ffi/int))340
(define %get-gesture-hold-duration (c-function rl-lib "GetGestureHoldDuration" '() ffi/float))341
(define %get-gesture-drag-angle (c-function rl-lib "GetGestureDragAngle" '() ffi/float))342
(define %get-gesture-pinch-angle (c-function rl-lib "GetGesturePinchAngle" '() ffi/float))344
;; ============================================================345
;; Public API346
;; ============================================================348
;; --- Input: Keyboard ---350
;;; Check if a key has been pressed once.351
(define (key-pressed? key) (: integer? -> boolean?) (not (= 0 (%key-pressed key))))352
(define (key-pressed-repeat? key) (: integer? -> boolean?) (not (= 0 (%key-pressed-repeat key))))353
;;; Check if a key is being pressed.354
(define (key-down? key) (: integer? -> boolean?) (not (= 0 (%key-down key))))355
(define (key-released? key) (: integer? -> boolean?) (not (= 0 (%key-released key))))356
(define (key-up? key) (: integer? -> boolean?) (not (= 0 (%key-up key))))357
(define (get-key-pressed) (: -> integer?) (%get-key-pressed))358
(define (get-char-pressed) (: -> integer?) (%get-char-pressed))359
(define (set-exit-key key) (: integer? -> void?) (%set-exit-key key))361
;; --- Input: Mouse ---363
(define (mouse-button-pressed? btn) (: integer? -> boolean?) (not (= 0 (%mouse-button-pressed btn))))364
(define (mouse-button-down? btn) (: integer? -> boolean?) (not (= 0 (%mouse-button-down btn))))365
(define (mouse-button-released? btn) (: integer? -> boolean?) (not (= 0 (%mouse-button-released btn))))366
(define (mouse-button-up? btn) (: integer? -> boolean?) (not (= 0 (%mouse-button-up btn))))367
(define (get-mouse-x) (: -> integer?) (%get-mouse-x))368
(define (get-mouse-y) (: -> integer?) (%get-mouse-y))369
(define (set-mouse-position x y) (: integer? integer? -> void?) (%set-mouse-position x y))370
(define (set-mouse-offset x y) (: integer? integer? -> void?) (%set-mouse-offset x y))371
(define (set-mouse-scale x y) (: number? number? -> void?) (%set-mouse-scale x y))372
(define (get-mouse-wheel-move) (: -> number?) (%get-mouse-wheel-move))373
(define (set-mouse-cursor cursor) (: integer? -> void?) (%set-mouse-cursor cursor))375
;; --- Input: Gamepad ---377
(define (gamepad-available? gamepad) (: integer? -> boolean?) (not (= 0 (%gamepad-available gamepad))))378
(define (get-gamepad-name gamepad) (: integer? -> string?) (%get-gamepad-name gamepad))379
(define (gamepad-button-pressed? gp btn) (: integer? integer? -> boolean?) (not (= 0 (%gamepad-button-pressed gp btn))))380
(define (gamepad-button-down? gp btn) (: integer? integer? -> boolean?) (not (= 0 (%gamepad-button-down gp btn))))381
(define (gamepad-button-released? gp btn) (: integer? integer? -> boolean?) (not (= 0 (%gamepad-button-released gp btn))))382
(define (gamepad-button-up? gp btn) (: integer? integer? -> boolean?) (not (= 0 (%gamepad-button-up gp btn))))383
(define (get-gamepad-button-pressed) (: -> integer?) (%get-gamepad-button-pressed))384
(define (get-gamepad-axis-count gp) (: integer? -> integer?) (%get-gamepad-axis-count gp))385
(define (get-gamepad-axis-movement gp axis) (: integer? integer? -> number?) (%get-gamepad-axis-movement gp axis))386
(define (set-gamepad-mappings mappings) (: string? -> integer?) (%set-gamepad-mappings mappings))388
;; --- Input: Touch ---390
(define (get-touch-x) (: -> integer?) (%get-touch-x))391
(define (get-touch-y) (: -> integer?) (%get-touch-y))392
(define (get-touch-point-id index) (: integer? -> integer?) (%get-touch-point-id index))393
(define (get-touch-point-count) (: -> integer?) (%get-touch-point-count))395
;; --- Gesture ---397
(define (set-gestures-enabled flags) (: integer? -> void?) (%set-gestures-enabled flags))398
(define (gesture-detected? gesture) (: integer? -> boolean?) (not (= 0 (%gesture-detected gesture))))399
(define (get-gesture-detected) (: -> integer?) (%get-gesture-detected))400
(define (get-gesture-hold-duration) (: -> number?) (%get-gesture-hold-duration))401
(define (get-gesture-drag-angle) (: -> number?) (%get-gesture-drag-angle))402
(define (get-gesture-pinch-angle) (: -> number?) (%get-gesture-pinch-angle))))