ruby-sdl-ffi 0.1
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.
- data/ChangeLog.txt +2122 -0
- data/README.rdoc +90 -0
- data/lib/ruby-sdl-ffi.rb +56 -0
- data/lib/ruby-sdl-ffi/gfx.rb +56 -0
- data/lib/ruby-sdl-ffi/gfx/blitfunc.rb +56 -0
- data/lib/ruby-sdl-ffi/gfx/framerate.rb +51 -0
- data/lib/ruby-sdl-ffi/gfx/imagefilter.rb +176 -0
- data/lib/ruby-sdl-ffi/gfx/primitives.rb +253 -0
- data/lib/ruby-sdl-ffi/gfx/rotozoom.rb +109 -0
- data/lib/ruby-sdl-ffi/image.rb +90 -0
- data/lib/ruby-sdl-ffi/mixer.rb +215 -0
- data/lib/ruby-sdl-ffi/sdl.rb +76 -0
- data/lib/ruby-sdl-ffi/sdl/audio.rb +132 -0
- data/lib/ruby-sdl-ffi/sdl/cdrom.rb +87 -0
- data/lib/ruby-sdl-ffi/sdl/core.rb +129 -0
- data/lib/ruby-sdl-ffi/sdl/event.rb +375 -0
- data/lib/ruby-sdl-ffi/sdl/joystick.rb +73 -0
- data/lib/ruby-sdl-ffi/sdl/keyboard.rb +66 -0
- data/lib/ruby-sdl-ffi/sdl/keysyms.rb +282 -0
- data/lib/ruby-sdl-ffi/sdl/mouse.rb +106 -0
- data/lib/ruby-sdl-ffi/sdl/mutex.rb +57 -0
- data/lib/ruby-sdl-ffi/sdl/rwops.rb +137 -0
- data/lib/ruby-sdl-ffi/sdl/timer.rb +47 -0
- data/lib/ruby-sdl-ffi/sdl/video.rb +447 -0
- data/lib/ruby-sdl-ffi/ttf.rb +257 -0
- metadata +97 -0
@@ -0,0 +1,129 @@
|
|
1
|
+
#--
|
2
|
+
#
|
3
|
+
# This file is one part of:
|
4
|
+
#
|
5
|
+
# Ruby-SDL-FFI - Ruby-FFI bindings to SDL
|
6
|
+
#
|
7
|
+
# Copyright (c) 2009 John Croisant
|
8
|
+
#
|
9
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
10
|
+
# a copy of this software and associated documentation files (the
|
11
|
+
# "Software"), to deal in the Software without restriction, including
|
12
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
13
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
14
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
15
|
+
# the following conditions:
|
16
|
+
#
|
17
|
+
# The above copyright notice and this permission notice shall be
|
18
|
+
# included in all copies or substantial portions of the Software.
|
19
|
+
#
|
20
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
21
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
22
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
23
|
+
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
24
|
+
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
25
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
26
|
+
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
27
|
+
#
|
28
|
+
#++
|
29
|
+
|
30
|
+
|
31
|
+
module SDL
|
32
|
+
|
33
|
+
# Aliases for integer-like types
|
34
|
+
ENUM = :int # :nodoc:
|
35
|
+
BOOL = :int # :nodoc:
|
36
|
+
GLATTR = :int # :nodoc:
|
37
|
+
|
38
|
+
|
39
|
+
LIL_ENDIAN = 1234
|
40
|
+
BIG_ENDIAN = 4321
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
# SDL.h
|
45
|
+
|
46
|
+
class Version < NiceFFI::Struct
|
47
|
+
layout( :major, :uint8,
|
48
|
+
:minor, :uint8,
|
49
|
+
:patch, :uint8 )
|
50
|
+
end
|
51
|
+
|
52
|
+
sdl_func :Linked_Version, [], Version.typed_pointer
|
53
|
+
|
54
|
+
|
55
|
+
INIT_TIMER = 0x00000001
|
56
|
+
INIT_AUDIO = 0x00000010
|
57
|
+
INIT_VIDEO = 0x00000020
|
58
|
+
INIT_CDROM = 0x00000100
|
59
|
+
INIT_JOYSTICK = 0x00000200
|
60
|
+
INIT_NOPARACHUTE = 0x00100000
|
61
|
+
INIT_EVENTTHREAD = 0x01000000
|
62
|
+
INIT_EVERYTHING = 0x0000FFFF
|
63
|
+
|
64
|
+
sdl_func :Init, [ :uint32 ], :int
|
65
|
+
sdl_func :InitSubSystem, [ :uint32 ], :int
|
66
|
+
sdl_func :QuitSubSystem, [ :uint32 ], :void
|
67
|
+
sdl_func :WasInit, [ :uint32 ], :uint32
|
68
|
+
sdl_func :Quit, [ ], :void
|
69
|
+
|
70
|
+
|
71
|
+
|
72
|
+
# SDL_active.h
|
73
|
+
|
74
|
+
APPMOUSEFOCUS = 0x01
|
75
|
+
APPINPUTFOCUS = 0x02
|
76
|
+
APPACTIVE = 0x04
|
77
|
+
|
78
|
+
sdl_func :GetAppState, [ ], :uint8
|
79
|
+
|
80
|
+
|
81
|
+
|
82
|
+
# SDL_cpuinfo.h
|
83
|
+
|
84
|
+
sdl_func :HasRDTSC, [ ], SDL::BOOL
|
85
|
+
sdl_func :HasMMX, [ ], SDL::BOOL
|
86
|
+
sdl_func :HasMMXExt, [ ], SDL::BOOL
|
87
|
+
sdl_func :Has3DNow, [ ], SDL::BOOL
|
88
|
+
sdl_func :Has3DNowExt, [ ], SDL::BOOL
|
89
|
+
sdl_func :HasSSE, [ ], SDL::BOOL
|
90
|
+
sdl_func :HasSSE2, [ ], SDL::BOOL
|
91
|
+
sdl_func :HasAltiVec, [ ], SDL::BOOL
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
# SDL_error.h
|
96
|
+
|
97
|
+
sdl_func :SetError, [ :string, :varargs ], :void
|
98
|
+
sdl_func :GetError, [ ], :string
|
99
|
+
sdl_func :ClearError, [ ], :void
|
100
|
+
|
101
|
+
ENOMEM = 0
|
102
|
+
EFREAD = 1
|
103
|
+
EFWRITE = 2
|
104
|
+
EFSEEK = 3
|
105
|
+
UNSUPPORTED = 4
|
106
|
+
LASTERROR = 5
|
107
|
+
|
108
|
+
sdl_func :Error, [ SDL::ENUM ], :void
|
109
|
+
|
110
|
+
|
111
|
+
|
112
|
+
# SDL_loadso.h
|
113
|
+
|
114
|
+
sdl_func :LoadObject, [ :string ], :pointer
|
115
|
+
sdl_func :LoadFunction, [ :pointer, :string ], :pointer
|
116
|
+
sdl_func :UnloadObject, [ :pointer ], :void
|
117
|
+
|
118
|
+
|
119
|
+
|
120
|
+
# SDL_thread.h
|
121
|
+
|
122
|
+
sdl_func :CreateThread, [ callback([:pointer], :int), :pointer ], :pointer
|
123
|
+
|
124
|
+
sdl_func :ThreadID, [ ], :uint32
|
125
|
+
sdl_func :GetThreadID, [ :pointer ], :uint32
|
126
|
+
sdl_func :WaitThread, [ :pointer, :pointer ], :void
|
127
|
+
sdl_func :KillThread, [ :pointer ], :void
|
128
|
+
|
129
|
+
end
|
@@ -0,0 +1,375 @@
|
|
1
|
+
#--
|
2
|
+
#
|
3
|
+
# This file is one part of:
|
4
|
+
#
|
5
|
+
# Ruby-SDL-FFI - Ruby-FFI bindings to SDL
|
6
|
+
#
|
7
|
+
# Copyright (c) 2009 John Croisant
|
8
|
+
#
|
9
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
10
|
+
# a copy of this software and associated documentation files (the
|
11
|
+
# "Software"), to deal in the Software without restriction, including
|
12
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
13
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
14
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
15
|
+
# the following conditions:
|
16
|
+
#
|
17
|
+
# The above copyright notice and this permission notice shall be
|
18
|
+
# included in all copies or substantial portions of the Software.
|
19
|
+
#
|
20
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
21
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
22
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
23
|
+
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
24
|
+
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
25
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
26
|
+
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
27
|
+
#
|
28
|
+
#++
|
29
|
+
|
30
|
+
|
31
|
+
module SDL
|
32
|
+
|
33
|
+
RELEASED = 0
|
34
|
+
PRESSED = 1
|
35
|
+
|
36
|
+
NOEVENT = 0
|
37
|
+
ACTIVEEVENT = 1
|
38
|
+
KEYDOWN = 2
|
39
|
+
KEYUP = 3
|
40
|
+
MOUSEMOTION = 4
|
41
|
+
MOUSEBUTTONDOWN = 5
|
42
|
+
MOUSEBUTTONUP = 6
|
43
|
+
JOYAXISMOTION = 7
|
44
|
+
JOYBALLMOTION = 8
|
45
|
+
JOYHATMOTION = 9
|
46
|
+
JOYBUTTONDOWN = 10
|
47
|
+
JOYBUTTONUP = 11
|
48
|
+
QUIT = 12
|
49
|
+
SYSWMEVENT = 13
|
50
|
+
EVENT_RESERVEDA = 14
|
51
|
+
EVENT_RESERVEDB = 15
|
52
|
+
VIDEORESIZE = 16
|
53
|
+
VIDEOEXPOSE = 17
|
54
|
+
EVENT_RESERVED2 = 18
|
55
|
+
EVENT_RESERVED3 = 19
|
56
|
+
EVENT_RESERVED4 = 20
|
57
|
+
EVENT_RESERVED5 = 21
|
58
|
+
EVENT_RESERVED6 = 22
|
59
|
+
EVENT_RESERVED7 = 23
|
60
|
+
USEREVENT = 24
|
61
|
+
NUMEVENTS = 32
|
62
|
+
|
63
|
+
|
64
|
+
ACTIVEEVENTMASK = (1 << (ACTIVEEVENT))
|
65
|
+
JOYAXISMOTIONMASK = (1 << (JOYAXISMOTION))
|
66
|
+
JOYEVENTMASK = (1 << (JOYAXISMOTION)) | \
|
67
|
+
(1 << (JOYBALLMOTION)) | \
|
68
|
+
(1 << (JOYHATMOTION)) | \
|
69
|
+
(1 << (JOYBUTTONDOWN)) | \
|
70
|
+
(1 << (JOYBUTTONUP))
|
71
|
+
JOYBALLMOTIONMASK = (1 << (JOYBALLMOTION))
|
72
|
+
JOYBUTTONDOWNMASK = (1 << (JOYBUTTONDOWN))
|
73
|
+
JOYBUTTONUPMASK = (1 << (JOYBUTTONUP))
|
74
|
+
JOYHATMOTIONMASK = (1 << (JOYHATMOTION))
|
75
|
+
KEYDOWNMASK = (1 << (KEYDOWN))
|
76
|
+
KEYEVENTMASK = (1 << (KEYDOWN))|(1 << (KEYUP))
|
77
|
+
KEYUPMASK = (1 << (KEYUP))
|
78
|
+
MOUSEBUTTONDOWNMASK = (1 << (MOUSEBUTTONDOWN))
|
79
|
+
MOUSEBUTTONUPMASK = (1 << (MOUSEBUTTONUP))
|
80
|
+
MOUSEMOTIONMASK = (1 << (MOUSEMOTION))
|
81
|
+
MOUSEEVENTMASK = (1 << (MOUSEMOTION)) | \
|
82
|
+
(1 << (MOUSEBUTTONDOWN)) | \
|
83
|
+
(1 << (MOUSEBUTTONUP))
|
84
|
+
QUITMASK = (1 << (QUIT))
|
85
|
+
SYSWMEVENTMASK = (1 << (SYSWMEVENT))
|
86
|
+
VIDEOEXPOSEMASK = (1 << (VIDEOEXPOSE))
|
87
|
+
VIDEORESIZEMASK = (1 << (VIDEORESIZE))
|
88
|
+
ALLEVENTS = 0xFFFFFFFF
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
class ActiveEvent < NiceFFI::Struct
|
93
|
+
layout( :type, :uint8,
|
94
|
+
:gain, :uint8,
|
95
|
+
:state, :uint8 )
|
96
|
+
end
|
97
|
+
|
98
|
+
|
99
|
+
class KeyboardEvent < NiceFFI::Struct
|
100
|
+
layout( :type, :uint8,
|
101
|
+
:which, :uint8,
|
102
|
+
:state, :uint8,
|
103
|
+
:keysym, SDL::Keysym )
|
104
|
+
end
|
105
|
+
|
106
|
+
|
107
|
+
class MouseMotionEvent < NiceFFI::Struct
|
108
|
+
layout( :type, :uint8,
|
109
|
+
:which, :uint8,
|
110
|
+
:state, :uint8,
|
111
|
+
:x, :uint16,
|
112
|
+
:y, :uint16,
|
113
|
+
:xrel, :int16,
|
114
|
+
:yrel, :int16 )
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
class MouseButtonEvent < NiceFFI::Struct
|
119
|
+
layout( :type, :uint8,
|
120
|
+
:which, :uint8,
|
121
|
+
:button, :uint8,
|
122
|
+
:state, :uint8,
|
123
|
+
:x, :uint16,
|
124
|
+
:y, :uint16 )
|
125
|
+
end
|
126
|
+
|
127
|
+
|
128
|
+
class JoyAxisEvent < NiceFFI::Struct
|
129
|
+
layout( :type, :uint8,
|
130
|
+
:which, :uint8,
|
131
|
+
:axis, :uint8,
|
132
|
+
:value, :int16 )
|
133
|
+
end
|
134
|
+
|
135
|
+
|
136
|
+
class JoyBallEvent < NiceFFI::Struct
|
137
|
+
layout( :type, :uint8,
|
138
|
+
:which, :uint8,
|
139
|
+
:ball, :uint8,
|
140
|
+
:xrel, :int16,
|
141
|
+
:yrel, :int16 )
|
142
|
+
end
|
143
|
+
|
144
|
+
|
145
|
+
class JoyHatEvent < NiceFFI::Struct
|
146
|
+
layout( :type, :uint8,
|
147
|
+
:which, :uint8,
|
148
|
+
:hat, :uint8,
|
149
|
+
:value, :uint8 )
|
150
|
+
end
|
151
|
+
|
152
|
+
|
153
|
+
class JoyButtonEvent < NiceFFI::Struct
|
154
|
+
layout( :type, :uint8,
|
155
|
+
:which, :uint8,
|
156
|
+
:button, :uint8,
|
157
|
+
:state, :uint8 )
|
158
|
+
end
|
159
|
+
|
160
|
+
|
161
|
+
class ResizeEvent < NiceFFI::Struct
|
162
|
+
layout( :type, :uint8,
|
163
|
+
:w, :int,
|
164
|
+
:h, :int )
|
165
|
+
end
|
166
|
+
|
167
|
+
|
168
|
+
class ExposeEvent < NiceFFI::Struct
|
169
|
+
layout( :type, :uint8 )
|
170
|
+
end
|
171
|
+
|
172
|
+
|
173
|
+
class QuitEvent < NiceFFI::Struct
|
174
|
+
layout( :type, :uint8 )
|
175
|
+
end
|
176
|
+
|
177
|
+
|
178
|
+
class UserEvent < NiceFFI::Struct
|
179
|
+
layout( :type, :uint8,
|
180
|
+
:code, :int,
|
181
|
+
:data1, :pointer,
|
182
|
+
:data2, :pointer )
|
183
|
+
end
|
184
|
+
|
185
|
+
|
186
|
+
class SysWMEvent < NiceFFI::Struct
|
187
|
+
layout( :type, :uint8,
|
188
|
+
:msg, :pointer )
|
189
|
+
end
|
190
|
+
|
191
|
+
|
192
|
+
class Event < FFI::Union
|
193
|
+
layout( :type, :uint8,
|
194
|
+
:active, SDL::ActiveEvent,
|
195
|
+
:key, SDL::KeyboardEvent,
|
196
|
+
:motion, SDL::MouseMotionEvent,
|
197
|
+
:button, SDL::MouseButtonEvent,
|
198
|
+
:jaxis, SDL::JoyAxisEvent,
|
199
|
+
:jball, SDL::JoyBallEvent,
|
200
|
+
:jhat, SDL::JoyHatEvent,
|
201
|
+
:jbutton, SDL::JoyButtonEvent,
|
202
|
+
:resize, SDL::ResizeEvent,
|
203
|
+
:expose, SDL::ExposeEvent,
|
204
|
+
:quit, SDL::QuitEvent,
|
205
|
+
:user, SDL::UserEvent,
|
206
|
+
:syswm, SDL::SysWMEvent )
|
207
|
+
|
208
|
+
|
209
|
+
# Creates a generic Event containing a specific event.
|
210
|
+
# You usually don't need to do this, because you can pass
|
211
|
+
# specific events directly to SDL::SDL_PushEvent.
|
212
|
+
#
|
213
|
+
def self.wrap( event )
|
214
|
+
self.new( event.pointer )
|
215
|
+
end
|
216
|
+
|
217
|
+
|
218
|
+
# Extracts a specific event class from a generic Event.
|
219
|
+
def unwrap
|
220
|
+
case self[:type]
|
221
|
+
when ACTIVEEVENT; ActiveEvent.new(self.pointer)
|
222
|
+
when KEYDOWN, KEYUP; KeyboardEvent.new(self.pointer)
|
223
|
+
when MOUSEMOTION; MouseMotionEvent.new(self.pointer)
|
224
|
+
|
225
|
+
when MOUSEBUTTONDOWN, MOUSEBUTTONUP;
|
226
|
+
MouseButtonEvent.new(self.pointer)
|
227
|
+
|
228
|
+
when JOYAXISMOTION; JoyAxisEvent.new(self.pointer)
|
229
|
+
when JOYBALLMOTION; JoyBallEvent.new(self.pointer)
|
230
|
+
when JOYHATMOTION; JoyHatEvent.new(self.pointer)
|
231
|
+
|
232
|
+
when JOYBUTTONDOWN, JOYBUTTONUP;
|
233
|
+
JoyButtonEvent.new(self.pointer)
|
234
|
+
|
235
|
+
when QUIT; QuitEvent.new( self.pointer )
|
236
|
+
when SYSWMEVENT; SysWMEvent.new( self.pointer )
|
237
|
+
when VIDEORESIZE; ResizeEvent.new( self.pointer )
|
238
|
+
when VIDEOEXPOSE; ExposeEvent.new( self.pointer )
|
239
|
+
when USEREVENT; UserEvent.new( self.pointer )
|
240
|
+
|
241
|
+
else; raise TypeError, "Invalid event #{self.inspect}"
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
def inspect
|
246
|
+
super.gsub(">", " :type=#{self[:type]}>")
|
247
|
+
end
|
248
|
+
|
249
|
+
end
|
250
|
+
|
251
|
+
|
252
|
+
sdl_func :PumpEvents, [ ], :void
|
253
|
+
|
254
|
+
|
255
|
+
ADDEVENT = 0
|
256
|
+
PEEKEVENT = 1
|
257
|
+
GETEVENT = 2
|
258
|
+
|
259
|
+
func :__SDL_PeepEvents, "SDL_PeepEvents",
|
260
|
+
[ :pointer, :int, SDL::ENUM, :uint32 ], :int
|
261
|
+
|
262
|
+
|
263
|
+
# Behavior varies depending on action.
|
264
|
+
#
|
265
|
+
# PEEKEVENT or GETEVENT:
|
266
|
+
# events is the max number of events to retrieve.
|
267
|
+
# Returns an array of Events, or nil if there was an error.
|
268
|
+
# GETEVENT removes them from the queue, PEEKEVENT leaves them.
|
269
|
+
#
|
270
|
+
# ADDEVENT:
|
271
|
+
# events is an array of Events (or specific event instances)
|
272
|
+
# to append to the queue.
|
273
|
+
# Returns the number of events added, or -1 if there was an error.
|
274
|
+
#
|
275
|
+
def self.PeepEvents( events, action, mask )
|
276
|
+
# PeepEvents is very versatile, so we break it up into
|
277
|
+
# different actions...
|
278
|
+
|
279
|
+
case action
|
280
|
+
|
281
|
+
# Append the given events to the queue, return number added.
|
282
|
+
when ADDEVENT
|
283
|
+
numevents = events.size
|
284
|
+
mp = FFI::Buffer.new( SDL::Event, numevents )
|
285
|
+
|
286
|
+
# Dump the events into the Buffer as raw, hardcore bytes
|
287
|
+
events.each_with_index do |ev, i|
|
288
|
+
mp[i].put_bytes( 0, ev.pointer.get_bytes(0, ev.size) )
|
289
|
+
end
|
290
|
+
|
291
|
+
return __SDL_PeepEvents( mp, numevents, action, mask )
|
292
|
+
|
293
|
+
# Peek or Get the first N events and return them in an array.
|
294
|
+
# Peek does not remove them from the queue, but Get does.
|
295
|
+
when PEEKEVENT, GETEVENT
|
296
|
+
numevents = events.to_i
|
297
|
+
mp = FFI::Buffer.new( SDL::Event, numevents )
|
298
|
+
n = __SDL_PeepEvents( mp, numevents, action, mask )
|
299
|
+
|
300
|
+
# Something went wrong
|
301
|
+
return nil if( n == -1 )
|
302
|
+
|
303
|
+
events = []
|
304
|
+
n.times do |i|
|
305
|
+
events << Event.new( mp[i] ).unwrap
|
306
|
+
end
|
307
|
+
|
308
|
+
return events
|
309
|
+
end
|
310
|
+
end
|
311
|
+
|
312
|
+
|
313
|
+
func :__SDL_PollEvent, "SDL_PollEvent", [ :pointer ], :int
|
314
|
+
|
315
|
+
def self.PollEvent()
|
316
|
+
mp = FFI::MemoryPointer.new( SDL::Event, 1 )
|
317
|
+
n = __SDL_PollEvent( mp )
|
318
|
+
if n == 0
|
319
|
+
nil
|
320
|
+
else
|
321
|
+
Event.new(mp).unwrap
|
322
|
+
end
|
323
|
+
end
|
324
|
+
|
325
|
+
|
326
|
+
func :__SDL_WaitEvent, "SDL_WaitEvent", [ :pointer ], :int
|
327
|
+
|
328
|
+
def self.WaitEvent()
|
329
|
+
mp = FFI::MemoryPointer.new( SDL::Event, 1 )
|
330
|
+
n = __SDL_WaitEvent( mp )
|
331
|
+
if n == 0
|
332
|
+
nil
|
333
|
+
else
|
334
|
+
_extract_event( Event.new(mp) )
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
|
339
|
+
sdl_func :PushEvent, [ :pointer ], :int
|
340
|
+
|
341
|
+
|
342
|
+
|
343
|
+
callback(:eventfilter_cb, [ :pointer ], :int)
|
344
|
+
|
345
|
+
func :__SDL_SetEventFilter, "SDL_SetEventFilter",
|
346
|
+
[ :eventfilter_cb ], :void
|
347
|
+
|
348
|
+
def self.SetEventFilter( &block )
|
349
|
+
if( block_given? )
|
350
|
+
proc = Proc.new { |ev|
|
351
|
+
result = block.call( Event.new(ev).unwrap )
|
352
|
+
case result
|
353
|
+
when true; 1
|
354
|
+
when false, nil; 0
|
355
|
+
else; result
|
356
|
+
end
|
357
|
+
}
|
358
|
+
__SDL_SetEventFilter( proc )
|
359
|
+
else
|
360
|
+
__SDL_SetEventFilter( nil )
|
361
|
+
end
|
362
|
+
end
|
363
|
+
|
364
|
+
|
365
|
+
#sdl_func :GetEventFilter, [ ], :eventfilter_cb
|
366
|
+
|
367
|
+
|
368
|
+
QUERY = -1
|
369
|
+
IGNORE = 0
|
370
|
+
DISABLE = 0
|
371
|
+
ENABLE = 1
|
372
|
+
|
373
|
+
sdl_func :EventState, [ :uint8, :int ], :uint8
|
374
|
+
|
375
|
+
end
|