rb_sdl2 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +31 -0
- data/README.md +1 -1
- data/lib/rb_sdl2/audio/audio.rb +162 -0
- data/lib/rb_sdl2/audio/audio_buffer.rb +12 -19
- data/lib/rb_sdl2/audio/audio_device.rb +17 -23
- data/lib/rb_sdl2/audio/audio_spec.rb +38 -6
- data/lib/rb_sdl2/audio/audio_spec_reader.rb +10 -0
- data/lib/rb_sdl2/clipboard.rb +31 -31
- data/lib/rb_sdl2/cpu_info.rb +34 -17
- data/lib/rb_sdl2/cursor.rb +105 -24
- data/lib/rb_sdl2/display.rb +16 -16
- data/lib/rb_sdl2/display_mode.rb +1 -1
- data/lib/rb_sdl2/error.rb +11 -4
- data/lib/rb_sdl2/errors.rb +7 -0
- data/lib/rb_sdl2/event/event.rb +130 -0
- data/lib/rb_sdl2/event/event_filter.rb +34 -70
- data/lib/rb_sdl2/event/event_pointer.rb +26 -0
- data/lib/rb_sdl2/event/event_queue.rb +97 -120
- data/lib/rb_sdl2/event/event_type.rb +147 -205
- data/lib/rb_sdl2/filesystem.rb +8 -9
- data/lib/rb_sdl2/hint.rb +26 -24
- data/lib/rb_sdl2/keyboard/keyboard.rb +50 -0
- data/lib/rb_sdl2/keyboard/mod_state.rb +68 -0
- data/lib/rb_sdl2/keyboard/state.rb +39 -0
- data/lib/rb_sdl2/message_box.rb +69 -102
- data/lib/rb_sdl2/mouse/global_mouse.rb +10 -3
- data/lib/rb_sdl2/mouse/mouse.rb +64 -0
- data/lib/rb_sdl2/mouse/mouse_button.rb +13 -11
- data/lib/rb_sdl2/mouse/mouse_class.rb +9 -17
- data/lib/rb_sdl2/mouse/mouse_wheel.rb +21 -37
- data/lib/rb_sdl2/mouse/relative_mouse.rb +15 -1
- data/lib/rb_sdl2/palette.rb +12 -12
- data/lib/rb_sdl2/pixel_format_enum.rb +87 -55
- data/lib/rb_sdl2/platform.rb +1 -1
- data/lib/rb_sdl2/power_info.rb +34 -23
- data/lib/rb_sdl2/rect.rb +7 -1
- data/lib/rb_sdl2/ref_count_pointer.rb +25 -10
- data/lib/rb_sdl2/rw_ops/rw_file.rb +19 -0
- data/lib/rb_sdl2/rw_ops/rw_memory.rb +18 -0
- data/lib/rb_sdl2/rw_ops/rw_object.rb +126 -0
- data/lib/rb_sdl2/rw_ops/rw_ops.rb +104 -0
- data/lib/rb_sdl2/rw_ops/rw_ops_pointer.rb +14 -0
- data/lib/rb_sdl2/sdl.rb +67 -28
- data/lib/rb_sdl2/sdl_pointer.rb +22 -0
- data/lib/rb_sdl2/surface/blend_mode.rb +41 -41
- data/lib/rb_sdl2/surface/pixel_format.rb +34 -33
- data/lib/rb_sdl2/surface.rb +280 -265
- data/lib/rb_sdl2/text_input.rb +21 -15
- data/lib/rb_sdl2/timer.rb +36 -31
- data/lib/rb_sdl2/version.rb +3 -3
- data/lib/rb_sdl2/video.rb +17 -5
- data/lib/rb_sdl2/window/accessor.rb +135 -0
- data/lib/rb_sdl2/window/display.rb +8 -8
- data/lib/rb_sdl2/window/flash.rb +22 -0
- data/lib/rb_sdl2/window/hit_test.rb +22 -43
- data/lib/rb_sdl2/window/shape.rb +55 -40
- data/lib/rb_sdl2/window/state.rb +178 -0
- data/lib/rb_sdl2/window/window.rb +149 -0
- data/lib/rb_sdl2.rb +79 -17
- data/rb_sdl2.gemspec +4 -4
- metadata +31 -35
- data/lib/rb_sdl2/audio/audio_allowed_changes.rb +0 -17
- data/lib/rb_sdl2/audio/audio_format.rb +0 -23
- data/lib/rb_sdl2/audio.rb +0 -132
- data/lib/rb_sdl2/cursor/color_cursor.rb +0 -19
- data/lib/rb_sdl2/cursor/cursor_class.rb +0 -24
- data/lib/rb_sdl2/cursor/cursor_pointer.rb +0 -12
- data/lib/rb_sdl2/cursor/default_cursor.rb +0 -18
- data/lib/rb_sdl2/cursor/system_cursor.rb +0 -45
- data/lib/rb_sdl2/event.rb +0 -161
- data/lib/rb_sdl2/keyboard/key_mod.rb +0 -37
- data/lib/rb_sdl2/keyboard/keyboard_state.rb +0 -34
- data/lib/rb_sdl2/keyboard.rb +0 -50
- data/lib/rb_sdl2/mouse/window_mouse.rb +0 -17
- data/lib/rb_sdl2/mouse.rb +0 -74
- data/lib/rb_sdl2/rw_ops/rw_operator.rb +0 -105
- data/lib/rb_sdl2/rw_ops.rb +0 -149
- data/lib/rb_sdl2/screen_saver.rb +0 -11
- data/lib/rb_sdl2/window/dialog.rb +0 -19
- data/lib/rb_sdl2/window/grab.rb +0 -23
- data/lib/rb_sdl2/window/position.rb +0 -38
- data/lib/rb_sdl2/window/size.rb +0 -59
- data/lib/rb_sdl2/window/window_flags.rb +0 -78
- data/lib/rb_sdl2/window.rb +0 -242
@@ -1,137 +1,114 @@
|
|
1
1
|
module RbSDL2
|
2
|
-
class
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
::SDL2.SDL_FlushEvents(*EventType.minmax)
|
16
|
-
end
|
17
|
-
|
18
|
-
def count(type: nil) = peep(nil, ::SDL2::SDL_PEEKEVENT, type: type)
|
19
|
-
alias length count
|
20
|
-
alias size count
|
21
|
-
|
22
|
-
def deq(non_block = false, type: nil)
|
23
|
-
event = Event.new
|
24
|
-
while peep(event, ::SDL2::SDL_GETEVENT, type: type) == 0
|
25
|
-
raise ThreadError, Error.message if non_block
|
26
|
-
end
|
27
|
-
event
|
28
|
-
end
|
29
|
-
|
30
|
-
# ブロックにはイベントキューにあるイベントが渡される。
|
31
|
-
# ブロックへ渡されるイベントはコピーされたものでありブロックの外へ持ち出すことができる。
|
32
|
-
# このメソッドは SDL のイベントキューをロックする。
|
33
|
-
def each = block_given? ? reject! { |event| yield(event.dup); true } : to_enum
|
34
|
-
|
35
|
-
def empty? = length == 0
|
36
|
-
|
37
|
-
# イベントキューが一杯の時に 例外
|
38
|
-
def enq(event, non_block = false)
|
39
|
-
event_copy(event) do |copy|
|
40
|
-
while peep(copy, ::SDL2::SDL_ADDEVENT) == 0
|
41
|
-
raise ThreadError, Error.message if non_block
|
42
|
-
end
|
43
|
-
event
|
44
|
-
end
|
2
|
+
class EventQueue
|
3
|
+
require_relative 'event'
|
4
|
+
require_relative 'event_pointer'
|
5
|
+
require_relative 'event_type'
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def clear
|
9
|
+
# SDL_FlushEvents() は SDL_DROPFILE, SDL_DROPTEXT の場合に file メンバーのポインターは開放しない。
|
10
|
+
# そのため Ruby 側でポインターの開放を行う。
|
11
|
+
ptr = EventPointer.malloc
|
12
|
+
ref_ptr = ptr + ::SDL::DropEvent.offset_of(:file)
|
13
|
+
while ::SDL.PeepEvents(ptr, 1, ::SDL::GETEVENT, ::SDL::DROPFILE, ::SDL::DROPTEXT) > 0
|
14
|
+
::SDL.free(ref_ptr)
|
45
15
|
end
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
# ブロックの実行が成功したらメンバーポインターの開放を防ぐ。
|
52
|
-
if event.drop_file? || event.drop_text?
|
53
|
-
copy.to_ptr.autorelease = false
|
54
|
-
::SDL2.SDL_free(copy)
|
55
|
-
end
|
56
|
-
end
|
16
|
+
# SDL_FlushEvents() は SDL_TEXTEDITING_EXT の場合に text メンバーのポインターは開放しない。
|
17
|
+
# そのため Ruby 側でポインターの開放を行う。
|
18
|
+
ref_ptr = ptr + ::SDL::TextEditingExtEvent.offset_of(:text)
|
19
|
+
while ::SDL.PeepEvents(ptr, 1, ::SDL::GETEVENT, ::SDL::TEXTEDITING_EXT, ::SDL::TEXTEDITING_EXT) > 0
|
20
|
+
::SDL.free(ref_ptr)
|
57
21
|
end
|
22
|
+
::SDL.FlushEvents(::SDL::FIRSTEVENT, ::SDL::LASTEVENT)
|
23
|
+
end
|
58
24
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
25
|
+
def count
|
26
|
+
num = ::SDL.PeepEvents(nil, 0, ::SDL::PEEKEVENT, ::SDL::FIRSTEVENT, ::SDL::LASTEVENT)
|
27
|
+
raise RbSDL2Error if num < 0
|
28
|
+
num
|
29
|
+
end
|
64
30
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
EventType.minmax
|
69
|
-
when Range
|
70
|
-
type.minmax
|
71
|
-
else
|
72
|
-
[type, type]
|
73
|
-
end
|
74
|
-
num = ::SDL2.SDL_PeepEvents(event, event ? 1 : 0, action, min_type, max_type)
|
75
|
-
raise RbSDL2Error if num < 0
|
76
|
-
num
|
77
|
-
end
|
31
|
+
def exist?(type = nil)
|
32
|
+
::SDL.HasEvents(*EventType.to_types(type)) == ::SDL::TRUE
|
33
|
+
end
|
78
34
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
end
|
84
|
-
alias get poll
|
35
|
+
def poll
|
36
|
+
ptr = EventPointer.malloc
|
37
|
+
::SDL.PollEvent(ptr).nonzero? && Event.to_ptr(ptr)
|
38
|
+
end
|
85
39
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
40
|
+
# メインスレッドから呼び出した方が良い。
|
41
|
+
def pump = ::SDL.PumpEvents
|
42
|
+
|
43
|
+
# イベントをキューに入れる。enq との違いは push ではイベントコールバックを起動する。
|
44
|
+
# 成功した場合は引数のイベントを戻す。フィルターされた場合は nil を戻す。
|
45
|
+
# キューに入れることが失敗したら例外が発生する。
|
46
|
+
def push!(event)
|
47
|
+
ptr = EventPointer.copy(event.to_ptr)
|
48
|
+
num = ::SDL.PushEvent(ptr)
|
49
|
+
raise RbSDL2Error if num < 0
|
50
|
+
num > 0 ? event : nil
|
51
|
+
end
|
90
52
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
elsif num == 0
|
100
|
-
nil
|
101
|
-
else
|
102
|
-
raise RbSDL2Error
|
103
|
-
end
|
104
|
-
end
|
53
|
+
def wait(sec = nil)
|
54
|
+
ptr = EventPointer.malloc
|
55
|
+
if sec.nil?
|
56
|
+
::SDL.WaitEvent(ptr).nonzero? && Event.to_ptr(ptr)
|
57
|
+
elsif sec >= 0
|
58
|
+
::SDL.WaitEventTimeout(ptr, sec * 1000).nonzero? && Event.to_ptr(ptr)
|
59
|
+
else
|
60
|
+
raise ArgumentError
|
105
61
|
end
|
62
|
+
end
|
63
|
+
end
|
106
64
|
|
107
|
-
|
108
|
-
pump
|
109
|
-
::SDL2.SDL_HasEvent(::SDL2::SDL_QUIT) == ::SDL2::SDL_TRUE
|
110
|
-
end
|
65
|
+
# Thread::SizedQueue のように振る舞う。
|
111
66
|
|
112
|
-
|
67
|
+
def initialize(type = nil)
|
68
|
+
@min_type, @max_type = EventType.to_types(type)
|
69
|
+
end
|
113
70
|
|
114
|
-
|
115
|
-
# このメソッドは SDL のイベントキューをロックする。
|
116
|
-
# ブロックの戻り値が false の場合、イベントはキューから取り除かれる。
|
117
|
-
# userdata に渡されたオブジェクトはポインターに変換可能なものである必要がある。
|
118
|
-
def reject!(userdata = nil)
|
119
|
-
func = EventFilter.new { |event| yield(event) || (event.clear; nil) }
|
120
|
-
::SDL2.SDL_FilterEvents(func, userdata)
|
121
|
-
end
|
71
|
+
attr_reader :min_type, :max_type
|
122
72
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
73
|
+
def length
|
74
|
+
# SDL_PeepEvents に SDL_PEEKEVENT を与えた時のエラー条件
|
75
|
+
# - イベントシステムがシャットダウンしている場合。
|
76
|
+
# - イベントキューのロックが取得できない場合。
|
77
|
+
num = ::SDL.PeepEvents(nil, 0, ::SDL::PEEKEVENT, min_type, max_type)
|
78
|
+
raise RbSDL2Error if num < 0
|
79
|
+
num
|
80
|
+
end
|
81
|
+
alias size length
|
82
|
+
|
83
|
+
def empty? = length == 0
|
84
|
+
|
85
|
+
# 戻り値は不定(定義なし)
|
86
|
+
def push(event, non_block = false)
|
87
|
+
# SDL_PeepEvents に SDL_ADDEVENT を与えた時ののエラー条件
|
88
|
+
# - イベントシステムがシャットダウンしている場合。
|
89
|
+
# - イベントキューのロックが取得できない場合。
|
90
|
+
# 以下の条件の場合はエラーではなく 0 が戻る。
|
91
|
+
# - イベントキューのイベント数が上限に達した場合。
|
92
|
+
# - イベントキューが追加のメモリーが確保できない場合。
|
93
|
+
ptr = EventPointer.copy(event.to_ptr)
|
94
|
+
while ::SDL.PeepEvents(ptr, 1, ::SDL::ADDEVENT, min_type, max_type) <= 0
|
95
|
+
raise RbSDL2Error if non_block
|
96
|
+
end
|
97
|
+
end
|
98
|
+
alias << push
|
99
|
+
alias enq push
|
100
|
+
|
101
|
+
def pop(non_block = false)
|
102
|
+
ptr = EventPointer.malloc
|
103
|
+
# SDL_PeepEvents に SDL_GETEVENT を与えた時ののエラー条件
|
104
|
+
# - イベントシステムがシャットダウンしている場合。
|
105
|
+
# - イベントキューのロックが取得できない場合。
|
106
|
+
while ::SDL.PeepEvents(ptr, 1, ::SDL::GETEVENT, min_type, max_type) <= 0
|
107
|
+
raise RbSDL2Error if non_block
|
134
108
|
end
|
109
|
+
Event.to_ptr(ptr)
|
135
110
|
end
|
111
|
+
alias deq pop
|
112
|
+
alias shift pop
|
136
113
|
end
|
137
114
|
end
|
@@ -1,271 +1,213 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
1
|
module RbSDL2
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
2
|
+
module EventType
|
3
|
+
COMMON_EVENT_TYPES = ::SDL::FIRSTEVENT.succ...::SDL::USEREVENT
|
4
|
+
USER_EVENT_TYPES = ::SDL::USEREVENT...::SDL::LASTEVENT
|
5
|
+
|
6
|
+
table = [
|
7
|
+
[::SDL::QUIT, ::SDL::QuitEvent, "SDL_QUIT"],
|
8
|
+
[::SDL::APP_TERMINATING, ::SDL::CommonEvent, "SDL_APP_TERMINATING"],
|
9
|
+
[::SDL::APP_LOWMEMORY, ::SDL::CommonEvent, "SDL_APP_LOWMEMORY"],
|
10
|
+
[::SDL::APP_WILLENTERBACKGROUND, ::SDL::CommonEvent, "SDL_APP_WILLENTERBACKGROUND"],
|
11
|
+
[::SDL::APP_DIDENTERBACKGROUND, ::SDL::CommonEvent, "SDL_APP_DIDENTERBACKGROUND"],
|
12
|
+
[::SDL::APP_WILLENTERFOREGROUND, ::SDL::CommonEvent, "SDL_APP_WILLENTERFOREGROUND"],
|
13
|
+
[::SDL::APP_DIDENTERFOREGROUND, ::SDL::CommonEvent, "SDL_APP_DIDENTERFOREGROUND"],
|
14
|
+
[::SDL::LOCALECHANGED, ::SDL::CommonEvent, "SDL_LOCALECHANGED"],
|
15
|
+
[::SDL::DISPLAYEVENT, ::SDL::DisplayEvent, "SDL_DISPLAYEVENT"],
|
16
|
+
[::SDL::WINDOWEVENT, ::SDL::WindowEvent, "SDL_WINDOWEVENT"],
|
17
|
+
[::SDL::SYSWMEVENT, ::SDL::SysWMEvent, "SDL_SYSWMEVENT"],
|
18
|
+
[::SDL::KEYDOWN, ::SDL::KeyboardEvent, "SDL_KEYDOWN"],
|
19
|
+
[::SDL::KEYUP, ::SDL::KeyboardEvent, "SDL_KEYUP"],
|
20
|
+
[::SDL::TEXTEDITING, ::SDL::TextEditingEvent, "SDL_TEXTEDITING"],
|
21
|
+
[::SDL::TEXTINPUT, ::SDL::TextInputEvent, "SDL_TEXTINPUT"],
|
22
|
+
[::SDL::KEYMAPCHANGED, ::SDL::CommonEvent, "SDL_KEYMAPCHANGED"],
|
23
|
+
[::SDL::TEXTEDITING_EXT, ::SDL::TextEditingExtEvent, "SDL_TEXTEDITING_EXT"],
|
24
|
+
[::SDL::MOUSEMOTION, ::SDL::MouseMotionEvent, "SDL_MOUSEMOTION"],
|
25
|
+
[::SDL::MOUSEBUTTONDOWN, ::SDL::MouseButtonEvent, "SDL_MOUSEBUTTONDOWN"],
|
26
|
+
[::SDL::MOUSEBUTTONUP, ::SDL::MouseButtonEvent, "SDL_MOUSEBUTTONUP"],
|
27
|
+
[::SDL::MOUSEWHEEL, ::SDL::MouseWheelEvent, "SDL_MOUSEWHEEL"],
|
28
|
+
[::SDL::JOYAXISMOTION, ::SDL::JoyAxisEvent, "SDL_JOYAXISMOTION"],
|
29
|
+
[::SDL::JOYBALLMOTION, ::SDL::JoyBallEvent, "SDL_JOYBALLMOTION"],
|
30
|
+
[::SDL::JOYHATMOTION, ::SDL::JoyHatEvent, "SDL_JOYHATMOTION"],
|
31
|
+
[::SDL::JOYBUTTONDOWN, ::SDL::JoyButtonEvent, "SDL_JOYBUTTONDOWN"],
|
32
|
+
[::SDL::JOYBUTTONUP, ::SDL::JoyButtonEvent, "SDL_JOYBUTTONUP"],
|
33
|
+
[::SDL::JOYDEVICEADDED, ::SDL::JoyDeviceEvent, "SDL_JOYDEVICEADDED"],
|
34
|
+
[::SDL::JOYDEVICEREMOVED, ::SDL::JoyDeviceEvent, "SDL_JOYDEVICEREMOVED"],
|
35
|
+
[::SDL::CONTROLLERAXISMOTION, ::SDL::ControllerAxisEvent, "SDL_CONTROLLERAXISMOTION"],
|
36
|
+
[::SDL::CONTROLLERBUTTONDOWN, ::SDL::ControllerButtonEvent, "SDL_CONTROLLERBUTTONDOWN"],
|
37
|
+
[::SDL::CONTROLLERBUTTONUP, ::SDL::ControllerButtonEvent, "SDL_CONTROLLERBUTTONUP"],
|
38
|
+
[::SDL::CONTROLLERDEVICEADDED, ::SDL::ControllerDeviceEvent, "SDL_CONTROLLERDEVICEADDED"],
|
39
|
+
[::SDL::CONTROLLERDEVICEREMOVED, ::SDL::ControllerDeviceEvent, "SDL_CONTROLLERDEVICEREMOVED"],
|
40
|
+
[::SDL::CONTROLLERDEVICEREMAPPED, ::SDL::ControllerDeviceEvent, "SDL_CONTROLLERDEVICEREMAPPED"],
|
41
|
+
[::SDL::CONTROLLERTOUCHPADDOWN, ::SDL::ControllerTouchpadEvent, "SDL_CONTROLLERTOUCHPADDOWN"],
|
42
|
+
[::SDL::CONTROLLERTOUCHPADMOTION, ::SDL::ControllerTouchpadEvent, "SDL_CONTROLLERTOUCHPADMOTION"],
|
43
|
+
[::SDL::CONTROLLERTOUCHPADUP, ::SDL::ControllerTouchpadEvent, "SDL_CONTROLLERTOUCHPADUP"],
|
44
|
+
[::SDL::CONTROLLERSENSORUPDATE, ::SDL::ControllerSensorEvent, "SDL_CONTROLLERSENSORUPDATE"],
|
45
|
+
[::SDL::FINGERDOWN, ::SDL::TouchFingerEvent, "SDL_FINGERDOWN"],
|
46
|
+
[::SDL::FINGERUP, ::SDL::TouchFingerEvent, "SDL_FINGERUP"],
|
47
|
+
[::SDL::FINGERMOTION, ::SDL::TouchFingerEvent, "SDL_FINGERMOTION"],
|
48
|
+
[::SDL::DOLLARGESTURE, ::SDL::DollarGestureEvent, "SDL_DOLLARGESTURE"],
|
49
|
+
[::SDL::DOLLARRECORD, ::SDL::DollarGestureEvent, "SDL_DOLLARRECORD"],
|
50
|
+
[::SDL::MULTIGESTURE, ::SDL::MultiGestureEvent, "SDL_MULTIGESTURE"],
|
51
|
+
[::SDL::CLIPBOARDUPDATE, ::SDL::CommonEvent, "SDL_CLIPBOARDUPDATE"],
|
52
|
+
[::SDL::DROPFILE, ::SDL::DropEvent, "SDL_DROPFILE"],
|
53
|
+
[::SDL::DROPTEXT, ::SDL::DropEvent, "SDL_DROPTEXT"],
|
54
|
+
[::SDL::DROPBEGIN, ::SDL::DropEvent, "SDL_DROPBEGIN"],
|
55
|
+
[::SDL::DROPCOMPLETE, ::SDL::DropEvent, "SDL_DROPCOMPLETE"],
|
56
|
+
[::SDL::AUDIODEVICEADDED, ::SDL::AudioDeviceEvent, "SDL_AUDIODEVICEADDED"],
|
57
|
+
[::SDL::AUDIODEVICEREMOVED, ::SDL::AudioDeviceEvent, "SDL_AUDIODEVICEREMOVED"],
|
58
|
+
[::SDL::SENSORUPDATE, ::SDL::SensorEvent, "SDL_SENSORUPDATE"],
|
59
|
+
[::SDL::RENDER_TARGETS_RESET, ::SDL::CommonEvent, "SDL_RENDER_TARGETS_RESET"],
|
60
|
+
[::SDL::RENDER_DEVICE_RESET, ::SDL::CommonEvent, "SDL_RENDER_DEVICE_RESET"],
|
61
|
+
[::SDL::POLLSENTINEL, ::SDL::CommonEvent, "SDL_POLLSENTINEL"],
|
62
|
+
]
|
63
|
+
|
64
|
+
default_klass = -> (_, key) { USER_EVENT_TYPES === key ? ::SDL::UserEvent : ::SDL::CommonEvent }
|
65
|
+
|
66
|
+
ENTITY_MAP = Hash.new(&default_klass).merge!(table.map { |a| a.first(2) }.to_h).freeze
|
67
|
+
|
68
|
+
NAME_MAP = Hash.new.merge!(table.map { |c, _, s| [c, s.freeze] }.to_h).freeze
|
69
|
+
|
70
|
+
class << self
|
71
|
+
def disable(num) = ::SDL.EventState(num, ::SDL::DISABLE) == ::SDL::ENABLE
|
72
|
+
|
73
|
+
def enable(num) = ::SDL.EventState(num, ::SDL::ENABLE) == ::SDL::DISABLE
|
74
|
+
|
75
|
+
def ignore?(num) = ::SDL.EventState(num, ::SDL::QUERY) == ::SDL::IGNORE
|
76
|
+
|
77
|
+
def register_events(num)
|
78
|
+
if ::SDL.RegisterEvents(num) == 0xFFFFFFFF
|
79
|
+
raise RbSDL2Error, "unable to register user events because too many requests"
|
16
80
|
end
|
17
81
|
end
|
18
82
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
::SDL2::SDL_KEYUP => :key,
|
25
|
-
::SDL2::SDL_CONTROLLERAXISMOTION => :caxis,
|
26
|
-
::SDL2::SDL_CONTROLLERBUTTONDOWN => :cbutton,
|
27
|
-
::SDL2::SDL_CONTROLLERBUTTONUP => :cbutton,
|
28
|
-
::SDL2::SDL_CONTROLLERDEVICEADDED => :cdevice,
|
29
|
-
::SDL2::SDL_CONTROLLERDEVICEREMAPPED => :cdevice,
|
30
|
-
::SDL2::SDL_CONTROLLERDEVICEREMOVED => :cdevice,
|
31
|
-
::SDL2::SDL_CONTROLLERSENSORUPDATE => :csensor,
|
32
|
-
::SDL2::SDL_CONTROLLERTOUCHPADDOWN => :ctouchpad,
|
33
|
-
::SDL2::SDL_CONTROLLERTOUCHPADMOTION => :ctouchpad,
|
34
|
-
::SDL2::SDL_CONTROLLERTOUCHPADUP => :ctouchpad,
|
35
|
-
::SDL2::SDL_DOLLARGESTURE => :dgesture,
|
36
|
-
::SDL2::SDL_DOLLARRECORD => :dgesture,
|
37
|
-
::SDL2::SDL_DROPBEGIN => :drop,
|
38
|
-
::SDL2::SDL_DROPCOMPLETE => :drop,
|
39
|
-
::SDL2::SDL_DROPFILE => :drop,
|
40
|
-
::SDL2::SDL_DROPTEXT => :drop,
|
41
|
-
::SDL2::SDL_FINGERDOWN => :tfinger,
|
42
|
-
::SDL2::SDL_FINGERMOTION => :tfinger,
|
43
|
-
::SDL2::SDL_FINGERUP => :tfinger,
|
44
|
-
::SDL2::SDL_JOYAXISMOTION => :jaxis,
|
45
|
-
::SDL2::SDL_JOYBALLMOTION => :jball,
|
46
|
-
::SDL2::SDL_JOYBUTTONDOWN => :jbutton,
|
47
|
-
::SDL2::SDL_JOYBUTTONUP => :jbutton,
|
48
|
-
::SDL2::SDL_JOYDEVICEADDED => :jdevice,
|
49
|
-
::SDL2::SDL_JOYDEVICEREMOVED => :jdevice,
|
50
|
-
::SDL2::SDL_JOYHATMOTION => :jhat,
|
51
|
-
::SDL2::SDL_MOUSEBUTTONDOWN => :button,
|
52
|
-
::SDL2::SDL_MOUSEBUTTONUP => :button,
|
53
|
-
::SDL2::SDL_MOUSEMOTION => :motion,
|
54
|
-
::SDL2::SDL_MOUSEWHEEL => :wheel,
|
55
|
-
::SDL2::SDL_MULTIGESTURE => :mgesture,
|
56
|
-
::SDL2::SDL_QUIT => :quit,
|
57
|
-
::SDL2::SDL_SENSORUPDATE => :sensor,
|
58
|
-
::SDL2::SDL_SYSWMEVENT => :syswm,
|
59
|
-
::SDL2::SDL_TEXTEDITING => :edit,
|
60
|
-
::SDL2::SDL_TEXTINPUT => :text,
|
61
|
-
::SDL2::SDL_WINDOWEVENT => :window,
|
62
|
-
).freeze
|
63
|
-
|
64
|
-
default_name = -> (_, key) do
|
65
|
-
case key
|
66
|
-
when 0 then ""
|
67
|
-
when COMMON_EVENT_TYPES then "common_event"
|
68
|
-
when USER_EVENT_TYPES then "user_event"
|
69
|
-
else raise KeyError, "(#{key})"
|
83
|
+
def to_name(num)
|
84
|
+
case num
|
85
|
+
when COMMON_EVENT_TYPES then NAME_MAP[num]
|
86
|
+
when USER_EVENT_TYPES then "SDL_USEREVENT".freeze
|
87
|
+
else nil
|
70
88
|
end
|
71
89
|
end
|
72
90
|
|
73
|
-
|
74
|
-
|
75
|
-
::
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
::SDL2::SDL_APP_WILLENTERFOREGROUND => "app_will_enter_foreground",
|
80
|
-
::SDL2::SDL_AUDIODEVICEADDED => "audio_device_added",
|
81
|
-
::SDL2::SDL_AUDIODEVICEREMOVED => "audio_device_removed",
|
82
|
-
::SDL2::SDL_CLIPBOARDUPDATE => "clipboard_update",
|
83
|
-
::SDL2::SDL_CONTROLLERAXISMOTION => "controller_axis_motion",
|
84
|
-
::SDL2::SDL_CONTROLLERBUTTONDOWN => "controller_button_down",
|
85
|
-
::SDL2::SDL_CONTROLLERBUTTONUP => "controller_button_up",
|
86
|
-
::SDL2::SDL_CONTROLLERDEVICEADDED => "controller_device_added",
|
87
|
-
::SDL2::SDL_CONTROLLERDEVICEREMAPPED => "controller_device_remapped",
|
88
|
-
::SDL2::SDL_CONTROLLERDEVICEREMOVED => "controller_device_removed",
|
89
|
-
::SDL2::SDL_CONTROLLERSENSORUPDATE => "controller_sensor_update",
|
90
|
-
::SDL2::SDL_CONTROLLERTOUCHPADDOWN => "controller_touchpad_down",
|
91
|
-
::SDL2::SDL_CONTROLLERTOUCHPADMOTION => "controller_touchpad_motion",
|
92
|
-
::SDL2::SDL_CONTROLLERTOUCHPADUP => "controller_touchpad_up",
|
93
|
-
::SDL2::SDL_DISPLAYEVENT => "display_event",
|
94
|
-
::SDL2::SDL_DOLLARGESTURE => "dollar_gesture",
|
95
|
-
::SDL2::SDL_DOLLARRECORD => "dollar_record",
|
96
|
-
::SDL2::SDL_DROPBEGIN => "drop_begin",
|
97
|
-
::SDL2::SDL_DROPCOMPLETE => "drop_complete",
|
98
|
-
::SDL2::SDL_DROPFILE => "drop_file",
|
99
|
-
::SDL2::SDL_DROPTEXT => "drop_text",
|
100
|
-
::SDL2::SDL_FINGERDOWN => "finger_down",
|
101
|
-
::SDL2::SDL_FINGERUP => "finger_up",
|
102
|
-
::SDL2::SDL_FINGERMOTION => "finger_motion",
|
103
|
-
::SDL2::SDL_JOYAXISMOTION => "joy_axis_motion",
|
104
|
-
::SDL2::SDL_JOYBALLMOTION => "joy_ball_motion",
|
105
|
-
::SDL2::SDL_JOYBUTTONDOWN => "joy_button_down",
|
106
|
-
::SDL2::SDL_JOYBUTTONUP => "joy_button_up",
|
107
|
-
::SDL2::SDL_JOYDEVICEADDED => "joy_device_added",
|
108
|
-
::SDL2::SDL_JOYDEVICEREMOVED => "joy_device_removed",
|
109
|
-
::SDL2::SDL_JOYHATMOTION => "joy_hat_motion",
|
110
|
-
::SDL2::SDL_KEYDOWN => "key_down",
|
111
|
-
::SDL2::SDL_KEYUP => "key_up",
|
112
|
-
::SDL2::SDL_KEYMAPCHANGED => "keymap_changed",
|
113
|
-
::SDL2::SDL_LOCALECHANGED => "locale_changed",
|
114
|
-
::SDL2::SDL_MULTIGESTURE => "multi_gesture",
|
115
|
-
::SDL2::SDL_MOUSEBUTTONDOWN => "mouse_button_down",
|
116
|
-
::SDL2::SDL_MOUSEBUTTONUP => "mouse_button_up",
|
117
|
-
::SDL2::SDL_MOUSEMOTION => "mouse_motion",
|
118
|
-
::SDL2::SDL_MOUSEWHEEL => "mouse_wheel",
|
119
|
-
::SDL2::SDL_QUIT => "quit",
|
120
|
-
::SDL2::SDL_RENDER_DEVICE_RESET => "render_device_reset",
|
121
|
-
::SDL2::SDL_RENDER_TARGETS_RESET => "render_targets_reset",
|
122
|
-
::SDL2::SDL_SENSORUPDATE => "sensor_update",
|
123
|
-
::SDL2::SDL_SYSWMEVENT => "sys_wm_event",
|
124
|
-
::SDL2::SDL_TEXTEDITING => "text_editing",
|
125
|
-
::SDL2::SDL_TEXTINPUT => "text_input",
|
126
|
-
::SDL2::SDL_WINDOWEVENT => "window_event",
|
127
|
-
)
|
128
|
-
|
129
|
-
@mutex = Mutex.new
|
130
|
-
|
131
|
-
class << self
|
132
|
-
def define_user_event(name = "user_event")
|
133
|
-
@mutex.synchronize do
|
134
|
-
num = ::SDL2::SDL_RegisterEvents(1)
|
135
|
-
if num == 0xFFFFFFFF
|
136
|
-
raise RbSDL2Error, "unable to register user events because too many requests"
|
137
|
-
end
|
138
|
-
@name_map[num] = name
|
139
|
-
num
|
140
|
-
end
|
91
|
+
def to_types(obj)
|
92
|
+
case obj
|
93
|
+
when nil then [::SDL::FIRSTEVENT, ::SDL::LASTEVENT]
|
94
|
+
when Integer then [obj, obj]
|
95
|
+
when Range then obj.minmax
|
96
|
+
else raise ArgumentError
|
141
97
|
end
|
98
|
+
end
|
99
|
+
end
|
142
100
|
|
143
|
-
|
144
|
-
|
145
|
-
def enable(type) = ::SDL2.SDL_EventState(type, ::SDL2::SDL_ENABLE) == ::SDL2::SDL_DISABLE
|
146
|
-
|
147
|
-
def ignore?(type) = ::SDL2.SDL_EventState(type, ::SDL2::SDL_QUERY) == ::SDL2::SDL_IGNORE
|
148
|
-
|
149
|
-
def minmax = RANGE.minmax
|
150
|
-
|
151
|
-
def to_name(num) = @name_map[num]
|
152
|
-
|
153
|
-
def to_num(obj)
|
154
|
-
num = @name_map.key(obj.to_s)
|
155
|
-
raise ArgumentError unless num
|
156
|
-
num
|
157
|
-
end
|
101
|
+
def app_did_enter_background? = ::SDL::APP_DIDENTERBACKGROUND == type
|
158
102
|
|
159
|
-
|
160
|
-
end
|
103
|
+
def app_did_enter_foreground? = ::SDL::APP_DIDENTERFOREGROUND == type
|
161
104
|
|
162
|
-
|
105
|
+
def app_low_memory? = ::SDL::APP_LOWMEMORY == type
|
163
106
|
|
164
|
-
|
107
|
+
def app_terminating? = ::SDL::APP_TERMINATING == type
|
165
108
|
|
166
|
-
|
109
|
+
def app_will_enter_background? = ::SDL::APP_WILLENTERBACKGROUND == type
|
167
110
|
|
168
|
-
|
111
|
+
def app_will_enter_foreground? = ::SDL::APP_WILLENTERFOREGROUND == type
|
169
112
|
|
170
|
-
|
113
|
+
def audio_device_added? = ::SDL::AUDIODEVICEADDED == type
|
171
114
|
|
172
|
-
|
115
|
+
def audio_device_removed? = ::SDL::AUDIODEVICEREMOVED == type
|
173
116
|
|
174
|
-
|
117
|
+
def clipboard_update? = ::SDL::CLIPBOARDUPDATE == type
|
175
118
|
|
176
|
-
|
119
|
+
def controller_axis_motion? = ::SDL::CONTROLLERAXISMOTION == type
|
177
120
|
|
178
|
-
|
121
|
+
def controller_button_down? = ::SDL::CONTROLLERBUTTONDOWN == type
|
179
122
|
|
180
|
-
|
123
|
+
def controller_button_up? = ::SDL::CONTROLLERBUTTONUP == type
|
181
124
|
|
182
|
-
|
125
|
+
def controller_device_added? = ::SDL::CONTROLLERDEVICEADDED == type
|
183
126
|
|
184
|
-
|
127
|
+
def controller_device_remapped? = ::SDL::CONTROLLERDEVICEREMAPPED == type
|
185
128
|
|
186
|
-
|
129
|
+
def controller_device_removed? = ::SDL::CONTROLLERDEVICEREMOVED == type
|
187
130
|
|
188
|
-
|
131
|
+
def controller_sensor_update? = ::SDL::CONTROLLERSENSORUPDATE == type
|
189
132
|
|
190
|
-
|
133
|
+
def controller_touchpad_down? = ::SDL::CONTROLLERTOUCHPADDOWN == type
|
191
134
|
|
192
|
-
|
135
|
+
def controller_touchpad_motion? = ::SDL::CONTROLLERTOUCHPADMOTION == type
|
193
136
|
|
194
|
-
|
137
|
+
def controller_touchpad_up? = ::SDL::CONTROLLERTOUCHPADUP == type
|
195
138
|
|
196
|
-
|
139
|
+
def display_event? = ::SDL::DISPLAYEVENT == type
|
197
140
|
|
198
|
-
|
141
|
+
def dollar_gesture? = ::SDL::DOLLARGESTURE == type
|
199
142
|
|
200
|
-
|
143
|
+
def dollar_record? = ::SDL::DOLLARRECORD == type
|
201
144
|
|
202
|
-
|
145
|
+
def drop_begin? = ::SDL::DROPBEGIN == type
|
203
146
|
|
204
|
-
|
147
|
+
def drop_complete? = ::SDL::DROPCOMPLETE == type
|
205
148
|
|
206
|
-
|
149
|
+
def drop_file? = ::SDL::DROPFILE == type
|
207
150
|
|
208
|
-
|
151
|
+
def drop_text? = ::SDL::DROPTEXT == type
|
209
152
|
|
210
|
-
|
153
|
+
def finger_down? = ::SDL::FINGERDOWN == type
|
211
154
|
|
212
|
-
|
155
|
+
def finger_motion? = ::SDL::FINGERMOTION == type
|
213
156
|
|
214
|
-
|
157
|
+
def finger_up? = ::SDL::FINGERUP == type
|
215
158
|
|
216
|
-
|
159
|
+
def joy_axis_motion? = ::SDL::JOYAXISMOTION == type
|
217
160
|
|
218
|
-
|
161
|
+
def joy_ball_motion? = ::SDL::JOYBALLMOTION == type
|
219
162
|
|
220
|
-
|
163
|
+
def joy_button_down? = ::SDL::JOYBUTTONDOWN == type
|
221
164
|
|
222
|
-
|
165
|
+
def joy_button_up? = ::SDL::JOYBUTTONUP == type
|
223
166
|
|
224
|
-
|
167
|
+
def joy_device_added? = ::SDL::JOYDEVICEADDED == type
|
225
168
|
|
226
|
-
|
169
|
+
def joy_device_removed? = ::SDL::JOYDEVICEREMOVED == type
|
227
170
|
|
228
|
-
|
171
|
+
def joy_hat_motion? = ::SDL::JOYHATMOTION == type
|
229
172
|
|
230
|
-
|
173
|
+
def key_down? = ::SDL::KEYDOWN == type
|
231
174
|
|
232
|
-
|
175
|
+
def key_up? = ::SDL::KEYUP == type
|
233
176
|
|
234
|
-
|
177
|
+
def keymap_changed? = ::SDL::KEYMAPCHANGED == type
|
235
178
|
|
236
|
-
|
179
|
+
def locale_changed? = ::SDL::LOCALECHANGED == type
|
237
180
|
|
238
|
-
|
181
|
+
def multi_gesture? = ::SDL::MULTIGESTURE == type
|
239
182
|
|
240
|
-
|
183
|
+
def mouse_button_down? = ::SDL::MOUSEBUTTONDOWN == type
|
241
184
|
|
242
|
-
|
185
|
+
def mouse_button_up? = ::SDL::MOUSEBUTTONUP == type
|
243
186
|
|
244
|
-
|
187
|
+
def mouse_motion? = ::SDL::MOUSEMOTION == type
|
245
188
|
|
246
|
-
|
189
|
+
def mouse_wheel? = ::SDL::MOUSEWHEEL == type
|
247
190
|
|
248
|
-
|
191
|
+
def poll_sentinel? = ::SDL::POLLSENTINEL == type
|
249
192
|
|
250
|
-
|
193
|
+
def quit? = ::SDL::QUIT == type
|
251
194
|
|
252
|
-
|
195
|
+
def render_device_reset? = ::SDL::RENDER_DEVICE_RESET == type
|
253
196
|
|
254
|
-
|
197
|
+
def render_targets_reset? = ::SDL::RENDER_TARGETS_RESET == type
|
255
198
|
|
256
|
-
|
199
|
+
def sensor_update? = ::SDL::SENSORUPDATE == type
|
257
200
|
|
258
|
-
|
201
|
+
def sys_wm_event? = ::SDL::SYSWMEVENT == type
|
259
202
|
|
260
|
-
|
203
|
+
def text_editing? = ::SDL::TEXTEDITING == type
|
261
204
|
|
262
|
-
|
205
|
+
def text_editing_ext? = ::SDL::TEXTEDITING_EXT == type
|
263
206
|
|
264
|
-
|
207
|
+
def text_input? = ::SDL::TEXTINPUT == type
|
265
208
|
|
266
|
-
|
209
|
+
def user_event? = USER_EVENT_TYPES === type
|
267
210
|
|
268
|
-
|
269
|
-
end
|
211
|
+
def window_event? = ::SDL::WINDOWEVENT == type
|
270
212
|
end
|
271
213
|
end
|