sdl2_ffi 0.0.6 → 0.0.7

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 (204) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/Gemfile +0 -6
  4. data/Guardfile +0 -45
  5. data/README.md +11 -21
  6. data/lib/bad_sdl.rb +4 -0
  7. data/lib/{sdl2 → bad_sdl}/application.rb +47 -35
  8. data/lib/{sdl2 → bad_sdl}/engine.rb +20 -3
  9. data/lib/{sdl2 → bad_sdl}/engine/block_engine.rb +2 -2
  10. data/lib/bad_sdl/engine/engines.rb +51 -0
  11. data/lib/enumerable_constants.rb +4 -2
  12. data/lib/sdl2.rb +26 -247
  13. data/lib/sdl2/blendmode.rb +18 -0
  14. data/lib/sdl2/color.rb +1 -3
  15. data/lib/sdl2/debug.rb +58 -0
  16. data/lib/sdl2/display.rb +30 -23
  17. data/lib/sdl2/error.rb +6 -4
  18. data/lib/sdl2/event.rb +229 -0
  19. data/lib/sdl2/event/abstract.rb +11 -0
  20. data/lib/sdl2/event/action.rb +19 -0
  21. data/lib/sdl2/event/common.rb +10 -0
  22. data/lib/sdl2/event/controller_axis.rb +20 -0
  23. data/lib/sdl2/event/controller_button.rb +17 -0
  24. data/lib/sdl2/event/controller_device.rb +14 -0
  25. data/lib/sdl2/event/dollar_gesture.rb +19 -0
  26. data/lib/sdl2/event/drop.rb +18 -0
  27. data/lib/sdl2/event/joy_axis.rb +20 -0
  28. data/lib/sdl2/event/joy_ball.rb +20 -0
  29. data/lib/sdl2/event/joy_button.rb +18 -0
  30. data/lib/sdl2/event/joy_device.rb +14 -0
  31. data/lib/sdl2/event/joy_hat.rb +18 -0
  32. data/lib/sdl2/event/keyboard.rb +18 -0
  33. data/lib/sdl2/event/mouse_button.rb +21 -0
  34. data/lib/sdl2/event/mouse_motion.rb +19 -0
  35. data/lib/sdl2/event/mouse_wheel.rb +17 -0
  36. data/lib/sdl2/event/multi_gesture.rb +20 -0
  37. data/lib/sdl2/event/os.rb +12 -0
  38. data/lib/sdl2/event/quit.rb +12 -0
  39. data/lib/sdl2/event/state.rb +13 -0
  40. data/lib/sdl2/event/sys_wm.rb +15 -0
  41. data/lib/sdl2/event/text_editing.rb +17 -0
  42. data/lib/sdl2/event/text_input.rb +15 -0
  43. data/lib/sdl2/event/touch_finger.rb +20 -0
  44. data/lib/sdl2/event/type.rb +62 -0
  45. data/lib/sdl2/event/user.rb +15 -0
  46. data/lib/sdl2/event/window.rb +19 -0
  47. data/lib/sdl2/events.rb +23 -538
  48. data/lib/sdl2/gem_version.rb +1 -1
  49. data/lib/sdl2/haptic.rb +3 -3
  50. data/lib/sdl2/hints.rb +3 -1
  51. data/lib/sdl2/image.rb +20 -20
  52. data/lib/sdl2/init.rb +5 -8
  53. data/lib/sdl2/joystick.rb +104 -78
  54. data/lib/sdl2/joystick/axes.rb +22 -0
  55. data/lib/sdl2/joystick/balls.rb +24 -0
  56. data/lib/sdl2/joystick/buttons.rb +22 -0
  57. data/lib/sdl2/joystick/components.rb +23 -0
  58. data/lib/sdl2/joystick/hats.rb +22 -0
  59. data/lib/sdl2/keyboard.rb +11 -10
  60. data/lib/sdl2/keycode.rb +70 -70
  61. data/lib/sdl2/library.rb +8 -7
  62. data/lib/sdl2/log.rb +6 -0
  63. data/lib/sdl2/managed_struct.rb +17 -0
  64. data/lib/sdl2/mixer.rb +16 -12
  65. data/lib/sdl2/mixer/chunk.rb +14 -3
  66. data/lib/sdl2/mouse.rb +21 -41
  67. data/lib/sdl2/pixel_format.rb +4 -4
  68. data/lib/sdl2/pixels.rb +59 -47
  69. data/lib/sdl2/power.rb +1 -1
  70. data/lib/sdl2/rect.rb +4 -5
  71. data/lib/sdl2/render.rb +85 -170
  72. data/lib/sdl2/renderer.rb +337 -20
  73. data/lib/sdl2/rwops.rb +89 -30
  74. data/lib/sdl2/stdinc.rb +18 -21
  75. data/lib/sdl2/struct.rb +184 -0
  76. data/lib/sdl2/struct_helper.rb +32 -0
  77. data/lib/sdl2/surface.rb +15 -14
  78. data/lib/sdl2/syswm.rb +26 -10
  79. data/lib/sdl2/syswm/msg.rb +22 -4
  80. data/lib/sdl2/texture.rb +106 -0
  81. data/lib/sdl2/touch.rb +16 -20
  82. data/lib/sdl2/ttf.rb +29 -29
  83. data/lib/sdl2/ttf/sdl_ttf_module.rb +1 -1
  84. data/lib/sdl2/typed_pointer.rb +45 -0
  85. data/lib/sdl2/union.rb +7 -0
  86. data/lib/sdl2/video.rb +97 -183
  87. data/lib/sdl2/window.rb +140 -90
  88. data/lib/struct_array.rb +42 -0
  89. data/sdl2_ffi.gemspec +3 -3
  90. data/spec/fixtures/approvals/lazyfoonet_lesson_03_advanced_timers/has_a_message.approved.png +0 -0
  91. data/spec/fixtures/approvals/lazyfoonet_lesson_07_true_type_fonts/draws_the_message_to_the_screen.approved.png +0 -0
  92. data/spec/fixtures/approvals/lazyfoonet_lesson_14_advanced_timers/has_a_message.approved.png +0 -0
  93. data/spec/fixtures/approvals/lazyfoonet_lesson_14_advanced_timers/has_drawn_something.approved.png +0 -0
  94. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_clear.approved.png +0 -0
  95. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_a_line_connecting_many_points.approved.png +0 -0
  96. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_a_point.approved.png +0 -0
  97. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_a_single_filled_rectangle.approved.png +0 -0
  98. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_a_single_pixel_line.approved.png +0 -0
  99. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_a_single_rectangle.approved.png +0 -0
  100. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_many_filled_rectangles.approved.png +0 -0
  101. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_many_rectangles_at_once.approved.png +0 -0
  102. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_points.approved.png +0 -0
  103. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_render_textures.approved.png +0 -0
  104. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_rotate_and_flip_while_rendering_textures.approved.png +0 -0
  105. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_have_a_clip_rect.approved.png +0 -0
  106. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_clear.approved.png +0 -0
  107. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_a_line_connecting_many_points.approved.png +0 -0
  108. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_a_point.approved.png +0 -0
  109. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_a_single_filled_rectangle.approved.png +0 -0
  110. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_a_single_pixel_line.approved.png +0 -0
  111. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_a_single_rectangle.approved.png +0 -0
  112. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_many_filled_rectangles.approved.png +0 -0
  113. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_many_rectangles_at_once.approved.png +0 -0
  114. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_points.approved.png +0 -0
  115. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_render_textures.approved.png +0 -0
  116. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_rotate_and_flip_while_rendering_textures.approved.png +0 -0
  117. data/spec/fixtures/approvals/sdl2_renderer/should_have_a_clip_rect.approved.png +0 -0
  118. data/spec/fixtures/images/finger.png +0 -0
  119. data/spec/fixtures/music/beat.wav +0 -0
  120. data/spec/fixtures/sounds/high.wav +0 -0
  121. data/spec/fixtures/sounds/low.wav +0 -0
  122. data/spec/fixtures/sounds/medium.wav +0 -0
  123. data/spec/fixtures/sounds/scratch.wav +0 -0
  124. data/spec/functional/lazy_foo_tutorial/lazy_foo_01_hello_world_spec.rb +4 -6
  125. data/spec/functional/lazy_foo_tutorial/lazy_foo_02_optimized_images_spec.rb +3 -4
  126. data/spec/functional/lazy_foo_tutorial/lazy_foo_03_extension_libraries_spec.rb +2 -2
  127. data/spec/functional/lazy_foo_tutorial/lazy_foo_04_event_driven_programming_spec.rb +3 -3
  128. data/spec/functional/lazy_foo_tutorial/lazy_foo_05_color_keying_spec.rb +1 -1
  129. data/spec/functional/lazy_foo_tutorial/lazy_foo_06_clip_blitting_and_sprite_sheets_spec.rb +1 -1
  130. data/spec/functional/lazy_foo_tutorial/lazy_foo_07_true_type_fonts_spec.rb +3 -2
  131. data/spec/functional/lazy_foo_tutorial/lazy_foo_08_key_presses_spec.rb +9 -7
  132. data/spec/functional/lazy_foo_tutorial/lazy_foo_09_mouse_events_spec.rb +11 -8
  133. data/spec/functional/lazy_foo_tutorial/lazy_foo_10_key_states_spec.rb +5 -4
  134. data/spec/functional/lazy_foo_tutorial/lazy_foo_11_playing_sounds_spec.rb +17 -9
  135. data/spec/functional/lazy_foo_tutorial/lazy_foo_12_timing_spec.rb +8 -7
  136. data/spec/functional/lazy_foo_tutorial/lazy_foo_13_advanced_timers_spec.rb +85 -0
  137. data/spec/functional/lazy_foo_tutorial/lazy_foo_14_regulating_frame_rate_spec.rb +67 -0
  138. data/spec/functional/lazy_foo_tutorial/lazy_foo_15_calculating_frame_rate_spec.rb +48 -0
  139. data/spec/functional/lazy_foo_tutorial/lazy_foo_16_motion_spec.rb +95 -0
  140. data/spec/functional/lazy_foo_tutorial/lazy_foo_helper.rb +3 -1
  141. data/spec/functional/lazy_foo_tutorial/timer.rb +55 -0
  142. data/spec/lib/bad_sdl/application_spec.rb +22 -0
  143. data/spec/{unit → lib}/sdl2/color_spec.rb +5 -1
  144. data/spec/lib/sdl2/display_spec.rb +6 -0
  145. data/spec/lib/sdl2/event_spec.rb +102 -0
  146. data/spec/lib/sdl2/events_spec.rb +12 -0
  147. data/spec/lib/sdl2/joystick_spec.rb +130 -0
  148. data/spec/lib/sdl2/keyboard_spec.rb +22 -0
  149. data/spec/lib/sdl2/mouse_spec.rb +21 -0
  150. data/spec/lib/sdl2/render_spec.rb +62 -0
  151. data/spec/lib/sdl2/renderer_spec.rb +224 -0
  152. data/spec/lib/sdl2/sdl2_helper.rb +5 -0
  153. data/spec/lib/sdl2/texture_spec.rb +65 -0
  154. data/{test/unit/sdl2/test_video.rb → spec/lib/sdl2/video_spec.rb} +82 -57
  155. data/spec/lib/sdl2/window_spec.rb +42 -0
  156. data/spec/{unit → lib}/unit_helper.rb +0 -0
  157. data/spec/png_writer.rb +9 -1
  158. data/spec/spec_helper.rb +5 -3
  159. metadata +201 -132
  160. data/lib/sdl2/engine/engines.rb +0 -46
  161. data/test/approvals/clip_blitting_and_sprite_sheets.received.bmp +0 -0
  162. data/test/approvals/color_keying_example.approved.png +0 -0
  163. data/test/approvals/hello_world_example_hello.approved.png +0 -0
  164. data/test/approvals/hello_world_example_screen.approved.png +0 -0
  165. data/test/approvals/optimized_surface_loading.approved.png +0 -0
  166. data/test/fixtures/an_example.png +0 -0
  167. data/test/fixtures/background.bmp +0 -0
  168. data/test/fixtures/background.jpg +0 -0
  169. data/test/fixtures/color_bars.jpg +0 -0
  170. data/test/fixtures/foo.jpg +0 -0
  171. data/test/fixtures/hello.bmp +0 -0
  172. data/test/fixtures/sprites.jpg +0 -0
  173. data/test/fixtures/x.png +0 -0
  174. data/test/functional/examples/lazyfoo.net_s/test_clip_blitting_and_sprite_sheets.rb +0 -50
  175. data/test/functional/examples/lazyfoo.net_s/test_color_keying.rb +0 -42
  176. data/test/functional/examples/test_lazy_foo_examples.rb +0 -195
  177. data/test/functional/examples/test_readme_examples.rb +0 -15
  178. data/test/test_helper.rb +0 -13
  179. data/test/unit/sdl2/test_assert.rb +0 -10
  180. data/test/unit/sdl2/test_audio.rb +0 -9
  181. data/test/unit/sdl2/test_clipboard.rb +0 -13
  182. data/test/unit/sdl2/test_cpuinfo.rb +0 -11
  183. data/test/unit/sdl2/test_error.rb +0 -20
  184. data/test/unit/sdl2/test_events.rb +0 -31
  185. data/test/unit/sdl2/test_haptic.rb +0 -27
  186. data/test/unit/sdl2/test_hints.rb +0 -50
  187. data/test/unit/sdl2/test_image.rb +0 -9
  188. data/test/unit/sdl2/test_init.rb +0 -29
  189. data/test/unit/sdl2/test_keyboard.rb +0 -9
  190. data/test/unit/sdl2/test_log.rb +0 -80
  191. data/test/unit/sdl2/test_palette.rb +0 -26
  192. data/test/unit/sdl2/test_pixel_format.rb +0 -38
  193. data/test/unit/sdl2/test_pixels.rb +0 -24
  194. data/test/unit/sdl2/test_power.rb +0 -11
  195. data/test/unit/sdl2/test_rect.rb +0 -19
  196. data/test/unit/sdl2/test_render.rb +0 -58
  197. data/test/unit/sdl2/test_surface.rb +0 -88
  198. data/test/unit/sdl2/test_syswm.rb +0 -11
  199. data/test/unit/sdl2/test_timer.rb +0 -9
  200. data/test/unit/sdl2/test_ttf.rb +0 -11
  201. data/test/unit/sdl2/test_version.rb +0 -16
  202. data/test/unit/sdl2/test_window.rb +0 -155
  203. data/test/unit/test_scratch.rb +0 -19
  204. data/test/unit/test_sdl2.rb +0 -16
@@ -0,0 +1,15 @@
1
+ module SDL2
2
+ class Event
3
+ # A user-defined event type (event.user.*)
4
+ class User < Abstract
5
+ layout *SHARED + [
6
+ :windowID, :uint32,
7
+ :code, :int32,
8
+ :data1, :pointer,
9
+ :data2, :pointer
10
+ ]
11
+ member_readers *members
12
+ member_writers *members
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ module SDL2
2
+ class Event
3
+ # Window state change event data (event.window.*)
4
+ class Window < Abstract
5
+
6
+ layout *SHARED + [
7
+ :windowID, :uint32,
8
+ :event, :uint8,
9
+ :padding1, :uint8,
10
+ :padding2, :uint8,
11
+ :padding3, :uint8,
12
+ :data1, :int32,
13
+ :data2, :int32
14
+ ]
15
+ member_readers *members
16
+ member_writers *members
17
+ end
18
+ end
19
+ end
@@ -10,570 +10,55 @@ require 'sdl2/touch'
10
10
  require 'sdl2/syswm/msg'
11
11
 
12
12
  module SDL2
13
-
14
- RELEASED = 0
15
- PRESSED = 1
16
-
17
- # The types of events that can be delivered
18
- module EVENTTYPE
19
- include EnumerableConstants
20
- FIRSTEVENT = 0
21
-
22
- QUIT = 0x100
23
-
24
- APP_TERMINATING
25
- APP_LOWMEMORY
26
- APP_WILLENTERBACKGROUND
27
- APP_DIDENTERBACKGROUND
28
- APP_WILLENTERFOREGROUND
29
- APP_DIDENTERFOREGROUND
30
-
31
- WINDOWEVENT = 0x200
32
- SYSWMEVENT
33
-
34
- KEYDOWN = 0x300
35
- KEYUP
36
- TEXTEDITING
37
- TEXTINPUT
38
-
39
- MOUSEMOTION = 0x400
40
- MOUSEBUTTONDOWN
41
- MOUSEBUTTONUP
42
- MOUSEWHEEL
43
-
44
- JOYAXISMOTION = 0x600
45
- JOYBALLMOTION
46
- JOYHATMOTION
47
- JOYBUTTONDOWN
48
- JOYBUTTONUP
49
- JOYDEVICEADDED
50
- JOYDEVICEREMOVED
51
-
52
- CONTROLLERAXISMOTION = 0x650
53
- CONTROLLERBUTTONDOWN
54
- CONTROLLERBUTTONUP
55
- CONTROLLERDEVICEADDED
56
- CONTROLLERDEVICEREMOVED
57
- CONTROLLERDEVICEREMAPPED
58
-
59
- FINGERDOWN = 0x700
60
- FINGERUP
61
- FINGERMOTION
62
-
63
- DOLLARGESTURE = 0x800
64
- DOLLARRECORD
65
- MULTIGESTURE
66
-
67
- CLIPBOARDUPDATE = 0x900
68
-
69
- DROPFILE = 0x1000
70
-
71
- USEREVENT = 0x8000
72
-
73
- LASTEVENT = 0xFFFF
74
- end
75
-
76
- enum :event_type, EVENTTYPE.flatten_consts
77
-
78
- class AbstractEvent < Struct
79
- SHARED = [:type, :event_type, :timestamp, :uint32]
80
-
81
- end
82
-
83
- # Fields shared by every event
84
- class CommonEvent < AbstractEvent
85
-
86
- layout *SHARED
87
-
88
- end
89
-
90
- # Window state change event data (event.window.*)
91
- class WindowEvent < AbstractEvent
92
-
93
- layout *SHARED + [
94
- :windowID, :uint32,
95
- :event, :uint8,
96
- :padding1, :uint8,
97
- :padding2, :uint8,
98
- :padding3, :uint8,
99
- :data1, :int32,
100
- :data2, :int32
101
- ]
102
- member_readers *members
103
- member_writers *members
104
- end
105
-
106
- # Keyboard button event structure (event.key.*)
107
- class KeyboardEvent < AbstractEvent
108
-
109
- layout *SHARED + [
110
- :windowID, :uint32,
111
- :state, :uint8,
112
- :repeat, :uint8,
113
- :padding2, :uint8,
114
- :padding3, :uint8,
115
- :keysym, Keysym
116
- ]
117
- member_readers *members
118
- member_writers *members
119
- end
120
-
121
- # Keyboard text editing event structure (event.edit.*)
122
- class TextEditingEvent < AbstractEvent
123
-
124
- TEXT_SIZE = 32 # Line 188
125
- layout *SHARED + [
126
- :windowID, :uint32,
127
- :char, [:char, TEXT_SIZE],
128
- :start, :int32,
129
- :length, :int32
130
- ]
131
- member_readers *members
132
- member_writers *members
133
- end
134
-
135
- # Keyboard text input event structure (event.text.*)
136
- class TextInputEvent < AbstractEvent
137
-
138
- TEXT_SIZE = 32 # Line 203
139
- layout *SHARED + [
140
- :windowID, :uint32,
141
- :char, [:char, TEXT_SIZE]
142
- ]
143
- member_readers *members
144
- member_writers *members
145
- end
146
-
147
- # Mouse motion event structure (event.motion.*)
148
- class MouseMotionEvent < AbstractEvent
149
-
150
- layout *SHARED + [
151
- :windowID, :uint32,
152
- :which, :uint32,
153
- :state, :uint32,
154
- :x, :int32,
155
- :y, :int32,
156
- :xrel, :int32,
157
- :yrel, :int32
158
- ]
159
- member_readers *members
160
- member_writers *members
161
- end
162
-
163
- # Mouse button event structure (event.button.*)
164
- class MouseButtonEvent < AbstractEvent
165
-
166
- layout *SHARED + [
167
- :windowID, :uint32,
168
- :which, :uint32,
169
- :button, :uint8,
170
- :state, :uint8,
171
- :padding1, :uint8,
172
- :padding2, :uint8,
173
- :x, :int32,
174
- :y, :int32
175
- ]
176
- member_readers *members
177
- member_writers *members
178
- end
179
-
180
- # Mouse wheel event structure (event.wheel.*)
181
- class MouseWheelEvent < AbstractEvent
182
-
183
- layout *SHARED + [
184
- :windowID, :uint32,
185
- :which, :uint32,
186
- :x, :int32,
187
- :y, :int32
188
- ]
189
- member_readers *members
190
- member_writers *members
191
- end
192
-
193
- # Joystick axis motion event structure (event.jaxis.*)
194
- class JoyAxisEvent < AbstractEvent
195
-
196
- layout *SHARED + [
197
- :which, :joystick_id,
198
- :axis, :uint8,
199
- :padding1, :uint8,
200
- :padding2, :uint8,
201
- :padding3, :uint8,
202
- :value, :int16,
203
- :padding4, :uint16
204
- ]
205
- member_readers *members
206
- member_writers *members
207
- end
208
-
209
- # Joystick trackball motion event structure (event.jball.*)
210
- class JoyBallEvent < AbstractEvent
211
-
212
- layout *SHARED + [
213
- :which, :joystick_id,
214
- :ball, :uint8,
215
- :padding1, :uint8,
216
- :padding2, :uint8,
217
- :padding3, :uint8,
218
- :xrel, :int16,
219
- :yrel, :int16
220
- ]
221
- member_readers *members
222
- member_writers *members
223
- end
224
-
225
- # Joystick hat position change event structure (event.jhat.*)
226
- class JoyHatEvent < AbstractEvent
227
-
228
- layout *SHARED + [
229
- :which, :joystick_id,
230
- :hat, :uint8,
231
- :value, :uint8,
232
- :padding1, :uint8,
233
- :padding2, :uint8
234
- ]
235
- member_readers *members
236
- member_writers *members
237
- end
238
-
239
- # Joystick button event structure (event.jbutton.*)
240
- class JoyButtonEvent < AbstractEvent
241
-
242
- layout *SHARED + [
243
- :which, :joystick_id,
244
- :button, :uint8,
245
- :state, :uint8,
246
- :padding1, :uint8,
247
- :padding2, :uint8
248
- ]
249
- member_readers *members
250
- member_writers *members
251
- end
252
-
253
- # Joystick device event structure (event.jdevice.*)
254
- class JoyDeviceEvent < AbstractEvent
255
-
256
- layout *SHARED + [
257
- :which, :joystick_id
258
- ]
259
- member_readers *members
260
- member_writers *members
261
- end
262
-
263
- # Game controller axis motion event structure (event.caxis.*)
264
- class ControllerAxisEvent < AbstractEvent
265
-
266
- layout *SHARED + [
267
- :which, :joystick_id,
268
- :axis, :uint8,
269
- :padding1, :uint8,
270
- :padding2, :uint8,
271
- :padding3, :uint8,
272
- :value, :int16,
273
- :padding4, :uint16
274
- ]
275
- member_readers *members
276
- member_writers *members
277
- end
278
-
279
- # Game controller button event structure (event.cbutton.*)
280
- class ControllerButtonEvent < AbstractEvent
281
-
282
- layout *SHARED + [
283
- :which, :joystick_id,
284
- :button, :uint8,
285
- :state, :uint8,
286
- :padding1, :uint8,
287
- :padding2, :uint8
288
- ]
289
- member_readers *members
290
- member_writers *members
291
- end
292
-
293
- # Controller device event structure (event.cdevice.*)
294
- class ControllerDeviceEvent < AbstractEvent
295
-
296
- layout *SHARED + [
297
- :which, :joystick_id
298
- ]
299
- member_readers *members
300
- member_writers *members
301
- end
302
-
303
- # Touch finger event structure (event.tfinger.*)
304
- class TouchFingerEvent < AbstractEvent
305
-
306
- layout *SHARED + [
307
- :touchId, :touch_id,
308
- :fingerId, :finger_id,
309
- :x, :float,
310
- :y, :float,
311
- :dx, :float,
312
- :dy, :float,
313
- :pressure, :float
314
- ]
315
- member_readers *members
316
- member_writers *members
317
- end
318
-
319
- # Multiple Finger Gesture Event (event.mgesture.*)
320
- class MultiGestureEvent < AbstractEvent
321
-
322
- layout *SHARED + [
323
- :touchId, :touch_id,
324
- :dTheta, :float,
325
- :dDist, :float,
326
- :x, :float,
327
- :y, :float,
328
- :numFingers, :uint16,
329
- :padding, :uint16
330
- ]
331
- member_readers *members
332
- member_writers *members
333
- end
334
-
335
- # Dollar Gesture Event (event.dgesture.*)
336
- class DollarGestureEvent < AbstractEvent
337
-
338
- layout *SHARED + [
339
- :touchId, :touch_id,
340
- :gestureId, :gesture_id,
341
- :numFingers, :uint32,
342
- :error, :float,
343
- :x, :float,
344
- :y, :float
345
- ]
346
- member_readers *members
347
- member_writers *members
348
- end
349
-
350
- # @brief An event used to request a file open by the system (event.drop.*)
351
- # This event is disabled by default, you can enable it with
352
- # SDL_EventState()
353
- # @note If you enable this event, you must free the filename in the event.
354
- #
355
- class DropEvent < AbstractEvent
356
-
357
- layout *SHARED + [
358
- :file, :string
359
- ]
360
- member_readers *members
361
- member_writers *members
362
- end
363
-
364
- # The "quit requested" event
365
- class QuitEvent < AbstractEvent
366
-
367
- layout *SHARED
368
- member_readers *members
369
- member_writers *members
370
- end
371
-
372
- # OS Specific event
373
- class OSEvent < AbstractEvent
374
-
375
- layout *SHARED
376
- member_readers *members
377
- member_writers *members
378
- end
379
-
380
- # A user-defined event type (event.user.*)
381
- class UserEvent < AbstractEvent
382
- layout *SHARED + [
383
- :windowID, :uint32,
384
- :code, :int32,
385
- :data1, :pointer,
386
- :data2, :pointer
387
- ]
388
- member_readers *members
389
- member_writers *members
390
- end
391
-
392
- # @brief A video driver dependent system event (event.syswm.*)
393
- # This event is disabled by default, you can enable it with
394
- # SDL_EventState()
395
- #
396
- # @note If you want to use this event, you should include SDL_syswm.h.
397
- class SysWMEvent < AbstractEvent
398
- layout *SHARED + [
399
- :msg, SDL2::SysWM::Msg.by_ref
400
- ]
401
- end
402
-
403
- # General event UNION (structure)
404
- # Remember that this is a union, all other structures not related to #type are
405
- # garbage
406
- class Event < Union
407
- layout :type, :event_type,
408
- :common, CommonEvent,
409
- :window, WindowEvent,
410
- :key, KeyboardEvent,
411
- :edit, TextEditingEvent,
412
- :text, TextInputEvent,
413
- :motion, MouseMotionEvent,
414
- :button, MouseButtonEvent,
415
- :wheel, MouseWheelEvent,
416
- :jaxis, JoyAxisEvent,
417
- :jball, JoyBallEvent,
418
- :jbutton, JoyButtonEvent,
419
- :jdevice, JoyDeviceEvent,
420
- :caxis, ControllerAxisEvent,
421
- :cbutton, ControllerButtonEvent,
422
- :cdevice, ControllerDeviceEvent,
423
- :quit, QuitEvent,
424
- :user, UserEvent,
425
- :syswm, SysWMEvent,
426
- :tfinger, TouchFingerEvent,
427
- :mgesture, MultiGestureEvent,
428
- :drop, DropEvent,
429
- :padding, [:uint8, 56] # From SDL_events.h:529
430
-
431
- member_readers *members
432
- member_writers *members
433
-
434
- # Polls for currently pending events
435
- # @returns SDL2::Event or nil if there are no events.
436
- def self.poll()
437
- tmp_event = SDL2::Event.new
438
- unless SDL2.poll_event?(tmp_event)
439
- tmp_event.pointer.free
440
- tmp_event = nil
441
- end
442
- return tmp_event # May be nil if SDL2.poll_event fails.
443
- end
444
-
445
- def self.push(event)
446
- event = Event.cast(event)
447
- SDL2.push_event!(event)
448
- end
449
-
450
- def self.cast(something)
451
- if something.kind_of? AbstractEvent
452
- return self.new(something.pointer)
453
- elsif something.kind_of? Hash
454
- raise "Must have type : #{something.inspect}" unless something.has_key? :type
455
- tmp = self.new
456
- fields = members & something.keys
457
- fields.each do |field|
458
- if tmp[field].kind_of? Struct and something[field].kind_of? Hash
459
- tmp[field].update_members(something[field])
460
- else
461
- tmp[field] = something[field]
462
- end
463
- end
464
- return tmp
465
- else
466
- raise "Is not an AbstractEvent!: #{something.inspect}"
467
- end
468
- end
469
-
470
- def ==(other)
471
- if other.kind_of?(Hash)
472
- # False if there are fields that do not exist
473
- return false unless (other.keys - members).empty?
474
-
475
- (other.keys & members).each do |field|
476
- return false unless self[field] == other[field]
477
- end
478
-
479
- return true #if we get this far
480
-
481
- else
482
-
483
- return super(other)
484
-
485
- end
486
- end
487
-
488
- end
489
-
490
- module EVENTACTION
491
- include EnumerableConstants
492
- ADD
493
- PEEK
494
- GET
495
- end
496
-
497
- enum :eventaction, EVENTACTION.flatten_consts
498
-
499
- ##
500
- # :class-method: peep_events
501
- ##
502
- #
503
- api :SDL_PeepEvents, [Event.by_ref, :count, :eventaction, :uint32, :uint32], :int
504
- ##
505
- #
506
- api :SDL_HasEvent, [:uint32], :bool
507
- ##
508
- #
509
- api :SDL_HasEvents, [:uint32, :uint32], :bool
510
- ##
511
- #
512
- api :SDL_FlushEvent, [:uint32], :void
513
13
  ##
514
- #
515
- api :SDL_FlushEvents, [:uint32, :uint32], :void
14
+ # General keyboard/mouse released state
15
+ RELEASED = 0
516
16
  ##
517
- #
17
+ # General keyboard/mouse pressed state
18
+ PRESSED = 1
19
+ require 'sdl2/event'
20
+
21
+
22
+ api :SDL_PeepEvents, [Event.by_ref, :count, :eventaction, :event_type, :event_type], :int, {error: true, filter: OK_WHEN_GTE_ZERO}
23
+ api :SDL_HasEvent, [:event_type], :bool
24
+ api :SDL_HasEvents, [:event_type, :event_type], :bool
25
+ api :SDL_FlushEvent, [:event_type], :void
26
+ api :SDL_FlushEvents, [:event_type, :event_type], :void
27
+ api :SDL_PumpEvents, [], :void
518
28
  api :SDL_PollEvent, [Event.by_ref], :int
519
- boolean? :poll_event, TRUE_WHEN_ONE
520
- ##
521
- #
29
+ boolean? :poll_event, OK_WHEN_ONE
522
30
  api :SDL_WaitEvent, [Event.by_ref], :int
523
- ##
524
- #
525
31
  api :SDL_WaitEventTimeout, [Event.by_ref, :count], :int
526
- ##
527
- #
528
- api :SDL_PushEvent, [Event.by_ref], :int, {error: true, filter: TRUE_WHEN_ONE}
32
+ api :SDL_PushEvent, [Event.by_ref], :int, {error: true, filter: OK_WHEN_ONE}
529
33
 
530
34
  ##
531
35
  # callback event_filter #=> Proc.new do |pointer, event|; return int; end
532
36
  callback :event_filter, [:pointer, Event.by_ref], :int
37
+
38
+ class TypedPointer::EventFilter < TypedPointer
39
+ type :event_filter
40
+ end
533
41
 
534
42
  # This simple structure is used for getting the event filter
535
43
  class EventFilterStruct < Struct
536
44
  layout :callback, :event_filter
537
45
  end
538
46
 
539
- ##
540
- #
541
47
  api :SDL_SetEventFilter, [:event_filter, :pointer], :void
542
- ##
543
- #
544
- api :SDL_GetEventFilter, [:pointer, :pointer], :bool
545
- ##
546
- #
48
+ api :SDL_GetEventFilter, [TypedPointer::EventFilter.by_ref, TypedPointer::Pointer.by_ref], :bool
547
49
  api :SDL_AddEventWatch, [:event_filter, :pointer], :void
548
- ##
549
- #
550
50
  api :SDL_DelEventWatch, [:event_filter, :pointer], :void
551
- ##
552
- #
553
51
  api :SDL_FilterEvents, [:event_filter, :pointer], :void
554
52
 
555
- # Enumeration of event_state query
556
- module EVENTSTATE
557
- include EnumerableConstants
558
- QUERY = -1
559
- IGNORE = 0
560
- DISABLE = 0
561
- ENABLE = 1
562
- end
563
53
 
564
- enum :event_state, EVENTSTATE.flatten_consts
565
54
 
566
- ##
567
- #
568
- ##
569
- #
570
- api :SDL_EventState, [:uint32, :event_state], :uint8
55
+ enum :event_state, Event::STATE.flatten_consts
56
+
57
+ api :SDL_EventState, [:event_type, :event_state], :bool
571
58
 
572
59
  def get_event_state(type)
573
60
  event_state(type, EVENTSTATE::QUERY)
574
61
  end
575
62
 
576
- ##
577
- #
578
63
  api :SDL_RegisterEvents, [:count], :uint32
579
64
  end