From 7fb96a8db7246926dd1cf314930270f065441099 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Sun, 23 Feb 2025 11:44:13 -0500 Subject: [PATCH] Remove piston tutorials --- piston-tutorials/getting-started/Cargo.lock | 1876 ----------------- piston-tutorials/getting-started/Cargo.toml | 17 - piston-tutorials/getting-started/src/main.rs | 70 - piston-tutorials/sudoku/Cargo.lock | 1876 ----------------- piston-tutorials/sudoku/Cargo.toml | 12 - .../sudoku/assets/FiraSans-Regular.ttf | Bin 194812 -> 0 bytes piston-tutorials/sudoku/assets/LICENSE | 99 - piston-tutorials/sudoku/src/gameboard.rs | 155 -- .../sudoku/src/gameboard_controller.rs | 57 - piston-tutorials/sudoku/src/gameboard_view.rs | 210 -- piston-tutorials/sudoku/src/main.rs | 57 - .../sudoku/static/puzzle-almost-solved.sdm | 1 - piston-tutorials/sudoku/static/puzzle.sdm | 1 - 13 files changed, 4431 deletions(-) delete mode 100644 piston-tutorials/getting-started/Cargo.lock delete mode 100644 piston-tutorials/getting-started/Cargo.toml delete mode 100644 piston-tutorials/getting-started/src/main.rs delete mode 100644 piston-tutorials/sudoku/Cargo.lock delete mode 100644 piston-tutorials/sudoku/Cargo.toml delete mode 100644 piston-tutorials/sudoku/assets/FiraSans-Regular.ttf delete mode 100644 piston-tutorials/sudoku/assets/LICENSE delete mode 100644 piston-tutorials/sudoku/src/gameboard.rs delete mode 100644 piston-tutorials/sudoku/src/gameboard_controller.rs delete mode 100644 piston-tutorials/sudoku/src/gameboard_view.rs delete mode 100644 piston-tutorials/sudoku/src/main.rs delete mode 100644 piston-tutorials/sudoku/static/puzzle-almost-solved.sdm delete mode 100644 piston-tutorials/sudoku/static/puzzle.sdm diff --git a/piston-tutorials/getting-started/Cargo.lock b/piston-tutorials/getting-started/Cargo.lock deleted file mode 100644 index 296a056..0000000 --- a/piston-tutorials/getting-started/Cargo.lock +++ /dev/null @@ -1,1876 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "ab_glyph_rasterizer" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330223a1aecc308757b9926e9391c9b47f8ef2dbd8aea9df88312aea18c5e8d6" - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "andrew" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c4afb09dd642feec8408e33f92f3ffc4052946f6b20f32fb99c1f58cd4fa7cf" -dependencies = [ - "bitflags", - "rusttype", - "walkdir", - "xdg", - "xml-rs", -] - -[[package]] -name = "android_glue" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "bit_field" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb6dd1c2376d2e096796e234a70e17e94cc2d5d54ff8ce42b28cef1d0d359a4" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "bumpalo" -version = "3.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" - -[[package]] -name = "bytemuck" -version = "1.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaa3a8d9a1ca92e282c96a32d6511b695d7d994d1d102ba85d279f9b2756947f" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "calloop" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b036167e76041694579972c28cf4877b4f92da222560ddb49008937b6a6727c" -dependencies = [ - "log", - "nix 0.18.0", -] - -[[package]] -name = "cc" -version = "1.0.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4" - -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cgl" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" -dependencies = [ - "libc", -] - -[[package]] -name = "cocoa" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c54201c07dcf3a5ca33fececb8042aed767ee4bfd5a0235a8ceabcda956044b2" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation 0.9.3", - "core-graphics 0.22.3", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation 0.9.3", - "core-graphics 0.22.3", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" -dependencies = [ - "bitflags", - "block", - "core-foundation 0.9.3", - "core-graphics-types", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "color_quant" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" - -[[package]] -name = "core-foundation" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" -dependencies = [ - "core-foundation-sys 0.7.0", - "libc", -] - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys 0.8.3", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" - -[[package]] -name = "core-foundation-sys" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" - -[[package]] -name = "core-graphics" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" -dependencies = [ - "bitflags", - "core-foundation 0.7.0", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" -dependencies = [ - "bitflags", - "core-foundation 0.9.3", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" -dependencies = [ - "bitflags", - "core-foundation 0.9.3", - "foreign-types", - "libc", -] - -[[package]] -name = "core-video-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" -dependencies = [ - "cfg-if 0.1.10", - "core-foundation-sys 0.7.0", - "core-graphics 0.19.2", - "libc", - "objc", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" -dependencies = [ - "autocfg", - "cfg-if 1.0.0", - "crossbeam-utils", - "memoffset", - "scopeguard", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "cty" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" - -[[package]] -name = "darling" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" -dependencies = [ - "darling_core", - "quote", - "syn", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "dirs" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" -dependencies = [ - "libc", - "redox_users", - "winapi 0.3.9", -] - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dlib" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b11f15d1e3268f140f68d390637d5e76d849782d971ae7063e0da69fe9709a76" -dependencies = [ - "libloading 0.6.7", -] - -[[package]] -name = "dlib" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794" -dependencies = [ - "libloading 0.7.4", -] - -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "either" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" - -[[package]] -name = "exr" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eb5f255b5980bb0c8cf676b675d1a99be40f316881444f44e0462eaf5df5ded" -dependencies = [ - "bit_field", - "flume", - "half", - "lebe", - "miniz_oxide", - "smallvec", - "threadpool", -] - -[[package]] -name = "flate2" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "flume" -version = "0.10.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" -dependencies = [ - "futures-core", - "futures-sink", - "nanorand", - "pin-project", - "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.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -dependencies = [ - "bitflags", - "fuchsia-zircon-sys", -] - -[[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" - -[[package]] -name = "futures-core" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" - -[[package]] -name = "futures-sink" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" - -[[package]] -name = "getrandom" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" -dependencies = [ - "cfg-if 1.0.0", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "gif" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06" -dependencies = [ - "color_quant", - "weezl", -] - -[[package]] -name = "gl" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b411c7e0bfc599e3606412c190e786b5bb48cf00073e1635f9bb6f88fe7d84a" -dependencies = [ - "gl_generator 0.13.1", -] - -[[package]] -name = "gl_generator" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca98bbde17256e02d17336a6bdb5a50f7d0ccacee502e191d3e3d0ec2f96f84a" -dependencies = [ - "khronos_api 3.1.0", - "log", - "xml-rs", -] - -[[package]] -name = "gl_generator" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" -dependencies = [ - "khronos_api 3.1.0", - "log", - "xml-rs", -] - -[[package]] -name = "glutin" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ae1cbb9176b9151c4ce03f012e3cd1c6c18c4be79edeaeb3d99f5d8085c5fa3" -dependencies = [ - "android_glue", - "cgl", - "cocoa 0.23.0", - "core-foundation 0.9.3", - "glutin_egl_sys", - "glutin_emscripten_sys", - "glutin_gles2_sys", - "glutin_glx_sys", - "glutin_wgl_sys", - "lazy_static", - "libloading 0.6.7", - "log", - "objc", - "osmesa-sys", - "parking_lot", - "wayland-client", - "wayland-egl", - "winapi 0.3.9", - "winit", -] - -[[package]] -name = "glutin_egl_sys" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68900f84b471f31ea1d1355567eb865a2cf446294f06cef8d653ed7bcf5f013d" -dependencies = [ - "gl_generator 0.14.0", - "winapi 0.3.9", -] - -[[package]] -name = "glutin_emscripten_sys" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80de4146df76e8a6c32b03007bc764ff3249dcaeb4f675d68a06caf1bac363f1" - -[[package]] -name = "glutin_gles2_sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094e708b730a7c8a1954f4f8a31880af00eb8a1c5b5bf85d28a0a3c6d69103" -dependencies = [ - "gl_generator 0.14.0", - "objc", -] - -[[package]] -name = "glutin_glx_sys" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93d0575865098580c5b3a423188cd959419912ea60b1e48e8b3b526f6d02468" -dependencies = [ - "gl_generator 0.14.0", - "x11-dl", -] - -[[package]] -name = "glutin_wgl_sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da5951a1569dbab865c6f2a863efafff193a93caf05538d193e9e3816d21696" -dependencies = [ - "gl_generator 0.14.0", -] - -[[package]] -name = "half" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad6a9459c9c30b177b925162351f97e7d967c7ea8bab3b8352805327daf45554" -dependencies = [ - "crunchy", -] - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "image" -version = "0.24.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "exr", - "gif", - "jpeg-decoder", - "num-rational", - "num-traits", - "png", - "scoped_threadpool", - "tiff", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "interpolation" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3b7357d2bbc5ee92f8e899ab645233e43d21407573cceb37fed8bc3dede2c02" - -[[package]] -name = "iovec" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -dependencies = [ - "libc", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "jpeg-decoder" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" -dependencies = [ - "rayon", -] - -[[package]] -name = "js-sys" -version = "0.3.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - -[[package]] -name = "khronos_api" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037ab472c33f67b5fbd3e9163a2645319e5356fcd355efa6d4eb7fff4bbcb554" - -[[package]] -name = "khronos_api" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - -[[package]] -name = "lebe" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" - -[[package]] -name = "libc" -version = "0.2.137" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" - -[[package]] -name = "libloading" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" -dependencies = [ - "cfg-if 1.0.0", - "winapi 0.3.9", -] - -[[package]] -name = "libloading" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" -dependencies = [ - "cfg-if 1.0.0", - "winapi 0.3.9", -] - -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memmap2" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b70ca2a6103ac8b665dc150b142ef0e4e89df640c9e6cf295d189c3caebe5a" -dependencies = [ - "libc", -] - -[[package]] -name = "memoffset" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -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.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.6.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" -dependencies = [ - "cfg-if 0.1.10", - "fuchsia-zircon", - "fuchsia-zircon-sys", - "iovec", - "kernel32-sys", - "libc", - "log", - "miow", - "net2", - "slab", - "winapi 0.2.8", -] - -[[package]] -name = "mio-extras" -version = "2.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" -dependencies = [ - "lazycell", - "log", - "mio", - "slab", -] - -[[package]] -name = "miow" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" -dependencies = [ - "kernel32-sys", - "net2", - "winapi 0.2.8", - "ws2_32-sys", -] - -[[package]] -name = "nanorand" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" -dependencies = [ - "getrandom", -] - -[[package]] -name = "ndk" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb167c1febed0a496639034d0c76b3b74263636045db5489eee52143c246e73" -dependencies = [ - "jni-sys", - "ndk-sys", - "num_enum", - "thiserror", -] - -[[package]] -name = "ndk-glue" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf399b8b7a39c6fb153c4ec32c72fd5fe789df24a647f229c239aa7adb15241" -dependencies = [ - "lazy_static", - "libc", - "log", - "ndk", - "ndk-macro", - "ndk-sys", -] - -[[package]] -name = "ndk-macro" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d" -dependencies = [ - "darling", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "ndk-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1bcdd74c20ad5d95aacd60ef9ba40fdf77f767051040541df557b7a9b2a2121" - -[[package]] -name = "net2" -version = "0.2.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "winapi 0.3.9", -] - -[[package]] -name = "nix" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83450fe6a6142ddd95fb064b746083fc4ef1705fe81f64a64e1d4b39f54a1055" -dependencies = [ - "bitflags", - "cc", - "cfg-if 0.1.10", - "libc", -] - -[[package]] -name = "nix" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a" -dependencies = [ - "bitflags", - "cc", - "cfg-if 1.0.0", - "libc", -] - -[[package]] -name = "nom" -version = "7.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca565a7df06f3d4b485494f25ba05da1435950f4dc263440eda7a6fa9b8e36e4" -dependencies = [ - "derivative", - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffa5a33ddddfee04c0283a7653987d634e880347e96b5b2ed64de07efb59db9d" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "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 = "once_cell" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" - -[[package]] -name = "osmesa-sys" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" -dependencies = [ - "shared_library", -] - -[[package]] -name = "owned_ttf_parser" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e6affeb1632d6ff6a23d2cd40ffed138e82f1532571a26f527c8a284bb2fbb" -dependencies = [ - "ttf-parser", -] - -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" -dependencies = [ - "cfg-if 1.0.0", - "instant", - "libc", - "redox_syscall", - "smallvec", - "winapi 0.3.9", -] - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "pin-project" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "piston" -version = "0.53.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e465487e1063ebe4103bc0fb65bc3dd604b635b2012a41530d3a5f77106e526" -dependencies = [ - "pistoncore-event_loop", - "pistoncore-input", - "pistoncore-window", -] - -[[package]] -name = "piston-float" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad78bf43dcf80e8f950c92b84f938a0fc7590b7f6866fbcbeca781609c115590" - -[[package]] -name = "piston-graphics_api_version" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b06401e3ea38467d8d85b394557408107e3e56d827f0d00c9b47e902cbd1bed" - -[[package]] -name = "piston-shaders_graphics2d" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a35f4d08d2b6fd7ff02baab63346d4b7d2fdd5ac3f2e091a5128c22c77a489a" - -[[package]] -name = "piston-texture" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d84ca2ca1ea94fb003a85223f98c0705fe32abefa52dd58b57ed253dc908ce" - -[[package]] -name = "piston-viewport" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61ecaf8ae0d71dd9cdbbd8662b47659621c09430ff3cb880d154858d3b8ac001" -dependencies = [ - "piston-float", -] - -[[package]] -name = "piston2d-graphics" -version = "0.43.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "861e264a9a5ffc4514b89922750b19c9a83886158d539d4a52cb3b9b2d0d1f98" -dependencies = [ - "fnv", - "interpolation", - "piston-texture", - "piston-viewport", - "read_color", - "rusttype", - "vecmath", -] - -[[package]] -name = "piston2d-opengl_graphics" -version = "0.82.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62a12185c5d4ecd7fe8b85e0daecf5e49812063559a626d74fd3c5d0aa8a52f2" -dependencies = [ - "fnv", - "gl", - "image", - "khronos_api 2.2.0", - "piston-shaders_graphics2d", - "piston-texture", - "piston-viewport", - "piston2d-graphics", - "shader_version", -] - -[[package]] -name = "pistoncore-event_loop" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d86b3bf012430bb23694348615e37769aca0e9910539ce93674006aeeb77e6" -dependencies = [ - "pistoncore-input", - "pistoncore-window", - "spin_sleep", -] - -[[package]] -name = "pistoncore-glutin_window" -version = "0.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2625037feaa575206054a7a10b397739c6c10e81be0ae65858182d6dd906d30" -dependencies = [ - "gl", - "glutin", - "pistoncore-input", - "pistoncore-window", - "shader_version", -] - -[[package]] -name = "pistoncore-input" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2977fed6eb16c554fd445a09a50c8a0c250f4c50f752be46a7bd9dcc5ba471f0" -dependencies = [ - "bitflags", - "piston-viewport", - "serde", - "serde_derive", -] - -[[package]] -name = "pistoncore-window" -version = "0.47.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d62962b4e9cfc13143c77e032302fedc58a8f0f570d30006cdb38ba00a5e50bf" -dependencies = [ - "piston-graphics_api_version", - "pistoncore-input", -] - -[[package]] -name = "pkg-config" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" - -[[package]] -name = "png" -version = "0.17.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638" -dependencies = [ - "bitflags", - "crc32fast", - "flate2", - "miniz_oxide", -] - -[[package]] -name = "proc-macro-crate" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" -dependencies = [ - "toml", -] - -[[package]] -name = "proc-macro2" -version = "1.0.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "raw-window-handle" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28f55143d0548dad60bb4fbdc835a3d7ac6acc3324506450c5fdd6e42903a76" -dependencies = [ - "libc", - "raw-window-handle 0.4.3", -] - -[[package]] -name = "raw-window-handle" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41" -dependencies = [ - "cty", -] - -[[package]] -name = "rayon" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e060280438193c554f654141c9ea9417886713b7acd75974c85b18a69a88e0b" -dependencies = [ - "crossbeam-deque", - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-utils", - "num_cpus", -] - -[[package]] -name = "read_color" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f4c8858baa4ad3c8bcc156ae91a0ffe22b76a3975c40c49b4f04c15c6bce0da" - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom", - "redox_syscall", - "thiserror", -] - -[[package]] -name = "rusttype" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff8374aa04134254b7995b63ad3dc41c7f7236f69528b28553da7d72efaa967" -dependencies = [ - "ab_glyph_rasterizer", - "owned_ttf_parser", -] - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scoped_threadpool" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "serde" -version = "1.0.147" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" - -[[package]] -name = "serde_derive" -version = "1.0.147" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "shader_version" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfadbf7574784ee97f062ace17e1008fb5e7f46dd714b7dd46baf6efebd30e26" -dependencies = [ - "piston-graphics_api_version", -] - -[[package]] -name = "shared_library" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" -dependencies = [ - "lazy_static", - "libc", -] - -[[package]] -name = "slab" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - -[[package]] -name = "smithay-client-toolkit" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4750c76fd5d3ac95fa3ed80fe667d6a3d8590a960e5b575b98eea93339a80b80" -dependencies = [ - "andrew", - "bitflags", - "calloop", - "dlib 0.4.2", - "lazy_static", - "log", - "memmap2", - "nix 0.18.0", - "wayland-client", - "wayland-cursor", - "wayland-protocols", -] - -[[package]] -name = "spin" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6002a767bff9e83f8eeecf883ecb8011875a21ae8da43bffb817a57e78cc09" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spin_sleep" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cafa7900db085f4354dbc7025e25d7a839a14360ea13b5fc4fd717f2d3b23134" -dependencies = [ - "once_cell", - "winapi 0.3.9", -] - -[[package]] -name = "spinning-square" -version = "0.1.0" -dependencies = [ - "piston", - "piston2d-graphics", - "piston2d-opengl_graphics", - "pistoncore-glutin_window", -] - -[[package]] -name = "strsim" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" - -[[package]] -name = "syn" -version = "1.0.103" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "thiserror" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "threadpool" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" -dependencies = [ - "num_cpus", -] - -[[package]] -name = "tiff" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17def29300a156c19ae30814710d9c63cd50288a49c6fd3a10ccfbe4cf886fd" -dependencies = [ - "flate2", - "jpeg-decoder", - "weezl", -] - -[[package]] -name = "toml" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" -dependencies = [ - "serde", -] - -[[package]] -name = "ttf-parser" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd" - -[[package]] -name = "unicode-ident" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" - -[[package]] -name = "vecmath" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ae1e0d85bca567dee1dcf87fb1ca2e792792f66f87dced8381f99cd91156a" -dependencies = [ - "piston-float", -] - -[[package]] -name = "walkdir" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi 0.3.9", - "winapi-util", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" -dependencies = [ - "cfg-if 1.0.0", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" - -[[package]] -name = "wayland-client" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ab332350e502f159382201394a78e3cc12d0f04db863429260164ea40e0355" -dependencies = [ - "bitflags", - "downcast-rs", - "libc", - "nix 0.20.0", - "scoped-tls", - "wayland-commons", - "wayland-scanner", - "wayland-sys", -] - -[[package]] -name = "wayland-commons" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21817947c7011bbd0a27e11b17b337bfd022e8544b071a2641232047966fbda" -dependencies = [ - "nix 0.20.0", - "once_cell", - "smallvec", - "wayland-sys", -] - -[[package]] -name = "wayland-cursor" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be610084edd1586d45e7bdd275fe345c7c1873598caa464c4fb835dee70fa65a" -dependencies = [ - "nix 0.20.0", - "wayland-client", - "xcursor", -] - -[[package]] -name = "wayland-egl" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ba1ab1e18756b23982d36f08856d521d7df45015f404a2d7c4f0b2d2f66956" -dependencies = [ - "wayland-client", - "wayland-sys", -] - -[[package]] -name = "wayland-protocols" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "286620ea4d803bacf61fa087a4242ee316693099ee5a140796aaba02b29f861f" -dependencies = [ - "bitflags", - "wayland-client", - "wayland-commons", - "wayland-scanner", -] - -[[package]] -name = "wayland-scanner" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce923eb2deb61de332d1f356ec7b6bf37094dc5573952e1c8936db03b54c03f1" -dependencies = [ - "proc-macro2", - "quote", - "xml-rs", -] - -[[package]] -name = "wayland-sys" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d841fca9aed7febf9bed2e9796c49bf58d4152ceda8ac949ebe00868d8f0feb8" -dependencies = [ - "dlib 0.5.0", - "lazy_static", - "pkg-config", -] - -[[package]] -name = "weezl" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" - -[[package]] -name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" - -[[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.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi 0.3.9", -] - -[[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 = "winit" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da4eda6fce0eb84bd0a33e3c8794eb902e1033d0a1d5a31bc4f19b1b4bbff597" -dependencies = [ - "bitflags", - "cocoa 0.24.1", - "core-foundation 0.9.3", - "core-graphics 0.22.3", - "core-video-sys", - "dispatch", - "instant", - "lazy_static", - "libc", - "log", - "mio", - "mio-extras", - "ndk", - "ndk-glue", - "ndk-sys", - "objc", - "parking_lot", - "percent-encoding", - "raw-window-handle 0.3.4", - "smithay-client-toolkit", - "wayland-client", - "winapi 0.3.9", - "x11-dl", -] - -[[package]] -name = "ws2_32-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - -[[package]] -name = "x11-dl" -version = "2.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1536d6965a5d4e573c7ef73a2c15ebcd0b2de3347bdf526c34c297c00ac40f0" -dependencies = [ - "lazy_static", - "libc", - "pkg-config", -] - -[[package]] -name = "xcursor" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" -dependencies = [ - "nom", -] - -[[package]] -name = "xdg" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4583db5cbd4c4c0303df2d15af80f0539db703fa1c68802d4cbbd2dd0f88f6" -dependencies = [ - "dirs", -] - -[[package]] -name = "xml-rs" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" diff --git a/piston-tutorials/getting-started/Cargo.toml b/piston-tutorials/getting-started/Cargo.toml deleted file mode 100644 index ee4bc6d..0000000 --- a/piston-tutorials/getting-started/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -name = "spinning-square" -version = "0.1.0" -authors = [ - "Dan Buch ", - "TyOverby ", - "Nikita Pekin " -] - -[[bin]] -name = "spinning-square" - -[dependencies] -piston = "0.53.0" -piston2d-graphics = "0.43.0" -pistoncore-glutin_window = "0.70.1" -piston2d-opengl_graphics = "0.82.0" diff --git a/piston-tutorials/getting-started/src/main.rs b/piston-tutorials/getting-started/src/main.rs deleted file mode 100644 index 47f5d2b..0000000 --- a/piston-tutorials/getting-started/src/main.rs +++ /dev/null @@ -1,70 +0,0 @@ -extern crate glutin_window; -extern crate graphics; -extern crate opengl_graphics; -extern crate piston; - -use glutin_window::GlutinWindow as Window; -use opengl_graphics::{GlGraphics, OpenGL}; -use piston::event_loop::{EventSettings, Events}; -use piston::input::{RenderArgs, RenderEvent, UpdateArgs, UpdateEvent}; -use piston::window::WindowSettings; - -pub struct App { - gl: GlGraphics, - rotation: f64, -} - -impl App { - fn render(&mut self, args: &RenderArgs) { - use graphics::*; - - const GREEN: [f32; 4] = [0.0, 1.0, 0.0, 1.0]; - const RED: [f32; 4] = [1.0, 0.0, 0.0, 1.0]; - - let square = rectangle::square(0.0, 0.0, 50.0); - let rotation = self.rotation; - let (x, y) = (args.window_size[0] / 2.0, args.window_size[1] / 2.0); - - self.gl.draw(args.viewport(), |c, gl| { - clear(GREEN, gl); - - let transform = c - .transform - .trans(x, y) - .rot_rad(rotation) - .trans(-25.0, -25.0); - - rectangle(RED, square, transform, gl); - }) - } - - fn update(&mut self, args: &UpdateArgs) { - self.rotation += 2.0 * args.dt; - } -} - -fn main() { - let opengl = OpenGL::V3_2; - - let mut window: Window = WindowSettings::new("spinning-square", [200, 200]) - .graphics_api(opengl) - .exit_on_esc(true) - .build() - .unwrap(); - - let mut app = App { - gl: GlGraphics::new(opengl), - rotation: 0.0, - }; - - let mut events = Events::new(EventSettings::new()); - while let Some(e) = events.next(&mut window) { - if let Some(args) = e.render_args() { - app.render(&args); - } - - if let Some(args) = e.update_args() { - app.update(&args); - } - } -} diff --git a/piston-tutorials/sudoku/Cargo.lock b/piston-tutorials/sudoku/Cargo.lock deleted file mode 100644 index 6e820dd..0000000 --- a/piston-tutorials/sudoku/Cargo.lock +++ /dev/null @@ -1,1876 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "ab_glyph_rasterizer" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330223a1aecc308757b9926e9391c9b47f8ef2dbd8aea9df88312aea18c5e8d6" - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "andrew" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c4afb09dd642feec8408e33f92f3ffc4052946f6b20f32fb99c1f58cd4fa7cf" -dependencies = [ - "bitflags", - "rusttype", - "walkdir", - "xdg", - "xml-rs", -] - -[[package]] -name = "android_glue" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "bit_field" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb6dd1c2376d2e096796e234a70e17e94cc2d5d54ff8ce42b28cef1d0d359a4" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "bumpalo" -version = "3.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" - -[[package]] -name = "bytemuck" -version = "1.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaa3a8d9a1ca92e282c96a32d6511b695d7d994d1d102ba85d279f9b2756947f" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "calloop" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b036167e76041694579972c28cf4877b4f92da222560ddb49008937b6a6727c" -dependencies = [ - "log", - "nix 0.18.0", -] - -[[package]] -name = "cc" -version = "1.0.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4" - -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cgl" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" -dependencies = [ - "libc", -] - -[[package]] -name = "cocoa" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c54201c07dcf3a5ca33fececb8042aed767ee4bfd5a0235a8ceabcda956044b2" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation 0.9.3", - "core-graphics 0.22.3", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation 0.9.3", - "core-graphics 0.22.3", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" -dependencies = [ - "bitflags", - "block", - "core-foundation 0.9.3", - "core-graphics-types", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "color_quant" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" - -[[package]] -name = "core-foundation" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" -dependencies = [ - "core-foundation-sys 0.7.0", - "libc", -] - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys 0.8.3", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" - -[[package]] -name = "core-foundation-sys" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" - -[[package]] -name = "core-graphics" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" -dependencies = [ - "bitflags", - "core-foundation 0.7.0", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" -dependencies = [ - "bitflags", - "core-foundation 0.9.3", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" -dependencies = [ - "bitflags", - "core-foundation 0.9.3", - "foreign-types", - "libc", -] - -[[package]] -name = "core-video-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" -dependencies = [ - "cfg-if 0.1.10", - "core-foundation-sys 0.7.0", - "core-graphics 0.19.2", - "libc", - "objc", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" -dependencies = [ - "autocfg", - "cfg-if 1.0.0", - "crossbeam-utils", - "memoffset", - "scopeguard", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "cty" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" - -[[package]] -name = "darling" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" -dependencies = [ - "darling_core", - "quote", - "syn", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "dirs" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" -dependencies = [ - "libc", - "redox_users", - "winapi 0.3.9", -] - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dlib" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b11f15d1e3268f140f68d390637d5e76d849782d971ae7063e0da69fe9709a76" -dependencies = [ - "libloading 0.6.7", -] - -[[package]] -name = "dlib" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794" -dependencies = [ - "libloading 0.7.4", -] - -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "either" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" - -[[package]] -name = "exr" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eb5f255b5980bb0c8cf676b675d1a99be40f316881444f44e0462eaf5df5ded" -dependencies = [ - "bit_field", - "flume", - "half", - "lebe", - "miniz_oxide", - "smallvec", - "threadpool", -] - -[[package]] -name = "flate2" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "flume" -version = "0.10.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" -dependencies = [ - "futures-core", - "futures-sink", - "nanorand", - "pin-project", - "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.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -dependencies = [ - "bitflags", - "fuchsia-zircon-sys", -] - -[[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" - -[[package]] -name = "futures-core" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" - -[[package]] -name = "futures-sink" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" - -[[package]] -name = "getrandom" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" -dependencies = [ - "cfg-if 1.0.0", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "gif" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06" -dependencies = [ - "color_quant", - "weezl", -] - -[[package]] -name = "gl" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b411c7e0bfc599e3606412c190e786b5bb48cf00073e1635f9bb6f88fe7d84a" -dependencies = [ - "gl_generator 0.13.1", -] - -[[package]] -name = "gl_generator" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca98bbde17256e02d17336a6bdb5a50f7d0ccacee502e191d3e3d0ec2f96f84a" -dependencies = [ - "khronos_api 3.1.0", - "log", - "xml-rs", -] - -[[package]] -name = "gl_generator" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" -dependencies = [ - "khronos_api 3.1.0", - "log", - "xml-rs", -] - -[[package]] -name = "glutin" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ae1cbb9176b9151c4ce03f012e3cd1c6c18c4be79edeaeb3d99f5d8085c5fa3" -dependencies = [ - "android_glue", - "cgl", - "cocoa 0.23.0", - "core-foundation 0.9.3", - "glutin_egl_sys", - "glutin_emscripten_sys", - "glutin_gles2_sys", - "glutin_glx_sys", - "glutin_wgl_sys", - "lazy_static", - "libloading 0.6.7", - "log", - "objc", - "osmesa-sys", - "parking_lot", - "wayland-client", - "wayland-egl", - "winapi 0.3.9", - "winit", -] - -[[package]] -name = "glutin_egl_sys" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68900f84b471f31ea1d1355567eb865a2cf446294f06cef8d653ed7bcf5f013d" -dependencies = [ - "gl_generator 0.14.0", - "winapi 0.3.9", -] - -[[package]] -name = "glutin_emscripten_sys" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80de4146df76e8a6c32b03007bc764ff3249dcaeb4f675d68a06caf1bac363f1" - -[[package]] -name = "glutin_gles2_sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094e708b730a7c8a1954f4f8a31880af00eb8a1c5b5bf85d28a0a3c6d69103" -dependencies = [ - "gl_generator 0.14.0", - "objc", -] - -[[package]] -name = "glutin_glx_sys" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93d0575865098580c5b3a423188cd959419912ea60b1e48e8b3b526f6d02468" -dependencies = [ - "gl_generator 0.14.0", - "x11-dl", -] - -[[package]] -name = "glutin_wgl_sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da5951a1569dbab865c6f2a863efafff193a93caf05538d193e9e3816d21696" -dependencies = [ - "gl_generator 0.14.0", -] - -[[package]] -name = "half" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad6a9459c9c30b177b925162351f97e7d967c7ea8bab3b8352805327daf45554" -dependencies = [ - "crunchy", -] - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "image" -version = "0.24.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "exr", - "gif", - "jpeg-decoder", - "num-rational", - "num-traits", - "png", - "scoped_threadpool", - "tiff", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "interpolation" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3b7357d2bbc5ee92f8e899ab645233e43d21407573cceb37fed8bc3dede2c02" - -[[package]] -name = "iovec" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -dependencies = [ - "libc", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "jpeg-decoder" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" -dependencies = [ - "rayon", -] - -[[package]] -name = "js-sys" -version = "0.3.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - -[[package]] -name = "khronos_api" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037ab472c33f67b5fbd3e9163a2645319e5356fcd355efa6d4eb7fff4bbcb554" - -[[package]] -name = "khronos_api" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - -[[package]] -name = "lebe" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" - -[[package]] -name = "libc" -version = "0.2.137" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" - -[[package]] -name = "libloading" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" -dependencies = [ - "cfg-if 1.0.0", - "winapi 0.3.9", -] - -[[package]] -name = "libloading" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" -dependencies = [ - "cfg-if 1.0.0", - "winapi 0.3.9", -] - -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memmap2" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b70ca2a6103ac8b665dc150b142ef0e4e89df640c9e6cf295d189c3caebe5a" -dependencies = [ - "libc", -] - -[[package]] -name = "memoffset" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -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.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.6.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" -dependencies = [ - "cfg-if 0.1.10", - "fuchsia-zircon", - "fuchsia-zircon-sys", - "iovec", - "kernel32-sys", - "libc", - "log", - "miow", - "net2", - "slab", - "winapi 0.2.8", -] - -[[package]] -name = "mio-extras" -version = "2.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" -dependencies = [ - "lazycell", - "log", - "mio", - "slab", -] - -[[package]] -name = "miow" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" -dependencies = [ - "kernel32-sys", - "net2", - "winapi 0.2.8", - "ws2_32-sys", -] - -[[package]] -name = "nanorand" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" -dependencies = [ - "getrandom", -] - -[[package]] -name = "ndk" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb167c1febed0a496639034d0c76b3b74263636045db5489eee52143c246e73" -dependencies = [ - "jni-sys", - "ndk-sys", - "num_enum", - "thiserror", -] - -[[package]] -name = "ndk-glue" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf399b8b7a39c6fb153c4ec32c72fd5fe789df24a647f229c239aa7adb15241" -dependencies = [ - "lazy_static", - "libc", - "log", - "ndk", - "ndk-macro", - "ndk-sys", -] - -[[package]] -name = "ndk-macro" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d" -dependencies = [ - "darling", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "ndk-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1bcdd74c20ad5d95aacd60ef9ba40fdf77f767051040541df557b7a9b2a2121" - -[[package]] -name = "net2" -version = "0.2.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "winapi 0.3.9", -] - -[[package]] -name = "nix" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83450fe6a6142ddd95fb064b746083fc4ef1705fe81f64a64e1d4b39f54a1055" -dependencies = [ - "bitflags", - "cc", - "cfg-if 0.1.10", - "libc", -] - -[[package]] -name = "nix" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a" -dependencies = [ - "bitflags", - "cc", - "cfg-if 1.0.0", - "libc", -] - -[[package]] -name = "nom" -version = "7.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca565a7df06f3d4b485494f25ba05da1435950f4dc263440eda7a6fa9b8e36e4" -dependencies = [ - "derivative", - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffa5a33ddddfee04c0283a7653987d634e880347e96b5b2ed64de07efb59db9d" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "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 = "once_cell" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" - -[[package]] -name = "osmesa-sys" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" -dependencies = [ - "shared_library", -] - -[[package]] -name = "owned_ttf_parser" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e6affeb1632d6ff6a23d2cd40ffed138e82f1532571a26f527c8a284bb2fbb" -dependencies = [ - "ttf-parser", -] - -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" -dependencies = [ - "cfg-if 1.0.0", - "instant", - "libc", - "redox_syscall", - "smallvec", - "winapi 0.3.9", -] - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "pin-project" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "piston" -version = "0.53.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e465487e1063ebe4103bc0fb65bc3dd604b635b2012a41530d3a5f77106e526" -dependencies = [ - "pistoncore-event_loop", - "pistoncore-input", - "pistoncore-window", -] - -[[package]] -name = "piston-float" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad78bf43dcf80e8f950c92b84f938a0fc7590b7f6866fbcbeca781609c115590" - -[[package]] -name = "piston-graphics_api_version" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b06401e3ea38467d8d85b394557408107e3e56d827f0d00c9b47e902cbd1bed" - -[[package]] -name = "piston-shaders_graphics2d" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a35f4d08d2b6fd7ff02baab63346d4b7d2fdd5ac3f2e091a5128c22c77a489a" - -[[package]] -name = "piston-texture" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d84ca2ca1ea94fb003a85223f98c0705fe32abefa52dd58b57ed253dc908ce" - -[[package]] -name = "piston-viewport" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61ecaf8ae0d71dd9cdbbd8662b47659621c09430ff3cb880d154858d3b8ac001" -dependencies = [ - "piston-float", -] - -[[package]] -name = "piston2d-graphics" -version = "0.43.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "861e264a9a5ffc4514b89922750b19c9a83886158d539d4a52cb3b9b2d0d1f98" -dependencies = [ - "fnv", - "interpolation", - "piston-texture", - "piston-viewport", - "read_color", - "rusttype", - "vecmath", -] - -[[package]] -name = "piston2d-opengl_graphics" -version = "0.82.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62a12185c5d4ecd7fe8b85e0daecf5e49812063559a626d74fd3c5d0aa8a52f2" -dependencies = [ - "fnv", - "gl", - "image", - "khronos_api 2.2.0", - "piston-shaders_graphics2d", - "piston-texture", - "piston-viewport", - "piston2d-graphics", - "shader_version", -] - -[[package]] -name = "pistoncore-event_loop" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d86b3bf012430bb23694348615e37769aca0e9910539ce93674006aeeb77e6" -dependencies = [ - "pistoncore-input", - "pistoncore-window", - "spin_sleep", -] - -[[package]] -name = "pistoncore-glutin_window" -version = "0.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2625037feaa575206054a7a10b397739c6c10e81be0ae65858182d6dd906d30" -dependencies = [ - "gl", - "glutin", - "pistoncore-input", - "pistoncore-window", - "shader_version", -] - -[[package]] -name = "pistoncore-input" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2977fed6eb16c554fd445a09a50c8a0c250f4c50f752be46a7bd9dcc5ba471f0" -dependencies = [ - "bitflags", - "piston-viewport", - "serde", - "serde_derive", -] - -[[package]] -name = "pistoncore-window" -version = "0.47.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d62962b4e9cfc13143c77e032302fedc58a8f0f570d30006cdb38ba00a5e50bf" -dependencies = [ - "piston-graphics_api_version", - "pistoncore-input", -] - -[[package]] -name = "pkg-config" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" - -[[package]] -name = "png" -version = "0.17.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638" -dependencies = [ - "bitflags", - "crc32fast", - "flate2", - "miniz_oxide", -] - -[[package]] -name = "proc-macro-crate" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" -dependencies = [ - "toml", -] - -[[package]] -name = "proc-macro2" -version = "1.0.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "raw-window-handle" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28f55143d0548dad60bb4fbdc835a3d7ac6acc3324506450c5fdd6e42903a76" -dependencies = [ - "libc", - "raw-window-handle 0.4.3", -] - -[[package]] -name = "raw-window-handle" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41" -dependencies = [ - "cty", -] - -[[package]] -name = "rayon" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e060280438193c554f654141c9ea9417886713b7acd75974c85b18a69a88e0b" -dependencies = [ - "crossbeam-deque", - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-utils", - "num_cpus", -] - -[[package]] -name = "read_color" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f4c8858baa4ad3c8bcc156ae91a0ffe22b76a3975c40c49b4f04c15c6bce0da" - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom", - "redox_syscall", - "thiserror", -] - -[[package]] -name = "rusttype" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff8374aa04134254b7995b63ad3dc41c7f7236f69528b28553da7d72efaa967" -dependencies = [ - "ab_glyph_rasterizer", - "owned_ttf_parser", -] - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scoped_threadpool" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "serde" -version = "1.0.147" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" - -[[package]] -name = "serde_derive" -version = "1.0.147" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "shader_version" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfadbf7574784ee97f062ace17e1008fb5e7f46dd714b7dd46baf6efebd30e26" -dependencies = [ - "piston-graphics_api_version", -] - -[[package]] -name = "shared_library" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" -dependencies = [ - "lazy_static", - "libc", -] - -[[package]] -name = "slab" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - -[[package]] -name = "smithay-client-toolkit" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4750c76fd5d3ac95fa3ed80fe667d6a3d8590a960e5b575b98eea93339a80b80" -dependencies = [ - "andrew", - "bitflags", - "calloop", - "dlib 0.4.2", - "lazy_static", - "log", - "memmap2", - "nix 0.18.0", - "wayland-client", - "wayland-cursor", - "wayland-protocols", -] - -[[package]] -name = "spin" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6002a767bff9e83f8eeecf883ecb8011875a21ae8da43bffb817a57e78cc09" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spin_sleep" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cafa7900db085f4354dbc7025e25d7a839a14360ea13b5fc4fd717f2d3b23134" -dependencies = [ - "once_cell", - "winapi 0.3.9", -] - -[[package]] -name = "strsim" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" - -[[package]] -name = "sudoku" -version = "0.1.0" -dependencies = [ - "piston", - "piston2d-graphics", - "piston2d-opengl_graphics", - "pistoncore-glutin_window", -] - -[[package]] -name = "syn" -version = "1.0.103" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "thiserror" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "threadpool" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" -dependencies = [ - "num_cpus", -] - -[[package]] -name = "tiff" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17def29300a156c19ae30814710d9c63cd50288a49c6fd3a10ccfbe4cf886fd" -dependencies = [ - "flate2", - "jpeg-decoder", - "weezl", -] - -[[package]] -name = "toml" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" -dependencies = [ - "serde", -] - -[[package]] -name = "ttf-parser" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd" - -[[package]] -name = "unicode-ident" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" - -[[package]] -name = "vecmath" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ae1e0d85bca567dee1dcf87fb1ca2e792792f66f87dced8381f99cd91156a" -dependencies = [ - "piston-float", -] - -[[package]] -name = "walkdir" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi 0.3.9", - "winapi-util", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" -dependencies = [ - "cfg-if 1.0.0", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" - -[[package]] -name = "wayland-client" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ab332350e502f159382201394a78e3cc12d0f04db863429260164ea40e0355" -dependencies = [ - "bitflags", - "downcast-rs", - "libc", - "nix 0.20.0", - "scoped-tls", - "wayland-commons", - "wayland-scanner", - "wayland-sys", -] - -[[package]] -name = "wayland-commons" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21817947c7011bbd0a27e11b17b337bfd022e8544b071a2641232047966fbda" -dependencies = [ - "nix 0.20.0", - "once_cell", - "smallvec", - "wayland-sys", -] - -[[package]] -name = "wayland-cursor" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be610084edd1586d45e7bdd275fe345c7c1873598caa464c4fb835dee70fa65a" -dependencies = [ - "nix 0.20.0", - "wayland-client", - "xcursor", -] - -[[package]] -name = "wayland-egl" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ba1ab1e18756b23982d36f08856d521d7df45015f404a2d7c4f0b2d2f66956" -dependencies = [ - "wayland-client", - "wayland-sys", -] - -[[package]] -name = "wayland-protocols" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "286620ea4d803bacf61fa087a4242ee316693099ee5a140796aaba02b29f861f" -dependencies = [ - "bitflags", - "wayland-client", - "wayland-commons", - "wayland-scanner", -] - -[[package]] -name = "wayland-scanner" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce923eb2deb61de332d1f356ec7b6bf37094dc5573952e1c8936db03b54c03f1" -dependencies = [ - "proc-macro2", - "quote", - "xml-rs", -] - -[[package]] -name = "wayland-sys" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d841fca9aed7febf9bed2e9796c49bf58d4152ceda8ac949ebe00868d8f0feb8" -dependencies = [ - "dlib 0.5.0", - "lazy_static", - "pkg-config", -] - -[[package]] -name = "weezl" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" - -[[package]] -name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" - -[[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.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi 0.3.9", -] - -[[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 = "winit" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da4eda6fce0eb84bd0a33e3c8794eb902e1033d0a1d5a31bc4f19b1b4bbff597" -dependencies = [ - "bitflags", - "cocoa 0.24.1", - "core-foundation 0.9.3", - "core-graphics 0.22.3", - "core-video-sys", - "dispatch", - "instant", - "lazy_static", - "libc", - "log", - "mio", - "mio-extras", - "ndk", - "ndk-glue", - "ndk-sys", - "objc", - "parking_lot", - "percent-encoding", - "raw-window-handle 0.3.4", - "smithay-client-toolkit", - "wayland-client", - "winapi 0.3.9", - "x11-dl", -] - -[[package]] -name = "ws2_32-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - -[[package]] -name = "x11-dl" -version = "2.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1536d6965a5d4e573c7ef73a2c15ebcd0b2de3347bdf526c34c297c00ac40f0" -dependencies = [ - "lazy_static", - "libc", - "pkg-config", -] - -[[package]] -name = "xcursor" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" -dependencies = [ - "nom", -] - -[[package]] -name = "xdg" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4583db5cbd4c4c0303df2d15af80f0539db703fa1c68802d4cbbd2dd0f88f6" -dependencies = [ - "dirs", -] - -[[package]] -name = "xml-rs" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" diff --git a/piston-tutorials/sudoku/Cargo.toml b/piston-tutorials/sudoku/Cargo.toml deleted file mode 100644 index adbf332..0000000 --- a/piston-tutorials/sudoku/Cargo.toml +++ /dev/null @@ -1,12 +0,0 @@ -[package] -name = "sudoku" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -piston = "0.53.2" -piston2d-graphics = "0.43.0" -piston2d-opengl_graphics = "0.82.0" -pistoncore-glutin_window = "0.70.1" diff --git a/piston-tutorials/sudoku/assets/FiraSans-Regular.ttf b/piston-tutorials/sudoku/assets/FiraSans-Regular.ttf deleted file mode 100644 index a4e656380614ce51d60cb773c8f8668b81ba797e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194812 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 l Gameboard { - Gameboard { - cells: [[Cell::default(); SIZE]; SIZE], - completed: false, - } - } - - pub fn from_cells(cells: [[u8; SIZE]; SIZE]) -> Gameboard { - let mut ret = Gameboard::new(); - for (i, row) in cells.iter().enumerate() { - for (j, &col) in row.iter().enumerate() { - ret.cells[i][j] = Cell { - value: col, - loaded: col != 0, - invalid: false, - }; - } - } - ret - } - - pub fn char(&self, ind: [usize; 2]) -> Option { - Some(match self.cells[ind[1]][ind[0]].value { - 1 => '1', - 2 => '2', - 3 => '3', - 4 => '4', - 5 => '5', - 6 => '6', - 7 => '7', - 8 => '8', - 9 => '9', - _ => return None, - }) - } - - pub fn set(&mut self, ind: [usize; 2], val: u8) { - if !self.cells[ind[1]][ind[0]].loaded { - self.validate(ind, val); - self.cells[ind[1]][ind[0]].value = val; - } - - self.completed = self - .cells - .iter() - .flatten() - .all(|cell| !cell.invalid && cell.value != 0); - } - - pub fn load_sdm(filename: &str) -> Self { - let data = read_to_string(filename).expect("failed to read SDM file"); - let mut cells = [[Cell::default(); SIZE]; SIZE]; - let mut row = 0; - let mut col = 0; - for c in data.chars() { - if col == SIZE { - col = 0; - row += 1; - } - if let Some(v) = c.to_digit(10) { - let value = v as u8; - cells[row][col] = Cell { - value, - loaded: value != 0, - invalid: false, - }; - col += 1; - } - } - - Self { - cells, - completed: false, - } - } - - fn validate(&mut self, ind: [usize; 2], val: u8) { - let [b, a] = ind; - for i in 0..SIZE { - if i == a { - continue; - } - if self.cells[a][i].value == val { - self.cells[a][b].invalid = true; - return; - } - } - - for i in 0..SIZE { - if i == b { - continue; - } - if self.cells[i][b].value == val { - self.cells[a][b].invalid = true; - return; - } - } - - let (row, col) = (a / 3, b / 3); - for i in 3 * row..3 * row + 3 { - for j in 3 * col..3 * col + 3 { - if i == a && j == b { - continue; - } - if self.cells[i][j].value == val { - self.cells[a][b].invalid = true; - return; - } - } - } - self.cells[a][b].invalid = false; - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn load_sdm() { - let got = Gameboard::load_sdm("static/puzzle.sdm"); - let want = Gameboard::from_cells([ - [0, 1, 6, 4, 0, 0, 0, 0, 0], - [2, 0, 0, 0, 0, 9, 0, 0, 0], - [4, 0, 0, 0, 0, 0, 0, 6, 2], - [0, 7, 0, 2, 3, 0, 1, 0, 0], - [1, 0, 0, 0, 0, 0, 0, 0, 3], - [0, 0, 3, 0, 8, 7, 0, 4, 0], - [9, 6, 0, 0, 0, 0, 0, 0, 5], - [0, 0, 0, 8, 0, 0, 0, 0, 7], - [0, 0, 0, 0, 0, 6, 8, 2, 0], - ]); - assert_eq!(got, want); - } -} diff --git a/piston-tutorials/sudoku/src/gameboard_controller.rs b/piston-tutorials/sudoku/src/gameboard_controller.rs deleted file mode 100644 index 11c1ace..0000000 --- a/piston-tutorials/sudoku/src/gameboard_controller.rs +++ /dev/null @@ -1,57 +0,0 @@ -//! Gameboard controller - -use piston::GenericEvent; - -use crate::Gameboard; - -pub struct GameboardController { - pub gameboard: Gameboard, - pub selected_cell: Option<[usize; 2]>, - cursor_pos: [f64; 2], -} - -impl GameboardController { - pub fn new(gameboard: Gameboard) -> GameboardController { - GameboardController { - gameboard: gameboard, - selected_cell: None, - cursor_pos: [0.0; 2], - } - } - - pub fn event(&mut self, pos: [f64; 2], size: f64, e: &E) { - use piston::input::{Button, Key, MouseButton}; - - if let Some(pos) = e.mouse_cursor_args() { - self.cursor_pos = pos; - } - - if let Some(Button::Mouse(MouseButton::Left)) = e.press_args() { - let x = self.cursor_pos[0] - pos[0]; - let y = self.cursor_pos[1] - pos[1]; - - if x >= 0.0 && x < size && y >= 0.0 && y < size { - let cell_x = (x / size * 9.0) as usize; - let cell_y = (y / size * 9.0) as usize; - self.selected_cell = Some([cell_x, cell_y]); - } - } - - if let Some(Button::Keyboard(key)) = e.press_args() { - if let Some(ind) = self.selected_cell { - match key { - Key::D1 => self.gameboard.set(ind, 1), - Key::D2 => self.gameboard.set(ind, 2), - Key::D3 => self.gameboard.set(ind, 3), - Key::D4 => self.gameboard.set(ind, 4), - Key::D5 => self.gameboard.set(ind, 5), - Key::D6 => self.gameboard.set(ind, 6), - Key::D7 => self.gameboard.set(ind, 7), - Key::D8 => self.gameboard.set(ind, 8), - Key::D9 => self.gameboard.set(ind, 9), - _ => {} - } - } - } - } -} diff --git a/piston-tutorials/sudoku/src/gameboard_view.rs b/piston-tutorials/sudoku/src/gameboard_view.rs deleted file mode 100644 index 40f2622..0000000 --- a/piston-tutorials/sudoku/src/gameboard_view.rs +++ /dev/null @@ -1,210 +0,0 @@ -//! Gameboard view. - -use graphics::character::CharacterCache; -use graphics::types::Color; -use graphics::{Context, Graphics}; - -use crate::gameboard_controller::GameboardController; - -pub struct GameboardViewSettings { - pub position: [f64; 2], - pub size: f64, - pub background_color: Color, - pub border_color: Color, - pub board_edge_color: Color, - pub section_edge_color: Color, - pub cell_edge_color: Color, - pub board_edge_radius: f64, - pub section_edge_radius: f64, - pub cell_edge_radius: f64, - pub selected_cell_background_color: Color, - pub text_color: Color, - pub loaded_cell_background_color: Color, - pub invalid_cell_background_color: Color, - pub invalid_selected_cell_background_color: Color, - pub completed_background_color: Color, -} - -impl GameboardViewSettings { - pub fn new() -> GameboardViewSettings { - GameboardViewSettings { - position: [10.0; 2], - size: 400.0, - background_color: [0.8, 0.8, 1.0, 1.0], - border_color: [0.0, 0.0, 0.2, 1.0], - board_edge_color: [0.0, 0.0, 0.2, 1.0], - section_edge_color: [0.0, 0.0, 0.2, 1.0], - cell_edge_color: [0.0, 0.0, 0.2, 1.0], - board_edge_radius: 3.0, - section_edge_radius: 2.0, - cell_edge_radius: 1.0, - selected_cell_background_color: [0.9, 0.9, 1.0, 1.0], - text_color: [0.0, 0.0, 0.1, 1.0], - loaded_cell_background_color: [1.0, 1.0, 1.0, 1.0], - invalid_cell_background_color: [1.0, 0.0, 0.0, 1.0], - invalid_selected_cell_background_color: [1.0, 0.0, 0.5, 1.0], - completed_background_color: [0.0, 1.0, 0.0, 1.0], - } - } -} - -pub struct GameboardView { - pub settings: GameboardViewSettings, -} - -impl GameboardView { - pub fn new(settings: GameboardViewSettings) -> GameboardView { - GameboardView { settings: settings } - } - - pub fn draw( - &self, - controller: &GameboardController, - glyphs: &mut C, - c: &Context, - g: &mut G, - ) where - C: CharacterCache, - { - use graphics::{Image, Line, Rectangle, Transformed}; - - let ref settings = self.settings; - let board_rect = [ - settings.position[0], - settings.position[1], - settings.size, - settings.size, - ]; - - if controller.gameboard.completed { - Rectangle::new(settings.completed_background_color).draw( - board_rect, - &c.draw_state, - c.transform, - g, - ); - } else { - Rectangle::new(settings.background_color).draw( - board_rect, - &c.draw_state, - c.transform, - g, - ); - - for i in 0..9 { - for j in 0..9 { - if controller.gameboard.cells[i][j].loaded { - color_cell( - settings, - [j, i], - settings.loaded_cell_background_color, - c, - g, - ); - } else if controller.gameboard.cells[i][j].invalid { - color_cell( - settings, - [j, i], - settings.invalid_cell_background_color, - c, - g, - ); - } - } - } - - if let Some(ind) = controller.selected_cell { - let cell = controller.gameboard.cells[ind[1]][ind[0]]; - let color = if !cell.loaded { - if !cell.invalid { - settings.selected_cell_background_color - } else { - settings.invalid_selected_cell_background_color - } - } else { - settings.loaded_cell_background_color - }; - color_cell(settings, ind, color, c, g); - } - } - - let text_image = Image::new_color(settings.text_color); - let cell_size = settings.size / 9.0; - - for j in 0..9 { - for i in 0..9 { - if let Some(ch) = controller.gameboard.char([i, j]) { - let pos = [ - settings.position[0] + i as f64 * cell_size + 15.0, - settings.position[1] + j as f64 * cell_size + 34.0, - ]; - - if let Ok(character) = glyphs.character(34, ch) { - let ch_x = pos[0] + character.left(); - let ch_y = pos[1] - character.top(); - let text_image = text_image.src_rect([ - character.atlas_offset[0], - character.atlas_offset[1], - character.atlas_size[0], - character.atlas_size[1], - ]); - text_image.draw( - character.texture, - &c.draw_state, - c.transform.trans(ch_x, ch_y), - g, - ); - } - } - } - } - - let cell_edge = Line::new(settings.cell_edge_color, settings.cell_edge_radius); - let section_edge = Line::new(settings.section_edge_color, settings.section_edge_radius); - - for i in 0..9 { - let x = settings.position[0] + i as f64 / 9.0 * settings.size; - let y = settings.position[1] + i as f64 / 9.0 * settings.size; - let x2 = settings.position[0] + settings.size; - let y2 = settings.position[1] + settings.size; - - let vline = [x, settings.position[1], x, y2]; - let hline = [settings.position[0], y, x2, y]; - - if (i % 3) == 0 { - section_edge.draw(vline, &c.draw_state, c.transform, g); - section_edge.draw(hline, &c.draw_state, c.transform, g); - } else { - cell_edge.draw(vline, &c.draw_state, c.transform, g); - cell_edge.draw(hline, &c.draw_state, c.transform, g); - } - } - - Rectangle::new_border(settings.board_edge_color, settings.board_edge_radius).draw( - board_rect, - &c.draw_state, - c.transform, - g, - ); - } -} - -fn color_cell( - settings: &GameboardViewSettings, - ind: [usize; 2], - color: [f32; 4], - c: &Context, - g: &mut G, -) { - use graphics::Rectangle; - - let cell_size = settings.size / 9.0; - let pos = [ind[0] as f64 * cell_size, ind[1] as f64 * cell_size]; - let cell_rect = [ - settings.position[0] + pos[0], - settings.position[1] + pos[1], - cell_size, - cell_size, - ]; - Rectangle::new(color).draw(cell_rect, &c.draw_state, c.transform, g); -} diff --git a/piston-tutorials/sudoku/src/main.rs b/piston-tutorials/sudoku/src/main.rs deleted file mode 100644 index 3e3da24..0000000 --- a/piston-tutorials/sudoku/src/main.rs +++ /dev/null @@ -1,57 +0,0 @@ -//////#![deny(missing_docs)] - -//! An Sudoko please. - -extern crate glutin_window; - -use glutin_window::GlutinWindow; -use opengl_graphics::{Filter, GlGraphics, GlyphCache, OpenGL, TextureSettings}; -use piston::event_loop::{EventSettings, Events}; -use piston::{EventLoop, RenderEvent, WindowSettings}; - -pub use crate::gameboard::Gameboard; -pub use crate::gameboard_controller::GameboardController; -pub use crate::gameboard_view::{GameboardView, GameboardViewSettings}; - -mod gameboard; -mod gameboard_controller; -mod gameboard_view; - -fn main() { - let opengl = OpenGL::V3_2; - let settings = WindowSettings::new("Sudoku", (640, 480)) - .exit_on_esc(true) - .graphics_api(opengl) - .vsync(true); - let mut window: GlutinWindow = settings.build().expect("could not create window"); - let mut events = Events::new(EventSettings::new().lazy(true)); - let mut gl = GlGraphics::new(opengl); - - let args: Vec<_> = std::env::args().collect(); - let infile = args.get(1).expect("usage: sudoku "); - - let gameboard = Gameboard::load_sdm(infile); - let mut gameboard_controller = GameboardController::new(gameboard); - let gameboard_view_settings = GameboardViewSettings::new(); - let gameboard_view = GameboardView::new(gameboard_view_settings); - - let texture_settings = TextureSettings::new().filter(Filter::Nearest); - let ref mut glyphs = GlyphCache::new("assets/FiraSans-Regular.ttf", (), texture_settings) - .expect("Could not load font"); - - while let Some(e) = events.next(&mut window) { - gameboard_controller.event( - gameboard_view.settings.position, - gameboard_view.settings.size, - &e, - ); - if let Some(args) = e.render_args() { - gl.draw(args.viewport(), |c, g| { - use graphics::clear; - - clear([1.0; 4], g); - gameboard_view.draw(&gameboard_controller, glyphs, &c, g); - }) - } - } -} diff --git a/piston-tutorials/sudoku/static/puzzle-almost-solved.sdm b/piston-tutorials/sudoku/static/puzzle-almost-solved.sdm deleted file mode 100644 index 6f09bfa..0000000 --- a/piston-tutorials/sudoku/static/puzzle-almost-solved.sdm +++ /dev/null @@ -1 +0,0 @@ -517962483236847915498351762371695248654218397829734156765129834142583679983476520 diff --git a/piston-tutorials/sudoku/static/puzzle.sdm b/piston-tutorials/sudoku/static/puzzle.sdm deleted file mode 100644 index 62cb0e9..0000000 --- a/piston-tutorials/sudoku/static/puzzle.sdm +++ /dev/null @@ -1 +0,0 @@ -016400000200009000400000062070230100100000003003087040960000005000800007000006820