ruby2d 0.12.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (619) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +7 -0
  3. data/README.md +141 -0
  4. data/USAGE.md +2435 -0
  5. data/assets/Rakefile +637 -0
  6. data/assets/build_support/CMakeLists.txt +94 -0
  7. data/assets/build_support/mruby/build_config.rb +34 -0
  8. data/assets/build_support/mruby/build_config_wasm.rb +30 -0
  9. data/assets/build_support/sdl_test.c +174 -0
  10. data/assets/deps.yaml +16 -0
  11. data/assets/platform/include/SDL3/SDL.h +91 -0
  12. data/assets/platform/include/SDL3/SDL_assert.h +705 -0
  13. data/assets/platform/include/SDL3/SDL_asyncio.h +550 -0
  14. data/assets/platform/include/SDL3/SDL_atomic.h +692 -0
  15. data/assets/platform/include/SDL3/SDL_audio.h +2370 -0
  16. data/assets/platform/include/SDL3/SDL_begin_code.h +553 -0
  17. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_bits.h +47 -27
  18. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_blendmode.h +59 -55
  19. data/assets/platform/include/SDL3/SDL_camera.h +535 -0
  20. data/assets/platform/include/SDL3/SDL_clipboard.h +331 -0
  21. data/assets/{include/SDL2/close_code.h → platform/include/SDL3/SDL_close_code.h} +9 -8
  22. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_copying.h +3 -1
  23. data/assets/platform/include/SDL3/SDL_cpuinfo.h +374 -0
  24. data/assets/platform/include/SDL3/SDL_dialog.h +343 -0
  25. data/assets/platform/include/SDL3/SDL_dlopennote.h +234 -0
  26. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_egl.h +11 -8
  27. data/assets/platform/include/SDL3/SDL_endian.h +645 -0
  28. data/assets/platform/include/SDL3/SDL_error.h +226 -0
  29. data/assets/platform/include/SDL3/SDL_events.h +1645 -0
  30. data/assets/platform/include/SDL3/SDL_filesystem.h +537 -0
  31. data/assets/platform/include/SDL3/SDL_gamepad.h +1656 -0
  32. data/assets/platform/include/SDL3/SDL_gpu.h +4608 -0
  33. data/assets/platform/include/SDL3/SDL_guid.h +106 -0
  34. data/assets/platform/include/SDL3/SDL_haptic.h +1461 -0
  35. data/assets/platform/include/SDL3/SDL_hidapi.h +571 -0
  36. data/assets/platform/include/SDL3/SDL_hints.h +5001 -0
  37. data/assets/platform/include/SDL3/SDL_init.h +507 -0
  38. data/assets/platform/include/SDL3/SDL_intrin.h +410 -0
  39. data/assets/platform/include/SDL3/SDL_iostream.h +1379 -0
  40. data/assets/platform/include/SDL3/SDL_joystick.h +1385 -0
  41. data/assets/platform/include/SDL3/SDL_keyboard.h +608 -0
  42. data/assets/platform/include/SDL3/SDL_keycode.h +347 -0
  43. data/assets/platform/include/SDL3/SDL_loadso.h +145 -0
  44. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_locale.h +40 -24
  45. data/assets/platform/include/SDL3/SDL_log.h +541 -0
  46. data/assets/platform/include/SDL3/SDL_main.h +704 -0
  47. data/assets/platform/include/SDL3/SDL_main_impl.h +151 -0
  48. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_messagebox.h +85 -48
  49. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_metal.h +29 -29
  50. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_misc.h +13 -12
  51. data/assets/platform/include/SDL3/SDL_mouse.h +813 -0
  52. data/assets/platform/include/SDL3/SDL_mutex.h +1117 -0
  53. data/assets/platform/include/SDL3/SDL_oldnames.h +1339 -0
  54. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengl.h +1247 -278
  55. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengl_glext.h +5 -1
  56. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles.h +6 -7
  57. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2.h +10 -11
  58. data/assets/platform/include/SDL3/SDL_pen.h +198 -0
  59. data/assets/platform/include/SDL3/SDL_pixels.h +1441 -0
  60. data/assets/{include/SDL2/SDL_test_log.h → platform/include/SDL3/SDL_platform.h} +25 -26
  61. data/assets/platform/include/SDL3/SDL_platform_defines.h +497 -0
  62. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_power.h +40 -20
  63. data/assets/platform/include/SDL3/SDL_process.h +441 -0
  64. data/assets/platform/include/SDL3/SDL_properties.h +572 -0
  65. data/assets/platform/include/SDL3/SDL_rect.h +528 -0
  66. data/assets/platform/include/SDL3/SDL_render.h +3028 -0
  67. data/assets/platform/include/SDL3/SDL_revision.h +59 -0
  68. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_scancode.h +59 -68
  69. data/assets/platform/include/SDL3/SDL_sensor.h +321 -0
  70. data/assets/platform/include/SDL3/SDL_stdinc.h +6186 -0
  71. data/assets/platform/include/SDL3/SDL_storage.h +686 -0
  72. data/assets/platform/include/SDL3/SDL_surface.h +1769 -0
  73. data/assets/platform/include/SDL3/SDL_system.h +840 -0
  74. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test.h +16 -22
  75. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_assert.h +27 -34
  76. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_common.h +109 -52
  77. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_compare.h +22 -14
  78. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_crc32.h +27 -30
  79. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_font.h +50 -49
  80. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_fuzzer.h +64 -79
  81. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_harness.h +47 -30
  82. data/assets/platform/include/SDL3/SDL_test_log.h +83 -0
  83. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_md5.h +21 -28
  84. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_memory.h +19 -16
  85. data/assets/platform/include/SDL3/SDL_thread.h +602 -0
  86. data/assets/platform/include/SDL3/SDL_time.h +249 -0
  87. data/assets/platform/include/SDL3/SDL_timer.h +454 -0
  88. data/assets/platform/include/SDL3/SDL_touch.h +184 -0
  89. data/assets/platform/include/SDL3/SDL_tray.h +544 -0
  90. data/assets/platform/include/SDL3/SDL_version.h +198 -0
  91. data/assets/platform/include/SDL3/SDL_video.h +3497 -0
  92. data/assets/platform/include/SDL3/SDL_vulkan.h +287 -0
  93. data/assets/platform/include/SDL3_image/SDL_image.h +3328 -0
  94. data/assets/platform/include/SDL3_mixer/SDL_mixer.h +3369 -0
  95. data/assets/platform/include/SDL3_ttf/SDL_textengine.h +181 -0
  96. data/assets/platform/include/SDL3_ttf/SDL_ttf.h +2833 -0
  97. data/assets/{include → platform/include}/mrbconf.h +42 -31
  98. data/assets/{include → platform/include}/mruby/array.h +3 -4
  99. data/assets/{include → platform/include}/mruby/boxing_nan.h +10 -0
  100. data/assets/platform/include/mruby/boxing_no.h +59 -0
  101. data/assets/{include → platform/include}/mruby/boxing_word.h +72 -26
  102. data/assets/platform/include/mruby/class.h +157 -0
  103. data/assets/{include → platform/include}/mruby/common.h +30 -1
  104. data/assets/{include → platform/include}/mruby/compile.h +52 -74
  105. data/assets/{include → platform/include}/mruby/data.h +2 -2
  106. data/assets/{include → platform/include}/mruby/debug.h +12 -5
  107. data/assets/{include → platform/include}/mruby/dump.h +7 -9
  108. data/assets/{include → platform/include}/mruby/endian.h +1 -1
  109. data/assets/platform/include/mruby/error.h +173 -0
  110. data/assets/platform/include/mruby/gc.h +79 -0
  111. data/assets/{include → platform/include}/mruby/hash.h +1 -7
  112. data/assets/platform/include/mruby/internal.h +282 -0
  113. data/assets/platform/include/mruby/irep.h +143 -0
  114. data/assets/{include → platform/include}/mruby/istruct.h +1 -1
  115. data/assets/platform/include/mruby/khash.h +455 -0
  116. data/assets/platform/include/mruby/mempool.h +19 -0
  117. data/assets/{include → platform/include}/mruby/numeric.h +7 -10
  118. data/assets/platform/include/mruby/object.h +51 -0
  119. data/assets/{include → platform/include}/mruby/opcode.h +5 -5
  120. data/assets/{include → platform/include}/mruby/ops.h +19 -6
  121. data/assets/platform/include/mruby/presym/id.h +1447 -0
  122. data/assets/{include → platform/include}/mruby/presym/scanning.h +10 -7
  123. data/assets/platform/include/mruby/presym/table.h +2893 -0
  124. data/assets/platform/include/mruby/presym.h +65 -0
  125. data/assets/platform/include/mruby/proc.h +184 -0
  126. data/assets/{include → platform/include}/mruby/range.h +0 -2
  127. data/assets/{include → platform/include}/mruby/string.h +33 -53
  128. data/assets/platform/include/mruby/throw.h +81 -0
  129. data/assets/{include → platform/include}/mruby/value.h +64 -29
  130. data/assets/{include → platform/include}/mruby/variable.h +6 -23
  131. data/assets/{include → platform/include}/mruby/version.h +7 -7
  132. data/assets/{include → platform/include}/mruby.h +238 -116
  133. data/assets/platform/macos-arm64/bin/mrbc +0 -0
  134. data/assets/platform/macos-arm64/lib/libSDL3.a +0 -0
  135. data/assets/platform/macos-arm64/lib/libSDL3_image.a +0 -0
  136. data/assets/platform/macos-arm64/lib/libSDL3_mixer.a +0 -0
  137. data/assets/platform/macos-arm64/lib/libSDL3_ttf.a +0 -0
  138. data/assets/platform/macos-arm64/lib/libmruby.a +0 -0
  139. data/assets/platform/wasm/lib/libFLAC.a +0 -0
  140. data/assets/platform/wasm/lib/libSDL3.a +0 -0
  141. data/assets/platform/wasm/lib/libSDL3_image.a +0 -0
  142. data/assets/platform/wasm/lib/libSDL3_mixer.a +0 -0
  143. data/assets/platform/wasm/lib/libSDL3_ttf.a +0 -0
  144. data/assets/platform/wasm/lib/libfreetype.a +0 -0
  145. data/assets/platform/wasm/lib/libharfbuzz.a +0 -0
  146. data/assets/platform/wasm/lib/libmruby.a +0 -0
  147. data/assets/platform/wasm/lib/libogg.a +0 -0
  148. data/assets/platform/wasm/lib/libplutosvg.a +0 -0
  149. data/assets/platform/wasm/lib/libplutovg.a +0 -0
  150. data/assets/platform/wasm/lib/libpng.a +0 -0
  151. data/assets/platform/wasm/lib/libpng16.a +0 -0
  152. data/assets/platform/wasm/lib/libvorbis.a +0 -0
  153. data/assets/platform/wasm/lib/libvorbisfile.a +0 -0
  154. data/assets/platform/wasm/lib/libzlibstatic.a +0 -0
  155. data/assets/platform/windows-arm64-mingw-ucrt/bin/mrbc.exe +0 -0
  156. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3.a +0 -0
  157. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_image.a +0 -0
  158. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_mixer.a +0 -0
  159. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_ttf.a +0 -0
  160. data/assets/platform/windows-arm64-mingw-ucrt/lib/libmruby.a +0 -0
  161. data/assets/platform/windows-x86_64-mingw-ucrt/bin/mrbc.exe +0 -0
  162. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3.a +0 -0
  163. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_image.a +0 -0
  164. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_mixer.a +0 -0
  165. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_ttf.a +0 -0
  166. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libmruby.a +0 -0
  167. data/assets/resources/fonts/outfit/OFL.txt +93 -0
  168. data/assets/resources/fonts/outfit/outfit.ttf +0 -0
  169. data/assets/resources/fonts/roboto_mono/OFL.txt +91 -0
  170. data/assets/resources/fonts/roboto_mono/roboto_mono.ttf +0 -0
  171. data/assets/resources/icons/icon.icns +0 -0
  172. data/assets/resources/icons/icon.png +0 -0
  173. data/assets/resources/spritesheets/License.txt +28 -0
  174. data/assets/resources/spritesheets/spritesheet-backgrounds.png +0 -0
  175. data/assets/resources/spritesheets/spritesheet-backgrounds.xml +16 -0
  176. data/assets/resources/spritesheets/spritesheet-characters.png +0 -0
  177. data/assets/resources/spritesheets/spritesheet-characters.xml +47 -0
  178. data/assets/resources/spritesheets/spritesheet-enemies.png +0 -0
  179. data/assets/resources/spritesheets/spritesheet-enemies.xml +62 -0
  180. data/assets/resources/spritesheets/spritesheet-tiles.png +0 -0
  181. data/assets/resources/spritesheets/spritesheet-tiles.xml +316 -0
  182. data/assets/{wasm → resources/web}/template.html +1 -1
  183. data/assets/target.rb +131 -0
  184. data/bin/ruby2d +281 -82
  185. data/examples/astar.rb +269 -0
  186. data/examples/asteroids.rb +403 -0
  187. data/examples/bezier_editor.rb +96 -0
  188. data/examples/boids.rb +191 -0
  189. data/examples/bouncing_balls.rb +119 -0
  190. data/examples/breakout.rb +186 -0
  191. data/examples/constellations.rb +100 -0
  192. data/examples/dashboard.rb +133 -0
  193. data/examples/double_pendulum.rb +254 -0
  194. data/examples/falling_sand.rb +291 -0
  195. data/examples/fireworks.rb +110 -0
  196. data/examples/fluid_dynamics.rb +340 -0
  197. data/examples/fourier_epicycles.rb +142 -0
  198. data/examples/fractal_tree.rb +326 -0
  199. data/examples/game_of_life.rb +148 -0
  200. data/examples/gamepads.rb +333 -0
  201. data/examples/hill_driver.rb +613 -0
  202. data/examples/logo_animation.rb +251 -0
  203. data/examples/lorenz_attractor.rb +115 -0
  204. data/examples/mandelbrot.rb +207 -0
  205. data/examples/marching_squares.rb +200 -0
  206. data/examples/maze.rb +323 -0
  207. data/examples/nbody.rb +338 -0
  208. data/examples/outrun.rb +391 -0
  209. data/examples/pixel_paint.rb +313 -0
  210. data/examples/platformer.rb +335 -0
  211. data/examples/ray_casting_maze.rb +175 -0
  212. data/examples/shadow_casting.rb +151 -0
  213. data/examples/shape_recognizer.rb +908 -0
  214. data/examples/snake.rb +144 -0
  215. data/examples/sprite_sheets.rb +246 -0
  216. data/examples/swarm.rb +206 -0
  217. data/examples/tsp_annealing.rb +104 -0
  218. data/examples/ui_controls.rb +163 -0
  219. data/examples/wireframe_3d.rb +139 -0
  220. data/ext/ruby2d/audio.c +324 -0
  221. data/ext/ruby2d/canvas.c +1715 -494
  222. data/ext/ruby2d/ext.c +541 -0
  223. data/ext/ruby2d/extconf.rb +122 -145
  224. data/ext/ruby2d/font.c +566 -20
  225. data/ext/ruby2d/fps.c +92 -0
  226. data/ext/ruby2d/image.c +466 -41
  227. data/ext/ruby2d/ruby2d.c +374 -1890
  228. data/ext/ruby2d/ruby2d.h +840 -460
  229. data/ext/ruby2d/shapes.c +931 -101
  230. data/ext/ruby2d/text.c +586 -21
  231. data/ext/ruby2d/window.c +1693 -283
  232. data/lib/ruby2d/atlas_parser.rb +194 -0
  233. data/lib/ruby2d/audio.rb +73 -0
  234. data/lib/ruby2d/benchmark.rb +259 -0
  235. data/lib/ruby2d/bitmap_text.rb +155 -0
  236. data/lib/ruby2d/button.rb +402 -0
  237. data/lib/ruby2d/canvas.rb +703 -279
  238. data/lib/ruby2d/circle.rb +206 -29
  239. data/lib/ruby2d/cli/browser.rb +314 -0
  240. data/lib/ruby2d/cli/build.rb +471 -257
  241. data/lib/ruby2d/cli/colorize.rb +7 -5
  242. data/lib/ruby2d/cli/examples.rb +127 -0
  243. data/lib/ruby2d/cli/launch.rb +24 -39
  244. data/lib/ruby2d/cli/lib_files.rb +48 -0
  245. data/lib/ruby2d/cli/messages.rb +40 -0
  246. data/lib/ruby2d/cli/setup.rb +273 -0
  247. data/lib/ruby2d/cli/static_server.rb +160 -0
  248. data/lib/ruby2d/cli/usage.rb +255 -0
  249. data/lib/ruby2d/color.rb +191 -69
  250. data/lib/ruby2d/core.rb +37 -19
  251. data/lib/ruby2d/deps_help.rb +89 -0
  252. data/lib/ruby2d/dsl.rb +51 -12
  253. data/lib/ruby2d/ellipse.rb +228 -0
  254. data/lib/ruby2d/exceptions.rb +0 -2
  255. data/lib/ruby2d/font.rb +34 -74
  256. data/lib/ruby2d/gamepad.rb +323 -0
  257. data/lib/ruby2d/gem_paths.rb +19 -0
  258. data/lib/ruby2d/image.rb +155 -52
  259. data/lib/ruby2d/interactive.rb +103 -0
  260. data/lib/ruby2d/json_parser.rb +268 -0
  261. data/lib/ruby2d/line.rb +194 -85
  262. data/lib/ruby2d/mruby_compat.rb +12 -0
  263. data/lib/ruby2d/polygon.rb +297 -0
  264. data/lib/ruby2d/polyline.rb +368 -0
  265. data/lib/ruby2d/quad.rb +358 -94
  266. data/lib/ruby2d/rectangle.rb +77 -19
  267. data/lib/ruby2d/renderable.rb +411 -11
  268. data/lib/ruby2d/sprite.rb +471 -180
  269. data/lib/ruby2d/sprite_sheet.rb +64 -0
  270. data/lib/ruby2d/square.rb +29 -17
  271. data/lib/ruby2d/text.rb +196 -65
  272. data/lib/ruby2d/tileset.rb +139 -81
  273. data/lib/ruby2d/triangle.rb +324 -89
  274. data/lib/ruby2d/version.rb +1 -3
  275. data/lib/ruby2d/vertices.rb +62 -85
  276. data/lib/ruby2d/warnings.rb +29 -0
  277. data/lib/ruby2d/window/class_methods.rb +218 -0
  278. data/lib/ruby2d/window/gamepad_events.rb +141 -0
  279. data/lib/ruby2d/window/key_events.rb +74 -0
  280. data/lib/ruby2d/window/mouse_events.rb +171 -0
  281. data/lib/ruby2d/window/object_events.rb +168 -0
  282. data/lib/ruby2d/window.rb +632 -585
  283. data/lib/ruby2d.rb +14 -19
  284. metadata +275 -428
  285. data/assets/app.icns +0 -0
  286. data/assets/include/GLES2/gl2.h +0 -656
  287. data/assets/include/GLES2/gl2ext.h +0 -3949
  288. data/assets/include/GLES2/gl2ext_angle.h +0 -701
  289. data/assets/include/GLES2/gl2platform.h +0 -27
  290. data/assets/include/GLES3/gl3.h +0 -1192
  291. data/assets/include/GLES3/gl31.h +0 -1507
  292. data/assets/include/GLES3/gl32.h +0 -1808
  293. data/assets/include/GLES3/gl3platform.h +0 -27
  294. data/assets/include/KHR/khrplatform.h +0 -290
  295. data/assets/include/SDL2/SDL.h +0 -233
  296. data/assets/include/SDL2/SDL_assert.h +0 -326
  297. data/assets/include/SDL2/SDL_atomic.h +0 -415
  298. data/assets/include/SDL2/SDL_audio.h +0 -1500
  299. data/assets/include/SDL2/SDL_clipboard.h +0 -141
  300. data/assets/include/SDL2/SDL_config.h +0 -61
  301. data/assets/include/SDL2/SDL_config_android.h +0 -194
  302. data/assets/include/SDL2/SDL_config_emscripten.h +0 -218
  303. data/assets/include/SDL2/SDL_config_iphoneos.h +0 -217
  304. data/assets/include/SDL2/SDL_config_macosx.h +0 -277
  305. data/assets/include/SDL2/SDL_config_minimal.h +0 -95
  306. data/assets/include/SDL2/SDL_config_ngage.h +0 -89
  307. data/assets/include/SDL2/SDL_config_os2.h +0 -207
  308. data/assets/include/SDL2/SDL_config_pandora.h +0 -141
  309. data/assets/include/SDL2/SDL_config_windows.h +0 -331
  310. data/assets/include/SDL2/SDL_config_wingdk.h +0 -253
  311. data/assets/include/SDL2/SDL_config_winrt.h +0 -220
  312. data/assets/include/SDL2/SDL_config_xbox.h +0 -235
  313. data/assets/include/SDL2/SDL_cpuinfo.h +0 -594
  314. data/assets/include/SDL2/SDL_endian.h +0 -348
  315. data/assets/include/SDL2/SDL_error.h +0 -163
  316. data/assets/include/SDL2/SDL_events.h +0 -1166
  317. data/assets/include/SDL2/SDL_filesystem.h +0 -149
  318. data/assets/include/SDL2/SDL_gamecontroller.h +0 -1074
  319. data/assets/include/SDL2/SDL_gesture.h +0 -117
  320. data/assets/include/SDL2/SDL_guid.h +0 -100
  321. data/assets/include/SDL2/SDL_haptic.h +0 -1341
  322. data/assets/include/SDL2/SDL_hidapi.h +0 -451
  323. data/assets/include/SDL2/SDL_hints.h +0 -2569
  324. data/assets/include/SDL2/SDL_image.h +0 -2173
  325. data/assets/include/SDL2/SDL_joystick.h +0 -1066
  326. data/assets/include/SDL2/SDL_keyboard.h +0 -353
  327. data/assets/include/SDL2/SDL_keycode.h +0 -358
  328. data/assets/include/SDL2/SDL_loadso.h +0 -115
  329. data/assets/include/SDL2/SDL_log.h +0 -404
  330. data/assets/include/SDL2/SDL_main.h +0 -275
  331. data/assets/include/SDL2/SDL_mixer.h +0 -2784
  332. data/assets/include/SDL2/SDL_mouse.h +0 -465
  333. data/assets/include/SDL2/SDL_mutex.h +0 -471
  334. data/assets/include/SDL2/SDL_name.h +0 -33
  335. data/assets/include/SDL2/SDL_pixels.h +0 -644
  336. data/assets/include/SDL2/SDL_platform.h +0 -261
  337. data/assets/include/SDL2/SDL_quit.h +0 -58
  338. data/assets/include/SDL2/SDL_rect.h +0 -376
  339. data/assets/include/SDL2/SDL_render.h +0 -1919
  340. data/assets/include/SDL2/SDL_revision.h +0 -6
  341. data/assets/include/SDL2/SDL_rwops.h +0 -841
  342. data/assets/include/SDL2/SDL_sensor.h +0 -322
  343. data/assets/include/SDL2/SDL_shape.h +0 -155
  344. data/assets/include/SDL2/SDL_stdinc.h +0 -830
  345. data/assets/include/SDL2/SDL_surface.h +0 -997
  346. data/assets/include/SDL2/SDL_system.h +0 -623
  347. data/assets/include/SDL2/SDL_syswm.h +0 -386
  348. data/assets/include/SDL2/SDL_test_images.h +0 -78
  349. data/assets/include/SDL2/SDL_test_random.h +0 -115
  350. data/assets/include/SDL2/SDL_thread.h +0 -464
  351. data/assets/include/SDL2/SDL_timer.h +0 -222
  352. data/assets/include/SDL2/SDL_touch.h +0 -150
  353. data/assets/include/SDL2/SDL_ttf.h +0 -2316
  354. data/assets/include/SDL2/SDL_types.h +0 -29
  355. data/assets/include/SDL2/SDL_version.h +0 -204
  356. data/assets/include/SDL2/SDL_video.h +0 -2150
  357. data/assets/include/SDL2/SDL_vulkan.h +0 -215
  358. data/assets/include/SDL2/begin_code.h +0 -187
  359. data/assets/include/mruby/boxing_no.h +0 -58
  360. data/assets/include/mruby/class.h +0 -108
  361. data/assets/include/mruby/error.h +0 -147
  362. data/assets/include/mruby/gc.h +0 -94
  363. data/assets/include/mruby/irep.h +0 -147
  364. data/assets/include/mruby/khash.h +0 -284
  365. data/assets/include/mruby/object.h +0 -43
  366. data/assets/include/mruby/presym/disable.h +0 -70
  367. data/assets/include/mruby/presym/enable.h +0 -37
  368. data/assets/include/mruby/presym.h +0 -40
  369. data/assets/include/mruby/proc.h +0 -211
  370. data/assets/include/mruby/throw.h +0 -66
  371. data/assets/macos/universal/bin/mrbc +0 -0
  372. data/assets/macos/universal/lib/libFLAC.a +0 -0
  373. data/assets/macos/universal/lib/libSDL2.a +0 -0
  374. data/assets/macos/universal/lib/libSDL2_image.a +0 -0
  375. data/assets/macos/universal/lib/libSDL2_mixer.a +0 -0
  376. data/assets/macos/universal/lib/libSDL2_ttf.a +0 -0
  377. data/assets/macos/universal/lib/libavif.a +0 -0
  378. data/assets/macos/universal/lib/libbrotlicommon-static.a +0 -0
  379. data/assets/macos/universal/lib/libbrotlidec-static.a +0 -0
  380. data/assets/macos/universal/lib/libfreetype.a +0 -0
  381. data/assets/macos/universal/lib/libgraphite2.a +0 -0
  382. data/assets/macos/universal/lib/libharfbuzz.a +0 -0
  383. data/assets/macos/universal/lib/libhwy.a +0 -0
  384. data/assets/macos/universal/lib/libjpeg.a +0 -0
  385. data/assets/macos/universal/lib/libjxl.a +0 -0
  386. data/assets/macos/universal/lib/libmodplug.a +0 -0
  387. data/assets/macos/universal/lib/libmpg123.a +0 -0
  388. data/assets/macos/universal/lib/libmruby.a +0 -0
  389. data/assets/macos/universal/lib/libogg.a +0 -0
  390. data/assets/macos/universal/lib/libpng.a +0 -0
  391. data/assets/macos/universal/lib/libtiff.a +0 -0
  392. data/assets/macos/universal/lib/libvorbis.a +0 -0
  393. data/assets/macos/universal/lib/libvorbisfile.a +0 -0
  394. data/assets/macos/universal/lib/libwebp.a +0 -0
  395. data/assets/macos/universal/lib/libzstd.a +0 -0
  396. data/assets/test_media/README.md +0 -3
  397. data/assets/test_media/bitstream_vera/COPYRIGHT.txt +0 -124
  398. data/assets/test_media/bitstream_vera/vera.ttf +0 -0
  399. data/assets/test_media/boom.png +0 -0
  400. data/assets/test_media/coin.png +0 -0
  401. data/assets/test_media/colors.png +0 -0
  402. data/assets/test_media/controller.png +0 -0
  403. data/assets/test_media/dial.wav +0 -0
  404. data/assets/test_media/hero.png +0 -0
  405. data/assets/test_media/image.bmp +0 -0
  406. data/assets/test_media/image.jpg +0 -0
  407. data/assets/test_media/image.png +0 -0
  408. data/assets/test_media/music.flac +0 -0
  409. data/assets/test_media/music.mp3 +0 -0
  410. data/assets/test_media/music.ogg +0 -0
  411. data/assets/test_media/music.wav +0 -0
  412. data/assets/test_media/originals/boom.pxm +0 -0
  413. data/assets/test_media/originals/coin.pxm +0 -0
  414. data/assets/test_media/originals/controller.sketch +0 -0
  415. data/assets/test_media/originals/hero.pxm +0 -0
  416. data/assets/test_media/originals/image.pxm +0 -0
  417. data/assets/test_media/originals/music.caf +0 -0
  418. data/assets/test_media/originals/texture_atlas.pxm +0 -0
  419. data/assets/test_media/rondo_alla_turka.ogg +0 -0
  420. data/assets/test_media/sound.flac +0 -0
  421. data/assets/test_media/sound.mp3 +0 -0
  422. data/assets/test_media/sound.ogg +0 -0
  423. data/assets/test_media/sound.wav +0 -0
  424. data/assets/test_media/sprite_sheet.png +0 -0
  425. data/assets/test_media/texture_atlas.png +0 -0
  426. data/assets/wasm/libmruby.a +0 -0
  427. data/assets/windows/mingw-w64-ucrt-x86_64/bin/mrbc.exe +0 -0
  428. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libFLAC.a +0 -0
  429. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libLerc.a +0 -0
  430. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2.a +0 -0
  431. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_image.a +0 -0
  432. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_mixer.a +0 -0
  433. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_ttf.a +0 -0
  434. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlicommon.a +0 -0
  435. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlidec.a +0 -0
  436. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbz2.a +0 -0
  437. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libdeflate.a +0 -0
  438. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libfreetype.a +0 -0
  439. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libglew32.a +0 -0
  440. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libgraphite2.a +0 -0
  441. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libharfbuzz.a +0 -0
  442. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libhwy.a +0 -0
  443. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjbig.a +0 -0
  444. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjpeg.a +0 -0
  445. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjxl.a +0 -0
  446. data/assets/windows/mingw-w64-ucrt-x86_64/lib/liblzma.a +0 -0
  447. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmodplug.a +0 -0
  448. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmpg123.a +0 -0
  449. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmruby.a +0 -0
  450. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libogg.a +0 -0
  451. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopus.a +0 -0
  452. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopusfile.a +0 -0
  453. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libpng.a +0 -0
  454. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libsndfile.a +0 -0
  455. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libssp.a +0 -1
  456. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libstdc++.a +0 -0
  457. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libtiff.a +0 -0
  458. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbis.a +0 -0
  459. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbisfile.a +0 -0
  460. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libwebp.a +0 -0
  461. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libz.a +0 -0
  462. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libzstd.a +0 -0
  463. data/assets/windows/mingw-w64-x86_64/bin/mrbc.exe +0 -0
  464. data/assets/windows/mingw-w64-x86_64/lib/libFLAC.a +0 -0
  465. data/assets/windows/mingw-w64-x86_64/lib/libLerc.a +0 -0
  466. data/assets/windows/mingw-w64-x86_64/lib/libSDL2.a +0 -0
  467. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_image.a +0 -0
  468. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_mixer.a +0 -0
  469. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_ttf.a +0 -0
  470. data/assets/windows/mingw-w64-x86_64/lib/libbrotlicommon.a +0 -0
  471. data/assets/windows/mingw-w64-x86_64/lib/libbrotlidec.a +0 -0
  472. data/assets/windows/mingw-w64-x86_64/lib/libbz2.a +0 -0
  473. data/assets/windows/mingw-w64-x86_64/lib/libdeflate.a +0 -0
  474. data/assets/windows/mingw-w64-x86_64/lib/libfreetype.a +0 -0
  475. data/assets/windows/mingw-w64-x86_64/lib/libglew32.a +0 -0
  476. data/assets/windows/mingw-w64-x86_64/lib/libgraphite2.a +0 -0
  477. data/assets/windows/mingw-w64-x86_64/lib/libharfbuzz.a +0 -0
  478. data/assets/windows/mingw-w64-x86_64/lib/libhwy.a +0 -0
  479. data/assets/windows/mingw-w64-x86_64/lib/libjbig.a +0 -0
  480. data/assets/windows/mingw-w64-x86_64/lib/libjpeg.a +0 -0
  481. data/assets/windows/mingw-w64-x86_64/lib/libjxl.a +0 -0
  482. data/assets/windows/mingw-w64-x86_64/lib/liblzma.a +0 -0
  483. data/assets/windows/mingw-w64-x86_64/lib/libmodplug.a +0 -0
  484. data/assets/windows/mingw-w64-x86_64/lib/libmpg123.a +0 -0
  485. data/assets/windows/mingw-w64-x86_64/lib/libmruby.a +0 -0
  486. data/assets/windows/mingw-w64-x86_64/lib/libogg.a +0 -0
  487. data/assets/windows/mingw-w64-x86_64/lib/libopus.a +0 -0
  488. data/assets/windows/mingw-w64-x86_64/lib/libopusfile.a +0 -0
  489. data/assets/windows/mingw-w64-x86_64/lib/libpng.a +0 -0
  490. data/assets/windows/mingw-w64-x86_64/lib/libsndfile.a +0 -0
  491. data/assets/windows/mingw-w64-x86_64/lib/libssp.a +0 -1
  492. data/assets/windows/mingw-w64-x86_64/lib/libstdc++.a +0 -0
  493. data/assets/windows/mingw-w64-x86_64/lib/libtiff.a +0 -0
  494. data/assets/windows/mingw-w64-x86_64/lib/libvorbis.a +0 -0
  495. data/assets/windows/mingw-w64-x86_64/lib/libvorbisfile.a +0 -0
  496. data/assets/windows/mingw-w64-x86_64/lib/libwebp.a +0 -0
  497. data/assets/windows/mingw-w64-x86_64/lib/libz.a +0 -0
  498. data/assets/windows/mingw-w64-x86_64/lib/libzstd.a +0 -0
  499. data/assets/xcode/ios/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -98
  500. data/assets/xcode/ios/Assets.xcassets/Contents.json +0 -6
  501. data/assets/xcode/ios/Base.lproj/LaunchScreen.storyboard +0 -27
  502. data/assets/xcode/ios/Info.plist +0 -43
  503. data/assets/xcode/ios/MRuby.framework/Headers/mrbconf.h +0 -143
  504. data/assets/xcode/ios/MRuby.framework/Headers/mruby/array.h +0 -280
  505. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
  506. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
  507. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
  508. data/assets/xcode/ios/MRuby.framework/Headers/mruby/class.h +0 -97
  509. data/assets/xcode/ios/MRuby.framework/Headers/mruby/common.h +0 -77
  510. data/assets/xcode/ios/MRuby.framework/Headers/mruby/compile.h +0 -195
  511. data/assets/xcode/ios/MRuby.framework/Headers/mruby/data.h +0 -75
  512. data/assets/xcode/ios/MRuby.framework/Headers/mruby/debug.h +0 -67
  513. data/assets/xcode/ios/MRuby.framework/Headers/mruby/dump.h +0 -196
  514. data/assets/xcode/ios/MRuby.framework/Headers/mruby/error.h +0 -75
  515. data/assets/xcode/ios/MRuby.framework/Headers/mruby/gc.h +0 -91
  516. data/assets/xcode/ios/MRuby.framework/Headers/mruby/hash.h +0 -215
  517. data/assets/xcode/ios/MRuby.framework/Headers/mruby/irep.h +0 -75
  518. data/assets/xcode/ios/MRuby.framework/Headers/mruby/istruct.h +0 -47
  519. data/assets/xcode/ios/MRuby.framework/Headers/mruby/khash.h +0 -274
  520. data/assets/xcode/ios/MRuby.framework/Headers/mruby/numeric.h +0 -161
  521. data/assets/xcode/ios/MRuby.framework/Headers/mruby/object.h +0 -44
  522. data/assets/xcode/ios/MRuby.framework/Headers/mruby/opcode.h +0 -69
  523. data/assets/xcode/ios/MRuby.framework/Headers/mruby/ops.h +0 -117
  524. data/assets/xcode/ios/MRuby.framework/Headers/mruby/proc.h +0 -131
  525. data/assets/xcode/ios/MRuby.framework/Headers/mruby/range.h +0 -49
  526. data/assets/xcode/ios/MRuby.framework/Headers/mruby/re.h +0 -16
  527. data/assets/xcode/ios/MRuby.framework/Headers/mruby/string.h +0 -444
  528. data/assets/xcode/ios/MRuby.framework/Headers/mruby/throw.h +0 -55
  529. data/assets/xcode/ios/MRuby.framework/Headers/mruby/value.h +0 -309
  530. data/assets/xcode/ios/MRuby.framework/Headers/mruby/variable.h +0 -136
  531. data/assets/xcode/ios/MRuby.framework/Headers/mruby/version.h +0 -110
  532. data/assets/xcode/ios/MRuby.framework/Headers/mruby.h +0 -1282
  533. data/assets/xcode/ios/MRuby.framework/Info.plist +0 -20
  534. data/assets/xcode/ios/MRuby.framework/MRuby +0 -0
  535. data/assets/xcode/ios/MyApp.xcodeproj/project.pbxproj +0 -368
  536. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  537. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  538. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
  539. data/assets/xcode/ios/main.c +0 -1
  540. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
  541. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json +0 -6
  542. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json +0 -17
  543. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
  544. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json +0 -6
  545. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
  546. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json +0 -6
  547. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
  548. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json +0 -6
  549. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json +0 -17
  550. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
  551. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json +0 -6
  552. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
  553. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json +0 -6
  554. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json +0 -32
  555. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json +0 -16
  556. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json +0 -16
  557. data/assets/xcode/tvos/Assets.xcassets/Contents.json +0 -6
  558. data/assets/xcode/tvos/Assets.xcassets/LaunchImage.launchimage/Contents.json +0 -22
  559. data/assets/xcode/tvos/Info.plist +0 -30
  560. data/assets/xcode/tvos/MRuby.framework/Headers/mrbconf.h +0 -143
  561. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/array.h +0 -280
  562. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
  563. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
  564. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
  565. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/class.h +0 -97
  566. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/common.h +0 -77
  567. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/compile.h +0 -195
  568. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/data.h +0 -75
  569. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/debug.h +0 -67
  570. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/dump.h +0 -196
  571. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/error.h +0 -75
  572. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/gc.h +0 -91
  573. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/hash.h +0 -215
  574. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/irep.h +0 -75
  575. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/istruct.h +0 -47
  576. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/khash.h +0 -274
  577. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/numeric.h +0 -161
  578. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/object.h +0 -44
  579. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/opcode.h +0 -69
  580. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/ops.h +0 -117
  581. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/proc.h +0 -131
  582. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/range.h +0 -49
  583. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/re.h +0 -16
  584. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/string.h +0 -444
  585. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/throw.h +0 -55
  586. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/value.h +0 -309
  587. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/variable.h +0 -136
  588. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/version.h +0 -110
  589. data/assets/xcode/tvos/MRuby.framework/Headers/mruby.h +0 -1282
  590. data/assets/xcode/tvos/MRuby.framework/Info.plist +0 -20
  591. data/assets/xcode/tvos/MRuby.framework/MRuby +0 -0
  592. data/assets/xcode/tvos/MyApp.xcodeproj/project.pbxproj +0 -350
  593. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  594. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  595. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
  596. data/assets/xcode/tvos/main.c +0 -1
  597. data/ext/ruby2d/common.c +0 -185
  598. data/ext/ruby2d/controllers.c +0 -110
  599. data/ext/ruby2d/gl.c +0 -398
  600. data/ext/ruby2d/gl2.c +0 -86
  601. data/ext/ruby2d/gl3.c +0 -304
  602. data/ext/ruby2d/gles.c +0 -302
  603. data/ext/ruby2d/input.c +0 -48
  604. data/ext/ruby2d/music.c +0 -127
  605. data/ext/ruby2d/sound.c +0 -132
  606. data/lib/ruby2d/cli/console.rb +0 -65
  607. data/lib/ruby2d/cli/enable_console.rb +0 -7
  608. data/lib/ruby2d/cli/platform.rb +0 -17
  609. data/lib/ruby2d/music.rb +0 -77
  610. data/lib/ruby2d/pixel.rb +0 -18
  611. data/lib/ruby2d/pixmap.rb +0 -39
  612. data/lib/ruby2d/pixmap_atlas.rb +0 -56
  613. data/lib/ruby2d/sound.rb +0 -61
  614. data/lib/ruby2d/texture.rb +0 -38
  615. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2.h +0 -0
  616. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2ext.h +0 -0
  617. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2platform.h +0 -0
  618. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_khrplatform.h +0 -0
  619. /data/assets/{include → platform/include}/mruby/re.h +0 -0
data/lib/ruby2d/quad.rb CHANGED
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  # Ruby2D::Quad
4
2
 
5
3
  module Ruby2D
@@ -15,23 +13,68 @@ module Ruby2D
15
13
  attr_accessor :x1, :y1,
16
14
  :x2, :y2,
17
15
  :x3, :y3,
18
- :x4, :y4
19
-
20
- # Create an quadrilateral
21
- # @param [Numeric] x1
22
- # @param [Numeric] y1
23
- # @param [Numeric] x2
24
- # @param [Numeric] y2
25
- # @param [Numeric] x3
26
- # @param [Numeric] y3
27
- # @param [Numeric] x4
28
- # @param [Numeric] y4
29
- # @param [Numeric] z
30
- # @param [String, Array] color A single colour or an array of exactly 4 colours
31
- # @param [Numeric] opacity Opacity of the image when rendering
32
- # @raise [ArgumentError] if an array of colours does not have 4 entries
16
+ :x4, :y4,
17
+ :rotate,
18
+ :fill, :stroke_width
19
+ attr_reader :stroke_color
20
+ alias_method :stroke_colour, :stroke_color
21
+
22
+ # The x coordinate of the centroid (average of the four vertex x's)
23
+ def x
24
+ (@x1 + @x2 + @x3 + @x4) / 4.0
25
+ end
26
+
27
+ # The y coordinate of the centroid (average of the four vertex y's)
28
+ def y
29
+ (@y1 + @y2 + @y3 + @y4) / 4.0
30
+ end
31
+
32
+ # Set the x coordinate of the centroid, translating all vertices
33
+ def x=(new_x)
34
+ _require_numeric_position(:x, new_x)
35
+ dx = new_x - x
36
+ @x1 += dx
37
+ @x2 += dx
38
+ @x3 += dx
39
+ @x4 += dx
40
+ end
41
+
42
+ # Set the y coordinate of the centroid, translating all vertices
43
+ def y=(new_y)
44
+ _require_numeric_position(:y, new_y)
45
+ dy = new_y - y
46
+ @y1 += dy
47
+ @y2 += dy
48
+ @y3 += dy
49
+ @y4 += dy
50
+ end
51
+
52
+ # Bounding-box width and height (extent across the four vertices)
53
+ def width
54
+ xs = [@x1, @x2, @x3, @x4]
55
+ xs.max - xs.min
56
+ end
57
+
58
+ def height
59
+ ys = [@y1, @y2, @y3, @y4]
60
+ ys.max - ys.min
61
+ end
62
+
63
+ # Create a quadrilateral. Specify vertices via `points:` or via
64
+ # `x1:`/`y1:`/... `points:` takes precedence if both are given.
33
65
  def initialize(x1: 0, y1: 0, x2: 100, y2: 0, x3: 100, y3: 100, x4: 0, y4: 100,
34
- z: 0, color: nil, colour: nil, opacity: nil)
66
+ points: nil,
67
+ z: 0, rotate: 0, rx: nil, ry: nil,
68
+ color: nil, colour: nil, opacity: nil,
69
+ fill: true, stroke_width: 0, stroke_color: nil, stroke_colour: nil,
70
+ add: true, visible: true)
71
+ if points
72
+ Quad.send(:validate_points, points)
73
+ x1, y1 = points[0]
74
+ x2, y2 = points[1]
75
+ x3, y3 = points[2]
76
+ x4, y4 = points[3]
77
+ end
35
78
  @x1 = x1
36
79
  @y1 = y1
37
80
  @x2 = x2
@@ -41,14 +84,32 @@ module Ruby2D
41
84
  @x4 = x4
42
85
  @y4 = y4
43
86
  @z = z
87
+ @rotate = rotate
88
+ @_user_rx = rx
89
+ @_user_ry = ry
44
90
  self.color = color || colour || 'white'
45
- self.color.opacity = opacity unless opacity.nil?
46
- add
91
+ self.opacity = opacity unless opacity.nil?
92
+ @fill = fill
93
+ @stroke_width = stroke_width
94
+ self.stroke_color = stroke_color || stroke_colour || (color || colour)
95
+ self.stroke_color.opacity = opacity unless opacity.nil?
96
+ @visible = visible
97
+ self.add if add
47
98
  end
48
99
 
49
- # Change the colour of the line
50
- # @param [String, Array] color A single colour or an array of exactly 4 colours
51
- # @raise [ArgumentError] if an array of colours does not have 4 entries
100
+ # Set the stroke color. Accepts a single color or a `Color::Set` of 4
101
+ # (one per vertex) interpolated around the perimeter. If nil, defaults to
102
+ # the fill color (preserving a per-vertex set when the fill is per-vertex).
103
+ def stroke_color=(c)
104
+ @stroke_color = Renderable.resolve_color_or_default(c, 4, label: self.class)
105
+ # A single stroke Color (not a per-vertex Set) takes the compact
106
+ # `stroke_quad_uniform` fast path.
107
+ @_stroke_color_uniform = !@stroke_color.is_a?(Color::Set)
108
+ @_stroke_cc = nil
109
+ end
110
+ alias_method :stroke_colour=, :stroke_color=
111
+
112
+ # Set the color of the quad
52
113
  def color=(color)
53
114
  # convert to Color or Color::Set
54
115
  color = Color.set(color)
@@ -60,86 +121,289 @@ module Ruby2D
60
121
  end
61
122
 
62
123
  @color = color # converted above
63
- invalidate_color_components
124
+ # A single Color (not a per-vertex Set) is uniform across all four
125
+ # vertices, so it takes the compact `draw_quad_uniform` fast path.
126
+ @_color_uniform = !color.is_a?(Color::Set)
127
+ @_cc = nil # invalidate cached color components
64
128
  end
65
129
 
66
- # The logic is the same as for a triangle
67
- # See triangle.rb for reference
130
+ # Check if the quad contains the given point (inside the rendered fill).
131
+ # Ray-cast over the four vertices, so concave quads hit-test against what's
132
+ # actually drawn — unlike the old area method, which only held for convex
133
+ # quads. Self-intersecting (bow-tie) quads aren't fully supported by the fill
134
+ # renderer, so the test can diverge from the drawn pixels there.
68
135
  def contains?(x, y)
69
- self_area = triangle_area(@x1, @y1, @x2, @y2, @x3, @y3) +
70
- triangle_area(@x1, @y1, @x3, @y3, @x4, @y4)
71
-
72
- questioned_area = triangle_area(@x1, @y1, @x2, @y2, x, y) +
73
- triangle_area(@x2, @y2, @x3, @y3, x, y) +
74
- triangle_area(@x3, @y3, @x4, @y4, x, y) +
75
- triangle_area(@x4, @y4, @x1, @y1, x, y)
76
-
77
- questioned_area <= self_area
78
- end
79
-
80
- # Draw a line without creating a Line
81
- # @param [Numeric] x1
82
- # @param [Numeric] y1
83
- # @param [Numeric] x2
84
- # @param [Numeric] y2
85
- # @param [Numeric] x3
86
- # @param [Numeric] y3
87
- # @param [Numeric] x4
88
- # @param [Numeric] y4
89
- # @param color [Array<Array<float,float,float,float>>] An array of 4 array of colour components
90
- # (e.g. [[1.0, 0, 0, 1.0], ...])
91
- def self.draw(x1:, y1:, x2:, y2:, x3:, y3:, x4:, y4:, color:)
136
+ x, y = _unrotate(x, y)
137
+ _point_in_polygon?([@x1, @y1, @x2, @y2, @x3, @y3, @x4, @y4], x, y)
138
+ end
139
+
140
+ # Get the rotation center x coordinate
141
+ def rx
142
+ @_user_rx.nil? ? (@x1 + @x2 + @x3 + @x4) / 4.0 : @_user_rx
143
+ end
144
+
145
+ # Get the rotation center y coordinate
146
+ def ry
147
+ @_user_ry.nil? ? (@y1 + @y2 + @y3 + @y4) / 4.0 : @_user_ry
148
+ end
149
+
150
+ # Set the rotation center x coordinate
151
+ def rx=(val)
152
+ @_user_rx = val
153
+ end
154
+
155
+ # Set the rotation center y coordinate
156
+ def ry=(val)
157
+ @_user_ry = val
158
+ end
159
+
160
+ # Render a quad without creating an instance
161
+ def self.render(x1: 0, y1: 0, x2: 100, y2: 0, x3: 100, y3: 100, x4: 0, y4: 100,
162
+ points: nil,
163
+ rotate: 0, rx: nil, ry: nil,
164
+ color: nil, colour: nil, opacity: nil,
165
+ fill: true, stroke_width: 0, stroke_color: nil, stroke_colour: nil)
166
+ if points
167
+ validate_points(points)
168
+ x1, y1 = points[0]
169
+ x2, y2 = points[1]
170
+ x3, y3 = points[2]
171
+ x4, y4 = points[3]
172
+ end
173
+ draw_immediate(x1, y1, x2, y2, x3, y3, x4, y4, rotate, rx, ry,
174
+ color || colour, opacity, fill, stroke_width,
175
+ stroke_color || stroke_colour)
176
+ end
177
+
178
+ # The immediate-mode draw shared by Quad, Rectangle, and Square. Takes
179
+ # positional arguments, and subclasses call it directly instead of
180
+ # forwarding through `super`: keyword dispatch is expensive on mruby
181
+ # (~17µs per hop of this many keywords on the web build), so each public
182
+ # `.render` pays for its own keywords exactly once. `rx`/`ry` may be nil
183
+ # (centroid default); `explicit_stroke` is the user's stroke color or nil.
184
+ def self.draw_immediate(x1, y1, x2, y2, x3, y3, x4, y4, rotate, rx, ry,
185
+ fill_input, opacity, fill, stroke_width, explicit_stroke)
92
186
  Window.render_ready_check
93
- ext_draw([
94
- x1, y1, *color[0], # splat the colour components
95
- x2, y2, *color[1],
96
- x3, y3, *color[2],
97
- x4, y4, *color[3]
98
- ])
187
+ # Resolve the fill color once. A single Color (not a per-vertex Set) with
188
+ # scalar opacity is uniform across all four vertices and draws via the
189
+ # compact `draw_quad_uniform`; otherwise build the per-vertex color array
190
+ # from the already-resolved color (no second parse). `for_render` returns
191
+ # a shared cached instance for string colors — read-only here.
192
+ # A per-vertex color flattens straight to floats, skipping the
193
+ # `Color::Set` the general path builds — that allocates and parses one
194
+ # `Color` per vertex on every call. `resolved` stays nil in that case
195
+ # and the stroke below resolves for itself if it ends up needing one.
196
+ # The `is_a?(Array)` guard is inline so the common single-color call
197
+ # doesn't pay for a method call that would only decline.
198
+ c = fill_input.is_a?(Array) ? Renderable.flatten_per_vertex(fill_input, 4, opacity) : nil
199
+ if c
200
+ resolved = nil
201
+ uniform = false
202
+ else
203
+ resolved = Color.for_render(fill_input.nil? ? 'white' : fill_input)
204
+ uniform = !resolved.is_a?(Color::Set) && !opacity.is_a?(Array)
205
+ c = uniform ? nil : Renderable.flatten_resolved_color(resolved, 4, opacity, label: self)
206
+ end
207
+
208
+ # Rotation is inlined into locals (as in `render` below and Line#render):
209
+ # a helper returning the rotated points would allocate an array per
210
+ # rotated shape per frame — measured 2.9µs vs 1.8µs per quad on wasm.
211
+ if rotate != 0
212
+ cx = rx || (x1 + x2 + x3 + x4) / 4.0
213
+ cy = ry || (y1 + y2 + y3 + y4) / 4.0
214
+ rad = rotate * Math::PI / 180.0
215
+ sa = Math.sin(rad)
216
+ ca = Math.cos(rad)
217
+ dx = x1 - cx; dy = y1 - cy
218
+ x1 = dx * ca - dy * sa + cx; y1 = dx * sa + dy * ca + cy
219
+ dx = x2 - cx; dy = y2 - cy
220
+ x2 = dx * ca - dy * sa + cx; y2 = dx * sa + dy * ca + cy
221
+ dx = x3 - cx; dy = y3 - cy
222
+ x3 = dx * ca - dy * sa + cx; y3 = dx * sa + dy * ca + cy
223
+ dx = x4 - cx; dy = y4 - cy
224
+ x4 = dx * ca - dy * sa + cx; y4 = dx * sa + dy * ca + cy
225
+ end
226
+
227
+ if fill
228
+ if uniform
229
+ a = opacity || resolved.a
230
+ Ext.draw_quad_uniform(x1, y1, x2, y2, x3, y3, x4, y4, resolved.r, resolved.g, resolved.b, a)
231
+ else
232
+ c1r, c1g, c1b, c1a, c2r, c2g, c2b, c2a,
233
+ c3r, c3g, c3b, c3a, c4r, c4g, c4b, c4a = c
234
+ Ext.draw_quad(
235
+ x1, y1, c1r, c1g, c1b, c1a,
236
+ x2, y2, c2r, c2g, c2b, c2a,
237
+ x3, y3, c3r, c3g, c3b, c3a,
238
+ x4, y4, c4r, c4g, c4b, c4a
239
+ )
240
+ end
241
+ end
242
+
243
+ # Resolve the stroke color only when actually stroking. A single stroke
244
+ # color draws via the compact `stroke_quad_uniform`; a per-vertex Set keeps
245
+ # the splatting path. When no explicit stroke is given the stroke reuses
246
+ # the already-resolved fill color. (An explicit stroke color is still
247
+ # validated at stroke_width 0 below, matching the instance constructor.)
248
+ if stroke_width > 0
249
+ stroke_input = explicit_stroke || fill_input
250
+ sresolved = if !stroke_input.equal?(fill_input)
251
+ Color.for_render(stroke_input)
252
+ else
253
+ resolved || Color.for_render(fill_input.nil? ? 'white' : fill_input)
254
+ end
255
+ if !sresolved.is_a?(Color::Set) && !opacity.is_a?(Array)
256
+ sa = opacity || sresolved.a
257
+ Ext.stroke_quad_uniform(x1, y1, x2, y2, x3, y3, x4, y4, stroke_width,
258
+ sresolved.r, sresolved.g, sresolved.b, sa)
259
+ else
260
+ s1r, s1g, s1b, s1a, s2r, s2g, s2b, s2a,
261
+ s3r, s3g, s3b, s3a, s4r, s4g, s4b, s4a =
262
+ Renderable.flatten_resolved_color(sresolved, 4, opacity, label: self)
263
+ Ext.stroke_quad(
264
+ x1, y1, x2, y2, x3, y3, x4, y4, stroke_width,
265
+ s1r, s1g, s1b, s1a,
266
+ s2r, s2g, s2b, s2a,
267
+ s3r, s3g, s3b, s3a,
268
+ s4r, s4g, s4b, s4a
269
+ )
270
+ end
271
+ elsif explicit_stroke
272
+ Renderable.flatten_color(explicit_stroke, 4, opacity, label: self)
273
+ end
99
274
  end
275
+ private_class_method :draw_immediate
100
276
 
101
277
  private
102
278
 
279
+ def self.validate_points(points)
280
+ raise ArgumentError, 'Quad requires exactly 4 points' unless points.length == 4
281
+ raise ArgumentError, 'points must be an array of [x, y] pairs' \
282
+ unless points.all? { |p| p.is_a?(Array) && p.length == 2 }
283
+ end
284
+ private_class_method :validate_points
285
+
103
286
  def render
104
- color_comp_arrays = color_components
105
- self.class.ext_draw([
106
- @x1, @y1, *color_comp_arrays[0], # splat the colour components
107
- @x2, @y2, *color_comp_arrays[1],
108
- @x3, @y3, *color_comp_arrays[2],
109
- @x4, @y4, *color_comp_arrays[3]
110
- ])
111
- end
112
-
113
- def triangle_area(x1, y1, x2, y2, x3, y3)
114
- (x1 * y2 + x2 * y3 + x3 * y1 - x3 * y2 - x1 * y3 - x2 * y1).abs / 2
115
- end
116
-
117
- # Return colours as a memoized array of 4 x colour component arrays
118
- def color_components
119
- check_if_opacity_changed
120
- @color_components ||= if @color.is_a? Color::Set
121
- # Extract colour component arrays; see +def color=+ where colour set
122
- # size is enforced
123
- [
124
- @color[0].to_a, @color[1].to_a, @color[2].to_a, @color[3].to_a
125
- ]
126
- else
127
- # All vertex colours are the same
128
- c_a = @color.to_a
129
- [
130
- c_a, c_a, c_a, c_a
131
- ]
132
- end
133
- end
134
-
135
- # Invalidate memoized colour components if opacity has been changed via +color=+
136
- def check_if_opacity_changed
137
- @color_components = nil if @color_components && @color_components.first[3] != @color.opacity
138
- end
139
-
140
- # Invalidate the memoized colour components. Called when Line's colour is changed
141
- def invalidate_color_components
142
- @color_components = nil
287
+ # Note: Quad does not support symbolic alignment — its `x`/`y` are the
288
+ # centroid, not a top-left origin, so `_resolve_alignment` (which assumes
289
+ # top-left) cannot position it coherently. Matches Triangle/Polygon.
290
+ ensure_cc
291
+ ensure_scc if @stroke_width && @stroke_width > 0
292
+
293
+ x1, y1, x2, y2, x3, y3, x4, y4 = @x1, @y1, @x2, @y2, @x3, @y3, @x4, @y4
294
+
295
+ # Rotation inlined into locals — see the `draw_immediate` note.
296
+ if @rotate != 0
297
+ cx = rx; cy = ry
298
+ rad = @rotate * Math::PI / 180.0
299
+ sa = Math.sin(rad)
300
+ ca = Math.cos(rad)
301
+ dx = x1 - cx; dy = y1 - cy
302
+ x1 = dx * ca - dy * sa + cx; y1 = dx * sa + dy * ca + cy
303
+ dx = x2 - cx; dy = y2 - cy
304
+ x2 = dx * ca - dy * sa + cx; y2 = dx * sa + dy * ca + cy
305
+ dx = x3 - cx; dy = y3 - cy
306
+ x3 = dx * ca - dy * sa + cx; y3 = dx * sa + dy * ca + cy
307
+ dx = x4 - cx; dy = y4 - cy
308
+ x4 = dx * ca - dy * sa + cx; y4 = dx * sa + dy * ca + cy
309
+ end
310
+
311
+ if @fill
312
+ cc = @_cc
313
+ if @_color_uniform
314
+ Ext.draw_quad_uniform(x1, y1, x2, y2, x3, y3, x4, y4, cc[0], cc[1], cc[2], cc[3])
315
+ else
316
+ Ext.draw_quad(
317
+ x1, y1, cc[0], cc[1], cc[2], cc[3],
318
+ x2, y2, cc[4], cc[5], cc[6], cc[7],
319
+ x3, y3, cc[8], cc[9], cc[10], cc[11],
320
+ x4, y4, cc[12], cc[13], cc[14], cc[15]
321
+ )
322
+ end
323
+ end
324
+
325
+ if @stroke_width && @stroke_width > 0
326
+ scc = @_stroke_cc
327
+ if @_stroke_color_uniform
328
+ Ext.stroke_quad_uniform(x1, y1, x2, y2, x3, y3, x4, y4, @stroke_width, scc[0], scc[1], scc[2], scc[3])
329
+ else
330
+ Ext.stroke_quad(
331
+ x1, y1, x2, y2, x3, y3, x4, y4, @stroke_width,
332
+ scc[0], scc[1], scc[2], scc[3],
333
+ scc[4], scc[5], scc[6], scc[7],
334
+ scc[8], scc[9], scc[10], scc[11],
335
+ scc[12], scc[13], scc[14], scc[15]
336
+ )
337
+ end
338
+ end
339
+ end
340
+
341
+ # Scene-graph draw hook (see Renderable#_render_scene). Quad's `render` is
342
+ # already zero-arg, so the hook is the same method under the scene name.
343
+ alias_method :_render_scene, :render
344
+ public :_render_scene
345
+
346
+ # Build/rebuild flat per-vertex stroke color cache (4 × rgba = 16 floats)
347
+ def ensure_scc
348
+ if @_stroke_color_uniform
349
+ c = @stroke_color
350
+ if @_stroke_cc.nil? || @_stroke_cc[0] != c.r || @_stroke_cc[1] != c.g || @_stroke_cc[2] != c.b || @_stroke_cc[3] != c.a
351
+ @_stroke_cc = [c.r, c.g, c.b, c.a]
352
+ end
353
+ elsif @_stroke_cc.nil? || !scc_matches?
354
+ @_stroke_cc = Array.new(16)
355
+ 4.times do |i|
356
+ c = @stroke_color.vertex(i)
357
+ @_stroke_cc[i * 4] = c.r
358
+ @_stroke_cc[i * 4 + 1] = c.g
359
+ @_stroke_cc[i * 4 + 2] = c.b
360
+ @_stroke_cc[i * 4 + 3] = c.a
361
+ end
362
+ end
363
+ end
364
+
365
+ def scc_matches?
366
+ 4.times do |i|
367
+ c = @stroke_color.vertex(i)
368
+ return false if @_stroke_cc[i * 4] != c.r
369
+ return false if @_stroke_cc[i * 4 + 1] != c.g
370
+ return false if @_stroke_cc[i * 4 + 2] != c.b
371
+ return false if @_stroke_cc[i * 4 + 3] != c.a
372
+ end
373
+ true
374
+ end
375
+
376
+ # Build/rebuild flat color cache for the native extension
377
+ def ensure_cc
378
+ # Solid fill: cache 4 floats and validity-check 4 comparisons (the
379
+ # per-frame check still catches in-place `color.opacity=` fades). Mirrors
380
+ # the Circle/Ellipse single-color cache.
381
+ if @_color_uniform
382
+ c = @color
383
+ if @_cc.nil? || @_cc[0] != c.r || @_cc[1] != c.g || @_cc[2] != c.b || @_cc[3] != c.a
384
+ @_cc = [c.r, c.g, c.b, c.a]
385
+ end
386
+ elsif @_cc.nil? || !cc_matches?
387
+ @_cc = Array.new(16)
388
+ 4.times do |i|
389
+ c = @color.vertex(i)
390
+ @_cc[i * 4] = c.r
391
+ @_cc[i * 4 + 1] = c.g
392
+ @_cc[i * 4 + 2] = c.b
393
+ @_cc[i * 4 + 3] = c.a
394
+ end
395
+ end
396
+ end
397
+
398
+ def cc_matches?
399
+ 4.times do |i|
400
+ c = @color.vertex(i)
401
+ return false if @_cc[i * 4] != c.r
402
+ return false if @_cc[i * 4 + 1] != c.g
403
+ return false if @_cc[i * 4 + 2] != c.b
404
+ return false if @_cc[i * 4 + 3] != c.a
405
+ end
406
+ true
143
407
  end
144
408
  end
145
409
  end
@@ -1,64 +1,122 @@
1
- # frozen_string_literal: true
2
-
3
1
  # Ruby2D::Rectangle
4
2
 
5
3
  module Ruby2D
6
4
  # A rectangle
7
5
  class Rectangle < Quad
8
- # Create an rectangle
9
- # @param [Numeric] x
10
- # @param [Numeric] y
11
- # @param [Numeric] width
12
- # @param [Numeric] height
13
- # @param [Numeric] z
14
- # @param [String, Array] color A single colour or an array of exactly 4 colours
15
- # @param [Numeric] opacity Opacity of the image when rendering
16
- # @raise [ArgumentError] if an array of colours does not have 4 entries
17
- def initialize(x: 0, y: 0, width: 200, height: 100, z: 0, color: nil, colour: nil, opacity: nil)
6
+ # Create a rectangle
7
+ def initialize(x: 0, y: 0, width: 200, height: 100, z: 0, rotate: 0,
8
+ rx: nil, ry: nil, color: nil, colour: nil, opacity: nil,
9
+ fill: true, stroke_width: 0, stroke_color: nil, stroke_colour: nil,
10
+ add: true, visible: true,
11
+ padding: nil, padding_top: nil, padding_right: nil,
12
+ padding_bottom: nil, padding_left: nil)
13
+ x, y = _extract_alignment(x, y)
14
+ _apply_padding(padding, padding_top, padding_right, padding_bottom, padding_left)
15
+ _validate_dimensions(width: width, height: height)
18
16
  @width = width
19
17
  @height = height
20
18
  super(x1: @x = x, y1: @y = y,
21
19
  x2: x + width, y2: y,
22
20
  x3: x + width, y3: y + height,
23
- x4: x, y4: y + height, z: z, color: color, colour: colour, opacity: opacity)
21
+ x4: x, y4: y + height, z: z, rotate: rotate,
22
+ rx: rx, ry: ry,
23
+ color: color, colour: colour, opacity: opacity,
24
+ fill: fill, stroke_width: stroke_width,
25
+ stroke_color: stroke_color, stroke_colour: stroke_colour,
26
+ add: add, visible: visible)
27
+ end
28
+
29
+ # The x position (top-left). Rectangles are anchored at their top-left
30
+ # corner, not the centroid like a general Quad.
31
+ def x
32
+ @x1
33
+ end
34
+
35
+ # The y position (top-left).
36
+ def y
37
+ @y1
38
+ end
39
+
40
+ # Get the rotation center x coordinate
41
+ def rx
42
+ @_user_rx.nil? ? (@x1 + @width / 2.0) : @_user_rx
24
43
  end
25
44
 
45
+ # Get the rotation center y coordinate
46
+ def ry
47
+ @_user_ry.nil? ? (@y1 + @height / 2.0) : @_user_ry
48
+ end
49
+
50
+ # Set the x position (top-left), updating all four vertices. Pass a
51
+ # symbol (`:left`, `:center`, `:right`) to set alignment intent.
26
52
  def x=(x)
53
+ return self.x_align = x if x.is_a?(Symbol)
54
+ @x_align = nil unless @_resolving_alignment
27
55
  @x = @x1 = x
28
56
  @x2 = x + @width
29
57
  @x3 = x + @width
30
58
  @x4 = x
31
59
  end
32
60
 
61
+ # Set the y position (top-left), updating all four vertices. Pass a
62
+ # symbol (`:top`, `:center`, `:bottom`) to set alignment intent.
33
63
  def y=(y)
64
+ return self.y_align = y if y.is_a?(Symbol)
65
+ @y_align = nil unless @_resolving_alignment
34
66
  @y = @y1 = y
35
67
  @y2 = y
36
68
  @y3 = y + @height
37
69
  @y4 = y + @height
38
70
  end
39
71
 
72
+ # Set the width
40
73
  def width=(width)
41
74
  @width = width
42
75
  @x2 = @x1 + width
43
76
  @x3 = @x1 + width
44
77
  end
45
78
 
79
+ # Set the height
46
80
  def height=(height)
47
81
  @height = height
48
82
  @y3 = @y1 + height
49
83
  @y4 = @y1 + height
50
84
  end
51
85
 
52
- def self.draw(x:, y:, width:, height:, color:)
53
- super(x1: x, y1: y,
54
- x2: x + width, y2: y,
55
- x3: x + width, y3: y + height,
56
- x4: x, y4: y + height, color: color)
86
+ # Render a rectangle without creating an instance. Calls the positional
87
+ # internal directly rather than `super` see `Quad.draw_immediate`.
88
+ def self.render(x: 0, y: 0, width: 200, height: 100, rotate: 0,
89
+ rx: nil, ry: nil, color: nil, colour: nil, opacity: nil,
90
+ fill: true, stroke_width: 0, stroke_color: nil, stroke_colour: nil)
91
+ draw_immediate(x, y,
92
+ x + width, y,
93
+ x + width, y + height,
94
+ x, y + height,
95
+ rotate, rx || x + width / 2.0, ry || y + height / 2.0,
96
+ color || colour, opacity, fill, stroke_width,
97
+ stroke_color || stroke_colour)
57
98
  end
58
99
 
100
+ # Check if the rectangle contains the given point
59
101
  def contains?(x, y)
60
- # Override the check from Quad since this is faster
102
+ x, y = _unrotate(x, y)
61
103
  x >= @x && x <= (@x + @width) && y >= @y && y <= (@y + @height)
62
104
  end
105
+
106
+ private
107
+
108
+ # Resolve symbolic alignment (e.g. `x: :center`) against the window before
109
+ # drawing, then draw via Quad. Rectangle/Square are top-left-anchored and
110
+ # support alignment; a bare Quad (centroid-anchored) does not, so the call
111
+ # lives here rather than in Quad#render.
112
+ def render
113
+ _resolve_alignment
114
+ super
115
+ end
116
+
117
+ # Scene-graph draw hook (see Renderable#_render_scene). Re-aliased here so
118
+ # the hook picks up Rectangle's alignment-resolving `render`, not Quad's.
119
+ alias_method :_render_scene, :render
120
+ public :_render_scene
63
121
  end
64
122
  end