Commitf62e3b07Recorded2 Mar 2026Repositorysigil-raylib

Add raylib game development bindings (sigil-raylib)

Message

Pure-Scheme FFI bindings to raylib for 2D graphics, input handling, and game development. Uses the dyncall backend's struct-by-value support to pass Color, Vector2, Rectangle structs natively as Scheme dicts.

Split into sub-modules to work around the 256-variable compiler limit: (raylib core) — library, types, colors, timing, file system (raylib window) — window management, cursor (raylib input) — keyboard, mouse, gamepad, touch, gesture (raylib graphics) — drawing, shapes, collision, text

Includes animated shapes example (examples/shapes.sgl) and headless test suite. Documents the compiler variable slot overflow bug in notes/issues/module-local-variable-limit.md.

Changed
 examples/shapes.sgl     |  65 +++++++++++++++++++++++++
 package.sgl             |  11 +++++
 src/raylib.sgl          |  16 ++++++
 src/raylib/core.sgl     | 315 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/raylib/graphics.sgl | 450 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/raylib/input.sgl    | 402 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/raylib/window.sgl   | 162 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 test/test-raylib.sgl    | 108 +++++++++++++++++++++++++++++++++++++++++
 8 files changed, 1529 insertions(+)
Diff
examples/shapes.sgladded
@@ -0,0 +1,65 @@
+1
;;; Animated shapes demo — renders moving shapes and text at 60fps.
+2
+3
(import (sigil core)
+4
(sigil math)
+5
(raylib core)
+6
(raylib window)
+7
(raylib input)
+8
(raylib graphics))
+9
+10
(init-window 800 600 "Sigil Raylib — Animated Shapes")
+11
(set-target-fps 60)
+12
+13
(let loop ()
+14
(unless (window-should-close?)
+15
(let* ((t (get-time))
+16
(rect-x (+ 350.0 (* 200.0 (sin t))))
+17
(circle-y (+ 400.0 (* 100.0 (cos (* t 1.5)))))
+18
(text-size (exact (floor (+ 30 (* 10 (sin (* t 2.0))))))))
+19
(begin-drawing)
+20
(clear-background RAYWHITE)
+21
+22
;; Gradient bar across the top area
+23
(draw-rectangle-gradient-h 50 180 700 30 RED BLUE)
+24
+25
;; Moving rectangle with rounded corners
+26
(draw-rectangle-rounded
+27
(make-rect rect-x 250.0 100.0 60.0) 0.3 6 BLUE)
+28
+29
;; Bouncing circle
+30
(draw-circle-v (make-vec2 400.0 circle-y) 40.0 RED)
+31
(draw-circle-lines-v (make-vec2 400.0 circle-y) 42.0 MAROON)
+32
+33
;; Horizontal reference line
+34
(draw-line-ex (make-vec2 0.0 300.0) (make-vec2 800.0 300.0) 2.0 LIGHTGRAY)
+35
+36
;; Rotating triangle
+37
(let* ((angle (* t 1.2))
+38
(cx 650.0) (cy 200.0) (r 40.0)
+39
(v1 (make-vec2 (+ cx (* r (sin angle)))
+40
(+ cy (* r (cos angle)))))
+41
(v2 (make-vec2 (+ cx (* r (sin (+ angle 2.094))))
+42
(+ cy (* r (cos (+ angle 2.094))))))
+43
(v3 (make-vec2 (+ cx (* r (sin (+ angle 4.189))))
+44
(+ cy (* r (cos (+ angle 4.189)))))))
+45
(draw-triangle v1 v2 v3 PURPLE))
+46
+47
;; Orbiting small circles
+48
(let orbit ((i 0))
+49
(when (< i 6)
+50
(let* ((a (+ (* t 0.8) (* i 1.047)))
+51
(ox (exact (floor (+ 150.0 (* 60.0 (cos a))))))
+52
(oy (exact (floor (+ 450.0 (* 60.0 (sin a)))))))
+53
(draw-circle ox oy 8.0 GOLD))
+54
(orbit (+ i 1))))
+55
+56
;; Pulsing text
+57
(draw-text "Hello from Sigil!" 260 80 text-size DARKGRAY)
+58
+59
;; FPS counter
+60
(draw-fps 10 10)
+61
+62
(end-drawing))
+63
(loop)))
+64
+65
(close-window)
package.sgladded
@@ -0,0 +1,11 @@
+1
(package
+2
name: "sigil-raylib"
+3
version: "0.8.0"
+4
description: "Raylib game development bindings for Sigil"
+5
url: "https://codeberg.org/sigil/sigil"
+6
license: "BSD-3-Clause"
+7
authors: (list "David Wilson <[email protected]>")
+8
+9
dependencies: (list
+10
(from-workspace name: "sigil-stdlib")
+11
(from-workspace name: "sigil-ffi")))
src/raylib.sgladded
@@ -0,0 +1,16 @@
+1
;;; (raylib) is split into sub-modules to stay under the 256-define compiler limit.
+2
;;; Import the sub-modules you need directly:
+3
;;;
+4
;;; (raylib core) — library handle, struct layouts, colors, timing, file system
+5
;;; (raylib window) — window management, cursor
+6
;;; (raylib input) — keyboard, mouse, gamepad, touch, gesture + constants
+7
;;; (raylib graphics) — drawing, shapes, collision, text + graphics constants
+8
;;;
+9
;;; Example:
+10
;;; ```scheme
+11
;;; (import (sigil core)
+12
;;; (raylib core)
+13
;;; (raylib window)
+14
;;; (raylib input)
+15
;;; (raylib graphics))
+16
;;; ```
src/raylib/core.sgladded
@@ -0,0 +1,315 @@
+1
;;; (raylib core) — Library handle, struct layouts, colors, timing, misc, file system
+2
;;;
+3
;;; Core module providing the shared library handle, struct layout definitions,
+4
;;; color/vector/rectangle helpers, predefined colors, config flags, timing,
+5
;;; random values, misc utilities, file system functions, and convenience wrappers.
+6
+7
(define-library (raylib core)
+8
(import (sigil core)
+9
(sigil ffi))
+10
+11
(export
+12
;; Library handle
+13
rl-lib
+14
+15
;; Struct layouts
+16
color-layout
+17
vector2-layout
+18
vector3-layout
+19
vector4-layout
+20
rectangle-layout
+21
camera-2d-layout
+22
camera-3d-layout
+23
+24
;; Color helpers
+25
make-color
+26
color-r color-g color-b color-a
+27
+28
;; Vector/Rectangle helpers
+29
make-vec2 vec2-x vec2-y
+30
make-vec3 vec3-x vec3-y vec3-z
+31
make-vec4
+32
make-rect rect-x rect-y rect-width rect-height
+33
+34
;; Predefined colors
+35
LIGHTGRAY GRAY DARKGRAY YELLOW GOLD ORANGE PINK RED MAROON
+36
GREEN LIME DARKGREEN SKYBLUE BLUE DARKBLUE PURPLE VIOLET
+37
DARKPURPLE BEIGE BROWN DARKBROWN WHITE BLACK BLANK MAGENTA RAYWHITE
+38
+39
;; Config flags
+40
FLAG_VSYNC_HINT FLAG_FULLSCREEN_MODE FLAG_WINDOW_RESIZABLE
+41
FLAG_WINDOW_UNDECORATED FLAG_WINDOW_HIDDEN FLAG_WINDOW_MINIMIZED
+42
FLAG_WINDOW_MAXIMIZED FLAG_WINDOW_UNFOCUSED FLAG_WINDOW_TOPMOST
+43
FLAG_WINDOW_ALWAYS_RUN FLAG_WINDOW_TRANSPARENT FLAG_WINDOW_HIGHDPI
+44
FLAG_WINDOW_MOUSE_PASSTHROUGH FLAG_BORDERLESS_WINDOWED_MODE
+45
FLAG_MSAA_4X_HINT FLAG_INTERLACED_HINT
+46
+47
;; Timing
+48
set-target-fps get-frame-time get-time get-fps
+49
+50
;; Custom frame control
+51
swap-screen-buffer poll-input-events wait-time
+52
+53
;; Random values
+54
set-random-seed get-random-value
+55
+56
;; Misc
+57
take-screenshot set-config-flags open-url
+58
set-trace-log-level
+59
+60
;; File system
+61
file-exists? directory-exists?
+62
is-file-extension? get-file-length
+63
get-file-extension get-file-name get-file-name-without-ext
+64
get-directory-path get-prev-directory-path
+65
get-working-directory get-application-directory
+66
make-directory change-directory
+67
is-path-file? is-file-name-valid?
+68
is-file-dropped?
+69
+70
)
+71
+72
(begin
+73
+74
;; ============================================================
+75
;; Library Loading
+76
;; ============================================================
+77
+78
(define rl-lib (c-library "libraylib"))
+79
+80
;; ============================================================
+81
;; Struct Layouts
+82
;; ============================================================
+83
+84
(define color-layout
+85
(c-struct-layout r: ffi/uint8 g: ffi/uint8 b: ffi/uint8 a: ffi/uint8))
+86
+87
(define vector2-layout
+88
(c-struct-layout x: ffi/float y: ffi/float))
+89
+90
(define vector3-layout
+91
(c-struct-layout x: ffi/float y: ffi/float z: ffi/float))
+92
+93
(define vector4-layout
+94
(c-struct-layout x: ffi/float y: ffi/float z: ffi/float w: ffi/float))
+95
+96
(define rectangle-layout
+97
(c-struct-layout x: ffi/float y: ffi/float width: ffi/float height: ffi/float))
+98
+99
(define camera-2d-layout
+100
(c-struct-layout
+101
offset-x: ffi/float offset-y: ffi/float
+102
target-x: ffi/float target-y: ffi/float
+103
rotation: ffi/float
+104
zoom: ffi/float))
+105
+106
(define camera-3d-layout
+107
(c-struct-layout
+108
pos-x: ffi/float pos-y: ffi/float pos-z: ffi/float
+109
target-x: ffi/float target-y: ffi/float target-z: ffi/float
+110
up-x: ffi/float up-y: ffi/float up-z: ffi/float
+111
fovy: ffi/float
+112
projection: ffi/int))
+113
+114
;; ============================================================
+115
;; Raw FFI Bindings (private)
+116
;; ============================================================
+117
+118
;; --- Timing ---
+119
(define %set-target-fps (c-function rl-lib "SetTargetFPS" (list ffi/int) ffi/void))
+120
(define %get-frame-time (c-function rl-lib "GetFrameTime" '() ffi/float))
+121
(define %get-time (c-function rl-lib "GetTime" '() ffi/double))
+122
(define %get-fps (c-function rl-lib "GetFPS" '() ffi/int))
+123
+124
;; --- Custom frame control ---
+125
(define %swap-screen-buffer (c-function rl-lib "SwapScreenBuffer" '() ffi/void))
+126
(define %poll-input-events (c-function rl-lib "PollInputEvents" '() ffi/void))
+127
(define %wait-time (c-function rl-lib "WaitTime" (list ffi/double) ffi/void))
+128
+129
;; --- Random ---
+130
(define %set-random-seed (c-function rl-lib "SetRandomSeed" (list ffi/uint) ffi/void))
+131
(define %get-random-value (c-function rl-lib "GetRandomValue" (list ffi/int ffi/int) ffi/int))
+132
+133
;; --- Misc ---
+134
(define %take-screenshot (c-function rl-lib "TakeScreenshot" (list ffi/string) ffi/void))
+135
(define %set-config-flags (c-function rl-lib "SetConfigFlags" (list ffi/uint) ffi/void))
+136
(define %open-url (c-function rl-lib "OpenURL" (list ffi/string) ffi/void))
+137
(define %set-trace-log-level (c-function rl-lib "SetTraceLogLevel" (list ffi/int) ffi/void))
+138
+139
;; --- File system ---
+140
(define %file-exists (c-function rl-lib "FileExists" (list ffi/string) ffi/int))
+141
(define %directory-exists (c-function rl-lib "DirectoryExists" (list ffi/string) ffi/int))
+142
(define %is-file-extension (c-function rl-lib "IsFileExtension" (list ffi/string ffi/string) ffi/int))
+143
(define %get-file-length (c-function rl-lib "GetFileLength" (list ffi/string) ffi/int))
+144
(define %get-file-extension (c-function rl-lib "GetFileExtension" (list ffi/string) ffi/string))
+145
(define %get-file-name (c-function rl-lib "GetFileName" (list ffi/string) ffi/string))
+146
(define %get-file-name-without-ext (c-function rl-lib "GetFileNameWithoutExt" (list ffi/string) ffi/string))
+147
(define %get-directory-path (c-function rl-lib "GetDirectoryPath" (list ffi/string) ffi/string))
+148
(define %get-prev-directory-path (c-function rl-lib "GetPrevDirectoryPath" (list ffi/string) ffi/string))
+149
(define %get-working-directory (c-function rl-lib "GetWorkingDirectory" '() ffi/string))
+150
(define %get-application-directory (c-function rl-lib "GetApplicationDirectory" '() ffi/string))
+151
(define %make-directory (c-function rl-lib "MakeDirectory" (list ffi/string) ffi/int))
+152
(define %change-directory (c-function rl-lib "ChangeDirectory" (list ffi/string) ffi/int))
+153
(define %is-path-file (c-function rl-lib "IsPathFile" (list ffi/string) ffi/int))
+154
(define %is-file-name-valid (c-function rl-lib "IsFileNameValid" (list ffi/string) ffi/int))
+155
(define %is-file-dropped (c-function rl-lib "IsFileDropped" '() ffi/int))
+156
+157
;; ============================================================
+158
;; Color Helpers
+159
;; ============================================================
+160
+161
;;; Create a Color dict for passing to raylib functions.
+162
(define (make-color r g b a)
+163
(: integer? integer? integer? integer? -> any?)
+164
(dict r: r g: g b: b a: a))
+165
+166
;;; Extract red component from a Color dict.
+167
(define (color-r c) (: any? -> integer?) (dict-ref c r:))
+168
;;; Extract green component from a Color dict.
+169
(define (color-g c) (: any? -> integer?) (dict-ref c g:))
+170
;;; Extract blue component from a Color dict.
+171
(define (color-b c) (: any? -> integer?) (dict-ref c b:))
+172
;;; Extract alpha component from a Color dict.
+173
(define (color-a c) (: any? -> integer?) (dict-ref c a:))
+174
+175
;; ============================================================
+176
;; Vector/Rectangle Helpers
+177
;; ============================================================
+178
+179
;;; Create a Vector2 dict.
+180
(define (make-vec2 x y)
+181
(: number? number? -> any?)
+182
(dict x: x y: y))
+183
+184
(define (vec2-x v) (: any? -> number?) (dict-ref v x:))
+185
(define (vec2-y v) (: any? -> number?) (dict-ref v y:))
+186
+187
;;; Create a Vector3 dict.
+188
(define (make-vec3 x y z)
+189
(: number? number? number? -> any?)
+190
(dict x: x y: y z: z))
+191
+192
(define (vec3-x v) (: any? -> number?) (dict-ref v x:))
+193
(define (vec3-y v) (: any? -> number?) (dict-ref v y:))
+194
(define (vec3-z v) (: any? -> number?) (dict-ref v z:))
+195
+196
;;; Create a Vector4 dict.
+197
(define (make-vec4 x y z w)
+198
(: number? number? number? number? -> any?)
+199
(dict x: x y: y z: z w: w))
+200
+201
;;; Create a Rectangle dict.
+202
(define (make-rect x y width height)
+203
(: number? number? number? number? -> any?)
+204
(dict x: x y: y width: width height: height))
+205
+206
(define (rect-x r) (: any? -> number?) (dict-ref r x:))
+207
(define (rect-y r) (: any? -> number?) (dict-ref r y:))
+208
(define (rect-width r) (: any? -> number?) (dict-ref r width:))
+209
(define (rect-height r) (: any? -> number?) (dict-ref r height:))
+210
+211
;; ============================================================
+212
;; Predefined Colors
+213
;; ============================================================
+214
+215
(define LIGHTGRAY (make-color 200 200 200 255))
+216
(define GRAY (make-color 130 130 130 255))
+217
(define DARKGRAY (make-color 80 80 80 255))
+218
(define YELLOW (make-color 253 249 0 255))
+219
(define GOLD (make-color 255 203 0 255))
+220
(define ORANGE (make-color 255 161 0 255))
+221
(define PINK (make-color 255 109 194 255))
+222
(define RED (make-color 230 41 55 255))
+223
(define MAROON (make-color 190 33 55 255))
+224
(define GREEN (make-color 0 228 48 255))
+225
(define LIME (make-color 0 158 47 255))
+226
(define DARKGREEN (make-color 0 117 44 255))
+227
(define SKYBLUE (make-color 102 191 255 255))
+228
(define BLUE (make-color 0 121 241 255))
+229
(define DARKBLUE (make-color 0 82 172 255))
+230
(define PURPLE (make-color 200 122 255 255))
+231
(define VIOLET (make-color 135 60 190 255))
+232
(define DARKPURPLE (make-color 112 31 126 255))
+233
(define BEIGE (make-color 211 176 131 255))
+234
(define BROWN (make-color 127 106 79 255))
+235
(define DARKBROWN (make-color 76 63 47 255))
+236
(define WHITE (make-color 255 255 255 255))
+237
(define BLACK (make-color 0 0 0 255))
+238
(define BLANK (make-color 0 0 0 0))
+239
(define MAGENTA (make-color 255 0 255 255))
+240
(define RAYWHITE (make-color 245 245 245 255))
+241
+242
;; ============================================================
+243
;; Config Flags
+244
;; ============================================================
+245
+246
(define FLAG_VSYNC_HINT #x00000040)
+247
(define FLAG_FULLSCREEN_MODE #x00000002)
+248
(define FLAG_WINDOW_RESIZABLE #x00000004)
+249
(define FLAG_WINDOW_UNDECORATED #x00000008)
+250
(define FLAG_WINDOW_HIDDEN #x00000080)
+251
(define FLAG_WINDOW_MINIMIZED #x00000200)
+252
(define FLAG_WINDOW_MAXIMIZED #x00000400)
+253
(define FLAG_WINDOW_UNFOCUSED #x00000800)
+254
(define FLAG_WINDOW_TOPMOST #x00001000)
+255
(define FLAG_WINDOW_ALWAYS_RUN #x00000100)
+256
(define FLAG_WINDOW_TRANSPARENT #x00000010)
+257
(define FLAG_WINDOW_HIGHDPI #x00002000)
+258
(define FLAG_WINDOW_MOUSE_PASSTHROUGH #x00004000)
+259
(define FLAG_BORDERLESS_WINDOWED_MODE #x00008000)
+260
(define FLAG_MSAA_4X_HINT #x00000020)
+261
(define FLAG_INTERLACED_HINT #x00010000)
+262
+263
;; ============================================================
+264
;; Public API
+265
;; ============================================================
+266
+267
;; --- Timing ---
+268
+269
;;; Set target FPS (maximum).
+270
(define (set-target-fps fps) (: integer? -> void?) (%set-target-fps fps))
+271
;;; Get time in seconds for last frame drawn (delta time).
+272
(define (get-frame-time) (: -> number?) (%get-frame-time))
+273
;;; Get elapsed time in seconds since InitWindow.
+274
(define (get-time) (: -> number?) (%get-time))
+275
;;; Get current FPS.
+276
(define (get-fps) (: -> integer?) (%get-fps))
+277
+278
;; --- Custom frame control ---
+279
+280
(define (swap-screen-buffer) (: -> void?) (%swap-screen-buffer))
+281
(define (poll-input-events) (: -> void?) (%poll-input-events))
+282
(define (wait-time seconds) (: number? -> void?) (%wait-time seconds))
+283
+284
;; --- Random ---
+285
+286
(define (set-random-seed seed) (: integer? -> void?) (%set-random-seed seed))
+287
(define (get-random-value min max) (: integer? integer? -> integer?) (%get-random-value min max))
+288
+289
;; --- Misc ---
+290
+291
(define (take-screenshot file-name) (: string? -> void?) (%take-screenshot file-name))
+292
(define (set-config-flags flags) (: integer? -> void?) (%set-config-flags flags))
+293
(define (open-url url) (: string? -> void?) (%open-url url))
+294
(define (set-trace-log-level level) (: integer? -> void?) (%set-trace-log-level level))
+295
+296
;; --- File system ---
+297
+298
(define (file-exists? file-name) (: string? -> boolean?) (not (= 0 (%file-exists file-name))))
+299
(define (directory-exists? dir-path) (: string? -> boolean?) (not (= 0 (%directory-exists dir-path))))
+300
(define (is-file-extension? file-name ext) (: string? string? -> boolean?) (not (= 0 (%is-file-extension file-name ext))))
+301
(define (get-file-length file-name) (: string? -> integer?) (%get-file-length file-name))
+302
(define (get-file-extension file-name) (: string? -> string?) (%get-file-extension file-name))
+303
(define (get-file-name file-path) (: string? -> string?) (%get-file-name file-path))
+304
(define (get-file-name-without-ext file-path) (: string? -> string?) (%get-file-name-without-ext file-path))
+305
(define (get-directory-path file-path) (: string? -> string?) (%get-directory-path file-path))
+306
(define (get-prev-directory-path dir-path) (: string? -> string?) (%get-prev-directory-path dir-path))
+307
(define (get-working-directory) (: -> string?) (%get-working-directory))
+308
(define (get-application-directory) (: -> string?) (%get-application-directory))
+309
(define (make-directory dir-path) (: string? -> integer?) (%make-directory dir-path))
+310
(define (change-directory dir-path) (: string? -> boolean?) (not (= 0 (%change-directory dir-path))))
+311
(define (is-path-file? path) (: string? -> boolean?) (not (= 0 (%is-path-file path))))
+312
(define (is-file-name-valid? file-name) (: string? -> boolean?) (not (= 0 (%is-file-name-valid file-name))))
+313
(define (is-file-dropped?) (: -> boolean?) (not (= 0 (%is-file-dropped))))
+314
+315
))
src/raylib/graphics.sgladded
@@ -0,0 +1,450 @@
+1
;;; (raylib graphics) — Drawing, shapes, collision detection, and text
+2
;;;
+3
;;; Provides drawing frame control (begin-drawing, end-drawing, clear-background),
+4
;;; shape drawing, collision detection, text rendering, and graphics-related
+5
;;; constants (BLEND_*, CAMERA_*, LOG_*, TEXTURE_FILTER_*, TEXTURE_WRAP_*,
+6
;;; PIXELFORMAT_*).
+7
+8
(define-library (raylib graphics)
+9
(import (sigil core)
+10
(sigil ffi)
+11
(raylib core))
+12
+13
(export
+14
;; Blend modes
+15
BLEND_ALPHA BLEND_ADDITIVE BLEND_MULTIPLIED BLEND_ADD_COLORS
+16
BLEND_SUBTRACT_COLORS BLEND_ALPHA_PREMULTIPLY BLEND_CUSTOM
+17
BLEND_CUSTOM_SEPARATE
+18
+19
;; Camera modes
+20
CAMERA_CUSTOM CAMERA_FREE CAMERA_ORBITAL CAMERA_FIRST_PERSON
+21
CAMERA_THIRD_PERSON
+22
+23
;; Camera projections
+24
CAMERA_PERSPECTIVE CAMERA_ORTHOGRAPHIC
+25
+26
;; Trace log levels
+27
LOG_ALL LOG_TRACE LOG_DEBUG LOG_INFO LOG_WARNING LOG_ERROR
+28
LOG_FATAL LOG_NONE
+29
+30
;; Texture filter modes
+31
TEXTURE_FILTER_POINT TEXTURE_FILTER_BILINEAR
+32
TEXTURE_FILTER_TRILINEAR TEXTURE_FILTER_ANISOTROPIC_4X
+33
TEXTURE_FILTER_ANISOTROPIC_8X TEXTURE_FILTER_ANISOTROPIC_16X
+34
+35
;; Texture wrap modes
+36
TEXTURE_WRAP_REPEAT TEXTURE_WRAP_CLAMP TEXTURE_WRAP_MIRROR_REPEAT
+37
TEXTURE_WRAP_MIRROR_CLAMP
+38
+39
;; Pixel formats
+40
PIXELFORMAT_UNCOMPRESSED_GRAYSCALE
+41
PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA
+42
PIXELFORMAT_UNCOMPRESSED_R5G6B5
+43
PIXELFORMAT_UNCOMPRESSED_R8G8B8
+44
PIXELFORMAT_UNCOMPRESSED_R5G5B5A1
+45
PIXELFORMAT_UNCOMPRESSED_R4G4B4A4
+46
PIXELFORMAT_UNCOMPRESSED_R8G8B8A8
+47
PIXELFORMAT_UNCOMPRESSED_R32
+48
PIXELFORMAT_UNCOMPRESSED_R32G32B32
+49
PIXELFORMAT_UNCOMPRESSED_R32G32B32A32
+50
PIXELFORMAT_UNCOMPRESSED_R16
+51
PIXELFORMAT_UNCOMPRESSED_R16G16B16
+52
PIXELFORMAT_UNCOMPRESSED_R16G16B16A16
+53
+54
;; Drawing frame
+55
begin-drawing end-drawing clear-background
+56
begin-blend-mode end-blend-mode
+57
begin-scissor-mode end-scissor-mode
+58
+59
;; Shapes — Drawing
+60
draw-pixel draw-line
+61
draw-line-v draw-line-ex
+62
draw-circle draw-circle-v
+63
draw-circle-gradient draw-circle-lines draw-circle-lines-v
+64
draw-ellipse draw-ellipse-lines
+65
draw-ring draw-ring-lines
+66
draw-rectangle draw-rectangle-v
+67
draw-rectangle-rec draw-rectangle-pro
+68
draw-rectangle-gradient-v draw-rectangle-gradient-h
+69
draw-rectangle-gradient-ex
+70
draw-rectangle-lines draw-rectangle-lines-ex
+71
draw-rectangle-rounded draw-rectangle-rounded-lines
+72
draw-triangle draw-triangle-lines
+73
draw-poly draw-poly-lines draw-poly-lines-ex
+74
+75
;; Shapes — Collision
+76
check-collision-recs check-collision-circles
+77
check-collision-circle-rec
+78
check-collision-point-rec check-collision-point-circle
+79
check-collision-point-triangle check-collision-point-line
+80
+81
;; Text
+82
draw-text draw-fps measure-text
+83
+84
;; Convenience
+85
with-drawing)
+86
+87
(begin
+88
+89
;; ============================================================
+90
;; Blend Modes
+91
;; ============================================================
+92
+93
(define BLEND_ALPHA 0)
+94
(define BLEND_ADDITIVE 1)
+95
(define BLEND_MULTIPLIED 2)
+96
(define BLEND_ADD_COLORS 3)
+97
(define BLEND_SUBTRACT_COLORS 4)
+98
(define BLEND_ALPHA_PREMULTIPLY 5)
+99
(define BLEND_CUSTOM 6)
+100
(define BLEND_CUSTOM_SEPARATE 7)
+101
+102
;; ============================================================
+103
;; Camera Modes / Projections
+104
;; ============================================================
+105
+106
(define CAMERA_CUSTOM 0)
+107
(define CAMERA_FREE 1)
+108
(define CAMERA_ORBITAL 2)
+109
(define CAMERA_FIRST_PERSON 3)
+110
(define CAMERA_THIRD_PERSON 4)
+111
+112
(define CAMERA_PERSPECTIVE 0)
+113
(define CAMERA_ORTHOGRAPHIC 1)
+114
+115
;; ============================================================
+116
;; Trace Log Levels
+117
;; ============================================================
+118
+119
(define LOG_ALL 0)
+120
(define LOG_TRACE 1)
+121
(define LOG_DEBUG 2)
+122
(define LOG_INFO 3)
+123
(define LOG_WARNING 4)
+124
(define LOG_ERROR 5)
+125
(define LOG_FATAL 6)
+126
(define LOG_NONE 7)
+127
+128
;; ============================================================
+129
;; Texture Filter / Wrap Modes
+130
;; ============================================================
+131
+132
(define TEXTURE_FILTER_POINT 0)
+133
(define TEXTURE_FILTER_BILINEAR 1)
+134
(define TEXTURE_FILTER_TRILINEAR 2)
+135
(define TEXTURE_FILTER_ANISOTROPIC_4X 3)
+136
(define TEXTURE_FILTER_ANISOTROPIC_8X 4)
+137
(define TEXTURE_FILTER_ANISOTROPIC_16X 5)
+138
+139
(define TEXTURE_WRAP_REPEAT 0)
+140
(define TEXTURE_WRAP_CLAMP 1)
+141
(define TEXTURE_WRAP_MIRROR_REPEAT 2)
+142
(define TEXTURE_WRAP_MIRROR_CLAMP 3)
+143
+144
;; ============================================================
+145
;; Pixel Formats
+146
;; ============================================================
+147
+148
(define PIXELFORMAT_UNCOMPRESSED_GRAYSCALE 1)
+149
(define PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA 2)
+150
(define PIXELFORMAT_UNCOMPRESSED_R5G6B5 3)
+151
(define PIXELFORMAT_UNCOMPRESSED_R8G8B8 4)
+152
(define PIXELFORMAT_UNCOMPRESSED_R5G5B5A1 5)
+153
(define PIXELFORMAT_UNCOMPRESSED_R4G4B4A4 6)
+154
(define PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 7)
+155
(define PIXELFORMAT_UNCOMPRESSED_R32 8)
+156
(define PIXELFORMAT_UNCOMPRESSED_R32G32B32 9)
+157
(define PIXELFORMAT_UNCOMPRESSED_R32G32B32A32 10)
+158
(define PIXELFORMAT_UNCOMPRESSED_R16 11)
+159
(define PIXELFORMAT_UNCOMPRESSED_R16G16B16 12)
+160
(define PIXELFORMAT_UNCOMPRESSED_R16G16B16A16 13)
+161
+162
;; ============================================================
+163
;; Raw FFI Bindings (private)
+164
;; ============================================================
+165
+166
;; --- Drawing ---
+167
(define %clear-background (c-function rl-lib "ClearBackground" (list color-layout) ffi/void))
+168
(define %begin-drawing (c-function rl-lib "BeginDrawing" '() ffi/void))
+169
(define %end-drawing (c-function rl-lib "EndDrawing" '() ffi/void))
+170
(define %begin-blend-mode (c-function rl-lib "BeginBlendMode" (list ffi/int) ffi/void))
+171
(define %end-blend-mode (c-function rl-lib "EndBlendMode" '() ffi/void))
+172
(define %begin-scissor-mode (c-function rl-lib "BeginScissorMode" (list ffi/int ffi/int ffi/int ffi/int) ffi/void))
+173
(define %end-scissor-mode (c-function rl-lib "EndScissorMode" '() ffi/void))
+174
+175
;; --- Shapes: Basic drawing ---
+176
(define %draw-pixel (c-function rl-lib "DrawPixel" (list ffi/int ffi/int color-layout) ffi/void))
+177
(define %draw-line (c-function rl-lib "DrawLine" (list ffi/int ffi/int ffi/int ffi/int color-layout) ffi/void))
+178
(define %draw-line-v (c-function rl-lib "DrawLineV" (list vector2-layout vector2-layout color-layout) ffi/void))
+179
(define %draw-line-ex (c-function rl-lib "DrawLineEx" (list vector2-layout vector2-layout ffi/float color-layout) ffi/void))
+180
(define %draw-circle (c-function rl-lib "DrawCircle" (list ffi/int ffi/int ffi/float color-layout) ffi/void))
+181
(define %draw-circle-v (c-function rl-lib "DrawCircleV" (list vector2-layout ffi/float color-layout) ffi/void))
+182
(define %draw-circle-gradient (c-function rl-lib "DrawCircleGradient" (list ffi/int ffi/int ffi/float color-layout color-layout) ffi/void))
+183
(define %draw-circle-lines (c-function rl-lib "DrawCircleLines" (list ffi/int ffi/int ffi/float color-layout) ffi/void))
+184
(define %draw-circle-lines-v (c-function rl-lib "DrawCircleLinesV" (list vector2-layout ffi/float color-layout) ffi/void))
+185
(define %draw-ellipse (c-function rl-lib "DrawEllipse" (list ffi/int ffi/int ffi/float ffi/float color-layout) ffi/void))
+186
(define %draw-ellipse-lines (c-function rl-lib "DrawEllipseLines" (list ffi/int ffi/int ffi/float ffi/float color-layout) ffi/void))
+187
(define %draw-ring (c-function rl-lib "DrawRing" (list vector2-layout ffi/float ffi/float ffi/float ffi/float ffi/int color-layout) ffi/void))
+188
(define %draw-ring-lines (c-function rl-lib "DrawRingLines" (list vector2-layout ffi/float ffi/float ffi/float ffi/float ffi/int color-layout) ffi/void))
+189
(define %draw-rectangle (c-function rl-lib "DrawRectangle" (list ffi/int ffi/int ffi/int ffi/int color-layout) ffi/void))
+190
(define %draw-rectangle-v (c-function rl-lib "DrawRectangleV" (list vector2-layout vector2-layout color-layout) ffi/void))
+191
(define %draw-rectangle-rec (c-function rl-lib "DrawRectangleRec" (list rectangle-layout color-layout) ffi/void))
+192
(define %draw-rectangle-pro (c-function rl-lib "DrawRectanglePro" (list rectangle-layout vector2-layout ffi/float color-layout) ffi/void))
+193
(define %draw-rectangle-gradient-v (c-function rl-lib "DrawRectangleGradientV" (list ffi/int ffi/int ffi/int ffi/int color-layout color-layout) ffi/void))
+194
(define %draw-rectangle-gradient-h (c-function rl-lib "DrawRectangleGradientH" (list ffi/int ffi/int ffi/int ffi/int color-layout color-layout) ffi/void))
+195
(define %draw-rectangle-gradient-ex (c-function rl-lib "DrawRectangleGradientEx" (list rectangle-layout color-layout color-layout color-layout color-layout) ffi/void))
+196
(define %draw-rectangle-lines (c-function rl-lib "DrawRectangleLines" (list ffi/int ffi/int ffi/int ffi/int color-layout) ffi/void))
+197
(define %draw-rectangle-lines-ex (c-function rl-lib "DrawRectangleLinesEx" (list rectangle-layout ffi/float color-layout) ffi/void))
+198
(define %draw-rectangle-rounded (c-function rl-lib "DrawRectangleRounded" (list rectangle-layout ffi/float ffi/int color-layout) ffi/void))
+199
(define %draw-rectangle-rounded-lines (c-function rl-lib "DrawRectangleRoundedLines" (list rectangle-layout ffi/float ffi/int color-layout) ffi/void))
+200
(define %draw-triangle (c-function rl-lib "DrawTriangle" (list vector2-layout vector2-layout vector2-layout color-layout) ffi/void))
+201
(define %draw-triangle-lines (c-function rl-lib "DrawTriangleLines" (list vector2-layout vector2-layout vector2-layout color-layout) ffi/void))
+202
(define %draw-poly (c-function rl-lib "DrawPoly" (list vector2-layout ffi/int ffi/float ffi/float color-layout) ffi/void))
+203
(define %draw-poly-lines (c-function rl-lib "DrawPolyLines" (list vector2-layout ffi/int ffi/float ffi/float color-layout) ffi/void))
+204
(define %draw-poly-lines-ex (c-function rl-lib "DrawPolyLinesEx" (list vector2-layout ffi/int ffi/float ffi/float ffi/float color-layout) ffi/void))
+205
+206
;; --- Collision detection ---
+207
(define %check-collision-recs (c-function rl-lib "CheckCollisionRecs" (list rectangle-layout rectangle-layout) ffi/int))
+208
(define %check-collision-circles (c-function rl-lib "CheckCollisionCircles" (list vector2-layout ffi/float vector2-layout ffi/float) ffi/int))
+209
(define %check-collision-circle-rec (c-function rl-lib "CheckCollisionCircleRec" (list vector2-layout ffi/float rectangle-layout) ffi/int))
+210
(define %check-collision-point-rec (c-function rl-lib "CheckCollisionPointRec" (list vector2-layout rectangle-layout) ffi/int))
+211
(define %check-collision-point-circle (c-function rl-lib "CheckCollisionPointCircle" (list vector2-layout vector2-layout ffi/float) ffi/int))
+212
(define %check-collision-point-triangle (c-function rl-lib "CheckCollisionPointTriangle" (list vector2-layout vector2-layout vector2-layout vector2-layout) ffi/int))
+213
(define %check-collision-point-line (c-function rl-lib "CheckCollisionPointLine" (list vector2-layout vector2-layout vector2-layout ffi/int) ffi/int))
+214
+215
;; --- Text ---
+216
(define %draw-text (c-function rl-lib "DrawText" (list ffi/string ffi/int ffi/int ffi/int color-layout) ffi/void))
+217
(define %draw-fps (c-function rl-lib "DrawFPS" (list ffi/int ffi/int) ffi/void))
+218
(define %measure-text (c-function rl-lib "MeasureText" (list ffi/string ffi/int) ffi/int))
+219
+220
;; ============================================================
+221
;; Public API
+222
;; ============================================================
+223
+224
;; --- Drawing frame ---
+225
+226
;;; Set up canvas (framebuffer) to start drawing.
+227
(define (begin-drawing) (: -> void?) (%begin-drawing))
+228
+229
;;; End canvas drawing and swap buffers.
+230
(define (end-drawing) (: -> void?) (%end-drawing))
+231
+232
;;; Set background color (framebuffer clear color).
+233
(define (clear-background color) (: any? -> void?) (%clear-background color))
+234
+235
(define (begin-blend-mode mode) (: integer? -> void?) (%begin-blend-mode mode))
+236
(define (end-blend-mode) (: -> void?) (%end-blend-mode))
+237
(define (begin-scissor-mode x y w h) (: integer? integer? integer? integer? -> void?) (%begin-scissor-mode x y w h))
+238
(define (end-scissor-mode) (: -> void?) (%end-scissor-mode))
+239
+240
;; --- Shapes: Drawing ---
+241
+242
;;; Draw a pixel.
+243
(define (draw-pixel x y color)
+244
(: integer? integer? any? -> void?)
+245
(%draw-pixel x y color))
+246
+247
;;; Draw a line.
+248
(define (draw-line x1 y1 x2 y2 color)
+249
(: integer? integer? integer? integer? any? -> void?)
+250
(%draw-line x1 y1 x2 y2 color))
+251
+252
;;; Draw a line (using Vector2).
+253
(define (draw-line-v start end color)
+254
(: any? any? any? -> void?)
+255
(%draw-line-v start end color))
+256
+257
;;; Draw a line (extended: Vector2, thickness).
+258
(define (draw-line-ex start end thick color)
+259
(: any? any? number? any? -> void?)
+260
(%draw-line-ex start end thick color))
+261
+262
;;; Draw a color-filled circle.
+263
(define (draw-circle cx cy radius color)
+264
(: integer? integer? number? any? -> void?)
+265
(%draw-circle cx cy radius color))
+266
+267
;;; Draw a color-filled circle (Vector2 center).
+268
(define (draw-circle-v center radius color)
+269
(: any? number? any? -> void?)
+270
(%draw-circle-v center radius color))
+271
+272
;;; Draw a gradient-filled circle.
+273
(define (draw-circle-gradient cx cy radius inner outer)
+274
(: integer? integer? number? any? any? -> void?)
+275
(%draw-circle-gradient cx cy radius inner outer))
+276
+277
;;; Draw circle outline.
+278
(define (draw-circle-lines cx cy radius color)
+279
(: integer? integer? number? any? -> void?)
+280
(%draw-circle-lines cx cy radius color))
+281
+282
;;; Draw circle outline (Vector2 center).
+283
(define (draw-circle-lines-v center radius color)
+284
(: any? number? any? -> void?)
+285
(%draw-circle-lines-v center radius color))
+286
+287
;;; Draw ellipse.
+288
(define (draw-ellipse cx cy rh rv color)
+289
(: integer? integer? number? number? any? -> void?)
+290
(%draw-ellipse cx cy rh rv color))
+291
+292
;;; Draw ellipse outline.
+293
(define (draw-ellipse-lines cx cy rh rv color)
+294
(: integer? integer? number? number? any? -> void?)
+295
(%draw-ellipse-lines cx cy rh rv color))
+296
+297
;;; Draw ring.
+298
(define (draw-ring center inner-radius outer-radius start-angle end-angle segments color)
+299
(: any? number? number? number? number? integer? any? -> void?)
+300
(%draw-ring center inner-radius outer-radius start-angle end-angle segments color))
+301
+302
;;; Draw ring outline.
+303
(define (draw-ring-lines center inner-radius outer-radius start-angle end-angle segments color)
+304
(: any? number? number? number? number? integer? any? -> void?)
+305
(%draw-ring-lines center inner-radius outer-radius start-angle end-angle segments color))
+306
+307
;;; Draw a color-filled rectangle.
+308
(define (draw-rectangle x y w h color)
+309
(: integer? integer? integer? integer? any? -> void?)
+310
(%draw-rectangle x y w h color))
+311
+312
;;; Draw a color-filled rectangle (Vector2 position and size).
+313
(define (draw-rectangle-v position size color)
+314
(: any? any? any? -> void?)
+315
(%draw-rectangle-v position size color))
+316
+317
;;; Draw a color-filled rectangle from Rectangle.
+318
(define (draw-rectangle-rec rec color)
+319
(: any? any? -> void?)
+320
(%draw-rectangle-rec rec color))
+321
+322
;;; Draw a color-filled rectangle with pro parameters.
+323
(define (draw-rectangle-pro rec origin rotation color)
+324
(: any? any? number? any? -> void?)
+325
(%draw-rectangle-pro rec origin rotation color))
+326
+327
;;; Draw a vertical-gradient-filled rectangle.
+328
(define (draw-rectangle-gradient-v x y w h top bottom)
+329
(: integer? integer? integer? integer? any? any? -> void?)
+330
(%draw-rectangle-gradient-v x y w h top bottom))
+331
+332
;;; Draw a horizontal-gradient-filled rectangle.
+333
(define (draw-rectangle-gradient-h x y w h left right)
+334
(: integer? integer? integer? integer? any? any? -> void?)
+335
(%draw-rectangle-gradient-h x y w h left right))
+336
+337
;;; Draw a gradient-filled rectangle with custom vertex colors.
+338
(define (draw-rectangle-gradient-ex rec top-left bottom-left bottom-right top-right)
+339
(: any? any? any? any? any? -> void?)
+340
(%draw-rectangle-gradient-ex rec top-left bottom-left bottom-right top-right))
+341
+342
;;; Draw rectangle outline.
+343
(define (draw-rectangle-lines x y w h color)
+344
(: integer? integer? integer? integer? any? -> void?)
+345
(%draw-rectangle-lines x y w h color))
+346
+347
;;; Draw rectangle outline with extended parameters.
+348
(define (draw-rectangle-lines-ex rec thick color)
+349
(: any? number? any? -> void?)
+350
(%draw-rectangle-lines-ex rec thick color))
+351
+352
;;; Draw rectangle with rounded corners.
+353
(define (draw-rectangle-rounded rec roundness segments color)
+354
(: any? number? integer? any? -> void?)
+355
(%draw-rectangle-rounded rec roundness segments color))
+356
+357
;;; Draw rectangle with rounded corners outline.
+358
(define (draw-rectangle-rounded-lines rec roundness segments color)
+359
(: any? number? integer? any? -> void?)
+360
(%draw-rectangle-rounded-lines rec roundness segments color))
+361
+362
;;; Draw a color-filled triangle.
+363
(define (draw-triangle v1 v2 v3 color)
+364
(: any? any? any? any? -> void?)
+365
(%draw-triangle v1 v2 v3 color))
+366
+367
;;; Draw triangle outline.
+368
(define (draw-triangle-lines v1 v2 v3 color)
+369
(: any? any? any? any? -> void?)
+370
(%draw-triangle-lines v1 v2 v3 color))
+371
+372
;;; Draw a regular polygon (Vector2 center).
+373
(define (draw-poly center sides radius rotation color)
+374
(: any? integer? number? number? any? -> void?)
+375
(%draw-poly center sides radius rotation color))
+376
+377
;;; Draw a polygon outline.
+378
(define (draw-poly-lines center sides radius rotation color)
+379
(: any? integer? number? number? any? -> void?)
+380
(%draw-poly-lines center sides radius rotation color))
+381
+382
;;; Draw a polygon outline with thickness.
+383
(define (draw-poly-lines-ex center sides radius rotation thick color)
+384
(: any? integer? number? number? number? any? -> void?)
+385
(%draw-poly-lines-ex center sides radius rotation thick color))
+386
+387
;; --- Collision detection ---
+388
+389
;;; Check collision between two rectangles.
+390
(define (check-collision-recs rec1 rec2)
+391
(: any? any? -> boolean?)
+392
(not (= 0 (%check-collision-recs rec1 rec2))))
+393
+394
;;; Check collision between two circles.
+395
(define (check-collision-circles center1 radius1 center2 radius2)
+396
(: any? number? any? number? -> boolean?)
+397
(not (= 0 (%check-collision-circles center1 radius1 center2 radius2))))
+398
+399
;;; Check collision between circle and rectangle.
+400
(define (check-collision-circle-rec center radius rec)
+401
(: any? number? any? -> boolean?)
+402
(not (= 0 (%check-collision-circle-rec center radius rec))))
+403
+404
;;; Check if point is inside rectangle.
+405
(define (check-collision-point-rec point rec)
+406
(: any? any? -> boolean?)
+407
(not (= 0 (%check-collision-point-rec point rec))))
+408
+409
;;; Check if point is inside circle.
+410
(define (check-collision-point-circle point center radius)
+411
(: any? any? number? -> boolean?)
+412
(not (= 0 (%check-collision-point-circle point center radius))))
+413
+414
;;; Check if point is inside a triangle.
+415
(define (check-collision-point-triangle point p1 p2 p3)
+416
(: any? any? any? any? -> boolean?)
+417
(not (= 0 (%check-collision-point-triangle point p1 p2 p3))))
+418
+419
;;; Check if point belongs to line segment.
+420
(define (check-collision-point-line point p1 p2 threshold)
+421
(: any? any? any? integer? -> boolean?)
+422
(not (= 0 (%check-collision-point-line point p1 p2 threshold))))
+423
+424
;; --- Text ---
+425
+426
;;; Draw text (using default font).
+427
(define (draw-text text x y font-size color)
+428
(: string? integer? integer? integer? any? -> void?)
+429
(%draw-text text x y font-size color))
+430
+431
;;; Draw current FPS.
+432
(define (draw-fps x y)
+433
(: integer? integer? -> void?)
+434
(%draw-fps x y))
+435
+436
;;; Measure string width for default font.
+437
(define (measure-text text font-size)
+438
(: string? integer? -> integer?)
+439
(%measure-text text font-size))
+440
+441
;; ============================================================
+442
;; Convenience Wrappers
+443
;; ============================================================
+444
+445
;;; Execute body within a drawing frame.
+446
(define (with-drawing proc)
+447
(: procedure? -> void?)
+448
(begin-drawing)
+449
(proc)
+450
(end-drawing))))
src/raylib/input.sgladded
@@ -0,0 +1,402 @@
+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))
+11
+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
+35
+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
+40
+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
+47
+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
+59
+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
+64
+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
+70
+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
+74
+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
+81
+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
+88
+89
;; Input — Touch
+90
get-touch-x get-touch-y get-touch-point-id get-touch-point-count
+91
+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)
+96
+97
(begin
+98
+99
;; ============================================================
+100
;; Keyboard Keys
+101
;; ============================================================
+102
+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)
+212
+213
;; ============================================================
+214
;; Mouse Buttons
+215
;; ============================================================
+216
+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)
+224
+225
;; ============================================================
+226
;; Mouse Cursors
+227
;; ============================================================
+228
+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)
+240
+241
;; ============================================================
+242
;; Gamepad Buttons
+243
;; ============================================================
+244
+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)
+263
+264
;; ============================================================
+265
;; Gamepad Axes
+266
;; ============================================================
+267
+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)
+274
+275
;; ============================================================
+276
;; Gesture Types
+277
;; ============================================================
+278
+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)
+290
+291
;; ============================================================
+292
;; Raw FFI Bindings (private)
+293
;; ============================================================
+294
+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))
+304
+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))
+317
+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))
+329
+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))
+335
+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))
+343
+344
;; ============================================================
+345
;; Public API
+346
;; ============================================================
+347
+348
;; --- Input: Keyboard ---
+349
+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))
+360
+361
;; --- Input: Mouse ---
+362
+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))
+374
+375
;; --- Input: Gamepad ---
+376
+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))
+387
+388
;; --- Input: Touch ---
+389
+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))
+394
+395
;; --- Gesture ---
+396
+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))))
src/raylib/window.sgladded
@@ -0,0 +1,162 @@
+1
;;; (raylib window) — Window management and cursor control
+2
;;;
+3
;;; Provides window lifecycle, state queries, monitor info, clipboard,
+4
;;; and cursor visibility/state functions.
+5
+6
(define-library (raylib window)
+7
(import (sigil core)
+8
(sigil ffi)
+9
(raylib core))
+10
+11
(export
+12
;; Window management
+13
init-window close-window window-should-close?
+14
window-ready? window-fullscreen? window-hidden?
+15
window-minimized? window-maximized? window-focused?
+16
window-resized? window-state?
+17
set-window-state clear-window-state
+18
toggle-fullscreen toggle-borderless-windowed
+19
maximize-window minimize-window restore-window
+20
set-window-title set-window-position
+21
set-window-monitor set-window-min-size set-window-max-size
+22
set-window-size set-window-opacity set-window-focused
+23
get-window-handle
+24
get-screen-width get-screen-height
+25
get-render-width get-render-height
+26
get-monitor-count get-current-monitor
+27
get-monitor-width get-monitor-height
+28
get-monitor-physical-width get-monitor-physical-height
+29
get-monitor-refresh-rate get-monitor-name
+30
set-clipboard-text get-clipboard-text
+31
enable-event-waiting disable-event-waiting
+32
+33
;; Cursor
+34
show-cursor hide-cursor cursor-hidden?
+35
enable-cursor disable-cursor cursor-on-screen?)
+36
+37
(begin
+38
+39
;; ============================================================
+40
;; Raw FFI Bindings (private)
+41
;; ============================================================
+42
+43
;; --- Window management ---
+44
(define %init-window (c-function rl-lib "InitWindow" (list ffi/int ffi/int ffi/string) ffi/void))
+45
(define %close-window (c-function rl-lib "CloseWindow" '() ffi/void))
+46
(define %window-should-close (c-function rl-lib "WindowShouldClose" '() ffi/int))
+47
(define %window-ready (c-function rl-lib "IsWindowReady" '() ffi/int))
+48
(define %window-fullscreen (c-function rl-lib "IsWindowFullscreen" '() ffi/int))
+49
(define %window-hidden (c-function rl-lib "IsWindowHidden" '() ffi/int))
+50
(define %window-minimized (c-function rl-lib "IsWindowMinimized" '() ffi/int))
+51
(define %window-maximized (c-function rl-lib "IsWindowMaximized" '() ffi/int))
+52
(define %window-focused (c-function rl-lib "IsWindowFocused" '() ffi/int))
+53
(define %window-resized (c-function rl-lib "IsWindowResized" '() ffi/int))
+54
(define %window-state (c-function rl-lib "IsWindowState" (list ffi/uint) ffi/int))
+55
(define %set-window-state (c-function rl-lib "SetWindowState" (list ffi/uint) ffi/void))
+56
(define %clear-window-state (c-function rl-lib "ClearWindowState" (list ffi/uint) ffi/void))
+57
(define %toggle-fullscreen (c-function rl-lib "ToggleFullscreen" '() ffi/void))
+58
(define %toggle-borderless-windowed (c-function rl-lib "ToggleBorderlessWindowed" '() ffi/void))
+59
(define %maximize-window (c-function rl-lib "MaximizeWindow" '() ffi/void))
+60
(define %minimize-window (c-function rl-lib "MinimizeWindow" '() ffi/void))
+61
(define %restore-window (c-function rl-lib "RestoreWindow" '() ffi/void))
+62
(define %set-window-title (c-function rl-lib "SetWindowTitle" (list ffi/string) ffi/void))
+63
(define %set-window-position (c-function rl-lib "SetWindowPosition" (list ffi/int ffi/int) ffi/void))
+64
(define %set-window-monitor (c-function rl-lib "SetWindowMonitor" (list ffi/int) ffi/void))
+65
(define %set-window-min-size (c-function rl-lib "SetWindowMinSize" (list ffi/int ffi/int) ffi/void))
+66
(define %set-window-max-size (c-function rl-lib "SetWindowMaxSize" (list ffi/int ffi/int) ffi/void))
+67
(define %set-window-size (c-function rl-lib "SetWindowSize" (list ffi/int ffi/int) ffi/void))
+68
(define %set-window-opacity (c-function rl-lib "SetWindowOpacity" (list ffi/float) ffi/void))
+69
(define %set-window-focused (c-function rl-lib "SetWindowFocused" '() ffi/void))
+70
(define %get-window-handle (c-function rl-lib "GetWindowHandle" '() ffi/pointer))
+71
(define %get-screen-width (c-function rl-lib "GetScreenWidth" '() ffi/int))
+72
(define %get-screen-height (c-function rl-lib "GetScreenHeight" '() ffi/int))
+73
(define %get-render-width (c-function rl-lib "GetRenderWidth" '() ffi/int))
+74
(define %get-render-height (c-function rl-lib "GetRenderHeight" '() ffi/int))
+75
(define %get-monitor-count (c-function rl-lib "GetMonitorCount" '() ffi/int))
+76
(define %get-current-monitor (c-function rl-lib "GetCurrentMonitor" '() ffi/int))
+77
(define %get-monitor-width (c-function rl-lib "GetMonitorWidth" (list ffi/int) ffi/int))
+78
(define %get-monitor-height (c-function rl-lib "GetMonitorHeight" (list ffi/int) ffi/int))
+79
(define %get-monitor-physical-width (c-function rl-lib "GetMonitorPhysicalWidth" (list ffi/int) ffi/int))
+80
(define %get-monitor-physical-height (c-function rl-lib "GetMonitorPhysicalHeight" (list ffi/int) ffi/int))
+81
(define %get-monitor-refresh-rate (c-function rl-lib "GetMonitorRefreshRate" (list ffi/int) ffi/int))
+82
(define %get-monitor-name (c-function rl-lib "GetMonitorName" (list ffi/int) ffi/string))
+83
(define %set-clipboard-text (c-function rl-lib "SetClipboardText" (list ffi/string) ffi/void))
+84
(define %get-clipboard-text (c-function rl-lib "GetClipboardText" '() ffi/string))
+85
(define %enable-event-waiting (c-function rl-lib "EnableEventWaiting" '() ffi/void))
+86
(define %disable-event-waiting (c-function rl-lib "DisableEventWaiting" '() ffi/void))
+87
+88
;; --- Cursor ---
+89
(define %show-cursor (c-function rl-lib "ShowCursor" '() ffi/void))
+90
(define %hide-cursor (c-function rl-lib "HideCursor" '() ffi/void))
+91
(define %cursor-hidden (c-function rl-lib "IsCursorHidden" '() ffi/int))
+92
(define %enable-cursor (c-function rl-lib "EnableCursor" '() ffi/void))
+93
(define %disable-cursor (c-function rl-lib "DisableCursor" '() ffi/void))
+94
(define %cursor-on-screen (c-function rl-lib "IsCursorOnScreen" '() ffi/int))
+95
+96
;; ============================================================
+97
;; Public API
+98
;; ============================================================
+99
+100
;; --- Window management ---
+101
+102
;;; Initialize window and OpenGL context.
+103
(define (init-window width height title)
+104
(: integer? integer? string? -> void?)
+105
(%init-window width height title))
+106
+107
;;; Close window and unload OpenGL context.
+108
(define (close-window) (: -> void?) (%close-window))
+109
+110
;;; Check if application should close (KEY_ESCAPE pressed or window close).
+111
(define (window-should-close?) (: -> boolean?) (not (= 0 (%window-should-close))))
+112
+113
(define (window-ready?) (: -> boolean?) (not (= 0 (%window-ready))))
+114
(define (window-fullscreen?) (: -> boolean?) (not (= 0 (%window-fullscreen))))
+115
(define (window-hidden?) (: -> boolean?) (not (= 0 (%window-hidden))))
+116
(define (window-minimized?) (: -> boolean?) (not (= 0 (%window-minimized))))
+117
(define (window-maximized?) (: -> boolean?) (not (= 0 (%window-maximized))))
+118
(define (window-focused?) (: -> boolean?) (not (= 0 (%window-focused))))
+119
(define (window-resized?) (: -> boolean?) (not (= 0 (%window-resized))))
+120
(define (window-state? flag) (: integer? -> boolean?) (not (= 0 (%window-state flag))))
+121
+122
(define (set-window-state flags) (: integer? -> void?) (%set-window-state flags))
+123
(define (clear-window-state flags) (: integer? -> void?) (%clear-window-state flags))
+124
(define (toggle-fullscreen) (: -> void?) (%toggle-fullscreen))
+125
(define (toggle-borderless-windowed) (: -> void?) (%toggle-borderless-windowed))
+126
(define (maximize-window) (: -> void?) (%maximize-window))
+127
(define (minimize-window) (: -> void?) (%minimize-window))
+128
(define (restore-window) (: -> void?) (%restore-window))
+129
(define (set-window-title title) (: string? -> void?) (%set-window-title title))
+130
(define (set-window-position x y) (: integer? integer? -> void?) (%set-window-position x y))
+131
(define (set-window-monitor monitor) (: integer? -> void?) (%set-window-monitor monitor))
+132
(define (set-window-min-size w h) (: integer? integer? -> void?) (%set-window-min-size w h))
+133
(define (set-window-max-size w h) (: integer? integer? -> void?) (%set-window-max-size w h))
+134
(define (set-window-size w h) (: integer? integer? -> void?) (%set-window-size w h))
+135
(define (set-window-opacity opacity) (: number? -> void?) (%set-window-opacity opacity))
+136
(define (set-window-focused) (: -> void?) (%set-window-focused))
+137
(define (get-window-handle) (: -> pointer?) (%get-window-handle))
+138
(define (get-screen-width) (: -> integer?) (%get-screen-width))
+139
(define (get-screen-height) (: -> integer?) (%get-screen-height))
+140
(define (get-render-width) (: -> integer?) (%get-render-width))
+141
(define (get-render-height) (: -> integer?) (%get-render-height))
+142
(define (get-monitor-count) (: -> integer?) (%get-monitor-count))
+143
(define (get-current-monitor) (: -> integer?) (%get-current-monitor))
+144
(define (get-monitor-width m) (: integer? -> integer?) (%get-monitor-width m))
+145
(define (get-monitor-height m) (: integer? -> integer?) (%get-monitor-height m))
+146
(define (get-monitor-physical-width m) (: integer? -> integer?) (%get-monitor-physical-width m))
+147
(define (get-monitor-physical-height m) (: integer? -> integer?) (%get-monitor-physical-height m))
+148
(define (get-monitor-refresh-rate m) (: integer? -> integer?) (%get-monitor-refresh-rate m))
+149
(define (get-monitor-name m) (: integer? -> string?) (%get-monitor-name m))
+150
(define (set-clipboard-text text) (: string? -> void?) (%set-clipboard-text text))
+151
(define (get-clipboard-text) (: -> string?) (%get-clipboard-text))
+152
(define (enable-event-waiting) (: -> void?) (%enable-event-waiting))
+153
(define (disable-event-waiting) (: -> void?) (%disable-event-waiting))
+154
+155
;; --- Cursor ---
+156
+157
(define (show-cursor) (: -> void?) (%show-cursor))
+158
(define (hide-cursor) (: -> void?) (%hide-cursor))
+159
(define (cursor-hidden?) (: -> boolean?) (not (= 0 (%cursor-hidden))))
+160
(define (enable-cursor) (: -> void?) (%enable-cursor))
+161
(define (disable-cursor) (: -> void?) (%disable-cursor))
+162
(define (cursor-on-screen?) (: -> boolean?) (not (= 0 (%cursor-on-screen))))))
test/test-raylib.sgladded
@@ -0,0 +1,108 @@
+1
;;; Raylib test suite
+2
;;; Tests data utilities and constants — no window/GPU required.
+3
+4
(import (sigil core)
+5
(sigil test)
+6
(sigil ffi)
+7
(raylib core)
+8
(raylib input)
+9
(raylib graphics))
+10
+11
(test-group "raylib"
+12
+13
(test-group "Color helpers"
+14
(test "make-color creates dict with RGBA fields" (fn ()
+15
(let ((c (make-color 100 200 50 255)))
+16
(assert-equal 100 (color-r c))
+17
(assert-equal 200 (color-g c))
+18
(assert-equal 50 (color-b c))
+19
(assert-equal 255 (color-a c)))))
+20
+21
(test "predefined RED" (fn ()
+22
(assert-equal 230 (color-r RED))
+23
(assert-equal 41 (color-g RED))
+24
(assert-equal 55 (color-b RED))
+25
(assert-equal 255 (color-a RED))))
+26
+27
(test "predefined WHITE" (fn ()
+28
(assert-equal 255 (color-r WHITE))
+29
(assert-equal 255 (color-g WHITE))
+30
(assert-equal 255 (color-b WHITE))
+31
(assert-equal 255 (color-a WHITE))))
+32
+33
(test "predefined BLANK has zero alpha" (fn ()
+34
(assert-equal 0 (color-a BLANK)))))
+35
+36
(test-group "Vector helpers"
+37
(test "make-vec2" (fn ()
+38
(let ((v (make-vec2 1.5 2.5)))
+39
(assert-equal 1.5 (vec2-x v))
+40
(assert-equal 2.5 (vec2-y v)))))
+41
+42
(test "make-vec3" (fn ()
+43
(let ((v (make-vec3 1.0 2.0 3.0)))
+44
(assert-equal 1.0 (vec3-x v))
+45
(assert-equal 2.0 (vec3-y v))
+46
(assert-equal 3.0 (vec3-z v)))))
+47
+48
(test "make-rect" (fn ()
+49
(let ((r (make-rect 10.0 20.0 100.0 50.0)))
+50
(assert-equal 10.0 (rect-x r))
+51
(assert-equal 20.0 (rect-y r))
+52
(assert-equal 100.0 (rect-width r))
+53
(assert-equal 50.0 (rect-height r))))))
+54
+55
(test-group "Constants"
+56
(test "keyboard keys are integers" (fn ()
+57
(assert (integer? KEY_SPACE))
+58
(assert (integer? KEY_ESCAPE))
+59
(assert (integer? KEY_A))
+60
(assert-equal 32 KEY_SPACE)
+61
(assert-equal 256 KEY_ESCAPE)
+62
(assert-equal 65 KEY_A)))
+63
+64
(test "mouse buttons are integers" (fn ()
+65
(assert-equal 0 MOUSE_BUTTON_LEFT)
+66
(assert-equal 1 MOUSE_BUTTON_RIGHT)
+67
(assert-equal 2 MOUSE_BUTTON_MIDDLE)))
+68
+69
(test "config flags are powers of 2" (fn ()
+70
(assert (integer? FLAG_VSYNC_HINT))
+71
(assert (integer? FLAG_FULLSCREEN_MODE))
+72
(assert (integer? FLAG_WINDOW_RESIZABLE))))
+73
+74
(test "log levels are ordered" (fn ()
+75
(assert (< LOG_ALL LOG_TRACE))
+76
(assert (< LOG_TRACE LOG_DEBUG))
+77
(assert (< LOG_DEBUG LOG_INFO))
+78
(assert (< LOG_INFO LOG_WARNING))
+79
(assert (< LOG_WARNING LOG_ERROR))
+80
(assert (< LOG_ERROR LOG_FATAL))
+81
(assert (< LOG_FATAL LOG_NONE))))
+82
+83
(test "blend modes" (fn ()
+84
(assert-equal 0 BLEND_ALPHA)
+85
(assert-equal 1 BLEND_ADDITIVE)))
+86
+87
(test "camera modes" (fn ()
+88
(assert-equal 0 CAMERA_CUSTOM)
+89
(assert-equal 0 CAMERA_PERSPECTIVE)
+90
(assert-equal 1 CAMERA_ORTHOGRAPHIC))))
+91
+92
(test-group "Struct layouts"
+93
(test "color-layout is a valid layout" (fn ()
+94
(assert (> (c-struct-size color-layout) 0))
+95
(assert-equal 4 (c-struct-size color-layout))))
+96
+97
(test "vector2-layout size" (fn ()
+98
(assert-equal 8 (c-struct-size vector2-layout))))
+99
+100
(test "vector3-layout size" (fn ()
+101
(assert-equal 12 (c-struct-size vector3-layout))))
+102
+103
(test "rectangle-layout size" (fn ()
+104
(assert-equal 16 (c-struct-size rectangle-layout)))))
+105
+106
(test-group "Library"
+107
(test "rl-lib is a valid library handle" (fn ()
+108
(assert (pointer? rl-lib))))))