sdl2_ffi 0.0.4 → 0.0.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.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/Gemfile +6 -0
- data/Guardfile +47 -25
- data/Rakefile +6 -0
- data/bin/approvals +16 -0
- data/bin/autospec +16 -0
- data/bin/htmldiff +16 -0
- data/bin/ldiff +16 -0
- data/bin/nokogiri +16 -0
- data/bin/rspec +16 -0
- data/lib/enumerable_constants.rb +23 -8
- data/lib/sdl2.rb +116 -39
- data/lib/sdl2/color.rb +19 -7
- data/lib/sdl2/events.rb +184 -85
- data/lib/sdl2/gamecontroller.rb +1 -1
- data/lib/sdl2/gem_version.rb +1 -1
- data/lib/sdl2/joystick.rb +1 -1
- data/lib/sdl2/keyboard.rb +3 -0
- data/lib/sdl2/mouse.rb +5 -5
- data/lib/sdl2/pixel_format.rb +11 -3
- data/lib/sdl2/pixels.rb +40 -40
- data/lib/sdl2/point.rb +17 -1
- data/lib/sdl2/power.rb +12 -3
- data/lib/sdl2/rect.rb +19 -0
- data/lib/sdl2/render.rb +3 -3
- data/lib/sdl2/scancode.rb +7 -0
- data/lib/sdl2/stdinc.rb +2 -0
- data/lib/sdl2/surface.rb +64 -12
- data/lib/sdl2/ttf.rb +52 -66
- data/lib/sdl2/ttf/font.rb +115 -0
- data/lib/sdl2/video.rb +23 -23
- data/lib/sdl2/window.rb +15 -15
- data/sdl2_ffi.gemspec +5 -2
- data/spec/fixtures/approvals/lazyfoonet_lesson_01_hello_world/draws_hello_to_the_window_surface.approved.png +0 -0
- data/spec/fixtures/approvals/lazyfoonet_lesson_01_hello_world/loaded_and_optimizes_hello_bitmap.approved.png +0 -0
- data/spec/fixtures/approvals/lazyfoonet_lesson_02_optimized_images/draws_the_message_and_background.approved.png +0 -0
- data/spec/fixtures/approvals/lazyfoonet_lesson_03_extension_libraries/should_blit_a_png_to_screen.approved.png +0 -0
- data/spec/fixtures/approvals/lazyfoonet_lesson_04_event_driven_programming/draws_something_to_the_screen.approved.png +0 -0
- data/spec/fixtures/approvals/lazyfoonet_lesson_05_color_keying/draws_the_sprite_using_a_color_key.approved.png +0 -0
- data/spec/fixtures/approvals/lazyfoonet_lesson_06_clip_blitting_and_sprite_sheets/draws_the_clipped_sprites_to_the_screen.approved.png +0 -0
- data/spec/fixtures/approvals/lazyfoonet_lesson_07_true_type_fonts/draws_the_message_to_the_screen.approved.png +0 -0
- data/spec/fixtures/approvals/lazyfoonet_lesson_07_true_type_fonts/writes_a_message_to_a_surface.approved.png +0 -0
- data/spec/fixtures/approvals/lazyfoonet_lesson_08_key_presses/rendered_the_down_message.approved.png +0 -0
- data/spec/fixtures/approvals/lazyfoonet_lesson_08_key_presses/rendered_the_left_message.approved.png +0 -0
- data/spec/fixtures/approvals/lazyfoonet_lesson_08_key_presses/rendered_the_right_message.approved.png +0 -0
- data/spec/fixtures/approvals/lazyfoonet_lesson_08_key_presses/rendered_the_up_message.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2_color/looks_blue_when_it_should.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2_color/looks_green_when_it_should.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2_color/looks_red_when_it_should.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2_color/should_cast_arrays_properly.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2_color/should_cast_hashes_properly.approved.png +0 -0
- data/spec/fixtures/fonts/FreeMono.ttf +0 -0
- data/spec/fixtures/fonts/GaroaHackerClubeBold.otf +0 -0
- data/spec/fixtures/fonts/GaroaHackerClubeBold.otf.credits.yaml +4 -0
- data/spec/fixtures/images/an_example.png +0 -0
- data/spec/fixtures/images/background.bmp +0 -0
- data/spec/fixtures/images/background.jpg +0 -0
- data/spec/fixtures/images/background.png +0 -0
- data/spec/fixtures/images/foo.jpg +0 -0
- data/spec/fixtures/images/hello.bmp +0 -0
- data/spec/fixtures/images/sprites.jpg +0 -0
- data/spec/fixtures/images/tile.png +0 -0
- data/spec/fixtures/images/x.png +0 -0
- data/spec/functional/lazy_foo_tutorial/lazy_foo_01_hello_world_spec.rb +39 -0
- data/spec/functional/lazy_foo_tutorial/lazy_foo_02_optimized_images_spec.rb +51 -0
- data/spec/functional/lazy_foo_tutorial/lazy_foo_03_extension_libraries_spec.rb +31 -0
- data/spec/functional/lazy_foo_tutorial/lazy_foo_04_event_driven_programming_spec.rb +55 -0
- data/spec/functional/lazy_foo_tutorial/lazy_foo_05_color_keying_spec.rb +41 -0
- data/spec/functional/lazy_foo_tutorial/lazy_foo_06_clip_blitting_and_sprite_sheets_spec.rb +41 -0
- data/spec/functional/lazy_foo_tutorial/lazy_foo_07_true_type_fonts_spec.rb +56 -0
- data/spec/functional/lazy_foo_tutorial/lazy_foo_08_key_presses_spec.rb +120 -0
- data/spec/functional/lazy_foo_tutorial/lazy_foo_helper.rb +6 -0
- data/spec/png_writer.rb +21 -0
- data/spec/spec_helper.rb +23 -0
- data/spec/unit/sdl2/color_spec.rb +46 -0
- data/spec/unit/unit_helper.rb +3 -0
- data/test/approvals/clip_blitting_and_sprite_sheets.received.bmp +0 -0
- data/test/approvals/color_keying_example.approved.png +0 -0
- data/test/approvals/hello_world_example_hello.approved.png +0 -0
- data/test/approvals/hello_world_example_screen.approved.png +0 -0
- data/test/approvals/optimized_surface_loading.approved.png +0 -0
- data/test/fixtures/background.jpg +0 -0
- data/test/fixtures/foo.jpg +0 -0
- data/test/fixtures/sprites.jpg +0 -0
- data/test/fixtures/x.png +0 -0
- data/test/functional/examples/lazyfoo.net_s/test_clip_blitting_and_sprite_sheets.rb +50 -0
- data/test/functional/examples/lazyfoo.net_s/test_color_keying.rb +42 -0
- data/test/functional/examples/test_lazy_foo_examples.rb +120 -48
- data/test/test_helper.rb +9 -0
- metadata +138 -4
- data/graph +0 -566
data/lib/sdl2/color.rb
CHANGED
@@ -9,12 +9,19 @@ module SDL2
|
|
9
9
|
:b, :uint8,
|
10
10
|
:a, :uint8
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
member_readers *members
|
13
|
+
member_writers *members
|
14
|
+
|
15
|
+
# If possible, convert argument into a SDL::Color
|
16
|
+
def self.cast(something)
|
17
|
+
if something.kind_of? Array
|
18
|
+
something.map!(&:to_i)
|
19
|
+
result = new
|
20
|
+
result.set(*something)
|
21
|
+
|
22
|
+
return result
|
23
|
+
else
|
24
|
+
return super
|
18
25
|
end
|
19
26
|
end
|
20
27
|
|
@@ -22,7 +29,7 @@ module SDL2
|
|
22
29
|
self.r = r
|
23
30
|
self.g = g
|
24
31
|
self.b = b
|
25
|
-
self.a = a
|
32
|
+
self.a = a.nil? ? ALPHA_OPAQUE : a
|
26
33
|
end
|
27
34
|
|
28
35
|
def copy_from(color)
|
@@ -30,6 +37,11 @@ module SDL2
|
|
30
37
|
self.send("#{c}=", color.send(c))
|
31
38
|
end
|
32
39
|
end
|
40
|
+
|
41
|
+
def to_a
|
42
|
+
[r, g, b, a]
|
43
|
+
end
|
33
44
|
end
|
45
|
+
# Alternative spelling of Color
|
34
46
|
Colour = Color # Because SDL does it
|
35
47
|
end
|
data/lib/sdl2/events.rb
CHANGED
@@ -21,48 +21,48 @@ module SDL2
|
|
21
21
|
|
22
22
|
QUIT = 0x100
|
23
23
|
|
24
|
-
APP_TERMINATING
|
25
|
-
APP_LOWMEMORY
|
26
|
-
APP_WILLENTERBACKGROUND
|
27
|
-
APP_DIDENTERBACKGROUND
|
28
|
-
APP_WILLENTERFOREGROUND
|
29
|
-
APP_DIDENTERFOREGROUND
|
24
|
+
APP_TERMINATING
|
25
|
+
APP_LOWMEMORY
|
26
|
+
APP_WILLENTERBACKGROUND
|
27
|
+
APP_DIDENTERBACKGROUND
|
28
|
+
APP_WILLENTERFOREGROUND
|
29
|
+
APP_DIDENTERFOREGROUND
|
30
30
|
|
31
31
|
WINDOWEVENT = 0x200
|
32
|
-
SYSWMEVENT
|
32
|
+
SYSWMEVENT
|
33
33
|
|
34
34
|
KEYDOWN = 0x300
|
35
|
-
KEYUP
|
36
|
-
TEXTEDITING
|
37
|
-
TEXTINPUT
|
35
|
+
KEYUP
|
36
|
+
TEXTEDITING
|
37
|
+
TEXTINPUT
|
38
38
|
|
39
39
|
MOUSEMOTION = 0x400
|
40
|
-
MOUSEBUTTONDOWN
|
41
|
-
MOUSEBUTTONUP
|
42
|
-
MOUSEWHEEL
|
40
|
+
MOUSEBUTTONDOWN
|
41
|
+
MOUSEBUTTONUP
|
42
|
+
MOUSEWHEEL
|
43
43
|
|
44
44
|
JOYAXISMOTION = 0x600
|
45
|
-
JOYBALLMOTION
|
46
|
-
JOYHATMOTION
|
47
|
-
JOYBUTTONDOWN
|
48
|
-
JOYBUTTONUP
|
49
|
-
JOYDEVICEADDED
|
50
|
-
JOYDEVICEREMOVED
|
45
|
+
JOYBALLMOTION
|
46
|
+
JOYHATMOTION
|
47
|
+
JOYBUTTONDOWN
|
48
|
+
JOYBUTTONUP
|
49
|
+
JOYDEVICEADDED
|
50
|
+
JOYDEVICEREMOVED
|
51
51
|
|
52
52
|
CONTROLLERAXISMOTION = 0x650
|
53
|
-
CONTROLLERBUTTONDOWN
|
54
|
-
CONTROLLERBUTTONUP
|
55
|
-
CONTROLLERDEVICEADDED
|
56
|
-
CONTROLLERDEVICEREMOVED
|
57
|
-
CONTROLLERDEVICEREMAPPED
|
53
|
+
CONTROLLERBUTTONDOWN
|
54
|
+
CONTROLLERBUTTONUP
|
55
|
+
CONTROLLERDEVICEADDED
|
56
|
+
CONTROLLERDEVICEREMOVED
|
57
|
+
CONTROLLERDEVICEREMAPPED
|
58
58
|
|
59
59
|
FINGERDOWN = 0x700
|
60
|
-
FINGERUP
|
61
|
-
FINGERMOTION
|
60
|
+
FINGERUP
|
61
|
+
FINGERMOTION
|
62
62
|
|
63
63
|
DOLLARGESTURE = 0x800
|
64
|
-
DOLLARRECORD
|
65
|
-
MULTIGESTURE
|
64
|
+
DOLLARRECORD
|
65
|
+
MULTIGESTURE
|
66
66
|
|
67
67
|
CLIPBOARDUPDATE = 0x900
|
68
68
|
|
@@ -75,16 +75,20 @@ module SDL2
|
|
75
75
|
|
76
76
|
enum :event_type, EVENTTYPE.flatten_consts
|
77
77
|
|
78
|
+
class AbstractEvent < Struct
|
79
|
+
SHARED = [:type, :event_type, :timestamp, :uint32]
|
80
|
+
end
|
81
|
+
|
78
82
|
# Fields shared by every event
|
79
|
-
class CommonEvent <
|
80
|
-
LAYOUT = [:type, :uint32, :timestamp, :uint32]
|
81
|
-
layout *LAYOUT
|
83
|
+
class CommonEvent < AbstractEvent
|
82
84
|
|
85
|
+
layout *SHARED
|
83
86
|
end
|
84
87
|
|
85
88
|
# Window state change event data (event.window.*)
|
86
|
-
class WindowEvent <
|
87
|
-
|
89
|
+
class WindowEvent < AbstractEvent
|
90
|
+
|
91
|
+
layout *SHARED + [
|
88
92
|
:windowID, :uint32,
|
89
93
|
:event, :uint8,
|
90
94
|
:padding1, :uint8,
|
@@ -93,11 +97,14 @@ module SDL2
|
|
93
97
|
:data1, :int32,
|
94
98
|
:data2, :int32
|
95
99
|
]
|
100
|
+
member_readers *members
|
101
|
+
member_writers *members
|
96
102
|
end
|
97
103
|
|
98
104
|
# Keyboard button event structure (event.key.*)
|
99
|
-
class KeyboardEvent <
|
100
|
-
|
105
|
+
class KeyboardEvent < AbstractEvent
|
106
|
+
|
107
|
+
layout *SHARED + [
|
101
108
|
:windowID, :uint32,
|
102
109
|
:state, :uint8,
|
103
110
|
:repeat, :uint8,
|
@@ -105,31 +112,40 @@ module SDL2
|
|
105
112
|
:padding3, :uint8,
|
106
113
|
:keysym, Keysym
|
107
114
|
]
|
115
|
+
member_readers *members
|
116
|
+
member_writers *members
|
108
117
|
end
|
109
118
|
|
110
119
|
# Keyboard text editing event structure (event.edit.*)
|
111
|
-
class TextEditingEvent <
|
120
|
+
class TextEditingEvent < AbstractEvent
|
121
|
+
|
112
122
|
TEXT_SIZE = 32 # Line 188
|
113
|
-
layout *
|
123
|
+
layout *SHARED + [
|
114
124
|
:windowID, :uint32,
|
115
125
|
:char, [:char, TEXT_SIZE],
|
116
126
|
:start, :int32,
|
117
127
|
:length, :int32
|
118
128
|
]
|
129
|
+
member_readers *members
|
130
|
+
member_writers *members
|
119
131
|
end
|
120
132
|
|
121
133
|
# Keyboard text input event structure (event.text.*)
|
122
|
-
class TextInputEvent <
|
134
|
+
class TextInputEvent < AbstractEvent
|
135
|
+
|
123
136
|
TEXT_SIZE = 32 # Line 203
|
124
|
-
layout *
|
137
|
+
layout *SHARED + [
|
125
138
|
:windowID, :uint32,
|
126
139
|
:char, [:char, TEXT_SIZE]
|
127
140
|
]
|
141
|
+
member_readers *members
|
142
|
+
member_writers *members
|
128
143
|
end
|
129
144
|
|
130
145
|
# Mouse motion event structure (event.motion.*)
|
131
|
-
class MouseMotionEvent <
|
132
|
-
|
146
|
+
class MouseMotionEvent < AbstractEvent
|
147
|
+
|
148
|
+
layout *SHARED + [
|
133
149
|
:windowID, :uint32,
|
134
150
|
:which, :uint32,
|
135
151
|
:state, :uint32,
|
@@ -138,11 +154,14 @@ module SDL2
|
|
138
154
|
:xrel, :int32,
|
139
155
|
:yrel, :int32
|
140
156
|
]
|
157
|
+
member_readers *members
|
158
|
+
member_writers *members
|
141
159
|
end
|
142
160
|
|
143
161
|
# Mouse button event structure (event.button.*)
|
144
|
-
class MouseButtonEvent <
|
145
|
-
|
162
|
+
class MouseButtonEvent < AbstractEvent
|
163
|
+
|
164
|
+
layout *SHARED + [
|
146
165
|
:windowID, :uint32,
|
147
166
|
:which, :uint32,
|
148
167
|
:button, :uint8,
|
@@ -152,21 +171,27 @@ module SDL2
|
|
152
171
|
:x, :int32,
|
153
172
|
:y, :int32
|
154
173
|
]
|
174
|
+
member_readers *members
|
175
|
+
member_writers *members
|
155
176
|
end
|
156
177
|
|
157
178
|
# Mouse wheel event structure (event.wheel.*)
|
158
|
-
class MouseWheelEvent <
|
159
|
-
|
179
|
+
class MouseWheelEvent < AbstractEvent
|
180
|
+
|
181
|
+
layout *SHARED + [
|
160
182
|
:windowID, :uint32,
|
161
183
|
:which, :uint32,
|
162
184
|
:x, :int32,
|
163
185
|
:y, :int32
|
164
186
|
]
|
187
|
+
member_readers *members
|
188
|
+
member_writers *members
|
165
189
|
end
|
166
190
|
|
167
191
|
# Joystick axis motion event structure (event.jaxis.*)
|
168
|
-
class JoyAxisEvent <
|
169
|
-
|
192
|
+
class JoyAxisEvent < AbstractEvent
|
193
|
+
|
194
|
+
layout *SHARED + [
|
170
195
|
:which, :joystick_id,
|
171
196
|
:axis, :uint8,
|
172
197
|
:padding1, :uint8,
|
@@ -175,11 +200,14 @@ module SDL2
|
|
175
200
|
:value, :int16,
|
176
201
|
:padding4, :uint16
|
177
202
|
]
|
203
|
+
member_readers *members
|
204
|
+
member_writers *members
|
178
205
|
end
|
179
206
|
|
180
207
|
# Joystick trackball motion event structure (event.jball.*)
|
181
|
-
class JoyBallEvent <
|
182
|
-
|
208
|
+
class JoyBallEvent < AbstractEvent
|
209
|
+
|
210
|
+
layout *SHARED + [
|
183
211
|
:which, :joystick_id,
|
184
212
|
:ball, :uint8,
|
185
213
|
:padding1, :uint8,
|
@@ -188,40 +216,52 @@ module SDL2
|
|
188
216
|
:xrel, :int16,
|
189
217
|
:yrel, :int16
|
190
218
|
]
|
219
|
+
member_readers *members
|
220
|
+
member_writers *members
|
191
221
|
end
|
192
222
|
|
193
223
|
# Joystick hat position change event structure (event.jhat.*)
|
194
|
-
class JoyHatEvent <
|
195
|
-
|
224
|
+
class JoyHatEvent < AbstractEvent
|
225
|
+
|
226
|
+
layout *SHARED + [
|
196
227
|
:which, :joystick_id,
|
197
228
|
:hat, :uint8,
|
198
229
|
:value, :uint8,
|
199
230
|
:padding1, :uint8,
|
200
231
|
:padding2, :uint8
|
201
232
|
]
|
233
|
+
member_readers *members
|
234
|
+
member_writers *members
|
202
235
|
end
|
203
236
|
|
204
237
|
# Joystick button event structure (event.jbutton.*)
|
205
|
-
class JoyButtonEvent <
|
206
|
-
|
238
|
+
class JoyButtonEvent < AbstractEvent
|
239
|
+
|
240
|
+
layout *SHARED + [
|
207
241
|
:which, :joystick_id,
|
208
242
|
:button, :uint8,
|
209
243
|
:state, :uint8,
|
210
244
|
:padding1, :uint8,
|
211
245
|
:padding2, :uint8
|
212
246
|
]
|
247
|
+
member_readers *members
|
248
|
+
member_writers *members
|
213
249
|
end
|
214
250
|
|
215
251
|
# Joystick device event structure (event.jdevice.*)
|
216
|
-
class JoyDeviceEvent <
|
217
|
-
|
252
|
+
class JoyDeviceEvent < AbstractEvent
|
253
|
+
|
254
|
+
layout *SHARED + [
|
218
255
|
:which, :joystick_id
|
219
256
|
]
|
257
|
+
member_readers *members
|
258
|
+
member_writers *members
|
220
259
|
end
|
221
260
|
|
222
261
|
# Game controller axis motion event structure (event.caxis.*)
|
223
|
-
class ControllerAxisEvent <
|
224
|
-
|
262
|
+
class ControllerAxisEvent < AbstractEvent
|
263
|
+
|
264
|
+
layout *SHARED + [
|
225
265
|
:which, :joystick_id,
|
226
266
|
:axis, :uint8,
|
227
267
|
:padding1, :uint8,
|
@@ -230,29 +270,38 @@ module SDL2
|
|
230
270
|
:value, :int16,
|
231
271
|
:padding4, :uint16
|
232
272
|
]
|
273
|
+
member_readers *members
|
274
|
+
member_writers *members
|
233
275
|
end
|
234
276
|
|
235
277
|
# Game controller button event structure (event.cbutton.*)
|
236
|
-
class ControllerButtonEvent <
|
237
|
-
|
278
|
+
class ControllerButtonEvent < AbstractEvent
|
279
|
+
|
280
|
+
layout *SHARED + [
|
238
281
|
:which, :joystick_id,
|
239
282
|
:button, :uint8,
|
240
283
|
:state, :uint8,
|
241
284
|
:padding1, :uint8,
|
242
285
|
:padding2, :uint8
|
243
286
|
]
|
287
|
+
member_readers *members
|
288
|
+
member_writers *members
|
244
289
|
end
|
245
290
|
|
246
291
|
# Controller device event structure (event.cdevice.*)
|
247
|
-
class ControllerDeviceEvent <
|
248
|
-
|
292
|
+
class ControllerDeviceEvent < AbstractEvent
|
293
|
+
|
294
|
+
layout *SHARED + [
|
249
295
|
:which, :joystick_id
|
250
296
|
]
|
297
|
+
member_readers *members
|
298
|
+
member_writers *members
|
251
299
|
end
|
252
300
|
|
253
301
|
# Touch finger event structure (event.tfinger.*)
|
254
|
-
class TouchFingerEvent <
|
255
|
-
|
302
|
+
class TouchFingerEvent < AbstractEvent
|
303
|
+
|
304
|
+
layout *SHARED + [
|
256
305
|
:touchId, :touch_id,
|
257
306
|
:fingerId, :finger_id,
|
258
307
|
:x, :float,
|
@@ -261,11 +310,14 @@ module SDL2
|
|
261
310
|
:dy, :float,
|
262
311
|
:pressure, :float
|
263
312
|
]
|
313
|
+
member_readers *members
|
314
|
+
member_writers *members
|
264
315
|
end
|
265
316
|
|
266
317
|
# Multiple Finger Gesture Event (event.mgesture.*)
|
267
|
-
class MultiGestureEvent <
|
268
|
-
|
318
|
+
class MultiGestureEvent < AbstractEvent
|
319
|
+
|
320
|
+
layout *SHARED + [
|
269
321
|
:touchId, :touch_id,
|
270
322
|
:dTheta, :float,
|
271
323
|
:dDist, :float,
|
@@ -274,11 +326,14 @@ module SDL2
|
|
274
326
|
:numFingers, :uint16,
|
275
327
|
:padding, :uint16
|
276
328
|
]
|
329
|
+
member_readers *members
|
330
|
+
member_writers *members
|
277
331
|
end
|
278
332
|
|
279
333
|
# Dollar Gesture Event (event.dgesture.*)
|
280
|
-
class DollarGestureEvent <
|
281
|
-
|
334
|
+
class DollarGestureEvent < AbstractEvent
|
335
|
+
|
336
|
+
layout *SHARED + [
|
282
337
|
:touchId, :touch_id,
|
283
338
|
:gestureId, :gesture_id,
|
284
339
|
:numFingers, :uint32,
|
@@ -286,6 +341,8 @@ module SDL2
|
|
286
341
|
:x, :float,
|
287
342
|
:y, :float
|
288
343
|
]
|
344
|
+
member_readers *members
|
345
|
+
member_writers *members
|
289
346
|
end
|
290
347
|
|
291
348
|
# @brief An event used to request a file open by the system (event.drop.*)
|
@@ -293,30 +350,41 @@ module SDL2
|
|
293
350
|
# SDL_EventState()
|
294
351
|
# @note If you enable this event, you must free the filename in the event.
|
295
352
|
#
|
296
|
-
class DropEvent <
|
297
|
-
|
353
|
+
class DropEvent < AbstractEvent
|
354
|
+
|
355
|
+
layout *SHARED + [
|
298
356
|
:file, :string
|
299
357
|
]
|
358
|
+
member_readers *members
|
359
|
+
member_writers *members
|
300
360
|
end
|
301
361
|
|
302
362
|
# The "quit requested" event
|
303
|
-
class QuitEvent <
|
304
|
-
|
363
|
+
class QuitEvent < AbstractEvent
|
364
|
+
|
365
|
+
layout *SHARED
|
366
|
+
member_readers *members
|
367
|
+
member_writers *members
|
305
368
|
end
|
306
369
|
|
307
370
|
# OS Specific event
|
308
|
-
class OSEvent <
|
309
|
-
|
371
|
+
class OSEvent < AbstractEvent
|
372
|
+
|
373
|
+
layout *SHARED
|
374
|
+
member_readers *members
|
375
|
+
member_writers *members
|
310
376
|
end
|
311
377
|
|
312
378
|
# A user-defined event type (event.user.*)
|
313
|
-
class UserEvent <
|
314
|
-
layout *
|
379
|
+
class UserEvent < AbstractEvent
|
380
|
+
layout *SHARED + [
|
315
381
|
:windowID, :uint32,
|
316
382
|
:code, :int32,
|
317
383
|
:data1, :pointer,
|
318
384
|
:data2, :pointer
|
319
385
|
]
|
386
|
+
member_readers *members
|
387
|
+
member_writers *members
|
320
388
|
end
|
321
389
|
|
322
390
|
# @brief A video driver dependent system event (event.syswm.*)
|
@@ -324,8 +392,8 @@ module SDL2
|
|
324
392
|
# SDL_EventState()
|
325
393
|
#
|
326
394
|
# @note If you want to use this event, you should include SDL_syswm.h.
|
327
|
-
class SysWMEvent <
|
328
|
-
layout *
|
395
|
+
class SysWMEvent < AbstractEvent
|
396
|
+
layout *SHARED + [
|
329
397
|
:msg, SDL2::SysWM::Msg.by_ref
|
330
398
|
]
|
331
399
|
end
|
@@ -333,8 +401,8 @@ module SDL2
|
|
333
401
|
# General event UNION (structure)
|
334
402
|
# Remember that this is a union, all other structures not related to #type are
|
335
403
|
# garbage
|
336
|
-
class Event <
|
337
|
-
layout :type, :
|
404
|
+
class Event < Union
|
405
|
+
layout :type, :event_type,
|
338
406
|
:common, CommonEvent,
|
339
407
|
:window, WindowEvent,
|
340
408
|
:key, KeyboardEvent,
|
@@ -357,13 +425,43 @@ module SDL2
|
|
357
425
|
:mgesture, MultiGestureEvent,
|
358
426
|
:drop, DropEvent,
|
359
427
|
:padding, [:uint8, 56] # From SDL_events.h:529
|
428
|
+
|
429
|
+
member_readers *members
|
430
|
+
member_writers *members
|
431
|
+
|
432
|
+
# Polls for currently pending events
|
433
|
+
# @returns SDL2::Event or nil if there are no events.
|
434
|
+
def self.poll()
|
435
|
+
tmp_event = SDL2::Event.new
|
436
|
+
unless SDL2.poll_event?(tmp_event)
|
437
|
+
tmp_event.pointer.free
|
438
|
+
tmp_event = nil
|
439
|
+
end
|
440
|
+
return tmp_event # May be nil if SDL2.poll_event fails.
|
441
|
+
end
|
442
|
+
|
443
|
+
def self.cast(something)
|
444
|
+
if something.kind_of? AbstractEvent
|
445
|
+
return self.new(something.pointer)
|
446
|
+
else
|
447
|
+
raise "Is not an AbstractEvent!: #{something.inspect}"
|
448
|
+
end
|
449
|
+
end
|
450
|
+
|
451
|
+
# Converts SDL's type integer into a EVENTTYPE symbol
|
452
|
+
# Returns :UNKOWN on failure.
|
453
|
+
def type_symbol
|
454
|
+
sym = EVENTTYPE.by_value[self.type]
|
455
|
+
sym.nil? ? :UNKOWN : sym
|
456
|
+
end
|
457
|
+
|
360
458
|
end
|
361
459
|
|
362
460
|
module EVENTACTION
|
363
461
|
include EnumerableConstants
|
364
|
-
ADD
|
365
|
-
PEEK
|
366
|
-
GET
|
462
|
+
ADD
|
463
|
+
PEEK
|
464
|
+
GET
|
367
465
|
end
|
368
466
|
|
369
467
|
enum :eventaction, EVENTACTION.flatten_consts
|
@@ -376,9 +474,10 @@ module SDL2
|
|
376
474
|
api :SDL_FlushEvent, [:uint32], :void
|
377
475
|
api :SDL_FlushEvents, [:uint32, :uint32], :void
|
378
476
|
api :SDL_PollEvent, [Event.by_ref], :int
|
477
|
+
boolean? :poll_event, TRUE_WHEN_ONE
|
379
478
|
api :SDL_WaitEvent, [Event.by_ref], :int
|
380
479
|
api :SDL_WaitEventTimeout, [Event.by_ref, :count], :int
|
381
|
-
api :SDL_PushEvent, [Event.by_ref, :
|
480
|
+
api :SDL_PushEvent, [Event.by_ref], :int, {error: true, filter: TRUE_WHEN_ONE}
|
382
481
|
|
383
482
|
##
|
384
483
|
# callback event_filter #=> Proc.new do |pointer, event|; return int; end
|
@@ -403,11 +502,11 @@ module SDL2
|
|
403
502
|
DISABLE = 0
|
404
503
|
ENABLE = 1
|
405
504
|
end
|
406
|
-
|
505
|
+
|
407
506
|
enum :event_state, EVENTSTATE.flatten_consts
|
408
507
|
|
409
508
|
##
|
410
|
-
#
|
509
|
+
#
|
411
510
|
api :SDL_EventState, [:uint32, :event_state], :uint8
|
412
511
|
|
413
512
|
def get_event_state(type)
|