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.
Files changed (88) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +7 -0
  3. data/LICENSE +21 -0
  4. data/README.md +188 -0
  5. data/Rakefile +12 -0
  6. data/examples/01_hello_window.rb +24 -0
  7. data/examples/02_basic_rendering.rb +45 -0
  8. data/examples/03_keyboard_input.rb +52 -0
  9. data/examples/04_mouse_input.rb +56 -0
  10. data/examples/05_simple_game.rb +107 -0
  11. data/lib/sdl3/high_level/audio_device.rb +202 -0
  12. data/lib/sdl3/high_level/camera.rb +118 -0
  13. data/lib/sdl3/high_level/clipboard.rb +59 -0
  14. data/lib/sdl3/high_level/event.rb +240 -0
  15. data/lib/sdl3/high_level/gamepad.rb +190 -0
  16. data/lib/sdl3/high_level/gpu.rb +194 -0
  17. data/lib/sdl3/high_level/haptic.rb +213 -0
  18. data/lib/sdl3/high_level/joystick.rb +165 -0
  19. data/lib/sdl3/high_level/renderer.rb +163 -0
  20. data/lib/sdl3/high_level/sensor.rb +105 -0
  21. data/lib/sdl3/high_level/surface.rb +143 -0
  22. data/lib/sdl3/high_level/texture.rb +111 -0
  23. data/lib/sdl3/high_level/timer.rb +88 -0
  24. data/lib/sdl3/high_level/window.rb +151 -0
  25. data/lib/sdl3/library_loader.rb +63 -0
  26. data/lib/sdl3/raw/assert.rb +32 -0
  27. data/lib/sdl3/raw/asyncio.rb +36 -0
  28. data/lib/sdl3/raw/atomic.rb +40 -0
  29. data/lib/sdl3/raw/audio.rb +95 -0
  30. data/lib/sdl3/raw/base.rb +12 -0
  31. data/lib/sdl3/raw/bits.rb +17 -0
  32. data/lib/sdl3/raw/blendmode.rb +36 -0
  33. data/lib/sdl3/raw/camera.rb +38 -0
  34. data/lib/sdl3/raw/clipboard.rb +20 -0
  35. data/lib/sdl3/raw/cpuinfo.rb +29 -0
  36. data/lib/sdl3/raw/dialog.rb +33 -0
  37. data/lib/sdl3/raw/endian.rb +8 -0
  38. data/lib/sdl3/raw/error.rb +15 -0
  39. data/lib/sdl3/raw/events.rb +563 -0
  40. data/lib/sdl3/raw/filesystem.rb +47 -0
  41. data/lib/sdl3/raw/gamepad.rb +135 -0
  42. data/lib/sdl3/raw/gpu.rb +734 -0
  43. data/lib/sdl3/raw/guid.rb +12 -0
  44. data/lib/sdl3/raw/haptic.rb +167 -0
  45. data/lib/sdl3/raw/hidapi.rb +57 -0
  46. data/lib/sdl3/raw/hints.rb +20 -0
  47. data/lib/sdl3/raw/init.rb +27 -0
  48. data/lib/sdl3/raw/iostream.rb +88 -0
  49. data/lib/sdl3/raw/joystick.rb +101 -0
  50. data/lib/sdl3/raw/keyboard.rb +30 -0
  51. data/lib/sdl3/raw/keycode.rb +132 -0
  52. data/lib/sdl3/raw/loadso.rb +9 -0
  53. data/lib/sdl3/raw/locale.rb +12 -0
  54. data/lib/sdl3/raw/log.rb +61 -0
  55. data/lib/sdl3/raw/main.rb +23 -0
  56. data/lib/sdl3/raw/messagebox.rb +50 -0
  57. data/lib/sdl3/raw/metal.rb +9 -0
  58. data/lib/sdl3/raw/misc.rb +7 -0
  59. data/lib/sdl3/raw/mouse.rb +82 -0
  60. data/lib/sdl3/raw/mutex.rb +48 -0
  61. data/lib/sdl3/raw/openxr.rb +21 -0
  62. data/lib/sdl3/raw/pen.rb +38 -0
  63. data/lib/sdl3/raw/pixels.rb +180 -0
  64. data/lib/sdl3/raw/platform.rb +7 -0
  65. data/lib/sdl3/raw/power.rb +14 -0
  66. data/lib/sdl3/raw/process.rb +15 -0
  67. data/lib/sdl3/raw/properties.rb +39 -0
  68. data/lib/sdl3/raw/rect.rb +41 -0
  69. data/lib/sdl3/raw/render.rb +153 -0
  70. data/lib/sdl3/raw/scancode.rb +112 -0
  71. data/lib/sdl3/raw/sensor.rb +31 -0
  72. data/lib/sdl3/raw/stdinc.rb +209 -0
  73. data/lib/sdl3/raw/storage.rb +50 -0
  74. data/lib/sdl3/raw/surface.rb +106 -0
  75. data/lib/sdl3/raw/system.rb +77 -0
  76. data/lib/sdl3/raw/thread.rb +40 -0
  77. data/lib/sdl3/raw/time.rb +36 -0
  78. data/lib/sdl3/raw/timer.rb +19 -0
  79. data/lib/sdl3/raw/touch.rb +22 -0
  80. data/lib/sdl3/raw/tray.rb +42 -0
  81. data/lib/sdl3/raw/types.rb +21 -0
  82. data/lib/sdl3/raw/version.rb +8 -0
  83. data/lib/sdl3/raw/video.rb +208 -0
  84. data/lib/sdl3/raw/vulkan.rb +13 -0
  85. data/lib/sdl3/version.rb +5 -0
  86. data/lib/sdl3.rb +128 -0
  87. data/sdl3.gemspec +30 -0
  88. 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