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.
- checksums.yaml +4 -4
- data/LICENSE.md +7 -0
- data/README.md +141 -0
- data/USAGE.md +2435 -0
- data/assets/Rakefile +637 -0
- data/assets/build_support/CMakeLists.txt +94 -0
- data/assets/build_support/mruby/build_config.rb +34 -0
- data/assets/build_support/mruby/build_config_wasm.rb +30 -0
- data/assets/build_support/sdl_test.c +174 -0
- data/assets/deps.yaml +16 -0
- data/assets/platform/include/SDL3/SDL.h +91 -0
- data/assets/platform/include/SDL3/SDL_assert.h +705 -0
- data/assets/platform/include/SDL3/SDL_asyncio.h +550 -0
- data/assets/platform/include/SDL3/SDL_atomic.h +692 -0
- data/assets/platform/include/SDL3/SDL_audio.h +2370 -0
- data/assets/platform/include/SDL3/SDL_begin_code.h +553 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_bits.h +47 -27
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_blendmode.h +59 -55
- data/assets/platform/include/SDL3/SDL_camera.h +535 -0
- data/assets/platform/include/SDL3/SDL_clipboard.h +331 -0
- data/assets/{include/SDL2/close_code.h → platform/include/SDL3/SDL_close_code.h} +9 -8
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_copying.h +3 -1
- data/assets/platform/include/SDL3/SDL_cpuinfo.h +374 -0
- data/assets/platform/include/SDL3/SDL_dialog.h +343 -0
- data/assets/platform/include/SDL3/SDL_dlopennote.h +234 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_egl.h +11 -8
- data/assets/platform/include/SDL3/SDL_endian.h +645 -0
- data/assets/platform/include/SDL3/SDL_error.h +226 -0
- data/assets/platform/include/SDL3/SDL_events.h +1645 -0
- data/assets/platform/include/SDL3/SDL_filesystem.h +537 -0
- data/assets/platform/include/SDL3/SDL_gamepad.h +1656 -0
- data/assets/platform/include/SDL3/SDL_gpu.h +4608 -0
- data/assets/platform/include/SDL3/SDL_guid.h +106 -0
- data/assets/platform/include/SDL3/SDL_haptic.h +1461 -0
- data/assets/platform/include/SDL3/SDL_hidapi.h +571 -0
- data/assets/platform/include/SDL3/SDL_hints.h +5001 -0
- data/assets/platform/include/SDL3/SDL_init.h +507 -0
- data/assets/platform/include/SDL3/SDL_intrin.h +410 -0
- data/assets/platform/include/SDL3/SDL_iostream.h +1379 -0
- data/assets/platform/include/SDL3/SDL_joystick.h +1385 -0
- data/assets/platform/include/SDL3/SDL_keyboard.h +608 -0
- data/assets/platform/include/SDL3/SDL_keycode.h +347 -0
- data/assets/platform/include/SDL3/SDL_loadso.h +145 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_locale.h +40 -24
- data/assets/platform/include/SDL3/SDL_log.h +541 -0
- data/assets/platform/include/SDL3/SDL_main.h +704 -0
- data/assets/platform/include/SDL3/SDL_main_impl.h +151 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_messagebox.h +85 -48
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_metal.h +29 -29
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_misc.h +13 -12
- data/assets/platform/include/SDL3/SDL_mouse.h +813 -0
- data/assets/platform/include/SDL3/SDL_mutex.h +1117 -0
- data/assets/platform/include/SDL3/SDL_oldnames.h +1339 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengl.h +1247 -278
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengl_glext.h +5 -1
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles.h +6 -7
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2.h +10 -11
- data/assets/platform/include/SDL3/SDL_pen.h +198 -0
- data/assets/platform/include/SDL3/SDL_pixels.h +1441 -0
- data/assets/{include/SDL2/SDL_test_log.h → platform/include/SDL3/SDL_platform.h} +25 -26
- data/assets/platform/include/SDL3/SDL_platform_defines.h +497 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_power.h +40 -20
- data/assets/platform/include/SDL3/SDL_process.h +441 -0
- data/assets/platform/include/SDL3/SDL_properties.h +572 -0
- data/assets/platform/include/SDL3/SDL_rect.h +528 -0
- data/assets/platform/include/SDL3/SDL_render.h +3028 -0
- data/assets/platform/include/SDL3/SDL_revision.h +59 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_scancode.h +59 -68
- data/assets/platform/include/SDL3/SDL_sensor.h +321 -0
- data/assets/platform/include/SDL3/SDL_stdinc.h +6186 -0
- data/assets/platform/include/SDL3/SDL_storage.h +686 -0
- data/assets/platform/include/SDL3/SDL_surface.h +1769 -0
- data/assets/platform/include/SDL3/SDL_system.h +840 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test.h +16 -22
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_assert.h +27 -34
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_common.h +109 -52
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_compare.h +22 -14
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_crc32.h +27 -30
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_font.h +50 -49
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_fuzzer.h +64 -79
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_harness.h +47 -30
- data/assets/platform/include/SDL3/SDL_test_log.h +83 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_md5.h +21 -28
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_memory.h +19 -16
- data/assets/platform/include/SDL3/SDL_thread.h +602 -0
- data/assets/platform/include/SDL3/SDL_time.h +249 -0
- data/assets/platform/include/SDL3/SDL_timer.h +454 -0
- data/assets/platform/include/SDL3/SDL_touch.h +184 -0
- data/assets/platform/include/SDL3/SDL_tray.h +544 -0
- data/assets/platform/include/SDL3/SDL_version.h +198 -0
- data/assets/platform/include/SDL3/SDL_video.h +3497 -0
- data/assets/platform/include/SDL3/SDL_vulkan.h +287 -0
- data/assets/platform/include/SDL3_image/SDL_image.h +3328 -0
- data/assets/platform/include/SDL3_mixer/SDL_mixer.h +3369 -0
- data/assets/platform/include/SDL3_ttf/SDL_textengine.h +181 -0
- data/assets/platform/include/SDL3_ttf/SDL_ttf.h +2833 -0
- data/assets/{include → platform/include}/mrbconf.h +42 -31
- data/assets/{include → platform/include}/mruby/array.h +3 -4
- data/assets/{include → platform/include}/mruby/boxing_nan.h +10 -0
- data/assets/platform/include/mruby/boxing_no.h +59 -0
- data/assets/{include → platform/include}/mruby/boxing_word.h +72 -26
- data/assets/platform/include/mruby/class.h +157 -0
- data/assets/{include → platform/include}/mruby/common.h +30 -1
- data/assets/{include → platform/include}/mruby/compile.h +52 -74
- data/assets/{include → platform/include}/mruby/data.h +2 -2
- data/assets/{include → platform/include}/mruby/debug.h +12 -5
- data/assets/{include → platform/include}/mruby/dump.h +7 -9
- data/assets/{include → platform/include}/mruby/endian.h +1 -1
- data/assets/platform/include/mruby/error.h +173 -0
- data/assets/platform/include/mruby/gc.h +79 -0
- data/assets/{include → platform/include}/mruby/hash.h +1 -7
- data/assets/platform/include/mruby/internal.h +282 -0
- data/assets/platform/include/mruby/irep.h +143 -0
- data/assets/{include → platform/include}/mruby/istruct.h +1 -1
- data/assets/platform/include/mruby/khash.h +455 -0
- data/assets/platform/include/mruby/mempool.h +19 -0
- data/assets/{include → platform/include}/mruby/numeric.h +7 -10
- data/assets/platform/include/mruby/object.h +51 -0
- data/assets/{include → platform/include}/mruby/opcode.h +5 -5
- data/assets/{include → platform/include}/mruby/ops.h +19 -6
- data/assets/platform/include/mruby/presym/id.h +1447 -0
- data/assets/{include → platform/include}/mruby/presym/scanning.h +10 -7
- data/assets/platform/include/mruby/presym/table.h +2893 -0
- data/assets/platform/include/mruby/presym.h +65 -0
- data/assets/platform/include/mruby/proc.h +184 -0
- data/assets/{include → platform/include}/mruby/range.h +0 -2
- data/assets/{include → platform/include}/mruby/string.h +33 -53
- data/assets/platform/include/mruby/throw.h +81 -0
- data/assets/{include → platform/include}/mruby/value.h +64 -29
- data/assets/{include → platform/include}/mruby/variable.h +6 -23
- data/assets/{include → platform/include}/mruby/version.h +7 -7
- data/assets/{include → platform/include}/mruby.h +238 -116
- data/assets/platform/macos-arm64/bin/mrbc +0 -0
- data/assets/platform/macos-arm64/lib/libSDL3.a +0 -0
- data/assets/platform/macos-arm64/lib/libSDL3_image.a +0 -0
- data/assets/platform/macos-arm64/lib/libSDL3_mixer.a +0 -0
- data/assets/platform/macos-arm64/lib/libSDL3_ttf.a +0 -0
- data/assets/platform/macos-arm64/lib/libmruby.a +0 -0
- data/assets/platform/wasm/lib/libFLAC.a +0 -0
- data/assets/platform/wasm/lib/libSDL3.a +0 -0
- data/assets/platform/wasm/lib/libSDL3_image.a +0 -0
- data/assets/platform/wasm/lib/libSDL3_mixer.a +0 -0
- data/assets/platform/wasm/lib/libSDL3_ttf.a +0 -0
- data/assets/platform/wasm/lib/libfreetype.a +0 -0
- data/assets/platform/wasm/lib/libharfbuzz.a +0 -0
- data/assets/platform/wasm/lib/libmruby.a +0 -0
- data/assets/platform/wasm/lib/libogg.a +0 -0
- data/assets/platform/wasm/lib/libplutosvg.a +0 -0
- data/assets/platform/wasm/lib/libplutovg.a +0 -0
- data/assets/platform/wasm/lib/libpng.a +0 -0
- data/assets/platform/wasm/lib/libpng16.a +0 -0
- data/assets/platform/wasm/lib/libvorbis.a +0 -0
- data/assets/platform/wasm/lib/libvorbisfile.a +0 -0
- data/assets/platform/wasm/lib/libzlibstatic.a +0 -0
- data/assets/platform/windows-arm64-mingw-ucrt/bin/mrbc.exe +0 -0
- data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3.a +0 -0
- data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_image.a +0 -0
- data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_mixer.a +0 -0
- data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_ttf.a +0 -0
- data/assets/platform/windows-arm64-mingw-ucrt/lib/libmruby.a +0 -0
- data/assets/platform/windows-x86_64-mingw-ucrt/bin/mrbc.exe +0 -0
- data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3.a +0 -0
- data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_image.a +0 -0
- data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_mixer.a +0 -0
- data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_ttf.a +0 -0
- data/assets/platform/windows-x86_64-mingw-ucrt/lib/libmruby.a +0 -0
- data/assets/resources/fonts/outfit/OFL.txt +93 -0
- data/assets/resources/fonts/outfit/outfit.ttf +0 -0
- data/assets/resources/fonts/roboto_mono/OFL.txt +91 -0
- data/assets/resources/fonts/roboto_mono/roboto_mono.ttf +0 -0
- data/assets/resources/icons/icon.icns +0 -0
- data/assets/resources/icons/icon.png +0 -0
- data/assets/resources/spritesheets/License.txt +28 -0
- data/assets/resources/spritesheets/spritesheet-backgrounds.png +0 -0
- data/assets/resources/spritesheets/spritesheet-backgrounds.xml +16 -0
- data/assets/resources/spritesheets/spritesheet-characters.png +0 -0
- data/assets/resources/spritesheets/spritesheet-characters.xml +47 -0
- data/assets/resources/spritesheets/spritesheet-enemies.png +0 -0
- data/assets/resources/spritesheets/spritesheet-enemies.xml +62 -0
- data/assets/resources/spritesheets/spritesheet-tiles.png +0 -0
- data/assets/resources/spritesheets/spritesheet-tiles.xml +316 -0
- data/assets/{wasm → resources/web}/template.html +1 -1
- data/assets/target.rb +131 -0
- data/bin/ruby2d +281 -82
- data/examples/astar.rb +269 -0
- data/examples/asteroids.rb +403 -0
- data/examples/bezier_editor.rb +96 -0
- data/examples/boids.rb +191 -0
- data/examples/bouncing_balls.rb +119 -0
- data/examples/breakout.rb +186 -0
- data/examples/constellations.rb +100 -0
- data/examples/dashboard.rb +133 -0
- data/examples/double_pendulum.rb +254 -0
- data/examples/falling_sand.rb +291 -0
- data/examples/fireworks.rb +110 -0
- data/examples/fluid_dynamics.rb +340 -0
- data/examples/fourier_epicycles.rb +142 -0
- data/examples/fractal_tree.rb +326 -0
- data/examples/game_of_life.rb +148 -0
- data/examples/gamepads.rb +333 -0
- data/examples/hill_driver.rb +613 -0
- data/examples/logo_animation.rb +251 -0
- data/examples/lorenz_attractor.rb +115 -0
- data/examples/mandelbrot.rb +207 -0
- data/examples/marching_squares.rb +200 -0
- data/examples/maze.rb +323 -0
- data/examples/nbody.rb +338 -0
- data/examples/outrun.rb +391 -0
- data/examples/pixel_paint.rb +313 -0
- data/examples/platformer.rb +335 -0
- data/examples/ray_casting_maze.rb +175 -0
- data/examples/shadow_casting.rb +151 -0
- data/examples/shape_recognizer.rb +908 -0
- data/examples/snake.rb +144 -0
- data/examples/sprite_sheets.rb +246 -0
- data/examples/swarm.rb +206 -0
- data/examples/tsp_annealing.rb +104 -0
- data/examples/ui_controls.rb +163 -0
- data/examples/wireframe_3d.rb +139 -0
- data/ext/ruby2d/audio.c +324 -0
- data/ext/ruby2d/canvas.c +1715 -494
- data/ext/ruby2d/ext.c +541 -0
- data/ext/ruby2d/extconf.rb +122 -145
- data/ext/ruby2d/font.c +566 -20
- data/ext/ruby2d/fps.c +92 -0
- data/ext/ruby2d/image.c +466 -41
- data/ext/ruby2d/ruby2d.c +374 -1890
- data/ext/ruby2d/ruby2d.h +840 -460
- data/ext/ruby2d/shapes.c +931 -101
- data/ext/ruby2d/text.c +586 -21
- data/ext/ruby2d/window.c +1693 -283
- data/lib/ruby2d/atlas_parser.rb +194 -0
- data/lib/ruby2d/audio.rb +73 -0
- data/lib/ruby2d/benchmark.rb +259 -0
- data/lib/ruby2d/bitmap_text.rb +155 -0
- data/lib/ruby2d/button.rb +402 -0
- data/lib/ruby2d/canvas.rb +703 -279
- data/lib/ruby2d/circle.rb +206 -29
- data/lib/ruby2d/cli/browser.rb +314 -0
- data/lib/ruby2d/cli/build.rb +471 -257
- data/lib/ruby2d/cli/colorize.rb +7 -5
- data/lib/ruby2d/cli/examples.rb +127 -0
- data/lib/ruby2d/cli/launch.rb +24 -39
- data/lib/ruby2d/cli/lib_files.rb +48 -0
- data/lib/ruby2d/cli/messages.rb +40 -0
- data/lib/ruby2d/cli/setup.rb +273 -0
- data/lib/ruby2d/cli/static_server.rb +160 -0
- data/lib/ruby2d/cli/usage.rb +255 -0
- data/lib/ruby2d/color.rb +191 -69
- data/lib/ruby2d/core.rb +37 -19
- data/lib/ruby2d/deps_help.rb +89 -0
- data/lib/ruby2d/dsl.rb +51 -12
- data/lib/ruby2d/ellipse.rb +228 -0
- data/lib/ruby2d/exceptions.rb +0 -2
- data/lib/ruby2d/font.rb +34 -74
- data/lib/ruby2d/gamepad.rb +323 -0
- data/lib/ruby2d/gem_paths.rb +19 -0
- data/lib/ruby2d/image.rb +155 -52
- data/lib/ruby2d/interactive.rb +103 -0
- data/lib/ruby2d/json_parser.rb +268 -0
- data/lib/ruby2d/line.rb +194 -85
- data/lib/ruby2d/mruby_compat.rb +12 -0
- data/lib/ruby2d/polygon.rb +297 -0
- data/lib/ruby2d/polyline.rb +368 -0
- data/lib/ruby2d/quad.rb +358 -94
- data/lib/ruby2d/rectangle.rb +77 -19
- data/lib/ruby2d/renderable.rb +411 -11
- data/lib/ruby2d/sprite.rb +471 -180
- data/lib/ruby2d/sprite_sheet.rb +64 -0
- data/lib/ruby2d/square.rb +29 -17
- data/lib/ruby2d/text.rb +196 -65
- data/lib/ruby2d/tileset.rb +139 -81
- data/lib/ruby2d/triangle.rb +324 -89
- data/lib/ruby2d/version.rb +1 -3
- data/lib/ruby2d/vertices.rb +62 -85
- data/lib/ruby2d/warnings.rb +29 -0
- data/lib/ruby2d/window/class_methods.rb +218 -0
- data/lib/ruby2d/window/gamepad_events.rb +141 -0
- data/lib/ruby2d/window/key_events.rb +74 -0
- data/lib/ruby2d/window/mouse_events.rb +171 -0
- data/lib/ruby2d/window/object_events.rb +168 -0
- data/lib/ruby2d/window.rb +632 -585
- data/lib/ruby2d.rb +14 -19
- metadata +275 -428
- data/assets/app.icns +0 -0
- data/assets/include/GLES2/gl2.h +0 -656
- data/assets/include/GLES2/gl2ext.h +0 -3949
- data/assets/include/GLES2/gl2ext_angle.h +0 -701
- data/assets/include/GLES2/gl2platform.h +0 -27
- data/assets/include/GLES3/gl3.h +0 -1192
- data/assets/include/GLES3/gl31.h +0 -1507
- data/assets/include/GLES3/gl32.h +0 -1808
- data/assets/include/GLES3/gl3platform.h +0 -27
- data/assets/include/KHR/khrplatform.h +0 -290
- data/assets/include/SDL2/SDL.h +0 -233
- data/assets/include/SDL2/SDL_assert.h +0 -326
- data/assets/include/SDL2/SDL_atomic.h +0 -415
- data/assets/include/SDL2/SDL_audio.h +0 -1500
- data/assets/include/SDL2/SDL_clipboard.h +0 -141
- data/assets/include/SDL2/SDL_config.h +0 -61
- data/assets/include/SDL2/SDL_config_android.h +0 -194
- data/assets/include/SDL2/SDL_config_emscripten.h +0 -218
- data/assets/include/SDL2/SDL_config_iphoneos.h +0 -217
- data/assets/include/SDL2/SDL_config_macosx.h +0 -277
- data/assets/include/SDL2/SDL_config_minimal.h +0 -95
- data/assets/include/SDL2/SDL_config_ngage.h +0 -89
- data/assets/include/SDL2/SDL_config_os2.h +0 -207
- data/assets/include/SDL2/SDL_config_pandora.h +0 -141
- data/assets/include/SDL2/SDL_config_windows.h +0 -331
- data/assets/include/SDL2/SDL_config_wingdk.h +0 -253
- data/assets/include/SDL2/SDL_config_winrt.h +0 -220
- data/assets/include/SDL2/SDL_config_xbox.h +0 -235
- data/assets/include/SDL2/SDL_cpuinfo.h +0 -594
- data/assets/include/SDL2/SDL_endian.h +0 -348
- data/assets/include/SDL2/SDL_error.h +0 -163
- data/assets/include/SDL2/SDL_events.h +0 -1166
- data/assets/include/SDL2/SDL_filesystem.h +0 -149
- data/assets/include/SDL2/SDL_gamecontroller.h +0 -1074
- data/assets/include/SDL2/SDL_gesture.h +0 -117
- data/assets/include/SDL2/SDL_guid.h +0 -100
- data/assets/include/SDL2/SDL_haptic.h +0 -1341
- data/assets/include/SDL2/SDL_hidapi.h +0 -451
- data/assets/include/SDL2/SDL_hints.h +0 -2569
- data/assets/include/SDL2/SDL_image.h +0 -2173
- data/assets/include/SDL2/SDL_joystick.h +0 -1066
- data/assets/include/SDL2/SDL_keyboard.h +0 -353
- data/assets/include/SDL2/SDL_keycode.h +0 -358
- data/assets/include/SDL2/SDL_loadso.h +0 -115
- data/assets/include/SDL2/SDL_log.h +0 -404
- data/assets/include/SDL2/SDL_main.h +0 -275
- data/assets/include/SDL2/SDL_mixer.h +0 -2784
- data/assets/include/SDL2/SDL_mouse.h +0 -465
- data/assets/include/SDL2/SDL_mutex.h +0 -471
- data/assets/include/SDL2/SDL_name.h +0 -33
- data/assets/include/SDL2/SDL_pixels.h +0 -644
- data/assets/include/SDL2/SDL_platform.h +0 -261
- data/assets/include/SDL2/SDL_quit.h +0 -58
- data/assets/include/SDL2/SDL_rect.h +0 -376
- data/assets/include/SDL2/SDL_render.h +0 -1919
- data/assets/include/SDL2/SDL_revision.h +0 -6
- data/assets/include/SDL2/SDL_rwops.h +0 -841
- data/assets/include/SDL2/SDL_sensor.h +0 -322
- data/assets/include/SDL2/SDL_shape.h +0 -155
- data/assets/include/SDL2/SDL_stdinc.h +0 -830
- data/assets/include/SDL2/SDL_surface.h +0 -997
- data/assets/include/SDL2/SDL_system.h +0 -623
- data/assets/include/SDL2/SDL_syswm.h +0 -386
- data/assets/include/SDL2/SDL_test_images.h +0 -78
- data/assets/include/SDL2/SDL_test_random.h +0 -115
- data/assets/include/SDL2/SDL_thread.h +0 -464
- data/assets/include/SDL2/SDL_timer.h +0 -222
- data/assets/include/SDL2/SDL_touch.h +0 -150
- data/assets/include/SDL2/SDL_ttf.h +0 -2316
- data/assets/include/SDL2/SDL_types.h +0 -29
- data/assets/include/SDL2/SDL_version.h +0 -204
- data/assets/include/SDL2/SDL_video.h +0 -2150
- data/assets/include/SDL2/SDL_vulkan.h +0 -215
- data/assets/include/SDL2/begin_code.h +0 -187
- data/assets/include/mruby/boxing_no.h +0 -58
- data/assets/include/mruby/class.h +0 -108
- data/assets/include/mruby/error.h +0 -147
- data/assets/include/mruby/gc.h +0 -94
- data/assets/include/mruby/irep.h +0 -147
- data/assets/include/mruby/khash.h +0 -284
- data/assets/include/mruby/object.h +0 -43
- data/assets/include/mruby/presym/disable.h +0 -70
- data/assets/include/mruby/presym/enable.h +0 -37
- data/assets/include/mruby/presym.h +0 -40
- data/assets/include/mruby/proc.h +0 -211
- data/assets/include/mruby/throw.h +0 -66
- data/assets/macos/universal/bin/mrbc +0 -0
- data/assets/macos/universal/lib/libFLAC.a +0 -0
- data/assets/macos/universal/lib/libSDL2.a +0 -0
- data/assets/macos/universal/lib/libSDL2_image.a +0 -0
- data/assets/macos/universal/lib/libSDL2_mixer.a +0 -0
- data/assets/macos/universal/lib/libSDL2_ttf.a +0 -0
- data/assets/macos/universal/lib/libavif.a +0 -0
- data/assets/macos/universal/lib/libbrotlicommon-static.a +0 -0
- data/assets/macos/universal/lib/libbrotlidec-static.a +0 -0
- data/assets/macos/universal/lib/libfreetype.a +0 -0
- data/assets/macos/universal/lib/libgraphite2.a +0 -0
- data/assets/macos/universal/lib/libharfbuzz.a +0 -0
- data/assets/macos/universal/lib/libhwy.a +0 -0
- data/assets/macos/universal/lib/libjpeg.a +0 -0
- data/assets/macos/universal/lib/libjxl.a +0 -0
- data/assets/macos/universal/lib/libmodplug.a +0 -0
- data/assets/macos/universal/lib/libmpg123.a +0 -0
- data/assets/macos/universal/lib/libmruby.a +0 -0
- data/assets/macos/universal/lib/libogg.a +0 -0
- data/assets/macos/universal/lib/libpng.a +0 -0
- data/assets/macos/universal/lib/libtiff.a +0 -0
- data/assets/macos/universal/lib/libvorbis.a +0 -0
- data/assets/macos/universal/lib/libvorbisfile.a +0 -0
- data/assets/macos/universal/lib/libwebp.a +0 -0
- data/assets/macos/universal/lib/libzstd.a +0 -0
- data/assets/test_media/README.md +0 -3
- data/assets/test_media/bitstream_vera/COPYRIGHT.txt +0 -124
- data/assets/test_media/bitstream_vera/vera.ttf +0 -0
- data/assets/test_media/boom.png +0 -0
- data/assets/test_media/coin.png +0 -0
- data/assets/test_media/colors.png +0 -0
- data/assets/test_media/controller.png +0 -0
- data/assets/test_media/dial.wav +0 -0
- data/assets/test_media/hero.png +0 -0
- data/assets/test_media/image.bmp +0 -0
- data/assets/test_media/image.jpg +0 -0
- data/assets/test_media/image.png +0 -0
- data/assets/test_media/music.flac +0 -0
- data/assets/test_media/music.mp3 +0 -0
- data/assets/test_media/music.ogg +0 -0
- data/assets/test_media/music.wav +0 -0
- data/assets/test_media/originals/boom.pxm +0 -0
- data/assets/test_media/originals/coin.pxm +0 -0
- data/assets/test_media/originals/controller.sketch +0 -0
- data/assets/test_media/originals/hero.pxm +0 -0
- data/assets/test_media/originals/image.pxm +0 -0
- data/assets/test_media/originals/music.caf +0 -0
- data/assets/test_media/originals/texture_atlas.pxm +0 -0
- data/assets/test_media/rondo_alla_turka.ogg +0 -0
- data/assets/test_media/sound.flac +0 -0
- data/assets/test_media/sound.mp3 +0 -0
- data/assets/test_media/sound.ogg +0 -0
- data/assets/test_media/sound.wav +0 -0
- data/assets/test_media/sprite_sheet.png +0 -0
- data/assets/test_media/texture_atlas.png +0 -0
- data/assets/wasm/libmruby.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/bin/mrbc.exe +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libFLAC.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libLerc.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_image.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_mixer.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_ttf.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlicommon.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlidec.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbz2.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libdeflate.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libfreetype.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libglew32.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libgraphite2.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libharfbuzz.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libhwy.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjbig.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjpeg.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjxl.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/liblzma.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmodplug.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmpg123.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmruby.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libogg.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopus.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopusfile.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libpng.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libsndfile.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libssp.a +0 -1
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libstdc++.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libtiff.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbis.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbisfile.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libwebp.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libz.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libzstd.a +0 -0
- data/assets/windows/mingw-w64-x86_64/bin/mrbc.exe +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libFLAC.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libLerc.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libSDL2.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libSDL2_image.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libSDL2_mixer.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libSDL2_ttf.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libbrotlicommon.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libbrotlidec.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libbz2.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libdeflate.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libfreetype.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libglew32.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libgraphite2.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libharfbuzz.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libhwy.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libjbig.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libjpeg.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libjxl.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/liblzma.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libmodplug.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libmpg123.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libmruby.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libogg.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libopus.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libopusfile.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libpng.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libsndfile.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libssp.a +0 -1
- data/assets/windows/mingw-w64-x86_64/lib/libstdc++.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libtiff.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libvorbis.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libvorbisfile.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libwebp.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libz.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libzstd.a +0 -0
- data/assets/xcode/ios/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -98
- data/assets/xcode/ios/Assets.xcassets/Contents.json +0 -6
- data/assets/xcode/ios/Base.lproj/LaunchScreen.storyboard +0 -27
- data/assets/xcode/ios/Info.plist +0 -43
- data/assets/xcode/ios/MRuby.framework/Headers/mrbconf.h +0 -143
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/array.h +0 -280
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/class.h +0 -97
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/common.h +0 -77
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/compile.h +0 -195
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/data.h +0 -75
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/debug.h +0 -67
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/dump.h +0 -196
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/error.h +0 -75
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/gc.h +0 -91
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/hash.h +0 -215
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/irep.h +0 -75
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/istruct.h +0 -47
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/khash.h +0 -274
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/numeric.h +0 -161
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/object.h +0 -44
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/opcode.h +0 -69
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/ops.h +0 -117
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/proc.h +0 -131
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/range.h +0 -49
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/re.h +0 -16
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/string.h +0 -444
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/throw.h +0 -55
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/value.h +0 -309
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/variable.h +0 -136
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/version.h +0 -110
- data/assets/xcode/ios/MRuby.framework/Headers/mruby.h +0 -1282
- data/assets/xcode/ios/MRuby.framework/Info.plist +0 -20
- data/assets/xcode/ios/MRuby.framework/MRuby +0 -0
- data/assets/xcode/ios/MyApp.xcodeproj/project.pbxproj +0 -368
- data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
- data/assets/xcode/ios/main.c +0 -1
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json +0 -17
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json +0 -17
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json +0 -32
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/LaunchImage.launchimage/Contents.json +0 -22
- data/assets/xcode/tvos/Info.plist +0 -30
- data/assets/xcode/tvos/MRuby.framework/Headers/mrbconf.h +0 -143
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/array.h +0 -280
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/class.h +0 -97
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/common.h +0 -77
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/compile.h +0 -195
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/data.h +0 -75
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/debug.h +0 -67
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/dump.h +0 -196
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/error.h +0 -75
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/gc.h +0 -91
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/hash.h +0 -215
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/irep.h +0 -75
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/istruct.h +0 -47
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/khash.h +0 -274
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/numeric.h +0 -161
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/object.h +0 -44
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/opcode.h +0 -69
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/ops.h +0 -117
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/proc.h +0 -131
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/range.h +0 -49
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/re.h +0 -16
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/string.h +0 -444
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/throw.h +0 -55
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/value.h +0 -309
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/variable.h +0 -136
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/version.h +0 -110
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby.h +0 -1282
- data/assets/xcode/tvos/MRuby.framework/Info.plist +0 -20
- data/assets/xcode/tvos/MRuby.framework/MRuby +0 -0
- data/assets/xcode/tvos/MyApp.xcodeproj/project.pbxproj +0 -350
- data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
- data/assets/xcode/tvos/main.c +0 -1
- data/ext/ruby2d/common.c +0 -185
- data/ext/ruby2d/controllers.c +0 -110
- data/ext/ruby2d/gl.c +0 -398
- data/ext/ruby2d/gl2.c +0 -86
- data/ext/ruby2d/gl3.c +0 -304
- data/ext/ruby2d/gles.c +0 -302
- data/ext/ruby2d/input.c +0 -48
- data/ext/ruby2d/music.c +0 -127
- data/ext/ruby2d/sound.c +0 -132
- data/lib/ruby2d/cli/console.rb +0 -65
- data/lib/ruby2d/cli/enable_console.rb +0 -7
- data/lib/ruby2d/cli/platform.rb +0 -17
- data/lib/ruby2d/music.rb +0 -77
- data/lib/ruby2d/pixel.rb +0 -18
- data/lib/ruby2d/pixmap.rb +0 -39
- data/lib/ruby2d/pixmap_atlas.rb +0 -56
- data/lib/ruby2d/sound.rb +0 -61
- data/lib/ruby2d/texture.rb +0 -38
- /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2.h +0 -0
- /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2ext.h +0 -0
- /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2platform.h +0 -0
- /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_khrplatform.h +0 -0
- /data/assets/{include → platform/include}/mruby/re.h +0 -0
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
# Ruby2D::Button
|
|
2
|
+
|
|
3
|
+
module Ruby2D
|
|
4
|
+
# A clickable region with optional visual and label. Button is itself the
|
|
5
|
+
# interactive entity: it registers directly with `Window`'s interactive
|
|
6
|
+
# registry and holds its own event handlers. The optional `@visual` is a
|
|
7
|
+
# rendering concern, never an event-routing one.
|
|
8
|
+
class Button
|
|
9
|
+
include Interactive
|
|
10
|
+
|
|
11
|
+
attr_reader :label_text
|
|
12
|
+
|
|
13
|
+
# Create a button. Three forms:
|
|
14
|
+
#
|
|
15
|
+
# Self-rendered:
|
|
16
|
+
# Button.new(x:, y:, width:, height:, label:, color:, hover_color:) { ... }
|
|
17
|
+
#
|
|
18
|
+
# Wrap a custom visual (any shape responding to `x`, `y`, and `contains?`):
|
|
19
|
+
# Button.new(some_shape) { ... }
|
|
20
|
+
#
|
|
21
|
+
# Visual-less hit area (nothing rendered):
|
|
22
|
+
# Button.new(x:, y:, width:, height:) { ... }
|
|
23
|
+
#
|
|
24
|
+
# `hover_color:` and `pressed_color:` are opt-in. Pass an explicit color,
|
|
25
|
+
# or `:auto` (lightens for hover, darkens for pressed). Omit for no tint.
|
|
26
|
+
# When both are set and the user is hovering+pressed, pressed wins.
|
|
27
|
+
def initialize(visual = nil, x: 0, y: 0, z: 0, width: 200, height: 50,
|
|
28
|
+
label: nil, color: nil, colour: nil,
|
|
29
|
+
hover_color: nil, hover_colour: nil,
|
|
30
|
+
pressed_color: nil, pressed_colour: nil,
|
|
31
|
+
label_color: nil, label_colour: nil,
|
|
32
|
+
hover_label_color: nil, hover_label_colour: nil,
|
|
33
|
+
pressed_label_color: nil, pressed_label_colour: nil,
|
|
34
|
+
stroke_color: nil, stroke_colour: nil, stroke_width: 0,
|
|
35
|
+
label_size: 20, add: true, visible: true,
|
|
36
|
+
padding: nil, padding_top: nil, padding_right: nil,
|
|
37
|
+
padding_bottom: nil, padding_left: nil, &on_click)
|
|
38
|
+
base_color_input = color || colour
|
|
39
|
+
hover_input = hover_color || hover_colour
|
|
40
|
+
pressed_input = pressed_color || pressed_colour
|
|
41
|
+
hover_label_input = hover_label_color || hover_label_colour
|
|
42
|
+
pressed_label_input = pressed_label_color || pressed_label_colour
|
|
43
|
+
stroke_input = stroke_color || stroke_colour
|
|
44
|
+
|
|
45
|
+
# Label tints only make sense with a label to tint. Without one they would
|
|
46
|
+
# silently install no-op hover/press handlers and force the button
|
|
47
|
+
# interactive for no effect, so reject the combination up front.
|
|
48
|
+
if (hover_label_input || pressed_label_input) && !label
|
|
49
|
+
raise ArgumentError,
|
|
50
|
+
'`hover_label_color`/`pressed_label_color` require a `label:` to tint'
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
if visual
|
|
54
|
+
@visual = visual
|
|
55
|
+
@owns_visual = false
|
|
56
|
+
@x = visual.x
|
|
57
|
+
@y = visual.y
|
|
58
|
+
@z = visual.respond_to?(:z) ? visual.z : 0
|
|
59
|
+
@width = visual.respond_to?(:width) ? visual.width : 0
|
|
60
|
+
@height = visual.respond_to?(:height) ? visual.height : 0
|
|
61
|
+
else
|
|
62
|
+
@x = x.is_a?(Symbol) ? 0 : x
|
|
63
|
+
@y = y.is_a?(Symbol) ? 0 : y
|
|
64
|
+
@z = z
|
|
65
|
+
@width = width
|
|
66
|
+
@height = height
|
|
67
|
+
if label || base_color_input || stroke_input
|
|
68
|
+
# Self-rendered: own a Rectangle for drawing.
|
|
69
|
+
@visual = Rectangle.new(x: x, y: y, width: width, height: height, z: z,
|
|
70
|
+
color: base_color_input || '#333',
|
|
71
|
+
stroke_color: stroke_input,
|
|
72
|
+
stroke_width: stroke_width,
|
|
73
|
+
add: add, visible: visible,
|
|
74
|
+
padding: padding, padding_top: padding_top,
|
|
75
|
+
padding_right: padding_right,
|
|
76
|
+
padding_bottom: padding_bottom,
|
|
77
|
+
padding_left: padding_left)
|
|
78
|
+
@owns_visual = true
|
|
79
|
+
else
|
|
80
|
+
# Visual-less: no rendering, no @visual. Just an interactive region.
|
|
81
|
+
@visual = nil
|
|
82
|
+
@owns_visual = false
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
if label
|
|
87
|
+
@label = Text.new(label, x: 0, y: 0, z: @z + 1,
|
|
88
|
+
size: label_size, color: label_color || label_colour || 'white',
|
|
89
|
+
add: add, visible: visible)
|
|
90
|
+
center_label
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
if @visual && (hover_input || pressed_input || hover_label_input || pressed_label_input)
|
|
94
|
+
install_state_tint(hover_input, pressed_input,
|
|
95
|
+
hover_label_input, pressed_label_input)
|
|
96
|
+
end
|
|
97
|
+
hook_visual_alignment if @owns_visual
|
|
98
|
+
|
|
99
|
+
on(:click) { |e| on_click.call(e) } if on_click
|
|
100
|
+
|
|
101
|
+
# Honor `add: false` for interactivity, not just rendering. Registering the
|
|
102
|
+
# click/tint handlers above auto-added this Button to the interactive
|
|
103
|
+
# registry; without this an `add: false` Button would keep swallowing
|
|
104
|
+
# clicks while its un-added visual draws nothing. Only touches the registry
|
|
105
|
+
# when handlers exist, so a handler-less Button doesn't force a window into
|
|
106
|
+
# being. `add`/`remove` manage registration thereafter.
|
|
107
|
+
Window.unregister_interactive(self) if interactive? && !add
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Remove the button: drop visual + label from the render list and
|
|
111
|
+
# unregister Button from the interactive registry.
|
|
112
|
+
def remove
|
|
113
|
+
@visual.remove if @visual
|
|
114
|
+
@label.remove if @label
|
|
115
|
+
Window.unregister_interactive(self)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Re-add the button after `remove`. Restores rendering and re-registers
|
|
119
|
+
# in the interactive registry if any handlers are attached.
|
|
120
|
+
def add
|
|
121
|
+
@visual.add if @visual
|
|
122
|
+
@label.add if @label
|
|
123
|
+
Window.register_interactive(self) if interactive?
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# Mark the button visible (cascades to visual and label).
|
|
127
|
+
def show
|
|
128
|
+
@visual.show if @visual
|
|
129
|
+
@label.show if @label
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# Mark the button hidden (cascades to visual and label).
|
|
133
|
+
def hide
|
|
134
|
+
@visual.hide if @visual
|
|
135
|
+
@label.hide if @label
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Whether the button is currently visible.
|
|
139
|
+
def visible?
|
|
140
|
+
@visual ? @visual.visible? : true
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Hit-test the button. Wrapped visuals delegate so non-rectangular shapes
|
|
144
|
+
# (Circle, Polygon, …) test against their actual geometry.
|
|
145
|
+
def contains?(x, y)
|
|
146
|
+
return @visual.contains?(x, y) if @visual && !@owns_visual
|
|
147
|
+
|
|
148
|
+
x >= @x && x <= (@x + @width) && y >= @y && y <= (@y + @height)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def x
|
|
152
|
+
@owns_visual ? @x : (@visual ? @visual.x : @x)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# Set the x position. Pass a symbol (`:left`, `:center`, `:right`) to
|
|
156
|
+
# set alignment intent on the underlying visual (owned visuals only).
|
|
157
|
+
def x=(x)
|
|
158
|
+
return self.x_align = x if x.is_a?(Symbol)
|
|
159
|
+
|
|
160
|
+
@x = x
|
|
161
|
+
# Move the visual too — owned or wrapped — so the visual, the (delegated)
|
|
162
|
+
# hit region, the getter, and the label all move together.
|
|
163
|
+
@visual.x = x if @visual.respond_to?(:x=)
|
|
164
|
+
center_label if @label
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def y
|
|
168
|
+
@owns_visual ? @y : (@visual ? @visual.y : @y)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# Set the y position. Pass a symbol (`:top`, `:center`, `:bottom`) to
|
|
172
|
+
# set alignment intent on the underlying visual (owned visuals only).
|
|
173
|
+
def y=(y)
|
|
174
|
+
return self.y_align = y if y.is_a?(Symbol)
|
|
175
|
+
|
|
176
|
+
@y = y
|
|
177
|
+
# Move the visual too — owned or wrapped — so the visual, the (delegated)
|
|
178
|
+
# hit region, the getter, and the label all move together.
|
|
179
|
+
@visual.y = y if @visual.respond_to?(:y=)
|
|
180
|
+
center_label if @label
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def z
|
|
184
|
+
@owns_visual ? @z : (@visual && @visual.respond_to?(:z) ? @visual.z : @z)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def width
|
|
188
|
+
@owns_visual ? @width : (@visual && @visual.respond_to?(:width) ? @visual.width : @width)
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def height
|
|
192
|
+
@owns_visual ? @height : (@visual && @visual.respond_to?(:height) ? @visual.height : @height)
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
# Horizontal alignment intent of the underlying visual, or nil.
|
|
196
|
+
def x_align
|
|
197
|
+
@visual.respond_to?(:x_align) ? @visual.x_align : nil
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
# Vertical alignment intent of the underlying visual, or nil.
|
|
201
|
+
def y_align
|
|
202
|
+
@visual.respond_to?(:y_align) ? @visual.y_align : nil
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
# Set alignment intent on the underlying visual (owned visuals only), so
|
|
206
|
+
# these mirror the getters above rather than writing a `@x_align` the
|
|
207
|
+
# getters would never read. A wrapped visual is positioned by its owner,
|
|
208
|
+
# so alignment there is the caller's to set on the visual itself.
|
|
209
|
+
def x_align=(sym)
|
|
210
|
+
@visual.x_align = sym if @owns_visual
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
def y_align=(sym)
|
|
214
|
+
@visual.y_align = sym if @owns_visual
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
# Get the label string.
|
|
218
|
+
def label
|
|
219
|
+
@label ? @label.content : nil
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
# Set the label string.
|
|
223
|
+
def label=(text)
|
|
224
|
+
return unless @label
|
|
225
|
+
|
|
226
|
+
@label.content = text
|
|
227
|
+
center_label
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
# Get the button's fill color. When a hover/pressed tint is configured this
|
|
231
|
+
# returns the resting (base) color you set — not the transient tint while
|
|
232
|
+
# hovered or pressed — so it stays symmetric with `color=`. Otherwise it
|
|
233
|
+
# delegates to the visual. Returns nil when there is no colorable visual.
|
|
234
|
+
def color
|
|
235
|
+
return @base_color if @base_color
|
|
236
|
+
|
|
237
|
+
@visual.respond_to?(:color) ? @visual.color : nil
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
# Set the button's fill color. When a hover/pressed tint is configured this
|
|
241
|
+
# updates the resting (base) color and re-applies the current state so the
|
|
242
|
+
# change survives the next hover/press cycle; otherwise it sets the visual
|
|
243
|
+
# directly. Accepts a single color or a gradient (`Color::Set`). A no-op on
|
|
244
|
+
# a visual-less button.
|
|
245
|
+
def color=(c)
|
|
246
|
+
return unless @visual.respond_to?(:color=)
|
|
247
|
+
|
|
248
|
+
if @base_color
|
|
249
|
+
@base_color = Color.set(c)
|
|
250
|
+
apply_state
|
|
251
|
+
else
|
|
252
|
+
@visual.color = c
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
alias colour color
|
|
257
|
+
|
|
258
|
+
def colour=(c)
|
|
259
|
+
self.color = c
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
private
|
|
263
|
+
|
|
264
|
+
# Wire the hover/pressed tint state machine. `:auto` lightens for hover
|
|
265
|
+
# and darkens for pressed; any other value is treated as an explicit color.
|
|
266
|
+
# Pressed wins over hover when both apply (hovering+pressed). Drag-out
|
|
267
|
+
# while held reverts to base; drag back in re-engages the press tint.
|
|
268
|
+
def install_state_tint(hover_input, pressed_input,
|
|
269
|
+
hover_label_input, pressed_label_input)
|
|
270
|
+
@base_color = map_color(@visual.color) { |c| Color.new(c) }
|
|
271
|
+
@hover_color = resolve_state_color(hover_input, :lighten)
|
|
272
|
+
@pressed_color = resolve_state_color(pressed_input, :darken)
|
|
273
|
+
|
|
274
|
+
if @label
|
|
275
|
+
@base_label_color = Color.new(@label.color)
|
|
276
|
+
@hover_label_color = hover_label_input ? Color.new(hover_label_input) : nil
|
|
277
|
+
@pressed_label_color = pressed_label_input ? Color.new(pressed_label_input) : nil
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
@is_hovering = false
|
|
281
|
+
@is_pressed = false
|
|
282
|
+
|
|
283
|
+
on(:hover) { @is_hovering = true; apply_state }
|
|
284
|
+
on(:hover_out) { @is_hovering = false; apply_state }
|
|
285
|
+
on(:mouse_down) { @is_pressed = true; apply_state }
|
|
286
|
+
on(:mouse_up) { @is_pressed = false; apply_state }
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
# Resolve a state-color input into a concrete Color or Color::Set. `:auto`
|
|
290
|
+
# derives from the base color via `lighten` or `darken` as the state
|
|
291
|
+
# requires (per-vertex when the base is a gradient). An explicit input goes
|
|
292
|
+
# through `Color.set`, so a single color or a 4-color gradient both work.
|
|
293
|
+
def resolve_state_color(input, mode)
|
|
294
|
+
return nil unless input
|
|
295
|
+
return (mode == :lighten ? lighten(@base_color) : darken(@base_color)) if input == :auto
|
|
296
|
+
|
|
297
|
+
Color.set(input)
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
# Recompute fill and label color from current (hover, pressed) state and
|
|
301
|
+
# apply to the visual + label. Pressed-without-hovering shows the rest
|
|
302
|
+
# color (drag-out), matching native UI conventions.
|
|
303
|
+
def apply_state
|
|
304
|
+
fill, label_col = current_state_colors
|
|
305
|
+
@visual.color = fill
|
|
306
|
+
@label.color = label_col if @label && label_col
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
def current_state_colors
|
|
310
|
+
if @is_pressed && @is_hovering
|
|
311
|
+
[@pressed_color || @hover_color || @base_color,
|
|
312
|
+
@pressed_label_color || @hover_label_color || @base_label_color]
|
|
313
|
+
elsif @is_hovering
|
|
314
|
+
[@hover_color || @base_color, @hover_label_color || @base_label_color]
|
|
315
|
+
else
|
|
316
|
+
[@base_color, @base_label_color]
|
|
317
|
+
end
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
# Center the label text within the button bounds. `@x`/`@y` is the visual's
|
|
321
|
+
# anchor, which is the bounding-box top-left for most shapes but the *center*
|
|
322
|
+
# for a wrapped Circle/Ellipse — so back out the anchor offset to find the
|
|
323
|
+
# true top-left before centering.
|
|
324
|
+
def center_label
|
|
325
|
+
return unless @label
|
|
326
|
+
|
|
327
|
+
ox, oy = visual_anchor_offset
|
|
328
|
+
left = @x - ox
|
|
329
|
+
top = @y - oy
|
|
330
|
+
@label.x = left + (@width - @label.width) / 2.0
|
|
331
|
+
@label.y = top + (@height - @label.height) / 2.0
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
# Offset from the visual's bounding-box top-left to its `x`/`y` anchor.
|
|
335
|
+
# Zero for top-left-anchored shapes (Rectangle, owned visual, visual-less);
|
|
336
|
+
# the radius for a wrapped center-anchored Circle/Ellipse. Lets
|
|
337
|
+
# `center_label` find the bounding box regardless of the visual's anchor.
|
|
338
|
+
def visual_anchor_offset
|
|
339
|
+
if @visual && !@owns_visual && @visual.respond_to?(:_alignment_anchor_dx, true)
|
|
340
|
+
[@visual.send(:_alignment_anchor_dx), @visual.send(:_alignment_anchor_dy)]
|
|
341
|
+
else
|
|
342
|
+
[0, 0]
|
|
343
|
+
end
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
# Wrap the visual's alignment resolver so that, when symbolic alignment
|
|
347
|
+
# resolves to a numeric position at draw time, Button's stored `@x`/`@y`
|
|
348
|
+
# follow and the label re-centers.
|
|
349
|
+
def hook_visual_alignment
|
|
350
|
+
return unless @visual.respond_to?(:_resolve_alignment)
|
|
351
|
+
|
|
352
|
+
button = self
|
|
353
|
+
@visual.define_singleton_method(:_resolve_alignment) do
|
|
354
|
+
super()
|
|
355
|
+
button.send(:_sync_from_visual)
|
|
356
|
+
end
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
# Pull the visual's resolved position back into Button's own state and
|
|
360
|
+
# re-center the label. Called after each alignment resolution.
|
|
361
|
+
def _sync_from_visual
|
|
362
|
+
@x = @visual.x
|
|
363
|
+
@y = @visual.y
|
|
364
|
+
center_label if @label
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
# Lightened version of a color for the `:auto` hover tint. Maps per-vertex
|
|
368
|
+
# when the base is a gradient, so the gradient is preserved and brightened.
|
|
369
|
+
def lighten(color, amount = 0.15)
|
|
370
|
+
map_color(color) do |c|
|
|
371
|
+
Color.new([
|
|
372
|
+
[c.r + amount, 1.0].min,
|
|
373
|
+
[c.g + amount, 1.0].min,
|
|
374
|
+
[c.b + amount, 1.0].min,
|
|
375
|
+
c.a
|
|
376
|
+
])
|
|
377
|
+
end
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
# Darkened version of a color for the `:auto` pressed tint. Maps per-vertex
|
|
381
|
+
# when the base is a gradient, so the gradient is preserved and darkened.
|
|
382
|
+
def darken(color, amount = 0.15)
|
|
383
|
+
map_color(color) do |c|
|
|
384
|
+
Color.new([
|
|
385
|
+
[c.r - amount, 0.0].max,
|
|
386
|
+
[c.g - amount, 0.0].max,
|
|
387
|
+
[c.b - amount, 0.0].max,
|
|
388
|
+
c.a
|
|
389
|
+
])
|
|
390
|
+
end
|
|
391
|
+
end
|
|
392
|
+
|
|
393
|
+
# Apply a per-color transform to a single Color or to each color of a
|
|
394
|
+
# Color::Set, returning the same kind. Lets the hover/pressed tint operate
|
|
395
|
+
# on gradient fills as well as solid ones.
|
|
396
|
+
def map_color(color)
|
|
397
|
+
return yield(color) unless color.is_a?(Color::Set)
|
|
398
|
+
|
|
399
|
+
Color::Set.new(color.map { |c| yield(c) })
|
|
400
|
+
end
|
|
401
|
+
end
|
|
402
|
+
end
|