SDLRuby 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +5 -0
- data/LICENSE.txt +21 -0
- data/README.md +31 -0
- data/Rakefile +12 -0
- data/lib/SDLRuby/audio.rb +65 -0
- data/lib/SDLRuby/cursor.rb +46 -0
- data/lib/SDLRuby/display.rb +79 -0
- data/lib/SDLRuby/event/accessor.rb +127 -0
- data/lib/SDLRuby/event/type.rb +75 -0
- data/lib/SDLRuby/event.rb +80 -0
- data/lib/SDLRuby/font.rb +227 -0
- data/lib/SDLRuby/hint.rb +36 -0
- data/lib/SDLRuby/image/image.rb +23 -0
- data/lib/SDLRuby/image/include/SDL_image.h.rb +61 -0
- data/lib/SDLRuby/image.rb +69 -0
- data/lib/SDLRuby/keyboard.rb +58 -0
- data/lib/SDLRuby/mixer/channel.rb +43 -0
- data/lib/SDLRuby/mixer/chunk.rb +49 -0
- data/lib/SDLRuby/mixer/controller.rb +44 -0
- data/lib/SDLRuby/mixer/include/SDL_mixer.h.rb +95 -0
- data/lib/SDLRuby/mixer/sdl_mixer.rb +60 -0
- data/lib/SDLRuby/mixer.rb +87 -0
- data/lib/SDLRuby/mouse.rb +52 -0
- data/lib/SDLRuby/music.rb +158 -0
- data/lib/SDLRuby/palette.rb +49 -0
- data/lib/SDLRuby/pixel_formatter.rb +67 -0
- data/lib/SDLRuby/rect.rb +11 -0
- data/lib/SDLRuby/renderer/accessor.rb +70 -0
- data/lib/SDLRuby/renderer/drawer.rb +107 -0
- data/lib/SDLRuby/renderer/renderer_info.rb +27 -0
- data/lib/SDLRuby/renderer.rb +101 -0
- data/lib/SDLRuby/rw_ops/rw_object.rb +128 -0
- data/lib/SDLRuby/rw_ops.rb +216 -0
- data/lib/SDLRuby/sdl/include/SDL.h.rb +33 -0
- data/lib/SDLRuby/sdl/include/SDL_audio.h.rb +49 -0
- data/lib/SDLRuby/sdl/include/SDL_blendmode.h.rb +6 -0
- data/lib/SDLRuby/sdl/include/SDL_clipboard.h.rb +10 -0
- data/lib/SDLRuby/sdl/include/SDL_config.h.rb +13 -0
- data/lib/SDLRuby/sdl/include/SDL_cpuinfo.h.rb +27 -0
- data/lib/SDLRuby/sdl/include/SDL_endian.h.rb +3 -0
- data/lib/SDLRuby/sdl/include/SDL_error.h.rb +9 -0
- data/lib/SDLRuby/sdl/include/SDL_events.h.rb +32 -0
- data/lib/SDLRuby/sdl/include/SDL_filesystem.h.rb +6 -0
- data/lib/SDLRuby/sdl/include/SDL_gamecontroller.h.rb +66 -0
- data/lib/SDLRuby/sdl/include/SDL_gesture.h.rb +12 -0
- data/lib/SDLRuby/sdl/include/SDL_guid.h.rb +7 -0
- data/lib/SDLRuby/sdl/include/SDL_hints.h.rb +14 -0
- data/lib/SDLRuby/sdl/include/SDL_joystick.h.rb +69 -0
- data/lib/SDLRuby/sdl/include/SDL_keyboard.h.rb +26 -0
- data/lib/SDLRuby/sdl/include/SDL_keycode.h.rb +7 -0
- data/lib/SDLRuby/sdl/include/SDL_locale.h.rb +6 -0
- data/lib/SDLRuby/sdl/include/SDL_main.h.rb +3 -0
- data/lib/SDLRuby/sdl/include/SDL_messagebox.h.rb +10 -0
- data/lib/SDLRuby/sdl/include/SDL_misc.h.rb +5 -0
- data/lib/SDLRuby/sdl/include/SDL_mouse.h.rb +26 -0
- data/lib/SDLRuby/sdl/include/SDL_pixels.h.rb +25 -0
- data/lib/SDLRuby/sdl/include/SDL_platform.h.rb +3 -0
- data/lib/SDLRuby/sdl/include/SDL_power.h.rb +6 -0
- data/lib/SDLRuby/sdl/include/SDL_rect.h.rb +17 -0
- data/lib/SDLRuby/sdl/include/SDL_render.h.rb +94 -0
- data/lib/SDLRuby/sdl/include/SDL_revision.h.rb +2 -0
- data/lib/SDLRuby/sdl/include/SDL_rwops.h.rb +34 -0
- data/lib/SDLRuby/sdl/include/SDL_scancode.h.rb +5 -0
- data/lib/SDLRuby/sdl/include/SDL_sensor.h.rb +25 -0
- data/lib/SDLRuby/sdl/include/SDL_shape.h.rb +13 -0
- data/lib/SDLRuby/sdl/include/SDL_stdinc.h.rb +24 -0
- data/lib/SDLRuby/sdl/include/SDL_surface.h.rb +37 -0
- data/lib/SDLRuby/sdl/include/SDL_system.h.rb +6 -0
- data/lib/SDLRuby/sdl/include/SDL_syswm.h.rb +16 -0
- data/lib/SDLRuby/sdl/include/SDL_timer.h.rb +13 -0
- data/lib/SDLRuby/sdl/include/SDL_touch.h.rb +15 -0
- data/lib/SDLRuby/sdl/include/SDL_types.h.rb +3 -0
- data/lib/SDLRuby/sdl/include/SDL_version.h.rb +6 -0
- data/lib/SDLRuby/sdl/include/SDL_video.h.rb +117 -0
- data/lib/SDLRuby/sdl/sdl.rb +55 -0
- data/lib/SDLRuby/sdl/sdl_audio.rb +75 -0
- data/lib/SDLRuby/sdl/sdl_blendmode.rb +10 -0
- data/lib/SDLRuby/sdl/sdl_error.rb +5 -0
- data/lib/SDLRuby/sdl/sdl_events.rb +470 -0
- data/lib/SDLRuby/sdl/sdl_hints.rb +9 -0
- data/lib/SDLRuby/sdl/sdl_keyboard.rb +12 -0
- data/lib/SDLRuby/sdl/sdl_locale.rb +8 -0
- data/lib/SDLRuby/sdl/sdl_message_box.rb +7 -0
- data/lib/SDLRuby/sdl/sdl_mouse.rb +32 -0
- data/lib/SDLRuby/sdl/sdl_palette.rb +12 -0
- data/lib/SDLRuby/sdl/sdl_pixels.rb +138 -0
- data/lib/SDLRuby/sdl/sdl_rect.rb +11 -0
- data/lib/SDLRuby/sdl/sdl_render.rb +35 -0
- data/lib/SDLRuby/sdl/sdl_rw_ops.rb +29 -0
- data/lib/SDLRuby/sdl/sdl_scancode.rb +255 -0
- data/lib/SDLRuby/sdl/sdl_surface.rb +27 -0
- data/lib/SDLRuby/sdl/sdl_version.rb +5 -0
- data/lib/SDLRuby/sdl/sdl_video.rb +104 -0
- data/lib/SDLRuby/sdl.rb +192 -0
- data/lib/SDLRuby/sdl_error.rb +8 -0
- data/lib/SDLRuby/surface/pixel_format.rb +51 -0
- data/lib/SDLRuby/surface/surface_renderer.rb +26 -0
- data/lib/SDLRuby/surface.rb +179 -0
- data/lib/SDLRuby/text_input.rb +38 -0
- data/lib/SDLRuby/texture.rb +93 -0
- data/lib/SDLRuby/ttf/include/SDL_ttf.h.rb +54 -0
- data/lib/SDLRuby/ttf/ttf.rb +41 -0
- data/lib/SDLRuby/ttf.rb +54 -0
- data/lib/SDLRuby/version.rb +5 -0
- data/lib/SDLRuby/window/accessor.rb +125 -0
- data/lib/SDLRuby/window/controller.rb +53 -0
- data/lib/SDLRuby/window/display_info.rb +48 -0
- data/lib/SDLRuby/window/flag.rb +42 -0
- data/lib/SDLRuby/window/hit_tester.rb +61 -0
- data/lib/SDLRuby/window/input.rb +68 -0
- data/lib/SDLRuby/window/shaper.rb +68 -0
- data/lib/SDLRuby/window/surfacer.rb +37 -0
- data/lib/SDLRuby/window/window_renderer.rb +31 -0
- data/lib/SDLRuby/window.rb +90 -0
- data/lib/SDLRuby.rb +16 -0
- data/sig/SDLRuby/event.rbs +104 -0
- data/sig/SDLRuby/pixel_formmater.rbs +24 -0
- data/sig/SDLRuby/rect.rbs +5 -0
- data/sig/SDLRuby/sdl.rbs +606 -0
- data/sig/SDLRuby.rbs +4 -0
- metadata +168 -0
@@ -0,0 +1,48 @@
|
|
1
|
+
module SDLRuby
|
2
|
+
class Window
|
3
|
+
module DisplayInfo
|
4
|
+
include SDL
|
5
|
+
|
6
|
+
def display_brightness = SDL.SDL_GetWindowBrightness(self)
|
7
|
+
|
8
|
+
def display_icc_profile
|
9
|
+
size = SDL.tmp_value("size_t")
|
10
|
+
ptr = SDL.SDL_GetWindowICCProfile(self, size)
|
11
|
+
raise SDLError if ptr.null?
|
12
|
+
|
13
|
+
ptr.free = SDL_FREE
|
14
|
+
ptr.to_str(size.value)
|
15
|
+
end
|
16
|
+
|
17
|
+
def display_index
|
18
|
+
num = SDL.SDL_GetWindowDisplayIndex(self)
|
19
|
+
raise SDLError if num < 0
|
20
|
+
|
21
|
+
num
|
22
|
+
end
|
23
|
+
|
24
|
+
def display_gamma_ramp
|
25
|
+
rgb = Array.new(3) { Fiddle::Pointer.malloc(2 * 256, Fiddle::RUBY_FREE) }
|
26
|
+
err = SDL.SDL_GetWindowGammaRamp(self, *rgb)
|
27
|
+
raise SDLError if err < 0
|
28
|
+
|
29
|
+
rgb.map { |ptr| ptr.to_str.unpack("S*") }
|
30
|
+
end
|
31
|
+
|
32
|
+
def display_orientation = Display.orientation(display_index)
|
33
|
+
|
34
|
+
def fullscreen_display_mode
|
35
|
+
mode = DisplayMode.new
|
36
|
+
err = SDL.SDL_GetWindowDisplayMode(self, mode)
|
37
|
+
raise SDLError if err < 0
|
38
|
+
|
39
|
+
mode
|
40
|
+
end
|
41
|
+
|
42
|
+
def fullscreen_display_mode=(mode)
|
43
|
+
err = SDL.SDL_SetWindowDisplayMode(self, mode)
|
44
|
+
raise SDLError if err < 0
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module SDLRuby
|
2
|
+
class Window
|
3
|
+
module Flag
|
4
|
+
class << self
|
5
|
+
def to_i(allow_highdpi: nil, always_on_top: nil, borderless: nil,
|
6
|
+
foreign: nil, fullscreen: nil, fullscreen_desktop: nil,
|
7
|
+
hidden: nil, input_focus: nil, input_grabbed: nil,
|
8
|
+
keyboard_grabbed: nil, maximized: nil, metal: nil,
|
9
|
+
minimized: nil, mouse_capture: nil, mouse_focus: nil,
|
10
|
+
mouse_grabbed: nil, opengl: nil, popup_menu: nil,
|
11
|
+
resizable: nil, shown: nil, skip_taskbar: nil, tooltip: nil,
|
12
|
+
utility: nil, vulkan: nil, **)
|
13
|
+
0 |
|
14
|
+
(allow_highdpi ? SDL_WINDOW_ALLOW_HIGHDPI : 0) |
|
15
|
+
(always_on_top ? SDL_WINDOW_ALWAYS_ON_TOP : 0) |
|
16
|
+
(borderless ? SDL_WINDOW_BORDERLESS : 0) |
|
17
|
+
(foreign ? SDL_WINDOW_FOREIGN : 0) |
|
18
|
+
(fullscreen ? SDL_WINDOW_FULLSCREEN : 0) |
|
19
|
+
(fullscreen_desktop ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0) |
|
20
|
+
(hidden ? SDL_WINDOW_HIDDEN : 0) |
|
21
|
+
(input_focus ? SDL_WINDOW_INPUT_FOCUS : 0) |
|
22
|
+
(input_grabbed ? SDL_WINDOW_INPUT_GRABBED : 0) |
|
23
|
+
(keyboard_grabbed ? SDL_WINDOW_KEYBOARD_GRABBED : 0) |
|
24
|
+
(maximized ? SDL_WINDOW_MAXIMIZED : 0) |
|
25
|
+
(metal ? SDL_WINDOW_METAL : 0) |
|
26
|
+
(minimized ? SDL_WINDOW_MINIMIZED : 0) |
|
27
|
+
(mouse_capture ? SDL_WINDOW_MOUSE_CAPTURE : 0) |
|
28
|
+
(mouse_focus ? SDL_WINDOW_MOUSE_FOCUS : 0) |
|
29
|
+
(mouse_grabbed ? SDL_WINDOW_MOUSE_GRABBED : 0) |
|
30
|
+
(opengl ? SDL_WINDOW_OPENGL : 0) |
|
31
|
+
(popup_menu ? SDL_WINDOW_POPUP_MENU : 0) |
|
32
|
+
(resizable ? SDL_WINDOW_RESIZABLE : 0) |
|
33
|
+
(shown ? SDL_WINDOW_SHOWN : 0) |
|
34
|
+
(skip_taskbar ? SDL_WINDOW_SKIP_TASKBAR : 0) |
|
35
|
+
(tooltip ? SDL_WINDOW_TOOLTIP : 0) |
|
36
|
+
(utility ? SDL_WINDOW_UTILITY : 0) |
|
37
|
+
(vulkan ? SDL_WINDOW_VULKAN : 0)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module SDLRuby
|
2
|
+
class Window
|
3
|
+
module HitTester
|
4
|
+
|
5
|
+
module Remover
|
6
|
+
def destroy
|
7
|
+
Window.set_hit_test_proc(self, nil)
|
8
|
+
super
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class << self
|
13
|
+
private def included(klass) = klass.prepend(Remover)
|
14
|
+
end
|
15
|
+
|
16
|
+
# SDL_HitTestResult SDL_HitTest(SDL_Window* win, const SDL_Point* area, void* data)
|
17
|
+
#
|
18
|
+
class HitTestClosure < Fiddle::Closure
|
19
|
+
include Fiddle, SDL
|
20
|
+
|
21
|
+
def initialize(obj)
|
22
|
+
super(TYPE_INT, [TYPE_VOIDP, TYPE_VOIDP, TYPE_VOIDP])
|
23
|
+
@obj = obj
|
24
|
+
end
|
25
|
+
|
26
|
+
def call(_win, area, _data) = @obj.call(*SDL_Point.new(area)).to_i
|
27
|
+
end
|
28
|
+
|
29
|
+
@hit_tests = {}
|
30
|
+
|
31
|
+
class << self
|
32
|
+
def get_hit_test_proc(window)
|
33
|
+
id = window.to_int
|
34
|
+
@hit_tests[id].last
|
35
|
+
end
|
36
|
+
|
37
|
+
def set_hit_test_proc(window, obj)
|
38
|
+
func = obj ? HitTestClosure.new(obj) : nil
|
39
|
+
err = SDL.SDL_SetWindowHitTest(window, func, nil)
|
40
|
+
raise SDLError if err < 0
|
41
|
+
|
42
|
+
id = window.to_int
|
43
|
+
|
44
|
+
if obj
|
45
|
+
@hit_tests[id] = [func, obj]
|
46
|
+
else
|
47
|
+
@hit_tests.delete(id)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def hit_test_proc = HitTester.get_hit_test_proc(self)
|
53
|
+
|
54
|
+
# objはcallメソッドを持つオブジェクトであること。
|
55
|
+
#
|
56
|
+
def hit_test_proc=(obj)
|
57
|
+
HitTester.set_hit_test_proc(self, obj)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module SDLRuby
|
2
|
+
class Window
|
3
|
+
class << self
|
4
|
+
# 該当するウィンドウがない場合はnilを戻す。
|
5
|
+
#
|
6
|
+
def grabbed
|
7
|
+
ptr = SDL.SDL_GetGrabbedWindow
|
8
|
+
return if ptr.null?
|
9
|
+
|
10
|
+
new(ptr)
|
11
|
+
end
|
12
|
+
|
13
|
+
# 該当するウィンドウがない場合はnilを戻す。
|
14
|
+
#
|
15
|
+
def keyboard_focused
|
16
|
+
ptr = SDL.SDL_GetKeyboardFocus
|
17
|
+
return if ptr.null?
|
18
|
+
|
19
|
+
new(ptr)
|
20
|
+
end
|
21
|
+
|
22
|
+
# 該当するウィンドウがない場合はnilを戻す。
|
23
|
+
#
|
24
|
+
def mouse_focused
|
25
|
+
ptr = SDL.SDL_GetMouseFocus
|
26
|
+
return if ptr.null?
|
27
|
+
|
28
|
+
new(ptr)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
module Input
|
33
|
+
def grab = SDL.SDL_GetWindowGrab(self) != 0
|
34
|
+
|
35
|
+
def grab=(b)
|
36
|
+
SDL.SDL_SetWindowGrab(sef, b ? 1 : 0)
|
37
|
+
end
|
38
|
+
|
39
|
+
def keyboard_grabbed? = SDL.SDL_GetWindowKeyboardGrab(self) != 0
|
40
|
+
|
41
|
+
def keyboard_grab=(b)
|
42
|
+
SDL.SDL_SetWindowKeyboardGrab(self, b ? 1 : 0)
|
43
|
+
end
|
44
|
+
|
45
|
+
def mouse_clip
|
46
|
+
ptr = SDL.SDL_GetWindowMouseRect(self)
|
47
|
+
return if ptr.null?
|
48
|
+
|
49
|
+
SDL_Rect.new(ptr).to_a
|
50
|
+
end
|
51
|
+
|
52
|
+
def mouse_clip=(rect)
|
53
|
+
err = SDL.SDL_SetWindowMouseRect(self, Rect[*rect])
|
54
|
+
raise SDLError if err < 0
|
55
|
+
end
|
56
|
+
|
57
|
+
def mouse_pos=(xy)
|
58
|
+
SDL.SDL_WarpMouseInWindow(self, *xy)
|
59
|
+
end
|
60
|
+
|
61
|
+
def mouse_grabbed? = SDL.SDL_GetWindowMouseGrab(self) != 0
|
62
|
+
|
63
|
+
def mouse_grab=(b)
|
64
|
+
SDL.SDL_SetWindowMouseGrab(self, b ? 1 : 0)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module SDLRuby
|
2
|
+
class Window
|
3
|
+
module Shaper
|
4
|
+
def shape(shape, cutoff = nil)
|
5
|
+
st = SDL_WindowShapeMode.malloc(Fiddle::RUBY_FREE)
|
6
|
+
|
7
|
+
case cutoff
|
8
|
+
when nil
|
9
|
+
st.mode = ShapeModeDefault
|
10
|
+
when Integer
|
11
|
+
st.mode = cutoff >= 0 ? ShapeModeBinarizeAlpha : ShapeModeReverseBinarizeAlpha
|
12
|
+
st.parameters.binarizationCutoff = cutoff.abs
|
13
|
+
when Array
|
14
|
+
st.mode = ShapeModeColorKey
|
15
|
+
st.parameters.colorKey.tap { |c| c.r, c.g, c.b, c.a = *cutoff }
|
16
|
+
else
|
17
|
+
raise ArgumentError
|
18
|
+
end
|
19
|
+
|
20
|
+
case SDL.SDL_SetWindowShape(self, shape, st)
|
21
|
+
when 0
|
22
|
+
return
|
23
|
+
when SDL_NONSHAPEABLE_WINDOW
|
24
|
+
raise SDLError, "SDL_NONSHAPEABLE_WINDOW"
|
25
|
+
when SDL_INVALID_SHAPE_ARGUMENT
|
26
|
+
if shape.size != size
|
27
|
+
raise SDLError, "the size of window and the size of surface do not match."
|
28
|
+
elsif !shape.alpha?
|
29
|
+
raise SDLError, "the color key is not specified in the surface without alpha channel."
|
30
|
+
else
|
31
|
+
raise SDLError, "SDL_INVALID_SHAPE_ARGUMENT"
|
32
|
+
end
|
33
|
+
else
|
34
|
+
raise SDLError
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def cutoff
|
39
|
+
st = SDL_WindowShapeMode.malloc(Fiddle::RUBY_FREE)
|
40
|
+
|
41
|
+
case SDL.SDL_GetShapedWindowMode(self, st)
|
42
|
+
when 0
|
43
|
+
cutoff = case st.mode
|
44
|
+
when ShapeModeDefault
|
45
|
+
nil
|
46
|
+
when ShapeModeBinarizeAlpha
|
47
|
+
st.parameters.binarizationCutoff
|
48
|
+
when ShapeModeReverseBinarizeAlpha
|
49
|
+
-st.parameters.binarizationCutoff
|
50
|
+
when ShapeModeColorKey
|
51
|
+
st.parameters.colorKey.to_a[0..2]
|
52
|
+
else
|
53
|
+
nil
|
54
|
+
end
|
55
|
+
return cutoff
|
56
|
+
when SDL_NONSHAPEABLE_WINDOW
|
57
|
+
raise SDLError, "SDL_NONSHAPEABLE_WINDOW"
|
58
|
+
when SDL_WINDOW_LACKS_SHAPE
|
59
|
+
raise SDLError, "SDL_WINDOW_LACKS_SHAPE"
|
60
|
+
else
|
61
|
+
raise SDLError
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def shaped? = SDL.SDL_IsShapedWindow(self) == 1
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +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
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module SDLRuby
|
2
|
+
class Window
|
3
|
+
module WindowRenderer
|
4
|
+
def init_renderer(name = nil, flags = nil,
|
5
|
+
accelerated: nil, software: nil, vsync: nil)
|
6
|
+
|
7
|
+
idx = if name
|
8
|
+
i = Renderer.drivers.index(name)
|
9
|
+
raise ArgumentError unless i
|
10
|
+
i
|
11
|
+
else
|
12
|
+
-1
|
13
|
+
end
|
14
|
+
num = flags || 0 |
|
15
|
+
(accelerated ? SDL_RENDERER_ACCELERATED : 0) |
|
16
|
+
(software ? SDL_RENDERER_SOFTWARE : 0) |
|
17
|
+
(vsync ? SDL_RENDERER_PRESENTVSYNC : 0)
|
18
|
+
ptr = SDL.SDL_CreateRenderer(self, idx, num)
|
19
|
+
raise SDLError if ptr.null?
|
20
|
+
end
|
21
|
+
|
22
|
+
private def renderer
|
23
|
+
ptr = SDL.SDL_GetRenderer(self)
|
24
|
+
raise SDLError if ptr.null?
|
25
|
+
ptr
|
26
|
+
end
|
27
|
+
|
28
|
+
def destroy_renderer = SDL.SDL_DestroyRenderer(SDL.SDL_GetRenderer(self))
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require_relative 'display'
|
2
|
+
require_relative 'pixel_formatter'
|
3
|
+
require_relative 'window/accessor'
|
4
|
+
require_relative 'window/controller'
|
5
|
+
require_relative 'window/display_info'
|
6
|
+
require_relative 'window/flag'
|
7
|
+
require_relative 'window/hit_tester'
|
8
|
+
require_relative 'window/input'
|
9
|
+
require_relative 'window/shaper'
|
10
|
+
require_relative 'window/surfacer'
|
11
|
+
require_relative 'window/window_renderer'
|
12
|
+
|
13
|
+
module SDLRuby
|
14
|
+
class Window
|
15
|
+
include Accessor, Controller, DisplayInfo, HitTester, Input,
|
16
|
+
PixelFormatter, Renderer, SDL, Shaper, Surfacer, WindowRenderer
|
17
|
+
|
18
|
+
class << self
|
19
|
+
include SDL
|
20
|
+
|
21
|
+
# 該当するウィンドウがない場合はnilを戻す。
|
22
|
+
#
|
23
|
+
def [](obj)
|
24
|
+
id = obj.to_int
|
25
|
+
ptr = SDL.SDL_GetWindowFromID(id)
|
26
|
+
return nil if ptr.null?
|
27
|
+
|
28
|
+
new(ptr)
|
29
|
+
end
|
30
|
+
|
31
|
+
def _from(ptr)
|
32
|
+
ptr = SDL.SDL_CreateWindowFrom(ptr)
|
33
|
+
raise SDLError if ptr.null?
|
34
|
+
|
35
|
+
new(ptr)
|
36
|
+
end
|
37
|
+
|
38
|
+
def create(title, x = nil, y = nil, w = 640, h = 480, flags = nil,
|
39
|
+
shaped: nil, **opts)
|
40
|
+
|
41
|
+
_title = title.encode("UTF-8")
|
42
|
+
_x = x ? x : SDL_WINDOWPOS_UNDEFINED
|
43
|
+
_y = y ? y : SDL_WINDOWPOS_UNDEFINED
|
44
|
+
_flags = flags || Flag.to_i(**opts)
|
45
|
+
ptr = if shaped
|
46
|
+
SDL.SDL_CreateShapedWindow(_title, _x, _y, w, h, _flags)
|
47
|
+
else
|
48
|
+
SDL.SDL_CreateWindow(_title, _x, _y, w, h, _flags)
|
49
|
+
end
|
50
|
+
raise SDLError if ptr.null?
|
51
|
+
|
52
|
+
new(ptr)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
attr_reader :id
|
57
|
+
|
58
|
+
def initialize(ptr)
|
59
|
+
id = SDL.SDL_GetWindowID(ptr)
|
60
|
+
raise SDLError if id == 0
|
61
|
+
|
62
|
+
@id = id
|
63
|
+
end
|
64
|
+
|
65
|
+
def ==(other) = other.respond_to?(:to_ptr) && to_ptr == other.to_ptr
|
66
|
+
|
67
|
+
def destroy = SDL.SDL_DestroyWindow(self)
|
68
|
+
|
69
|
+
def flags = SDL.SDL_GetWindowFlags(self)
|
70
|
+
|
71
|
+
def flash(op)
|
72
|
+
_op = op ? SDL_FLASH_UNTIL_FOCUSED : SDL_FLASH_CANCEL
|
73
|
+
err = SDL.SDL_FlashWindow(self, _op)
|
74
|
+
raise SDLError if err < 0
|
75
|
+
end
|
76
|
+
|
77
|
+
def focus! = SDL.SDL_RaiseWindow(self)
|
78
|
+
|
79
|
+
def format = SDL.SDL_GetWindowPixelFormat(self)
|
80
|
+
|
81
|
+
alias to_int id
|
82
|
+
alias to_i id
|
83
|
+
|
84
|
+
def to_ptr
|
85
|
+
ptr = SDL.SDL_GetWindowFromID(@id)
|
86
|
+
raise SDLError if ptr.null?
|
87
|
+
ptr
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
data/lib/SDLRuby.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'forwardable'
|
4
|
+
require_relative 'SDLRuby/version'
|
5
|
+
require_relative 'SDLRuby/sdl'
|
6
|
+
|
7
|
+
# Extended libraries
|
8
|
+
#
|
9
|
+
require_relative 'SDLRuby/font'
|
10
|
+
require_relative 'SDLRuby/image'
|
11
|
+
require_relative 'SDLRuby/mixer'
|
12
|
+
require_relative 'SDLRuby/music'
|
13
|
+
|
14
|
+
module SDLRuby
|
15
|
+
class Error < StandardError; end
|
16
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
module SDLRuby
|
2
|
+
type event_type_symbols = (
|
3
|
+
:adevice | :button | :caxis | :cbutton | :cdevice | :common | :csensor |
|
4
|
+
:ctouchpad | :dgesture | :display | :drop | :edit | :editExt | :jaxis |
|
5
|
+
:jball | :jbattery | :jbutton | :jdevice | :jhat | :key | :mgesture |
|
6
|
+
:motion | :quit | :sensor | :syswm | :text | :tfinger | :user |
|
7
|
+
:wheel | :window
|
8
|
+
)
|
9
|
+
|
10
|
+
class Event
|
11
|
+
@st: untyped
|
12
|
+
|
13
|
+
def self.clear: -> void
|
14
|
+
|
15
|
+
def self.count: -> Integer
|
16
|
+
|
17
|
+
def self.disable: (untyped) -> void
|
18
|
+
|
19
|
+
def self.enable: (untyped) -> void
|
20
|
+
|
21
|
+
def self.flash: -> void
|
22
|
+
|
23
|
+
def self.get: -> Event
|
24
|
+
|
25
|
+
def self.poll: (Event) -> Event
|
26
|
+
|
27
|
+
def self.pump: -> nil
|
28
|
+
|
29
|
+
alias self.update self.pump
|
30
|
+
|
31
|
+
def self.quit?: -> bool
|
32
|
+
|
33
|
+
def initialize: -> void
|
34
|
+
|
35
|
+
attr_reader entity: any
|
36
|
+
|
37
|
+
def to_ptr: -> untyped
|
38
|
+
|
39
|
+
def to_sym: -> (event_type_symbols)
|
40
|
+
|
41
|
+
def update: -> self
|
42
|
+
|
43
|
+
module Accessor
|
44
|
+
include SDL
|
45
|
+
|
46
|
+
self.@modules: Hash[Symbol, Module]
|
47
|
+
self.@_ptr: untyped
|
48
|
+
|
49
|
+
def self.[]: (event_type_symbols) -> Module
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def char_ary_to_str: (untyped) -> String
|
54
|
+
def char_ptr_to_str: (untyped) -> String
|
55
|
+
|
56
|
+
public
|
57
|
+
|
58
|
+
def capture?: -> bool
|
59
|
+
def pressed?: -> bool
|
60
|
+
def file: -> String
|
61
|
+
def text: -> String
|
62
|
+
def keysym: -> untyped
|
63
|
+
def msg: -> untyped
|
64
|
+
def data1: -> untyped
|
65
|
+
def data2: -> untyped
|
66
|
+
end
|
67
|
+
|
68
|
+
module Type
|
69
|
+
QUIT_EVENT: Range[Integer]
|
70
|
+
DISPLAY_EVENT: Range[Integer]
|
71
|
+
WINDOW_EVENT: Range[Integer]
|
72
|
+
SYSWM_EVENT: Range[Integer]
|
73
|
+
KEY_EVENT: Range[Integer]
|
74
|
+
EDIT_EVENT: Range[Integer]
|
75
|
+
TEXT_EVENT: Range[Integer]
|
76
|
+
EDIT_EXT_EVENT: Range[Integer]
|
77
|
+
MOTION_EVENT: Range[Integer]
|
78
|
+
BUTTON_EVENT: Range[Integer]
|
79
|
+
WHEEL_EVENT: Range[Integer]
|
80
|
+
JAXIS_EVENT: Range[Integer]
|
81
|
+
JBALL_EVENT: Range[Integer]
|
82
|
+
JHAT_EVENT: Range[Integer]
|
83
|
+
JBUTTON_EVENT: Range[Integer]
|
84
|
+
JDEVICE_EVENT: Range[Integer]
|
85
|
+
JBATTERY_EVENT: Range[Integer]
|
86
|
+
CAXIS_EVENT: Range[Integer]
|
87
|
+
CBUTTON_EVENT: Range[Integer]
|
88
|
+
CDEVICE_EVENT: Range[Integer]
|
89
|
+
CTOUCHPAD_EVENT: Range[Integer]
|
90
|
+
CSENSOR_EVENT: Range[Integer]
|
91
|
+
TFINGER_EVENT: Range[Integer]
|
92
|
+
DGESTURE_EVENT: Range[Integer]
|
93
|
+
MGESTURE_EVENT: Range[Integer]
|
94
|
+
DROP_EVENT: Range[Integer]
|
95
|
+
ADEVICE_EVENT: Range[Integer]
|
96
|
+
SENSOR_EVENT: Range[Integer]
|
97
|
+
USER_EVENT: Range[Integer]
|
98
|
+
|
99
|
+
include SDL
|
100
|
+
|
101
|
+
def self.to_sym: (Integer) -> (event_type_symbols)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module SDLRuby
|
2
|
+
module PixelFormatter
|
3
|
+
INDEXED_PIXELFORMATS: [untyped, untyped, untyped, untyped, untyped]
|
4
|
+
ALPHA_PIXELFORMATS: [untyped, untyped, untyped, untyped, untyped, untyped, untyped, untyped, untyped, untyped, untyped, untyped, untyped]
|
5
|
+
include SDL
|
6
|
+
|
7
|
+
def self.alpha?: (untyped x) -> bool
|
8
|
+
def self.bits_per_pixel: (untyped x) -> Integer?
|
9
|
+
def self.bytes_per_pixel: (untyped x) -> Integer
|
10
|
+
def self.format_name: (untyped x) -> String
|
11
|
+
def self.fourcc?: (untyped x) -> String?
|
12
|
+
def self.indexed_color?: (untyped x) -> bool
|
13
|
+
def self.rgb_color?: (untyped x) -> bool
|
14
|
+
def alpha?: -> bool
|
15
|
+
def bits_per_pixel: -> Integer?
|
16
|
+
alias depth bits_per_pixel
|
17
|
+
def bytes_per_pixel: -> Integer
|
18
|
+
def format_name: -> String
|
19
|
+
alias pixel_format_name format_name
|
20
|
+
def fourcc?: -> String?
|
21
|
+
def indexed_color?: -> bool
|
22
|
+
def rgb_color?: -> bool
|
23
|
+
end
|
24
|
+
end
|