sdl3 1.0.0
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 +7 -0
- data/CHANGELOG.md +7 -0
- data/LICENSE +21 -0
- data/README.md +188 -0
- data/Rakefile +12 -0
- data/examples/01_hello_window.rb +24 -0
- data/examples/02_basic_rendering.rb +45 -0
- data/examples/03_keyboard_input.rb +52 -0
- data/examples/04_mouse_input.rb +56 -0
- data/examples/05_simple_game.rb +107 -0
- data/lib/sdl3/high_level/audio_device.rb +202 -0
- data/lib/sdl3/high_level/camera.rb +118 -0
- data/lib/sdl3/high_level/clipboard.rb +59 -0
- data/lib/sdl3/high_level/event.rb +240 -0
- data/lib/sdl3/high_level/gamepad.rb +190 -0
- data/lib/sdl3/high_level/gpu.rb +194 -0
- data/lib/sdl3/high_level/haptic.rb +213 -0
- data/lib/sdl3/high_level/joystick.rb +165 -0
- data/lib/sdl3/high_level/renderer.rb +163 -0
- data/lib/sdl3/high_level/sensor.rb +105 -0
- data/lib/sdl3/high_level/surface.rb +143 -0
- data/lib/sdl3/high_level/texture.rb +111 -0
- data/lib/sdl3/high_level/timer.rb +88 -0
- data/lib/sdl3/high_level/window.rb +151 -0
- data/lib/sdl3/library_loader.rb +63 -0
- data/lib/sdl3/raw/assert.rb +32 -0
- data/lib/sdl3/raw/asyncio.rb +36 -0
- data/lib/sdl3/raw/atomic.rb +40 -0
- data/lib/sdl3/raw/audio.rb +95 -0
- data/lib/sdl3/raw/base.rb +12 -0
- data/lib/sdl3/raw/bits.rb +17 -0
- data/lib/sdl3/raw/blendmode.rb +36 -0
- data/lib/sdl3/raw/camera.rb +38 -0
- data/lib/sdl3/raw/clipboard.rb +20 -0
- data/lib/sdl3/raw/cpuinfo.rb +29 -0
- data/lib/sdl3/raw/dialog.rb +33 -0
- data/lib/sdl3/raw/endian.rb +8 -0
- data/lib/sdl3/raw/error.rb +15 -0
- data/lib/sdl3/raw/events.rb +563 -0
- data/lib/sdl3/raw/filesystem.rb +47 -0
- data/lib/sdl3/raw/gamepad.rb +135 -0
- data/lib/sdl3/raw/gpu.rb +734 -0
- data/lib/sdl3/raw/guid.rb +12 -0
- data/lib/sdl3/raw/haptic.rb +167 -0
- data/lib/sdl3/raw/hidapi.rb +57 -0
- data/lib/sdl3/raw/hints.rb +20 -0
- data/lib/sdl3/raw/init.rb +27 -0
- data/lib/sdl3/raw/iostream.rb +88 -0
- data/lib/sdl3/raw/joystick.rb +101 -0
- data/lib/sdl3/raw/keyboard.rb +30 -0
- data/lib/sdl3/raw/keycode.rb +132 -0
- data/lib/sdl3/raw/loadso.rb +9 -0
- data/lib/sdl3/raw/locale.rb +12 -0
- data/lib/sdl3/raw/log.rb +61 -0
- data/lib/sdl3/raw/main.rb +23 -0
- data/lib/sdl3/raw/messagebox.rb +50 -0
- data/lib/sdl3/raw/metal.rb +9 -0
- data/lib/sdl3/raw/misc.rb +7 -0
- data/lib/sdl3/raw/mouse.rb +82 -0
- data/lib/sdl3/raw/mutex.rb +48 -0
- data/lib/sdl3/raw/openxr.rb +21 -0
- data/lib/sdl3/raw/pen.rb +38 -0
- data/lib/sdl3/raw/pixels.rb +180 -0
- data/lib/sdl3/raw/platform.rb +7 -0
- data/lib/sdl3/raw/power.rb +14 -0
- data/lib/sdl3/raw/process.rb +15 -0
- data/lib/sdl3/raw/properties.rb +39 -0
- data/lib/sdl3/raw/rect.rb +41 -0
- data/lib/sdl3/raw/render.rb +153 -0
- data/lib/sdl3/raw/scancode.rb +112 -0
- data/lib/sdl3/raw/sensor.rb +31 -0
- data/lib/sdl3/raw/stdinc.rb +209 -0
- data/lib/sdl3/raw/storage.rb +50 -0
- data/lib/sdl3/raw/surface.rb +106 -0
- data/lib/sdl3/raw/system.rb +77 -0
- data/lib/sdl3/raw/thread.rb +40 -0
- data/lib/sdl3/raw/time.rb +36 -0
- data/lib/sdl3/raw/timer.rb +19 -0
- data/lib/sdl3/raw/touch.rb +22 -0
- data/lib/sdl3/raw/tray.rb +42 -0
- data/lib/sdl3/raw/types.rb +21 -0
- data/lib/sdl3/raw/version.rb +8 -0
- data/lib/sdl3/raw/video.rb +208 -0
- data/lib/sdl3/raw/vulkan.rb +13 -0
- data/lib/sdl3/version.rb +5 -0
- data/lib/sdl3.rb +128 -0
- data/sdl3.gemspec +30 -0
- metadata +143 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SDL3
|
|
4
|
+
class AudioDevice
|
|
5
|
+
attr_reader :id
|
|
6
|
+
|
|
7
|
+
def initialize(device_id, spec = nil)
|
|
8
|
+
@id = Raw.SDL_OpenAudioDevice(device_id, spec)
|
|
9
|
+
raise AudioError, Raw.SDL_GetError if @id.zero?
|
|
10
|
+
|
|
11
|
+
ObjectSpace.define_finalizer(self, self.class.releasing(@id))
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.releasing(id)
|
|
15
|
+
prevented_id = id
|
|
16
|
+
proc { Raw.SDL_CloseAudioDevice(prevented_id) unless prevented_id.zero? }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.open(device_id, spec = nil)
|
|
20
|
+
device = new(device_id, spec)
|
|
21
|
+
return device unless block_given?
|
|
22
|
+
|
|
23
|
+
begin
|
|
24
|
+
yield device
|
|
25
|
+
ensure
|
|
26
|
+
device.close
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.playback_devices
|
|
31
|
+
count_ptr = FFI::MemoryPointer.new(:int)
|
|
32
|
+
devices_ptr = Raw.SDL_GetAudioPlaybackDevices(count_ptr)
|
|
33
|
+
return [] if devices_ptr.null?
|
|
34
|
+
|
|
35
|
+
count = count_ptr.read_int
|
|
36
|
+
devices_ptr.read_array_of_uint32(count)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def self.recording_devices
|
|
40
|
+
count_ptr = FFI::MemoryPointer.new(:int)
|
|
41
|
+
devices_ptr = Raw.SDL_GetAudioRecordingDevices(count_ptr)
|
|
42
|
+
return [] if devices_ptr.null?
|
|
43
|
+
|
|
44
|
+
count = count_ptr.read_int
|
|
45
|
+
devices_ptr.read_array_of_uint32(count)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def self.device_name(device_id)
|
|
49
|
+
Raw.SDL_GetAudioDeviceName(device_id)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def close
|
|
53
|
+
return if @id.zero?
|
|
54
|
+
|
|
55
|
+
ObjectSpace.undefine_finalizer(self)
|
|
56
|
+
Raw.SDL_CloseAudioDevice(@id)
|
|
57
|
+
@id = 0
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def name
|
|
61
|
+
Raw.SDL_GetAudioDeviceName(@id)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def pause
|
|
65
|
+
Raw.SDL_PauseAudioDevice(@id)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def resume
|
|
69
|
+
Raw.SDL_ResumeAudioDevice(@id)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def paused?
|
|
73
|
+
Raw.SDL_AudioDevicePaused(@id)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def gain
|
|
77
|
+
Raw.SDL_GetAudioDeviceGain(@id)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def gain=(value)
|
|
81
|
+
raise AudioError, Raw.SDL_GetError unless Raw.SDL_SetAudioDeviceGain(@id, value)
|
|
82
|
+
|
|
83
|
+
value
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def physical?
|
|
87
|
+
Raw.SDL_IsAudioDevicePhysical(@id)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def playback?
|
|
91
|
+
Raw.SDL_IsAudioDevicePlayback(@id)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
class AudioStream
|
|
96
|
+
attr_reader :ptr
|
|
97
|
+
|
|
98
|
+
def initialize(src_spec, dst_spec)
|
|
99
|
+
@ptr = Raw.SDL_CreateAudioStream(src_spec, dst_spec)
|
|
100
|
+
raise AudioError, Raw.SDL_GetError if @ptr.null?
|
|
101
|
+
|
|
102
|
+
ObjectSpace.define_finalizer(self, self.class.releasing(@ptr))
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def self.releasing(ptr)
|
|
106
|
+
prevented_ptr = ptr
|
|
107
|
+
proc { Raw.SDL_DestroyAudioStream(prevented_ptr) unless prevented_ptr.null? }
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def self.open(src_spec, dst_spec)
|
|
111
|
+
stream = new(src_spec, dst_spec)
|
|
112
|
+
return stream unless block_given?
|
|
113
|
+
|
|
114
|
+
begin
|
|
115
|
+
yield stream
|
|
116
|
+
ensure
|
|
117
|
+
stream.destroy
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def destroy
|
|
122
|
+
return if @ptr.null?
|
|
123
|
+
|
|
124
|
+
ObjectSpace.undefine_finalizer(self)
|
|
125
|
+
Raw.SDL_DestroyAudioStream(@ptr)
|
|
126
|
+
@ptr = FFI::Pointer::NULL
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def bind(device)
|
|
130
|
+
device_id = device.is_a?(AudioDevice) ? device.id : device
|
|
131
|
+
raise AudioError, Raw.SDL_GetError unless Raw.SDL_BindAudioStream(device_id, @ptr)
|
|
132
|
+
|
|
133
|
+
true
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def unbind
|
|
137
|
+
Raw.SDL_UnbindAudioStream(@ptr)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def put(data, length)
|
|
141
|
+
raise AudioError, Raw.SDL_GetError unless Raw.SDL_PutAudioStreamData(@ptr, data, length)
|
|
142
|
+
|
|
143
|
+
true
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def get(buffer, length)
|
|
147
|
+
Raw.SDL_GetAudioStreamData(@ptr, buffer, length)
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def available
|
|
151
|
+
Raw.SDL_GetAudioStreamAvailable(@ptr)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def queued
|
|
155
|
+
Raw.SDL_GetAudioStreamQueued(@ptr)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def flush
|
|
159
|
+
raise AudioError, Raw.SDL_GetError unless Raw.SDL_FlushAudioStream(@ptr)
|
|
160
|
+
|
|
161
|
+
true
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def clear
|
|
165
|
+
raise AudioError, Raw.SDL_GetError unless Raw.SDL_ClearAudioStream(@ptr)
|
|
166
|
+
|
|
167
|
+
true
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def frequency_ratio
|
|
171
|
+
Raw.SDL_GetAudioStreamFrequencyRatio(@ptr)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def frequency_ratio=(value)
|
|
175
|
+
raise AudioError, Raw.SDL_GetError unless Raw.SDL_SetAudioStreamFrequencyRatio(@ptr, value)
|
|
176
|
+
|
|
177
|
+
value
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def gain
|
|
181
|
+
Raw.SDL_GetAudioStreamGain(@ptr)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def gain=(value)
|
|
185
|
+
raise AudioError, Raw.SDL_GetError unless Raw.SDL_SetAudioStreamGain(@ptr, value)
|
|
186
|
+
|
|
187
|
+
value
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def lock
|
|
191
|
+
Raw.SDL_LockAudioStream(@ptr)
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def unlock
|
|
195
|
+
Raw.SDL_UnlockAudioStream(@ptr)
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
def to_ptr
|
|
199
|
+
@ptr
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
end
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SDL3
|
|
4
|
+
class Camera
|
|
5
|
+
attr_reader :ptr
|
|
6
|
+
|
|
7
|
+
POSITION_UNKNOWN = :SDL_CAMERA_POSITION_UNKNOWN
|
|
8
|
+
POSITION_FRONT_FACING = :SDL_CAMERA_POSITION_FRONT_FACING
|
|
9
|
+
POSITION_BACK_FACING = :SDL_CAMERA_POSITION_BACK_FACING
|
|
10
|
+
|
|
11
|
+
def initialize(camera_id, spec = nil)
|
|
12
|
+
@ptr = Raw.SDL_OpenCamera(camera_id, spec)
|
|
13
|
+
raise Error, Raw.SDL_GetError if @ptr.null?
|
|
14
|
+
|
|
15
|
+
ObjectSpace.define_finalizer(self, self.class.releasing(@ptr))
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.releasing(ptr)
|
|
19
|
+
prevented_ptr = ptr
|
|
20
|
+
proc { Raw.SDL_CloseCamera(prevented_ptr) unless prevented_ptr.null? }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.open(camera_id, spec = nil)
|
|
24
|
+
camera = new(camera_id, spec)
|
|
25
|
+
return camera unless block_given?
|
|
26
|
+
|
|
27
|
+
begin
|
|
28
|
+
yield camera
|
|
29
|
+
ensure
|
|
30
|
+
camera.close
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def self.num_drivers
|
|
35
|
+
Raw.SDL_GetNumCameraDrivers
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def self.driver(index)
|
|
39
|
+
Raw.SDL_GetCameraDriver(index)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def self.current_driver
|
|
43
|
+
Raw.SDL_GetCurrentCameraDriver
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def self.list
|
|
47
|
+
count_ptr = FFI::MemoryPointer.new(:int)
|
|
48
|
+
cameras_ptr = Raw.SDL_GetCameras(count_ptr)
|
|
49
|
+
return [] if cameras_ptr.null?
|
|
50
|
+
|
|
51
|
+
count = count_ptr.read_int
|
|
52
|
+
cameras_ptr.read_array_of_uint32(count)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def self.name_for_id(camera_id)
|
|
56
|
+
Raw.SDL_GetCameraName(camera_id)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def self.position_for_id(camera_id)
|
|
60
|
+
Raw.SDL_GetCameraPosition(camera_id)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def self.supported_formats(camera_id)
|
|
64
|
+
count_ptr = FFI::MemoryPointer.new(:int)
|
|
65
|
+
formats_ptr = Raw.SDL_GetCameraSupportedFormats(camera_id, count_ptr)
|
|
66
|
+
return [] if formats_ptr.null?
|
|
67
|
+
|
|
68
|
+
count = count_ptr.read_int
|
|
69
|
+
count.times.map do |i|
|
|
70
|
+
spec_ptr = formats_ptr.get_pointer(i * FFI::Pointer.size)
|
|
71
|
+
Raw::SDL_CameraSpec.new(spec_ptr)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def close
|
|
76
|
+
return if @ptr.null?
|
|
77
|
+
|
|
78
|
+
ObjectSpace.undefine_finalizer(self)
|
|
79
|
+
Raw.SDL_CloseCamera(@ptr)
|
|
80
|
+
@ptr = FFI::Pointer::NULL
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def id
|
|
84
|
+
Raw.SDL_GetCameraID(@ptr)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def properties
|
|
88
|
+
Raw.SDL_GetCameraProperties(@ptr)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def permission_state
|
|
92
|
+
Raw.SDL_GetCameraPermissionState(@ptr)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def format
|
|
96
|
+
spec = Raw::SDL_CameraSpec.new
|
|
97
|
+
return nil unless Raw.SDL_GetCameraFormat(@ptr, spec)
|
|
98
|
+
|
|
99
|
+
spec
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def acquire_frame
|
|
103
|
+
timestamp_ptr = FFI::MemoryPointer.new(:uint64)
|
|
104
|
+
surface_ptr = Raw.SDL_AcquireCameraFrame(@ptr, timestamp_ptr)
|
|
105
|
+
return nil if surface_ptr.null?
|
|
106
|
+
|
|
107
|
+
[surface_ptr, timestamp_ptr.read_uint64]
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def release_frame(surface_ptr)
|
|
111
|
+
Raw.SDL_ReleaseCameraFrame(@ptr, surface_ptr)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def to_ptr
|
|
115
|
+
@ptr
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SDL3
|
|
4
|
+
module Clipboard
|
|
5
|
+
class << self
|
|
6
|
+
def text
|
|
7
|
+
Raw.SDL_GetClipboardText
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def text=(value)
|
|
11
|
+
Raw.SDL_SetClipboardText(value)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def has_text?
|
|
15
|
+
Raw.SDL_HasClipboardText
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def primary_selection_text
|
|
19
|
+
Raw.SDL_GetPrimarySelectionText
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def primary_selection_text=(value)
|
|
23
|
+
Raw.SDL_SetPrimarySelectionText(value)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def has_primary_selection_text?
|
|
27
|
+
Raw.SDL_HasPrimarySelectionText
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def clear
|
|
31
|
+
Raw.SDL_ClearClipboardData
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def has_data?(mime_type)
|
|
35
|
+
Raw.SDL_HasClipboardData(mime_type)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def data(mime_type)
|
|
39
|
+
size_ptr = FFI::MemoryPointer.new(:size_t)
|
|
40
|
+
data_ptr = Raw.SDL_GetClipboardData(mime_type, size_ptr)
|
|
41
|
+
return nil if data_ptr.null?
|
|
42
|
+
|
|
43
|
+
size = size_ptr.read(:size_t)
|
|
44
|
+
data_ptr.read_bytes(size)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def mime_types
|
|
48
|
+
count_ptr = FFI::MemoryPointer.new(:size_t)
|
|
49
|
+
types_ptr = Raw.SDL_GetClipboardMimeTypes(count_ptr)
|
|
50
|
+
return [] if types_ptr.null?
|
|
51
|
+
|
|
52
|
+
count = count_ptr.read(:size_t)
|
|
53
|
+
count.times.map do |i|
|
|
54
|
+
types_ptr.get_pointer(i * FFI::Pointer.size).read_string
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SDL3
|
|
4
|
+
class Event
|
|
5
|
+
attr_reader :raw
|
|
6
|
+
|
|
7
|
+
def initialize(raw_event)
|
|
8
|
+
@raw = raw_event
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def type
|
|
12
|
+
@raw[:type]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def timestamp
|
|
16
|
+
@raw[:common][:timestamp]
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.poll
|
|
20
|
+
event = Raw::SDL_Event.new
|
|
21
|
+
return nil unless Raw.SDL_PollEvent(event)
|
|
22
|
+
|
|
23
|
+
wrap(event)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.wait(timeout = nil)
|
|
27
|
+
event = Raw::SDL_Event.new
|
|
28
|
+
result = if timeout
|
|
29
|
+
Raw.SDL_WaitEventTimeout(event, timeout)
|
|
30
|
+
else
|
|
31
|
+
Raw.SDL_WaitEvent(event)
|
|
32
|
+
end
|
|
33
|
+
return nil unless result
|
|
34
|
+
|
|
35
|
+
wrap(event)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def self.each
|
|
39
|
+
return enum_for(:each) unless block_given?
|
|
40
|
+
|
|
41
|
+
while (event = poll)
|
|
42
|
+
yield event
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def self.pump
|
|
47
|
+
Raw.SDL_PumpEvents
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def self.push(event)
|
|
51
|
+
Raw.SDL_PushEvent(event.raw)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def self.wrap(raw_event)
|
|
55
|
+
case raw_event[:type]
|
|
56
|
+
when Raw::SDL_EVENT_QUIT
|
|
57
|
+
QuitEvent.new(raw_event)
|
|
58
|
+
when Raw::SDL_EVENT_KEY_DOWN, Raw::SDL_EVENT_KEY_UP
|
|
59
|
+
KeyboardEvent.new(raw_event)
|
|
60
|
+
when Raw::SDL_EVENT_MOUSE_MOTION
|
|
61
|
+
MouseMotionEvent.new(raw_event)
|
|
62
|
+
when Raw::SDL_EVENT_MOUSE_BUTTON_DOWN, Raw::SDL_EVENT_MOUSE_BUTTON_UP
|
|
63
|
+
MouseButtonEvent.new(raw_event)
|
|
64
|
+
when Raw::SDL_EVENT_MOUSE_WHEEL
|
|
65
|
+
MouseWheelEvent.new(raw_event)
|
|
66
|
+
when Raw::SDL_EVENT_WINDOW_CLOSE_REQUESTED,
|
|
67
|
+
Raw::SDL_EVENT_WINDOW_RESIZED,
|
|
68
|
+
Raw::SDL_EVENT_WINDOW_MOVED,
|
|
69
|
+
Raw::SDL_EVENT_WINDOW_SHOWN,
|
|
70
|
+
Raw::SDL_EVENT_WINDOW_HIDDEN,
|
|
71
|
+
Raw::SDL_EVENT_WINDOW_EXPOSED,
|
|
72
|
+
Raw::SDL_EVENT_WINDOW_MINIMIZED,
|
|
73
|
+
Raw::SDL_EVENT_WINDOW_MAXIMIZED,
|
|
74
|
+
Raw::SDL_EVENT_WINDOW_RESTORED,
|
|
75
|
+
Raw::SDL_EVENT_WINDOW_FOCUS_GAINED,
|
|
76
|
+
Raw::SDL_EVENT_WINDOW_FOCUS_LOST
|
|
77
|
+
WindowEvent.new(raw_event)
|
|
78
|
+
else
|
|
79
|
+
new(raw_event)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def quit?
|
|
84
|
+
type == Raw::SDL_EVENT_QUIT
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def key_down?
|
|
88
|
+
type == Raw::SDL_EVENT_KEY_DOWN
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def key_up?
|
|
92
|
+
type == Raw::SDL_EVENT_KEY_UP
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def mouse_motion?
|
|
96
|
+
type == Raw::SDL_EVENT_MOUSE_MOTION
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def mouse_button_down?
|
|
100
|
+
type == Raw::SDL_EVENT_MOUSE_BUTTON_DOWN
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def mouse_button_up?
|
|
104
|
+
type == Raw::SDL_EVENT_MOUSE_BUTTON_UP
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
class QuitEvent < Event
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
class KeyboardEvent < Event
|
|
112
|
+
def window_id
|
|
113
|
+
@raw[:key][:windowID]
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def scancode
|
|
117
|
+
@raw[:key][:scancode]
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def key
|
|
121
|
+
@raw[:key][:key]
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def mod
|
|
125
|
+
@raw[:key][:mod]
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def down?
|
|
129
|
+
@raw[:key][:down]
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def up?
|
|
133
|
+
!down?
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def repeat?
|
|
137
|
+
@raw[:key][:repeat]
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
class MouseMotionEvent < Event
|
|
142
|
+
def window_id
|
|
143
|
+
@raw[:motion][:windowID]
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def x
|
|
147
|
+
@raw[:motion][:x]
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def y
|
|
151
|
+
@raw[:motion][:y]
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def xrel
|
|
155
|
+
@raw[:motion][:xrel]
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def yrel
|
|
159
|
+
@raw[:motion][:yrel]
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def state
|
|
163
|
+
@raw[:motion][:state]
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
class MouseButtonEvent < Event
|
|
168
|
+
def window_id
|
|
169
|
+
@raw[:button][:windowID]
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def button
|
|
173
|
+
@raw[:button][:button]
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def down?
|
|
177
|
+
@raw[:button][:down]
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def up?
|
|
181
|
+
!down?
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def clicks
|
|
185
|
+
@raw[:button][:clicks]
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def x
|
|
189
|
+
@raw[:button][:x]
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def y
|
|
193
|
+
@raw[:button][:y]
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
class MouseWheelEvent < Event
|
|
198
|
+
def window_id
|
|
199
|
+
@raw[:wheel][:windowID]
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
def x
|
|
203
|
+
@raw[:wheel][:x]
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def y
|
|
207
|
+
@raw[:wheel][:y]
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
def direction
|
|
211
|
+
@raw[:wheel][:direction]
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
class WindowEvent < Event
|
|
216
|
+
def window_id
|
|
217
|
+
@raw[:window][:windowID]
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
def data1
|
|
221
|
+
@raw[:window][:data1]
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
def data2
|
|
225
|
+
@raw[:window][:data2]
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
def close_requested?
|
|
229
|
+
type == Raw::SDL_EVENT_WINDOW_CLOSE_REQUESTED
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
def resized?
|
|
233
|
+
type == Raw::SDL_EVENT_WINDOW_RESIZED
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
def moved?
|
|
237
|
+
type == Raw::SDL_EVENT_WINDOW_MOVED
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
end
|