AtlatestRepositorysigil-raylib

sigil-raylib / tree / src / raylibinput.sgl

1;;; (raylib input) — Keyboard, mouse, gamepad, touch, and gesture input
2;;;
3;;; Provides input polling functions and all input-related constants
4;;; (KEY_*, MOUSE_BUTTON_*, MOUSE_CURSOR_*, GAMEPAD_BUTTON_*,
5;;; GAMEPAD_AXIS_*, GESTURE_*).
6
7(define-library (raylib input)
8 (import (sigil core)
9 (sigil ffi)
10 (raylib core))
12 (export
13 ;; Keyboard keys
14 KEY_NULL KEY_APOSTROPHE KEY_COMMA KEY_MINUS KEY_PERIOD KEY_SLASH
15 KEY_ZERO KEY_ONE KEY_TWO KEY_THREE KEY_FOUR KEY_FIVE KEY_SIX
16 KEY_SEVEN KEY_EIGHT KEY_NINE KEY_SEMICOLON KEY_EQUAL
17 KEY_A KEY_B KEY_C KEY_D KEY_E KEY_F KEY_G KEY_H KEY_I KEY_J
18 KEY_K KEY_L KEY_M KEY_N KEY_O KEY_P KEY_Q KEY_R KEY_S KEY_T
19 KEY_U KEY_V KEY_W KEY_X KEY_Y KEY_Z
20 KEY_LEFT_BRACKET KEY_BACKSLASH KEY_RIGHT_BRACKET KEY_GRAVE
21 KEY_SPACE KEY_ESCAPE KEY_ENTER KEY_TAB KEY_BACKSPACE KEY_INSERT
22 KEY_DELETE KEY_RIGHT KEY_LEFT KEY_DOWN KEY_UP
23 KEY_PAGE_UP KEY_PAGE_DOWN KEY_HOME KEY_END
24 KEY_CAPS_LOCK KEY_SCROLL_LOCK KEY_NUM_LOCK KEY_PRINT_SCREEN
25 KEY_PAUSE
26 KEY_F1 KEY_F2 KEY_F3 KEY_F4 KEY_F5 KEY_F6 KEY_F7 KEY_F8
27 KEY_F9 KEY_F10 KEY_F11 KEY_F12
28 KEY_LEFT_SHIFT KEY_LEFT_CONTROL KEY_LEFT_ALT KEY_LEFT_SUPER
29 KEY_RIGHT_SHIFT KEY_RIGHT_CONTROL KEY_RIGHT_ALT KEY_RIGHT_SUPER
30 KEY_KB_MENU
31 KEY_KP_0 KEY_KP_1 KEY_KP_2 KEY_KP_3 KEY_KP_4 KEY_KP_5
32 KEY_KP_6 KEY_KP_7 KEY_KP_8 KEY_KP_9
33 KEY_KP_DECIMAL KEY_KP_DIVIDE KEY_KP_MULTIPLY KEY_KP_SUBTRACT
34 KEY_KP_ADD KEY_KP_ENTER KEY_KP_EQUAL KEY_BACK KEY_VOLUME_UP KEY_VOLUME_DOWN
36 ;; Mouse buttons
37 MOUSE_BUTTON_LEFT MOUSE_BUTTON_RIGHT MOUSE_BUTTON_MIDDLE
38 MOUSE_BUTTON_SIDE MOUSE_BUTTON_EXTRA MOUSE_BUTTON_FORWARD
39 MOUSE_BUTTON_BACK
41 ;; Mouse cursors
42 MOUSE_CURSOR_DEFAULT MOUSE_CURSOR_ARROW MOUSE_CURSOR_IBEAM
43 MOUSE_CURSOR_CROSSHAIR MOUSE_CURSOR_POINTING_HAND
44 MOUSE_CURSOR_RESIZE_EW MOUSE_CURSOR_RESIZE_NS
45 MOUSE_CURSOR_RESIZE_NWSE MOUSE_CURSOR_RESIZE_NESW
46 MOUSE_CURSOR_RESIZE_ALL MOUSE_CURSOR_NOT_ALLOWED
48 ;; Gamepad buttons
49 GAMEPAD_BUTTON_UNKNOWN
50 GAMEPAD_BUTTON_LEFT_FACE_UP GAMEPAD_BUTTON_LEFT_FACE_RIGHT
51 GAMEPAD_BUTTON_LEFT_FACE_DOWN GAMEPAD_BUTTON_LEFT_FACE_LEFT
52 GAMEPAD_BUTTON_RIGHT_FACE_UP GAMEPAD_BUTTON_RIGHT_FACE_RIGHT
53 GAMEPAD_BUTTON_RIGHT_FACE_DOWN GAMEPAD_BUTTON_RIGHT_FACE_LEFT
54 GAMEPAD_BUTTON_LEFT_TRIGGER_1 GAMEPAD_BUTTON_LEFT_TRIGGER_2
55 GAMEPAD_BUTTON_RIGHT_TRIGGER_1 GAMEPAD_BUTTON_RIGHT_TRIGGER_2
56 GAMEPAD_BUTTON_MIDDLE_LEFT GAMEPAD_BUTTON_MIDDLE
57 GAMEPAD_BUTTON_MIDDLE_RIGHT
58 GAMEPAD_BUTTON_LEFT_THUMB GAMEPAD_BUTTON_RIGHT_THUMB
60 ;; Gamepad axes
61 GAMEPAD_AXIS_LEFT_X GAMEPAD_AXIS_LEFT_Y
62 GAMEPAD_AXIS_RIGHT_X GAMEPAD_AXIS_RIGHT_Y
63 GAMEPAD_AXIS_LEFT_TRIGGER GAMEPAD_AXIS_RIGHT_TRIGGER
65 ;; Gesture types
66 GESTURE_NONE GESTURE_TAP GESTURE_DOUBLETAP GESTURE_HOLD
67 GESTURE_DRAG GESTURE_SWIPE_RIGHT GESTURE_SWIPE_LEFT
68 GESTURE_SWIPE_UP GESTURE_SWIPE_DOWN GESTURE_PINCH_IN
69 GESTURE_PINCH_OUT
71 ;; Input — Keyboard
72 key-pressed? key-pressed-repeat? key-down? key-released? key-up?
73 get-key-pressed get-char-pressed set-exit-key
75 ;; Input — Mouse
76 mouse-button-pressed? mouse-button-down?
77 mouse-button-released? mouse-button-up?
78 get-mouse-x get-mouse-y
79 set-mouse-position set-mouse-offset set-mouse-scale
80 get-mouse-wheel-move set-mouse-cursor
82 ;; Input — Gamepad
83 gamepad-available? get-gamepad-name
84 gamepad-button-pressed? gamepad-button-down?
85 gamepad-button-released? gamepad-button-up?
86 get-gamepad-button-pressed get-gamepad-axis-count
87 get-gamepad-axis-movement set-gamepad-mappings
89 ;; Input — Touch
90 get-touch-x get-touch-y get-touch-point-id get-touch-point-count
92 ;; Input — Gesture
93 set-gestures-enabled gesture-detected? get-gesture-detected
94 get-gesture-hold-duration get-gesture-drag-angle
95 get-gesture-pinch-angle)
97 (begin
99 ;; ============================================================
100 ;; Keyboard Keys
101 ;; ============================================================
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 Buttons
215 ;; ============================================================
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 Cursors
227 ;; ============================================================
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 Buttons
243 ;; ============================================================
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 Axes
266 ;; ============================================================
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 Types
277 ;; ============================================================
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 API
346 ;; ============================================================
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))))