diff --git a/Cargo.lock b/Cargo.lock index 3920a96..a2bb392 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,6 +18,21 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "ahash" version = "0.8.11" @@ -32,12 +47,36 @@ dependencies = [ ] [[package]] -name = "aho-corasick" -version = "1.1.3" +name = "aligned-vec" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" + +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + +[[package]] +name = "android-activity" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" dependencies = [ - "memchr", + "android-properties", + "bitflags 2.6.0", + "cc", + "cesu8", + "jni", + "jni-sys", + "libc", + "log", + "ndk 0.8.0", + "ndk-context", + "ndk-sys 0.5.0+25.2.9519653", + "num_enum", + "thiserror", ] [[package]] @@ -54,9 +93,9 @@ dependencies = [ "jni-sys", "libc", "log", - "ndk", + "ndk 0.9.0", "ndk-context", - "ndk-sys", + "ndk-sys 0.6.0+11769913", "num_enum", "thiserror", ] @@ -74,13 +113,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] -name = "approx" -version = "0.4.0" +name = "arbitrary" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f2a05fd1bd10b2527e20a2cd32d8873d115b8b39fe219ee25f42a8aca6ba278" -dependencies = [ - "num-traits", -] +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" [[package]] name = "arboard" @@ -88,15 +124,26 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fb4009533e8ff8f1450a5bcbc30f4242a1d34442221f72314bea1f5dc9c7f89" dependencies = [ - "clipboard-win", + "clipboard-win 5.4.0", "log", - "objc2", + "objc2 0.5.2", "objc2-app-kit", "objc2-foundation", "parking_lot", "x11rb", ] +[[package]] +name = "arg_enum_proc_macro" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "arrayref" version = "0.3.7" @@ -128,28 +175,49 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] -name = "bindgen" -version = "0.69.4" +name = "av1-grain" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" +checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" dependencies = [ - "bitflags 2.6.0", - "cexpr", - "clang-sys", - "itertools", - "lazy_static", - "lazycell", + "anyhow", + "arrayvec", "log", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash", - "shlex", - "syn", - "which", + "nom", + "num-rational", + "v_frame", ] +[[package]] +name = "avif-serialize" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876c75a42f6364451a033496a14c44bffe41f5f4a8236f697391f11024e596d2" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + [[package]] name = "bitflags" version = "1.3.2" @@ -168,15 +236,52 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5da9b3d9f6f585199287a473f4f8dfab6566cf827d15c00c219f53c645687ead" +[[package]] +name = "bitstream-io" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dcde5f311c85b8ca30c2e4198d4326bc342c76541590106f5fa4a50946ea499" + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "block2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b55663a85f33501257357e6421bb33e769d5c9ffb5ba0921c975a123e35e68" +dependencies = [ + "block-sys", + "objc2 0.4.1", +] + [[package]] name = "block2" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" dependencies = [ - "objc2", + "objc2 0.5.2", ] +[[package]] +name = "built" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "236e6289eda5a812bc6b53c3b024039382a2895fbbeef2d748b2931546d392c4" + [[package]] name = "bumpalo" version = "3.16.0" @@ -195,12 +300,32 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + [[package]] name = "bytes" version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" +[[package]] +name = "calloop" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298" +dependencies = [ + "bitflags 2.6.0", + "log", + "polling", + "rustix", + "slab", + "thiserror", +] + [[package]] name = "calloop" version = "0.13.0" @@ -215,18 +340,45 @@ dependencies = [ "thiserror", ] +[[package]] +name = "calloop-wayland-source" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" +dependencies = [ + "calloop 0.12.4", + "rustix", + "wayland-backend", + "wayland-client", +] + [[package]] name = "calloop-wayland-source" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" dependencies = [ - "calloop", + "calloop 0.13.0", "rustix", "wayland-backend", "wayland-client", ] +[[package]] +name = "cassowary" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" + +[[package]] +name = "castaway" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5" +dependencies = [ + "rustversion", +] + [[package]] name = "cc" version = "1.1.6" @@ -244,12 +396,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" [[package]] -name = "cexpr" -version = "0.6.0" +name = "cfg-expr" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" dependencies = [ - "nom", + "smallvec", + "target-lexicon", ] [[package]] @@ -258,6 +411,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "cfg_aliases" version = "0.2.1" @@ -274,25 +433,19 @@ dependencies = [ ] [[package]] -name = "cgmath" -version = "0.18.0" +name = "chlorine" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a98d30140e3296250832bbaaff83b27dcd6fa3cc70fb6f1f3e5c9c0023b5317" -dependencies = [ - "approx", - "mint", - "num-traits", -] +checksum = "1e10e7569f6ca78ef7664d7d651115172d4875c4410c050306bccde856a99a49" [[package]] -name = "clang-sys" -version = "1.8.1" +name = "clipboard-win" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +checksum = "9fdf5e01086b6be750428ba4a40619f847eb2e95756eee84b18e06e5f0b50342" dependencies = [ - "glob", - "libc", - "libloading", + "lazy-bytes-cast", + "winapi", ] [[package]] @@ -304,6 +457,12 @@ dependencies = [ "error-code", ] +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + [[package]] name = "combine" version = "4.6.7" @@ -314,6 +473,20 @@ dependencies = [ "memchr", ] +[[package]] +name = "compact_str" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6050c3a16ddab2e412160b31f2c871015704239bca62f72f6e5f0be631d3f644" +dependencies = [ + "castaway", + "cfg-if", + "itoa", + "rustversion", + "ryu", + "static_assertions", +] + [[package]] name = "concurrent-queue" version = "2.5.0" @@ -323,6 +496,20 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "copypasta" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb85422867ca93da58b7f95fb5c0c10f6183ed6e1ef8841568968a896d3a858" +dependencies = [ + "clipboard-win 3.1.1", + "objc", + "objc-foundation", + "objc_id", + "smithay-clipboard", + "x11-clipboard", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -363,12 +550,71 @@ dependencies = [ "libc", ] +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +[[package]] +name = "crossterm" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" +dependencies = [ + "bitflags 2.6.0", + "crossterm_winapi", + "mio", + "parking_lot", + "rustix", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + [[package]] name = "cursor-icon" version = "1.1.0" @@ -405,71 +651,19 @@ dependencies = [ "mint", ] -[[package]] -name = "easy-imgui" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128099cf608fd52fb6d68f0c341c71b4a7c6fc70d71b70e6d4b95081ba5e0cda" -dependencies = [ - "bitflags 2.6.0", - "cgmath", - "easy-imgui-sys", - "image", - "mint", - "paste", -] - -[[package]] -name = "easy-imgui-renderer" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f35e6e4bcf3d9f028eaec23e044bc50ecd31899fb4407a6f3b9cd26814be97c6" -dependencies = [ - "anyhow", - "cgmath", - "easy-imgui", - "easy-imgui-sys", - "glow", - "log", - "smallvec", -] - -[[package]] -name = "easy-imgui-sys" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c228fb711bf717ca3c3d28f7b6d305c9e50cf1515c9284f38b327825445a870" -dependencies = [ - "bindgen", - "cc", - "pkg-config", - "xshell", -] - -[[package]] -name = "easy-imgui-window" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07d58dd615389e6ac1b7de9df82a800102c575c1f428533a56ca2f6e00512ec7" -dependencies = [ - "anyhow", - "arboard", - "bitflags 2.6.0", - "easy-imgui", - "easy-imgui-renderer", - "easy-imgui-sys", - "glutin", - "glutin-winit", - "raw-window-handle", - "winit", -] - [[package]] name = "either" version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +[[package]] +name = "emmaemu" +version = "0.1.0" +dependencies = [ + "ratatui", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -492,6 +686,56 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0474425d51df81997e2f90a21591180b38eccf27292d755f3e30750225c175b" +[[package]] +name = "exr" +version = "1.72.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" +dependencies = [ + "bit_field", + "flume", + "half", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + +[[package]] +name = "fdeflate" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "flate2" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "spin", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "foreign-types" version = "0.5.0" @@ -540,6 +784,22 @@ dependencies = [ "wasi", ] +[[package]] +name = "gif" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gimli" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + [[package]] name = "gl_generator" version = "0.14.0" @@ -552,21 +812,46 @@ dependencies = [ ] [[package]] -name = "glob" -version = "0.3.1" +name = "glium" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "94d5813c960a54b76e20fe4ef7e54fbeb12545776a11ecf14f42a946a1c65964" +dependencies = [ + "backtrace", + "fnv", + "gl_generator", + "glutin 0.31.3", + "glutin-winit 0.4.2", + "lazy_static", + "memoffset", + "raw-window-handle 0.5.2", + "smallvec", + "takeable-option", + "winit 0.29.15", +] [[package]] -name = "glow" -version = "0.13.1" +name = "glutin" +version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1" +checksum = "18fcd4ae4e86d991ad1300b8f57166e5be0c95ef1f63f3f5b827f8a164548746" dependencies = [ - "js-sys", - "slotmap", - "wasm-bindgen", - "web-sys", + "bitflags 2.6.0", + "cfg_aliases 0.1.1", + "cgl", + "core-foundation", + "dispatch", + "glutin_egl_sys 0.6.0", + "glutin_glx_sys 0.5.0", + "glutin_wgl_sys 0.5.0", + "icrate", + "libloading", + "objc2 0.4.1", + "once_cell", + "raw-window-handle 0.5.2", + "wayland-sys", + "windows-sys 0.48.0", + "x11-dl", ] [[package]] @@ -576,34 +861,56 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2491aa3090f682ddd920b184491844440fdd14379c7eef8f5bc10ef7fb3242fd" dependencies = [ "bitflags 2.6.0", - "cfg_aliases", + "cfg_aliases 0.2.1", "cgl", "core-foundation", "dispatch", - "glutin_egl_sys", - "glutin_glx_sys", - "glutin_wgl_sys", + "glutin_egl_sys 0.7.0", + "glutin_glx_sys 0.6.0", + "glutin_wgl_sys 0.6.0", "libloading", - "objc2", + "objc2 0.5.2", "objc2-app-kit", "objc2-foundation", "once_cell", - "raw-window-handle", + "raw-window-handle 0.6.2", "wayland-sys", "windows-sys 0.52.0", "x11-dl", ] +[[package]] +name = "glutin-winit" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebcdfba24f73b8412c5181e56f092b5eff16671c514ce896b258a0a64bd7735" +dependencies = [ + "cfg_aliases 0.1.1", + "glutin 0.31.3", + "raw-window-handle 0.5.2", + "winit 0.29.15", +] + [[package]] name = "glutin-winit" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f" dependencies = [ - "cfg_aliases", - "glutin", - "raw-window-handle", - "winit", + "cfg_aliases 0.2.1", + "glutin 0.32.0", + "raw-window-handle 0.6.2", + "winit 0.30.4", +] + +[[package]] +name = "glutin_egl_sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77cc5623f5309ef433c3dd4ca1223195347fe62c413da8e2fdd0eb76db2d9bcd" +dependencies = [ + "gl_generator", + "windows-sys 0.48.0", ] [[package]] @@ -616,6 +923,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "glutin_glx_sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a165fd686c10dcc2d45380b35796e577eacfd43d4660ee741ec8ebe2201b3b4f" +dependencies = [ + "gl_generator", + "x11-dl", +] + [[package]] name = "glutin_glx_sys" version = "0.6.0" @@ -626,6 +943,15 @@ dependencies = [ "x11-dl", ] +[[package]] +name = "glutin_wgl_sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8098adac955faa2d31079b65dc48841251f69efd3ac25477903fc424362ead" +dependencies = [ + "gl_generator", +] + [[package]] name = "glutin_wgl_sys" version = "0.6.0" @@ -635,11 +961,37 @@ dependencies = [ "gl_generator", ] +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + [[package]] name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hermit-abi" @@ -648,23 +1000,98 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" [[package]] -name = "home" -version = "0.5.9" +name = "icrate" +version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "99d3aaff8a54577104bafdf686ff18565c3b6903ca5782a2026ef06e2c7aa319" dependencies = [ - "windows-sys 0.52.0", + "block2 0.3.0", + "dispatch", + "objc2 0.4.1", ] [[package]] name = "image" -version = "0.25.1" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd54d660e773627692c524beaad361aca785a4f9f5730ce91f42aabe5bce3d11" +checksum = "99314c8a2152b8ddb211f924cdae532d8c5e4c8bb54728e12fff1b0cd5963a10" dependencies = [ "bytemuck", - "byteorder", + "byteorder-lite", + "color_quant", + "exr", + "gif", + "image-webp", "num-traits", + "png", + "qoi", + "ravif", + "rayon", + "rgb", + "tiff", + "zune-core", + "zune-jpeg", +] + +[[package]] +name = "image-webp" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f79afb8cbee2ef20f59ccd477a218c12a93943d075b492015ecb1bb81f8ee904" +dependencies = [ + "byteorder-lite", + "quick-error", +] + +[[package]] +name = "imgref" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126" + +[[package]] +name = "imgui" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8addafa5cecf0515812226e806913814e02ce38d10215778082af5174abe5669" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "imgui-sys", + "mint", + "parking_lot", +] + +[[package]] +name = "imgui-glium-renderer" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9d2bd51a05a7d6d8a65a19fe4a1fea612b7d6a74745a4f52ad7cccc181f2a78" +dependencies = [ + "glium", + "imgui", +] + +[[package]] +name = "imgui-sys" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ead193f9f4b60398e8b8f4ab1483e2321640d87aeebdaa3e5f44c55633ccd804" +dependencies = [ + "cc", + "cfg-if", + "chlorine", + "mint", +] + +[[package]] +name = "imgui-winit-support" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e3c00d50ebf207505ea6bc9a5cdafb33c1d14a8fe854fff1fa3542f013f3952" +dependencies = [ + "imgui", + "winit 0.29.15", ] [[package]] @@ -677,6 +1104,27 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "instability" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b23a0c8dfe501baac4adf6ebbfa6eddf8f0c07f56b058cc1288017e32397846c" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "interpolate_name" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "itertools" version = "0.12.1" @@ -686,6 +1134,21 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + [[package]] name = "jni" version = "0.21.1" @@ -717,6 +1180,12 @@ dependencies = [ "libc", ] +[[package]] +name = "jpeg-decoder" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" + [[package]] name = "js-sys" version = "0.3.69" @@ -732,6 +1201,12 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" +[[package]] +name = "lazy-bytes-cast" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10257499f089cd156ad82d0a9cd57d9501fa2c989068992a97eb3c27836f206b" + [[package]] name = "lazy_static" version = "1.5.0" @@ -739,10 +1214,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] -name = "lazycell" -version = "1.3.0" +name = "lebe" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "libc" @@ -750,6 +1225,17 @@ version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +[[package]] +name = "libfuzzer-sys" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a96cfd5557eb82f2b83fed4955246c988d331975a002961b07c81584d107e7f7" +dependencies = [ + "arbitrary", + "cc", + "once_cell", +] + [[package]] name = "libloading" version = "0.8.5" @@ -793,6 +1279,42 @@ version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +[[package]] +name = "loop9" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" +dependencies = [ + "imgref", +] + +[[package]] +name = "lru" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" +dependencies = [ + "hashbrown", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "maybe-rayon" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" +dependencies = [ + "cfg-if", +] + [[package]] name = "memchr" version = "2.7.4" @@ -808,18 +1330,66 @@ dependencies = [ "libc", ] +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + [[package]] name = "minimal-lexical" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", + "simd-adler32", +] + [[package]] name = "mint" version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "log", + "wasi", + "windows-sys 0.52.0", +] + +[[package]] +name = "ndk" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" +dependencies = [ + "bitflags 2.6.0", + "jni-sys", + "log", + "ndk-sys 0.5.0+25.2.9519653", + "num_enum", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.2", + "thiserror", +] + [[package]] name = "ndk" version = "0.9.0" @@ -829,9 +1399,9 @@ dependencies = [ "bitflags 2.6.0", "jni-sys", "log", - "ndk-sys", + "ndk-sys 0.6.0+11769913", "num_enum", - "raw-window-handle", + "raw-window-handle 0.6.2", "thiserror", ] @@ -841,6 +1411,15 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" +[[package]] +name = "ndk-sys" +version = "0.5.0+25.2.9519653" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" +dependencies = [ + "jni-sys", +] + [[package]] name = "ndk-sys" version = "0.6.0+11769913" @@ -850,6 +1429,12 @@ dependencies = [ "jni-sys", ] +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + [[package]] name = "nom" version = "7.1.3" @@ -860,6 +1445,53 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "noop_proc_macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -890,12 +1522,42 @@ dependencies = [ "syn", ] +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + [[package]] name = "objc-sys" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" +[[package]] +name = "objc2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d" +dependencies = [ + "objc-sys", + "objc2-encode 3.0.0", +] + [[package]] name = "objc2" version = "0.5.2" @@ -903,7 +1565,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" dependencies = [ "objc-sys", - "objc2-encode", + "objc2-encode 4.0.3", ] [[package]] @@ -913,9 +1575,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ "bitflags 2.6.0", - "block2", + "block2 0.5.1", "libc", - "objc2", + "objc2 0.5.2", "objc2-core-data", "objc2-core-image", "objc2-foundation", @@ -929,8 +1591,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ "bitflags 2.6.0", - "block2", - "objc2", + "block2 0.5.1", + "objc2 0.5.2", "objc2-core-location", "objc2-foundation", ] @@ -941,8 +1603,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" dependencies = [ - "block2", - "objc2", + "block2 0.5.1", + "objc2 0.5.2", "objc2-foundation", ] @@ -953,8 +1615,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ "bitflags 2.6.0", - "block2", - "objc2", + "block2 0.5.1", + "objc2 0.5.2", "objc2-foundation", ] @@ -964,8 +1626,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" dependencies = [ - "block2", - "objc2", + "block2 0.5.1", + "objc2 0.5.2", "objc2-foundation", "objc2-metal", ] @@ -976,12 +1638,18 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" dependencies = [ - "block2", - "objc2", + "block2 0.5.1", + "objc2 0.5.2", "objc2-contacts", "objc2-foundation", ] +[[package]] +name = "objc2-encode" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666" + [[package]] name = "objc2-encode" version = "4.0.3" @@ -995,10 +1663,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ "bitflags 2.6.0", - "block2", + "block2 0.5.1", "dispatch", "libc", - "objc2", + "objc2 0.5.2", ] [[package]] @@ -1007,8 +1675,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" dependencies = [ - "block2", - "objc2", + "block2 0.5.1", + "objc2 0.5.2", "objc2-app-kit", "objc2-foundation", ] @@ -1020,8 +1688,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ "bitflags 2.6.0", - "block2", - "objc2", + "block2 0.5.1", + "objc2 0.5.2", "objc2-foundation", ] @@ -1032,8 +1700,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ "bitflags 2.6.0", - "block2", - "objc2", + "block2 0.5.1", + "objc2 0.5.2", "objc2-foundation", "objc2-metal", ] @@ -1044,7 +1712,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" dependencies = [ - "objc2", + "objc2 0.5.2", "objc2-foundation", ] @@ -1055,8 +1723,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ "bitflags 2.6.0", - "block2", - "objc2", + "block2 0.5.1", + "objc2 0.5.2", "objc2-cloud-kit", "objc2-core-data", "objc2-core-image", @@ -1075,8 +1743,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" dependencies = [ - "block2", - "objc2", + "block2 0.5.1", + "objc2 0.5.2", "objc2-foundation", ] @@ -1087,12 +1755,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ "bitflags 2.6.0", - "block2", - "objc2", + "block2 0.5.1", + "objc2 0.5.2", "objc2-core-location", "objc2-foundation", ] +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "object" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f203fa8daa7bb185f760ae12bd8e097f63d17041dcdcaf675ac54cdf863170e" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" version = "1.19.0" @@ -1184,6 +1870,19 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +[[package]] +name = "png" +version = "0.17.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + [[package]] name = "polling" version = "3.7.2" @@ -1192,7 +1891,7 @@ checksum = "a3ed00ed3fbf728b5816498ecd316d1716eecaced9c0c8d2c5a6740ca214985b" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi", + "hermit-abi 0.4.0", "pin-project-lite", "rustix", "tracing", @@ -1200,13 +1899,13 @@ dependencies = [ ] [[package]] -name = "prettyplease" -version = "0.2.20" +name = "ppv-lite86" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +checksum = "2288c0e17cc8d342c712bb43a257a80ebffce59cdb33d5000d8348f3ec02528b" dependencies = [ - "proc-macro2", - "syn", + "zerocopy", + "zerocopy-derive", ] [[package]] @@ -1215,7 +1914,7 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ - "toml_edit", + "toml_edit 0.21.1", ] [[package]] @@ -1227,6 +1926,40 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "profiling" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" +dependencies = [ + "profiling-procmacros", +] + +[[package]] +name = "profiling-procmacros" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + [[package]] name = "quick-xml" version = "0.34.0" @@ -1245,12 +1978,147 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "ratatui" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ba6a365afbe5615999275bea2446b970b10a41102500e27ce7678d50d978303" +dependencies = [ + "bitflags 2.6.0", + "cassowary", + "compact_str", + "crossterm", + "instability", + "itertools 0.13.0", + "lru", + "paste", + "strum", + "strum_macros", + "unicode-segmentation", + "unicode-truncate", + "unicode-width", +] + +[[package]] +name = "rav1e" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" +dependencies = [ + "arbitrary", + "arg_enum_proc_macro", + "arrayvec", + "av1-grain", + "bitstream-io", + "built", + "cfg-if", + "interpolate_name", + "itertools 0.12.1", + "libc", + "libfuzzer-sys", + "log", + "maybe-rayon", + "new_debug_unreachable", + "noop_proc_macro", + "num-derive", + "num-traits", + "once_cell", + "paste", + "profiling", + "rand", + "rand_chacha", + "simd_helpers", + "system-deps", + "thiserror", + "v_frame", + "wasm-bindgen", +] + +[[package]] +name = "ravif" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5797d09f9bd33604689e87e8380df4951d4912f01b63f71205e2abd4ae25e6b6" +dependencies = [ + "avif-serialize", + "imgref", + "loop9", + "quick-error", + "rav1e", + "rgb", +] + +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + [[package]] name = "raw-window-handle" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "redox_syscall" version = "0.4.1" @@ -1270,39 +2138,19 @@ dependencies = [ ] [[package]] -name = "regex" -version = "1.10.5" +name = "rgb" +version = "0.8.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "ade4539f42266ded9e755c605bdddf546242b2c961b03b06a7375260788a0523" dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", + "bytemuck", ] [[package]] -name = "regex-automata" -version = "0.4.7" +name = "rustc-demangle" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustix" @@ -1317,6 +2165,18 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + [[package]] name = "same-file" version = "1.0.6" @@ -1338,6 +2198,19 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "sctk-adwaita" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70b31447ca297092c5a9916fc3b955203157b37c19ca8edde4f52e9843e602c7" +dependencies = [ + "ab_glyph", + "log", + "memmap2", + "smithay-client-toolkit 0.18.1", + "tiny-skia", +] + [[package]] name = "sctk-adwaita" version = "0.10.1" @@ -1347,7 +2220,7 @@ dependencies = [ "ab_glyph", "log", "memmap2", - "smithay-client-toolkit", + "smithay-client-toolkit 0.19.2", "tiny-skia", ] @@ -1372,10 +2245,58 @@ dependencies = [ ] [[package]] -name = "shlex" -version = "1.3.0" +name = "serde_spanned" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +dependencies = [ + "serde", +] + +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simd_helpers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" +dependencies = [ + "quote", +] [[package]] name = "slab" @@ -1386,15 +2307,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "slotmap" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" -dependencies = [ - "version_check", -] - [[package]] name = "smallvec" version = "1.13.2" @@ -1403,13 +2315,13 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "smithay-client-toolkit" -version = "0.19.2" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" +checksum = "922fd3eeab3bd820d76537ce8f582b1cf951eceb5475c28500c7457d9d17f53a" dependencies = [ "bitflags 2.6.0", - "calloop", - "calloop-wayland-source", + "calloop 0.12.4", + "calloop-wayland-source 0.2.0", "cursor-icon", "libc", "log", @@ -1420,12 +2332,48 @@ dependencies = [ "wayland-client", "wayland-csd-frame", "wayland-cursor", - "wayland-protocols", - "wayland-protocols-wlr", + "wayland-protocols 0.31.2", + "wayland-protocols-wlr 0.2.0", "wayland-scanner", "xkeysym", ] +[[package]] +name = "smithay-client-toolkit" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" +dependencies = [ + "bitflags 2.6.0", + "calloop 0.13.0", + "calloop-wayland-source 0.3.0", + "cursor-icon", + "libc", + "log", + "memmap2", + "rustix", + "thiserror", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols 0.32.3", + "wayland-protocols-wlr 0.3.3", + "wayland-scanner", + "xkeysym", +] + +[[package]] +name = "smithay-clipboard" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" +dependencies = [ + "libc", + "smithay-client-toolkit 0.19.2", + "wayland-backend", +] + [[package]] name = "smol_str" version = "0.2.2" @@ -1435,12 +2383,49 @@ dependencies = [ "serde", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "strict-num" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + [[package]] name = "syn" version = "2.0.71" @@ -1452,6 +2437,31 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck", + "pkg-config", + "toml", + "version-compare", +] + +[[package]] +name = "takeable-option" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36ae8932fcfea38b7d3883ae2ab357b0d57a02caaa18ebb4f5ece08beaec4aa0" + +[[package]] +name = "target-lexicon" +version = "0.12.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4873307b7c257eddcb50c9bedf158eb669578359fb28428bef438fec8e6ba7c2" + [[package]] name = "thiserror" version = "1.0.63" @@ -1472,6 +2482,17 @@ dependencies = [ "syn", ] +[[package]] +name = "tiff" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + [[package]] name = "tiny-skia" version = "0.11.4" @@ -1497,11 +2518,26 @@ dependencies = [ "strict-num", ] +[[package]] +name = "toml" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac2caab0bf757388c6c0ae23b3293fdb463fee59434529014f85e3263b995c28" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.22.16", +] + [[package]] name = "toml_datetime" version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +dependencies = [ + "serde", +] [[package]] name = "toml_edit" @@ -1511,7 +2547,20 @@ checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ "indexmap", "toml_datetime", - "winnow", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "278f3d518e152219c994ce877758516bca5e118eaed6996192a774fb9fbf0788" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.6.16", ] [[package]] @@ -1542,16 +2591,18 @@ name = "trevors_chip8_toy" version = "0.1.0" dependencies = [ "arboard", - "easy-imgui", - "easy-imgui-renderer", - "easy-imgui-sys", - "easy-imgui-window", - "glutin", - "glutin-winit", + "copypasta", + "glium", + "glutin 0.32.0", + "glutin-winit 0.5.0", + "image", + "imgui", + "imgui-glium-renderer", + "imgui-winit-support", "log", - "raw-window-handle", + "raw-window-handle 0.6.2", "trevors_chip8_core", - "winit", + "winit 0.30.4", ] [[package]] @@ -1572,6 +2623,40 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +[[package]] +name = "unicode-truncate" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3644627a5af5fa321c95b9b235a72fd24cd29c648c2c379431e6628655627bf" +dependencies = [ + "itertools 0.13.0", + "unicode-segmentation", + "unicode-width", +] + +[[package]] +name = "unicode-width" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" + +[[package]] +name = "v_frame" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" +dependencies = [ + "aligned-vec", + "num-traits", + "wasm-bindgen", +] + +[[package]] +name = "version-compare" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" + [[package]] name = "version_check" version = "0.9.4" @@ -1708,6 +2793,18 @@ dependencies = [ "xcursor", ] +[[package]] +name = "wayland-protocols" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" +dependencies = [ + "bitflags 2.6.0", + "wayland-backend", + "wayland-client", + "wayland-scanner", +] + [[package]] name = "wayland-protocols" version = "0.32.3" @@ -1720,6 +2817,19 @@ dependencies = [ "wayland-scanner", ] +[[package]] +name = "wayland-protocols-plasma" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23803551115ff9ea9bce586860c5c5a971e360825a0309264102a9495a5ff479" +dependencies = [ + "bitflags 2.6.0", + "wayland-backend", + "wayland-client", + "wayland-protocols 0.31.2", + "wayland-scanner", +] + [[package]] name = "wayland-protocols-plasma" version = "0.3.3" @@ -1729,7 +2839,20 @@ dependencies = [ "bitflags 2.6.0", "wayland-backend", "wayland-client", - "wayland-protocols", + "wayland-protocols 0.32.3", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-wlr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" +dependencies = [ + "bitflags 2.6.0", + "wayland-backend", + "wayland-client", + "wayland-protocols 0.31.2", "wayland-scanner", ] @@ -1742,7 +2865,7 @@ dependencies = [ "bitflags 2.6.0", "wayland-backend", "wayland-client", - "wayland-protocols", + "wayland-protocols 0.32.3", "wayland-scanner", ] @@ -1779,6 +2902,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "web-time" version = "1.1.0" @@ -1790,17 +2923,27 @@ dependencies = [ ] [[package]] -name = "which" -version = "4.4.2" +name = "weezl" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ - "either", - "home", - "once_cell", - "rustix", + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", ] +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + [[package]] name = "winapi-util" version = "0.1.8" @@ -1810,6 +2953,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + [[package]] name = "windows-sys" version = "0.45.0" @@ -1819,6 +2968,15 @@ dependencies = [ "windows-targets 0.42.2", ] +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + [[package]] name = "windows-sys" version = "0.52.0" @@ -2006,6 +3164,55 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "winit" +version = "0.29.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d59ad965a635657faf09c8f062badd885748428933dad8e8bdd64064d92e5ca" +dependencies = [ + "ahash", + "android-activity 0.5.2", + "atomic-waker", + "bitflags 2.6.0", + "bytemuck", + "calloop 0.12.4", + "cfg_aliases 0.1.1", + "core-foundation", + "core-graphics", + "cursor-icon", + "icrate", + "js-sys", + "libc", + "log", + "memmap2", + "ndk 0.8.0", + "ndk-sys 0.5.0+25.2.9519653", + "objc2 0.4.1", + "once_cell", + "orbclient", + "percent-encoding", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.2", + "redox_syscall 0.3.5", + "rustix", + "sctk-adwaita 0.8.3", + "smithay-client-toolkit 0.18.1", + "smol_str", + "unicode-segmentation", + "wasm-bindgen", + "wasm-bindgen-futures", + "wayland-backend", + "wayland-client", + "wayland-protocols 0.31.2", + "wayland-protocols-plasma 0.2.0", + "web-sys", + "web-time 0.2.4", + "windows-sys 0.48.0", + "x11-dl", + "x11rb", + "xkbcommon-dl", +] + [[package]] name = "winit" version = "0.30.4" @@ -2013,13 +3220,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4225ddd8ab67b8b59a2fee4b34889ebf13c0460c1c3fa297c58e21eb87801b33" dependencies = [ "ahash", - "android-activity", + "android-activity 0.6.0", "atomic-waker", "bitflags 2.6.0", - "block2", + "block2 0.5.1", "bytemuck", - "calloop", - "cfg_aliases", + "calloop 0.13.0", + "cfg_aliases 0.2.1", "concurrent-queue", "core-foundation", "core-graphics", @@ -2028,19 +3235,19 @@ dependencies = [ "js-sys", "libc", "memmap2", - "ndk", - "objc2", + "ndk 0.9.0", + "objc2 0.5.2", "objc2-app-kit", "objc2-foundation", "objc2-ui-kit", "orbclient", "percent-encoding", "pin-project", - "raw-window-handle", + "raw-window-handle 0.6.2", "redox_syscall 0.4.1", "rustix", - "sctk-adwaita", - "smithay-client-toolkit", + "sctk-adwaita 0.10.1", + "smithay-client-toolkit 0.19.2", "smol_str", "tracing", "unicode-segmentation", @@ -2048,10 +3255,10 @@ dependencies = [ "wasm-bindgen-futures", "wayland-backend", "wayland-client", - "wayland-protocols", - "wayland-protocols-plasma", + "wayland-protocols 0.32.3", + "wayland-protocols-plasma 0.3.3", "web-sys", - "web-time", + "web-time 1.1.0", "windows-sys 0.52.0", "x11-dl", "x11rb", @@ -2067,6 +3274,25 @@ dependencies = [ "memchr", ] +[[package]] +name = "winnow" +version = "0.6.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b480ae9340fc261e6be3e95a1ba86d54ae3f9171132a73ce8d4bbaf68339507c" +dependencies = [ + "memchr", +] + +[[package]] +name = "x11-clipboard" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98785a09322d7446e28a13203d2cae1059a0dd3dfb32cb06d0a225f023d8286" +dependencies = [ + "libc", + "x11rb", +] + [[package]] name = "x11-dl" version = "2.21.0" @@ -2130,27 +3356,13 @@ version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "791978798f0597cfc70478424c2b4fdc2b7a8024aaff78497ef00f24ef674193" -[[package]] -name = "xshell" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db0ab86eae739efd1b054a8d3d16041914030ac4e01cd1dca0cf252fd8b6437" -dependencies = [ - "xshell-macros", -] - -[[package]] -name = "xshell-macros" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d422e8e38ec76e2f06ee439ccc765e9c6a9638b9e7c9f2e8255e4d41e8bd852" - [[package]] name = "zerocopy" version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] @@ -2164,3 +3376,27 @@ dependencies = [ "quote", "syn", ] + +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "zune-jpeg" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16099418600b4d8f028622f73ff6e3deaabdff330fb9a2a131dea781ee8b0768" +dependencies = [ + "zune-core", +] diff --git a/Cargo.toml b/Cargo.toml index b96c0d2..a500a33 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,3 +1,3 @@ [workspace] -members = ["chip8_toy","chip8_core"] +members = ["chip8_toy","chip8_core", "emma"] resolver = "2" \ No newline at end of file diff --git a/chip8_core/src/parts/CPU.rs b/chip8_core/src/parts/CPU.rs index 294f74d..e0ca010 100644 --- a/chip8_core/src/parts/CPU.rs +++ b/chip8_core/src/parts/CPU.rs @@ -9,21 +9,20 @@ impl Chip8Registers { } } - pub struct Chip8InstructionParameter { - mask: u16 + pub mask: u16 } -struct Chip8Instruction { - id: String, - mask: u16, - pattern: u16, - arguments: Vec, - description: Box +pub struct Chip8Instruction { + pub id: String, + pub mask: u16, + pub pattern: u16, + pub arguments: Vec, + pub description: Box } -pub fn fill_chip8_instructions() { - let full_instruction_set = vec![ +pub fn fill_chip8_instructions() -> [Chip8Instruction; 34] { + [ Chip8Instruction { id: "SYS".to_string(), mask: 0x00, @@ -128,7 +127,7 @@ pub fn fill_chip8_instructions() { mask: 0x00ff } ], - description: "TBD".into() + description: "Add value in register 0x0f00 with value 0x00ff".into() }, Chip8Instruction { id: "CPY".to_string(), @@ -142,7 +141,7 @@ pub fn fill_chip8_instructions() { mask: 0x00f0 } ], - description: "TBD".into() + description: "Copy value between Register X and Y".into() }, Chip8Instruction { id: "OR".to_string(), @@ -366,7 +365,7 @@ pub fn fill_chip8_instructions() { mask: 0x0f00 } ], - description: "TBD".into() + description: "Wait for a Key to be pressed".into() }, Chip8Instruction { id: "LDT".to_string(), @@ -377,7 +376,7 @@ pub fn fill_chip8_instructions() { mask: 0x0f00 } ], - description: "TBD".into() + description: "Load Data Timer".into() }, Chip8Instruction { id: "LST".to_string(), @@ -388,7 +387,7 @@ pub fn fill_chip8_instructions() { mask: 0x0f00 } ], - description: "TBD".into() + description: "Load Sound Timer".into() }, Chip8Instruction { id: "ADDI".to_string(), @@ -399,7 +398,7 @@ pub fn fill_chip8_instructions() { mask: 0x0f00 } ], - description: "TBD".into() + description: "Add register with value at I".into() }, Chip8Instruction { id: "SETI".to_string(), @@ -432,7 +431,7 @@ pub fn fill_chip8_instructions() { mask: 0x0f00 } ], - description: "TBD".into() + description: "Store value in register X at offset I".into() }, Chip8Instruction { id: "MLOAD".to_string(), @@ -443,7 +442,20 @@ pub fn fill_chip8_instructions() { mask: 0x0f00 } ], - description: "TBD".into() + description: "Load value into register X at offset I".into() } - ]; + ] +} + + +struct Chip8System { + +} + +impl Chip8System { + +} + +trait CpuInstruction { + fn execute(input: Chip8System) -> Chip8System; } \ No newline at end of file diff --git a/chip8_core/src/parts/Display.rs b/chip8_core/src/parts/Display.rs index e1463a5..c3c5471 100644 --- a/chip8_core/src/parts/Display.rs +++ b/chip8_core/src/parts/Display.rs @@ -7,7 +7,6 @@ pub struct Chip8Display { impl Chip8Display { pub fn tick(self: &Self) { println!("Ticking the display"); - } pub fn render_chip8_display(to_render: Chip8Display) { diff --git a/chip8_toy/Cargo.toml b/chip8_toy/Cargo.toml index 970b03f..58f4052 100644 --- a/chip8_toy/Cargo.toml +++ b/chip8_toy/Cargo.toml @@ -5,13 +5,15 @@ edition = "2021" [dependencies] trevors_chip8_core = { path = "../chip8_core" } -easy-imgui-sys = { version = "=0.6.0" } -easy-imgui = { version = "=0.6.0" } -easy-imgui-renderer = { version = "=0.6.0" } -easy-imgui-window = { version = "0.6.0" } log ="0.4" glutin = "0.32" glutin-winit = { version = "0.5", optional = true } raw-window-handle = "0.6" arboard = { version = "3", optional = true, default-features = false } winit = { version = "0.30", features = ["x11", "mint"] } +copypasta = "0.10.1" +glium = { version = "0.34.0", default-features = true } +image = "0.25.2" +imgui = { version = "0.12.0", features = ["tables-api"] } +imgui-glium-renderer = "0.12.0" +imgui-winit-support = "0.12.0" diff --git a/chip8_toy/src/app.rs b/chip8_toy/src/app.rs new file mode 100644 index 0000000..8c9649a --- /dev/null +++ b/chip8_toy/src/app.rs @@ -0,0 +1,15 @@ +/* + +#[derive(Default)] +pub struct App; + +impl UiBuilder for App { + fn do_ui(&mut self, ui: &Ui) { + #[cfg(feature = "docking")] + { + ui.dock_space_over_viewport(0, imgui::DockNodeFlags::None); + } + ui.show_demo_window(None); + + } +}*/ \ No newline at end of file diff --git a/chip8_toy/src/gui/display.rs b/chip8_toy/src/gui/display.rs index 10ae9ec..751a5ef 100644 --- a/chip8_toy/src/gui/display.rs +++ b/chip8_toy/src/gui/display.rs @@ -1,8 +1,6 @@ -use easy_imgui::{Ui, UiBuilder}; -use easy_imgui_window::{MainWindow, MainWindowWithRenderer}; use winit::{application::ApplicationHandler, event_loop::ActiveEventLoop, window::{Window, WindowAttributes}}; - +/* pub struct Chip8Display { pub window: MainWindowWithRenderer, } @@ -54,15 +52,6 @@ impl ApplicationHandler for Chip8AppHandler { if window.main_window().window().id() != window_id { continue; } - let res = window.window_event( - &mut self, - &event, - easy_imgui_window::EventFlags::empty(), - ); - if res.window_closed { - event_loop.exit(); - } - break; } } fn new_events(&mut self, _event_loop: &ActiveEventLoop, _cause: winit::event::StartCause) { @@ -77,3 +66,4 @@ impl ApplicationHandler for Chip8AppHandler { } } +*/ \ No newline at end of file diff --git a/chip8_toy/src/lib.rs b/chip8_toy/src/lib.rs index 0cd2955..f06c689 100644 --- a/chip8_toy/src/lib.rs +++ b/chip8_toy/src/lib.rs @@ -1,3 +1,7 @@ +pub mod app; + pub mod gui { pub mod display; -} \ No newline at end of file +} + +pub mod support; \ No newline at end of file diff --git a/chip8_toy/src/main.rs b/chip8_toy/src/main.rs index e2781fa..03a15d1 100644 --- a/chip8_toy/src/main.rs +++ b/chip8_toy/src/main.rs @@ -1,87 +1,128 @@ -use easy_imgui_window::{ - easy_imgui as imgui, - easy_imgui_renderer::Renderer, - winit::{ - event_loop::{ActiveEventLoop, EventLoop}, - window::Window, - }, - MainWindow, MainWindowWithRenderer, -}; -use trevors_chip8_toy::gui::display::{Chip8App, Chip8AppHandler}; -use std::rc::Rc; +use trevors_chip8_core::parts::CPU::fill_chip8_instructions; +use trevors_chip8_toy::support; +use winit::{event::WindowEvent, event_loop::EventLoop}; +use imgui::*; +/* +pub fn display_instruction_table(current_index: u32, ui: &Ui) -> u32 { + let to_display = fill_chip8_instructions(); + let mut return_index = current_index; + let current_instruction = to_display.get(return_index as usize).unwrap(); + ui.text("Instructions"); + ui.set_next_item_width(100f32); + ui.with_group(|| { + ui.text(format!("{}", current_instruction.description).as_str()); + if current_instruction.arguments.is_empty() { + ui.text("No Parameters"); + } else { + for current_parameter in current_instruction.arguments { + ui.text(format!("{}", current_parameter.mask).as_str()); + } + } + ui.text(format!("{:#}", current_instruction.arguments).as_str()); + ui.text("This is where cool stuff happens part 2"); + }); + ui.same_line(); + ui.with_group(|| { + for (index, current) in to_display.iter().enumerate() { + if ui + .selectable_config(current.id.clone()) + .selected(index == return_index as usize) + .build() + { + return_index = index as u32; + } + } + }); + return_index +} +*/ + +fn chip8_instructions(initial_index: u32, ui: &mut Ui) -> u32 { + let to_display = fill_chip8_instructions(); + let mut return_index = initial_index; + let instruction_to_display = to_display.get(return_index as usize).unwrap(); + let instruction_window = ui + .window("Instructions") + .size([400.0, 400.0], Condition::FirstUseEver) + .build(|| { + ui.text("This should be my current instruction example"); + ui.same_line(); + ui.set_next_item_width(-1.0f32); + for (index, instruction) in to_display.iter().enumerate() { + if ui + .selectable_config(instruction.id.to_string()) + .selected(index as u32 == return_index) + .build() + { + return_index = index as u32; + println!("RETURN INDEX {return_index}"); + } + } + }); + return_index +} + +fn main() { + let mut value = 0; + let choices = ["test test this is 1", "test test this is 2"]; + + let mut selected_instruction = 0; + + support::simple_init(file!(), move |_, ui| { + selected_instruction = chip8_instructions(selected_instruction, ui); + + ui.window("Hello world") + .size([300.0, 110.0], Condition::FirstUseEver) + .build(|| { + ui.text_wrapped("Hello world!"); + if ui.button(choices[value]) { + value += 1; + value %= 2; + } + + ui.button("This...is...imgui-rs!"); + ui.separator(); + let mouse_pos = ui.io().mouse_pos; + ui.text(format!( + "Mouse Position: ({:.1},{:.1})", + mouse_pos[0], mouse_pos[1] + )); + }); + }); +} +/* fn main() { let event_loop = EventLoop::new().unwrap(); - let mut main = Chip8AppHandler { - windows: vec![], - app: Chip8App, - }; - + let mut main = AppHandler::::default(); + main.attributes().title = String::from("Example-420"); + event_loop.run_app(&mut main).unwrap(); } #[derive(Default)] -struct AppHandler { - windows: Vec, - app: App, +pub struct App { + pub selected_instruction_index: u32, } -impl winit::application::ApplicationHandler for AppHandler { - fn suspended(&mut self, _event_loop: &ActiveEventLoop) { - self.windows.clear(); - } - fn resumed(&mut self, event_loop: &ActiveEventLoop) { - let wattr_1 = Window::default_attributes().with_title("Example #1"); - let main_window_1 = MainWindow::new::<()>(&event_loop, wattr_1).unwrap(); - let mut window_1 = MainWindowWithRenderer::new(main_window_1); +impl App {} - let wattr_2 = Window::default_attributes().with_title("Example #2"); - let main_window_2 = MainWindow::new::<()>(&event_loop, wattr_2).unwrap(); - // The GL context can be reused, but the imgui context cannot - let mut renderer_2 = Renderer::new(Rc::clone(window_1.renderer().gl_context())).unwrap(); - renderer_2.set_background_color(Some(imgui::Color::GREEN)); - let window_2 = MainWindowWithRenderer::new_with_renderer(main_window_2, renderer_2); - - self.windows.push(window_1); - self.windows.push(window_2); - } - fn window_event( - &mut self, - event_loop: &ActiveEventLoop, - window_id: winit::window::WindowId, - event: winit::event::WindowEvent, - ) { - for window in &mut self.windows { - if window.main_window().window().id() != window_id { - continue; - } - let res = window.window_event( - &mut self.app, - &event, - easy_imgui_window::EventFlags::empty(), - ); - if res.window_closed { - event_loop.exit(); - } - break; +impl Application for App { + type UserEvent = (); + type Data = (); + fn new(_: Args<()>) -> App { + App { + selected_instruction_index: 0, } } - fn new_events(&mut self, _event_loop: &ActiveEventLoop, _cause: winit::event::StartCause) { - for window in &mut self.windows { - window.new_events(); - } - } - fn about_to_wait(&mut self, _event_loop: &ActiveEventLoop) { - for window in &mut self.windows { - window.about_to_wait(); + fn window_event(&mut self, args: Args<()>, _event: WindowEvent, res: EventResult) { + if res.window_closed { + args.event_loop.exit(); } } } -#[derive(Default)] -struct App; - impl imgui::UiBuilder for App { fn do_ui(&mut self, ui: &imgui::Ui) { #[cfg(feature = "docking")] @@ -89,6 +130,14 @@ impl imgui::UiBuilder for App { ui.dock_space_over_viewport(0, imgui::DockNodeFlags::None); } + let x = ui.collapsing_header_config("collapsing header"); + + ui.with_group(|| { + self.selected_instruction_index = + display_instruction_table(self.selected_instruction_index, ui); + }); + ui.show_demo_window(None); } -} \ No newline at end of file +} +*/ diff --git a/chip8_toy/src/support/clipboard.rs b/chip8_toy/src/support/clipboard.rs new file mode 100644 index 0000000..dd74d06 --- /dev/null +++ b/chip8_toy/src/support/clipboard.rs @@ -0,0 +1,18 @@ +use copypasta::{ClipboardContext, ClipboardProvider}; +use imgui::ClipboardBackend; + +pub struct ClipboardSupport(pub ClipboardContext); + +pub fn init() -> Option { + ClipboardContext::new().ok().map(ClipboardSupport) +} + +impl ClipboardBackend for ClipboardSupport { + fn get(&mut self) -> Option { + self.0.get_contents().ok() + } + fn set(&mut self, text: &str) { + // ignore errors? + let _ = self.0.set_contents(text.to_owned()); + } +} diff --git a/chip8_toy/src/support/mod.rs b/chip8_toy/src/support/mod.rs new file mode 100644 index 0000000..8a730ab --- /dev/null +++ b/chip8_toy/src/support/mod.rs @@ -0,0 +1,164 @@ +use glium::glutin::surface::WindowSurface; +use glium::{Display, Surface}; +use imgui::{Context, FontConfig, FontGlyphRanges, FontSource, Ui}; +use imgui_glium_renderer::Renderer; +use imgui_winit_support::winit::dpi::LogicalSize; +use imgui_winit_support::winit::event::{Event, WindowEvent}; +use imgui_winit_support::winit::event_loop::EventLoop; +use imgui_winit_support::winit::window::WindowBuilder; +use imgui_winit_support::{HiDpiMode, WinitPlatform}; +use std::path::Path; +use std::time::Instant; + +mod clipboard; + +pub const FONT_SIZE: f32 = 13.0; + +#[allow(dead_code)] // annoyingly, RA yells that this is unusued +pub fn simple_init(title: &str, run_ui: F) { + init_with_startup(title, |_, _, _| {}, run_ui); +} + +pub fn init_with_startup(title: &str, mut startup: FInit, mut run_ui: FUi) +where + FInit: FnMut(&mut Context, &mut Renderer, &Display) + 'static, + FUi: FnMut(&mut bool, &mut Ui) + 'static, +{ + let mut imgui = create_context(); + + let title = match Path::new(&title).file_name() { + Some(file_name) => file_name.to_str().unwrap(), + None => title, + }; + let event_loop = EventLoop::new().expect("Failed to create EventLoop"); + + let builder = WindowBuilder::new() + .with_title(title) + .with_inner_size(LogicalSize::new(1024, 768)); + let (window, display) = glium::backend::glutin::SimpleWindowBuilder::new() + .set_window_builder(builder) + .build(&event_loop); + let mut renderer = Renderer::init(&mut imgui, &display).expect("Failed to initialize renderer"); + + if let Some(backend) = clipboard::init() { + imgui.set_clipboard_backend(backend); + } else { + eprintln!("Failed to initialize clipboard"); + } + + let mut platform = WinitPlatform::init(&mut imgui); + { + let dpi_mode = if let Ok(factor) = std::env::var("IMGUI_EXAMPLE_FORCE_DPI_FACTOR") { + // Allow forcing of HiDPI factor for debugging purposes + match factor.parse::() { + Ok(f) => HiDpiMode::Locked(f), + Err(e) => panic!("Invalid scaling factor: {}", e), + } + } else { + HiDpiMode::Default + }; + + platform.attach_window(imgui.io_mut(), &window, dpi_mode); + } + + let mut last_frame = Instant::now(); + + startup(&mut imgui, &mut renderer, &display); + + event_loop + .run(move |event, window_target| match event { + Event::NewEvents(_) => { + let now = Instant::now(); + imgui.io_mut().update_delta_time(now - last_frame); + last_frame = now; + } + Event::AboutToWait => { + platform + .prepare_frame(imgui.io_mut(), &window) + .expect("Failed to prepare frame"); + window.request_redraw(); + } + Event::WindowEvent { + event: WindowEvent::RedrawRequested, + .. + } => { + let ui = imgui.frame(); + + let mut run = true; + run_ui(&mut run, ui); + if !run { + window_target.exit(); + } + + let mut target = display.draw(); + target.clear_color_srgb(1.0, 1.0, 1.0, 1.0); + platform.prepare_render(ui, &window); + let draw_data = imgui.render(); + renderer + .render(&mut target, draw_data) + .expect("Rendering failed"); + target.finish().expect("Failed to swap buffers"); + } + Event::WindowEvent { + event: WindowEvent::Resized(new_size), + .. + } => { + if new_size.width > 0 && new_size.height > 0 { + display.resize((new_size.width, new_size.height)); + } + platform.handle_event(imgui.io_mut(), &window, &event); + } + Event::WindowEvent { + event: WindowEvent::CloseRequested, + .. + } => window_target.exit(), + event => { + platform.handle_event(imgui.io_mut(), &window, &event); + } + }) + .expect("EventLoop error"); +} + +/// Creates the imgui context +pub fn create_context() -> imgui::Context { + let mut imgui = Context::create(); + // Fixed font size. Note imgui_winit_support uses "logical + // pixels", which are physical pixels scaled by the devices + // scaling factor. Meaning, 13.0 pixels should look the same size + // on two different screens, and thus we do not need to scale this + // value (as the scaling is handled by winit) + imgui.fonts().add_font(&[ + FontSource::TtfData { + data: include_bytes!("../../../resources/Roboto-Regular.ttf"), + size_pixels: FONT_SIZE, + config: Some(FontConfig { + // As imgui-glium-renderer isn't gamma-correct with + // it's font rendering, we apply an arbitrary + // multiplier to make the font a bit "heavier". With + // default imgui-glow-renderer this is unnecessary. + rasterizer_multiply: 1.5, + // Oversampling font helps improve text rendering at + // expense of larger font atlas texture. + oversample_h: 4, + oversample_v: 4, + ..FontConfig::default() + }), + }, + FontSource::TtfData { + data: include_bytes!("../../../resources/mplus-1p-regular.ttf"), + size_pixels: FONT_SIZE, + config: Some(FontConfig { + // Oversampling font helps improve text rendering at + // expense of larger font atlas texture. + oversample_h: 4, + oversample_v: 4, + // Range of glyphs to rasterize + glyph_ranges: FontGlyphRanges::japanese(), + ..FontConfig::default() + }), + }, + ]); + imgui.set_ini_filename(None); + + imgui +} diff --git a/emma/Cargo.toml b/emma/Cargo.toml new file mode 100644 index 0000000..e2b7193 --- /dev/null +++ b/emma/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "emmaemu" +version = "0.1.0" +edition = "2021" +autobenches = true + +[dependencies] +ratatui = "0.28.0" diff --git a/emma/src/bin/emma.rs b/emma/src/bin/emma.rs new file mode 100644 index 0000000..b2a8222 --- /dev/null +++ b/emma/src/bin/emma.rs @@ -0,0 +1,516 @@ +use std::io::{stdout, Result}; + +use font::load_fonts_into_memory; +use ratatui::{ + backend::CrosstermBackend, + crossterm::{ + event::{self, KeyCode, KeyEventKind}, + terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen}, + ExecutableCommand, + }, + layout::{Alignment, Rect}, + style::Stylize, + widgets::{List, Paragraph}, + Frame, Terminal, +}; + +// nnn or addr - A 12-bit value, the lowest 12 bits of the instruction +pub fn read_addr_from_instruction(instruction_to_read_from: u16) -> u16 { + instruction_to_read_from & 0b0000111111111111 +} + +// n or nibble - A 4-bit value, the lowest 4 bits of the instruction +pub fn read_nibble_from_instruction(instruction_to_read_from: u16) -> u16 { + instruction_to_read_from & 0b0000000000001111 +} + +// x - A 4-bit value, the lower 4 bits of the high byte of the instruction +pub fn read_x_from_instruction(instruction_to_read_from: u16) -> u16 { + (instruction_to_read_from & 0b0000111100000000).rotate_right(8) +} + +// y - A 4-bit value, the upper 4 bits of the low byte of the instruction +pub fn read_y_from_instruction(instruction_to_read_from: u16) -> u16 { + (instruction_to_read_from & 0b0000000011110000).rotate_right(4) +} + +// kk or byte - An 8-bit value, the lowest 8 bits of the instruction +pub fn read_byte_from_instruction(instruction_to_read_from: u16) -> u16 { + (instruction_to_read_from & 0b0000000011111111) +} + +mod font; + +#[derive(Clone)] +struct Chip8CpuData { + pub pc: u16, + pub sp: u8, + pub memory: [u8; CHIP8_MEMORY_SIZE as usize], + pub video_memory: [bool; CHIP8_VIDEO_MEMORY], + pub registers: [u8; 16], + pub sound_timer: u8, + pub delay_timer: u8, + pub i_register: u16, +} +const CHIP8_REGISTER_COUNT: i32 = 16; +const CHIP8_MEMORY_SIZE: i32 = 2048i32; +const CHIP8_VIDEO_WIDTH: i32 = 64i32; +const CHIP8_VIDEO_HEIGHT: i32 = 32i32; +const CHIP8_VIDEO_MEMORY: usize = (CHIP8_VIDEO_HEIGHT * CHIP8_VIDEO_WIDTH) as usize; +const CHIP8_ROM_SIZE: usize = 512; + +impl Default for Chip8CpuData { + fn default() -> Self { + let mut memory: [u8; 2048] = [0; 2048]; + + memory = load_fonts_into_memory(memory); + + dump_memory_to_console(memory); + + Self { + pc: 0x0200, + sp: 0x00, + memory: [0; 2048], + video_memory: [false; CHIP8_VIDEO_MEMORY], + registers: [0; CHIP8_REGISTER_COUNT as usize], + sound_timer: 0xFF, + delay_timer: 0xFF, + i_register: 0x0000, + } + } +} + +impl Chip8CpuData { + pub fn new() -> Self { + Chip8CpuData::default() + } +} + +fn system_memory_to_text_render(data_to_dump: [u8; 2048]) -> String { + let mut to_return = String::new(); + + for i in 0..256 { + to_return += &format!("{:x}\t", data_to_dump[i as usize]).to_string(); + + if ((i + 1) % CHIP8_REGISTER_COUNT) == 0 { + to_return += "\n"; + } + } + + to_return +} + +fn dump_memory_to_console(data_to_dump: [u8; 2048]) { + println!("STARTING TO DUMP MEMORY TO CONSOLE"); + println!("{}", system_memory_to_text_render(data_to_dump)); + println!("DONE DUMPING!"); + panic!("DONE DUMPING"); +} + +fn display_data_to_text_render(data_display: [bool; 2048]) -> String { + let mut output = String::new(); + for row in 0..32 { + let row_offset = row * 32; + for column in 0..64 { + let data_position = row_offset + column; + println!("DP {} {} {} {}", data_position, row, row_offset, column); + output += if data_display[data_position] { + "*" + } else { + " " + }; + } + output += "\n"; + } + output +} + +fn render_display(display_data: [bool; 2048]) { + println!("{}", display_data_to_text_render(display_data)); +} + +#[derive(Clone)] +enum Chip8CpuStates { + WaitingForInstruction, + ExecutingInstruction, + Error, +} + +struct Chip8CpuState { + state: Chip8CpuStates, + cpu: Chip8CpuData +} + +enum Chip8CpuInstructions { + SysAddr(u16), // 0x0nnn Exit to System Call + CLS, // 0x00E0 Clear Screen + RET, // 0x00EE Return from Subroutine + JpAddr(u16), // 0x1nnn Jump to Address + CallAddr(u16), // 0x2nnn Call Subroutine + SeVxByte(u16, u16), // 0x3xkk Skip next instruction if Vx = kk. + SneVxByte(u16, u16), // 0x4xkk Skip next instruction if Vx != kk + SeVxVy(u16, u16), // 0x5xy0 Skip next instruction if Vx == Vy + LdVxByte(u16, u16), // 0x6xkk Set Vx = kk + AddVxByte(u16, u16), // 0x7xkk Set Vx = Vx + kk + LdVxVy(u16, u16), // 0x8xy0 Set value of Vy in Vx + OrVxVy(u16, u16), // 0x8xy1 Set Vx = Vx OR Vy + AndVxVy(u16, u16), // 0x8xy2 Set Vx = Vx AND Vy + XorVxVy(u16, u16), // 0x8xy3 Set Vx = Vx XOR Vy + AddVxVy(u16, u16), // 0x8xy4 Set Vx = Vx + Vy (SET VF on Carry) + SubVxVy(u16, u16), // 0x8xy5 Set Vx = Vx - Vy (Set VF NOT Borrow) + ShrVxVy(u16, u16), // 0x8xy6 Set Vx = Vx SHR 1 (Shift Rotated Right 1) + SubnVxVy(u16, u16), // 0x8xy7 Set Vx = Vy - Vx (Set VF NOT Borrow) + ShlVxVy(u16, u16), // 0x8xyE Shift Left + SneVxVy(u16, u16), // 0x9xy0 Skip next instruction if Vx != Vy + LdIAddr(u16), // 0xAnnn VI = nnn + JpV0Addr(u16), // 0xBnnn Jump to nnn+V0 + RndVxByte(u16, u16), // 0xCxkk Vx = random byte AND kk + DrawVxVyNibble(u16, u16, u16), // 0xDxyn Display N byte sprite starting at Vx to Vy + SkpVx(u16), // 0xE09E Skip next instruction if key in Vx pressed + SnkpVx(u16), // 0xE0A1 Skip next instruction if key in Vx NOT pressed + LdVxDt(u16), // 0xFx07 Set Vx = Delay timer + LdVxK(u16), // 0xFx0A Wait for key, put in Vx + LdDtVx(u16), // 0xFx15 Set Delay Timer + LdStVx(u16), // 0xFx18 Set Sount Timer + AddIVx(u16), // 0xFx1E I = I + Vx + LdFVu(u16), // 0xFx29 Set I = Location of sprite for Digit Vx + LdBVx(u16), // 0xFx33 Store BCD of Vx in I, I+1, I+2 + LdIVx(u16), // 0xFx55 Store V0 to Vx in memory starting at I + LdVxI(u16), // 0xFx65 Load V0 to Vx in memory starting at I + XXXXERRORINSTRUCTION, +} + +fn bytes_to_instruction(to_read: u16) -> Chip8CpuInstructions { + let mut decoded_instruction = Chip8CpuInstructions::XXXXERRORINSTRUCTION; + + match to_read { + 0x00E0 => { + // 00E0 - CLS + // Clear the display. + decoded_instruction = Chip8CpuInstructions::CLS; + } + 0x00EE => { + // 00EE - RET + // Return from a subroutine. + + decoded_instruction = Chip8CpuInstructions::RET; + } + 0x0000..=0x0FFF => { + // 0nnn - SYS addr + // Jump to a machine code routine at nnn. + decoded_instruction = + Chip8CpuInstructions::SysAddr(read_addr_from_instruction(to_read)); + } + 0x1000..=0x1FFF => { + // 1nnn - JP addr + // Jump to location nnn. + decoded_instruction = Chip8CpuInstructions::JpAddr(read_addr_from_instruction(to_read)); + } + 0x2000..=0x2FFF => { + // 2nnn - CALL addr + // Call subroutine at nnn. + decoded_instruction = + Chip8CpuInstructions::CallAddr(read_addr_from_instruction(to_read)); + } + 0x3000..=0x3FFF => { + // 3xkk - SE Vx, byte + // Skip next instruction if Vx = kk. + decoded_instruction = Chip8CpuInstructions::SeVxByte( + read_x_from_instruction(to_read), + read_byte_from_instruction(to_read), + ) + } + 0x4000..=0x4FFF => { + // 4xkk - SNE Vx, byte + // Skip next instruction if Vx != kk. + decoded_instruction = Chip8CpuInstructions::SneVxByte( + read_x_from_instruction(to_read), + read_byte_from_instruction(to_read), + ); + } + 0x5000..=0x5FF0 => { + // 5xy0 - SE Vx, Vy + // Skip next instruction if Vx = Vy. + decoded_instruction = Chip8CpuInstructions::SeVxVy( + read_x_from_instruction(to_read), + read_y_from_instruction(to_read), + ) + } + 0x6000..=0x6FFF => { + // 6xkk - LD Vx, byte + // Set Vx = kk. + decoded_instruction = Chip8CpuInstructions::LdVxVy( + read_x_from_instruction(to_read), + read_byte_from_instruction(to_read), + ); + } + 0x7000..=0x7FFF => { + // ADD Vx, Byte + decoded_instruction = Chip8CpuInstructions::AddVxByte( + read_x_from_instruction(to_read), + read_byte_from_instruction(to_read), + ); + } + 0x8000..=0x8FFE => { + // 0x8000 Series + let last_nibble = to_read | 0x8000; + match last_nibble { + 0x0 => { + // LD Vx, Vy + decoded_instruction = Chip8CpuInstructions::LdVxVy( + read_x_from_instruction(to_read), + read_y_from_instruction(to_read), + ); + } + 0x1 => { + // OR Vx, Vy + decoded_instruction = Chip8CpuInstructions::OrVxVy( + read_x_from_instruction(to_read), + read_y_from_instruction(to_read), + ); + } + 0x2 => { + // AND Vx, Vy + decoded_instruction = Chip8CpuInstructions::AndVxVy( + read_x_from_instruction(to_read), + read_y_from_instruction(to_read), + ); + } + 0x3 => { + // XOR Vx, Vy + decoded_instruction = Chip8CpuInstructions::XorVxVy( + read_x_from_instruction(to_read), + read_y_from_instruction(to_read), + ); + } + 0x4 => { + // AND Vx, Vy + decoded_instruction = Chip8CpuInstructions::AndVxVy( + read_x_from_instruction(to_read), + read_y_from_instruction(to_read), + ); + } + 0x5 => { + // SUB Vx, Vy + decoded_instruction = Chip8CpuInstructions::SubnVxVy( + read_x_from_instruction(to_read), + read_y_from_instruction(to_read), + ); + } + 0x6 => { + // SHR Vx, {, Vy } + decoded_instruction = Chip8CpuInstructions::ShrVxVy( + read_x_from_instruction(to_read), + read_y_from_instruction(to_read), + ); + } + 0x7 => { + // SUBN Vx, Vy + decoded_instruction = Chip8CpuInstructions::SubnVxVy( + read_x_from_instruction(to_read), + read_y_from_instruction(to_read), + ); + } + 0xE => { + // SHL Vx, {, Vy} + decoded_instruction = Chip8CpuInstructions::ShlVxVy( + read_x_from_instruction(to_read), + read_y_from_instruction(to_read), + ); + } + _ => { + panic!("UNABLE TO DECODE 0x8000 SERIES INSTRUCTION"); + } + } + } + 0x9000..=0x9FF0 => { + // SNE Vx, Vy + decoded_instruction = Chip8CpuInstructions::SneVxVy( + read_x_from_instruction(to_read), + read_y_from_instruction(to_read), + ); + } + 0xA000..=0xAFFF => { + // LD I, Addr + decoded_instruction = + Chip8CpuInstructions::LdIAddr(read_addr_from_instruction(to_read)); + } + 0xB000..=0xBFFF => { + // JP V0, Addr + } + 0xC000..=0xCFFF => { + // RND Vx, byte + } + 0xD000..0xDFFF => { + // DRAW Vx, Vy, nibble + } + 0xE09E..=0xEFA1 => {} + _ => { + panic!("UNABLE TO DECODE INSTRUCTION") + } + } + + return decoded_instruction; +} + +impl Chip8CpuState { + fn execute(&mut self, event: Chip8CpuInstructions) { + match (self.state.clone(), event) { + (Chip8CpuStates::WaitingForInstruction, Chip8CpuInstructions::SysAddr(new_address)) => { + self.cpu.pc = new_address; + }, + _ => () + } + } +} + +#[derive(Clone)] +struct Chip8System { + pub system_memory: [u8; 2048], + pub rom: [u8; 512], + pub sound_timer: u8, + pub system_timer: u8, +} + +impl Default for Chip8System { + fn default() -> Self { + // init by loading the fonts... + let mut working_system_memory: [u8; CHIP8_MEMORY_SIZE as usize] = + [0; CHIP8_MEMORY_SIZE as usize]; + + // Load fonts to memory + working_system_memory = load_fonts_into_memory(working_system_memory); + + Self { + system_memory: working_system_memory, + rom: [0; CHIP8_ROM_SIZE], + sound_timer: 0, + system_timer: 0, + } + } +} + +impl Chip8System { + fn add_fonts_to_memory( + to_add_fonts_to: [u8; CHIP8_MEMORY_SIZE as usize], + ) -> [u8; CHIP8_MEMORY_SIZE as usize] { + panic!("DONT USE THIS USE \"load_fonts_into_memory\" INSTEAD"); + } + + pub fn new() -> Self { + Chip8System { + system_memory: [0; CHIP8_MEMORY_SIZE as usize], + rom: [0; CHIP8_ROM_SIZE as usize], + sound_timer: 0, + system_timer: 0, + } + } +} + +#[derive(Clone)] +struct AppState { + menu_items: Vec, + selected_menu_item: i32, + system: Chip8CpuData, +} + +impl Default for AppState { + fn default() -> Self { + println!("Creating new AppState"); + Self { + menu_items: vec![ + "Step CPU ".into(), + "Reset CPU ".into(), + "Item 3".into(), + ], + selected_menu_item: 0, + system: Chip8CpuData { + ..Default::default() + }, + } + } +} + +fn main() -> Result<()> { + // stdout().execute(EnterAlternateScreen)?; + // enable_raw_mode()?; + // let mut terminal = Terminal::new(CrosstermBackend::new(stdout()))?; + // terminal.clear()?; + + let app = AppState::default(); + + loop { + // Draw Ui... + + // terminal.draw(|frame| { + // render_menu_list(app.clone(), frame); + // render_cpu_state(app.system.clone(), frame); + // })?; + + // ...handle Events. + if event::poll(std::time::Duration::from_millis(16))? { + if let event::Event::Key(key) = event::read()? { + match key.kind { + KeyEventKind::Press => match key.code { + KeyCode::F(5) => { + println!("Execute Next Instruction"); + } + KeyCode::F(12) => { + println!("Resetting CPU"); + } + _ => (), + }, + _ => (), + } + if key.kind == KeyEventKind::Press && key.code == KeyCode::Char('q') { + break; + } + } + } + } + + // stdout().execute(LeaveAlternateScreen)?; + // disable_raw_mode()?; + Ok(()) +} + +#[cfg(test)] +mod test { + use crate::*; + #[test] + fn blank_screen_renders_to_text() { + let blank_data: [bool; CHIP8_VIDEO_MEMORY] = [false; CHIP8_VIDEO_MEMORY]; + let blank_screen = (" ".repeat(CHIP8_VIDEO_WIDTH.try_into().unwrap()) + "\n") + .repeat(CHIP8_VIDEO_HEIGHT.try_into().unwrap()); + assert_eq!(display_data_to_text_render(blank_data), blank_screen); + } + + #[test] + fn filled_screen_renders_to_text() { + let filled_data: [bool; CHIP8_VIDEO_MEMORY] = [true; CHIP8_VIDEO_MEMORY]; + let filled_screen = ("*".repeat(CHIP8_VIDEO_WIDTH.try_into().unwrap()) + "\n") + .repeat(CHIP8_VIDEO_HEIGHT.try_into().unwrap()); + assert_eq!(display_data_to_text_render(filled_data), filled_screen); + } + + #[test] + fn grid_pattern_renders_to_text() { + let mut grid_data: [bool; CHIP8_VIDEO_MEMORY] = [false; CHIP8_VIDEO_MEMORY]; + let mut expected_data = String::new(); + for i in 0..CHIP8_VIDEO_MEMORY { + grid_data[i] = (i % 2 == 0); + if i % 2 == 0 { + grid_data[i] = true; + expected_data += "*"; + } else { + grid_data[i] = false; + expected_data += " "; + } + if (i as i32 % CHIP8_VIDEO_WIDTH as i32 == CHIP8_VIDEO_WIDTH - 1) { + expected_data += "\n"; + } + } + + assert_eq!(display_data_to_text_render(grid_data), expected_data); + } +} diff --git a/emma/src/bin/font/mod.rs b/emma/src/bin/font/mod.rs new file mode 100644 index 0000000..c4a99bb --- /dev/null +++ b/emma/src/bin/font/mod.rs @@ -0,0 +1,55 @@ +use crate::CHIP8_MEMORY_SIZE; + + +pub mod text_rendering; + +pub const CHIP8FONT_0: [u8; 5] = [0xF0, 0x90, 0x90, 0x90, 0xF0]; +pub const CHIP8FONT_1: [u8; 5] = [0x20, 0x60, 0x20, 0x20, 0x70]; +pub const CHIP8FONT_2: [u8; 5] = [0xF0, 0x10, 0xF0, 0x80, 0xF0]; +pub const CHIP8FONT_3: [u8; 5] = [0xF0, 0x10, 0xF0, 0x10, 0xF0]; +pub const CHIP8FONT_4: [u8; 5] = [0x90, 0x90, 0xF0, 0x10, 0x10]; +pub const CHIP8FONT_5: [u8; 5] = [0xF0, 0x80, 0xF0, 0x10, 0xF0]; +pub const CHIP8FONT_6: [u8; 5] = [0xF0, 0x80, 0xF0, 0x90, 0xF0]; +pub const CHIP8FONT_7: [u8; 5] = [0xF0, 0x10, 0x20, 0x40, 0x40]; +pub const CHIP8FONT_8: [u8; 5] = [0xF0, 0x90, 0xF0, 0x90, 0xF0]; +pub const CHIP8FONT_9: [u8; 5] = [0xF0, 0x90, 0xF0, 0x10, 0xF0]; +pub const CHIP8FONT_A: [u8; 5] = [0xF0, 0x90, 0xF0, 0x90, 0x90]; +pub const CHIP8FONT_B: [u8; 5] = [0xE0, 0x90, 0xE0, 0x90, 0xE0]; +pub const CHIP8FONT_C: [u8; 5] = [0xF0, 0x80, 0x80, 0x80, 0xF0]; +pub const CHIP8FONT_D: [u8; 5] = [0xE0, 0x90, 0x90, 0x90, 0xE0]; +pub const CHIP8FONT_E: [u8; 5] = [0xF0, 0x80, 0xF0, 0x80, 0xF0]; +pub const CHIP8FONT_F: [u8; 5] = [0xF0, 0x80, 0xF0, 0x80, 0x80]; + +pub fn load_fonts_into_memory(to_add_fonts_to: [u8; CHIP8_MEMORY_SIZE as usize]) + -> [u8; CHIP8_MEMORY_SIZE as usize] { + + let mut memory = to_add_fonts_to.clone(); + + let all_font_characters = [ + CHIP8FONT_0, + CHIP8FONT_1, + CHIP8FONT_2, + CHIP8FONT_3, + CHIP8FONT_4, + CHIP8FONT_5, + CHIP8FONT_6, + CHIP8FONT_7, + CHIP8FONT_8, + CHIP8FONT_9, + CHIP8FONT_A, + CHIP8FONT_B, + CHIP8FONT_C, + CHIP8FONT_D, + CHIP8FONT_E, + CHIP8FONT_F, + ]; + + for (font_index, current_font) in all_font_characters.iter().enumerate() { + for font_mem_offset in 0..=4 { + let real_offset = font_index * 5 + font_mem_offset; + memory[real_offset] = current_font[font_mem_offset]; + } + } + + memory + } \ No newline at end of file diff --git a/emma/src/bin/font/text_rendering.rs b/emma/src/bin/font/text_rendering.rs new file mode 100644 index 0000000..a2b9150 --- /dev/null +++ b/emma/src/bin/font/text_rendering.rs @@ -0,0 +1,36 @@ +use ratatui::{style::Stylize, widgets::{List, Paragraph}, Frame}; + +use crate::{AppState, Chip8CpuData, CHIP8_REGISTER_COUNT}; + + +pub fn render_cpu_state(cpu_state: Chip8CpuData, frame: &mut Frame) { + let mut area = frame.area(); + + let mut current_state: Vec = vec![]; + + current_state.push(format!("Delay Timer {:X}", cpu_state.delay_timer)); + current_state.push(format!("Sound Timer {:X}", cpu_state.sound_timer)); + current_state.push(format!("PC {:X}", cpu_state.pc)); + for i in 0 .. CHIP8_REGISTER_COUNT { + current_state.push(format!("V{}: {}", i, cpu_state.registers[i as usize])); + } + + frame.render_widget( + List::new(current_state).blue().on_white(), area) +} + +pub fn render_menu_list(state: AppState, frame: &mut Frame) { + let mut area = frame.area(); + + frame.render_widget(List::new(state.menu_items).blue().on_white(), area); +} + +pub fn render_hello_world(frame: &mut Frame) { + let area = frame.area(); + frame.render_widget( + Paragraph::new("Hello Ratatui! (press 'q' to quit)") + .white() + .on_blue(), + area, + ); +} diff --git a/resources/Dokdo-Regular.ttf b/resources/Dokdo-Regular.ttf new file mode 100644 index 0000000..ac4ac8d Binary files /dev/null and b/resources/Dokdo-Regular.ttf differ diff --git a/resources/LICENSE-Dokdo.txt b/resources/LICENSE-Dokdo.txt new file mode 100644 index 0000000..501e63a --- /dev/null +++ b/resources/LICENSE-Dokdo.txt @@ -0,0 +1,93 @@ +Copyright (c) 2005-2017 FONTRIX. All Rights Reserved. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/resources/LICENSE-Roboto.txt b/resources/LICENSE-Roboto.txt new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/resources/LICENSE-Roboto.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/resources/Lenna.jpg b/resources/Lenna.jpg new file mode 100644 index 0000000..9e1df85 Binary files /dev/null and b/resources/Lenna.jpg differ diff --git a/resources/Roboto-Regular.ttf b/resources/Roboto-Regular.ttf new file mode 100644 index 0000000..2c97eea Binary files /dev/null and b/resources/Roboto-Regular.ttf differ diff --git a/resources/mplus-1p-regular.ttf b/resources/mplus-1p-regular.ttf new file mode 100644 index 0000000..4775e3a Binary files /dev/null and b/resources/mplus-1p-regular.ttf differ