From 9560dc98733f15714cbcf3493c81e936e777e992 Mon Sep 17 00:00:00 2001 From: pizzart <7o7goo7o7@gmail.com> Date: Thu, 12 Oct 2023 21:28:11 +0300 Subject: [PATCH 01/16] basic egui setup (resource list, bitmap preview, nicknames, resource info) --- Cargo.lock | 3789 +++++++++++++++++++++-- bff-gui/Cargo.toml | 6 + bff-gui/src/bitmap.rs | 33 + bff-gui/src/main.rs | 262 +- bff-gui/src/traits.rs | 1 + bff/src/class/bitmap/v1_291_03_06_pc.rs | 2 +- 6 files changed, 3793 insertions(+), 300 deletions(-) create mode 100644 bff-gui/src/bitmap.rs create mode 100644 bff-gui/src/traits.rs diff --git a/Cargo.lock b/Cargo.lock index e234eab..223ddc4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,146 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "ab_glyph" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1061f3ff92c2f65800df1f12fc7b4ff44ee14783104187dd04dfee6f11b0fd2" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" + +[[package]] +name = "accesskit" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76eb1adf08c5bcaa8490b9851fd53cca27fa9880076f178ea9d29f05196728a8" +dependencies = [ + "enumn", + "serde", +] + +[[package]] +name = "accesskit_consumer" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04bb4d9e4772fe0d47df57d0d5dbe5d85dd05e2f37ae1ddb6b105e76be58fb00" +dependencies = [ + "accesskit", +] + +[[package]] +name = "accesskit_macos" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "134d0acf6acb667c89d3332999b1a5df4edbc8d6113910f392ebb73f2b03bb56" +dependencies = [ + "accesskit", + "accesskit_consumer", + "objc2", + "once_cell", +] + +[[package]] +name = "accesskit_unix" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e084cb5168790c0c112626175412dc5ad127083441a8248ae49ddf6725519e83" +dependencies = [ + "accesskit", + "accesskit_consumer", + "async-channel", + "atspi", + "futures-lite", + "serde", + "zbus", +] + +[[package]] +name = "accesskit_windows" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eac0a7f2d7cd7a93b938af401d3d8e8b7094217989a7c25c55a953023436e31" +dependencies = [ + "accesskit", + "accesskit_consumer", + "arrayvec", + "once_cell", + "paste", + "windows", +] + +[[package]] +name = "accesskit_winit" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "825d23acee1bd6d25cbaa3ca6ed6e73faf24122a774ec33d52c5c86c6ab423c0" +dependencies = [ + "accesskit", + "accesskit_macos", + "accesskit_unix", + "accesskit_windows", + "winit", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if", + "once_cell", + "serde", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "android-activity" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64529721f27c2314ced0890ce45e469574a73e5e6fdd6e9da1860eb29285f5e0" +dependencies = [ + "android-properties", + "bitflags 1.3.2", + "cc", + "jni-sys", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "num_enum 0.6.1", +] + +[[package]] +name = "android-properties" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" + [[package]] name = "anstream" version = "0.3.1" @@ -38,7 +178,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" dependencies = [ - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -48,7 +188,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" dependencies = [ "anstyle", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -59,18 +199,243 @@ dependencies = [ "serde", ] +[[package]] +name = "arboard" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac57f2b058a76363e357c056e4f74f1945bf734d37b8b3ef49066c4787dde0fc" +dependencies = [ + "clipboard-win", + "log", + "objc", + "objc-foundation", + "objc_id", + "parking_lot", + "thiserror", + "winapi", + "x11rb", +] + [[package]] name = "array-init" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d62b7694a562cdf5a74227903507c56ab2cc8bdd1f781ed5cb4cf9c9f810bfc" +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "async-broadcast" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" +dependencies = [ + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-executor" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c1da3ae8dabd9c00f453a329dfe1fb28da3c0a72e2478cdcd93171740c20499" +dependencies = [ + "async-lock", + "async-task", + "concurrent-queue", + "fastrand 2.0.1", + "futures-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock", + "autocfg", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite", + "log", + "parking", + "polling", + "rustix 0.37.14", + "slab", + "socket2", + "waker-fn", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-process" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +dependencies = [ + "async-io", + "async-lock", + "async-signal", + "blocking", + "cfg-if", + "event-listener 3.0.0", + "futures-lite", + "rustix 0.38.18", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-recursion" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 2.0.32", +] + +[[package]] +name = "async-signal" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2a5415b7abcdc9cd7d63d6badba5288b2ca017e3fbd4173b8f405449f1a2399" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.18", + "signal-hook-registry", + "slab", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-task" +version = "4.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9441c6b2fe128a7c2bf680a44c34d0df31ce09e5b7e401fcca3faa483dbc921" + +[[package]] +name = "async-trait" +version = "0.1.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 2.0.32", +] + +[[package]] +name = "atk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "251e0b7d90e33e0ba930891a505a9a35ece37b2dd37a14f3ffc306c13b980009" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "atspi" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "674e7a3376837b2e7d12d34d58ac47073c491dc3bf6f71a7adaf687d4d817faa" +dependencies = [ + "async-recursion", + "async-trait", + "atspi-macros", + "enumflags2", + "futures-lite", + "serde", + "tracing", + "zbus", + "zbus_names", +] + +[[package]] +name = "atspi-macros" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb4870a32c0eaa17e35bca0e6b16020635157121fb7d45593d242c295bc768" +dependencies = [ + "quote 1.0.31", + "syn 1.0.109", +] + [[package]] name = "autocfg" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" + [[package]] name = "bff" version = "0.1.0" @@ -107,7 +472,7 @@ version = "0.1.0" dependencies = [ "proc-macro2 1.0.66", "quote 1.0.31", - "syn 2.0.27", + "syn 2.0.32", ] [[package]] @@ -115,6 +480,12 @@ name = "bff-gui" version = "0.1.0" dependencies = [ "bff", + "eframe", + "egui_extras", + "image", + "rfd", + "serde", + "serde_json", ] [[package]] @@ -135,7 +506,7 @@ dependencies = [ "proc-macro-error", "proc-macro2 1.0.66", "quote 1.0.31", - "syn 2.0.27", + "syn 2.0.32", ] [[package]] @@ -162,6 +533,12 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + [[package]] name = "bitflags" version = "1.3.2" @@ -169,555 +546,3108 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] -name = "bytemuck" -version = "1.13.1" +name = "bitflags" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" [[package]] -name = "cc" -version = "1.0.79" +name = "block" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] -name = "cfg-if" -version = "1.0.0" +name = "block-buffer" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] [[package]] -name = "clap" -version = "4.2.4" +name = "block-sys" +version = "0.1.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ac1f6381d8d82ab4684768f89c0ea3afe66925ceadb4eeb3fc452ffc55d62" +checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" dependencies = [ - "clap_builder", - "clap_derive", - "once_cell", + "objc-sys", ] [[package]] -name = "clap_builder" -version = "4.2.4" +name = "block2" +version = "0.2.0-alpha.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84080e799e54cff944f4b4a4b0e71630b0e0443b25b985175c7dddc1a859b749" +checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" dependencies = [ - "anstream", - "anstyle", - "bitflags", - "clap_lex", - "strsim", + "block-sys", + "objc2-encode", ] [[package]] -name = "clap_derive" -version = "4.2.0" +name = "blocking" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" +checksum = "8c36a4d0d48574b3dd360b4b7d95cc651d2b6557b6402848a27d4b228a473e2a" dependencies = [ - "heck", - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 2.0.27", + "async-channel", + "async-lock", + "async-task", + "fastrand 2.0.1", + "futures-io", + "futures-lite", + "piper", + "tracing", ] [[package]] -name = "clap_lex" -version = "0.4.1" +name = "bumpalo" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] -name = "colorchoice" -version = "1.0.0" +name = "bytemuck" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +dependencies = [ + "bytemuck_derive", +] [[package]] -name = "convert_case" -version = "0.4.0" +name = "bytemuck_derive" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 2.0.32", +] [[package]] -name = "crossbeam-deque" -version = "0.8.3" +name = "byteorder" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" -dependencies = [ - "cfg-if", - "crossbeam-epoch", - "crossbeam-utils", -] +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] -name = "crossbeam-epoch" -version = "0.9.15" +name = "bytes" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" -dependencies = [ - "autocfg", - "cfg-if", - "crossbeam-utils", - "memoffset", - "scopeguard", -] +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" [[package]] -name = "crossbeam-utils" -version = "0.8.16" +name = "cairo-sys-rs" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" dependencies = [ - "cfg-if", + "libc", + "system-deps", ] [[package]] -name = "derive_more" -version = "0.99.17" +name = "calloop" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "52e0d00eb1ea24371a97d2da6201c6747a633dc6dc1988ef503403b4c59504a8" +dependencies = [ + "bitflags 1.3.2", + "log", + "nix 0.25.1", + "slotmap", + "thiserror", + "vec_map", +] + +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +dependencies = [ + "jobserver", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfg-expr" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03915af431787e6ffdcc74c645077518c6b6e01f80b761e0fbbfa288536311b3" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "cgl" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" +dependencies = [ + "libc", +] + +[[package]] +name = "clap" +version = "4.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ac1f6381d8d82ab4684768f89c0ea3afe66925ceadb4eeb3fc452ffc55d62" +dependencies = [ + "clap_builder", + "clap_derive", + "once_cell", +] + +[[package]] +name = "clap_builder" +version = "4.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84080e799e54cff944f4b4a4b0e71630b0e0443b25b985175c7dddc1a859b749" +dependencies = [ + "anstream", + "anstyle", + "bitflags 1.3.2", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" +dependencies = [ + "heck", + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 2.0.32", +] + +[[package]] +name = "clap_lex" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" + +[[package]] +name = "clipboard-win" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362" +dependencies = [ + "error-code", + "str-buf", + "winapi", +] + +[[package]] +name = "cocoa" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation", + "core-graphics-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 = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "combine" +version = "4.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "core-graphics" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset 0.9.0", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "data-url" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d7439c3735f405729d52c3fbbe4de140eaf938a1fe47d227c27f8254d4302a5" + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "convert_case", "proc-macro2 1.0.66", "quote 1.0.31", - "rustc_version", - "syn 1.0.109", + "rustc_version", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading 0.8.1", +] + +[[package]] +name = "document-features" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e493c573fce17f00dcab13b6ac057994f3ce17d1af4dc39bfd482b83c6eb6157" +dependencies = [ + "litrs", +] + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "ecolor" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdf4e52dbbb615cfd30cf5a5265335c217b5fd8d669593cea74a517d9c605af" +dependencies = [ + "bytemuck", + "serde", +] + +[[package]] +name = "eframe" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d9efede6c8905d3fc51a5ec9a506d4da4011bbcae0253d0304580fe40af3f5" +dependencies = [ + "bytemuck", + "cocoa", + "egui", + "egui-winit", + "egui_glow", + "glow", + "glutin", + "glutin-winit", + "image", + "js-sys", + "log", + "objc", + "parking_lot", + "percent-encoding", + "raw-window-handle", + "static_assertions", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winapi", + "winit", +] + +[[package]] +name = "egui" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bd69fed5fcf4fbb8225b24e80ea6193b61e17a625db105ef0c4d71dde6eb8b7" +dependencies = [ + "accesskit", + "ahash", + "epaint", + "log", + "nohash-hasher", + "serde", +] + +[[package]] +name = "egui-winit" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c15479a96d9fadccf5dac690bdc6373b97b8e1c0dd28367058f25a5298da0195" +dependencies = [ + "accesskit_winit", + "arboard", + "egui", + "log", + "raw-window-handle", + "smithay-clipboard", + "web-time", + "webbrowser", + "winit", +] + +[[package]] +name = "egui_extras" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ffe3fe5c00295f91c2a61a74ee271c32f74049c94ba0b1cea8f26eb478bc07" +dependencies = [ + "egui", + "ehttp", + "enum-map", + "image", + "log", + "mime_guess", + "resvg", + "serde", + "tiny-skia", + "usvg", +] + +[[package]] +name = "egui_glow" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6726c08798822280038bbad2e32f4fc3cbed800cd51c6e34e99cd2d60cc1bc" +dependencies = [ + "bytemuck", + "egui", + "glow", + "log", + "memoffset 0.6.5", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "ehttp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f88f45662356f96afc7d9e2bc9910ad8352ee01417f7c69b8b16a53c8767a75d" +dependencies = [ + "document-features", + "js-sys", + "ureq", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "either" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" + +[[package]] +name = "emath" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ef2b29de53074e575c18b694167ccbe6e5191f7b25fe65175a0d905a32eeec0" +dependencies = [ + "bytemuck", + "serde", +] + +[[package]] +name = "enum-map" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c188012f8542dee7b3996e44dd89461d64aa471b0a7c71a1ae2f595d259e96e5" +dependencies = [ + "enum-map-derive", + "serde", +] + +[[package]] +name = "enum-map-derive" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04d0b288e3bb1d861c4403c1774a6f7a798781dfc519b3647df2a3dd4ae95f25" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 2.0.32", +] + +[[package]] +name = "enumflags2" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5998b4f30320c9d93aed72f63af821bfdac50465b75428fce77b48ec482c3939" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 2.0.32", +] + +[[package]] +name = "enumn" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2ad8cef1d801a4686bfd8919f0b30eac4c8e48968c437a6405ded4fb5272d2b" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 2.0.32", +] + +[[package]] +name = "epaint" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58067b840d009143934d91d8dcb8ded054d8301d7c11a517ace0a99bb1e1595e" +dependencies = [ + "ab_glyph", + "ahash", + "bytemuck", + "ecolor", + "emath", + "log", + "nohash-hasher", + "parking_lot", + "serde", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "error-code" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" +dependencies = [ + "libc", + "str-buf", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29e56284f00d94c1bc7fd3c77027b4623c88c1f53d8d2394c6199f2921dea325" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "exr" +version = "1.71.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "832a761f35ab3e6664babfbdc6cef35a4860e816ec3916dcfd0882954e98a8a8" +dependencies = [ + "bit_field", + "flume", + "half", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fdeflate" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "flate2" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" + +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "spin 0.9.8", +] + +[[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 = "form_urlencoded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-core" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" + +[[package]] +name = "futures-io" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-sink" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" + +[[package]] +name = "futures-task" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" + +[[package]] +name = "futures-util" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +dependencies = [ + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ff856cb3386dae1703a920f803abafcc580e9b5f711ca62ed1620c25b51ff2" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "getrandom" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gif" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "glow" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca0fe580e4b60a8ab24a868bc08e2f03cbcb20d3d676601fa909386713333728" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glutin" +version = "0.30.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc93b03242719b8ad39fb26ed2b01737144ce7bd4bfc7adadcef806596760fe" +dependencies = [ + "bitflags 1.3.2", + "cfg_aliases", + "cgl", + "core-foundation", + "dispatch", + "glutin_egl_sys", + "glutin_glx_sys", + "glutin_wgl_sys", + "libloading 0.7.4", + "objc2", + "once_cell", + "raw-window-handle", + "wayland-sys 0.30.1", + "windows-sys 0.45.0", + "x11-dl", +] + +[[package]] +name = "glutin-winit" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "629a873fc04062830bfe8f97c03773bcd7b371e23bcc465d0a61448cd1588fa4" +dependencies = [ + "cfg_aliases", + "glutin", + "raw-window-handle", + "winit", +] + +[[package]] +name = "glutin_egl_sys" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af784eb26c5a68ec85391268e074f0aa618c096eadb5d6330b0911cf34fe57c5" +dependencies = [ + "gl_generator", + "windows-sys 0.45.0", +] + +[[package]] +name = "glutin_glx_sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b53cb5fe568964aa066a3ba91eac5ecbac869fb0842cd0dc9e412434f1a1494" +dependencies = [ + "gl_generator", + "x11-dl", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef89398e90033fc6bc65e9bd42fd29bbbfd483bda5b56dc5562f455550618165" +dependencies = [ + "gl_generator", +] + +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771437bf1de2c1c0b496c11505bdf748e26066bbe942dfc8f614c9460f6d7722" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "half" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" +dependencies = [ + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "image" +version = "0.24.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "exr", + "gif", + "jpeg-decoder", + "num-rational", + "num-traits", + "png", + "qoi", + "tiff", +] + +[[package]] +name = "imagesize" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df19da1e92fbfec043ca97d622955381b1f3ee72a180ec999912df31b1ccd951" + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 1.0.109", +] + +[[package]] +name = "indexmap" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +dependencies = [ + "equivalent", + "hashbrown", + "serde", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "is-terminal" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" +dependencies = [ + "hermit-abi", + "io-lifetimes", + "rustix 0.37.14", + "windows-sys 0.48.0", +] + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +dependencies = [ + "libc", +] + +[[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.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + +[[package]] +name = "kurbo" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a53776d271cfb873b17c618af0298445c88afc52837f3e948fa3fafd131f449" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[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.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libloading" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "linux-raw-sys" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36eb31c1778188ae1e64398743890d0877fef36d11521ac60406b42016e8c2cf" + +[[package]] +name = "linux-raw-sys" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f" + +[[package]] +name = "litrs" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9275e0933cf8bb20f008924c0cb07a0692fe54d8064996520bf998de9eb79aa" + +[[package]] +name = "lock_api" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[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.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "ndk" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" +dependencies = [ + "bitflags 1.3.2", + "jni-sys", + "ndk-sys", + "num_enum 0.5.11", + "raw-window-handle", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.4.1+23.1.7779620" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "nix" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.6.5", +] + +[[package]] +name = "nix" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.6.5", +] + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.7.1", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +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_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive 0.5.11", +] + +[[package]] +name = "num_enum" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" +dependencies = [ + "num_enum_derive 0.6.1", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate", + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 1.0.109", +] + +[[package]] +name = "num_enum_derive" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" +dependencies = [ + "proc-macro-crate", + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 2.0.32", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + +[[package]] +name = "objc-sys" +version = "0.2.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" + +[[package]] +name = "objc2" +version = "0.3.0-beta.3.patch-leaks.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468" +dependencies = [ + "block2", + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-encode" +version = "2.0.0-pre.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "orbclient" +version = "0.3.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8378ac0dfbd4e7895f2d2c1f1345cab3836910baf3a300b000d04250f0c8428f" +dependencies = [ + "redox_syscall", +] + +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "owned_ttf_parser" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "706de7e2214113d63a8238d1910463cfce781129a6f263d13fdb09ff64355ba4" +dependencies = [ + "ttf-parser", +] + +[[package]] +name = "owo-colors" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" + +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "parking" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e52c774a4c39359c1d1c52e43f73dd91a75a614652c825408eec30c95a9b2067" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.48.0", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "percent-encoding" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" + +[[package]] +name = "pico-args" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +dependencies = [ + "atomic-waker", + "fastrand 2.0.1", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "png" +version = "0.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2 1.0.66", + "quote 1.0.31", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.31", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "proc-macro2" +version = "1.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "quote" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" +dependencies = [ + "proc-macro2 0.4.30", +] + +[[package]] +name = "quote" +version = "1.0.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0" +dependencies = [ + "proc-macro2 1.0.66", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + +[[package]] +name = "rayon" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "rctree" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b42e27ef78c35d3998403c1d26f3efd9e135d3e5121b0a4845cc5cc27547f4f" + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "regex" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d119d7c7ca818f8a53c300863d4f87566aac09943aef5b355bb83969dae75d87" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "465c6fc0621e4abc4187a2bda0937bfd4f722c2730b29562e19689ea796c9a4b" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56d84fdd47036b038fc80dd333d10b6aab10d5d31f4a366e20014def75328d33" + +[[package]] +name = "resvg" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c115863f2d3621999cf187e318bc92b16402dfeff6a48c74df700d77381394c1" +dependencies = [ + "log", + "pico-args", + "rgb", + "svgtypes", + "tiny-skia", + "usvg", +] + +[[package]] +name = "rfd" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241a0deb168c88050d872294f7b3106c1dfa8740942bcc97bc91b98e97b5c501" +dependencies = [ + "block", + "dispatch", + "glib-sys", + "gobject-sys", + "gtk-sys", + "js-sys", + "log", + "objc", + "objc-foundation", + "objc_id", + "raw-window-handle", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "rgb" +version = "0.8.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted", + "web-sys", + "winapi", +] + +[[package]] +name = "roxmltree" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b9de9831a129b122e7e61f242db509fa9d0838008bf0b29bb0624669edfe48a" +dependencies = [ + "xmlparser", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.37.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b864d3c18a5785a05953adeed93e2dca37ed30f18e69bba9f30079d51f363f" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.4", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a74ee2d7c2581cd139b42447d7d9389b889bdaad3a73f1ebb16f2a3237bb19c" +dependencies = [ + "bitflags 2.4.0", + "errno", + "libc", + "linux-raw-sys 0.4.10", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustls" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "ryu" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" + +[[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 = "scanf" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1af23b806e681b4f838a9887655219b755a418f60353968a88b0b87a35b3e8ce" +dependencies = [ + "nom", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sct" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sctk-adwaita" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda4e97be1fd174ccc2aae81c8b694e803fa99b34e8fd0f057a9d70698e3ed09" +dependencies = [ + "ab_glyph", + "log", + "memmap2", + "smithay-client-toolkit", + "tiny-skia", +] + +[[package]] +name = "semver" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" + +[[package]] +name = "serde" +version = "1.0.188" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-big-array" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.188" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 2.0.32", +] + +[[package]] +name = "serde_json" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 2.0.32", +] + +[[package]] +name = "serde_spanned" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +dependencies = [ + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simplecss" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a11be7c62927d9427e9f40f3444d5499d868648e2edbc4e2116de69e7ec0e89d" +dependencies = [ + "log", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slotmap" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +dependencies = [ + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" + +[[package]] +name = "smithay-client-toolkit" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "870427e30b8f2cbe64bf43ec4b86e88fe39b0a84b3f15efd9c9c2d020bc86eb9" +dependencies = [ + "bitflags 1.3.2", + "calloop", + "dlib", + "lazy_static", + "log", + "memmap2", + "nix 0.24.3", + "pkg-config", + "wayland-client", + "wayland-cursor", + "wayland-protocols", +] + +[[package]] +name = "smithay-clipboard" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a345c870a1fae0b1b779085e81b51e614767c239e93503588e54c5b17f4b0e8" +dependencies = [ + "smithay-client-toolkit", + "wayland-client", +] + +[[package]] +name = "socket2" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "str-buf" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" + +[[package]] +name = "strict-num" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" +dependencies = [ + "float-cmp", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "svgtypes" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22975e8a2bac6a76bb54f898a6b18764633b00e780330f0b689f65afb3975564" +dependencies = [ + "siphasher", +] + +[[package]] +name = "syn" +version = "0.15.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" +dependencies = [ + "proc-macro2 0.4.30", + "quote 0.6.13", + "unicode-xid", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.31", + "unicode-ident", ] [[package]] -name = "either" -version = "1.8.1" +name = "syn" +version = "2.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "239814284fd6f1a4ffe4ca893952cdd93c224b6a1571c9a9eadd670295c0c9e2" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.31", + "unicode-ident", +] [[package]] -name = "equivalent" -version = "1.0.1" +name = "system-deps" +version = "6.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "94af52f9402f94aac4948a2518b43359be8d9ce6cd9efc1c4de3b2f7b7e897d6" +dependencies = [ + "cfg-expr", + "heck", + "pkg-config", + "toml", + "version-compare", +] [[package]] -name = "errno" +name = "target-lexicon" +version = "0.12.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a" + +[[package]] +name = "tempfile" +version = "3.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" +dependencies = [ + "cfg-if", + "fastrand 2.0.1", + "redox_syscall", + "rustix 0.38.18", + "windows-sys 0.48.0", +] + +[[package]] +name = "test-generator" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "5b23be2add79223226e1cb6446cb3e37506a5927089870687a0f1149bb7a073a" dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys", + "glob", + "proc-macro2 0.4.30", + "quote 0.6.13", + "syn 0.15.44", ] [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "thiserror" +version = "1.0.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4" dependencies = [ - "cc", - "libc", + "thiserror-impl", ] [[package]] -name = "glob" -version = "0.3.1" +name = "thiserror-impl" +version = "1.0.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 2.0.32", +] [[package]] -name = "hashbrown" -version = "0.14.0" +name = "tiff" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] [[package]] -name = "heck" -version = "0.4.1" +name = "tiny-skia" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "df8493a203431061e901613751931f047d1971337153f96d0e5e363d6dbf6a67" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "png", + "tiny-skia-path", +] [[package]] -name = "hermit-abi" -version = "0.3.1" +name = "tiny-skia-path" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +checksum = "adbfb5d3f3dd57a0e11d12f4f13d4ebbbc1b5c15b7ab0a156d030b21da5f677c" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] [[package]] -name = "impl-trait-for-tuples" -version = "0.2.2" +name = "tinyvec" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2 1.0.66", "quote 1.0.31", - "syn 1.0.109", + "syn 2.0.32", ] [[package]] -name = "indexmap" -version = "2.0.0" +name = "tracing-core" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" dependencies = [ - "equivalent", - "hashbrown", - "serde", + "once_cell", ] [[package]] -name = "io-lifetimes" -version = "1.0.10" +name = "ttf-parser" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" +checksum = "49d64318d8311fc2668e48b63969f4343e0a85c4a109aa8460d6672e364b8bd1" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "uds_windows" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d" dependencies = [ - "hermit-abi", - "libc", - "windows-sys", + "tempfile", + "winapi", ] [[package]] -name = "is-terminal" -version = "0.4.7" +name = "unicase" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" dependencies = [ - "hermit-abi", - "io-lifetimes", - "rustix", - "windows-sys", + "version_check", ] [[package]] -name = "itertools" -version = "0.11.0" +name = "unicode-bidi" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" + +[[package]] +name = "unicode-ident" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ - "either", + "tinyvec", ] [[package]] -name = "itoa" -version = "1.0.6" +name = "unicode-xid" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" [[package]] -name = "libc" -version = "0.2.142" +name = "untrusted" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] -name = "linux-raw-sys" -version = "0.3.4" +name = "ureq" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36eb31c1778188ae1e64398743890d0877fef36d11521ac60406b42016e8c2cf" +checksum = "f5ccd538d4a604753ebc2f17cd9946e89b77bf87f6a8e2309667c6f2e87855e3" +dependencies = [ + "base64 0.21.4", + "flate2", + "log", + "once_cell", + "rustls", + "rustls-webpki", + "url", + "webpki-roots", +] [[package]] -name = "memchr" -version = "2.6.4" +name = "url" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] [[package]] -name = "memoffset" -version = "0.9.0" +name = "usvg" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +checksum = "8b5b7c2b30845b3348c067ca3d09e20cc6e327c288f0ca4c48698712abf432e9" dependencies = [ - "autocfg", + "base64 0.13.1", + "data-url", + "flate2", + "imagesize", + "kurbo", + "log", + "rctree", + "roxmltree", + "simplecss", + "siphasher", + "strict-num", + "svgtypes", ] [[package]] -name = "minimal-lexical" +name = "utf8parse" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] -name = "nom" -version = "7.1.3" +name = "vec_map" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version-compare" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "waker-fn" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" + +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ - "memchr", - "minimal-lexical", + "same-file", + "winapi-util", ] [[package]] -name = "num-traits" -version = "0.2.15" +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" dependencies = [ - "autocfg", + "cfg-if", + "wasm-bindgen-macro", ] [[package]] -name = "once_cell" -version = "1.18.0" +name = "wasm-bindgen-backend" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 2.0.32", + "wasm-bindgen-shared", +] [[package]] -name = "owo-colors" -version = "3.5.0" +name = "wasm-bindgen-futures" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" +checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] [[package]] -name = "proc-macro-error" -version = "1.0.4" +name = "wasm-bindgen-macro" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" dependencies = [ - "proc-macro-error-attr", - "proc-macro2 1.0.66", "quote 1.0.31", - "version_check", + "wasm-bindgen-macro-support", ] [[package]] -name = "proc-macro-error-attr" -version = "1.0.4" +name = "wasm-bindgen-macro-support" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2 1.0.66", "quote 1.0.31", - "version_check", + "syn 2.0.32", + "wasm-bindgen-backend", + "wasm-bindgen-shared", ] [[package]] -name = "proc-macro2" -version = "0.4.30" +name = "wasm-bindgen-shared" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" + +[[package]] +name = "wayland-client" +version = "0.29.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715" dependencies = [ - "unicode-xid", + "bitflags 1.3.2", + "downcast-rs", + "libc", + "nix 0.24.3", + "scoped-tls", + "wayland-commons", + "wayland-scanner", + "wayland-sys 0.29.5", ] [[package]] -name = "proc-macro2" -version = "1.0.66" +name = "wayland-commons" +version = "0.29.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902" dependencies = [ - "unicode-ident", + "nix 0.24.3", + "once_cell", + "smallvec", + "wayland-sys 0.29.5", ] [[package]] -name = "quote" -version = "0.6.13" +name = "wayland-cursor" +version = "0.29.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" +checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661" dependencies = [ - "proc-macro2 0.4.30", + "nix 0.24.3", + "wayland-client", + "xcursor", ] [[package]] -name = "quote" -version = "1.0.31" +name = "wayland-protocols" +version = "0.29.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0" +checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6" dependencies = [ - "proc-macro2 1.0.66", + "bitflags 1.3.2", + "wayland-client", + "wayland-commons", + "wayland-scanner", ] [[package]] -name = "rayon" -version = "1.8.0" +name = "wayland-scanner" +version = "0.29.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53" dependencies = [ - "either", - "rayon-core", + "proc-macro2 1.0.66", + "quote 1.0.31", + "xml-rs", ] [[package]] -name = "rayon-core" -version = "1.12.0" +name = "wayland-sys" +version = "0.29.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4" dependencies = [ - "crossbeam-deque", - "crossbeam-utils", + "dlib", + "lazy_static", + "pkg-config", ] [[package]] -name = "rustc_version" -version = "0.4.0" +name = "wayland-sys" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "96b2a02ac608e07132978689a6f9bf4214949c85998c247abadd4f4129b1aa06" dependencies = [ - "semver", + "dlib", + "lazy_static", + "log", + "pkg-config", ] [[package]] -name = "rustix" -version = "0.37.14" +name = "web-sys" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b864d3c18a5785a05953adeed93e2dca37ed30f18e69bba9f30079d51f363f" +checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" dependencies = [ - "bitflags", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys", - "windows-sys", + "js-sys", + "wasm-bindgen", ] [[package]] -name = "ryu" -version = "1.0.13" +name = "web-time" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "8208e3fdbc243c8fd30805721869242a7f6de3e2e9f3b057652ab36e52ae1e87" +dependencies = [ + "js-sys", + "wasm-bindgen", +] [[package]] -name = "scanf" -version = "1.2.1" +name = "webbrowser" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1af23b806e681b4f838a9887655219b755a418f60353968a88b0b87a35b3e8ce" +checksum = "82b2391658b02c27719fc5a0a73d6e696285138e8b12fba9d4baa70451023c71" dependencies = [ - "nom", + "core-foundation", + "home", + "jni", + "log", + "ndk-context", + "objc", + "raw-window-handle", + "url", + "web-sys", ] [[package]] -name = "scopeguard" -version = "1.2.0" +name = "webpki-roots" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" [[package]] -name = "semver" -version = "1.0.17" +name = "weezl" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" [[package]] -name = "serde" -version = "1.0.179" +name = "winapi" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a5bf42b8d227d4abf38a1ddb08602e229108a517cd4e5bb28f9c7eaafdce5c0" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ - "serde_derive", + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", ] [[package]] -name = "serde-big-array" -version = "0.5.1" +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f" -dependencies = [ - "serde", -] +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] -name = "serde_derive" -version = "1.0.179" +name = "winapi-util" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "741e124f5485c7e60c03b043f79f320bff3527f4bbf12cf3831750dc46a0ec2c" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 2.0.27", + "winapi", ] [[package]] -name = "serde_json" -version = "1.0.107" +name = "winapi-wsapoll" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" +checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" dependencies = [ - "itoa", - "ryu", - "serde", + "winapi", ] [[package]] -name = "strsim" -version = "0.10.0" +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "syn" -version = "0.15.44" +name = "windows" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", - "unicode-xid", + "windows-implement", + "windows-interface", + "windows-targets 0.48.0", ] [[package]] -name = "syn" -version = "1.0.109" +name = "windows-implement" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +checksum = "5e2ee588991b9e7e6c8338edf3333fbe4da35dc72092643958ebb43f0ab2c49c" dependencies = [ "proc-macro2 1.0.66", "quote 1.0.31", - "unicode-ident", + "syn 1.0.109", ] [[package]] -name = "syn" -version = "2.0.27" +name = "windows-interface" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0" +checksum = "e6fb8df20c9bcaa8ad6ab513f7b40104840c8867d5751126e4df3b08388d0cc7" dependencies = [ "proc-macro2 1.0.66", "quote 1.0.31", - "unicode-ident", + "syn 1.0.109", ] [[package]] -name = "test-generator" -version = "0.3.1" +name = "windows-sys" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b23be2add79223226e1cb6446cb3e37506a5927089870687a0f1149bb7a073a" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "glob", - "proc-macro2 0.4.30", - "quote 0.6.13", - "syn 0.15.44", + "windows-targets 0.42.2", ] -[[package]] -name = "unicode-ident" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" - -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" - -[[package]] -name = "utf8parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - [[package]] name = "windows-sys" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -726,53 +3656,316 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_aarch64_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + [[package]] name = "windows_i686_gnu" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + [[package]] name = "windows_i686_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + [[package]] name = "windows_x86_64_gnu" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "windows_x86_64_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" + +[[package]] +name = "winit" +version = "0.28.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9596d90b45384f5281384ab204224876e8e8bf7d58366d9b795ad99aa9894b94" +dependencies = [ + "android-activity", + "bitflags 1.3.2", + "cfg_aliases", + "core-foundation", + "core-graphics", + "dispatch", + "instant", + "libc", + "log", + "mio", + "ndk", + "objc2", + "once_cell", + "orbclient", + "percent-encoding", + "raw-window-handle", + "redox_syscall", + "sctk-adwaita", + "smithay-client-toolkit", + "wasm-bindgen", + "wayland-client", + "wayland-commons", + "wayland-protocols", + "wayland-scanner", + "web-sys", + "windows-sys 0.45.0", + "x11-dl", +] + +[[package]] +name = "winnow" +version = "0.5.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711d82167854aff2018dfd193aa0fef5370f456732f0d5a0c59b0f1b4b907" +dependencies = [ + "memchr", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "x11rb" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507" +dependencies = [ + "gethostname", + "nix 0.24.3", + "winapi", + "winapi-wsapoll", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67" +dependencies = [ + "nix 0.24.3", +] + +[[package]] +name = "xcursor" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" +dependencies = [ + "nom", +] + +[[package]] +name = "xdg-home" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd" +dependencies = [ + "nix 0.26.4", + "winapi", +] + +[[package]] +name = "xml-rs" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a" + +[[package]] +name = "xmlparser" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" + +[[package]] +name = "zbus" +version = "3.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31de390a2d872e4cd04edd71b425e29853f786dc99317ed72d73d6fcf5ebb948" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "byteorder", + "derivative", + "enumflags2", + "event-listener 2.5.3", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "nix 0.26.4", + "once_cell", + "ordered-stream", + "rand", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tracing", + "uds_windows", + "winapi", + "xdg-home", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "3.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d1794a946878c0e807f55a397187c11fc7a038ba5d868e7db4f3bd7760bc9d" +dependencies = [ + "proc-macro-crate", + "proc-macro2 1.0.66", + "quote 1.0.31", + "regex", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb80bb776dbda6e23d705cf0123c3b95df99c4ebeaec6c2599d4a5419902b4a9" +dependencies = [ + "serde", + "static_assertions", + "zvariant", +] + +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "zvariant" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44b291bee0d960c53170780af148dca5fa260a63cdd24f1962fa82e03e53338c" +dependencies = [ + "byteorder", + "enumflags2", + "libc", + "serde", + "static_assertions", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "934d7a7dfc310d6ee06c87ffe88ef4eca7d3e37bb251dece2ef93da8f17d8ecd" +dependencies = [ + "proc-macro-crate", + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 1.0.109", +] diff --git a/bff-gui/Cargo.toml b/bff-gui/Cargo.toml index d29cbf3..7fdd769 100644 --- a/bff-gui/Cargo.toml +++ b/bff-gui/Cargo.toml @@ -6,3 +6,9 @@ edition = "2021" [dependencies] bff = { path = "../bff" } +eframe = "0.23.0" +egui_extras = { version = "0.23.0", features = ["all_loaders"] } +image = { version = "0.24.7", features = ["dds", "png"] } +rfd = "0.12.0" +serde = "1.0.188" +serde_json = "1.0.107" diff --git a/bff-gui/src/bitmap.rs b/bff-gui/src/bitmap.rs new file mode 100644 index 0000000..6d20887 --- /dev/null +++ b/bff-gui/src/bitmap.rs @@ -0,0 +1,33 @@ +use std::io::{BufReader, Cursor}; + +use base64::engine::general_purpose; +use base64::Engine as _; +use bff::class::bitmap::Bitmap; +use bff::names::Name; + +use crate::error::BffGuiResult; +use crate::traits::Export; +use crate::{DataType, PreviewData}; + +impl Export for Bitmap { + fn export(&self) { + match *self { + Bitmap::BitmapV1_291_03_06PC(ref bitmap) => { + let buf = BufReader::new(Cursor::new(&bitmap.body.data)); + let dds = ddsfile::Dds::read(buf)?; + let image = image_dds::image_from_dds(&dds, 0)?; + // image.save(export_path)?; + let mut bytes: Vec = Vec::new(); + image.write_to(&mut Cursor::new(&mut bytes), image::ImageOutputFormat::Png)?; + Ok(PreviewData { + is_base64: true, + data: general_purpose::STANDARD_NO_PAD.encode(bytes), + data_type: DataType::Image, + }) + } + _ => { + todo!() + } + } + } +} diff --git a/bff-gui/src/main.rs b/bff-gui/src/main.rs index f328e4d..f99b006 100644 --- a/bff-gui/src/main.rs +++ b/bff-gui/src/main.rs @@ -1 +1,261 @@ -fn main() {} +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release + +use std::{collections::HashMap, fs::File, path::PathBuf}; + +use bff::{ + bigfile::{resource::Resource, BigFile}, + class::{Class, Class::Bitmap}, + names::Name, + platforms::Platform, + traits::TryIntoVersionPlatform, + // versions::Version, + BufReader, +}; +use eframe::egui; + +fn main() -> Result<(), eframe::Error> { + // env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`). + let options = eframe::NativeOptions { + drag_and_drop_support: true, + initial_window_size: Some(egui::vec2(640.0, 480.0)), + ..Default::default() + }; + eframe::run_native("BFF GUI", options, Box::new(|_cc| Box::::default())) +} + +fn selectable_text(ui: &mut egui::Ui, mut text: &str) -> egui::Response { + ui.add(egui::TextEdit::multiline(&mut text)) +} + +#[derive(Default)] +struct Gui { + bigfile: Option, + resource_name: Option, + nicknames: HashMap, + nickname_window_open: bool, + nickname_editing: (Name, String), +} + +impl eframe::App for Gui { + fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { + ctx.set_pixels_per_point(1.25); + egui_extras::install_image_loaders(ctx); + egui::CentralPanel::default() + .frame(egui::Frame::none().inner_margin(egui::Margin::same(0.0))) + .show(ctx, |ui| { + egui::TopBottomPanel::top("top").show_inside(ui, |ui| { + ui.menu_button("File", |ui| { + if ui.button("Open BigFile...").clicked() { + ui.close_menu(); + if let Some(path) = rfd::FileDialog::new().pick_file() { + self.bigfile = Some(load_bigfile(&path)); + } + } + }); + }); + + egui::SidePanel::left("left") + .resizable(true) + .width_range(70.0..=ui.available_width() / 2.0) + .show_inside(ui, |ui| { + // ui.set_width_range(150.0..=200.0); + if let Some(bigfile) = &self.bigfile { + let resources: Vec<&Resource> = bigfile.objects.values().collect(); + let row_height = ui.spacing().interact_size.y; + egui::ScrollArea::vertical().show_rows( + ui, + row_height, + resources.len(), + |ui, row_range| { + ui.set_min_width(ui.available_width()); + for row in row_range { + let resource = resources.get(row).unwrap(); + if ui + .add( + egui::Button::new(format!( + "{}.{}", + match self.nicknames.get(&resource.name) { + Some(nn) => nn.to_owned(), + None => resource.name.to_string(), + }, + resource.class_name.to_string() + )) + .wrap(false) + .rounding(0.0) + .min_size(egui::vec2(ui.available_width(), 0.0)), + ) + .context_menu(|ui| { + if ui.button("Change nickname").clicked() { + self.nickname_window_open = true; + self.nickname_editing.0 = resource.name; + ui.close_menu(); + } + }) + .clicked() + { + self.resource_name = Some(resource.name); + } + } + }, + ); + } + }); + egui::SidePanel::right("right") + .resizable(true) + .width_range(100.0..=ui.available_width() / 2.0) + .show_inside(ui, |ui| { + if let Some(resource_name) = &self.resource_name { + egui::ScrollArea::vertical() + .id_source("code_scroll") + .show(ui, |ui| { + ui.set_min_width(ui.available_width()); + selectable_text( + ui, + &serde_json::to_string_pretty::( + &self + .bigfile + .as_ref() + .unwrap() + .objects + .get(resource_name) + .unwrap() + .try_into_version_platform( + self.bigfile + .as_ref() + .unwrap() + .manifest + .version + .clone(), + self.bigfile + .as_ref() + .unwrap() + .manifest + .platform + .clone(), + ) + .unwrap(), + ) + .unwrap(), + ) + }); + } + }); + egui::CentralPanel::default().show_inside(ui, |ui| { + if let Some(resource_name) = &self.resource_name { + let class: &Class = &self + .bigfile + .as_ref() + .unwrap() + .objects + .get(resource_name) + .unwrap() + .try_into_version_platform( + self.bigfile.as_ref().unwrap().manifest.version.clone(), + self.bigfile.as_ref().unwrap().manifest.platform.clone(), + ) + .unwrap(); + match class { + Bitmap(box_bitmap) => match **box_bitmap { + bff::class::bitmap::Bitmap::BitmapV1_291_03_06PC(ref bitmap) => { + ui.add( + egui::Image::new(<(String, std::vec::Vec) as Into< + egui::ImageSource, + >>::into( + ( + format!("bytes://{}.dds", resource_name), + bitmap.body.data.clone(), + ) + )) + .texture_options(egui::TextureOptions::NEAREST) + .shrink_to_fit(), + ); + } + _ => (), + }, + _ => (), + } + } + }); + if self.nickname_window_open { + egui::Window::new("Change resource nickname") + .fixed_size(egui::vec2(100.0, 50.0)) + .show(ctx, |ui| { + let output = egui::TextEdit::singleline(&mut self.nickname_editing.1) + .hint_text("Enter nickname...") + .min_size(egui::vec2(100.0, 0.0)) + .show(ui); + if output.response.lost_focus() + && ui.input(|i| i.key_pressed(egui::Key::Enter)) + { + let filtered_nickname = self.nickname_editing.1.trim(); + self.nickname_window_open = false; + if filtered_nickname.len() != 0 { + self.nicknames.insert( + self.nickname_editing.0, + filtered_nickname.to_owned(), + ); + } else { + self.nicknames.remove(&self.nickname_editing.0); + } + } + }); + } + }); + + preview_files_being_dropped(ctx); + + // Collect dropped files: + ctx.input(|i| { + if !i.raw.dropped_files.is_empty() { + self.bigfile = Some(load_bigfile( + i.raw.dropped_files.get(0).unwrap().path.as_ref().unwrap(), + )) + } + }); + } +} + +fn load_bigfile(path: &PathBuf) -> BigFile { + let platform = match path.extension() { + Some(extension) => extension.try_into().unwrap_or(Platform::PC), + None => Platform::PC, + }; + let f = File::open(path).unwrap(); + let mut reader = BufReader::new(f); + BigFile::read_platform(&mut reader, platform).unwrap() +} + +/// Preview hovering files: +fn preview_files_being_dropped(ctx: &egui::Context) { + use egui::*; + use std::fmt::Write as _; + + if !ctx.input(|i| i.raw.hovered_files.is_empty()) { + let text = ctx.input(|i| { + let mut text = "Dropping files:\n".to_owned(); + for file in &i.raw.hovered_files { + if let Some(path) = &file.path { + write!(text, "\n{}", path.display()).ok(); + } else if !file.mime.is_empty() { + write!(text, "\n{}", file.mime).ok(); + } else { + text += "\n???"; + } + } + text + }); + + let painter = + ctx.layer_painter(LayerId::new(Order::Foreground, Id::new("file_drop_target"))); + + let screen_rect = ctx.screen_rect(); + painter.rect_filled(screen_rect, 0.0, Color32::from_black_alpha(192)); + painter.text( + screen_rect.center(), + Align2::CENTER_CENTER, + text, + TextStyle::Heading.resolve(&ctx.style()), + Color32::WHITE, + ); + } +} diff --git a/bff-gui/src/traits.rs b/bff-gui/src/traits.rs new file mode 100644 index 0000000..1531962 --- /dev/null +++ b/bff-gui/src/traits.rs @@ -0,0 +1 @@ +use bff::names::Name; diff --git a/bff/src/class/bitmap/v1_291_03_06_pc.rs b/bff/src/class/bitmap/v1_291_03_06_pc.rs index 2682ea9..234f62b 100644 --- a/bff/src/class/bitmap/v1_291_03_06_pc.rs +++ b/bff/src/class/bitmap/v1_291_03_06_pc.rs @@ -17,7 +17,7 @@ pub struct BitmapBodyV1_291_03_06PC { unknown: u8, #[br(count = precalculated_size)] #[serde(skip_serializing)] - _data: Vec, + pub data: Vec, } pub type BitmapV1_291_03_06PC = TrivialClass<(), BitmapBodyV1_291_03_06PC>; From 4ac4073300e352d0a936a5d25bbf67c86d604022 Mon Sep 17 00:00:00 2001 From: pizzart <7o7goo7o7@gmail.com> Date: Fri, 13 Oct 2023 01:00:32 +0300 Subject: [PATCH 02/16] add sound --- Cargo.lock | 335 +++++++++++++++++++++++- bff-gui/Cargo.toml | 2 + bff-gui/src/bitmap.rs | 33 --- bff-gui/src/main.rs | 163 ++++++++---- bff-gui/src/traits.rs | 1 - bff/src/class/bitmap/v1_381_67_09_pc.rs | 2 +- bff/src/class/sound/v1_291_03_06_pc.rs | 10 +- bff/src/class/sound/v1_381_67_09_pc.rs | 12 +- bff/src/traits.rs | 18 +- 9 files changed, 473 insertions(+), 103 deletions(-) delete mode 100644 bff-gui/src/bitmap.rs delete mode 100644 bff-gui/src/traits.rs diff --git a/Cargo.lock b/Cargo.lock index 223ddc4..8e79e26 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -75,7 +75,7 @@ dependencies = [ "arrayvec", "once_cell", "paste", - "windows", + "windows 0.48.0", ] [[package]] @@ -118,6 +118,28 @@ dependencies = [ "memchr", ] +[[package]] +name = "alsa" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2562ad8dcf0f789f65c6fdaad8a8a9708ed6b488e649da28c01656ad66b8b47" +dependencies = [ + "alsa-sys", + "bitflags 1.3.2", + "libc", + "nix 0.24.3", +] + +[[package]] +name = "alsa-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527" +dependencies = [ + "libc", + "pkg-config", +] + [[package]] name = "android-activity" version = "0.4.3" @@ -482,8 +504,10 @@ dependencies = [ "bff", "eframe", "egui_extras", + "hound", "image", "rfd", + "rodio", "serde", "serde_json", ] @@ -509,6 +533,26 @@ dependencies = [ "syn 2.0.32", ] +[[package]] +name = "bindgen" +version = "0.68.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "726e4313eb6ec35d2730258ad4e15b547ee75d6afaa1361a922e78e59b7d8078" +dependencies = [ + "bitflags 2.4.0", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "proc-macro2 1.0.66", + "quote 1.0.31", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.32", +] + [[package]] name = "binrw" version = "0.12.0" @@ -678,6 +722,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[package]] name = "cfg-expr" version = "0.15.5" @@ -709,6 +762,17 @@ dependencies = [ "libc", ] +[[package]] +name = "clang-sys" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +dependencies = [ + "glob", + "libc", + "libloading 0.7.4", +] + [[package]] name = "clap" version = "4.2.4" @@ -751,6 +815,12 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" +[[package]] +name = "claxon" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bfbf56724aa9eca8afa4fcfadeb479e722935bb2a0900c2d37e0cc477af0688" + [[package]] name = "clipboard-win" version = "4.5.0" @@ -835,10 +905,16 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ - "core-foundation-sys", + "core-foundation-sys 0.8.4", "libc", ] +[[package]] +name = "core-foundation-sys" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" + [[package]] name = "core-foundation-sys" version = "0.8.4" @@ -869,6 +945,51 @@ dependencies = [ "libc", ] +[[package]] +name = "coreaudio-rs" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb17e2d1795b1996419648915df94bc7103c28f7b48062d7acf4652fc371b2ff" +dependencies = [ + "bitflags 1.3.2", + "core-foundation-sys 0.6.2", + "coreaudio-sys", +] + +[[package]] +name = "coreaudio-sys" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8478e5bdad14dce236b9898ea002eabfa87cbe14f0aa538dbe3b6a4bec4332d" +dependencies = [ + "bindgen", +] + +[[package]] +name = "cpal" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d959d90e938c5493000514b446987c07aed46c668faaa7d34d6c7a67b1a578c" +dependencies = [ + "alsa", + "core-foundation-sys 0.8.4", + "coreaudio-rs", + "dasp_sample", + "jni 0.19.0", + "js-sys", + "libc", + "mach2", + "ndk", + "ndk-context", + "oboe", + "once_cell", + "parking_lot", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows 0.46.0", +] + [[package]] name = "cpufeatures" version = "0.2.9" @@ -936,6 +1057,12 @@ dependencies = [ "typenum", ] +[[package]] +name = "dasp_sample" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" + [[package]] name = "data-url" version = "0.2.0" @@ -1140,6 +1267,15 @@ dependencies = [ "serde", ] +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + [[package]] name = "enum-map" version = "2.6.3" @@ -1666,6 +1802,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "hound" +version = "3.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62adaabb884c94955b19907d60019f4e145d091c75345379e70d1ee696f7854f" + [[package]] name = "idna" version = "0.4.0" @@ -1773,6 +1915,34 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +[[package]] +name = "jni" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + [[package]] name = "jni" version = "0.21.1" @@ -1843,12 +2013,29 @@ 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 = "lewton" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777b48df9aaab155475a83a7df3070395ea1ac6902f5cd062b8f2b028075c030" +dependencies = [ + "byteorder", + "ogg", + "tinyvec", +] + [[package]] name = "libc" version = "0.2.149" @@ -1909,6 +2096,15 @@ version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +[[package]] +name = "mach2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d0d1830bcd151a6fc4aea1369af235b36c1528fe976b8ff678683c9995eade8" +dependencies = [ + "libc", +] + [[package]] name = "malloc_buf" version = "0.0.6" @@ -2086,6 +2282,17 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 1.0.109", +] + [[package]] name = "num-integer" version = "0.1.45" @@ -2213,6 +2420,38 @@ dependencies = [ "objc", ] +[[package]] +name = "oboe" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8868cc237ee02e2d9618539a23a8d228b9bb3fc2e7a5b11eed3831de77c395d0" +dependencies = [ + "jni 0.20.0", + "ndk", + "ndk-context", + "num-derive", + "num-traits", + "oboe-sys", +] + +[[package]] +name = "oboe-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f44155e7fb718d3cfddcf70690b2b51ac4412f347cd9e4fbe511abe9cd7b5f2" +dependencies = [ + "cc", +] + +[[package]] +name = "ogg" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6951b4e8bf21c8193da321bcce9c9dd2e13c858fe078bf9054a288b419ae5d6e" +dependencies = [ + "byteorder", +] + [[package]] name = "once_cell" version = "1.18.0" @@ -2300,6 +2539,12 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + [[package]] name = "percent-encoding" version = "2.3.0" @@ -2615,6 +2860,19 @@ dependencies = [ "winapi", ] +[[package]] +name = "rodio" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdf1d4dea18dff2e9eb6dca123724f8b60ef44ad74a9ad283cdfe025df7e73fa" +dependencies = [ + "claxon", + "cpal", + "hound", + "lewton", + "symphonia", +] + [[package]] name = "roxmltree" version = "0.15.1" @@ -2624,6 +2882,12 @@ dependencies = [ "xmlparser", ] +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc_version" version = "0.4.0" @@ -2818,6 +3082,12 @@ dependencies = [ "digest", ] +[[package]] +name = "shlex" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" + [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -2962,6 +3232,56 @@ dependencies = [ "siphasher", ] +[[package]] +name = "symphonia" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e48dba70095f265fdb269b99619b95d04c89e619538138383e63310b14d941" +dependencies = [ + "lazy_static", + "symphonia-bundle-mp3", + "symphonia-core", + "symphonia-metadata", +] + +[[package]] +name = "symphonia-bundle-mp3" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f31d7fece546f1e6973011a9eceae948133bbd18fd3d52f6073b1e38ae6368a" +dependencies = [ + "bitflags 1.3.2", + "lazy_static", + "log", + "symphonia-core", + "symphonia-metadata", +] + +[[package]] +name = "symphonia-core" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c73eb88fee79705268cc7b742c7bc93a7b76e092ab751d0833866970754142" +dependencies = [ + "arrayvec", + "bitflags 1.3.2", + "bytemuck", + "lazy_static", + "log", +] + +[[package]] +name = "symphonia-metadata" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89c3e1937e31d0e068bbe829f66b2f2bfaa28d056365279e0ef897172c3320c0" +dependencies = [ + "encoding_rs", + "lazy_static", + "log", + "symphonia-core", +] + [[package]] name = "syn" version = "0.15.44" @@ -3523,7 +3843,7 @@ checksum = "82b2391658b02c27719fc5a0a73d6e696285138e8b12fba9d4baa70451023c71" dependencies = [ "core-foundation", "home", - "jni", + "jni 0.21.1", "log", "ndk-context", "objc", @@ -3584,6 +3904,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25" +dependencies = [ + "windows-targets 0.42.2", +] + [[package]] name = "windows" version = "0.48.0" diff --git a/bff-gui/Cargo.toml b/bff-gui/Cargo.toml index 7fdd769..ec0557a 100644 --- a/bff-gui/Cargo.toml +++ b/bff-gui/Cargo.toml @@ -8,7 +8,9 @@ edition = "2021" bff = { path = "../bff" } eframe = "0.23.0" egui_extras = { version = "0.23.0", features = ["all_loaders"] } +hound = "3.5.1" image = { version = "0.24.7", features = ["dds", "png"] } rfd = "0.12.0" +rodio = "0.17.1" serde = "1.0.188" serde_json = "1.0.107" diff --git a/bff-gui/src/bitmap.rs b/bff-gui/src/bitmap.rs deleted file mode 100644 index 6d20887..0000000 --- a/bff-gui/src/bitmap.rs +++ /dev/null @@ -1,33 +0,0 @@ -use std::io::{BufReader, Cursor}; - -use base64::engine::general_purpose; -use base64::Engine as _; -use bff::class::bitmap::Bitmap; -use bff::names::Name; - -use crate::error::BffGuiResult; -use crate::traits::Export; -use crate::{DataType, PreviewData}; - -impl Export for Bitmap { - fn export(&self) { - match *self { - Bitmap::BitmapV1_291_03_06PC(ref bitmap) => { - let buf = BufReader::new(Cursor::new(&bitmap.body.data)); - let dds = ddsfile::Dds::read(buf)?; - let image = image_dds::image_from_dds(&dds, 0)?; - // image.save(export_path)?; - let mut bytes: Vec = Vec::new(); - image.write_to(&mut Cursor::new(&mut bytes), image::ImageOutputFormat::Png)?; - Ok(PreviewData { - is_base64: true, - data: general_purpose::STANDARD_NO_PAD.encode(bytes), - data_type: DataType::Image, - }) - } - _ => { - todo!() - } - } - } -} diff --git a/bff-gui/src/main.rs b/bff-gui/src/main.rs index f99b006..78519c4 100644 --- a/bff-gui/src/main.rs +++ b/bff-gui/src/main.rs @@ -1,15 +1,16 @@ -#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release +// #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release -use std::{collections::HashMap, fs::File, path::PathBuf}; +use std::collections::HashMap; +use std::fs::File; +use std::io::Cursor; +use std::path::PathBuf; use bff::{ bigfile::{resource::Resource, BigFile}, - class::{Class, Class::Bitmap}, + class::Class, names::Name, platforms::Platform, traits::TryIntoVersionPlatform, - // versions::Version, - BufReader, }; use eframe::egui; @@ -105,44 +106,46 @@ impl eframe::App for Gui { .width_range(100.0..=ui.available_width() / 2.0) .show_inside(ui, |ui| { if let Some(resource_name) = &self.resource_name { + let j = serde_json::to_string_pretty::( + &self + .bigfile + .as_ref() + .unwrap() + .objects + .get(resource_name) + .unwrap() + .try_into_version_platform( + self.bigfile.as_ref().unwrap().manifest.version.clone(), + self.bigfile.as_ref().unwrap().manifest.platform.clone(), + ) + .unwrap(), + ) + .unwrap(); + let json: Vec<&str> = j + .split_inclusive("\n") + // .map(|s| s.to_string()) + .collect(); + let text_style = egui::TextStyle::Body; egui::ScrollArea::vertical() .id_source("code_scroll") - .show(ui, |ui| { - ui.set_min_width(ui.available_width()); - selectable_text( - ui, - &serde_json::to_string_pretty::( - &self - .bigfile - .as_ref() - .unwrap() - .objects - .get(resource_name) - .unwrap() - .try_into_version_platform( - self.bigfile - .as_ref() - .unwrap() - .manifest - .version - .clone(), - self.bigfile - .as_ref() - .unwrap() - .manifest - .platform - .clone(), - ) - .unwrap(), - ) - .unwrap(), - ) - }); + .show_rows( + ui, + ui.text_style_height(&text_style), + json.len(), + |ui, row_range| { + let content: String = row_range + .into_iter() + .map(|i| *json.get(i).unwrap()) + .collect(); + ui.set_min_width(ui.available_width()); + selectable_text(ui, content.as_str()) + }, + ); } }); egui::CentralPanel::default().show_inside(ui, |ui| { if let Some(resource_name) = &self.resource_name { - let class: &Class = &self + let class: Class = self .bigfile .as_ref() .unwrap() @@ -155,27 +158,40 @@ impl eframe::App for Gui { ) .unwrap(); match class { - Bitmap(box_bitmap) => match **box_bitmap { + Class::Bitmap(box_bitmap) => match *box_bitmap { bff::class::bitmap::Bitmap::BitmapV1_291_03_06PC(ref bitmap) => { - ui.add( - egui::Image::new(<(String, std::vec::Vec) as Into< - egui::ImageSource, - >>::into( - ( - format!("bytes://{}.dds", resource_name), - bitmap.body.data.clone(), - ) - )) - .texture_options(egui::TextureOptions::NEAREST) - .shrink_to_fit(), - ); + ui.add(get_image(resource_name, &bitmap.body.data)); + } + bff::class::bitmap::Bitmap::BitmapV1_381_67_09PC(ref bitmap) => { + ui.add(get_image(resource_name, &bitmap.body.data)); } _ => (), }, + Class::Sound(box_sound) => match *box_sound { + bff::class::sound::Sound::SoundV1_291_03_06PC(sound) => { + if ui.button("play").clicked() { + play_sound( + sound.body.flags.stereo().value(), + sound.body.sample_rate, + sound.body.data, + ); + } + } + bff::class::sound::Sound::SoundV1_381_67_09PC(sound) => { + if ui.button("play").clicked() { + play_sound( + sound.link_header.flags.stereo().value(), + sound.link_header.sample_rate, + sound.body.data, + ); + } + } + }, _ => (), } } }); + if self.nickname_window_open { egui::Window::new("Change resource nickname") .fixed_size(egui::vec2(100.0, 50.0)) @@ -204,7 +220,6 @@ impl eframe::App for Gui { preview_files_being_dropped(ctx); - // Collect dropped files: ctx.input(|i| { if !i.raw.dropped_files.is_empty() { self.bigfile = Some(load_bigfile( @@ -221,11 +236,53 @@ fn load_bigfile(path: &PathBuf) -> BigFile { None => Platform::PC, }; let f = File::open(path).unwrap(); - let mut reader = BufReader::new(f); + let mut reader = bff::BufReader::new(f); BigFile::read_platform(&mut reader, platform).unwrap() } -/// Preview hovering files: +fn get_image<'a>(resource_name: &Name, data: &Vec) -> egui::Image<'a> { + egui::Image::new( + <(String, std::vec::Vec) as Into>::into(( + format!("bytes://{}.dds", resource_name), + data.to_owned(), + )), + ) + .texture_options(egui::TextureOptions::NEAREST) + .shrink_to_fit() +} + +fn play_sound(stereo: u8, sample_rate: u32, data: Vec) { + std::thread::spawn(move || { + let spec = hound::WavSpec { + channels: match stereo { + 1 => 2, + _ => 1, + }, + sample_rate: sample_rate, + bits_per_sample: 16, + sample_format: hound::SampleFormat::Int, + }; + + let mut bytes = Vec::new(); + let mut write_cursor = Cursor::new(&mut bytes); + let mut parent_writer = hound::WavWriter::new(&mut write_cursor, spec).unwrap(); + let mut sample_writer = parent_writer.get_i16_writer(data.len() as u32); + + for sample in data { + sample_writer.write_sample(sample); + } + sample_writer.flush().unwrap(); + parent_writer.finalize().unwrap(); + + let (_stream, stream_handle) = rodio::OutputStream::try_default().unwrap(); + let sink = rodio::Sink::try_new(&stream_handle).unwrap(); + let buf = std::io::BufReader::new(Cursor::new(bytes)); + let source = rodio::Decoder::new_wav(buf).unwrap(); + sink.append(source); + sink.sleep_until_end(); + }); +} + fn preview_files_being_dropped(ctx: &egui::Context) { use egui::*; use std::fmt::Write as _; diff --git a/bff-gui/src/traits.rs b/bff-gui/src/traits.rs deleted file mode 100644 index 1531962..0000000 --- a/bff-gui/src/traits.rs +++ /dev/null @@ -1 +0,0 @@ -use bff::names::Name; diff --git a/bff/src/class/bitmap/v1_381_67_09_pc.rs b/bff/src/class/bitmap/v1_381_67_09_pc.rs index e8f7a4c..4998a69 100644 --- a/bff/src/class/bitmap/v1_381_67_09_pc.rs +++ b/bff/src/class/bitmap/v1_381_67_09_pc.rs @@ -61,7 +61,7 @@ pub struct LinkHeader { #[br(import(_link_header: &LinkHeader))] pub struct BitmapBodyV1_381_67_09PC { #[br(parse_with = until_eof)] - data: Vec, + pub data: Vec, } pub type BitmapV1_381_67_09PC = TrivialClass; diff --git a/bff/src/class/sound/v1_291_03_06_pc.rs b/bff/src/class/sound/v1_291_03_06_pc.rs index 66204d0..b5ae70f 100644 --- a/bff/src/class/sound/v1_291_03_06_pc.rs +++ b/bff/src/class/sound/v1_291_03_06_pc.rs @@ -7,22 +7,22 @@ use crate::class::trivial_class::TrivialClass; #[bitsize(16)] #[derive(DebugBits, BinRead, SerializeBits, BinWrite, DeserializeBits, ReferencedNames)] -struct SoundFlags { +pub struct SoundFlags { paused: u1, looping: u1, - stereo: u1, + pub stereo: u1, padding: u13, } #[derive(Debug, BinRead, Serialize, BinWrite, Deserialize, ReferencedNames)] #[br(import(_link_header: &()))] pub struct SoundBodyV1_291_03_06PC { - sample_rate: u32, + pub sample_rate: u32, data_size: u32, - flags: SoundFlags, + pub flags: SoundFlags, #[br(count = data_size / 2)] #[serde(skip_serializing)] - _data: Vec, + pub data: Vec, } pub type SoundV1_291_03_06PC = TrivialClass<(), SoundBodyV1_291_03_06PC>; diff --git a/bff/src/class/sound/v1_381_67_09_pc.rs b/bff/src/class/sound/v1_381_67_09_pc.rs index 079afee..6ff8a42 100644 --- a/bff/src/class/sound/v1_381_67_09_pc.rs +++ b/bff/src/class/sound/v1_381_67_09_pc.rs @@ -8,26 +8,26 @@ use crate::names::Name; #[bitsize(16)] #[derive(BinRead, DebugBits, SerializeBits, BinWrite, DeserializeBits, ReferencedNames)] -struct SoundFlags { +pub struct SoundFlags { paused: u1, looping: u1, - stereo: u1, + pub stereo: u1, padding: u13, } #[derive(BinRead, Debug, Serialize, BinWrite, Deserialize, ReferencedNames)] pub struct LinkHeader { link_name: Name, - sample_rate: u32, + pub sample_rate: u32, sound_data_size: u32, - flags: SoundFlags, + pub flags: SoundFlags, } #[derive(BinRead, Debug, Serialize, BinWrite, Deserialize, ReferencedNames)] #[br(import(link_header: &LinkHeader))] pub struct SoundBodyV1_381_67_09PC { - #[br(count = link_header.sound_data_size)] - data: Vec, + #[br(count = link_header.sound_data_size / 2)] + pub data: Vec, } pub type SoundV1_381_67_09PC = TrivialClass; diff --git a/bff/src/traits.rs b/bff/src/traits.rs index b01a9fa..4ff1613 100644 --- a/bff/src/traits.rs +++ b/bff/src/traits.rs @@ -172,7 +172,23 @@ macro_rules! impl_referenced_names { } } -impl_referenced_names!((), bool, f32, f64, u8, u16, u32, u64, u128, i8, i16, i32, i64, i128, String); +impl_referenced_names!( + (), + bool, + f32, + f64, + u8, + u16, + u32, + u64, + u128, + i8, + i16, + i32, + i64, + i128, + String +); // this should be const https://github.com/rust-lang/rust/issues/67792 pub trait NameHashFunction { From 03e1f1feed645abb6f9e630d009865d05ed20a18 Mon Sep 17 00:00:00 2001 From: pizzart <7o7goo7o7@gmail.com> Date: Fri, 13 Oct 2023 02:00:10 +0300 Subject: [PATCH 03/16] add export json, nicknames, clear nicknames, broken import nicknames --- bff-gui/src/main.rs | 197 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 173 insertions(+), 24 deletions(-) diff --git a/bff-gui/src/main.rs b/bff-gui/src/main.rs index 78519c4..81508d7 100644 --- a/bff-gui/src/main.rs +++ b/bff-gui/src/main.rs @@ -1,9 +1,9 @@ // #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release -use std::collections::HashMap; use std::fs::File; use std::io::Cursor; use std::path::PathBuf; +use std::{collections::HashMap, io::Write}; use bff::{ bigfile::{resource::Resource, BigFile}, @@ -31,6 +31,7 @@ fn selectable_text(ui: &mut egui::Ui, mut text: &str) -> egui::Response { #[derive(Default)] struct Gui { bigfile: Option, + bigfile_path: Option, resource_name: Option, nicknames: HashMap, nickname_window_open: bool, @@ -45,13 +46,156 @@ impl eframe::App for Gui { .frame(egui::Frame::none().inner_margin(egui::Margin::same(0.0))) .show(ctx, |ui| { egui::TopBottomPanel::top("top").show_inside(ui, |ui| { - ui.menu_button("File", |ui| { - if ui.button("Open BigFile...").clicked() { - ui.close_menu(); - if let Some(path) = rfd::FileDialog::new().pick_file() { - self.bigfile = Some(load_bigfile(&path)); + ui.horizontal(|ui| { + ui.menu_button("File", |ui| { + if ui.button("Open BigFile...").clicked() { + ui.close_menu(); + if let Some(path) = rfd::FileDialog::new() + .add_filter( + "BigFile", + &bff::platforms::extensions() + .iter() + .map(|s| s.to_str().unwrap()) + .collect::>()[..], + ) + .pick_file() + { + self.bigfile = Some(load_bigfile(&path)); + self.bigfile_path = Some(path); + self.resource_name = None; + } } - } + }); + ui.menu_button("Export", |ui| { + if ui + .add_enabled( + match self.resource_name { + Some(_) => true, + None => false, + }, + egui::Button::new("Export JSON..."), + ) + .clicked() + { + ui.close_menu(); + if let Some(path) = rfd::FileDialog::new() + .add_filter("json", &["json"]) + .save_file() + { + File::create(path) + .unwrap() + .write_all( + serde_json::to_string_pretty::( + &self + .bigfile + .as_ref() + .unwrap() + .objects + .get(&self.resource_name.unwrap()) + .unwrap() + .try_into_version_platform( + self.bigfile + .as_ref() + .unwrap() + .manifest + .version + .clone(), + self.bigfile + .as_ref() + .unwrap() + .manifest + .platform + .clone(), + ) + .unwrap(), + ) + .unwrap() + .as_bytes(), + ) + .unwrap(); + } + } + if ui + .add_enabled( + match self.resource_name { + Some(_) => true, + None => false, + }, + egui::Button::new("Export data..."), + ) + .clicked() + { + ui.close_menu(); + } + }); + ui.menu_button("Nicknames", |ui| { + if ui + .add_enabled( + match self.bigfile { + Some(_) => true, + None => false, + }, + egui::Button::new("Import..."), + ) + .clicked() + { + ui.close_menu(); + if let Some(path) = rfd::FileDialog::new() + .add_filter("json", &["json"]) + .pick_file() + { + let buf = std::io::BufReader::new(File::open(path).unwrap()); + self.nicknames = serde_json::de::from_reader::< + std::io::BufReader, + HashMap, + >(buf) + .unwrap(); + } + } + + if ui + .add_enabled( + !self.nicknames.is_empty(), + egui::Button::new("Export all..."), + ) + .clicked() + { + ui.close_menu(); + if let Some(path) = rfd::FileDialog::new() + .add_filter("json", &["json"]) + .set_file_name(format!( + "{}_nicknames", + self.bigfile_path + .as_ref() + .unwrap() + .file_name() + .unwrap() + .to_str() + .unwrap() + )) + .save_file() + { + File::create(path) + .unwrap() + .write_all( + serde_json::to_string_pretty(&self.nicknames) + .unwrap() + .as_bytes(), + ) + .unwrap(); + } + } + if ui + .add_enabled( + !self.nicknames.is_empty(), + egui::Button::new("Clear all"), + ) + .clicked() + { + ui.close_menu(); + self.nicknames.clear(); + } + }); }); }); @@ -196,24 +340,29 @@ impl eframe::App for Gui { egui::Window::new("Change resource nickname") .fixed_size(egui::vec2(100.0, 50.0)) .show(ctx, |ui| { - let output = egui::TextEdit::singleline(&mut self.nickname_editing.1) - .hint_text("Enter nickname...") - .min_size(egui::vec2(100.0, 0.0)) - .show(ui); - if output.response.lost_focus() - && ui.input(|i| i.key_pressed(egui::Key::Enter)) - { - let filtered_nickname = self.nickname_editing.1.trim(); - self.nickname_window_open = false; - if filtered_nickname.len() != 0 { - self.nicknames.insert( - self.nickname_editing.0, - filtered_nickname.to_owned(), - ); - } else { - self.nicknames.remove(&self.nickname_editing.0); + ui.horizontal(|ui| { + let output = + egui::TextEdit::singleline(&mut self.nickname_editing.1) + .hint_text("Enter nickname...") + .min_size(egui::vec2(100.0, 0.0)) + .show(ui); + if (output.response.lost_focus() + && ui.input(|i| i.key_pressed(egui::Key::Enter))) + || ui.button("Change").clicked() + { + let filtered_nickname = self.nickname_editing.1.trim(); + self.nickname_window_open = false; + if filtered_nickname.len() != 0 { + self.nicknames.insert( + self.nickname_editing.0, + filtered_nickname.to_owned(), + ); + } else { + self.nicknames.remove(&self.nickname_editing.0); + } + self.nickname_editing.1 = String::new(); } - } + }); }); } }); From e1afba1420525c73640012b8f6286ad1148f54f2 Mon Sep 17 00:00:00 2001 From: pizzart <7o7goo7o7@gmail.com> Date: Fri, 13 Oct 2023 14:26:43 +0300 Subject: [PATCH 04/16] quit button --- bff-gui/src/main.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/bff-gui/src/main.rs b/bff-gui/src/main.rs index 81508d7..0353899 100644 --- a/bff-gui/src/main.rs +++ b/bff-gui/src/main.rs @@ -39,7 +39,7 @@ struct Gui { } impl eframe::App for Gui { - fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { + fn update(&mut self, ctx: &egui::Context, frame: &mut eframe::Frame) { ctx.set_pixels_per_point(1.25); egui_extras::install_image_loaders(ctx); egui::CentralPanel::default() @@ -65,6 +65,9 @@ impl eframe::App for Gui { self.resource_name = None; } } + if ui.button("Quit").clicked() { + frame.close(); + } }); ui.menu_button("Export", |ui| { if ui @@ -344,7 +347,7 @@ impl eframe::App for Gui { let output = egui::TextEdit::singleline(&mut self.nickname_editing.1) .hint_text("Enter nickname...") - .min_size(egui::vec2(100.0, 0.0)) + .min_size(ui.available_size()) .show(ui); if (output.response.lost_focus() && ui.input(|i| i.key_pressed(egui::Key::Enter))) From c1178398b91d126c0bff18b752e26c5383284f79 Mon Sep 17 00:00:00 2001 From: pizzart <7o7goo7o7@gmail.com> Date: Sat, 14 Oct 2023 00:38:22 +0300 Subject: [PATCH 05/16] add icon, add sound volume, add mesh (poor performance and inverted normals) --- Cargo.lock | 94 ++++++++++++ bff-gui/Cargo.toml | 2 + bff-gui/resources/bff.png | Bin 0 -> 14658 bytes bff-gui/src/main.rs | 166 ++++++++++++++------ bff-gui/src/views/mesh.rs | 213 ++++++++++++++++++++++++++ bff-gui/src/views/mod.rs | 1 + bff/src/class/mesh/mod.rs | 6 +- bff/src/class/mesh/v1_291_03_06_pc.rs | 26 ++-- 8 files changed, 442 insertions(+), 66 deletions(-) create mode 100644 bff-gui/resources/bff.png create mode 100644 bff-gui/src/views/mesh.rs create mode 100644 bff-gui/src/views/mod.rs diff --git a/Cargo.lock b/Cargo.lock index 8e79e26..0cfe19b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -213,6 +213,15 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "approx" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f2a05fd1bd10b2527e20a2cd32d8873d115b8b39fe219ee25f42a8aca6ba278" +dependencies = [ + "num-traits", +] + [[package]] name = "arbitrary-int" version = "1.2.6" @@ -510,6 +519,8 @@ dependencies = [ "rodio", "serde", "serde_json", + "three-d", + "three-d-asset", ] [[package]] @@ -762,6 +773,16 @@ dependencies = [ "libc", ] +[[package]] +name = "cgmath" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a98d30140e3296250832bbaaff83b27dcd6fa3cc70fb6f1f3e5c9c0023b5317" +dependencies = [ + "approx", + "num-traits", +] + [[package]] name = "clang-sys" version = "1.6.1" @@ -1767,6 +1788,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" dependencies = [ "crunchy", + "num-traits", + "zerocopy", ] [[package]] @@ -2062,6 +2085,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + [[package]] name = "linux-raw-sys" version = "0.3.4" @@ -2321,6 +2350,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -3029,6 +3059,17 @@ dependencies = [ "serde", ] +[[package]] +name = "serde-wasm-bindgen" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + [[package]] name = "serde_derive" version = "1.0.188" @@ -3379,6 +3420,38 @@ dependencies = [ "syn 2.0.32", ] +[[package]] +name = "three-d" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0009722bf3b5989f800349faffa1bb1ce0d7821d562f117b5d87f6eea3677c97" +dependencies = [ + "cgmath", + "glow", + "glutin", + "instant", + "raw-window-handle", + "serde", + "serde-wasm-bindgen", + "thiserror", + "three-d-asset", + "wasm-bindgen", + "web-sys", + "winit", +] + +[[package]] +name = "three-d-asset" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9959d4427b63958661828008f7470d6a8d2c0945b3df0dc7377d6aca38fb694" +dependencies = [ + "cgmath", + "half", + "thiserror", + "web-sys", +] + [[package]] name = "tiff" version = "0.9.0" @@ -4252,6 +4325,27 @@ dependencies = [ "zvariant", ] +[[package]] +name = "zerocopy" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20707b61725734c595e840fb3704378a0cd2b9c74cc9e6e20724838fc6a1e2f9" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56097d5b91d711293a42be9289403896b68654625021732067eac7a4ca388a1f" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 2.0.32", +] + [[package]] name = "zune-inflate" version = "0.2.54" diff --git a/bff-gui/Cargo.toml b/bff-gui/Cargo.toml index ec0557a..4260539 100644 --- a/bff-gui/Cargo.toml +++ b/bff-gui/Cargo.toml @@ -14,3 +14,5 @@ rfd = "0.12.0" rodio = "0.17.1" serde = "1.0.188" serde_json = "1.0.107" +three-d = "0.16.1" +three-d-asset = "0.6.0" diff --git a/bff-gui/resources/bff.png b/bff-gui/resources/bff.png new file mode 100644 index 0000000000000000000000000000000000000000..4c9fdf709ade6199c0922cc968fedf8945882a41 GIT binary patch literal 14658 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 N?*prH3J4a5|CfO24*?*z>I( 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 literal 0 HcmV?d00001 diff --git a/bff-gui/src/main.rs b/bff-gui/src/main.rs index 0353899..fa1b959 100644 --- a/bff-gui/src/main.rs +++ b/bff-gui/src/main.rs @@ -1,27 +1,34 @@ // #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release +use std::collections::HashMap; use std::fs::File; -use std::io::Cursor; +use std::io::{Cursor, Write}; use std::path::PathBuf; -use std::{collections::HashMap, io::Write}; -use bff::{ - bigfile::{resource::Resource, BigFile}, - class::Class, - names::Name, - platforms::Platform, - traits::TryIntoVersionPlatform, -}; +use bff::bigfile::resource::Resource; +use bff::bigfile::BigFile; +use bff::class::Class; +use bff::names::Name; +use bff::platforms::Platform; +use bff::traits::TryIntoVersionPlatform; use eframe::egui; +use three_d::{Vec2, Vec3}; +use three_d_asset::{Vec4, Vector4}; + +mod views; fn main() -> Result<(), eframe::Error> { // env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`). let options = eframe::NativeOptions { drag_and_drop_support: true, - initial_window_size: Some(egui::vec2(640.0, 480.0)), + renderer: eframe::Renderer::Glow, + icon_data: Some( + eframe::IconData::try_from_png_bytes(include_bytes!("../resources/bff.png")).unwrap(), + ), + initial_window_size: Some(egui::vec2(800.0, 600.0)), ..Default::default() }; - eframe::run_native("BFF GUI", options, Box::new(|_cc| Box::::default())) + eframe::run_native("BFF GUI", options, Box::new(|cc| Box::new(Gui::new(cc)))) } fn selectable_text(ui: &mut egui::Ui, mut text: &str) -> egui::Response { @@ -36,12 +43,29 @@ struct Gui { nicknames: HashMap, nickname_window_open: bool, nickname_editing: (Name, String), + models: HashMap, + sound_volume: f32, +} + +impl Gui { + fn new(cc: &eframe::CreationContext<'_>) -> Self { + cc.egui_ctx.set_pixels_per_point(1.25); + egui_extras::install_image_loaders(&cc.egui_ctx); + Self { + bigfile: None, + bigfile_path: None, + resource_name: None, + nicknames: HashMap::new(), + nickname_window_open: false, + nickname_editing: (Name::default(), String::new()), + models: HashMap::new(), + sound_volume: 1.0, + } + } } impl eframe::App for Gui { fn update(&mut self, ctx: &egui::Context, frame: &mut eframe::Frame) { - ctx.set_pixels_per_point(1.25); - egui_extras::install_image_loaders(ctx); egui::CentralPanel::default() .frame(egui::Frame::none().inner_margin(egui::Margin::same(0.0))) .show(ctx, |ui| { @@ -72,10 +96,7 @@ impl eframe::App for Gui { ui.menu_button("Export", |ui| { if ui .add_enabled( - match self.resource_name { - Some(_) => true, - None => false, - }, + self.resource_name.is_some(), egui::Button::new("Export JSON..."), ) .clicked() @@ -108,7 +129,6 @@ impl eframe::App for Gui { .unwrap() .manifest .platform - .clone(), ) .unwrap(), ) @@ -120,10 +140,7 @@ impl eframe::App for Gui { } if ui .add_enabled( - match self.resource_name { - Some(_) => true, - None => false, - }, + self.resource_name.is_some(), egui::Button::new("Export data..."), ) .clicked() @@ -134,10 +151,7 @@ impl eframe::App for Gui { ui.menu_button("Nicknames", |ui| { if ui .add_enabled( - match self.bigfile { - Some(_) => true, - None => false, - }, + self.bigfile.is_some(), egui::Button::new("Import..."), ) .clicked() @@ -226,7 +240,7 @@ impl eframe::App for Gui { Some(nn) => nn.to_owned(), None => resource.name.to_string(), }, - resource.class_name.to_string() + resource.class_name )) .wrap(false) .rounding(0.0) @@ -263,13 +277,13 @@ impl eframe::App for Gui { .unwrap() .try_into_version_platform( self.bigfile.as_ref().unwrap().manifest.version.clone(), - self.bigfile.as_ref().unwrap().manifest.platform.clone(), + self.bigfile.as_ref().unwrap().manifest.platform, ) .unwrap(), ) .unwrap(); let json: Vec<&str> = j - .split_inclusive("\n") + .split_inclusive('\n') // .map(|s| s.to_string()) .collect(); let text_style = egui::TextStyle::Body; @@ -301,7 +315,7 @@ impl eframe::App for Gui { .unwrap() .try_into_version_platform( self.bigfile.as_ref().unwrap().manifest.version.clone(), - self.bigfile.as_ref().unwrap().manifest.platform.clone(), + self.bigfile.as_ref().unwrap().manifest.platform, ) .unwrap(); match class { @@ -314,25 +328,75 @@ impl eframe::App for Gui { } _ => (), }, - Class::Sound(box_sound) => match *box_sound { - bff::class::sound::Sound::SoundV1_291_03_06PC(sound) => { - if ui.button("play").clicked() { - play_sound( - sound.body.flags.stereo().value(), - sound.body.sample_rate, - sound.body.data, - ); + Class::Sound(box_sound) => { + ui.add(egui::Slider::new(&mut self.sound_volume, 0.0..=1.0).text("Volume").show_value(false)); + if ui.button("play").clicked() { + match *box_sound { + bff::class::sound::Sound::SoundV1_291_03_06PC(sound) => { + play_sound( + sound.body.data, + sound.body.sample_rate, + sound.body.flags.stereo().value(), + self.sound_volume, + ); } - } - bff::class::sound::Sound::SoundV1_381_67_09PC(sound) => { - if ui.button("play").clicked() { - play_sound( - sound.link_header.flags.stereo().value(), - sound.link_header.sample_rate, - sound.body.data, - ); + bff::class::sound::Sound::SoundV1_381_67_09PC(sound) => { + play_sound( + sound.body.data, + sound.link_header.sample_rate, + sound.link_header.flags.stereo().value(), + self.sound_volume, + ); + } } + }}, + Class::Mesh(box_mesh) => match *box_mesh { + bff::class::mesh::Mesh::MeshV1_291_03_06PC(mesh) => { + let model = if let Some(m) = self.models.get(resource_name) { + m.clone() + } else { + let (positions, (uvs, (normals, tangents))): (Vec, (Vec, (Vec, Vec))) = mesh.body.mesh_buffer.vertex_buffers.iter().flat_map(|buf| &buf.vertex_structs).map(|vs| match vs { + bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct24 { + position, uv, .. + } => (position, uv, &[0u8; 3], [0u8; 4]), + bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct36 { + position, + uv, + normal, + tangent, + .. + } + | bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct48 { + position, + uv, + normal, + tangent, + .. + } + | bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct60 { + position, + uv, + normal, + tangent, + .. + } => (position, uv, normal, [&tangent[..], &[0u8]].concat().try_into().unwrap()), + bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStructUnknown { .. } => { + (&[0f32; 3], &[0f32; 2], &[0u8; 3], [0u8; 4]) + } + }).map(|(p, u, n, t)| (Vec3::from(*p), (Vec2::from(*u), (Vec3::from(n.map(|i| (i as f32 - 128.0) / 128.0)), Vec4::from(t.map(|i| (i as f32 - 128.0) / 128.0)))))).unzip(); + let indices: Vec = mesh.body.mesh_buffer.index_buffers.iter().flat_map(|buf| &buf.tris).flat_map(|tri| tri.indices).map(|i| u16::try_from(i).unwrap_or(0)).collect(); + let tri_mesh = three_d::geometry::CpuMesh { positions: three_d::Positions::F32(positions), indices: three_d::Indices::U16(indices), normals: Some(normals), tangents: Some(tangents), uvs: Some(uvs), colors: None }; + let triangles = three_d_asset::geometry::Geometry::Triangles(tri_mesh); + let primitive = three_d_asset::Primitive {name: "mesh".to_string(), transformation: three_d_asset::Mat4::from_translation([0.0; 3].into()), animations: vec![], geometry: triangles, material_index: None}; + let model = three_d::renderer::CpuModel {name: resource_name.to_string(), geometries: vec![primitive], materials: vec![]}; + self.models.insert(*resource_name, model.clone()); + model + }; + ui.add(views::mesh::MeshView::new( + model.clone(), + )); } + _ => (), }, _ => (), } @@ -355,7 +419,7 @@ impl eframe::App for Gui { { let filtered_nickname = self.nickname_editing.1.trim(); self.nickname_window_open = false; - if filtered_nickname.len() != 0 { + if !filtered_nickname.is_empty() { self.nicknames.insert( self.nickname_editing.0, filtered_nickname.to_owned(), @@ -403,14 +467,14 @@ fn get_image<'a>(resource_name: &Name, data: &Vec) -> egui::Image<'a> { .shrink_to_fit() } -fn play_sound(stereo: u8, sample_rate: u32, data: Vec) { +fn play_sound(data: Vec, sample_rate: u32, stereo: u8, volume: f32) { std::thread::spawn(move || { let spec = hound::WavSpec { channels: match stereo { 1 => 2, _ => 1, }, - sample_rate: sample_rate, + sample_rate, bits_per_sample: 16, sample_format: hound::SampleFormat::Int, }; @@ -430,15 +494,17 @@ fn play_sound(stereo: u8, sample_rate: u32, data: Vec) { let sink = rodio::Sink::try_new(&stream_handle).unwrap(); let buf = std::io::BufReader::new(Cursor::new(bytes)); let source = rodio::Decoder::new_wav(buf).unwrap(); + sink.set_volume(volume); sink.append(source); sink.sleep_until_end(); }); } fn preview_files_being_dropped(ctx: &egui::Context) { - use egui::*; use std::fmt::Write as _; + use egui::*; + if !ctx.input(|i| i.raw.hovered_files.is_empty()) { let text = ctx.input(|i| { let mut text = "Dropping files:\n".to_owned(); diff --git a/bff-gui/src/views/mesh.rs b/bff-gui/src/views/mesh.rs new file mode 100644 index 0000000..0af79a3 --- /dev/null +++ b/bff-gui/src/views/mesh.rs @@ -0,0 +1,213 @@ +use eframe::egui; +use three_d::*; + +pub struct MeshView { + model: CpuModel, +} + +impl MeshView { + pub fn new(model: CpuModel) -> Self { + Self { model } + } +} + +impl egui::Widget for MeshView { + fn ui(self, ui: &mut egui::Ui) -> egui::Response { + egui::Frame::canvas(ui.style()) + .show(ui, |ui| { + let (rect, response) = + ui.allocate_exact_size(ui.available_size(), egui::Sense::drag()); + + // let ang = + // match ui.memory(|mem| mem.data.get_temp::>>(self.id_source)) { + // Some(val) => *val.lock().unwrap(), + // None => self.angle, + // }; + // self.angle = ang + response.drag_delta().x * 0.01; + // ui.memory_mut(|mem| { + // mem.data + // .insert_temp(self.id_source, Arc::new(Mutex::new(self.angle))) + // }); + + let angle = response.drag_delta() * 0.05; + + let callback = egui::PaintCallback { + rect, + callback: std::sync::Arc::new(eframe::egui_glow::CallbackFn::new( + move |info, painter| { + with_three_d(&self.model, painter.gl(), |three_d| { + three_d.frame( + ConvertedFrameInput::new(&three_d.context, &info, painter), + angle, + ); + }); + }, + )), + }; + ui.painter().add(callback); + }) + .response + } +} + +fn with_three_d( + cpu_model: &CpuModel, + gl: &std::sync::Arc, + f: impl FnOnce(&mut ThreeDApp) -> R, +) -> R { + use std::cell::RefCell; + thread_local! { + pub static THREE_D: RefCell> = RefCell::new(None); + pub static MODEL: RefCell> = RefCell::new(None); + } + + THREE_D.with(|three_d| { + MODEL.with(|model| { + let mut three_d = three_d.borrow_mut(); + let mut model = model.borrow_mut(); + if let Some(m) = model.as_ref() { + if m.name != cpu_model.name { + model.replace(cpu_model.clone()); + three_d.as_mut().unwrap().set_model(cpu_model, gl.clone()) + } + } else { + model.replace(cpu_model.clone()); + } + let new = three_d.get_or_insert(ThreeDApp::new(cpu_model, gl.clone())); + f(new) + }) + }) +} + +/// +/// Translates from egui input to three-d input +/// +pub struct ConvertedFrameInput<'a> { + screen: three_d::RenderTarget<'a>, + viewport: three_d::Viewport, + scissor_box: three_d::ScissorBox, +} + +impl ConvertedFrameInput<'_> { + pub fn new( + context: &three_d::Context, + info: &egui::PaintCallbackInfo, + painter: &eframe::egui_glow::Painter, + ) -> Self { + use three_d::*; + + // Disable sRGB textures for three-d + #[cfg(not(target_arch = "wasm32"))] + #[allow(unsafe_code)] + unsafe { + use eframe::glow::HasContext as _; + context.disable(eframe::glow::FRAMEBUFFER_SRGB); + } + + // Constructs a screen render target to render the final image to + let screen = painter.intermediate_fbo().map_or_else( + || { + RenderTarget::screen( + context, + info.viewport.width() as u32, + info.viewport.height() as u32, + ) + }, + |fbo| { + RenderTarget::from_framebuffer( + context, + info.viewport.width() as u32, + info.viewport.height() as u32, + fbo, + ) + }, + ); + + // Set where to paint + let viewport = info.viewport_in_pixels(); + let viewport = Viewport { + x: viewport.left_px.round() as _, + y: viewport.from_bottom_px.round() as _, + width: viewport.width_px.round() as _, + height: viewport.height_px.round() as _, + }; + + // Respect the egui clip region (e.g. if we are inside an `egui::ScrollArea`). + let clip_rect = info.clip_rect_in_pixels(); + let scissor_box = ScissorBox { + x: clip_rect.left_px.round() as _, + y: clip_rect.from_bottom_px.round() as _, + width: clip_rect.width_px.round() as _, + height: clip_rect.height_px.round() as _, + }; + Self { + screen, + scissor_box, + viewport, + } + } +} + +pub struct ThreeDApp { + context: Context, + camera: Camera, + pub model: Model, +} + +impl ThreeDApp { + pub fn new(cpu_model: &CpuModel, gl: std::sync::Arc) -> Self { + let context = Context::from_gl_context(gl).unwrap(); + let camera = Camera::new_perspective( + Viewport::new_at_origo(1, 1), + vec3(0.0, 0.0, 5.0), + vec3(0.0, 0.0, 0.0), + vec3(0.0, 1.0, 0.0), + degrees(70.0), + 0.1, + 10.0, + ); + let model = Model::new(&context, cpu_model).unwrap(); + Self { + context, + camera, + model, + } + } + + pub fn set_model(&mut self, cpu_model: &CpuModel, gl: std::sync::Arc) { + let context = Context::from_gl_context(gl).unwrap(); + self.model = Model::new(&context, cpu_model).unwrap(); + } + + pub fn frame( + &mut self, + frame_input: ConvertedFrameInput<'_>, + angle: egui::Vec2, + ) -> Option { + self.camera.set_viewport(frame_input.viewport); + + self.camera + .rotate_around_with_fixed_up(&Vector3::zero(), angle.x, angle.y); + + frame_input + .screen + .clear_partially(frame_input.scissor_box, ClearState::depth(1.0)) + .render_partially( + frame_input.scissor_box, + &self.camera, + &self.model, + &[&AmbientLight::new( + &self.context, + 1.0, + Srgba { + r: 255, + g: 255, + b: 255, + a: 255, + }, + )], + ); + + frame_input.screen.into_framebuffer() + } +} diff --git a/bff-gui/src/views/mod.rs b/bff-gui/src/views/mod.rs new file mode 100644 index 0000000..cb3e16e --- /dev/null +++ b/bff-gui/src/views/mod.rs @@ -0,0 +1 @@ +pub mod mesh; diff --git a/bff/src/class/mesh/mod.rs b/bff/src/class/mesh/mod.rs index 3778206..31d18e9 100644 --- a/bff/src/class/mesh/mod.rs +++ b/bff/src/class/mesh/mod.rs @@ -1,8 +1,8 @@ use bff_derive::bff_class; -mod v1_06_63_02_pc; -mod v1_291_03_06_pc; -mod v1_381_67_09_pc; +pub mod v1_06_63_02_pc; +pub mod v1_291_03_06_pc; +pub mod v1_381_67_09_pc; use v1_06_63_02_pc::MeshV1_06_63_02PC; use v1_291_03_06_pc::MeshV1_291_03_06PC; diff --git a/bff/src/class/mesh/v1_291_03_06_pc.rs b/bff/src/class/mesh/v1_291_03_06_pc.rs index ab8e293..7c765b9 100644 --- a/bff/src/class/mesh/v1_291_03_06_pc.rs +++ b/bff/src/class/mesh/v1_291_03_06_pc.rs @@ -113,13 +113,13 @@ struct Vertex { } #[derive(BinRead, Debug, Serialize, BinWrite, Deserialize, ReferencedNames)] -struct Triangle { - indices: Vec3, +pub struct Triangle { + pub indices: Vec3, } #[derive(BinRead, Debug, Serialize, BinWrite, Deserialize, ReferencedNames)] #[br(import(length: u32))] -enum VertexStruct { +pub enum VertexStruct { #[br(pre_assert(length == 24))] VertexStruct24 { position: Vec3f, @@ -164,24 +164,24 @@ enum VertexStruct { } #[derive(BinRead, Debug, Serialize, BinWrite, Deserialize, ReferencedNames)] -struct VertexBuffer { +pub struct VertexBuffer { vertex_struct_count: u32, vertex_struct_length: u32, unknown: u32, #[br(args { count: vertex_struct_count as usize, inner: (vertex_struct_length,) })] - vertex_structs: Vec, + pub vertex_structs: Vec, } #[derive(BinRead, Debug, Serialize, BinWrite, Deserialize, ReferencedNames)] -struct IndexBuffer { +pub struct IndexBuffer { index_count: u32, unknown: u32, #[br(count = index_count / 3)] - tris: Vec, + pub tris: Vec, } #[derive(BinRead, Debug, Serialize, BinWrite, Deserialize, ReferencedNames)] -struct VertexGroup { +pub struct VertexGroup { zeroes: Vec3, primitive: u32, vertex_offset_in_groups: u16, @@ -218,10 +218,10 @@ struct Morpher { } #[derive(BinRead, Debug, Serialize, BinWrite, Deserialize, ReferencedNames)] -struct MeshBuffer { - vertex_buffers: DynArray, - index_buffers: DynArray, - vertex_groups: DynArray, +pub struct MeshBuffer { + pub vertex_buffers: DynArray, + pub index_buffers: DynArray, + pub vertex_groups: DynArray, unknowns: DynArray, morpher: Morpher, } @@ -246,7 +246,7 @@ pub struct MeshBodyV1_291_03_06PC { aabb_cols: DynArray, vertices: DynArray, unknown6s: DynArray, - mesh_buffer: MeshBuffer, + pub mesh_buffer: MeshBuffer, unknown8s: DynArray, } From 0b556fb2a7086e3a38e136941cca196fc4229cdc Mon Sep 17 00:00:00 2001 From: pizzart <7o7goo7o7@gmail.com> Date: Sun, 15 Oct 2023 00:55:58 +0300 Subject: [PATCH 06/16] split panels into modules, not fully complete raw exporting --- Cargo.lock | 2 + bff-gui/Cargo.toml | 2 + bff-gui/src/error.rs | 30 +++ bff-gui/src/main.rs | 448 ++++------------------------------ bff-gui/src/panels/central.rs | 86 +++++++ bff-gui/src/panels/left.rs | 216 ++++++++++++++++ bff-gui/src/panels/mod.rs | 4 + bff-gui/src/panels/right.rs | 52 ++++ bff-gui/src/panels/top.rs | 183 ++++++++++++++ 9 files changed, 629 insertions(+), 394 deletions(-) create mode 100644 bff-gui/src/error.rs create mode 100644 bff-gui/src/panels/central.rs create mode 100644 bff-gui/src/panels/left.rs create mode 100644 bff-gui/src/panels/mod.rs create mode 100644 bff-gui/src/panels/right.rs create mode 100644 bff-gui/src/panels/top.rs diff --git a/Cargo.lock b/Cargo.lock index 0cfe19b..110b024 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -511,7 +511,9 @@ name = "bff-gui" version = "0.1.0" dependencies = [ "bff", + "derive_more", "eframe", + "egui", "egui_extras", "hound", "image", diff --git a/bff-gui/Cargo.toml b/bff-gui/Cargo.toml index 4260539..770975a 100644 --- a/bff-gui/Cargo.toml +++ b/bff-gui/Cargo.toml @@ -6,7 +6,9 @@ edition = "2021" [dependencies] bff = { path = "../bff" } +derive_more = "0.99.17" eframe = "0.23.0" +egui = "0.23.0" egui_extras = { version = "0.23.0", features = ["all_loaders"] } hound = "3.5.1" image = { version = "0.24.7", features = ["dds", "png"] } diff --git a/bff-gui/src/error.rs b/bff-gui/src/error.rs new file mode 100644 index 0000000..b99fe46 --- /dev/null +++ b/bff-gui/src/error.rs @@ -0,0 +1,30 @@ +use bff::names::Name; +use bff::platforms::Platform; +use bff::versions::Version; +use bff::BffError; +use derive_more::{Constructor, Display, Error, From}; + +#[derive(Debug, Constructor, Display, Error)] +#[display( + fmt = "unimplemented exporter for class {} (version: {}, platform: {}) for resource {}", + class_name, + version, + platform, + object_name +)] +pub struct UnimplementedExporterError { + pub object_name: Name, + pub class_name: Name, + pub version: Version, + pub platform: Platform, +} + +#[derive(Debug, Display, Error, From)] +pub enum BffGuiError { + Bff(BffError), + Io(std::io::Error), + SerdeJson(serde_json::Error), + UnimplementedExporter(UnimplementedExporterError), +} + +pub type BffGuiResult = Result; diff --git a/bff-gui/src/main.rs b/bff-gui/src/main.rs index fa1b959..08bf600 100644 --- a/bff-gui/src/main.rs +++ b/bff-gui/src/main.rs @@ -2,21 +2,32 @@ use std::collections::HashMap; use std::fs::File; -use std::io::{Cursor, Write}; use std::path::PathBuf; -use bff::bigfile::resource::Resource; use bff::bigfile::BigFile; -use bff::class::Class; use bff::names::Name; use bff::platforms::Platform; -use bff::traits::TryIntoVersionPlatform; -use eframe::egui; -use three_d::{Vec2, Vec3}; -use three_d_asset::{Vec4, Vector4}; - +use panels::central::view; +use panels::left::resource_list; +use panels::right::resource_info; +use panels::top::menubar; +use three_d::renderer::CpuModel; + +pub mod error; +mod panels; mod views; +#[derive(Clone)] +pub enum Artifact { + Bitmap(Vec), + Sound { + data: Vec, + sample_rate: u32, + channels: u16, + }, + Mesh(CpuModel), +} + fn main() -> Result<(), eframe::Error> { // env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`). let options = eframe::NativeOptions { @@ -31,10 +42,6 @@ fn main() -> Result<(), eframe::Error> { eframe::run_native("BFF GUI", options, Box::new(|cc| Box::new(Gui::new(cc)))) } -fn selectable_text(ui: &mut egui::Ui, mut text: &str) -> egui::Response { - ui.add(egui::TextEdit::multiline(&mut text)) -} - #[derive(Default)] struct Gui { bigfile: Option, @@ -43,7 +50,7 @@ struct Gui { nicknames: HashMap, nickname_window_open: bool, nickname_editing: (Name, String), - models: HashMap, + artifacts: HashMap, sound_volume: f32, } @@ -58,7 +65,7 @@ impl Gui { nicknames: HashMap::new(), nickname_window_open: false, nickname_editing: (Name::default(), String::new()), - models: HashMap::new(), + artifacts: HashMap::new(), sound_volume: 1.0, } } @@ -69,339 +76,36 @@ impl eframe::App for Gui { egui::CentralPanel::default() .frame(egui::Frame::none().inner_margin(egui::Margin::same(0.0))) .show(ctx, |ui| { - egui::TopBottomPanel::top("top").show_inside(ui, |ui| { - ui.horizontal(|ui| { - ui.menu_button("File", |ui| { - if ui.button("Open BigFile...").clicked() { - ui.close_menu(); - if let Some(path) = rfd::FileDialog::new() - .add_filter( - "BigFile", - &bff::platforms::extensions() - .iter() - .map(|s| s.to_str().unwrap()) - .collect::>()[..], - ) - .pick_file() - { - self.bigfile = Some(load_bigfile(&path)); - self.bigfile_path = Some(path); - self.resource_name = None; - } - } - if ui.button("Quit").clicked() { - frame.close(); - } - }); - ui.menu_button("Export", |ui| { - if ui - .add_enabled( - self.resource_name.is_some(), - egui::Button::new("Export JSON..."), - ) - .clicked() - { - ui.close_menu(); - if let Some(path) = rfd::FileDialog::new() - .add_filter("json", &["json"]) - .save_file() - { - File::create(path) - .unwrap() - .write_all( - serde_json::to_string_pretty::( - &self - .bigfile - .as_ref() - .unwrap() - .objects - .get(&self.resource_name.unwrap()) - .unwrap() - .try_into_version_platform( - self.bigfile - .as_ref() - .unwrap() - .manifest - .version - .clone(), - self.bigfile - .as_ref() - .unwrap() - .manifest - .platform - ) - .unwrap(), - ) - .unwrap() - .as_bytes(), - ) - .unwrap(); - } - } - if ui - .add_enabled( - self.resource_name.is_some(), - egui::Button::new("Export data..."), - ) - .clicked() - { - ui.close_menu(); - } - }); - ui.menu_button("Nicknames", |ui| { - if ui - .add_enabled( - self.bigfile.is_some(), - egui::Button::new("Import..."), - ) - .clicked() - { - ui.close_menu(); - if let Some(path) = rfd::FileDialog::new() - .add_filter("json", &["json"]) - .pick_file() - { - let buf = std::io::BufReader::new(File::open(path).unwrap()); - self.nicknames = serde_json::de::from_reader::< - std::io::BufReader, - HashMap, - >(buf) - .unwrap(); - } - } + let menubar_response = menubar( + ui, + frame, + &self.bigfile, + &self.bigfile_path, + &self.resource_name, + &mut self.nicknames, + ); + if let Some((bf, path)) = menubar_response.bigfile_open { + self.bigfile = Some(bf); + self.bigfile_path = Some(path); + self.nicknames.clear(); + self.resource_name = None; + } - if ui - .add_enabled( - !self.nicknames.is_empty(), - egui::Button::new("Export all..."), - ) - .clicked() - { - ui.close_menu(); - if let Some(path) = rfd::FileDialog::new() - .add_filter("json", &["json"]) - .set_file_name(format!( - "{}_nicknames", - self.bigfile_path - .as_ref() - .unwrap() - .file_name() - .unwrap() - .to_str() - .unwrap() - )) - .save_file() - { - File::create(path) - .unwrap() - .write_all( - serde_json::to_string_pretty(&self.nicknames) - .unwrap() - .as_bytes(), - ) - .unwrap(); - } - } - if ui - .add_enabled( - !self.nicknames.is_empty(), - egui::Button::new("Clear all"), - ) - .clicked() - { - ui.close_menu(); - self.nicknames.clear(); - } - }); - }); - }); + let resource_list_response = + resource_list(ui, &self.bigfile, &self.nicknames, &self.artifacts); + if let Some(name) = resource_list_response.resource_context_menu { + self.nickname_window_open = true; + self.nickname_editing.0 = name; + } + if let Some(name) = resource_list_response.resource_clicked { + self.resource_name = Some(name); + } + if let Some((name, artifact)) = resource_list_response.artifact_created { + self.artifacts.insert(name, artifact); + } - egui::SidePanel::left("left") - .resizable(true) - .width_range(70.0..=ui.available_width() / 2.0) - .show_inside(ui, |ui| { - // ui.set_width_range(150.0..=200.0); - if let Some(bigfile) = &self.bigfile { - let resources: Vec<&Resource> = bigfile.objects.values().collect(); - let row_height = ui.spacing().interact_size.y; - egui::ScrollArea::vertical().show_rows( - ui, - row_height, - resources.len(), - |ui, row_range| { - ui.set_min_width(ui.available_width()); - for row in row_range { - let resource = resources.get(row).unwrap(); - if ui - .add( - egui::Button::new(format!( - "{}.{}", - match self.nicknames.get(&resource.name) { - Some(nn) => nn.to_owned(), - None => resource.name.to_string(), - }, - resource.class_name - )) - .wrap(false) - .rounding(0.0) - .min_size(egui::vec2(ui.available_width(), 0.0)), - ) - .context_menu(|ui| { - if ui.button("Change nickname").clicked() { - self.nickname_window_open = true; - self.nickname_editing.0 = resource.name; - ui.close_menu(); - } - }) - .clicked() - { - self.resource_name = Some(resource.name); - } - } - }, - ); - } - }); - egui::SidePanel::right("right") - .resizable(true) - .width_range(100.0..=ui.available_width() / 2.0) - .show_inside(ui, |ui| { - if let Some(resource_name) = &self.resource_name { - let j = serde_json::to_string_pretty::( - &self - .bigfile - .as_ref() - .unwrap() - .objects - .get(resource_name) - .unwrap() - .try_into_version_platform( - self.bigfile.as_ref().unwrap().manifest.version.clone(), - self.bigfile.as_ref().unwrap().manifest.platform, - ) - .unwrap(), - ) - .unwrap(); - let json: Vec<&str> = j - .split_inclusive('\n') - // .map(|s| s.to_string()) - .collect(); - let text_style = egui::TextStyle::Body; - egui::ScrollArea::vertical() - .id_source("code_scroll") - .show_rows( - ui, - ui.text_style_height(&text_style), - json.len(), - |ui, row_range| { - let content: String = row_range - .into_iter() - .map(|i| *json.get(i).unwrap()) - .collect(); - ui.set_min_width(ui.available_width()); - selectable_text(ui, content.as_str()) - }, - ); - } - }); - egui::CentralPanel::default().show_inside(ui, |ui| { - if let Some(resource_name) = &self.resource_name { - let class: Class = self - .bigfile - .as_ref() - .unwrap() - .objects - .get(resource_name) - .unwrap() - .try_into_version_platform( - self.bigfile.as_ref().unwrap().manifest.version.clone(), - self.bigfile.as_ref().unwrap().manifest.platform, - ) - .unwrap(); - match class { - Class::Bitmap(box_bitmap) => match *box_bitmap { - bff::class::bitmap::Bitmap::BitmapV1_291_03_06PC(ref bitmap) => { - ui.add(get_image(resource_name, &bitmap.body.data)); - } - bff::class::bitmap::Bitmap::BitmapV1_381_67_09PC(ref bitmap) => { - ui.add(get_image(resource_name, &bitmap.body.data)); - } - _ => (), - }, - Class::Sound(box_sound) => { - ui.add(egui::Slider::new(&mut self.sound_volume, 0.0..=1.0).text("Volume").show_value(false)); - if ui.button("play").clicked() { - match *box_sound { - bff::class::sound::Sound::SoundV1_291_03_06PC(sound) => { - play_sound( - sound.body.data, - sound.body.sample_rate, - sound.body.flags.stereo().value(), - self.sound_volume, - ); - } - bff::class::sound::Sound::SoundV1_381_67_09PC(sound) => { - play_sound( - sound.body.data, - sound.link_header.sample_rate, - sound.link_header.flags.stereo().value(), - self.sound_volume, - ); - } - } - }}, - Class::Mesh(box_mesh) => match *box_mesh { - bff::class::mesh::Mesh::MeshV1_291_03_06PC(mesh) => { - let model = if let Some(m) = self.models.get(resource_name) { - m.clone() - } else { - let (positions, (uvs, (normals, tangents))): (Vec, (Vec, (Vec, Vec))) = mesh.body.mesh_buffer.vertex_buffers.iter().flat_map(|buf| &buf.vertex_structs).map(|vs| match vs { - bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct24 { - position, uv, .. - } => (position, uv, &[0u8; 3], [0u8; 4]), - bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct36 { - position, - uv, - normal, - tangent, - .. - } - | bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct48 { - position, - uv, - normal, - tangent, - .. - } - | bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct60 { - position, - uv, - normal, - tangent, - .. - } => (position, uv, normal, [&tangent[..], &[0u8]].concat().try_into().unwrap()), - bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStructUnknown { .. } => { - (&[0f32; 3], &[0f32; 2], &[0u8; 3], [0u8; 4]) - } - }).map(|(p, u, n, t)| (Vec3::from(*p), (Vec2::from(*u), (Vec3::from(n.map(|i| (i as f32 - 128.0) / 128.0)), Vec4::from(t.map(|i| (i as f32 - 128.0) / 128.0)))))).unzip(); - let indices: Vec = mesh.body.mesh_buffer.index_buffers.iter().flat_map(|buf| &buf.tris).flat_map(|tri| tri.indices).map(|i| u16::try_from(i).unwrap_or(0)).collect(); - let tri_mesh = three_d::geometry::CpuMesh { positions: three_d::Positions::F32(positions), indices: three_d::Indices::U16(indices), normals: Some(normals), tangents: Some(tangents), uvs: Some(uvs), colors: None }; - let triangles = three_d_asset::geometry::Geometry::Triangles(tri_mesh); - let primitive = three_d_asset::Primitive {name: "mesh".to_string(), transformation: three_d_asset::Mat4::from_translation([0.0; 3].into()), animations: vec![], geometry: triangles, material_index: None}; - let model = three_d::renderer::CpuModel {name: resource_name.to_string(), geometries: vec![primitive], materials: vec![]}; - self.models.insert(*resource_name, model.clone()); - model - }; - ui.add(views::mesh::MeshView::new( - model.clone(), - )); - } - _ => (), - }, - _ => (), - } - } - }); + resource_info(ui, &self.bigfile, &self.resource_name); + view(ui, &self.resource_name, &self.artifacts, self.sound_volume); if self.nickname_window_open { egui::Window::new("Change resource nickname") @@ -438,9 +142,9 @@ impl eframe::App for Gui { ctx.input(|i| { if !i.raw.dropped_files.is_empty() { - self.bigfile = Some(load_bigfile( - i.raw.dropped_files.get(0).unwrap().path.as_ref().unwrap(), - )) + let path = i.raw.dropped_files.get(0).unwrap().path.as_ref().unwrap(); + self.bigfile = Some(load_bigfile(path)); + self.bigfile_path = Some(path.clone()); } }); } @@ -456,50 +160,6 @@ fn load_bigfile(path: &PathBuf) -> BigFile { BigFile::read_platform(&mut reader, platform).unwrap() } -fn get_image<'a>(resource_name: &Name, data: &Vec) -> egui::Image<'a> { - egui::Image::new( - <(String, std::vec::Vec) as Into>::into(( - format!("bytes://{}.dds", resource_name), - data.to_owned(), - )), - ) - .texture_options(egui::TextureOptions::NEAREST) - .shrink_to_fit() -} - -fn play_sound(data: Vec, sample_rate: u32, stereo: u8, volume: f32) { - std::thread::spawn(move || { - let spec = hound::WavSpec { - channels: match stereo { - 1 => 2, - _ => 1, - }, - sample_rate, - bits_per_sample: 16, - sample_format: hound::SampleFormat::Int, - }; - - let mut bytes = Vec::new(); - let mut write_cursor = Cursor::new(&mut bytes); - let mut parent_writer = hound::WavWriter::new(&mut write_cursor, spec).unwrap(); - let mut sample_writer = parent_writer.get_i16_writer(data.len() as u32); - - for sample in data { - sample_writer.write_sample(sample); - } - sample_writer.flush().unwrap(); - parent_writer.finalize().unwrap(); - - let (_stream, stream_handle) = rodio::OutputStream::try_default().unwrap(); - let sink = rodio::Sink::try_new(&stream_handle).unwrap(); - let buf = std::io::BufReader::new(Cursor::new(bytes)); - let source = rodio::Decoder::new_wav(buf).unwrap(); - sink.set_volume(volume); - sink.append(source); - sink.sleep_until_end(); - }); -} - fn preview_files_being_dropped(ctx: &egui::Context) { use std::fmt::Write as _; @@ -507,8 +167,8 @@ fn preview_files_being_dropped(ctx: &egui::Context) { if !ctx.input(|i| i.raw.hovered_files.is_empty()) { let text = ctx.input(|i| { - let mut text = "Dropping files:\n".to_owned(); - for file in &i.raw.hovered_files { + let mut text = "Dropping BigFile:\n".to_owned(); + if let Some(file) = i.raw.hovered_files.iter().next() { if let Some(path) = &file.path { write!(text, "\n{}", path.display()).ok(); } else if !file.mime.is_empty() { diff --git a/bff-gui/src/panels/central.rs b/bff-gui/src/panels/central.rs new file mode 100644 index 0000000..220ee86 --- /dev/null +++ b/bff-gui/src/panels/central.rs @@ -0,0 +1,86 @@ +use std::collections::HashMap; +use std::io::Cursor; + +use bff::names::Name; + +use crate::views::mesh::MeshView; +use crate::Artifact; + +pub fn view( + ui: &mut egui::Ui, + resource_name: &Option, + artifacts: &HashMap, + mut sound_volume: f32, +) { + // let mut response = ViewResponse::default(); + egui::CentralPanel::default().show_inside(ui, |ui| { + if let Some(resource_name) = resource_name { + let artifact = artifacts.get(resource_name); + if let Some(a) = artifact { + match a { + Artifact::Bitmap(bitmap) => { + ui.add(get_image(resource_name, bitmap)); + } + Artifact::Sound { + data, + sample_rate, + channels, + } => { + ui.add( + egui::Slider::new(&mut sound_volume, 0.0..=1.0) + .text("Volume") + .show_value(false), + ); + if ui.button("play").clicked() { + play_sound(data.clone(), *sample_rate, *channels, sound_volume); + } + } + Artifact::Mesh(model) => { + ui.add(MeshView::new(model.clone())); + } + } + } + } + }); +} + +fn get_image<'a>(resource_name: &Name, data: &Vec) -> egui::Image<'a> { + egui::Image::new( + <(String, std::vec::Vec) as Into>::into(( + format!("bytes://{}.dds", resource_name), + data.to_owned(), + )), + ) + .texture_options(egui::TextureOptions::NEAREST) + .shrink_to_fit() +} + +fn play_sound(data: Vec, sample_rate: u32, channels: u16, volume: f32) { + std::thread::spawn(move || { + let spec = hound::WavSpec { + channels, + sample_rate, + bits_per_sample: 16, + sample_format: hound::SampleFormat::Int, + }; + + let mut bytes = Vec::new(); + let mut write_cursor = Cursor::new(&mut bytes); + let mut parent_writer = hound::WavWriter::new(&mut write_cursor, spec).unwrap(); + let mut sample_writer = parent_writer.get_i16_writer(data.len() as u32); + + for sample in data { + sample_writer.write_sample(sample); + } + sample_writer.flush().unwrap(); + parent_writer.finalize().unwrap(); + + let (_stream, stream_handle) = rodio::OutputStream::try_default().unwrap(); + let sink = rodio::Sink::try_new(&stream_handle).unwrap(); + let buf = std::io::BufReader::new(Cursor::new(bytes)); + let source = rodio::Decoder::new_wav(buf).unwrap(); + sink.set_volume(volume); + sink.append(source); + sink.sleep_until_end(); + }); +} diff --git a/bff-gui/src/panels/left.rs b/bff-gui/src/panels/left.rs new file mode 100644 index 0000000..9ad155d --- /dev/null +++ b/bff-gui/src/panels/left.rs @@ -0,0 +1,216 @@ +use std::collections::HashMap; + +use bff::bigfile::resource::Resource; +use bff::bigfile::BigFile; +use bff::class::Class; +use bff::names::Name; +use bff::traits::TryIntoVersionPlatform; +use egui; +use three_d::renderer::CpuModel; +use three_d_asset::{Vec2, Vec3, Vec4}; + +use crate::Artifact; + +#[derive(Default)] +pub struct ResourceListResponse { + pub resource_context_menu: Option, + pub resource_clicked: Option, + pub artifact_created: Option<(Name, Artifact)>, +} + +pub fn resource_list( + ui: &mut egui::Ui, + bigfile: &Option, + nicknames: &HashMap, + artifacts: &HashMap, +) -> ResourceListResponse { + let mut response = ResourceListResponse::default(); + egui::SidePanel::left("left") + .resizable(true) + .width_range(70.0..=ui.available_width() / 2.0) + .show_inside(ui, |ui| { + // ui.set_width_range(150.0..=200.0); + if let Some(bigfile) = bigfile { + let version = &bigfile.manifest.version; + let platform = bigfile.manifest.platform; + let resources: Vec<&Resource> = bigfile.objects.values().collect(); + let row_height = ui.spacing().interact_size.y; + egui::ScrollArea::vertical().show_rows( + ui, + row_height, + resources.len(), + |ui, row_range| { + ui.set_min_width(ui.available_width()); + for row in row_range { + let resource = resources.get(row).unwrap(); + let nickname = nicknames.get(&resource.name); + let temp_btn = ui + .add( + egui::Button::new(format!( + "{}.{}", + match nickname { + Some(nn) => nn.to_owned(), + None => resource.name.to_string(), + }, + resource.class_name + )) + .wrap(false) + .rounding(0.0) + .min_size(egui::vec2(ui.available_width(), 0.0)), + ) + .context_menu(|ui| { + if ui.button("Change nickname").clicked() { + // self.nickname_window_open = true; + // self.nickname_editing.0 = resource.name; + response.resource_context_menu = Some(resource.name); + ui.close_menu(); + } + }); + let btn = if nickname.is_some() { + temp_btn.on_hover_ui_at_pointer(|ui| { + ui.label(resource.name.to_string()); + }) + } else { + temp_btn + }; + if btn.clicked() { + response.resource_clicked = Some(resource.name); + if artifacts.get(&resource.name).is_none() { + match (*resource) + .try_into_version_platform(version.clone(), platform) + { + Ok(class) => { + if let Some(a) = create_artifact(class, &resource.name) + { + response.artifact_created = Some((resource.name, a)) + } + } + Err(e) => { + println!("{:?}", e); + } + } + } + // self.resource_name = Some(resource.name); + } + } + }, + ); + } + }); + response +} + +fn create_artifact(class: Class, resource_name: &Name) -> Option { + match class { + Class::Bitmap(box_bitmap) => match *box_bitmap { + bff::class::bitmap::Bitmap::BitmapV1_291_03_06PC(ref bitmap) => { + Some(Artifact::Bitmap(bitmap.body.data.clone())) + } + bff::class::bitmap::Bitmap::BitmapV1_381_67_09PC(ref bitmap) => { + Some(Artifact::Bitmap(bitmap.body.data.clone())) + } + _ => None, + }, + Class::Sound(box_sound) => { + let (data, sample_rate, channels) = match *box_sound { + bff::class::sound::Sound::SoundV1_291_03_06PC(sound) => { + // let points = sound.body.data.iter().enumerate().map(|(i, s)| eframe::epaint::Pos2{x: ((i as f32 * ui.available_width()) / sound.body.data.len() as f32), y: (s / 200 + 200).into()}).collect(); + // let shape = eframe::epaint::PathShape::line(points, eframe::epaint::Stroke::new(1.0, eframe::epaint::Color32::WHITE)); + // ui.painter().add(shape); + ( + sound.body.data, + sound.body.sample_rate, + match sound.body.flags.stereo().value() { + 1 => 2, + _ => 1, + }, + ) + } + bff::class::sound::Sound::SoundV1_381_67_09PC(sound) => ( + sound.body.data, + sound.link_header.sample_rate, + match sound.link_header.flags.stereo().value() { + 1 => 2, + _ => 1, + }, + ), + }; + Some(Artifact::Sound { + data, + sample_rate, + channels, + }) + } + Class::Mesh(box_mesh) => { + match *box_mesh { + bff::class::mesh::Mesh::MeshV1_291_03_06PC(mesh) => { + let (positions, (uvs, (normals, tangents))): (Vec, (Vec, (Vec, Vec))) = mesh.body.mesh_buffer.vertex_buffers.iter().flat_map(|buf| &buf.vertex_structs).map(|vs| match vs { + bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct24 { + position, uv, .. + } => (position, uv, &[0u8; 3], [0u8; 4]), + bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct36 { + position, + uv, + normal, + tangent, + tangent_padding, + .. + } + | bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct48 { + position, + uv, + normal, + tangent, + tangent_padding, + .. + } + | bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct60 { + position, + uv, + normal, + tangent, + tangent_padding, + .. + } => (position, uv, normal, [&tangent[..], &[*tangent_padding]].concat().try_into().unwrap()), + bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStructUnknown { .. } => { + (&[0f32; 3], &[0f32; 2], &[0u8; 3], [0u8; 4]) + } + }).map(|(p, u, n, t)| (Vec3::from(*p), (Vec2::from(*u), (Vec3::from(n.map(|i| (i as f32 - 128.0) / 128.0)), Vec4::from(t.map(|i| (i as f32 - 128.0) / 128.0)))))).unzip(); + let indices: Vec = mesh + .body + .mesh_buffer + .index_buffers + .iter() + .flat_map(|buf| &buf.tris) + .flat_map(|tri| tri.indices) + .map(|i| u16::try_from(i).unwrap_or(0)) + .collect(); + let tri_mesh = three_d::geometry::CpuMesh { + positions: three_d::Positions::F32(positions), + indices: three_d::Indices::U16(indices), + normals: Some(normals), + tangents: Some(tangents), + uvs: Some(uvs), + colors: None, + }; + let triangles = three_d_asset::geometry::Geometry::Triangles(tri_mesh); + let primitive = three_d_asset::Primitive { + name: "mesh".to_string(), + transformation: three_d_asset::Mat4::from_translation([0.0; 3].into()), + animations: vec![], + geometry: triangles, + material_index: None, + }; + let model = CpuModel { + name: resource_name.to_string(), + geometries: vec![primitive], + materials: vec![], + }; + Some(Artifact::Mesh(model)) + } + _ => None, + } + } + _ => None, + } +} diff --git a/bff-gui/src/panels/mod.rs b/bff-gui/src/panels/mod.rs new file mode 100644 index 0000000..49b5079 --- /dev/null +++ b/bff-gui/src/panels/mod.rs @@ -0,0 +1,4 @@ +pub mod central; +pub mod left; +pub mod right; +pub mod top; diff --git a/bff-gui/src/panels/right.rs b/bff-gui/src/panels/right.rs new file mode 100644 index 0000000..fa10b6f --- /dev/null +++ b/bff-gui/src/panels/right.rs @@ -0,0 +1,52 @@ +use bff::bigfile::BigFile; +use bff::class::Class; +use bff::names::Name; +use bff::traits::TryIntoVersionPlatform; +use egui; + +pub fn resource_info(ui: &mut egui::Ui, bigfile: &Option, resource_name: &Option) { + egui::SidePanel::right("right") + .resizable(true) + .width_range(100.0..=ui.available_width() / 2.0) + .show_inside(ui, |ui| { + if let Some(resource_name) = resource_name { + let json = match &bigfile + .as_ref() + .unwrap() + .objects + .get(resource_name) + .unwrap() + .try_into_version_platform( + bigfile.as_ref().unwrap().manifest.version.clone(), + bigfile.as_ref().unwrap().manifest.platform, + ) { + Ok(v) => serde_json::to_string_pretty::(v).unwrap(), + Err(e) => e.to_string(), + }; + let json_lines: Vec<&str> = json + .split_inclusive('\n') + // .map(|s| s.to_string()) + .collect(); + let text_style = egui::TextStyle::Body; + egui::ScrollArea::vertical() + .id_source("code_scroll") + .show_rows( + ui, + ui.text_style_height(&text_style), + json_lines.len(), + |ui, row_range| { + let content: String = row_range + .into_iter() + .map(|i| *json_lines.get(i).unwrap()) + .collect(); + ui.set_min_width(ui.available_width()); + selectable_text(ui, content.as_str()); + }, + ); + } + }); +} + +fn selectable_text(ui: &mut egui::Ui, mut text: &str) -> egui::Response { + ui.add(egui::TextEdit::multiline(&mut text)) +} diff --git a/bff-gui/src/panels/top.rs b/bff-gui/src/panels/top.rs new file mode 100644 index 0000000..73e3314 --- /dev/null +++ b/bff-gui/src/panels/top.rs @@ -0,0 +1,183 @@ +use std::collections::HashMap; +use std::fs::File; +use std::io::Write; +use std::path::PathBuf; + +use bff::bigfile::BigFile; +use bff::class::Class; +use bff::names::Name; +use bff::traits::TryIntoVersionPlatform; +use egui; +use image::EncodableLayout; + +use crate::load_bigfile; + +#[derive(Default)] +pub struct MenubarResponse { + pub bigfile_open: Option<(BigFile, PathBuf)>, +} + +pub fn menubar( + ui: &mut egui::Ui, + frame: &mut eframe::Frame, + bigfile: &Option, + bigfile_path: &Option, + resource_name: &Option, + nicknames: &mut HashMap, +) -> MenubarResponse { + let mut response = MenubarResponse::default(); + egui::TopBottomPanel::top("top").show_inside(ui, |ui| { + ui.horizontal(|ui| { + ui.menu_button("File", |ui| { + if ui.button("Open BigFile...").clicked() { + ui.close_menu(); + if let Some(path) = rfd::FileDialog::new() + .add_filter( + "BigFile", + &bff::platforms::extensions() + .iter() + .map(|s| s.to_str().unwrap()) + .collect::>()[..], + ) + .pick_file() + { + response.bigfile_open = Some((load_bigfile(&path), path)); + } + } + if ui.button("Quit").clicked() { + frame.close(); + } + }); + ui.menu_button("Export", |ui| { + if ui + .add_enabled(resource_name.is_some(), egui::Button::new("Export JSON...")) + .clicked() + { + ui.close_menu(); + if let Some(path) = rfd::FileDialog::new() + .add_filter("json", &["json"]) + .save_file() + { + write_class( + &path, + bigfile.as_ref().unwrap(), + resource_name.as_ref().unwrap_or(&Name::default()), + ) + } + } + if ui + .add_enabled(false, egui::Button::new("Export data...")) + .clicked() + { + ui.close_menu(); + } + if ui + .add_enabled(resource_name.is_some(), egui::Button::new("Export raw...")) + .clicked() + { + ui.close_menu(); + let resource = bigfile + .as_ref() + .unwrap() + .objects + .get(&resource_name.unwrap()) + .unwrap(); + if let Some(path) = rfd::FileDialog::new() + .add_filter("raw", &[resource.class_name.to_string()]) + .save_file() + { + let data = match &resource.data { + bff::bigfile::resource::ResourceData::Data(data) => data.clone(), + bff::bigfile::resource::ResourceData::CompressibleData { + data, .. + } => data.clone(), + bff::bigfile::resource::ResourceData::ExtendedData { + link_header, + body, + .. + } => [link_header.clone(), body.clone()].concat(), + }; + File::create(path) + .unwrap() + .write_all(data.as_bytes()) + .unwrap(); + } + } + }); + ui.menu_button("Nicknames", |ui| { + if ui + .add_enabled(bigfile.is_some(), egui::Button::new("Import...")) + .clicked() + { + ui.close_menu(); + if let Some(path) = rfd::FileDialog::new() + .add_filter("json", &["json"]) + .pick_file() + { + let buf = std::io::BufReader::new(File::open(path).unwrap()); + *nicknames = serde_json::de::from_reader::< + std::io::BufReader, + HashMap, + >(buf) + .unwrap(); + } + } + + if ui + .add_enabled(!nicknames.is_empty(), egui::Button::new("Export all...")) + .clicked() + { + ui.close_menu(); + if let Some(path) = rfd::FileDialog::new() + .add_filter("json", &["json"]) + .set_file_name(format!( + "{}_nicknames", + bigfile_path + .as_ref() + .unwrap() + .file_name() + .unwrap() + .to_str() + .unwrap() + )) + .save_file() + { + File::create(path) + .unwrap() + .write_all(serde_json::to_string_pretty(nicknames).unwrap().as_bytes()) + .unwrap(); + } + } + if ui + .add_enabled(!nicknames.is_empty(), egui::Button::new("Clear all")) + .clicked() + { + ui.close_menu(); + nicknames.clear(); + } + }); + }); + }); + response +} + +fn write_class(path: &PathBuf, bigfile: &BigFile, resource_name: &Name) { + File::create(path) + .unwrap() + .write_all( + serde_json::to_string_pretty::( + &bigfile + .objects + .get(resource_name) + .unwrap() + .try_into_version_platform( + bigfile.manifest.version.clone(), + bigfile.manifest.platform, + ) + .unwrap(), + ) + .unwrap() + .as_bytes(), + ) + .unwrap(); +} From 10bf5ad1050da2bfa63348c6714fa85f6524b4d4 Mon Sep 17 00:00:00 2001 From: pizzart <7o7goo7o7@gmail.com> Date: Wed, 18 Oct 2023 16:09:18 +0300 Subject: [PATCH 07/16] optimize mesh rendering and use arc, fix sound volume --- bff-gui/src/main.rs | 33 +++++++++----- bff-gui/src/panels/central.rs | 39 ++++++++++------ bff-gui/src/panels/left.rs | 30 ++++++++----- bff-gui/src/panels/right.rs | 23 ++-------- bff-gui/src/views/mesh.rs | 83 ++++++++++++++++++++++------------- 5 files changed, 122 insertions(+), 86 deletions(-) diff --git a/bff-gui/src/main.rs b/bff-gui/src/main.rs index 08bf600..605bd7a 100644 --- a/bff-gui/src/main.rs +++ b/bff-gui/src/main.rs @@ -3,6 +3,7 @@ use std::collections::HashMap; use std::fs::File; use std::path::PathBuf; +use std::sync::Arc; use bff::bigfile::BigFile; use bff::names::Name; @@ -21,11 +22,11 @@ mod views; pub enum Artifact { Bitmap(Vec), Sound { - data: Vec, + data: Arc>, sample_rate: u32, channels: u16, }, - Mesh(CpuModel), + Mesh(Arc), } fn main() -> Result<(), eframe::Error> { @@ -51,7 +52,7 @@ struct Gui { nickname_window_open: bool, nickname_editing: (Name, String), artifacts: HashMap, - sound_volume: f32, + infos: HashMap, } impl Gui { @@ -66,7 +67,7 @@ impl Gui { nickname_window_open: false, nickname_editing: (Name::default(), String::new()), artifacts: HashMap::new(), - sound_volume: 1.0, + infos: HashMap::new(), } } } @@ -91,21 +92,31 @@ impl eframe::App for Gui { self.resource_name = None; } - let resource_list_response = - resource_list(ui, &self.bigfile, &self.nicknames, &self.artifacts); + let resource_list_response = resource_list( + ui, + &self.bigfile, + &self.nicknames, + &self.artifacts, + &self.infos, + ); if let Some(name) = resource_list_response.resource_context_menu { self.nickname_window_open = true; self.nickname_editing.0 = name; } if let Some(name) = resource_list_response.resource_clicked { self.resource_name = Some(name); - } - if let Some((name, artifact)) = resource_list_response.artifact_created { - self.artifacts.insert(name, artifact); + if let Some(artifact) = resource_list_response.artifact_created { + self.artifacts.insert(name, artifact); + } + if let Some(info) = resource_list_response.info_created { + self.infos.insert(name, info); + } } - resource_info(ui, &self.bigfile, &self.resource_name); - view(ui, &self.resource_name, &self.artifacts, self.sound_volume); + if let Some(name) = self.resource_name { + resource_info(ui, self.infos.get(&name)); + } + view(ui, "center".into(), &self.resource_name, &self.artifacts); if self.nickname_window_open { egui::Window::new("Change resource nickname") diff --git a/bff-gui/src/panels/central.rs b/bff-gui/src/panels/central.rs index 220ee86..c24aa75 100644 --- a/bff-gui/src/panels/central.rs +++ b/bff-gui/src/panels/central.rs @@ -1,5 +1,6 @@ use std::collections::HashMap; use std::io::Cursor; +use std::sync::{Arc, Mutex}; use bff::names::Name; @@ -8,9 +9,9 @@ use crate::Artifact; pub fn view( ui: &mut egui::Ui, + id_source: egui::Id, resource_name: &Option, artifacts: &HashMap, - mut sound_volume: f32, ) { // let mut response = ViewResponse::default(); egui::CentralPanel::default().show_inside(ui, |ui| { @@ -26,17 +27,29 @@ pub fn view( sample_rate, channels, } => { - ui.add( - egui::Slider::new(&mut sound_volume, 0.0..=1.0) + let mut volume = match ui + .memory(|mem| mem.data.get_temp::>>(id_source)) + { + Some(val) => *val.lock().unwrap(), + None => 1.0, + }; + let response = ui.add( + egui::Slider::new(&mut volume, 0.0..=1.0) .text("Volume") .show_value(false), ); + if response.changed() { + ui.memory_mut(|mem| { + mem.data + .insert_temp(id_source, Arc::new(Mutex::new(volume))) + }); + } if ui.button("play").clicked() { - play_sound(data.clone(), *sample_rate, *channels, sound_volume); + play_sound(Arc::clone(data), *sample_rate, *channels, volume); } } Artifact::Mesh(model) => { - ui.add(MeshView::new(model.clone())); + ui.add(MeshView::new(Arc::clone(model))); } } } @@ -45,17 +58,15 @@ pub fn view( } fn get_image<'a>(resource_name: &Name, data: &Vec) -> egui::Image<'a> { - egui::Image::new( - <(String, std::vec::Vec) as Into>::into(( - format!("bytes://{}.dds", resource_name), - data.to_owned(), - )), - ) + egui::Image::new(<(String, Vec) as Into>::into(( + format!("bytes://{}.dds", resource_name), + data.to_owned(), + ))) .texture_options(egui::TextureOptions::NEAREST) .shrink_to_fit() } -fn play_sound(data: Vec, sample_rate: u32, channels: u16, volume: f32) { +fn play_sound(data: Arc>, sample_rate: u32, channels: u16, volume: f32) { std::thread::spawn(move || { let spec = hound::WavSpec { channels, @@ -69,8 +80,8 @@ fn play_sound(data: Vec, sample_rate: u32, channels: u16, volume: f32) { let mut parent_writer = hound::WavWriter::new(&mut write_cursor, spec).unwrap(); let mut sample_writer = parent_writer.get_i16_writer(data.len() as u32); - for sample in data { - sample_writer.write_sample(sample); + for sample in data.iter() { + sample_writer.write_sample(*sample); } sample_writer.flush().unwrap(); parent_writer.finalize().unwrap(); diff --git a/bff-gui/src/panels/left.rs b/bff-gui/src/panels/left.rs index 9ad155d..9b75505 100644 --- a/bff-gui/src/panels/left.rs +++ b/bff-gui/src/panels/left.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use std::{collections::HashMap, sync::Arc}; use bff::bigfile::resource::Resource; use bff::bigfile::BigFile; @@ -15,7 +15,8 @@ use crate::Artifact; pub struct ResourceListResponse { pub resource_context_menu: Option, pub resource_clicked: Option, - pub artifact_created: Option<(Name, Artifact)>, + pub artifact_created: Option, + pub info_created: Option, } pub fn resource_list( @@ -23,6 +24,7 @@ pub fn resource_list( bigfile: &Option, nicknames: &HashMap, artifacts: &HashMap, + infos: &HashMap, ) -> ResourceListResponse { let mut response = ResourceListResponse::default(); egui::SidePanel::left("left") @@ -75,14 +77,20 @@ pub fn resource_list( }; if btn.clicked() { response.resource_clicked = Some(resource.name); - if artifacts.get(&resource.name).is_none() { + if artifacts.get(&resource.name).is_none() + || infos.get(&resource.name).is_none() + { match (*resource) .try_into_version_platform(version.clone(), platform) { Ok(class) => { + response.info_created = Some( + serde_json::to_string_pretty::(&class) + .unwrap(), + ); if let Some(a) = create_artifact(class, &resource.name) { - response.artifact_created = Some((resource.name, a)) + response.artifact_created = Some(a); } } Err(e) => { @@ -103,11 +111,11 @@ pub fn resource_list( fn create_artifact(class: Class, resource_name: &Name) -> Option { match class { Class::Bitmap(box_bitmap) => match *box_bitmap { - bff::class::bitmap::Bitmap::BitmapV1_291_03_06PC(ref bitmap) => { - Some(Artifact::Bitmap(bitmap.body.data.clone())) + bff::class::bitmap::Bitmap::BitmapV1_291_03_06PC(bitmap) => { + Some(Artifact::Bitmap(bitmap.body.data)) } - bff::class::bitmap::Bitmap::BitmapV1_381_67_09PC(ref bitmap) => { - Some(Artifact::Bitmap(bitmap.body.data.clone())) + bff::class::bitmap::Bitmap::BitmapV1_381_67_09PC(bitmap) => { + Some(Artifact::Bitmap(bitmap.body.data)) } _ => None, }, @@ -136,7 +144,7 @@ fn create_artifact(class: Class, resource_name: &Name) -> Option { ), }; Some(Artifact::Sound { - data, + data: Arc::new(data), sample_rate, channels, }) @@ -175,7 +183,7 @@ fn create_artifact(class: Class, resource_name: &Name) -> Option { bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStructUnknown { .. } => { (&[0f32; 3], &[0f32; 2], &[0u8; 3], [0u8; 4]) } - }).map(|(p, u, n, t)| (Vec3::from(*p), (Vec2::from(*u), (Vec3::from(n.map(|i| (i as f32 - 128.0) / 128.0)), Vec4::from(t.map(|i| (i as f32 - 128.0) / 128.0)))))).unzip(); + }).map(|(p, u, n, t)| (Vec3::from(*p), (Vec2::from(*u), ({let mut norm = n.map(|i| (i as f32 - 128.0) / 128.0); norm[2] *= -1.0; Vec3::from(norm)}, Vec4::from(t.map(|i| (i as f32 - 128.0) / 128.0)))))).unzip(); let indices: Vec = mesh .body .mesh_buffer @@ -206,7 +214,7 @@ fn create_artifact(class: Class, resource_name: &Name) -> Option { geometries: vec![primitive], materials: vec![], }; - Some(Artifact::Mesh(model)) + Some(Artifact::Mesh(Arc::new(model))) } _ => None, } diff --git a/bff-gui/src/panels/right.rs b/bff-gui/src/panels/right.rs index fa10b6f..95d043d 100644 --- a/bff-gui/src/panels/right.rs +++ b/bff-gui/src/panels/right.rs @@ -1,29 +1,12 @@ -use bff::bigfile::BigFile; -use bff::class::Class; -use bff::names::Name; -use bff::traits::TryIntoVersionPlatform; use egui; -pub fn resource_info(ui: &mut egui::Ui, bigfile: &Option, resource_name: &Option) { +pub fn resource_info(ui: &mut egui::Ui, info: Option<&String>) { egui::SidePanel::right("right") .resizable(true) .width_range(100.0..=ui.available_width() / 2.0) .show_inside(ui, |ui| { - if let Some(resource_name) = resource_name { - let json = match &bigfile - .as_ref() - .unwrap() - .objects - .get(resource_name) - .unwrap() - .try_into_version_platform( - bigfile.as_ref().unwrap().manifest.version.clone(), - bigfile.as_ref().unwrap().manifest.platform, - ) { - Ok(v) => serde_json::to_string_pretty::(v).unwrap(), - Err(e) => e.to_string(), - }; - let json_lines: Vec<&str> = json + if let Some(info) = info { + let json_lines: Vec<&str> = info .split_inclusive('\n') // .map(|s| s.to_string()) .collect(); diff --git a/bff-gui/src/views/mesh.rs b/bff-gui/src/views/mesh.rs index 0af79a3..cefcbc2 100644 --- a/bff-gui/src/views/mesh.rs +++ b/bff-gui/src/views/mesh.rs @@ -1,12 +1,14 @@ +use std::sync::Arc; + use eframe::egui; use three_d::*; pub struct MeshView { - model: CpuModel, + model: Arc, } impl MeshView { - pub fn new(model: CpuModel) -> Self { + pub fn new(model: Arc) -> Self { Self { model } } } @@ -16,7 +18,7 @@ impl egui::Widget for MeshView { egui::Frame::canvas(ui.style()) .show(ui, |ui| { let (rect, response) = - ui.allocate_exact_size(ui.available_size(), egui::Sense::drag()); + ui.allocate_exact_size(ui.available_size(), egui::Sense::click_and_drag()); // let ang = // match ui.memory(|mem| mem.data.get_temp::>>(self.id_source)) { @@ -29,7 +31,11 @@ impl egui::Widget for MeshView { // .insert_temp(self.id_source, Arc::new(Mutex::new(self.angle))) // }); - let angle = response.drag_delta() * 0.05; + let angle = if response.dragged_by(egui::PointerButton::Primary) { + response.drag_delta() * 0.05 + } else { + egui::Vec2::ZERO + }; let callback = egui::PaintCallback { rect, @@ -51,37 +57,34 @@ impl egui::Widget for MeshView { } fn with_three_d( - cpu_model: &CpuModel, + cpu_model: &Arc, gl: &std::sync::Arc, f: impl FnOnce(&mut ThreeDApp) -> R, ) -> R { use std::cell::RefCell; thread_local! { pub static THREE_D: RefCell> = RefCell::new(None); - pub static MODEL: RefCell> = RefCell::new(None); + pub static MODEL: RefCell>> = RefCell::new(None); } THREE_D.with(|three_d| { + let mut three_d = three_d.borrow_mut(); + let new = three_d.get_or_insert_with(|| ThreeDApp::new(cpu_model, Arc::clone(gl))); MODEL.with(|model| { - let mut three_d = three_d.borrow_mut(); let mut model = model.borrow_mut(); if let Some(m) = model.as_ref() { if m.name != cpu_model.name { - model.replace(cpu_model.clone()); - three_d.as_mut().unwrap().set_model(cpu_model, gl.clone()) + model.replace(Arc::clone(cpu_model)); + new.set_model(cpu_model, Arc::clone(gl)); } } else { - model.replace(cpu_model.clone()); + model.replace(Arc::clone(cpu_model)); } - let new = three_d.get_or_insert(ThreeDApp::new(cpu_model, gl.clone())); - f(new) - }) + }); + f(new) }) } -/// -/// Translates from egui input to three-d input -/// pub struct ConvertedFrameInput<'a> { screen: three_d::RenderTarget<'a>, viewport: three_d::Viewport, @@ -155,7 +158,7 @@ pub struct ThreeDApp { } impl ThreeDApp { - pub fn new(cpu_model: &CpuModel, gl: std::sync::Arc) -> Self { + pub fn new(cpu_model: &CpuModel, gl: Arc) -> Self { let context = Context::from_gl_context(gl).unwrap(); let camera = Camera::new_perspective( Viewport::new_at_origo(1, 1), @@ -166,7 +169,7 @@ impl ThreeDApp { 0.1, 10.0, ); - let model = Model::new(&context, cpu_model).unwrap(); + let model = Self::cpu_model_to_gpu(cpu_model, &context); Self { context, camera, @@ -174,9 +177,20 @@ impl ThreeDApp { } } - pub fn set_model(&mut self, cpu_model: &CpuModel, gl: std::sync::Arc) { + fn cpu_model_to_gpu( + cpu_model: &CpuModel, + context: &three_d::core::Context, + ) -> Model { + let model = Model::::new(context, cpu_model).unwrap(); + // model.iter_mut().for_each(|m| { + // m.material = NormalMaterial::new(context, &three_d_asset::PbrMaterial::default()); + // }); + model + } + + pub fn set_model(&mut self, cpu_model: &CpuModel, gl: Arc) { let context = Context::from_gl_context(gl).unwrap(); - self.model = Model::new(&context, cpu_model).unwrap(); + self.model = Self::cpu_model_to_gpu(cpu_model, &context); } pub fn frame( @@ -188,6 +202,7 @@ impl ThreeDApp { self.camera .rotate_around_with_fixed_up(&Vector3::zero(), angle.x, angle.y); + // self.camera.zoom_towards(point, delta, minimum_distance, maximum_distance) frame_input .screen @@ -196,16 +211,24 @@ impl ThreeDApp { frame_input.scissor_box, &self.camera, &self.model, - &[&AmbientLight::new( - &self.context, - 1.0, - Srgba { - r: 255, - g: 255, - b: 255, - a: 255, - }, - )], + &[ + // &AmbientLight::new( + // &self.context, + // 0.5, + // Srgba { + // r: 255, + // g: 255, + // b: 255, + // a: 255, + // }, + // ), + &DirectionalLight::new( + &self.context, + 10.0, + Srgba::WHITE, + &vec3(0.0, -1.0, -1.0), + ), + ], ); frame_input.screen.into_framebuffer() From a9104cfbf699df0266ab1c57b2fa3e3fed963795 Mon Sep 17 00:00:00 2001 From: pizzart <7o7goo7o7@gmail.com> Date: Wed, 18 Oct 2023 19:53:15 +0300 Subject: [PATCH 08/16] skins with broken materials --- bff-gui/src/main.rs | 1 + bff-gui/src/panels/central.rs | 3 + bff-gui/src/panels/left.rs | 255 +++++++++++++++++----- bff-gui/src/views/mesh.rs | 6 +- bff/src/class/material/v1_291_03_06_pc.rs | 6 +- bff/src/class/mesh/v1_291_03_06_pc.rs | 8 +- bff/src/class/skin/v1_291_03_06_pc.rs | 12 +- 7 files changed, 221 insertions(+), 70 deletions(-) diff --git a/bff-gui/src/main.rs b/bff-gui/src/main.rs index 605bd7a..6436dbf 100644 --- a/bff-gui/src/main.rs +++ b/bff-gui/src/main.rs @@ -27,6 +27,7 @@ pub enum Artifact { channels: u16, }, Mesh(Arc), + Skin(Arc), } fn main() -> Result<(), eframe::Error> { diff --git a/bff-gui/src/panels/central.rs b/bff-gui/src/panels/central.rs index c24aa75..0aab472 100644 --- a/bff-gui/src/panels/central.rs +++ b/bff-gui/src/panels/central.rs @@ -51,6 +51,9 @@ pub fn view( Artifact::Mesh(model) => { ui.add(MeshView::new(Arc::clone(model))); } + Artifact::Skin(skin) => { + ui.add(MeshView::new(Arc::clone(skin))); + } } } } diff --git a/bff-gui/src/panels/left.rs b/bff-gui/src/panels/left.rs index 9b75505..9febc34 100644 --- a/bff-gui/src/panels/left.rs +++ b/bff-gui/src/panels/left.rs @@ -88,7 +88,8 @@ pub fn resource_list( serde_json::to_string_pretty::(&class) .unwrap(), ); - if let Some(a) = create_artifact(class, &resource.name) + if let Some(a) = + create_artifact(bigfile, class, &resource.name) { response.artifact_created = Some(a); } @@ -108,7 +109,7 @@ pub fn resource_list( response } -fn create_artifact(class: Class, resource_name: &Name) -> Option { +fn create_artifact(bigfile: &BigFile, class: Class, resource_name: &Name) -> Option { match class { Class::Bitmap(box_bitmap) => match *box_bitmap { bff::class::bitmap::Bitmap::BitmapV1_291_03_06PC(bitmap) => { @@ -149,41 +150,195 @@ fn create_artifact(class: Class, resource_name: &Name) -> Option { channels, }) } - Class::Mesh(box_mesh) => { - match *box_mesh { - bff::class::mesh::Mesh::MeshV1_291_03_06PC(mesh) => { - let (positions, (uvs, (normals, tangents))): (Vec, (Vec, (Vec, Vec))) = mesh.body.mesh_buffer.vertex_buffers.iter().flat_map(|buf| &buf.vertex_structs).map(|vs| match vs { - bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct24 { - position, uv, .. - } => (position, uv, &[0u8; 3], [0u8; 4]), - bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct36 { - position, - uv, - normal, - tangent, - tangent_padding, - .. + Class::Mesh(box_mesh) => match get_mesh(*box_mesh) { + Some(tri_meshes) => { + let primitives = tri_meshes + .into_iter() + .map(|m| { + let triangles = three_d_asset::geometry::Geometry::Triangles(m); + three_d_asset::Primitive { + name: "mesh".to_string(), + transformation: three_d_asset::Mat4::from_translation([0.0; 3].into()), + animations: vec![], + geometry: triangles, + material_index: None, } - | bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct48 { - position, - uv, - normal, - tangent, - tangent_padding, - .. + }) + .collect(); + let model = CpuModel { + name: resource_name.to_string(), + geometries: primitives, + materials: vec![], + }; + Some(Artifact::Mesh(Arc::new(model))) + } + None => None, + }, + Class::Skin(box_skin) => match *box_skin { + bff::class::skin::Skin::SkinV1_291_03_06PC(skin) => { + let tri_meshes: Vec = skin + .body + .mesh_crc32s + .iter() + .flat_map(|n| { + let res = bigfile.objects.get(n).unwrap(); + let class: Class = res + .try_into_version_platform( + bigfile.manifest.version.clone(), + bigfile.manifest.platform, + ) + .unwrap(); + match class { + Class::Mesh(box_mesh) => get_mesh(*box_mesh).unwrap(), + _ => panic!("not a mesh?"), + } + }) + .enumerate() + .map(|(i, mesh)| { + let triangles = three_d_asset::geometry::Geometry::Triangles(mesh); + three_d_asset::Primitive { + name: format!("skin-part{}", i), + transformation: three_d_asset::Mat4::from_translation([0.0; 3].into()), + animations: vec![], + geometry: triangles, + material_index: Some(i), } - | bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct60 { - position, - uv, - normal, - tangent, - tangent_padding, - .. - } => (position, uv, normal, [&tangent[..], &[*tangent_padding]].concat().try_into().unwrap()), - bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStructUnknown { .. } => { - (&[0f32; 3], &[0f32; 2], &[0u8; 3], [0u8; 4]) + }) + .collect(); + let materials = skin + .body + .skin_sections + .iter() + .flat_map(|section| §ion.skin_sub_sections.inner) + .enumerate() + .map(|(i, subsection)| { + if let Some(res) = bigfile.objects.get(&subsection.material_crc32) { + let class: Class = res + .try_into_version_platform( + bigfile.manifest.version.clone(), + bigfile.manifest.platform, + ) + .unwrap(); + match class { + Class::Material(box_material) => match *box_material { + bff::class::material::Material::MaterialV1_291_03_06PC( + material, + ) => three_d::renderer::material::CpuMaterial { + name: format!("{}-mat{}", subsection.material_crc32, i), + albedo: material.body.diffuse_color.into(), + emissive: material.body.emissive_color.into(), + ..Default::default() + }, + _ => todo!(), + }, + _ => panic!("not a material?"), + } + } else { + three_d::renderer::material::CpuMaterial { + name: format!("{}-mat", subsection.material_crc32), + ..Default::default() + } } - }).map(|(p, u, n, t)| (Vec3::from(*p), (Vec2::from(*u), ({let mut norm = n.map(|i| (i as f32 - 128.0) / 128.0); norm[2] *= -1.0; Vec3::from(norm)}, Vec4::from(t.map(|i| (i as f32 - 128.0) / 128.0)))))).unzip(); + }) + .collect(); + + let model = three_d::renderer::object::CpuModel { + name: resource_name.to_string(), + geometries: tri_meshes, + materials, + }; + Some(Artifact::Skin(Arc::new(model))) + } + _ => None, + }, + _ => None, + } +} + +fn get_mesh(mesh: bff::class::mesh::Mesh) -> Option> { + match mesh { + bff::class::mesh::Mesh::MeshV1_291_03_06PC(mesh) => { + let tri_meshes = mesh + .body + .mesh_buffer + .vertex_groups + .iter() + .map(|group| { + // println!("{}", mesh.body.mesh_buffer.vertex_buffers.len()); + let (positions, (uvs, (normals, tangents))): ( + Vec, + (Vec, (Vec, Vec)), + ) = mesh + .body + .mesh_buffer + .vertex_buffers + .iter() + .flat_map(|buf| &buf.vertex_structs) + .collect::>() + [group.vertex_offset_in_groups as usize + ..group.vertex_offset_in_groups as usize + group.vertex_count as usize] + .iter() + .map(|vs| { + match vs { + bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct24 { + position, + uv, + .. + } => (position, uv, &[0u8; 3], [0u8; 4]), + bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct36 { + position, + uv, + normal, + tangent, + tangent_padding, + .. + } + | bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct48 { + position, + uv, + normal, + tangent, + tangent_padding, + .. + } + | bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStruct60 { + position, + uv, + normal, + tangent, + tangent_padding, + .. + } => ( + position, + uv, + normal, + [&tangent[..], &[*tangent_padding]] + .concat() + .try_into() + .unwrap(), + ), + bff::class::mesh::v1_291_03_06_pc::VertexStruct::VertexStructUnknown { + .. + } => (&[0f32; 3], &[0f32; 2], &[0u8; 3], [0u8; 4]), + } + }) + .map(|(p, u, n, t)| { + ( + Vec3::from(*p), + ( + Vec2::from(*u), + ( + { + let mut norm = n.map(|i| (i as f32 - 128.0) / 128.0); + norm[2] *= -1.0; + Vec3::from(norm) + }, + Vec4::from(t.map(|i| (i as f32 - 128.0) / 128.0)), + ), + ), + ) + }) + .unzip(); let indices: Vec = mesh .body .mesh_buffer @@ -191,33 +346,25 @@ fn create_artifact(class: Class, resource_name: &Name) -> Option { .iter() .flat_map(|buf| &buf.tris) .flat_map(|tri| tri.indices) - .map(|i| u16::try_from(i).unwrap_or(0)) + .collect::>()[group + .index_buffer_offset_in_shorts + as usize + ..group.index_buffer_offset_in_shorts as usize + + group.face_count as usize * 3] + .iter() + .map(|i| u16::try_from(*i).unwrap_or(0) - group.vertex_offset_in_groups) .collect(); - let tri_mesh = three_d::geometry::CpuMesh { + three_d::geometry::CpuMesh { positions: three_d::Positions::F32(positions), indices: three_d::Indices::U16(indices), normals: Some(normals), tangents: Some(tangents), uvs: Some(uvs), colors: None, - }; - let triangles = three_d_asset::geometry::Geometry::Triangles(tri_mesh); - let primitive = three_d_asset::Primitive { - name: "mesh".to_string(), - transformation: three_d_asset::Mat4::from_translation([0.0; 3].into()), - animations: vec![], - geometry: triangles, - material_index: None, - }; - let model = CpuModel { - name: resource_name.to_string(), - geometries: vec![primitive], - materials: vec![], - }; - Some(Artifact::Mesh(Arc::new(model))) - } - _ => None, - } + } + }) + .collect(); + Some(tri_meshes) } _ => None, } diff --git a/bff-gui/src/views/mesh.rs b/bff-gui/src/views/mesh.rs index cefcbc2..b26f35f 100644 --- a/bff-gui/src/views/mesh.rs +++ b/bff-gui/src/views/mesh.rs @@ -154,7 +154,7 @@ impl ConvertedFrameInput<'_> { pub struct ThreeDApp { context: Context, camera: Camera, - pub model: Model, + pub model: Model, } impl ThreeDApp { @@ -180,8 +180,8 @@ impl ThreeDApp { fn cpu_model_to_gpu( cpu_model: &CpuModel, context: &three_d::core::Context, - ) -> Model { - let model = Model::::new(context, cpu_model).unwrap(); + ) -> Model { + let model = Model::::new(context, cpu_model).unwrap(); // model.iter_mut().for_each(|m| { // m.material = NormalMaterial::new(context, &three_d_asset::PbrMaterial::default()); // }); diff --git a/bff/src/class/material/v1_291_03_06_pc.rs b/bff/src/class/material/v1_291_03_06_pc.rs index 5f621f8..e8d99ef 100644 --- a/bff/src/class/material/v1_291_03_06_pc.rs +++ b/bff/src/class/material/v1_291_03_06_pc.rs @@ -8,8 +8,8 @@ use crate::helpers::{Mat3f, RGB, RGBA}; #[derive(BinRead, Debug, Serialize, BinWrite, Deserialize, ReferencedNames)] #[br(import(_link_header: &()))] pub struct MaterialBodyV1_291_03_06PC { - diffuse_color: RGBA, - emissive_color: RGB, + pub diffuse_color: RGBA, + pub emissive_color: RGB, cdcdcdcd: u32, uv_transform_matrix: Mat3f, unknown1s: [f32; 8], @@ -24,7 +24,7 @@ pub struct MaterialBodyV1_291_03_06PC { 3 => 2, _ => 4, })] - textures: Vec, + pub textures: Vec, } pub type MaterialV1_291_03_06PC = TrivialClass<(), MaterialBodyV1_291_03_06PC>; diff --git a/bff/src/class/mesh/v1_291_03_06_pc.rs b/bff/src/class/mesh/v1_291_03_06_pc.rs index 85d57d4..dfd17ca 100644 --- a/bff/src/class/mesh/v1_291_03_06_pc.rs +++ b/bff/src/class/mesh/v1_291_03_06_pc.rs @@ -183,11 +183,11 @@ pub struct IndexBuffer { pub struct VertexGroup { zeroes: Vec3, primitive: u32, - vertex_offset_in_groups: u16, + pub vertex_offset_in_groups: u16, unknown0: u16, - vertex_count: u32, - index_buffer_offset_in_shorts: u32, - face_count: u32, + pub vertex_count: u32, + pub index_buffer_offset_in_shorts: u32, + pub face_count: u32, unknown1: u32, unknown2: u32, vertex_size: u16, diff --git a/bff/src/class/skin/v1_291_03_06_pc.rs b/bff/src/class/skin/v1_291_03_06_pc.rs index 0a18681..eb71881 100644 --- a/bff/src/class/skin/v1_291_03_06_pc.rs +++ b/bff/src/class/skin/v1_291_03_06_pc.rs @@ -43,22 +43,22 @@ struct MorphPacket { } #[derive(BinRead, Debug, Serialize, BinWrite, Deserialize, ReferencedNames)] -struct SkinSubSection { - material_crc32: Name, +pub struct SkinSubSection { + pub material_crc32: Name, bone_node_name_crc32s: [Name; 7], placeholder_morph_packet_da: MorphPacketDA, morph_packets: DynArray, } #[derive(BinRead, Debug, Serialize, BinWrite, Deserialize, ReferencedNames)] -struct SkinSection { - skin_sub_sections: DynArray, +pub struct SkinSection { + pub skin_sub_sections: DynArray, } #[derive(BinRead, Debug, Serialize, BinWrite, Deserialize, ReferencedNames)] #[br(import(_link_header: &ObjectLinkHeaderV1_06_63_02PC))] pub struct SkinBodyV1_291_03_06PC { - mesh_crc32s: DynArray, + pub mesh_crc32s: DynArray, unknown0s: DynArray, bones: DynArray, is_class_id: u8, @@ -67,7 +67,7 @@ pub struct SkinBodyV1_291_03_06PC { #[br(if(is_class_id != 0))] sound_class_ids: Option>, matrix_cache_check: u32, - skin_sections: DynArray, + pub skin_sections: DynArray, } pub type SkinV1_291_03_06PC = TrivialClass; From 3c40ae63c1a69f97edec6323457fb0b9ce77add8 Mon Sep 17 00:00:00 2001 From: pizzart <7o7goo7o7@gmail.com> Date: Wed, 18 Oct 2023 20:48:07 +0300 Subject: [PATCH 09/16] update workflow --- .github/workflows/build.yml | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 567af85..8e91582 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,31 +9,34 @@ jobs: strategy: matrix: name: [linux, windows, macos] + bin: [bff-cli, bff-gui] include: - name: linux os: ubuntu-latest - bff_cli_executable_name: bff-cli - name: windows os: windows-latest - bff_cli_executable_name: bff-cli.exe + bin_extension: .exe - name: macos os: macos-latest - bff_cli_executable_name: bff-cli steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v1 - - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: stable + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable - - name: Build - run: cargo build --release --locked + - name: Install GTK3 + run: sudo apt-get -y install libgtk-3-dev + if: matrix.name == 'linux' - - name: Archive Artifacts - uses: actions/upload-artifact@v3 - with: - name: bff-${{ matrix.name }}-${{ github.sha }} - path: ./target/release/${{ matrix.bff_cli_executable_name }} + - name: Build + run: cargo build --release --locked + + - name: Archive Artifacts + uses: actions/upload-artifact@v3 + with: + name: ${{ matrix.bin }}-${{ matrix.name }}-${{ github.sha }} + path: ./target/release/${{ matrix.bin }}${{ matrix.bin_extension }} From 505afb1eadcc18b742e92c9cb9ae5c579f7c2ba0 Mon Sep 17 00:00:00 2001 From: pizzart <7o7goo7o7@gmail.com> Date: Wed, 18 Oct 2023 20:48:32 +0300 Subject: [PATCH 10/16] oops --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8e91582..2713900 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,7 +30,7 @@ jobs: - name: Install GTK3 run: sudo apt-get -y install libgtk-3-dev - if: matrix.name == 'linux' + if: matrix.name == 'linux' && matrix.bin == 'bff-gui' - name: Build run: cargo build --release --locked From 7e21b990f4c78263b301e0e5f6461e388d4fad98 Mon Sep 17 00:00:00 2001 From: pizzart <7o7goo7o7@gmail.com> Date: Wed, 18 Oct 2023 20:54:11 +0300 Subject: [PATCH 11/16] more linux deps --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2713900..385e959 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,8 +28,8 @@ jobs: profile: minimal toolchain: stable - - name: Install GTK3 - run: sudo apt-get -y install libgtk-3-dev + - name: Install dependencies (Linux) + run: sudo apt-get -y install libgtk-3-dev alsa-base if: matrix.name == 'linux' && matrix.bin == 'bff-gui' - name: Build From 438b0b1ed71b49f61918b7e26722533e51769ecd Mon Sep 17 00:00:00 2001 From: pizzart <7o7goo7o7@gmail.com> Date: Wed, 18 Oct 2023 20:59:03 +0300 Subject: [PATCH 12/16] uhh --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 385e959..0311283 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -33,7 +33,7 @@ jobs: if: matrix.name == 'linux' && matrix.bin == 'bff-gui' - name: Build - run: cargo build --release --locked + run: cargo build --release --locked --bin ${{ matrix.bin }} - name: Archive Artifacts uses: actions/upload-artifact@v3 From 6724689c0d6c07608f750c8f53682e2480a7cb90 Mon Sep 17 00:00:00 2001 From: pizzart <7o7goo7o7@gmail.com> Date: Wed, 18 Oct 2023 21:04:04 +0300 Subject: [PATCH 13/16] WRONG ALSA PACKAGE --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0311283..265ec13 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,7 +29,7 @@ jobs: toolchain: stable - name: Install dependencies (Linux) - run: sudo apt-get -y install libgtk-3-dev alsa-base + run: sudo apt-get -y install libgtk-3-dev libasound2-dev if: matrix.name == 'linux' && matrix.bin == 'bff-gui' - name: Build From 2769bd30c09fc72decf5647d65b75d69c2ccc91b Mon Sep 17 00:00:00 2001 From: pizzart <7o7goo7o7@gmail.com> Date: Sat, 21 Oct 2023 02:32:07 +0300 Subject: [PATCH 14/16] filters --- bff-gui/src/main.rs | 11 +++- bff-gui/src/panels/left.rs | 106 ++++++++++++++++++++++++++++++++++++- 2 files changed, 113 insertions(+), 4 deletions(-) diff --git a/bff-gui/src/main.rs b/bff-gui/src/main.rs index 6436dbf..065637d 100644 --- a/bff-gui/src/main.rs +++ b/bff-gui/src/main.rs @@ -1,4 +1,4 @@ -// #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release use std::collections::HashMap; use std::fs::File; @@ -31,7 +31,6 @@ pub enum Artifact { } fn main() -> Result<(), eframe::Error> { - // env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`). let options = eframe::NativeOptions { drag_and_drop_support: true, renderer: eframe::Renderer::Glow, @@ -95,6 +94,14 @@ impl eframe::App for Gui { let resource_list_response = resource_list( ui, + format!( + "resources-{}", + self.bigfile_path + .as_ref() + .unwrap_or(&PathBuf::default()) + .display() + ) //TODO: implement state properly. this takes more memory the more bigfiles you open, though not critical + .into(), &self.bigfile, &self.nicknames, &self.artifacts, diff --git a/bff-gui/src/panels/left.rs b/bff-gui/src/panels/left.rs index 9febc34..f894e59 100644 --- a/bff-gui/src/panels/left.rs +++ b/bff-gui/src/panels/left.rs @@ -1,4 +1,7 @@ -use std::{collections::HashMap, sync::Arc}; +use std::{ + collections::{HashMap, HashSet}, + sync::{Arc, Mutex}, +}; use bff::bigfile::resource::Resource; use bff::bigfile::BigFile; @@ -11,6 +14,27 @@ use three_d_asset::{Vec2, Vec3, Vec4}; use crate::Artifact; +#[derive(Clone, PartialEq)] +enum ListSort { + Name, + // NameReverse, + // Ext, + // ExtReverse, +} + +impl Default for ListSort { + fn default() -> Self { + Self::Name + } +} + +#[derive(Default, Clone, PartialEq)] +struct ResourceListState { + sort: ListSort, + filter: Option>, + // order: Option>, +} + #[derive(Default)] pub struct ResourceListResponse { pub resource_context_menu: Option, @@ -21,6 +45,7 @@ pub struct ResourceListResponse { pub fn resource_list( ui: &mut egui::Ui, + id_source: egui::Id, bigfile: &Option, nicknames: &HashMap, artifacts: &HashMap, @@ -35,7 +60,84 @@ pub fn resource_list( if let Some(bigfile) = bigfile { let version = &bigfile.manifest.version; let platform = bigfile.manifest.platform; - let resources: Vec<&Resource> = bigfile.objects.values().collect(); + let binding = match ui.memory(|mem| { + mem.data + .get_temp::>>(id_source) + }) { + Some(val) => val, + None => Arc::new(Mutex::new(ResourceListState::default())), + }; + let state = binding.lock().unwrap(); + let mut new_state = state.clone(); + let mut class_names = new_state.filter.unwrap_or( + bigfile + .objects + .values() + .map(|res| res.class_name) + .collect::>() + .iter() + .map(|n| (*n, true)) + .collect(), + ); + ui.horizontal(|ui| { + // ui.menu_button("Sort", |ui| { + // ui.radio_value(&mut new_state.sort, ListSort::Name, "Name ABC"); + // ui.radio_value(&mut new_state.sort, ListSort::NameReverse, "Name XYZ"); + // ui.radio_value(&mut new_state.sort, ListSort::Ext, "Extension ABC"); + // ui.radio_value(&mut new_state.sort, ListSort::ExtReverse, "Extension XYZ"); + // }); + ui.menu_button("Filter", |ui| { + egui::ScrollArea::vertical().show(ui, |ui| { + class_names.iter_mut().for_each(|(name, checked)| { + ui.checkbox(checked, name.to_string()); + }); + }); + }); + }); + new_state.filter = Some(class_names); + // let order = new_state.order.clone().unwrap_or_else(|| { + // let mut resource_order: Vec<(&Resource, usize)> = bigfile + // .objects + // .values() + // .enumerate() + // .map(|(i, r)| (r, i)) + // .collect(); + // resource_order.sort_by(|a, b| match new_state.sort { + // ListSort::Name => a.0.name.to_string().cmp(&b.0.name.to_string()), + // ListSort::NameReverse => b.0.name.to_string().cmp(&a.0.name.to_string()), + // ListSort::Ext => { + // a.0.class_name.to_string().cmp(&b.0.class_name.to_string()) + // } + // ListSort::ExtReverse => { + // b.0.class_name.to_string().cmp(&a.0.class_name.to_string()) + // } + // }); + // resource_order + // .into_iter() + // .map(|(r, i)| (i, r.name)) + // .collect() + // }); + if new_state != *state { + ui.memory_mut(|mem| { + mem.data + .insert_temp(id_source, Arc::new(Mutex::new(new_state.clone()))) + }); + } + + // let init_resources: Vec<&Resource> = bigfile.objects.values().collect(); + let resources: Vec<&Resource> = bigfile + .objects + .values() + .filter(|res| { + *state + .filter + .as_ref() + .unwrap_or(&HashMap::default()) + .get(&res.class_name) + .unwrap_or(&true) + }) + .collect(); + let row_height = ui.spacing().interact_size.y; egui::ScrollArea::vertical().show_rows( ui, From d80764a10fe1f72f934961a182d134779ba5a060 Mon Sep 17 00:00:00 2001 From: pizzart <7o7goo7o7@gmail.com> Date: Tue, 24 Oct 2023 21:11:04 +0300 Subject: [PATCH 15/16] sorting --- bff-gui/src/panels/left.rs | 160 ++++++++++++++++++++++--------------- 1 file changed, 96 insertions(+), 64 deletions(-) diff --git a/bff-gui/src/panels/left.rs b/bff-gui/src/panels/left.rs index f894e59..3b1579e 100644 --- a/bff-gui/src/panels/left.rs +++ b/bff-gui/src/panels/left.rs @@ -3,7 +3,6 @@ use std::{ sync::{Arc, Mutex}, }; -use bff::bigfile::resource::Resource; use bff::bigfile::BigFile; use bff::class::Class; use bff::names::Name; @@ -14,25 +13,25 @@ use three_d_asset::{Vec2, Vec3, Vec4}; use crate::Artifact; -#[derive(Clone, PartialEq)] -enum ListSort { +#[derive(Clone, PartialEq, Default)] +enum SortType { + #[default] Name, - // NameReverse, - // Ext, - // ExtReverse, + Ext, + Size, } -impl Default for ListSort { - fn default() -> Self { - Self::Name - } +#[derive(Default, Clone, PartialEq)] +struct ListSort { + sort_type: SortType, + reverse: bool, } #[derive(Default, Clone, PartialEq)] struct ResourceListState { sort: ListSort, filter: Option>, - // order: Option>, + resources: Option>>, } #[derive(Default)] @@ -52,12 +51,15 @@ pub fn resource_list( infos: &HashMap, ) -> ResourceListResponse { let mut response = ResourceListResponse::default(); + let mut changed_list = false; egui::SidePanel::left("left") .resizable(true) .width_range(70.0..=ui.available_width() / 2.0) .show_inside(ui, |ui| { // ui.set_width_range(150.0..=200.0); if let Some(bigfile) = bigfile { + ui.style_mut().spacing.item_spacing.y = 5.0; + let version = &bigfile.manifest.version; let platform = bigfile.manifest.platform; let binding = match ui.memory(|mem| { @@ -80,43 +82,82 @@ pub fn resource_list( .collect(), ); ui.horizontal(|ui| { - // ui.menu_button("Sort", |ui| { - // ui.radio_value(&mut new_state.sort, ListSort::Name, "Name ABC"); - // ui.radio_value(&mut new_state.sort, ListSort::NameReverse, "Name XYZ"); - // ui.radio_value(&mut new_state.sort, ListSort::Ext, "Extension ABC"); - // ui.radio_value(&mut new_state.sort, ListSort::ExtReverse, "Extension XYZ"); - // }); + ui.style_mut().spacing.item_spacing.x = 1.0; + if ui + .add( + egui::Button::new(match new_state.sort.sort_type { + SortType::Name => "Name", + SortType::Ext => "Extension", + SortType::Size => "Size", + }) + .min_size(egui::vec2(ui.available_width() / 3.0, 0.0)), + ) + .clicked() + { + changed_list = true; + new_state.sort.sort_type = match new_state.sort.sort_type { + SortType::Name => SortType::Ext, + SortType::Ext => SortType::Size, + SortType::Size => SortType::Name, + }; + } + ui.style_mut().spacing.item_spacing.x = 5.0; + if ui + .button(match new_state.sort.reverse { + false => "AZ", + true => "ZA", + }) + .clicked() + { + changed_list = true; + new_state.sort.reverse = !new_state.sort.reverse; + } ui.menu_button("Filter", |ui| { egui::ScrollArea::vertical().show(ui, |ui| { class_names.iter_mut().for_each(|(name, checked)| { - ui.checkbox(checked, name.to_string()); + if ui.checkbox(checked, name.to_string()).clicked() { + changed_list = true; + } }); }); }); }); new_state.filter = Some(class_names); - // let order = new_state.order.clone().unwrap_or_else(|| { - // let mut resource_order: Vec<(&Resource, usize)> = bigfile - // .objects - // .values() - // .enumerate() - // .map(|(i, r)| (r, i)) - // .collect(); - // resource_order.sort_by(|a, b| match new_state.sort { - // ListSort::Name => a.0.name.to_string().cmp(&b.0.name.to_string()), - // ListSort::NameReverse => b.0.name.to_string().cmp(&a.0.name.to_string()), - // ListSort::Ext => { - // a.0.class_name.to_string().cmp(&b.0.class_name.to_string()) - // } - // ListSort::ExtReverse => { - // b.0.class_name.to_string().cmp(&a.0.class_name.to_string()) - // } - // }); - // resource_order - // .into_iter() - // .map(|(r, i)| (i, r.name)) - // .collect() - // }); + + let resources: Arc> = if new_state.resources.is_none() || changed_list { + let mut res: Vec<(Name, (Name, usize))> = bigfile + .objects + .values() + .filter(|res| { + *state + .filter + .as_ref() + .unwrap_or(&HashMap::default()) + .get(&res.class_name) + .unwrap_or(&true) + }) + .map(|r| (r.name, (r.class_name, r.size()))) + .collect(); + // resources.sort_by(compare) + res.sort_by(|a, b| { + let (x, y) = if new_state.sort.reverse { + (b, a) + } else { + (a, b) + }; + match new_state.sort.sort_type { + SortType::Name => x.0.to_string().cmp(&y.0.to_string()), + SortType::Ext => x.1 .0.to_string().cmp(&y.1 .0.to_string()), + SortType::Size => y.1 .1.cmp(&x.1 .1), + } + }); + let only_names: Arc> = + Arc::new(res.into_iter().map(|(name, _)| name).collect()); + new_state.resources = Some(Arc::clone(&only_names)); + Arc::clone(&only_names) + } else { + Arc::clone(new_state.resources.as_ref().unwrap()) + }; if new_state != *state { ui.memory_mut(|mem| { mem.data @@ -124,20 +165,6 @@ pub fn resource_list( }); } - // let init_resources: Vec<&Resource> = bigfile.objects.values().collect(); - let resources: Vec<&Resource> = bigfile - .objects - .values() - .filter(|res| { - *state - .filter - .as_ref() - .unwrap_or(&HashMap::default()) - .get(&res.class_name) - .unwrap_or(&true) - }) - .collect(); - let row_height = ui.spacing().interact_size.y; egui::ScrollArea::vertical().show_rows( ui, @@ -145,18 +172,20 @@ pub fn resource_list( resources.len(), |ui, row_range| { ui.set_min_width(ui.available_width()); + ui.style_mut().spacing.item_spacing.y = 4.0; + for row in row_range { let resource = resources.get(row).unwrap(); - let nickname = nicknames.get(&resource.name); + let nickname = nicknames.get(&resource); let temp_btn = ui .add( egui::Button::new(format!( "{}.{}", match nickname { Some(nn) => nn.to_owned(), - None => resource.name.to_string(), + None => resource.to_string(), }, - resource.class_name + bigfile.objects.get(resource).unwrap().class_name )) .wrap(false) .rounding(0.0) @@ -166,23 +195,26 @@ pub fn resource_list( if ui.button("Change nickname").clicked() { // self.nickname_window_open = true; // self.nickname_editing.0 = resource.name; - response.resource_context_menu = Some(resource.name); + response.resource_context_menu = Some(*resource); ui.close_menu(); } }); let btn = if nickname.is_some() { temp_btn.on_hover_ui_at_pointer(|ui| { - ui.label(resource.name.to_string()); + ui.label(resource.to_string()); }) } else { temp_btn }; if btn.clicked() { - response.resource_clicked = Some(resource.name); - if artifacts.get(&resource.name).is_none() - || infos.get(&resource.name).is_none() + response.resource_clicked = Some(*resource); + if artifacts.get(&resource).is_none() + || infos.get(&resource).is_none() { - match (*resource) + match bigfile + .objects + .get(&resource) + .unwrap() .try_into_version_platform(version.clone(), platform) { Ok(class) => { @@ -191,7 +223,7 @@ pub fn resource_list( .unwrap(), ); if let Some(a) = - create_artifact(bigfile, class, &resource.name) + create_artifact(bigfile, class, resource) { response.artifact_created = Some(a); } From ad3a23bd5ea563a38212cde41cff69d563214e39 Mon Sep 17 00:00:00 2001 From: pizzart <7o7goo7o7@gmail.com> Date: Tue, 24 Oct 2023 21:40:39 +0300 Subject: [PATCH 16/16] icons --- .../Font Awesome 6 Free-Solid-900.otf | Bin 0 -> 1031688 bytes bff-gui/src/main.rs | 20 ++++++++++++++++++ bff-gui/src/panels/left.rs | 6 ++++-- 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 bff-gui/resources/Font Awesome 6 Free-Solid-900.otf diff --git a/bff-gui/resources/Font Awesome 6 Free-Solid-900.otf b/bff-gui/resources/Font Awesome 6 Free-Solid-900.otf new file mode 100644 index 0000000000000000000000000000000000000000..81e67fd631ff60af121188d14158082a0c3c74e6 GIT binary patch literal 1031688 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.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¥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

NCdE13oEC*}yh^zC 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 V?8ri3fV{E@c4G;0Q Result<(), eframe::Error> { eframe::run_native("BFF GUI", options, Box::new(|cc| Box::new(Gui::new(cc)))) } +fn setup_custom_font(ctx: &egui::Context) { + let mut fonts = egui::FontDefinitions::default(); + + fonts.font_data.insert( + "icons".to_owned(), + egui::FontData::from_static(include_bytes!( + "../resources/Font Awesome 6 Free-Solid-900.otf" + )), + ); + + fonts + .families + .entry(egui::FontFamily::Name("icons".into())) + .or_default() + .push("icons".to_owned()); + + ctx.set_fonts(fonts); +} + #[derive(Default)] struct Gui { bigfile: Option, @@ -59,6 +78,7 @@ impl Gui { fn new(cc: &eframe::CreationContext<'_>) -> Self { cc.egui_ctx.set_pixels_per_point(1.25); egui_extras::install_image_loaders(&cc.egui_ctx); + setup_custom_font(&cc.egui_ctx); Self { bigfile: None, bigfile_path: None, diff --git a/bff-gui/src/panels/left.rs b/bff-gui/src/panels/left.rs index 3b1579e..7c03a7d 100644 --- a/bff-gui/src/panels/left.rs +++ b/bff-gui/src/panels/left.rs @@ -104,8 +104,10 @@ pub fn resource_list( ui.style_mut().spacing.item_spacing.x = 5.0; if ui .button(match new_state.sort.reverse { - false => "AZ", - true => "ZA", + false => egui::RichText::new("") + .family(egui::FontFamily::Name("icons".into())), + true => egui::RichText::new("") + .family(egui::FontFamily::Name("icons".into())), }) .clicked() {