SDLRuby 0.1.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 (122) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +5 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +31 -0
  5. data/Rakefile +12 -0
  6. data/lib/SDLRuby/audio.rb +65 -0
  7. data/lib/SDLRuby/cursor.rb +46 -0
  8. data/lib/SDLRuby/display.rb +79 -0
  9. data/lib/SDLRuby/event/accessor.rb +127 -0
  10. data/lib/SDLRuby/event/type.rb +75 -0
  11. data/lib/SDLRuby/event.rb +80 -0
  12. data/lib/SDLRuby/font.rb +227 -0
  13. data/lib/SDLRuby/hint.rb +36 -0
  14. data/lib/SDLRuby/image/image.rb +23 -0
  15. data/lib/SDLRuby/image/include/SDL_image.h.rb +61 -0
  16. data/lib/SDLRuby/image.rb +69 -0
  17. data/lib/SDLRuby/keyboard.rb +58 -0
  18. data/lib/SDLRuby/mixer/channel.rb +43 -0
  19. data/lib/SDLRuby/mixer/chunk.rb +49 -0
  20. data/lib/SDLRuby/mixer/controller.rb +44 -0
  21. data/lib/SDLRuby/mixer/include/SDL_mixer.h.rb +95 -0
  22. data/lib/SDLRuby/mixer/sdl_mixer.rb +60 -0
  23. data/lib/SDLRuby/mixer.rb +87 -0
  24. data/lib/SDLRuby/mouse.rb +52 -0
  25. data/lib/SDLRuby/music.rb +158 -0
  26. data/lib/SDLRuby/palette.rb +49 -0
  27. data/lib/SDLRuby/pixel_formatter.rb +67 -0
  28. data/lib/SDLRuby/rect.rb +11 -0
  29. data/lib/SDLRuby/renderer/accessor.rb +70 -0
  30. data/lib/SDLRuby/renderer/drawer.rb +107 -0
  31. data/lib/SDLRuby/renderer/renderer_info.rb +27 -0
  32. data/lib/SDLRuby/renderer.rb +101 -0
  33. data/lib/SDLRuby/rw_ops/rw_object.rb +128 -0
  34. data/lib/SDLRuby/rw_ops.rb +216 -0
  35. data/lib/SDLRuby/sdl/include/SDL.h.rb +33 -0
  36. data/lib/SDLRuby/sdl/include/SDL_audio.h.rb +49 -0
  37. data/lib/SDLRuby/sdl/include/SDL_blendmode.h.rb +6 -0
  38. data/lib/SDLRuby/sdl/include/SDL_clipboard.h.rb +10 -0
  39. data/lib/SDLRuby/sdl/include/SDL_config.h.rb +13 -0
  40. data/lib/SDLRuby/sdl/include/SDL_cpuinfo.h.rb +27 -0
  41. data/lib/SDLRuby/sdl/include/SDL_endian.h.rb +3 -0
  42. data/lib/SDLRuby/sdl/include/SDL_error.h.rb +9 -0
  43. data/lib/SDLRuby/sdl/include/SDL_events.h.rb +32 -0
  44. data/lib/SDLRuby/sdl/include/SDL_filesystem.h.rb +6 -0
  45. data/lib/SDLRuby/sdl/include/SDL_gamecontroller.h.rb +66 -0
  46. data/lib/SDLRuby/sdl/include/SDL_gesture.h.rb +12 -0
  47. data/lib/SDLRuby/sdl/include/SDL_guid.h.rb +7 -0
  48. data/lib/SDLRuby/sdl/include/SDL_hints.h.rb +14 -0
  49. data/lib/SDLRuby/sdl/include/SDL_joystick.h.rb +69 -0
  50. data/lib/SDLRuby/sdl/include/SDL_keyboard.h.rb +26 -0
  51. data/lib/SDLRuby/sdl/include/SDL_keycode.h.rb +7 -0
  52. data/lib/SDLRuby/sdl/include/SDL_locale.h.rb +6 -0
  53. data/lib/SDLRuby/sdl/include/SDL_main.h.rb +3 -0
  54. data/lib/SDLRuby/sdl/include/SDL_messagebox.h.rb +10 -0
  55. data/lib/SDLRuby/sdl/include/SDL_misc.h.rb +5 -0
  56. data/lib/SDLRuby/sdl/include/SDL_mouse.h.rb +26 -0
  57. data/lib/SDLRuby/sdl/include/SDL_pixels.h.rb +25 -0
  58. data/lib/SDLRuby/sdl/include/SDL_platform.h.rb +3 -0
  59. data/lib/SDLRuby/sdl/include/SDL_power.h.rb +6 -0
  60. data/lib/SDLRuby/sdl/include/SDL_rect.h.rb +17 -0
  61. data/lib/SDLRuby/sdl/include/SDL_render.h.rb +94 -0
  62. data/lib/SDLRuby/sdl/include/SDL_revision.h.rb +2 -0
  63. data/lib/SDLRuby/sdl/include/SDL_rwops.h.rb +34 -0
  64. data/lib/SDLRuby/sdl/include/SDL_scancode.h.rb +5 -0
  65. data/lib/SDLRuby/sdl/include/SDL_sensor.h.rb +25 -0
  66. data/lib/SDLRuby/sdl/include/SDL_shape.h.rb +13 -0
  67. data/lib/SDLRuby/sdl/include/SDL_stdinc.h.rb +24 -0
  68. data/lib/SDLRuby/sdl/include/SDL_surface.h.rb +37 -0
  69. data/lib/SDLRuby/sdl/include/SDL_system.h.rb +6 -0
  70. data/lib/SDLRuby/sdl/include/SDL_syswm.h.rb +16 -0
  71. data/lib/SDLRuby/sdl/include/SDL_timer.h.rb +13 -0
  72. data/lib/SDLRuby/sdl/include/SDL_touch.h.rb +15 -0
  73. data/lib/SDLRuby/sdl/include/SDL_types.h.rb +3 -0
  74. data/lib/SDLRuby/sdl/include/SDL_version.h.rb +6 -0
  75. data/lib/SDLRuby/sdl/include/SDL_video.h.rb +117 -0
  76. data/lib/SDLRuby/sdl/sdl.rb +55 -0
  77. data/lib/SDLRuby/sdl/sdl_audio.rb +75 -0
  78. data/lib/SDLRuby/sdl/sdl_blendmode.rb +10 -0
  79. data/lib/SDLRuby/sdl/sdl_error.rb +5 -0
  80. data/lib/SDLRuby/sdl/sdl_events.rb +470 -0
  81. data/lib/SDLRuby/sdl/sdl_hints.rb +9 -0
  82. data/lib/SDLRuby/sdl/sdl_keyboard.rb +12 -0
  83. data/lib/SDLRuby/sdl/sdl_locale.rb +8 -0
  84. data/lib/SDLRuby/sdl/sdl_message_box.rb +7 -0
  85. data/lib/SDLRuby/sdl/sdl_mouse.rb +32 -0
  86. data/lib/SDLRuby/sdl/sdl_palette.rb +12 -0
  87. data/lib/SDLRuby/sdl/sdl_pixels.rb +138 -0
  88. data/lib/SDLRuby/sdl/sdl_rect.rb +11 -0
  89. data/lib/SDLRuby/sdl/sdl_render.rb +35 -0
  90. data/lib/SDLRuby/sdl/sdl_rw_ops.rb +29 -0
  91. data/lib/SDLRuby/sdl/sdl_scancode.rb +255 -0
  92. data/lib/SDLRuby/sdl/sdl_surface.rb +27 -0
  93. data/lib/SDLRuby/sdl/sdl_version.rb +5 -0
  94. data/lib/SDLRuby/sdl/sdl_video.rb +104 -0
  95. data/lib/SDLRuby/sdl.rb +192 -0
  96. data/lib/SDLRuby/sdl_error.rb +8 -0
  97. data/lib/SDLRuby/surface/pixel_format.rb +51 -0
  98. data/lib/SDLRuby/surface/surface_renderer.rb +26 -0
  99. data/lib/SDLRuby/surface.rb +179 -0
  100. data/lib/SDLRuby/text_input.rb +38 -0
  101. data/lib/SDLRuby/texture.rb +93 -0
  102. data/lib/SDLRuby/ttf/include/SDL_ttf.h.rb +54 -0
  103. data/lib/SDLRuby/ttf/ttf.rb +41 -0
  104. data/lib/SDLRuby/ttf.rb +54 -0
  105. data/lib/SDLRuby/version.rb +5 -0
  106. data/lib/SDLRuby/window/accessor.rb +125 -0
  107. data/lib/SDLRuby/window/controller.rb +53 -0
  108. data/lib/SDLRuby/window/display_info.rb +48 -0
  109. data/lib/SDLRuby/window/flag.rb +42 -0
  110. data/lib/SDLRuby/window/hit_tester.rb +61 -0
  111. data/lib/SDLRuby/window/input.rb +68 -0
  112. data/lib/SDLRuby/window/shaper.rb +68 -0
  113. data/lib/SDLRuby/window/surfacer.rb +37 -0
  114. data/lib/SDLRuby/window/window_renderer.rb +31 -0
  115. data/lib/SDLRuby/window.rb +90 -0
  116. data/lib/SDLRuby.rb +16 -0
  117. data/sig/SDLRuby/event.rbs +104 -0
  118. data/sig/SDLRuby/pixel_formmater.rbs +24 -0
  119. data/sig/SDLRuby/rect.rbs +5 -0
  120. data/sig/SDLRuby/sdl.rbs +606 -0
  121. data/sig/SDLRuby.rbs +4 -0
  122. metadata +168 -0
@@ -0,0 +1,26 @@
1
+ module SDLRuby
2
+ class Surface
3
+ module SurfaceRenderer
4
+ include SDL
5
+
6
+ # サーフェス用のレンダラーは複数作ることができる。
7
+ # また、サーフェス側からはそれが見えない。
8
+ # サーフェスのインスタンスごとにレンダラーを保持する。
9
+ # そのためテクスチャーの共有ができない。
10
+ # このケースはサーフェスインスタンスをdup, cloneした時のみだろう。
11
+ # この分離が認められない場合は、サーフェス側のポインターの中にレンダラーを埋め込む。
12
+ #
13
+
14
+ def init_renderer(*)
15
+ ptr = SDL.SDL_CreateSoftwareRenderer(self)
16
+ raise SDLError if ptr.null?
17
+ ptr.free = SDL_DESTROY_RENDERER
18
+ @renderer = ptr
19
+ end
20
+
21
+ private def renderer = @renderer ||= init_renderer
22
+
23
+ def destroy_renderer = @renderer = @renderer.call_free
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,179 @@
1
+ require_relative 'palette'
2
+ require_relative 'pixel_formatter'
3
+ require_relative 'renderer'
4
+ require_relative 'surface/pixel_format'
5
+ require_relative 'surface/surface_renderer'
6
+
7
+ module SDLRuby
8
+ class Surface
9
+ include PixelFormatter, Renderer, SDL, SurfaceRenderer
10
+ extend Forwardable
11
+
12
+ class << self
13
+ include SDL
14
+
15
+ def load(src)
16
+ ptr = SDL.SDL_LoadBMP_RW(SDL.SDL_RWFromFile(src, "rb"), 1)
17
+ raise SDLError if ptr.null?
18
+
19
+ new(ptr)
20
+ end
21
+
22
+ def create(width, height, format = SDL_PIXELFORMAT_ARGB8888)
23
+ ptr = SDL.SDL_CreateRGBSurfaceWithFormat(0, width, height, 0, format)
24
+ raise SDLError if ptr.null?
25
+
26
+ new(ptr)
27
+ end
28
+ end
29
+
30
+ def initialize(ptr, add_ref: nil)
31
+ @st = SDL_Surface.new(ptr, SDL_FREE_SURFACE)
32
+ @st.refcount += 1 if add_ref
33
+
34
+ @format = PixelFormat.new(@st.format, add_ref: true)
35
+ end
36
+
37
+ def_delegators :@st, :h, :pitch, :refcount, :to_ptr, :w
38
+ def_delegators :@format, :format, :palette
39
+
40
+ def palette=(pal)
41
+ @format.palette = pal
42
+ end
43
+
44
+ def ==(other) = other.respond_to?(:to_ptr) && @st.to_ptr == other.to_ptr
45
+
46
+ def alpha_mod
47
+ a = SDL.tmp_value("Uint8")
48
+ err = SDL.SDL_GetSurfaceAlphaMod(self, a)
49
+ raise SDLError if err < 0
50
+ a.value
51
+ end
52
+
53
+ def alpha_mod=(n)
54
+ err = SDL.SDL_SetSurfaceAlphaMod(self, n)
55
+ raise SDLError if err < 0
56
+ end
57
+
58
+ def blend_mode
59
+ a = SDL.tmp_value("int")
60
+ err = SDL.SDL_GetSurfaceBlendMode(self, a)
61
+ raise SDLError if err < 0
62
+ a.value
63
+ end
64
+
65
+ def blend_mode=(blend)
66
+ err = SDL.SDL_SetSurfaceBlendMode(self, blend)
67
+ raise SDLError if err < 0
68
+ end
69
+
70
+ def blit(src, src_rect: nil, dst_rect: nil)
71
+ src_r &&= Rect[*src_rect]
72
+ dst_r &&= Rect[*dst_rect]
73
+
74
+ # src, dstのrectサイズが一致している場合、内部でSDL_BlitSurfaceを呼び出している。
75
+ # Blit, BlitScaled 呼び出しの分岐は不要。
76
+ #
77
+ err = SDL.SDL_UpperBlitScaled(src, src_r, self, dst_r)
78
+ raise SDLError if err < 0
79
+ end
80
+
81
+ def clear(color)
82
+ err = SDL.SDL_FillRect(self, nil, @format.to_pixel(color))
83
+ raise SDLError if err < 0
84
+ end
85
+
86
+ def clip
87
+ r = Rect[]
88
+ SDL.SDL_GetClipRect(self, r)
89
+ r.to_a
90
+ end
91
+
92
+ def clip=(rect)
93
+ SDL.SDL_SetClipRect(self, Rect[*rect])
94
+ end
95
+
96
+ def color_key
97
+ v = SDL.tmp_value("Uint32")
98
+ err = SDL.SDL_GetColorKey(self, v)
99
+ raise SDLError if err < 0
100
+
101
+ @format.to_color(v.value)
102
+ end
103
+
104
+ def color_key=(color)
105
+ err = if color
106
+ SDL.SDL_SetColorKey(self, 1, @format.to_pixel(color))
107
+ else
108
+ SDL.SDL_SetColorKey(self, 0, 0)
109
+ end
110
+ raise SDLError if err < 0
111
+ end
112
+
113
+ def color_key? = SDL.SDL_HasColorKey(self) == 1
114
+
115
+ def color_mod
116
+ r, g, b = SDL.tmp_value("Uint8", "Uint8", "Uint8")
117
+ err = SDL.SDL_GetSurfaceColorMod(self, r, g, b)
118
+ raise SDLError if err < 0
119
+
120
+ [r.value, g.value, b.value]
121
+ end
122
+
123
+ def color_mod=(color)
124
+ r, g, b = *color
125
+ err = SDL.SDL_SetSurfaceColorMod(self, r, g, b)
126
+ raise SDLError if err < 0
127
+ end
128
+
129
+ def fill(color, *i)
130
+ size = f.count
131
+ count = size / 4
132
+ raise ArgumentError if count.zero? || (size % 4).nonzero?
133
+ ptr = i.pack("i*")
134
+
135
+ err = SDL.SDL_FillRects(self, ptr, count, @format.to_pixel(color))
136
+ raise SDLError if err < 0
137
+ end
138
+
139
+ def lock
140
+ err = SDL.SDL_LockSurface(self)
141
+ raise SDLError if err < 0
142
+ end
143
+
144
+ def rle? = SDL.SDL_HasSurfaceRLE(self) != 0
145
+
146
+ def rle=(b)
147
+ err = SDL.SDL_SetSurfaceRLE(self, b ? 1 : 0)
148
+ raise SDLError if err < 0
149
+ end
150
+
151
+ def save(file)
152
+ err = SDL.SDL_SaveBMP_RW(self, SDL.SDL_RWFromFile(src, "rb"), 1)
153
+ raise SDLError if err < 0
154
+ end
155
+
156
+ def size = [w, h]
157
+
158
+ def synchronize(&)
159
+ lock
160
+ begin
161
+ yield
162
+ ensure
163
+ unlock
164
+ end
165
+ end
166
+
167
+ def to_s = synchronize { @st.pixels.to_str(h * pitch) }
168
+
169
+ def to_surface(format = nil)
170
+ return self unless format
171
+
172
+ ptr = SDL.SDL_ConvertSurface(self, format, 0)
173
+ raise SDLError if ptr.null?
174
+ Surface.new(ptr)
175
+ end
176
+
177
+ def unlock = SDL.SDL_UnlockSurface(self)
178
+ end
179
+ end
@@ -0,0 +1,38 @@
1
+ module SDLRuby
2
+ module TextInput
3
+ class << self
4
+ include SDL
5
+
6
+ # テキスト入力イベントが有効かチェックする
7
+ def active? = SDL.SDL_IsTextInputActive != 0
8
+
9
+ # コンポジションウィンドウ/IMEをIMEを無効化せずに閉じる
10
+ #
11
+ def hide = SDL.SDL_ClearComposition
12
+
13
+ # テキスト入力で使う領域を設定する
14
+ # ※ 表示はされるが指定が行われない。調査が必要。
15
+ # もし指定ができないのならば show メソッドに名前を変えた方が良い。
16
+ # NOTICE:
17
+ # システムの IMEウィンドウを使う場合はSDL_HINT_IME_SHOW_UIヒントを1に設定する。
18
+ # これはウィンドウの生成前に行う必要がある。※SDL_Initの後でも問題はない。
19
+ #
20
+ def rect=(rect)
21
+ SDL.SDL_SetTextInputRect(Rect[*rect])
22
+ end
23
+
24
+ # 環境がスクリーンキーボードに対応しているかチェックする
25
+ def screen_keyboard_supported? = SDL.SDL_HasScreenKeyboardSupport != 0
26
+
27
+ # スクリーンキーボードが指定のウィンドウに表示されているかチェックする
28
+ def screen_keyboard_shown?(window) = SDL.SDL_IsScreenKeyboardShown(window) != 0
29
+
30
+ # IMEコンポジット(変換中ウィンドウ・矩形)または変換候補が現在表示されているかを戻す
31
+ def shown? = SDL.SDL_IsTextInputShown != 0
32
+
33
+ def start = SDL.SDL_StartTextInput
34
+
35
+ def stop = SDL.SDL_StopTextInput
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,93 @@
1
+ module SDLRuby
2
+ class Texture
3
+ require_relative 'pixel_formatter'
4
+
5
+ include PixelFormatter, SDL
6
+
7
+ attr_reader :format, :h, :w
8
+
9
+ def initialize(ptr)
10
+ ptr.free = SDL_DESTROY_TEXTURE
11
+ @ptr = ptr
12
+
13
+ query
14
+ end
15
+
16
+ def alpha_mod
17
+ v = SDL.tmp_value("Uint8")
18
+ err = SDL.SDL_GetTextureAlphaMod(self, v)
19
+ raise SDLError if err < 0
20
+
21
+ v.value
22
+ end
23
+
24
+ def alpha_mod=(n)
25
+ err = SDL.SDL_SetTextureAlphaMod(self, n)
26
+ raise SDLError if err < 0
27
+ end
28
+
29
+ def blend_mode
30
+ v = SDL.tmp_value("int")
31
+ err = SDL.SDL_GetTextureBlendMode(self, v)
32
+ raise SDLError if err < 0
33
+
34
+ v.value
35
+ end
36
+
37
+ def blend_mode=(n)
38
+ err = SDL.SDL_SetTextureBlendMode(self, n)
39
+ raise SDLError if err < 0
40
+ end
41
+
42
+ def color_mod
43
+ r, g, b = SDL.tmp_value("Uint8", "Uint8", "Uint8")
44
+ err = SDL.SDL_GetTextureColorMod(self, r, g, b)
45
+ raise SDLError if err < 0
46
+
47
+ [r.value, g.value, b.value]
48
+ end
49
+
50
+ def color_mod=(color)
51
+ r, g, b = *color
52
+ err = SDL.SDL_SetTextureColorMod(self, r, g, b)
53
+ raise SDLError if err < 0
54
+ end
55
+
56
+ private def query
57
+ format, access, w, h = SDL.tmp_value("Uint32", "int", "int", "int")
58
+ err = SDL.SDL_QueryTexture(@ptr, format, access, w, h)
59
+ raise SDLError if err < 0
60
+
61
+ @format = format.value
62
+ @access = access.value
63
+ @w = w.value
64
+ @h = h.value
65
+ end
66
+
67
+ def scale_mode
68
+ v = SDL.tmp_value("int")
69
+ err = SDL.SDL_GetTextureScaleMode(self, v)
70
+ raise SDLError if err < 0
71
+
72
+ v.value
73
+ end
74
+
75
+ def scale_mode=(n)
76
+ err = SDL.SDL_SetTextureScaleMode(self, n)
77
+ raise SDLError if err < 0
78
+ end
79
+
80
+ def size = [@w, @h]
81
+
82
+ def to_ptr = @ptr
83
+
84
+ def to_surface
85
+ ptr = SDL.tmp_value("void*")
86
+ err = SDL.SDL_LockTextureToSurface(self, nil, ptr)
87
+ raise SDLError if err < 0
88
+ SDL.SDL_UnlockTexture(self)
89
+
90
+ Surface.new(ptr.value)
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,54 @@
1
+ module SDLRuby::TTF
2
+ typealias "TTF_Font", "struct _TTF_Font"
3
+ typealias "TTF_Direction", "int"
4
+ extern "const SDL_version * TTF_Linked_Version(void)"
5
+ extern "void TTF_GetFreeTypeVersion(int *major, int *minor, int *patch)"
6
+ extern "void TTF_GetHarfBuzzVersion(int *major, int *minor, int *patch)"
7
+ extern "void TTF_ByteSwappedUNICODE(SDL_bool swapped)"
8
+ extern "int TTF_Init(void)"
9
+ extern "TTF_Font * TTF_OpenFont(const char *file, int ptsize)"
10
+ extern "TTF_Font * TTF_OpenFontIndex(const char *file, int ptsize, long index)"
11
+ extern "TTF_Font * TTF_OpenFontRW(SDL_RWops *src, int freesrc, int ptsize)"
12
+ extern "TTF_Font * TTF_OpenFontIndexRW(SDL_RWops *src, int freesrc, int ptsize, long index)"
13
+ extern "TTF_Font * TTF_OpenFontDPI(const char *file, int ptsize, unsigned int hdpi, unsigned int vdpi)"
14
+ extern "TTF_Font * TTF_OpenFontIndexDPI(const char *file, int ptsize, long index, unsigned int hdpi, unsigned int vdpi)"
15
+ extern "TTF_Font * TTF_OpenFontDPIRW(SDL_RWops *src, int freesrc, int ptsize, unsigned int hdpi, unsigned int vdpi)"
16
+ extern "TTF_Font * TTF_OpenFontIndexDPIRW(SDL_RWops *src, int freesrc, int ptsize, long index, unsigned int hdpi, unsigned int vdpi)"
17
+ extern "int TTF_SetFontSize(TTF_Font *font, int ptsize)"
18
+ extern "int TTF_SetFontSizeDPI(TTF_Font *font, int ptsize, unsigned int hdpi, unsigned int vdpi)"
19
+ extern "int TTF_GetFontStyle(const TTF_Font *font)"
20
+ extern "void TTF_SetFontStyle(TTF_Font *font, int style)"
21
+ extern "int TTF_GetFontOutline(const TTF_Font *font)"
22
+ extern "void TTF_SetFontOutline(TTF_Font *font, int outline)"
23
+ extern "int TTF_GetFontHinting(const TTF_Font *font)"
24
+ extern "void TTF_SetFontHinting(TTF_Font *font, int hinting)"
25
+ extern "int TTF_GetFontWrappedAlign(const TTF_Font *font)"
26
+ extern "void TTF_SetFontWrappedAlign(TTF_Font *font, int align)"
27
+ extern "int TTF_FontHeight(const TTF_Font *font)"
28
+ extern "int TTF_FontAscent(const TTF_Font *font)"
29
+ extern "int TTF_FontDescent(const TTF_Font *font)"
30
+ extern "int TTF_FontLineSkip(const TTF_Font *font)"
31
+ extern "int TTF_GetFontKerning(const TTF_Font *font)"
32
+ extern "void TTF_SetFontKerning(TTF_Font *font, int allowed)"
33
+ extern "long TTF_FontFaces(const TTF_Font *font)"
34
+ extern "int TTF_FontFaceIsFixedWidth(const TTF_Font *font)"
35
+ extern "const char * TTF_FontFaceFamilyName(const TTF_Font *font)"
36
+ extern "const char * TTF_FontFaceStyleName(const TTF_Font *font)"
37
+ extern "int TTF_GlyphIsProvided32(TTF_Font *font, Uint32 ch)"
38
+ extern "int TTF_GlyphMetrics32(TTF_Font *font, Uint32 ch, int *minx, int *maxx, int *miny, int *maxy, int *advance)"
39
+ extern "int TTF_SizeUTF8(TTF_Font *font, const char *text, int *w, int *h)"
40
+ extern "int TTF_MeasureUTF8(TTF_Font *font, const char *text, int measure_width, int *extent, int *count)"
41
+ extern "SDL_Surface * TTF_RenderUTF8_Solid(TTF_Font *font, const char *text, SDL_Color fg)"
42
+ extern "SDL_Surface * TTF_RenderUTF8_Solid_Wrapped(TTF_Font *font, const char *text, SDL_Color fg, Uint32 wrapLength)"
43
+ extern "SDL_Surface * TTF_RenderUTF8_Shaded(TTF_Font *font, const char *text, SDL_Color fg, SDL_Color bg)"
44
+ extern "SDL_Surface * TTF_RenderUTF8_Shaded_Wrapped(TTF_Font *font, const char *text, SDL_Color fg, SDL_Color bg, Uint32 wrapLength)"
45
+ extern "SDL_Surface * TTF_RenderUTF8_Blended(TTF_Font *font, const char *text, SDL_Color fg)"
46
+ extern "SDL_Surface * TTF_RenderUTF8_Blended_Wrapped(TTF_Font *font, const char *text, SDL_Color fg, Uint32 wrapLength)"
47
+ extern "SDL_Surface * TTF_RenderUTF8_LCD(TTF_Font *font, const char *text, SDL_Color fg, SDL_Color bg)"
48
+ extern "SDL_Surface * TTF_RenderUTF8_LCD_Wrapped(TTF_Font *font, const char *text, SDL_Color fg, SDL_Color bg, Uint32 wrapLength)"
49
+ extern "void TTF_CloseFont(TTF_Font *font)"
50
+ extern "void TTF_Quit(void)"
51
+ extern "int TTF_WasInit(void)"
52
+ extern "int TTF_SetFontDirection(TTF_Font *font, TTF_Direction direction)"
53
+ extern "int TTF_SetFontScriptName(TTF_Font *font, const char *script)"
54
+ end
@@ -0,0 +1,41 @@
1
+ module SDLRuby
2
+ module TTF
3
+ require_relative "include/SDL_ttf.h"
4
+
5
+ # ZERO WIDTH NO-BREAKSPACE (Unicode byte order mark)
6
+ #
7
+ UNICODE_BOM_NATIVE = 0xFEFF
8
+ UNICODE_BOM_SWAPPED = 0xFFFE
9
+
10
+ # Font style flags
11
+ #
12
+ TTF_STYLE_NORMAL = 0x00
13
+ TTF_STYLE_BOLD = 0x01
14
+ TTF_STYLE_ITALIC = 0x02
15
+ TTF_STYLE_UNDERLINE = 0x04
16
+ TTF_STYLE_STRIKETHROUGH = 0x08
17
+
18
+ # Hinting flags
19
+ #
20
+ TTF_HINTING_NORMAL = 0
21
+ TTF_HINTING_LIGHT = 1
22
+ TTF_HINTING_MONO = 2
23
+ TTF_HINTING_NONE = 3
24
+ TTF_HINTING_LIGHT_SUBPIXEL = 4
25
+
26
+ # Special layout option for rendering wrapped text
27
+ #
28
+ TTF_WRAPPED_ALIGN_LEFT = 0
29
+ TTF_WRAPPED_ALIGN_CENTER = 1
30
+ TTF_WRAPPED_ALIGN_RIGHT = 2
31
+
32
+ # Direction flags
33
+ #
34
+ TTF_DIRECTION_LTR = 0
35
+ TTF_DIRECTION_RTL = 1
36
+ TTF_DIRECTION_TTB = 2
37
+ TTF_DIRECTION_BTT = 3
38
+
39
+ TTF_CLOSE_FONT = import_symbol("TTF_CloseFont").to_int
40
+ end
41
+ end
@@ -0,0 +1,54 @@
1
+ require 'fiddle/import'
2
+
3
+ module SDLRuby
4
+ module TTF
5
+ include SDL
6
+ extend Fiddle::Importer
7
+
8
+ dlload "SDL2_ttf"
9
+
10
+ typealias "Uint32", "uint32_t"
11
+ typealias "SDL_bool", "int"
12
+ typealias "SDL_Color", "void*"
13
+
14
+ require_relative 'ttf/ttf'
15
+
16
+ class << self
17
+ def byte_swapped_unicode=(b)
18
+ TTF.TTF_ByteSwappedUNICODE(b ? 1 : 0)
19
+ end
20
+
21
+ def free_type_version
22
+ major, minor, patch = SDL.tmp_value("int", "int", "int")
23
+ TTF.TTF_GetFreeTypeVersion(major, minor, patch)
24
+
25
+ "#{major}.#{minor}.#{patch}"
26
+ end
27
+
28
+ def harf_bazz_version
29
+ major, minor, patch = SDL.tmp_value("int", "int", "int")
30
+ TTF.TTF_GetHarfBuzzVersion(major, minor, patch)
31
+
32
+ "#{major}.#{minor}.#{patch}"
33
+ end
34
+
35
+ def init
36
+ return if init?
37
+ err = TTF.TTF_Init
38
+ raise SDLError if err < 0
39
+ end
40
+
41
+ # 初期化した回数を戻す。その回数分だけquitを呼ばなければならない。
42
+ #
43
+ def init? = TTF.TTF_WasInit.nonzero?
44
+
45
+ # 使用中のフォントがある場合、quitを呼ぶとフォントを閉じることができなくなる!
46
+ # これを呼び出す前に全てのフォントを閉じておくこと。
47
+ # しかし、Rubyがポインターを管理するためアプリケーションでは制御できないだろう・・・
48
+ #
49
+ def quit = TTF.TTF_Quit
50
+
51
+ def version = SDL_version.new(TTF.TTF_Linked_Version).to_a.join(".")
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SDLRuby
4
+ VERSION = "0.1.0"
5
+ end
@@ -0,0 +1,125 @@
1
+ module SDLRuby
2
+ class Window
3
+ module Accessor
4
+ def boarder_size
5
+ t, l, b, r = SDL.tmp_value("int", "int", "int", "int")
6
+ err = SDL.SDL_GetWindowBordersSize(self, t, l, b, r)
7
+ raise SDLError if err < 0
8
+
9
+ [t.value, l.value, b.value, r.value]
10
+ end
11
+
12
+ def h
13
+ v = SDL.tmp_value("int")
14
+ SDL.SDL_GetWindowSize(self, nil, v)
15
+ v.value
16
+ end
17
+
18
+ def h=(n)
19
+ SDL.SDL_SetWindowSize(self, w, n)
20
+ end
21
+
22
+ def icon=(surface)
23
+ SDL.SDL_SetWindowIcon(self, surface)
24
+ end
25
+
26
+ def maximum_size
27
+ w, h = SDL.tmp_value("int", "int")
28
+ SDL.SDL_GetWindowMaximumSize(self, w, h)
29
+
30
+ [w.value, h.value]
31
+ end
32
+
33
+ def maximum_size=(wh)
34
+ SDL.SDL_SetWindowMaximumSize(self, *wh)
35
+ end
36
+
37
+ def minimum_size
38
+ w, h = SDL.tmp_value("int", "int")
39
+ SDL.SDL_GetWindowMinimumSize(self, w, h)
40
+
41
+ [w.value, h.value]
42
+ end
43
+
44
+ def minimum_size=(wh)
45
+ SDL.SDL_SetWindowMinimumSize(self, *wh)
46
+ end
47
+
48
+ def opacity
49
+ f = SDL.tmp_value("float")
50
+ err = SDL.SDL_GetWindowOpacity(self, f)
51
+ raise SDLError if err < 0
52
+
53
+ f.value
54
+ end
55
+
56
+ def opacity=(f)
57
+ err = SDL.SDL_SetWindowOpacity(self, f)
58
+ raise SDLError if err < 0
59
+ end
60
+
61
+ def pos
62
+ vx, vy = SDL.tmp_value("int", "int")
63
+ SDL.SDL_GetWindowPosition(self, vx, vy)
64
+ [vx.value, vy.value]
65
+ end
66
+
67
+ def pos=(xy)
68
+ SDL.SDL_SetWindowPosition(self, *xy)
69
+ end
70
+
71
+ def size
72
+ vw, vh = SDL.tmp_value("int", "int")
73
+ SDL.SDL_GetWindowSize(self, vw, vh)
74
+ [vw.value, vh.value]
75
+ end
76
+
77
+ def size=(wh)
78
+ SDL.SDL_SetWindowSize(self, *wh)
79
+ end
80
+
81
+ def size_in_pixels
82
+ vw, vh = SDL.tmp_value("int", "int")
83
+ SDL.SDL_GetWindowSizeInPixels(self, vw, vh)
84
+
85
+ [vw.value, vh.value]
86
+ end
87
+
88
+ def title = SDL.SDL_GetWindowTitle(self).to_s.force_encoding("UTF-8")
89
+
90
+ def title=(s)
91
+ SDL.SDL_SetWindowTitle(self, s.encode("UTF-8"))
92
+ end
93
+
94
+ def w
95
+ v = SDL.tmp_value("int")
96
+ SDL.SDL_GetWindowSize(self, v, nil)
97
+ v.value
98
+ end
99
+
100
+ def w=(n)
101
+ SDL.SDL_SetWindowSize(self, n, h)
102
+ end
103
+
104
+ def x
105
+ v = SDL.tmp_value("int")
106
+ SDL.SDL_GetWindowPosition(self, v, nil)
107
+ v.value
108
+ end
109
+
110
+ def x=(n)
111
+ SDL.SDL_SetWindowPosition(self, n, y)
112
+ end
113
+
114
+ def y
115
+ v = SDL.tmp_value("int")
116
+ SDL.SDL_GetWindowPosition(self, nil, v)
117
+ v.value
118
+ end
119
+
120
+ def y=(n)
121
+ SDL.SDL_SetWindowPosition(self, x, n)
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,53 @@
1
+ module SDLRuby
2
+ class Window
3
+ module Controller
4
+ def always_on_top = SDL.SDL_SetWindowAlwaysOnTop(self)
5
+
6
+ def always_on_top? = flags & SDL_WINDOW_ALWAYS_ON_TOP != 0
7
+
8
+ def border=(obj)
9
+ SDL.SDL_SetWindowBordered(self, obj ? 1 : 0)
10
+ end
11
+
12
+ def borderless? = flags & SDL_WINDOW_BORDERLESS != 0
13
+
14
+ def fullscreen=(obj)
15
+ err = SDL.SDL_SetWindowFullscreen(self, obj ? SDL_WINDOW_FULLSCREEN : 0)
16
+ raise SDLError if err < 0
17
+ end
18
+
19
+ def fullscreen? = flags & SDL_WINDOW_FULLSCREEN != 0
20
+
21
+ def fullscreen_desktop=(obj)
22
+ err = SDL.SDL_SetWindowFullscreen(self, obj ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0)
23
+ raise SDLError if err < 0
24
+ end
25
+
26
+ def fullscreen_desktop? = flags & SDL_WINDOW_FULLSCREEN_DESKTOP != 0
27
+
28
+ def hide = SDL.SDL_HideWindow(self)
29
+
30
+ def hidden? = flags & SDL_WINDOW_HIDDEN != 0
31
+
32
+ def maximize = SDL.SDL_MaximizeWindow(self)
33
+
34
+ def maximized? = flags & SDL_WINDOW_MAXIMIZED != 0
35
+
36
+ def minimize = SDL.SDL_MinimizeWindow(self)
37
+
38
+ def minimized? = flags & SDL_WINDOW_MINIMIZED != 0
39
+
40
+ def resizable=(obj)
41
+ SDL.SDL_SetWindowResizable(self, obj ? 1 : 0)
42
+ end
43
+
44
+ def resizable? = flags & SDL_WINDOW_RESIZABLE != 0
45
+
46
+ def restore = SDL.SDL_RestoreWindow(self)
47
+
48
+ def show = SDL.SDL_ShowWindow(self)
49
+
50
+ def shown? = flags & SDL_WINDOW_SHOWN != 0
51
+ end
52
+ end
53
+ end