SDLRuby 0.2.1 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 20bdcc86d9ea3a4670b1f0ac86689d0cae12f51417d9ba92cc710be1ecab8614
4
- data.tar.gz: 3869b91b982b18fe37c5dc97a4b7e99b9f42e2266b42957fa31632ce79bb3447
3
+ metadata.gz: 808c30b69ff9a14dd61fae1fa5c6812a1be91e6313affb2a46ff136cbffcfeac
4
+ data.tar.gz: 42794a0310f8329168a8237897d62dddf14cb14922d1db1d631570308708c8da
5
5
  SHA512:
6
- metadata.gz: e0c6372d9db1be4ffaa5ff4af4aba575d74d3c36682da3df5423c30fcde44c6986ebcd1b3c8d8e37a909148308922a98436cfba53ad75fcd91d6e84407d275bf
7
- data.tar.gz: fa71f7889d06990aed6fd43d8bd09573ca6900a7d7223ce513d0a47830610cc95f49a0883854d5d4670ccd7a67ca2e72576cf026298ad6bc94b08e70aecd2e6e
6
+ metadata.gz: c840b525923d6e083094d5783ad70057f758dbd4be86f1660d16f7873eeb9e12bf5bdfdfb739c0664287eda2bde514926bc8e0fffd25f1822001482b024b3820
7
+ data.tar.gz: 1bec511a45a3786d35c407d51c66b3e75fb0b339835b2d00e492cce65d73c98873a9433043b8faa43f3ac6117988746c4178c14b7468d68a8873fd99a0d45785
data/CHANGELOG.md CHANGED
@@ -1,6 +1,12 @@
1
1
  ## [Unreleased]
2
2
 
3
- ## [0.2.0] - 2023-09-13
3
+ ## [0.3.0] - 2023-09-19
4
+ - Implemented Mouse Module.
5
+ - Implementation of the Timer Module.
6
+ - Implemented Keyboard Module.
7
+ - Specification and implementation of SDL.init, SDL.init?, and SDL.quit.
8
+
9
+ ## [0.2.1] - 2023-09-13
4
10
 
5
11
  - Memory leak fix on event retrieval failure.
6
12
 
@@ -3,56 +3,67 @@ module SDLRuby
3
3
  module_eval do
4
4
  num_keys = SDL.tmp_value("int")
5
5
 
6
- # SDL_GetKeyboardState() が戻すポインターはSDLがロードされた時点で作成されている。
7
- # この関数は SDL_Init() より前に呼ぶことができる。
6
+ # The SDL_GetKeyboardState function can be called before SDL_Init.
7
+ #
8
8
  ptr = SDL.SDL_GetKeyboardState(num_keys)
9
9
 
10
- # エラーになるのはnum_keysNULLを渡したとき。
10
+ # SDL_GetKeyboardState returns an error when num_keys is NULL.
11
+ #
11
12
  raise SDLError if ptr.null?
12
13
 
13
14
  ptr.size = num_keys.value
14
- @state = ptr
15
+ @ptr = ptr.freeze
15
16
  end
16
17
 
17
18
  class << self
18
- def [](idx)
19
- raise IndexError if idx < 0 || @state.size <= idx
20
- @state[idx] != 0
21
- end
22
-
23
- def any? = to_a.any?
24
-
25
- def clear = SDL.SDL_ResetKeyboard
26
-
27
- # キー名からキーコードを得る
28
- def keycode(s) = SDL.GetKeyFromName(s).nonzero?
19
+ include SDL
29
20
 
30
- # キーコードからキー名を得る
31
- def keycode_name(num)
32
- (s = SDL.GetKeyName(num).to_s).empty? ? nil : s
21
+ # This method specifies the ability to check for a match with
22
+ # the characters appearing in the 'when' clause of a 'case' statement.
23
+ #
24
+ # see also: String#===
25
+ #
26
+ def ==(other)
27
+ case other
28
+ when Integer
29
+ 0 <= other && other < @ptr.size && @ptr[other] != 0
30
+ when String, Symbol
31
+ (idx = scancode(other)) != 0 && @ptr[idx] != 0
32
+ else
33
+ super
34
+ end
33
35
  end
34
36
 
35
- # 修飾キーの状態を得る
36
- def mod
37
- SDL.SDL_GetModState #=> integer
37
+ def any?
38
+ # SDL sets a byte to either 0x00 or 0x01 for each scancode.
39
+ # It does not fill the byte sequence with 0x80, so this should work.
40
+ #
41
+ to_str.sum != 0
38
42
  end
39
43
 
40
- # 修飾キーを設定する
41
- def mod=(modstate)
42
- SDL.SDL_SetModState(modstate)
44
+ def clear
45
+ # SDL_ResetKeyboard should be preceded by initializing SDL events since
46
+ # it sends SDLK_KEYUP events for pressed keys.
47
+ #
48
+ # Calling SDL_ResetKeyboard when the SDL event subsystem is not initialized
49
+ # results in a core dump.
50
+ #
51
+ SDL.SDL_ResetKeyboard if SDL.init?(SDL_INIT_EVENTS)
43
52
  end
44
53
 
45
- # キー名からスキャンコードを得る
46
- def scancode(s) = SDL.GetScancodeFromName(s).nonzero?
54
+ def mod = SDL.SDL_GetModState
47
55
 
48
- # スキャンコードからキー名を得る
49
- def scancode_name(num)
50
- (s = SDL.GetScancodeName(num).to_s).empty? ? nil : s
51
- end
56
+ def scancode(s) = SDL.SDL_GetScancodeFromName(s.to_s)
57
+
58
+ def scancode_name(num) = SDL.SDL_GetScancodeName(num).to_s
59
+
60
+ def size = @ptr.size
61
+
62
+ alias length size
52
63
 
53
- def to_a = to_str.unpack("C*").map(&:nonzero?)
64
+ def to_a = size.times.select { |i| @ptr[i] != 0 }
54
65
 
55
- def to_str = @state.to_str
66
+ def to_str = @ptr.to_str
56
67
  end
57
68
  end
58
69
  end
data/lib/SDLRuby/mouse.rb CHANGED
@@ -1,52 +1,130 @@
1
1
  module SDLRuby
2
2
  module Mouse
3
- @global_x, @global_y = *SDL.tmp_value("int", "int")
4
- @relative_x, @relative_y = *SDL.tmp_value("int", "int")
5
- @x, @y = *SDL.tmp_value("int", "int")
6
-
7
3
  class << self
8
4
  include SDL
9
5
 
10
- def to_button_ary(num)
11
- [
12
- num & SDL_BUTTON_LMASK != 0,
13
- num & SDL_BUTTON_MMASK != 0,
14
- num & SDL_BUTTON_RMASK != 0,
15
- num & SDL_BUTTON_X1MASK != 0,
16
- num & SDL_BUTTON_X2MASK != 0
17
- ]
18
- end
6
+ def button = button_to_ary(WindowMouse.button)
19
7
 
8
+ # If called without initializing the SDL video subsystem,
9
+ # even if a mouse is present in the system, it will return an error.
10
+ #
11
+ # This method must be called from the main thread.
12
+ #
20
13
  def capture=(b)
21
14
  err = SDL.SDL_CaptureMouse(b ? 1 : 0)
22
15
  raise SDLError if err < 0
23
16
  end
24
17
 
18
+ def global_button = button_to_ary(GlobalMouse.button)
19
+
20
+ def global_pos = GlobalMouse.pos
21
+
22
+ # If called without initializing the SDL video subsystem,
23
+ # even if a mouse is present in the system, it will return an error.
24
+ #
25
25
  def global_pos=(xy)
26
- err = SDL.SDL_WarpMouseGlobal(*xy)
27
- raise SDLError if err < 0
26
+ GlobalMouse.pos=(xy)
28
27
  end
29
28
 
30
- def global_state = [
31
- SDL.SDL_GetGlobalMouseState(@global_x, @global_y),
32
- @global_x.value, @global_y.value
33
- ]
29
+ def global_state
30
+ a = GlobalMouse.state
31
+ a[0] = button_to_ary(a[0])
32
+ a
33
+ end
34
34
 
35
+ def pos = WindowMouse.pos
36
+
37
+ def pos=(xy)
38
+ SDL.SDL_WarpMouseInWindow(nil, *xy)
39
+ end
40
+
41
+ # If called without initializing the SDL video subsystem,
42
+ # even if a mouse is present in the system, it will return an error.
43
+ #
35
44
  def relative=(b)
36
45
  err = SDL.SDL_SetRelativeMouseMode(b ? 1 : 0)
37
46
  raise SDLError if err < 0
38
47
  end
39
48
 
40
- def relative? = SDL.SDL_GetRelativeMouseMode == 1
49
+ def relative? = SDL.SDL_GetRelativeMouseMode != 0
50
+
51
+ def relative_pos = RelativeMouse.pos
52
+
53
+ def relative_state
54
+ a = RelativeMouse.state
55
+ a[0] = button_to_ary(a[0])
56
+ a
57
+ end
58
+
59
+ def state
60
+ a = WindowMouse.state
61
+ a[0] = button_to_ary(a[0])
62
+ a
63
+ end
64
+
65
+ private
66
+
67
+ def button_to_ary(num)
68
+ [
69
+ num & SDL_BUTTON_LMASK != 0,
70
+ num & SDL_BUTTON_MMASK != 0,
71
+ num & SDL_BUTTON_RMASK != 0,
72
+ num & SDL_BUTTON_X1MASK != 0,
73
+ num & SDL_BUTTON_X2MASK != 0,
74
+ ]
75
+ end
76
+ end
77
+
78
+ module GlobalMouse
79
+ @x, @y = SDL.tmp_value("int", "int")
80
+
81
+ class << self
82
+ def button = SDL.SDL_GetGlobalMouseState(nil, nil)
41
83
 
42
- def relative_state = [
43
- SDL.SDL_GetRelativeMouseState(@relative_x, @relative_y),
44
- @relative_x.value, @relative_y.value
45
- ]
84
+ def pos
85
+ SDL.SDL_GetGlobalMouseState(@x, @y)
86
+ [@x.value, @y.value]
87
+ end
46
88
 
47
- def state = [
48
- SDL.SDL_GetMouseState(@x, @y), @x.value, @y.value
49
- ]
89
+ def pos=(xy)
90
+ err = SDL.SDL_WarpMouseGlobal(*xy)
91
+ raise SDLError if err < 0
92
+ end
93
+
94
+ def state = [SDL.SDL_GetGlobalMouseState(@x, @y), @x.value, @y.value]
95
+ end
96
+ end
97
+
98
+ module RelativeMouse
99
+ @x, @y = SDL.tmp_value("int", "int")
100
+
101
+ class << self
102
+ def pos
103
+ SDL.SDL_GetRelativeMouseState(@x, @y)
104
+ [@x.value, @y.value]
105
+ end
106
+
107
+ def state = [SDL.SDL_GetRelativeMouseState(@x, @y), @x.value, @y.value]
108
+ end
109
+ end
110
+
111
+ module WindowMouse
112
+ @x, @y = SDL.tmp_value("int", "int")
113
+
114
+ class << self
115
+ def button = SDL.SDL_GetMouseState(nil, nil)
116
+
117
+ def pos
118
+ SDL.SDL_GetMouseState(@x, @y)
119
+ [@x.value, @y.value]
120
+ end
121
+
122
+ def pos=(xy)
123
+ SDL.SDL_WarpMouseInWindow(nil, *xy)
124
+ end
125
+
126
+ def state = [SDL.SDL_GetMouseState(@x, @y), @x.value, @y.value]
127
+ end
50
128
  end
51
129
  end
52
130
  end
@@ -12,76 +12,76 @@ module SDLRuby::SDL
12
12
  end
13
13
 
14
14
  SDLK_UNKNOWN = 0
15
- SDLK_RETURN = "\r"
16
- SDLK_ESCAPE = "\x1B"
17
- SDLK_BACKSPACE = "\b"
18
- SDLK_TAB = "\t"
19
- SDLK_SPACE = ' '
20
- SDLK_EXCLAIM = '!'
21
- SDLK_QUOTEDBL = '"'
22
- SDLK_HASH = '#'
23
- SDLK_PERCENT = '%'
24
- SDLK_DOLLAR = '$'
25
- SDLK_AMPERSAND = '&'
26
- SDLK_QUOTE = '\''
27
- SDLK_LEFTPAREN = '('
28
- SDLK_RIGHTPAREN = ')'
29
- SDLK_ASTERISK = '*'
30
- SDLK_PLUS = '+'
31
- SDLK_COMMA = ','
32
- SDLK_MINUS = '-'
33
- SDLK_PERIOD = '.'
34
- SDLK_SLASH = '/'
35
- SDLK_0 = '0'
36
- SDLK_1 = '1'
37
- SDLK_2 = '2'
38
- SDLK_3 = '3'
39
- SDLK_4 = '4'
40
- SDLK_5 = '5'
41
- SDLK_6 = '6'
42
- SDLK_7 = '7'
43
- SDLK_8 = '8'
44
- SDLK_9 = '9'
45
- SDLK_COLON = ':'
46
- SDLK_SEMICOLON = ';'
47
- SDLK_LESS = '<'
48
- SDLK_EQUALS = '='
49
- SDLK_GREATER = '>'
50
- SDLK_QUESTION = '?'
51
- SDLK_AT = '@'
15
+ SDLK_RETURN = "\r".unpack1("C")
16
+ SDLK_ESCAPE = "\x1B".unpack1("C")
17
+ SDLK_BACKSPACE = "\b".unpack1("C")
18
+ SDLK_TAB = "\t".unpack1("C")
19
+ SDLK_SPACE = ' '.unpack1("C")
20
+ SDLK_EXCLAIM = '!'.unpack1("C")
21
+ SDLK_QUOTEDBL = '"'.unpack1("C")
22
+ SDLK_HASH = '#'.unpack1("C")
23
+ SDLK_PERCENT = '%'.unpack1("C")
24
+ SDLK_DOLLAR = '$'.unpack1("C")
25
+ SDLK_AMPERSAND = '&'.unpack1("C")
26
+ SDLK_QUOTE = '\''.unpack1("C")
27
+ SDLK_LEFTPAREN = '('.unpack1("C")
28
+ SDLK_RIGHTPAREN = ')'.unpack1("C")
29
+ SDLK_ASTERISK = '*'.unpack1("C")
30
+ SDLK_PLUS = '+'.unpack1("C")
31
+ SDLK_COMMA = ','.unpack1("C")
32
+ SDLK_MINUS = '-'.unpack1("C")
33
+ SDLK_PERIOD = '.'.unpack1("C")
34
+ SDLK_SLASH = '/'.unpack1("C")
35
+ SDLK_0 = '0'.unpack1("C")
36
+ SDLK_1 = '1'.unpack1("C")
37
+ SDLK_2 = '2'.unpack1("C")
38
+ SDLK_3 = '3'.unpack1("C")
39
+ SDLK_4 = '4'.unpack1("C")
40
+ SDLK_5 = '5'.unpack1("C")
41
+ SDLK_6 = '6'.unpack1("C")
42
+ SDLK_7 = '7'.unpack1("C")
43
+ SDLK_8 = '8'.unpack1("C")
44
+ SDLK_9 = '9'.unpack1("C")
45
+ SDLK_COLON = ':'.unpack1("C")
46
+ SDLK_SEMICOLON = ';'.unpack1("C")
47
+ SDLK_LESS = '<'.unpack1("C")
48
+ SDLK_EQUALS = '='.unpack1("C")
49
+ SDLK_GREATER = '>'.unpack1("C")
50
+ SDLK_QUESTION = '?'.unpack1("C")
51
+ SDLK_AT = '@'.unpack1("C")
52
52
 
53
- SDLK_LEFTBRACKET = '['
54
- SDLK_BACKSLASH = '\\'
55
- SDLK_RIGHTBRACKET = ']'
56
- SDLK_CARET = '^'
57
- SDLK_UNDERSCORE = '_'
58
- SDLK_BACKQUOTE = '`'
59
- SDLK_a = 'a'
60
- SDLK_b = 'b'
61
- SDLK_c = 'c'
62
- SDLK_d = 'd'
63
- SDLK_e = 'e'
64
- SDLK_f = 'f'
65
- SDLK_g = 'g'
66
- SDLK_h = 'h'
67
- SDLK_i = 'i'
68
- SDLK_j = 'j'
69
- SDLK_k = 'k'
70
- SDLK_l = 'l'
71
- SDLK_m = 'm'
72
- SDLK_n = 'n'
73
- SDLK_o = 'o'
74
- SDLK_p = 'p'
75
- SDLK_q = 'q'
76
- SDLK_r = 'r'
77
- SDLK_s = 's'
78
- SDLK_t = 't'
79
- SDLK_u = 'u'
80
- SDLK_v = 'v'
81
- SDLK_w = 'w'
82
- SDLK_x = 'x'
83
- SDLK_y = 'y'
84
- SDLK_z = 'z'
53
+ SDLK_LEFTBRACKET = '['.unpack1("C")
54
+ SDLK_BACKSLASH = '\\'.unpack1("C")
55
+ SDLK_RIGHTBRACKET = ']'.unpack1("C")
56
+ SDLK_CARET = '^'.unpack1("C")
57
+ SDLK_UNDERSCORE = '_'.unpack1("C")
58
+ SDLK_BACKQUOTE = '`'.unpack1("C")
59
+ SDLK_a = 'a'.unpack1("C")
60
+ SDLK_b = 'b'.unpack1("C")
61
+ SDLK_c = 'c'.unpack1("C")
62
+ SDLK_d = 'd'.unpack1("C")
63
+ SDLK_e = 'e'.unpack1("C")
64
+ SDLK_f = 'f'.unpack1("C")
65
+ SDLK_g = 'g'.unpack1("C")
66
+ SDLK_h = 'h'.unpack1("C")
67
+ SDLK_i = 'i'.unpack1("C")
68
+ SDLK_j = 'j'.unpack1("C")
69
+ SDLK_k = 'k'.unpack1("C")
70
+ SDLK_l = 'l'.unpack1("C")
71
+ SDLK_m = 'm'.unpack1("C")
72
+ SDLK_n = 'n'.unpack1("C")
73
+ SDLK_o = 'o'.unpack1("C")
74
+ SDLK_p = 'p'.unpack1("C")
75
+ SDLK_q = 'q'.unpack1("C")
76
+ SDLK_r = 'r'.unpack1("C")
77
+ SDLK_s = 's'.unpack1("C")
78
+ SDLK_t = 't'.unpack1("C")
79
+ SDLK_u = 'u'.unpack1("C")
80
+ SDLK_v = 'v'.unpack1("C")
81
+ SDLK_w = 'w'.unpack1("C")
82
+ SDLK_x = 'x'.unpack1("C")
83
+ SDLK_y = 'y'.unpack1("C")
84
+ SDLK_z = 'z'.unpack1("C")
85
85
  SDLK_CAPSLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CAPSLOCK)
86
86
  SDLK_F1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F1)
87
87
  SDLK_F2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F2)
@@ -101,7 +101,7 @@ module SDLRuby::SDL
101
101
  SDLK_INSERT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_INSERT)
102
102
  SDLK_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HOME)
103
103
  SDLK_PAGEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEUP)
104
- SDLK_DELETE = '\x7F'
104
+ SDLK_DELETE = "\x7F".unpack1("C")
105
105
  SDLK_END = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_END)
106
106
  SDLK_PAGEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEDOWN)
107
107
  SDLK_RIGHT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RIGHT)
data/lib/SDLRuby/sdl.rb CHANGED
@@ -50,6 +50,7 @@ module SDLRuby
50
50
  require_relative 'surface'
51
51
  require_relative 'text_input'
52
52
  require_relative 'texture'
53
+ require_relative 'timer'
53
54
  require_relative 'window'
54
55
 
55
56
  class << self
@@ -60,7 +61,33 @@ module SDLRuby
60
61
  raise SDLError if err < 0
61
62
  end
62
63
 
63
- def init?(flags) = SDL.WasInit(flags).nonzero?
64
+ # Description:
65
+ #
66
+ # This method checks the initialization status of SDL subsystems based on
67
+ # the provided flags. You can specify the SDL subsystems you want to check
68
+ # by combining the SDL_INIT_* flags using bitwise OR.
69
+ #
70
+ # Parameters:
71
+ #
72
+ # flags (optional): An integer or a combination of SDL_INIT_* flags
73
+ # representing the SDL subsystems to check. Default is nil.
74
+ #
75
+ # Return Value:
76
+ #
77
+ # If all the specified SDL subsystems in flags are initialized,
78
+ # the method returns true.
79
+ # If any of the specified SDL subsystems are not initialized,
80
+ # it returns false.
81
+ # If flags is given as nil or 0,
82
+ # the method returns true if any of the SDL subsystems are initialized.
83
+ #
84
+ def init?(flags = nil)
85
+ if flags && flags != 0
86
+ SDL.SDL_WasInit(flags) == flags
87
+ else
88
+ SDL.SDL_WasInit(0) != 0
89
+ end
90
+ end
64
91
 
65
92
  def quit = SDL.SDL_Quit
66
93
 
@@ -157,7 +184,7 @@ module SDLRuby
157
184
 
158
185
  # timer
159
186
  #
160
- def ticks = SDL.SDL_GetTicks
187
+ def ticks = Timer.ticks
161
188
 
162
189
  # version
163
190
  #
@@ -0,0 +1,25 @@
1
+ module SDLRuby
2
+ module Timer
3
+ class << self
4
+ def ticks
5
+ # Use the same Ticks as the one utilized for SDL event timestamps.
6
+ #
7
+ SDL.SDL_GetTicks
8
+ end
9
+
10
+ def inspect
11
+ n = SDL.SDL_GetTicks64
12
+ epoch_time = n / 1000
13
+
14
+ sprintf(
15
+ "%d %02d:%02d:%02d.%03d0000",
16
+ epoch_time / 86400, # days
17
+ epoch_time / 3600 % 24, # hours
18
+ epoch_time / 60 % 60, # minutes
19
+ epoch_time % 60, # seconds
20
+ n % 1000 # fractional seconds
21
+ )
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SDLRuby
4
- VERSION = "0.2.1"
4
+ VERSION = "0.3.0"
5
5
  end
@@ -1,37 +1,37 @@
1
- module SDLRuby
2
- class Window
3
- module Surfacer
4
- include SDL
5
-
6
- def destroy_surface
7
- err = SDL.SDL_DestroyWindowSurface(self)
8
- raise SDLError if err < 0
9
- end
10
-
11
- def surface
12
- ptr = SDL.SDL_GetWindowSurface(self)
13
- raise SDLError if ptr.null?
14
-
15
- # ウィンドウからのサーフェスにはSDL_DONTFREEフラグが設定されている。
16
- # このためにSDL_FreeSurfaceではリファレンスカウンターを減じる事ができない。
17
- # これはRubyのGC管理では問題になる(メモリーリークする)。
18
- # そのためSDL_DONTFREEフラグを解除する!
19
- #
20
- st = SDL_Surface.new(ptr)
21
- st.flags &= ~SDL_DONTFREE
22
-
23
- Surface.new(ptr, add_ref: true)
24
- end
25
-
26
- # ウィンドウのサーフェスがvalidかどうか確認していない。
27
- # リサイズなどで壊れていてもtrueを戻す。
28
- #
29
- def surface? = SDL.SDL_HasWindowSurface(self) == 1
30
-
31
- def update_surface
32
- err = SDL.SDL_UpdateWindowSurface(self)
33
- raise SDLError if err < 0
34
- end
35
- end
36
- end
37
- end
1
+ module SDLRuby
2
+ class Window
3
+ module Surfacer
4
+ include SDL
5
+
6
+ def destroy_surface
7
+ err = SDL.SDL_DestroyWindowSurface(self)
8
+ raise SDLError if err < 0
9
+ end
10
+
11
+ def surface
12
+ ptr = SDL.SDL_GetWindowSurface(self)
13
+ raise SDLError if ptr.null?
14
+
15
+ # ウィンドウからのサーフェスにはSDL_DONTFREEフラグが設定されている。
16
+ # このためにSDL_FreeSurfaceではリファレンスカウンターを減じる事ができない。
17
+ # これはRubyのGC管理では問題になる(メモリーリークする)。
18
+ # そのためSDL_DONTFREEフラグを解除する!
19
+ #
20
+ st = SDL_Surface.new(ptr)
21
+ st.flags &= ~SDL_DONTFREE
22
+
23
+ Surface.new(ptr, add_ref: true)
24
+ end
25
+
26
+ # ウィンドウのサーフェスがvalidかどうか確認していない。
27
+ # リサイズなどで壊れていてもtrueを戻す。
28
+ #
29
+ def surface? = SDL.SDL_HasWindowSurface(self) == 1
30
+
31
+ def update_surface
32
+ err = SDL.SDL_UpdateWindowSurface(self)
33
+ raise SDLError if err < 0
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,25 @@
1
+ module SDLRuby
2
+ module Keyboard
3
+ include SDL
4
+
5
+ def self.==: (untyped other) -> bool
6
+
7
+ def self.any?: () -> bool
8
+
9
+ def self.clear: () -> void
10
+
11
+ def self.mod: () -> Integer
12
+
13
+ def self.scancode: (String | Symbol s) -> Integer
14
+
15
+ def self.scancode_name: (Integer num) -> String
16
+
17
+ def self.size: () -> Integer
18
+
19
+ alias self.length self.size
20
+
21
+ def self.to_a: () -> Array[Integer]
22
+
23
+ def self.to_str: () -> String
24
+ end
25
+ end
@@ -0,0 +1,35 @@
1
+ module SDLRuby
2
+ module Mouse
3
+ include SDL
4
+
5
+ def self.button: () -> Array[bool]
6
+
7
+ def self.capture=: (boolish) -> void
8
+
9
+ def self.global_button: () -> Array[bool]
10
+
11
+ def self.global_pos: () -> [Integer, Integer]
12
+
13
+ def self.global_pos=: ([Integer, Integer] xy) -> void
14
+
15
+ def self.global_state: () -> [Array[bool], Integer, Integer]
16
+
17
+ def self.pos: () -> [Integer, Integer]
18
+
19
+ def self.pos=: ([Integer, Integer] xy) -> void
20
+
21
+ def self.relative=: (boolish) -> untyped
22
+
23
+ def self.relative?: () -> bool
24
+
25
+ def self.relative_pos: () -> [Integer, Integer]
26
+
27
+ def self.relative_state: () -> [Array[bool], Integer, Integer]
28
+
29
+ def self.state: () -> [Array[bool], Integer, Integer]
30
+
31
+ private
32
+
33
+ def self.button_to_ary: (Integer num) -> ::Array[bool]
34
+ end
35
+ end
@@ -0,0 +1,7 @@
1
+ module SDLRuby
2
+ module Timer
3
+ def self.ticks: () -> Integer
4
+
5
+ def self.inspect: () -> String
6
+ end
7
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: SDLRuby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - shinokaro
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-09-12 00:00:00.000000000 Z
11
+ date: 2023-09-18 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: SDLRuby is a GEM that allows calling the SDL library from Ruby, enabling
14
14
  window creation, image display, audio playback, and more. It easily manages C pointers
@@ -102,6 +102,7 @@ files:
102
102
  - lib/SDLRuby/surface/surface_renderer.rb
103
103
  - lib/SDLRuby/text_input.rb
104
104
  - lib/SDLRuby/texture.rb
105
+ - lib/SDLRuby/timer.rb
105
106
  - lib/SDLRuby/ttf.rb
106
107
  - lib/SDLRuby/ttf/include/SDL_ttf.h.rb
107
108
  - lib/SDLRuby/ttf/ttf.rb
@@ -122,7 +123,10 @@ files:
122
123
  - sig/lib/SDLRuby/event.rbs
123
124
  - sig/lib/SDLRuby/event/accessor.rbs
124
125
  - sig/lib/SDLRuby/event/type.rbs
126
+ - sig/lib/SDLRuby/keyboard.rbs
127
+ - sig/lib/SDLRuby/mouse.rbs
125
128
  - sig/lib/SDLRuby/sdl.rbs
129
+ - sig/lib/SDLRuby/timer.rbs
126
130
  homepage: https://github.com/shinokaro/SDLRuby
127
131
  licenses:
128
132
  - MIT