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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/Gemfile +0 -6
- data/Guardfile +0 -45
- data/README.md +11 -21
- data/lib/bad_sdl.rb +4 -0
- data/lib/{sdl2 → bad_sdl}/application.rb +47 -35
- data/lib/{sdl2 → bad_sdl}/engine.rb +20 -3
- data/lib/{sdl2 → bad_sdl}/engine/block_engine.rb +2 -2
- data/lib/bad_sdl/engine/engines.rb +51 -0
- data/lib/enumerable_constants.rb +4 -2
- data/lib/sdl2.rb +26 -247
- data/lib/sdl2/blendmode.rb +18 -0
- data/lib/sdl2/color.rb +1 -3
- data/lib/sdl2/debug.rb +58 -0
- data/lib/sdl2/display.rb +30 -23
- data/lib/sdl2/error.rb +6 -4
- data/lib/sdl2/event.rb +229 -0
- data/lib/sdl2/event/abstract.rb +11 -0
- data/lib/sdl2/event/action.rb +19 -0
- data/lib/sdl2/event/common.rb +10 -0
- data/lib/sdl2/event/controller_axis.rb +20 -0
- data/lib/sdl2/event/controller_button.rb +17 -0
- data/lib/sdl2/event/controller_device.rb +14 -0
- data/lib/sdl2/event/dollar_gesture.rb +19 -0
- data/lib/sdl2/event/drop.rb +18 -0
- data/lib/sdl2/event/joy_axis.rb +20 -0
- data/lib/sdl2/event/joy_ball.rb +20 -0
- data/lib/sdl2/event/joy_button.rb +18 -0
- data/lib/sdl2/event/joy_device.rb +14 -0
- data/lib/sdl2/event/joy_hat.rb +18 -0
- data/lib/sdl2/event/keyboard.rb +18 -0
- data/lib/sdl2/event/mouse_button.rb +21 -0
- data/lib/sdl2/event/mouse_motion.rb +19 -0
- data/lib/sdl2/event/mouse_wheel.rb +17 -0
- data/lib/sdl2/event/multi_gesture.rb +20 -0
- data/lib/sdl2/event/os.rb +12 -0
- data/lib/sdl2/event/quit.rb +12 -0
- data/lib/sdl2/event/state.rb +13 -0
- data/lib/sdl2/event/sys_wm.rb +15 -0
- data/lib/sdl2/event/text_editing.rb +17 -0
- data/lib/sdl2/event/text_input.rb +15 -0
- data/lib/sdl2/event/touch_finger.rb +20 -0
- data/lib/sdl2/event/type.rb +62 -0
- data/lib/sdl2/event/user.rb +15 -0
- data/lib/sdl2/event/window.rb +19 -0
- data/lib/sdl2/events.rb +23 -538
- data/lib/sdl2/gem_version.rb +1 -1
- data/lib/sdl2/haptic.rb +3 -3
- data/lib/sdl2/hints.rb +3 -1
- data/lib/sdl2/image.rb +20 -20
- data/lib/sdl2/init.rb +5 -8
- data/lib/sdl2/joystick.rb +104 -78
- data/lib/sdl2/joystick/axes.rb +22 -0
- data/lib/sdl2/joystick/balls.rb +24 -0
- data/lib/sdl2/joystick/buttons.rb +22 -0
- data/lib/sdl2/joystick/components.rb +23 -0
- data/lib/sdl2/joystick/hats.rb +22 -0
- data/lib/sdl2/keyboard.rb +11 -10
- data/lib/sdl2/keycode.rb +70 -70
- data/lib/sdl2/library.rb +8 -7
- data/lib/sdl2/log.rb +6 -0
- data/lib/sdl2/managed_struct.rb +17 -0
- data/lib/sdl2/mixer.rb +16 -12
- data/lib/sdl2/mixer/chunk.rb +14 -3
- data/lib/sdl2/mouse.rb +21 -41
- data/lib/sdl2/pixel_format.rb +4 -4
- data/lib/sdl2/pixels.rb +59 -47
- data/lib/sdl2/power.rb +1 -1
- data/lib/sdl2/rect.rb +4 -5
- data/lib/sdl2/render.rb +85 -170
- data/lib/sdl2/renderer.rb +337 -20
- data/lib/sdl2/rwops.rb +89 -30
- data/lib/sdl2/stdinc.rb +18 -21
- data/lib/sdl2/struct.rb +184 -0
- data/lib/sdl2/struct_helper.rb +32 -0
- data/lib/sdl2/surface.rb +15 -14
- data/lib/sdl2/syswm.rb +26 -10
- data/lib/sdl2/syswm/msg.rb +22 -4
- data/lib/sdl2/texture.rb +106 -0
- data/lib/sdl2/touch.rb +16 -20
- data/lib/sdl2/ttf.rb +29 -29
- data/lib/sdl2/ttf/sdl_ttf_module.rb +1 -1
- data/lib/sdl2/typed_pointer.rb +45 -0
- data/lib/sdl2/union.rb +7 -0
- data/lib/sdl2/video.rb +97 -183
- data/lib/sdl2/window.rb +140 -90
- data/lib/struct_array.rb +42 -0
- data/sdl2_ffi.gemspec +3 -3
- data/spec/fixtures/approvals/lazyfoonet_lesson_03_advanced_timers/has_a_message.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_14_advanced_timers/has_a_message.approved.png +0 -0
- data/spec/fixtures/approvals/lazyfoonet_lesson_14_advanced_timers/has_drawn_something.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_clear.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_a_line_connecting_many_points.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_a_point.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_a_single_filled_rectangle.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_a_single_pixel_line.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_a_single_rectangle.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_many_filled_rectangles.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_many_rectangles_at_once.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_points.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_render_textures.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_rotate_and_flip_while_rendering_textures.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_have_a_clip_rect.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_clear.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_a_line_connecting_many_points.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_a_point.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_a_single_filled_rectangle.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_a_single_pixel_line.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_a_single_rectangle.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_many_filled_rectangles.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_many_rectangles_at_once.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_points.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_render_textures.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_rotate_and_flip_while_rendering_textures.approved.png +0 -0
- data/spec/fixtures/approvals/sdl2_renderer/should_have_a_clip_rect.approved.png +0 -0
- data/spec/fixtures/images/finger.png +0 -0
- data/spec/fixtures/music/beat.wav +0 -0
- data/spec/fixtures/sounds/high.wav +0 -0
- data/spec/fixtures/sounds/low.wav +0 -0
- data/spec/fixtures/sounds/medium.wav +0 -0
- data/spec/fixtures/sounds/scratch.wav +0 -0
- data/spec/functional/lazy_foo_tutorial/lazy_foo_01_hello_world_spec.rb +4 -6
- data/spec/functional/lazy_foo_tutorial/lazy_foo_02_optimized_images_spec.rb +3 -4
- data/spec/functional/lazy_foo_tutorial/lazy_foo_03_extension_libraries_spec.rb +2 -2
- data/spec/functional/lazy_foo_tutorial/lazy_foo_04_event_driven_programming_spec.rb +3 -3
- data/spec/functional/lazy_foo_tutorial/lazy_foo_05_color_keying_spec.rb +1 -1
- data/spec/functional/lazy_foo_tutorial/lazy_foo_06_clip_blitting_and_sprite_sheets_spec.rb +1 -1
- data/spec/functional/lazy_foo_tutorial/lazy_foo_07_true_type_fonts_spec.rb +3 -2
- data/spec/functional/lazy_foo_tutorial/lazy_foo_08_key_presses_spec.rb +9 -7
- data/spec/functional/lazy_foo_tutorial/lazy_foo_09_mouse_events_spec.rb +11 -8
- data/spec/functional/lazy_foo_tutorial/lazy_foo_10_key_states_spec.rb +5 -4
- data/spec/functional/lazy_foo_tutorial/lazy_foo_11_playing_sounds_spec.rb +17 -9
- data/spec/functional/lazy_foo_tutorial/lazy_foo_12_timing_spec.rb +8 -7
- data/spec/functional/lazy_foo_tutorial/lazy_foo_13_advanced_timers_spec.rb +85 -0
- data/spec/functional/lazy_foo_tutorial/lazy_foo_14_regulating_frame_rate_spec.rb +67 -0
- data/spec/functional/lazy_foo_tutorial/lazy_foo_15_calculating_frame_rate_spec.rb +48 -0
- data/spec/functional/lazy_foo_tutorial/lazy_foo_16_motion_spec.rb +95 -0
- data/spec/functional/lazy_foo_tutorial/lazy_foo_helper.rb +3 -1
- data/spec/functional/lazy_foo_tutorial/timer.rb +55 -0
- data/spec/lib/bad_sdl/application_spec.rb +22 -0
- data/spec/{unit → lib}/sdl2/color_spec.rb +5 -1
- data/spec/lib/sdl2/display_spec.rb +6 -0
- data/spec/lib/sdl2/event_spec.rb +102 -0
- data/spec/lib/sdl2/events_spec.rb +12 -0
- data/spec/lib/sdl2/joystick_spec.rb +130 -0
- data/spec/lib/sdl2/keyboard_spec.rb +22 -0
- data/spec/lib/sdl2/mouse_spec.rb +21 -0
- data/spec/lib/sdl2/render_spec.rb +62 -0
- data/spec/lib/sdl2/renderer_spec.rb +224 -0
- data/spec/lib/sdl2/sdl2_helper.rb +5 -0
- data/spec/lib/sdl2/texture_spec.rb +65 -0
- data/{test/unit/sdl2/test_video.rb → spec/lib/sdl2/video_spec.rb} +82 -57
- data/spec/lib/sdl2/window_spec.rb +42 -0
- data/spec/{unit → lib}/unit_helper.rb +0 -0
- data/spec/png_writer.rb +9 -1
- data/spec/spec_helper.rb +5 -3
- metadata +201 -132
- data/lib/sdl2/engine/engines.rb +0 -46
- 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/an_example.png +0 -0
- data/test/fixtures/background.bmp +0 -0
- data/test/fixtures/background.jpg +0 -0
- data/test/fixtures/color_bars.jpg +0 -0
- data/test/fixtures/foo.jpg +0 -0
- data/test/fixtures/hello.bmp +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 +0 -50
- data/test/functional/examples/lazyfoo.net_s/test_color_keying.rb +0 -42
- data/test/functional/examples/test_lazy_foo_examples.rb +0 -195
- data/test/functional/examples/test_readme_examples.rb +0 -15
- data/test/test_helper.rb +0 -13
- data/test/unit/sdl2/test_assert.rb +0 -10
- data/test/unit/sdl2/test_audio.rb +0 -9
- data/test/unit/sdl2/test_clipboard.rb +0 -13
- data/test/unit/sdl2/test_cpuinfo.rb +0 -11
- data/test/unit/sdl2/test_error.rb +0 -20
- data/test/unit/sdl2/test_events.rb +0 -31
- data/test/unit/sdl2/test_haptic.rb +0 -27
- data/test/unit/sdl2/test_hints.rb +0 -50
- data/test/unit/sdl2/test_image.rb +0 -9
- data/test/unit/sdl2/test_init.rb +0 -29
- data/test/unit/sdl2/test_keyboard.rb +0 -9
- data/test/unit/sdl2/test_log.rb +0 -80
- data/test/unit/sdl2/test_palette.rb +0 -26
- data/test/unit/sdl2/test_pixel_format.rb +0 -38
- data/test/unit/sdl2/test_pixels.rb +0 -24
- data/test/unit/sdl2/test_power.rb +0 -11
- data/test/unit/sdl2/test_rect.rb +0 -19
- data/test/unit/sdl2/test_render.rb +0 -58
- data/test/unit/sdl2/test_surface.rb +0 -88
- data/test/unit/sdl2/test_syswm.rb +0 -11
- data/test/unit/sdl2/test_timer.rb +0 -9
- data/test/unit/sdl2/test_ttf.rb +0 -11
- data/test/unit/sdl2/test_version.rb +0 -16
- data/test/unit/sdl2/test_window.rb +0 -155
- data/test/unit/test_scratch.rb +0 -19
- 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
|
data/lib/sdl2/events.rb
CHANGED
@@ -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
|
-
|
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,
|
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
|