sdl2-bindings 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog +145 -134
  3. data/LICENSE.txt +0 -0
  4. data/README.md +108 -86
  5. data/lib/sdl2.rb +131 -131
  6. data/lib/sdl2_audio.rb +265 -261
  7. data/lib/sdl2_blendmode.rb +72 -72
  8. data/lib/sdl2_clipboard.rb +56 -56
  9. data/lib/sdl2_cpuinfo.rb +137 -129
  10. data/lib/sdl2_error.rb +71 -71
  11. data/lib/sdl2_events.rb +575 -564
  12. data/lib/sdl2_filesystem.rb +52 -52
  13. data/lib/sdl2_framerate.rb +74 -74
  14. data/lib/sdl2_gamecontroller.rb +345 -329
  15. data/lib/sdl2_gesture.rb +61 -61
  16. data/lib/sdl2_gfxPrimitives.rb +283 -283
  17. data/lib/sdl2_guid.rb +58 -0
  18. data/lib/sdl2_haptic.rb +301 -301
  19. data/lib/sdl2_hidapi.rb +139 -139
  20. data/lib/sdl2_hints.rb +240 -221
  21. data/lib/sdl2_image.rb +296 -296
  22. data/lib/sdl2_imageFilter.rb +164 -164
  23. data/lib/sdl2_joystick.rb +332 -294
  24. data/lib/sdl2_keyboard.rb +129 -125
  25. data/lib/sdl2_keycode.rb +311 -307
  26. data/lib/sdl2_log.rb +131 -131
  27. data/lib/sdl2_main.rb +74 -74
  28. data/lib/sdl2_messagebox.rb +102 -102
  29. data/lib/sdl2_misc.rb +48 -48
  30. data/lib/sdl2_mixer.rb +464 -464
  31. data/lib/sdl2_mouse.rb +136 -136
  32. data/lib/sdl2_pixels.rb +240 -240
  33. data/lib/sdl2_platform.rb +48 -48
  34. data/lib/sdl2_power.rb +54 -54
  35. data/lib/sdl2_rect.rb +145 -145
  36. data/lib/sdl2_render.rb +408 -408
  37. data/lib/sdl2_rotozoom.rb +76 -76
  38. data/lib/sdl2_rwops.rb +242 -242
  39. data/lib/sdl2_scancode.rb +293 -289
  40. data/lib/sdl2_sensor.rb +115 -115
  41. data/lib/sdl2_shape.rb +83 -83
  42. data/lib/sdl2_sound.rb +154 -154
  43. data/lib/sdl2_stdinc.rb +572 -548
  44. data/lib/sdl2_surface.rb +229 -229
  45. data/lib/sdl2_syswm.rb +160 -160
  46. data/lib/sdl2_timer.rb +74 -74
  47. data/lib/sdl2_touch.rb +86 -86
  48. data/lib/sdl2_ttf.rb +414 -414
  49. data/lib/sdl2_version.rb +67 -67
  50. data/lib/sdl2_video.rb +549 -540
  51. data/lib/sdl2_vulkan.rb +72 -72
  52. metadata +4 -3
data/lib/sdl2_events.rb CHANGED
@@ -1,564 +1,575 @@
1
- # Ruby-SDL2 : Yet another SDL2 wrapper for Ruby
2
- #
3
- # * https://github.com/vaiorabbit/sdl2-bindings
4
- #
5
- # [NOTICE] This is an automatically generated file.
6
-
7
- require 'ffi'
8
- require_relative 'sdl2_keyboard'
9
-
10
- module SDL
11
- extend FFI::Library
12
- # Define/Macro
13
-
14
- RELEASED = 0
15
- PRESSED = 1
16
- TEXTEDITINGEVENT_TEXT_SIZE = 32
17
- TEXTINPUTEVENT_TEXT_SIZE = 32
18
- QUERY = -1
19
- IGNORE = 0
20
- DISABLE = 0
21
- ENABLE = 1
22
-
23
- # Enum
24
-
25
- FIRSTEVENT = 0
26
- QUIT = 256
27
- APP_TERMINATING = 257
28
- APP_LOWMEMORY = 258
29
- APP_WILLENTERBACKGROUND = 259
30
- APP_DIDENTERBACKGROUND = 260
31
- APP_WILLENTERFOREGROUND = 261
32
- APP_DIDENTERFOREGROUND = 262
33
- LOCALECHANGED = 263
34
- DISPLAYEVENT = 336
35
- WINDOWEVENT = 512
36
- SYSWMEVENT = 513
37
- KEYDOWN = 768
38
- KEYUP = 769
39
- TEXTEDITING = 770
40
- TEXTINPUT = 771
41
- KEYMAPCHANGED = 772
42
- TEXTEDITING_EXT = 773
43
- MOUSEMOTION = 1024
44
- MOUSEBUTTONDOWN = 1025
45
- MOUSEBUTTONUP = 1026
46
- MOUSEWHEEL = 1027
47
- JOYAXISMOTION = 1536
48
- JOYBALLMOTION = 1537
49
- JOYHATMOTION = 1538
50
- JOYBUTTONDOWN = 1539
51
- JOYBUTTONUP = 1540
52
- JOYDEVICEADDED = 1541
53
- JOYDEVICEREMOVED = 1542
54
- CONTROLLERAXISMOTION = 1616
55
- CONTROLLERBUTTONDOWN = 1617
56
- CONTROLLERBUTTONUP = 1618
57
- CONTROLLERDEVICEADDED = 1619
58
- CONTROLLERDEVICEREMOVED = 1620
59
- CONTROLLERDEVICEREMAPPED = 1621
60
- CONTROLLERTOUCHPADDOWN = 1622
61
- CONTROLLERTOUCHPADMOTION = 1623
62
- CONTROLLERTOUCHPADUP = 1624
63
- CONTROLLERSENSORUPDATE = 1625
64
- FINGERDOWN = 1792
65
- FINGERUP = 1793
66
- FINGERMOTION = 1794
67
- DOLLARGESTURE = 2048
68
- DOLLARRECORD = 2049
69
- MULTIGESTURE = 2050
70
- CLIPBOARDUPDATE = 2304
71
- DROPFILE = 4096
72
- DROPTEXT = 4097
73
- DROPBEGIN = 4098
74
- DROPCOMPLETE = 4099
75
- AUDIODEVICEADDED = 4352
76
- AUDIODEVICEREMOVED = 4353
77
- SENSORUPDATE = 4608
78
- RENDER_TARGETS_RESET = 8192
79
- RENDER_DEVICE_RESET = 8193
80
- POLLSENTINEL = 32512
81
- USEREVENT = 32768
82
- LASTEVENT = 65535
83
- ADDEVENT = 0
84
- PEEKEVENT = 1
85
- GETEVENT = 2
86
-
87
- # Typedef
88
-
89
- typedef :int, :SDL_EventType
90
- typedef :int, :SDL_eventaction
91
- callback :SDL_EventFilter, [:pointer, :pointer], :int
92
-
93
- # Struct
94
-
95
- class CommonEvent < FFI::Struct
96
- layout(
97
- :type, :uint,
98
- :timestamp, :uint,
99
- )
100
- end
101
-
102
- class DisplayEvent < FFI::Struct
103
- layout(
104
- :type, :uint,
105
- :timestamp, :uint,
106
- :display, :uint,
107
- :event, :uchar,
108
- :padding1, :uchar,
109
- :padding2, :uchar,
110
- :padding3, :uchar,
111
- :data1, :int,
112
- )
113
- end
114
-
115
- class WindowEvent < FFI::Struct
116
- layout(
117
- :type, :uint,
118
- :timestamp, :uint,
119
- :windowID, :uint,
120
- :event, :uchar,
121
- :padding1, :uchar,
122
- :padding2, :uchar,
123
- :padding3, :uchar,
124
- :data1, :int,
125
- :data2, :int,
126
- )
127
- end
128
-
129
- class KeyboardEvent < FFI::Struct
130
- layout(
131
- :type, :uint,
132
- :timestamp, :uint,
133
- :windowID, :uint,
134
- :state, :uchar,
135
- :repeat, :uchar,
136
- :padding2, :uchar,
137
- :padding3, :uchar,
138
- :keysym, Keysym,
139
- )
140
- end
141
-
142
- class TextEditingEvent < FFI::Struct
143
- layout(
144
- :type, :uint,
145
- :timestamp, :uint,
146
- :windowID, :uint,
147
- :text, [:char, 32],
148
- :start, :int,
149
- :length, :int,
150
- )
151
- end
152
-
153
- class TextEditingExtEvent < FFI::Struct
154
- layout(
155
- :type, :uint,
156
- :timestamp, :uint,
157
- :windowID, :uint,
158
- :text, :pointer,
159
- :start, :int,
160
- :length, :int,
161
- )
162
- end
163
-
164
- class TextInputEvent < FFI::Struct
165
- layout(
166
- :type, :uint,
167
- :timestamp, :uint,
168
- :windowID, :uint,
169
- :text, [:char, 32],
170
- )
171
- end
172
-
173
- class MouseMotionEvent < FFI::Struct
174
- layout(
175
- :type, :uint,
176
- :timestamp, :uint,
177
- :windowID, :uint,
178
- :which, :uint,
179
- :state, :uint,
180
- :x, :int,
181
- :y, :int,
182
- :xrel, :int,
183
- :yrel, :int,
184
- )
185
- end
186
-
187
- class MouseButtonEvent < FFI::Struct
188
- layout(
189
- :type, :uint,
190
- :timestamp, :uint,
191
- :windowID, :uint,
192
- :which, :uint,
193
- :button, :uchar,
194
- :state, :uchar,
195
- :clicks, :uchar,
196
- :padding1, :uchar,
197
- :x, :int,
198
- :y, :int,
199
- )
200
- end
201
-
202
- class MouseWheelEvent < FFI::Struct
203
- layout(
204
- :type, :uint,
205
- :timestamp, :uint,
206
- :windowID, :uint,
207
- :which, :uint,
208
- :x, :int,
209
- :y, :int,
210
- :direction, :uint,
211
- :preciseX, :float,
212
- :preciseY, :float,
213
- )
214
- end
215
-
216
- class JoyAxisEvent < FFI::Struct
217
- layout(
218
- :type, :uint,
219
- :timestamp, :uint,
220
- :which, :int,
221
- :axis, :uchar,
222
- :padding1, :uchar,
223
- :padding2, :uchar,
224
- :padding3, :uchar,
225
- :value, :short,
226
- :padding4, :ushort,
227
- )
228
- end
229
-
230
- class JoyBallEvent < FFI::Struct
231
- layout(
232
- :type, :uint,
233
- :timestamp, :uint,
234
- :which, :int,
235
- :ball, :uchar,
236
- :padding1, :uchar,
237
- :padding2, :uchar,
238
- :padding3, :uchar,
239
- :xrel, :short,
240
- :yrel, :short,
241
- )
242
- end
243
-
244
- class JoyHatEvent < FFI::Struct
245
- layout(
246
- :type, :uint,
247
- :timestamp, :uint,
248
- :which, :int,
249
- :hat, :uchar,
250
- :value, :uchar,
251
- :padding1, :uchar,
252
- :padding2, :uchar,
253
- )
254
- end
255
-
256
- class JoyButtonEvent < FFI::Struct
257
- layout(
258
- :type, :uint,
259
- :timestamp, :uint,
260
- :which, :int,
261
- :button, :uchar,
262
- :state, :uchar,
263
- :padding1, :uchar,
264
- :padding2, :uchar,
265
- )
266
- end
267
-
268
- class JoyDeviceEvent < FFI::Struct
269
- layout(
270
- :type, :uint,
271
- :timestamp, :uint,
272
- :which, :int,
273
- )
274
- end
275
-
276
- class ControllerAxisEvent < FFI::Struct
277
- layout(
278
- :type, :uint,
279
- :timestamp, :uint,
280
- :which, :int,
281
- :axis, :uchar,
282
- :padding1, :uchar,
283
- :padding2, :uchar,
284
- :padding3, :uchar,
285
- :value, :short,
286
- :padding4, :ushort,
287
- )
288
- end
289
-
290
- class ControllerButtonEvent < FFI::Struct
291
- layout(
292
- :type, :uint,
293
- :timestamp, :uint,
294
- :which, :int,
295
- :button, :uchar,
296
- :state, :uchar,
297
- :padding1, :uchar,
298
- :padding2, :uchar,
299
- )
300
- end
301
-
302
- class ControllerDeviceEvent < FFI::Struct
303
- layout(
304
- :type, :uint,
305
- :timestamp, :uint,
306
- :which, :int,
307
- )
308
- end
309
-
310
- class ControllerTouchpadEvent < FFI::Struct
311
- layout(
312
- :type, :uint,
313
- :timestamp, :uint,
314
- :which, :int,
315
- :touchpad, :int,
316
- :finger, :int,
317
- :x, :float,
318
- :y, :float,
319
- :pressure, :float,
320
- )
321
- end
322
-
323
- class ControllerSensorEvent < FFI::Struct
324
- layout(
325
- :type, :uint,
326
- :timestamp, :uint,
327
- :which, :int,
328
- :sensor, :int,
329
- :data, [:float, 3],
330
- )
331
- end
332
-
333
- class AudioDeviceEvent < FFI::Struct
334
- layout(
335
- :type, :uint,
336
- :timestamp, :uint,
337
- :which, :uint,
338
- :iscapture, :uchar,
339
- :padding1, :uchar,
340
- :padding2, :uchar,
341
- :padding3, :uchar,
342
- )
343
- end
344
-
345
- class TouchFingerEvent < FFI::Struct
346
- layout(
347
- :type, :uint,
348
- :timestamp, :uint,
349
- :touchId, :long_long,
350
- :fingerId, :long_long,
351
- :x, :float,
352
- :y, :float,
353
- :dx, :float,
354
- :dy, :float,
355
- :pressure, :float,
356
- :windowID, :uint,
357
- )
358
- end
359
-
360
- class MultiGestureEvent < FFI::Struct
361
- layout(
362
- :type, :uint,
363
- :timestamp, :uint,
364
- :touchId, :long_long,
365
- :dTheta, :float,
366
- :dDist, :float,
367
- :x, :float,
368
- :y, :float,
369
- :numFingers, :ushort,
370
- :padding, :ushort,
371
- )
372
- end
373
-
374
- class DollarGestureEvent < FFI::Struct
375
- layout(
376
- :type, :uint,
377
- :timestamp, :uint,
378
- :touchId, :long_long,
379
- :gestureId, :long_long,
380
- :numFingers, :uint,
381
- :error, :float,
382
- :x, :float,
383
- :y, :float,
384
- )
385
- end
386
-
387
- class DropEvent < FFI::Struct
388
- layout(
389
- :type, :uint,
390
- :timestamp, :uint,
391
- :file, :pointer,
392
- :windowID, :uint,
393
- )
394
- end
395
-
396
- class SensorEvent < FFI::Struct
397
- layout(
398
- :type, :uint,
399
- :timestamp, :uint,
400
- :which, :int,
401
- :data, [:float, 6],
402
- )
403
- end
404
-
405
- class QuitEvent < FFI::Struct
406
- layout(
407
- :type, :uint,
408
- :timestamp, :uint,
409
- )
410
- end
411
-
412
- class OSEvent < FFI::Struct
413
- layout(
414
- :type, :uint,
415
- :timestamp, :uint,
416
- )
417
- end
418
-
419
- class UserEvent < FFI::Struct
420
- layout(
421
- :type, :uint,
422
- :timestamp, :uint,
423
- :windowID, :uint,
424
- :code, :int,
425
- :data1, :pointer,
426
- :data2, :pointer,
427
- )
428
- end
429
-
430
- class SysWMEvent < FFI::Struct
431
- layout(
432
- :type, :uint,
433
- :timestamp, :uint,
434
- :msg, :pointer,
435
- )
436
- end
437
-
438
- class Event < FFI::Union
439
- layout(
440
- :type, :uint,
441
- :common, CommonEvent,
442
- :display, DisplayEvent,
443
- :window, WindowEvent,
444
- :key, KeyboardEvent,
445
- :edit, TextEditingEvent,
446
- :editExt, TextEditingExtEvent,
447
- :text, TextInputEvent,
448
- :motion, MouseMotionEvent,
449
- :button, MouseButtonEvent,
450
- :wheel, MouseWheelEvent,
451
- :jaxis, JoyAxisEvent,
452
- :jball, JoyBallEvent,
453
- :jhat, JoyHatEvent,
454
- :jbutton, JoyButtonEvent,
455
- :jdevice, JoyDeviceEvent,
456
- :caxis, ControllerAxisEvent,
457
- :cbutton, ControllerButtonEvent,
458
- :cdevice, ControllerDeviceEvent,
459
- :ctouchpad, ControllerTouchpadEvent,
460
- :csensor, ControllerSensorEvent,
461
- :adevice, AudioDeviceEvent,
462
- :sensor, SensorEvent,
463
- :quit, QuitEvent,
464
- :user, UserEvent,
465
- :syswm, SysWMEvent,
466
- :tfinger, TouchFingerEvent,
467
- :mgesture, MultiGestureEvent,
468
- :dgesture, DollarGestureEvent,
469
- :drop, DropEvent,
470
- :padding, [:uchar, 56],
471
- )
472
- end
473
-
474
-
475
- # Function
476
-
477
- def self.setup_events_symbols(output_error = false)
478
- symbols = [
479
- :SDL_PumpEvents,
480
- :SDL_PeepEvents,
481
- :SDL_HasEvent,
482
- :SDL_HasEvents,
483
- :SDL_FlushEvent,
484
- :SDL_FlushEvents,
485
- :SDL_PollEvent,
486
- :SDL_WaitEvent,
487
- :SDL_WaitEventTimeout,
488
- :SDL_PushEvent,
489
- :SDL_SetEventFilter,
490
- :SDL_GetEventFilter,
491
- :SDL_AddEventWatch,
492
- :SDL_DelEventWatch,
493
- :SDL_FilterEvents,
494
- :SDL_EventState,
495
- :SDL_RegisterEvents,
496
- ]
497
- apis = {
498
- :SDL_PumpEvents => :PumpEvents,
499
- :SDL_PeepEvents => :PeepEvents,
500
- :SDL_HasEvent => :HasEvent,
501
- :SDL_HasEvents => :HasEvents,
502
- :SDL_FlushEvent => :FlushEvent,
503
- :SDL_FlushEvents => :FlushEvents,
504
- :SDL_PollEvent => :PollEvent,
505
- :SDL_WaitEvent => :WaitEvent,
506
- :SDL_WaitEventTimeout => :WaitEventTimeout,
507
- :SDL_PushEvent => :PushEvent,
508
- :SDL_SetEventFilter => :SetEventFilter,
509
- :SDL_GetEventFilter => :GetEventFilter,
510
- :SDL_AddEventWatch => :AddEventWatch,
511
- :SDL_DelEventWatch => :DelEventWatch,
512
- :SDL_FilterEvents => :FilterEvents,
513
- :SDL_EventState => :EventState,
514
- :SDL_RegisterEvents => :RegisterEvents,
515
- }
516
- args = {
517
- :SDL_PumpEvents => [],
518
- :SDL_PeepEvents => [:pointer, :int, :int, :uint, :uint],
519
- :SDL_HasEvent => [:uint],
520
- :SDL_HasEvents => [:uint, :uint],
521
- :SDL_FlushEvent => [:uint],
522
- :SDL_FlushEvents => [:uint, :uint],
523
- :SDL_PollEvent => [:pointer],
524
- :SDL_WaitEvent => [:pointer],
525
- :SDL_WaitEventTimeout => [:pointer, :int],
526
- :SDL_PushEvent => [:pointer],
527
- :SDL_SetEventFilter => [:SDL_EventFilter, :pointer],
528
- :SDL_GetEventFilter => [:pointer, :pointer],
529
- :SDL_AddEventWatch => [:SDL_EventFilter, :pointer],
530
- :SDL_DelEventWatch => [:SDL_EventFilter, :pointer],
531
- :SDL_FilterEvents => [:SDL_EventFilter, :pointer],
532
- :SDL_EventState => [:uint, :int],
533
- :SDL_RegisterEvents => [:int],
534
- }
535
- retvals = {
536
- :SDL_PumpEvents => :void,
537
- :SDL_PeepEvents => :int,
538
- :SDL_HasEvent => :int,
539
- :SDL_HasEvents => :int,
540
- :SDL_FlushEvent => :void,
541
- :SDL_FlushEvents => :void,
542
- :SDL_PollEvent => :int,
543
- :SDL_WaitEvent => :int,
544
- :SDL_WaitEventTimeout => :int,
545
- :SDL_PushEvent => :int,
546
- :SDL_SetEventFilter => :void,
547
- :SDL_GetEventFilter => :int,
548
- :SDL_AddEventWatch => :void,
549
- :SDL_DelEventWatch => :void,
550
- :SDL_FilterEvents => :void,
551
- :SDL_EventState => :uchar,
552
- :SDL_RegisterEvents => :uint,
553
- }
554
- symbols.each do |sym|
555
- begin
556
- attach_function apis[sym], sym, args[sym], retvals[sym]
557
- rescue FFI::NotFoundError => error
558
- $stderr.puts("[Warning] Failed to import #{sym} (#{error}).") if output_error
559
- end
560
- end
561
- end
562
-
563
- end
564
-
1
+ # Ruby-SDL2 : Yet another SDL2 wrapper for Ruby
2
+ #
3
+ # * https://github.com/vaiorabbit/sdl2-bindings
4
+ #
5
+ # [NOTICE] This is an automatically generated file.
6
+
7
+ require 'ffi'
8
+ require_relative 'sdl2_keyboard'
9
+
10
+ module SDL
11
+ extend FFI::Library
12
+ # Define/Macro
13
+
14
+ RELEASED = 0
15
+ PRESSED = 1
16
+ TEXTEDITINGEVENT_TEXT_SIZE = 32
17
+ TEXTINPUTEVENT_TEXT_SIZE = 32
18
+ QUERY = -1
19
+ IGNORE = 0
20
+ DISABLE = 0
21
+ ENABLE = 1
22
+
23
+ # Enum
24
+
25
+ FIRSTEVENT = 0
26
+ QUIT = 256
27
+ APP_TERMINATING = 257
28
+ APP_LOWMEMORY = 258
29
+ APP_WILLENTERBACKGROUND = 259
30
+ APP_DIDENTERBACKGROUND = 260
31
+ APP_WILLENTERFOREGROUND = 261
32
+ APP_DIDENTERFOREGROUND = 262
33
+ LOCALECHANGED = 263
34
+ DISPLAYEVENT = 336
35
+ WINDOWEVENT = 512
36
+ SYSWMEVENT = 513
37
+ KEYDOWN = 768
38
+ KEYUP = 769
39
+ TEXTEDITING = 770
40
+ TEXTINPUT = 771
41
+ KEYMAPCHANGED = 772
42
+ TEXTEDITING_EXT = 773
43
+ MOUSEMOTION = 1024
44
+ MOUSEBUTTONDOWN = 1025
45
+ MOUSEBUTTONUP = 1026
46
+ MOUSEWHEEL = 1027
47
+ JOYAXISMOTION = 1536
48
+ JOYBALLMOTION = 1537
49
+ JOYHATMOTION = 1538
50
+ JOYBUTTONDOWN = 1539
51
+ JOYBUTTONUP = 1540
52
+ JOYDEVICEADDED = 1541
53
+ JOYDEVICEREMOVED = 1542
54
+ JOYBATTERYUPDATED = 1543
55
+ CONTROLLERAXISMOTION = 1616
56
+ CONTROLLERBUTTONDOWN = 1617
57
+ CONTROLLERBUTTONUP = 1618
58
+ CONTROLLERDEVICEADDED = 1619
59
+ CONTROLLERDEVICEREMOVED = 1620
60
+ CONTROLLERDEVICEREMAPPED = 1621
61
+ CONTROLLERTOUCHPADDOWN = 1622
62
+ CONTROLLERTOUCHPADMOTION = 1623
63
+ CONTROLLERTOUCHPADUP = 1624
64
+ CONTROLLERSENSORUPDATE = 1625
65
+ FINGERDOWN = 1792
66
+ FINGERUP = 1793
67
+ FINGERMOTION = 1794
68
+ DOLLARGESTURE = 2048
69
+ DOLLARRECORD = 2049
70
+ MULTIGESTURE = 2050
71
+ CLIPBOARDUPDATE = 2304
72
+ DROPFILE = 4096
73
+ DROPTEXT = 4097
74
+ DROPBEGIN = 4098
75
+ DROPCOMPLETE = 4099
76
+ AUDIODEVICEADDED = 4352
77
+ AUDIODEVICEREMOVED = 4353
78
+ SENSORUPDATE = 4608
79
+ RENDER_TARGETS_RESET = 8192
80
+ RENDER_DEVICE_RESET = 8193
81
+ POLLSENTINEL = 32512
82
+ USEREVENT = 32768
83
+ LASTEVENT = 65535
84
+ ADDEVENT = 0
85
+ PEEKEVENT = 1
86
+ GETEVENT = 2
87
+
88
+ # Typedef
89
+
90
+ typedef :int, :SDL_EventType
91
+ typedef :int, :SDL_eventaction
92
+ callback :SDL_EventFilter, [:pointer, :pointer], :int
93
+
94
+ # Struct
95
+
96
+ class CommonEvent < FFI::Struct
97
+ layout(
98
+ :type, :uint,
99
+ :timestamp, :uint,
100
+ )
101
+ end
102
+
103
+ class DisplayEvent < FFI::Struct
104
+ layout(
105
+ :type, :uint,
106
+ :timestamp, :uint,
107
+ :display, :uint,
108
+ :event, :uchar,
109
+ :padding1, :uchar,
110
+ :padding2, :uchar,
111
+ :padding3, :uchar,
112
+ :data1, :int,
113
+ )
114
+ end
115
+
116
+ class WindowEvent < FFI::Struct
117
+ layout(
118
+ :type, :uint,
119
+ :timestamp, :uint,
120
+ :windowID, :uint,
121
+ :event, :uchar,
122
+ :padding1, :uchar,
123
+ :padding2, :uchar,
124
+ :padding3, :uchar,
125
+ :data1, :int,
126
+ :data2, :int,
127
+ )
128
+ end
129
+
130
+ class KeyboardEvent < FFI::Struct
131
+ layout(
132
+ :type, :uint,
133
+ :timestamp, :uint,
134
+ :windowID, :uint,
135
+ :state, :uchar,
136
+ :repeat, :uchar,
137
+ :padding2, :uchar,
138
+ :padding3, :uchar,
139
+ :keysym, Keysym,
140
+ )
141
+ end
142
+
143
+ class TextEditingEvent < FFI::Struct
144
+ layout(
145
+ :type, :uint,
146
+ :timestamp, :uint,
147
+ :windowID, :uint,
148
+ :text, [:char, 32],
149
+ :start, :int,
150
+ :length, :int,
151
+ )
152
+ end
153
+
154
+ class TextEditingExtEvent < FFI::Struct
155
+ layout(
156
+ :type, :uint,
157
+ :timestamp, :uint,
158
+ :windowID, :uint,
159
+ :text, :pointer,
160
+ :start, :int,
161
+ :length, :int,
162
+ )
163
+ end
164
+
165
+ class TextInputEvent < FFI::Struct
166
+ layout(
167
+ :type, :uint,
168
+ :timestamp, :uint,
169
+ :windowID, :uint,
170
+ :text, [:char, 32],
171
+ )
172
+ end
173
+
174
+ class MouseMotionEvent < FFI::Struct
175
+ layout(
176
+ :type, :uint,
177
+ :timestamp, :uint,
178
+ :windowID, :uint,
179
+ :which, :uint,
180
+ :state, :uint,
181
+ :x, :int,
182
+ :y, :int,
183
+ :xrel, :int,
184
+ :yrel, :int,
185
+ )
186
+ end
187
+
188
+ class MouseButtonEvent < FFI::Struct
189
+ layout(
190
+ :type, :uint,
191
+ :timestamp, :uint,
192
+ :windowID, :uint,
193
+ :which, :uint,
194
+ :button, :uchar,
195
+ :state, :uchar,
196
+ :clicks, :uchar,
197
+ :padding1, :uchar,
198
+ :x, :int,
199
+ :y, :int,
200
+ )
201
+ end
202
+
203
+ class MouseWheelEvent < FFI::Struct
204
+ layout(
205
+ :type, :uint,
206
+ :timestamp, :uint,
207
+ :windowID, :uint,
208
+ :which, :uint,
209
+ :x, :int,
210
+ :y, :int,
211
+ :direction, :uint,
212
+ :preciseX, :float,
213
+ :preciseY, :float,
214
+ )
215
+ end
216
+
217
+ class JoyAxisEvent < FFI::Struct
218
+ layout(
219
+ :type, :uint,
220
+ :timestamp, :uint,
221
+ :which, :int,
222
+ :axis, :uchar,
223
+ :padding1, :uchar,
224
+ :padding2, :uchar,
225
+ :padding3, :uchar,
226
+ :value, :short,
227
+ :padding4, :ushort,
228
+ )
229
+ end
230
+
231
+ class JoyBallEvent < FFI::Struct
232
+ layout(
233
+ :type, :uint,
234
+ :timestamp, :uint,
235
+ :which, :int,
236
+ :ball, :uchar,
237
+ :padding1, :uchar,
238
+ :padding2, :uchar,
239
+ :padding3, :uchar,
240
+ :xrel, :short,
241
+ :yrel, :short,
242
+ )
243
+ end
244
+
245
+ class JoyHatEvent < FFI::Struct
246
+ layout(
247
+ :type, :uint,
248
+ :timestamp, :uint,
249
+ :which, :int,
250
+ :hat, :uchar,
251
+ :value, :uchar,
252
+ :padding1, :uchar,
253
+ :padding2, :uchar,
254
+ )
255
+ end
256
+
257
+ class JoyButtonEvent < FFI::Struct
258
+ layout(
259
+ :type, :uint,
260
+ :timestamp, :uint,
261
+ :which, :int,
262
+ :button, :uchar,
263
+ :state, :uchar,
264
+ :padding1, :uchar,
265
+ :padding2, :uchar,
266
+ )
267
+ end
268
+
269
+ class JoyDeviceEvent < FFI::Struct
270
+ layout(
271
+ :type, :uint,
272
+ :timestamp, :uint,
273
+ :which, :int,
274
+ )
275
+ end
276
+
277
+ class JoyBatteryEvent < FFI::Struct
278
+ layout(
279
+ :type, :uint,
280
+ :timestamp, :uint,
281
+ :which, :int,
282
+ :level, :int,
283
+ )
284
+ end
285
+
286
+ class ControllerAxisEvent < FFI::Struct
287
+ layout(
288
+ :type, :uint,
289
+ :timestamp, :uint,
290
+ :which, :int,
291
+ :axis, :uchar,
292
+ :padding1, :uchar,
293
+ :padding2, :uchar,
294
+ :padding3, :uchar,
295
+ :value, :short,
296
+ :padding4, :ushort,
297
+ )
298
+ end
299
+
300
+ class ControllerButtonEvent < FFI::Struct
301
+ layout(
302
+ :type, :uint,
303
+ :timestamp, :uint,
304
+ :which, :int,
305
+ :button, :uchar,
306
+ :state, :uchar,
307
+ :padding1, :uchar,
308
+ :padding2, :uchar,
309
+ )
310
+ end
311
+
312
+ class ControllerDeviceEvent < FFI::Struct
313
+ layout(
314
+ :type, :uint,
315
+ :timestamp, :uint,
316
+ :which, :int,
317
+ )
318
+ end
319
+
320
+ class ControllerTouchpadEvent < FFI::Struct
321
+ layout(
322
+ :type, :uint,
323
+ :timestamp, :uint,
324
+ :which, :int,
325
+ :touchpad, :int,
326
+ :finger, :int,
327
+ :x, :float,
328
+ :y, :float,
329
+ :pressure, :float,
330
+ )
331
+ end
332
+
333
+ class ControllerSensorEvent < FFI::Struct
334
+ layout(
335
+ :type, :uint,
336
+ :timestamp, :uint,
337
+ :which, :int,
338
+ :sensor, :int,
339
+ :data, [:float, 3],
340
+ )
341
+ end
342
+
343
+ class AudioDeviceEvent < FFI::Struct
344
+ layout(
345
+ :type, :uint,
346
+ :timestamp, :uint,
347
+ :which, :uint,
348
+ :iscapture, :uchar,
349
+ :padding1, :uchar,
350
+ :padding2, :uchar,
351
+ :padding3, :uchar,
352
+ )
353
+ end
354
+
355
+ class TouchFingerEvent < FFI::Struct
356
+ layout(
357
+ :type, :uint,
358
+ :timestamp, :uint,
359
+ :touchId, :long_long,
360
+ :fingerId, :long_long,
361
+ :x, :float,
362
+ :y, :float,
363
+ :dx, :float,
364
+ :dy, :float,
365
+ :pressure, :float,
366
+ :windowID, :uint,
367
+ )
368
+ end
369
+
370
+ class MultiGestureEvent < FFI::Struct
371
+ layout(
372
+ :type, :uint,
373
+ :timestamp, :uint,
374
+ :touchId, :long_long,
375
+ :dTheta, :float,
376
+ :dDist, :float,
377
+ :x, :float,
378
+ :y, :float,
379
+ :numFingers, :ushort,
380
+ :padding, :ushort,
381
+ )
382
+ end
383
+
384
+ class DollarGestureEvent < FFI::Struct
385
+ layout(
386
+ :type, :uint,
387
+ :timestamp, :uint,
388
+ :touchId, :long_long,
389
+ :gestureId, :long_long,
390
+ :numFingers, :uint,
391
+ :error, :float,
392
+ :x, :float,
393
+ :y, :float,
394
+ )
395
+ end
396
+
397
+ class DropEvent < FFI::Struct
398
+ layout(
399
+ :type, :uint,
400
+ :timestamp, :uint,
401
+ :file, :pointer,
402
+ :windowID, :uint,
403
+ )
404
+ end
405
+
406
+ class SensorEvent < FFI::Struct
407
+ layout(
408
+ :type, :uint,
409
+ :timestamp, :uint,
410
+ :which, :int,
411
+ :data, [:float, 6],
412
+ )
413
+ end
414
+
415
+ class QuitEvent < FFI::Struct
416
+ layout(
417
+ :type, :uint,
418
+ :timestamp, :uint,
419
+ )
420
+ end
421
+
422
+ class OSEvent < FFI::Struct
423
+ layout(
424
+ :type, :uint,
425
+ :timestamp, :uint,
426
+ )
427
+ end
428
+
429
+ class UserEvent < FFI::Struct
430
+ layout(
431
+ :type, :uint,
432
+ :timestamp, :uint,
433
+ :windowID, :uint,
434
+ :code, :int,
435
+ :data1, :pointer,
436
+ :data2, :pointer,
437
+ )
438
+ end
439
+
440
+ class SysWMEvent < FFI::Struct
441
+ layout(
442
+ :type, :uint,
443
+ :timestamp, :uint,
444
+ :msg, :pointer,
445
+ )
446
+ end
447
+
448
+ class Event < FFI::Union
449
+ layout(
450
+ :type, :uint,
451
+ :common, CommonEvent,
452
+ :display, DisplayEvent,
453
+ :window, WindowEvent,
454
+ :key, KeyboardEvent,
455
+ :edit, TextEditingEvent,
456
+ :editExt, TextEditingExtEvent,
457
+ :text, TextInputEvent,
458
+ :motion, MouseMotionEvent,
459
+ :button, MouseButtonEvent,
460
+ :wheel, MouseWheelEvent,
461
+ :jaxis, JoyAxisEvent,
462
+ :jball, JoyBallEvent,
463
+ :jhat, JoyHatEvent,
464
+ :jbutton, JoyButtonEvent,
465
+ :jdevice, JoyDeviceEvent,
466
+ :jbattery, JoyBatteryEvent,
467
+ :caxis, ControllerAxisEvent,
468
+ :cbutton, ControllerButtonEvent,
469
+ :cdevice, ControllerDeviceEvent,
470
+ :ctouchpad, ControllerTouchpadEvent,
471
+ :csensor, ControllerSensorEvent,
472
+ :adevice, AudioDeviceEvent,
473
+ :sensor, SensorEvent,
474
+ :quit, QuitEvent,
475
+ :user, UserEvent,
476
+ :syswm, SysWMEvent,
477
+ :tfinger, TouchFingerEvent,
478
+ :mgesture, MultiGestureEvent,
479
+ :dgesture, DollarGestureEvent,
480
+ :drop, DropEvent,
481
+ :padding, [:uchar, 56],
482
+ )
483
+ end
484
+
485
+
486
+ # Function
487
+
488
+ def self.setup_events_symbols(output_error = false)
489
+ symbols = [
490
+ :SDL_PumpEvents,
491
+ :SDL_PeepEvents,
492
+ :SDL_HasEvent,
493
+ :SDL_HasEvents,
494
+ :SDL_FlushEvent,
495
+ :SDL_FlushEvents,
496
+ :SDL_PollEvent,
497
+ :SDL_WaitEvent,
498
+ :SDL_WaitEventTimeout,
499
+ :SDL_PushEvent,
500
+ :SDL_SetEventFilter,
501
+ :SDL_GetEventFilter,
502
+ :SDL_AddEventWatch,
503
+ :SDL_DelEventWatch,
504
+ :SDL_FilterEvents,
505
+ :SDL_EventState,
506
+ :SDL_RegisterEvents,
507
+ ]
508
+ apis = {
509
+ :SDL_PumpEvents => :PumpEvents,
510
+ :SDL_PeepEvents => :PeepEvents,
511
+ :SDL_HasEvent => :HasEvent,
512
+ :SDL_HasEvents => :HasEvents,
513
+ :SDL_FlushEvent => :FlushEvent,
514
+ :SDL_FlushEvents => :FlushEvents,
515
+ :SDL_PollEvent => :PollEvent,
516
+ :SDL_WaitEvent => :WaitEvent,
517
+ :SDL_WaitEventTimeout => :WaitEventTimeout,
518
+ :SDL_PushEvent => :PushEvent,
519
+ :SDL_SetEventFilter => :SetEventFilter,
520
+ :SDL_GetEventFilter => :GetEventFilter,
521
+ :SDL_AddEventWatch => :AddEventWatch,
522
+ :SDL_DelEventWatch => :DelEventWatch,
523
+ :SDL_FilterEvents => :FilterEvents,
524
+ :SDL_EventState => :EventState,
525
+ :SDL_RegisterEvents => :RegisterEvents,
526
+ }
527
+ args = {
528
+ :SDL_PumpEvents => [],
529
+ :SDL_PeepEvents => [:pointer, :int, :int, :uint, :uint],
530
+ :SDL_HasEvent => [:uint],
531
+ :SDL_HasEvents => [:uint, :uint],
532
+ :SDL_FlushEvent => [:uint],
533
+ :SDL_FlushEvents => [:uint, :uint],
534
+ :SDL_PollEvent => [:pointer],
535
+ :SDL_WaitEvent => [:pointer],
536
+ :SDL_WaitEventTimeout => [:pointer, :int],
537
+ :SDL_PushEvent => [:pointer],
538
+ :SDL_SetEventFilter => [:SDL_EventFilter, :pointer],
539
+ :SDL_GetEventFilter => [:pointer, :pointer],
540
+ :SDL_AddEventWatch => [:SDL_EventFilter, :pointer],
541
+ :SDL_DelEventWatch => [:SDL_EventFilter, :pointer],
542
+ :SDL_FilterEvents => [:SDL_EventFilter, :pointer],
543
+ :SDL_EventState => [:uint, :int],
544
+ :SDL_RegisterEvents => [:int],
545
+ }
546
+ retvals = {
547
+ :SDL_PumpEvents => :void,
548
+ :SDL_PeepEvents => :int,
549
+ :SDL_HasEvent => :int,
550
+ :SDL_HasEvents => :int,
551
+ :SDL_FlushEvent => :void,
552
+ :SDL_FlushEvents => :void,
553
+ :SDL_PollEvent => :int,
554
+ :SDL_WaitEvent => :int,
555
+ :SDL_WaitEventTimeout => :int,
556
+ :SDL_PushEvent => :int,
557
+ :SDL_SetEventFilter => :void,
558
+ :SDL_GetEventFilter => :int,
559
+ :SDL_AddEventWatch => :void,
560
+ :SDL_DelEventWatch => :void,
561
+ :SDL_FilterEvents => :void,
562
+ :SDL_EventState => :uchar,
563
+ :SDL_RegisterEvents => :uint,
564
+ }
565
+ symbols.each do |sym|
566
+ begin
567
+ attach_function apis[sym], sym, args[sym], retvals[sym]
568
+ rescue FFI::NotFoundError => error
569
+ $stderr.puts("[Warning] Failed to import #{sym} (#{error}).") if output_error
570
+ end
571
+ end
572
+ end
573
+
574
+ end
575
+