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))))))