diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 21de883..9d8ac6e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -42,6 +42,8 @@ jobs: with: toolchain: stable target: x86_64-apple-darwin + + - run: cargo install cargo-bundle - name: Build x86_64 uses: actions-rs/cargo@v1 @@ -59,17 +61,24 @@ jobs: with: command: build args: --release --target aarch64-apple-darwin --all-features - - - run: ls -l target + + - name: Bundle .app + run: cargo bundle --all-features --format osx --release - name: Create universal binary - run: lipo -create -output merlon target/x86_64-apple-darwin/release/merlon target/aarch64-apple-darwin/release/merlon + run: lipo -create -output target/release/bundle/osx/Merlon.app/Contents/MacOS/merlon target/x86_64-apple-darwin/release/merlon target/aarch64-apple-darwin/release/merlon + + - name: Install dmgbuild + run: pip3 install dmgbuild + + - name: Build DMG + run: cd assets/dmg && dmgbuild -s dmgbuild.json "Merlon" Merlon.dmg - uses: actions/upload-artifact@v3 with: name: merlon-macos - path: merlon - + path: assets/dmg/Merlon.dmg + linux: name: Build for Linux runs-on: ubuntu-latest @@ -105,7 +114,7 @@ jobs: run: | mkdir -p release mv merlon-linux-x86_64/merlon release/merlon-linux-x86_64 - mv merlon-macos/merlon release/merlon-macos + mv merlon-macos/Merlon.dmg release/Merlon.dmg - name: Get version from tag id: get_version diff --git a/.gitignore b/.gitignore index 0d86fd3..e7cf53d 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ !/examples/*.merlon /.venv *.z64 +*.dmg diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..df3388d --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "rust-analyzer.cargo.features": [ + "gui" + ] +} diff --git a/Cargo.lock b/Cargo.lock index 8faa5b0..262bc24 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,6 +18,90 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" +[[package]] +name = "accesskit" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4803cf8c252f374ae6bfbb341e49e5a37f7601f2ce74a105927a663eba952c67" +dependencies = [ + "enumn", + "serde", +] + +[[package]] +name = "accesskit_consumer" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cee8cf1202a4f94d31837f1902ab0a75c77b65bf59719e093703abe83efd74ec" +dependencies = [ + "accesskit", + "parking_lot", +] + +[[package]] +name = "accesskit_macos" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10be25f2b27bc33aa1647072e86b948b41596f1af1ae43a2b4b9be5d2011cbda" +dependencies = [ + "accesskit", + "accesskit_consumer", + "objc2", + "once_cell", + "parking_lot", +] + +[[package]] +name = "accesskit_unix" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "630e7ee8f93c6246478bf0df6760db899b28d9ad54353a5f2d3157138ba817fc" +dependencies = [ + "accesskit", + "accesskit_consumer", + "async-channel", + "atspi", + "futures-lite", + "parking_lot", + "serde", + "zbus", +] + +[[package]] +name = "accesskit_windows" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13c462fabdd950ef14308a9390b07fa2e2e3aabccba1f3ea36ea2231bb942ab" +dependencies = [ + "accesskit", + "accesskit_consumer", + "arrayvec", + "once_cell", + "parking_lot", + "paste", + "windows 0.42.0", +] + +[[package]] +name = "accesskit_winit" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17727888757ec027ec221db33070e226ee07df44425b583bc67684204d35eff9" +dependencies = [ + "accesskit", + "accesskit_macos", + "accesskit_unix", + "accesskit_windows", + "parking_lot", + "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.7.6" @@ -29,6 +113,18 @@ dependencies = [ "version_check", ] +[[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.0.1" @@ -39,10 +135,28 @@ dependencies = [ ] [[package]] -name = "android_glue" -version = "0.2.3" +name = "android-activity" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" +checksum = "7c77a0045eda8b888c76ea473c2b0515ba6f471d318f8927c5c72240937035a6" +dependencies = [ + "android-properties", + "bitflags", + "cc", + "jni-sys", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "num_enum", +] + +[[package]] +name = "android-properties" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" [[package]] name = "android_system_properties" @@ -110,26 +224,143 @@ checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" [[package]] name = "arboard" -version = "2.1.1" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc120354d1b5ec6d7aaf4876b602def75595937b5e15d356eb554ab5177e08bb" +checksum = "d6041616acea41d67c4a984709ddab1587fd0b10efe5cc563fee954d2f011854" dependencies = [ "clipboard-win", "log", "objc", "objc-foundation", "objc_id", - "parking_lot 0.12.1", + "once_cell", + "parking_lot", "thiserror", "winapi", "x11rb", ] +[[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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" + +[[package]] +name = "async-broadcast" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" +dependencies = [ + "event-listener", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-executor" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb" +dependencies = [ + "async-lock", + "async-task", + "concurrent-queue", + "fastrand", + "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", + "slab", + "socket2", + "waker-fn", +] + +[[package]] +name = "async-lock" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" +dependencies = [ + "event-listener", +] + +[[package]] +name = "async-recursion" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "async-task" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" + +[[package]] +name = "async-trait" +version = "0.1.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + [[package]] name = "atk-sys" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6" +checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148" dependencies = [ "glib-sys", "gobject-sys", @@ -137,11 +368,49 @@ dependencies = [ "system-deps", ] +[[package]] +name = "atomic-waker" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" + [[package]] name = "atomic_refcell" -version = "0.1.9" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79d6dc922a2792b006573f60b2648076355daeae5ce9cb59507e5908c9625d31" + +[[package]] +name = "atspi" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab84c09a770065868da0d713f1f4b35af85d96530a868f1c1a6c249178379187" +dependencies = [ + "async-recursion", + "async-trait", + "atspi-macros", + "enumflags2", + "futures-lite", + "serde", + "tracing", + "zbus", + "zbus_names", +] + +[[package]] +name = "atspi-macros" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "857253367827bd9d0fd973f0ef15506a96e79e41b0ad7aa691203a4e3214f6c8" +checksum = "b3ebc5a6f61f6996eca56a4cece7b3fe7da3b86f0473c7b71ab44e229f3acce4" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "syn 1.0.109", + "zbus", + "zbus_names", + "zvariant", +] [[package]] name = "atty" @@ -160,6 +429,18 @@ 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 = "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" @@ -181,6 +462,40 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-sys" +version = "0.1.0-beta.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "block2" +version = "0.2.0-alpha.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" +dependencies = [ + "block-sys", + "objc2-encode", +] + +[[package]] +name = "blocking" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65" +dependencies = [ + "async-channel", + "async-lock", + "async-task", + "atomic-waker", + "fastrand", + "futures-lite", + "log", +] + [[package]] name = "bumpalo" version = "3.12.1" @@ -207,6 +522,12 @@ dependencies = [ "syn 2.0.15", ] +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + [[package]] name = "bytes" version = "1.4.0" @@ -215,9 +536,9 @@ checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] name = "cairo-sys-rs" -version = "0.15.1" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8" +checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421" dependencies = [ "libc", "system-deps", @@ -225,25 +546,25 @@ dependencies = [ [[package]] name = "calloop" -version = "0.9.3" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf2eec61efe56aa1e813f5126959296933cf0700030e4314786c48779a66ab82" +checksum = "1a59225be45a478d772ce015d9743e49e92798ece9e34eda9a6aa2a6a7f40192" dependencies = [ "log", - "nix 0.22.3", + "nix 0.25.1", + "slotmap", + "thiserror", + "vec_map", ] -[[package]] -name = "cansi" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bdcae87153686017415ce77e48c53e6818a0a058f0e21b56640d1e944967ef8" - [[package]] name = "cc" version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +dependencies = [ + "jobserver", +] [[package]] name = "cesu8" @@ -263,15 +584,15 @@ dependencies = [ [[package]] name = "cfg-if" -version = "0.1.10" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "cfg-if" -version = "1.0.0" +name = "cfg_aliases" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" [[package]] name = "cgl" @@ -319,8 +640,6 @@ dependencies = [ "bitflags", "clap_lex", "strsim", - "unicase", - "unicode-width", ] [[package]] @@ -352,37 +671,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "cocoa" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation 0.9.3", - "core-graphics 0.22.3", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" -dependencies = [ - "bitflags", - "block", - "core-foundation 0.9.3", - "core-graphics-types", - "foreign-types", - "libc", - "objc", -] - [[package]] name = "codespan-reporting" version = "0.11.1" @@ -393,6 +681,12 @@ dependencies = [ "unicode-width", ] +[[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" @@ -410,22 +704,21 @@ dependencies = [ ] [[package]] -name = "content_inspector" -version = "0.2.4" +name = "concurrent-queue" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38" +checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" dependencies = [ - "memchr", + "crossbeam-utils", ] [[package]] -name = "core-foundation" -version = "0.7.0" +name = "content_inspector" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +checksum = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38" dependencies = [ - "core-foundation-sys 0.7.0", - "libc", + "memchr", ] [[package]] @@ -434,34 +727,16 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ - "core-foundation-sys 0.8.4", + "core-foundation-sys", "libc", ] -[[package]] -name = "core-foundation-sys" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" - [[package]] name = "core-foundation-sys" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" -[[package]] -name = "core-graphics" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" -dependencies = [ - "bitflags", - "core-foundation 0.7.0", - "foreign-types", - "libc", -] - [[package]] name = "core-graphics" version = "0.22.3" @@ -469,7 +744,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" dependencies = [ "bitflags", - "core-foundation 0.9.3", + "core-foundation", "core-graphics-types", "foreign-types", "libc", @@ -482,31 +757,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" dependencies = [ "bitflags", - "core-foundation 0.9.3", + "core-foundation", "foreign-types", "libc", ] [[package]] -name = "core-video-sys" -version = "0.1.4" +name = "cpufeatures" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" +checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" dependencies = [ - "cfg-if 0.1.10", - "core-foundation-sys 0.7.0", - "core-graphics 0.19.2", "libc", - "objc", ] [[package]] -name = "cpufeatures" -version = "0.2.7" +name = "crc32fast" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ - "libc", + "cfg-if", ] [[package]] @@ -515,7 +786,7 @@ version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "crossbeam-utils", ] @@ -525,7 +796,7 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] @@ -537,7 +808,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" dependencies = [ "autocfg", - "cfg-if 1.0.0", + "cfg-if", "crossbeam-utils", "memoffset 0.8.0", "scopeguard", @@ -549,9 +820,15 @@ version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" dependencies = [ - "cfg-if 1.0.0", + "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" @@ -572,12 +849,6 @@ dependencies = [ "syn 2.0.15", ] -[[package]] -name = "cty" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" - [[package]] name = "cxx" version = "1.0.94" @@ -623,39 +894,44 @@ dependencies = [ ] [[package]] -name = "darling" -version = "0.13.4" +name = "dark-light" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +checksum = "a62007a65515b3cd88c733dd3464431f05d2ad066999a824259d8edc3cf6f645" dependencies = [ - "darling_core", - "darling_macro", + "dconf_rs", + "detect-desktop-environment", + "dirs", + "objc", + "rust-ini", + "web-sys", + "winreg", + "zbus", + "zvariant", ] [[package]] -name = "darling_core" -version = "0.13.4" +name = "dconf_rs" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +checksum = "7046468a81e6a002061c01e6a7c83139daf91b11c30e66795b13217c2d885c8b" + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "fnv", - "ident_case", "proc-macro2", "quote", - "strsim", "syn 1.0.109", ] [[package]] -name = "darling_macro" -version = "0.13.4" +name = "detect-desktop-environment" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" -dependencies = [ - "darling_core", - "quote", - "syn 1.0.109", -] +checksum = "21d8ad60dd5b13a4ee6bd8fa2d5d88965c597c67bce32b5fc49c94f55cb50810" [[package]] name = "digest" @@ -667,6 +943,47 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "directories-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + [[package]] name = "dispatch" version = "0.2.0" @@ -682,6 +999,12 @@ dependencies = [ "libloading", ] +[[package]] +name = "dlv-list" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" + [[package]] name = "downcast-rs" version = "1.2.0" @@ -694,20 +1017,37 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +[[package]] +name = "ecolor" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f99fe3cac305af9d6d92971af60d0f7ea4d783201ef1673571567b6699964d9" +dependencies = [ + "bytemuck", + "serde", +] + [[package]] name = "eframe" -version = "0.18.0" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fa97a8188c36261ea162e625dbb23599f67b60777b462b834fe38161b81dce" +checksum = "3df3ce60931e5f2d83bab4484d1a283908534d5308cc6b0c5c22c59cd15ee7cc" dependencies = [ "bytemuck", + "dark-light", + "directories-next", "egui", "egui-winit", "egui_glow", "glow", "glutin", + "glutin-winit", "js-sys", "percent-encoding", + "raw-window-handle", + "ron", + "serde", + "thiserror", "tracing", "wasm-bindgen", "wasm-bindgen-futures", @@ -717,35 +1057,63 @@ dependencies = [ [[package]] name = "egui" -version = "0.18.1" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb095a8b9feb9b7ff8f00b6776dffcef059538a3f4a91238e03c900e9c9ad9a2" +checksum = "6412a21e0bde7c0918f7fb44bbbb86b5e1f88e63c026a4e747cc7af02f76dfbe" dependencies = [ - "ahash", + "accesskit", + "ahash 0.8.3", "epaint", "nohash-hasher", + "ron", + "serde", "tracing", ] +[[package]] +name = "egui-phosphor" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb1c01d08372b4b7d05ed15ace0e03124cf8df97be75103ee783965c71fb82ba" +dependencies = [ + "egui", +] + [[package]] name = "egui-winit" -version = "0.18.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b040afd583fd95a9b9578d4399214a13d948ed26bc0ff7cc0104502501f34e68" +checksum = "ab43597ba41f0ce39a364ad83185594578bfd8b3409b99dbcbb01df23afc3dbb" dependencies = [ + "accesskit_winit", + "android-activity", "arboard", "egui", "instant", + "serde", + "smithay-clipboard", "tracing", "webbrowser", "winit", ] +[[package]] +name = "egui_extras" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f051342e97dfa2445107cb7d2e720617f5c840199b5cb4fe0ffcf481fcf5cce" +dependencies = [ + "egui", + "image", + "serde", + "tracing", +] + [[package]] name = "egui_glow" -version = "0.18.1" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af43ed7ec7199907ab5853c3bb3883ae1e741ab540aa127a798a60b7bdb906f1" +checksum = "8257332fb168a965b3dca81d6a344e053153773c889cabdba0b3b76f1629ae81" dependencies = [ "bytemuck", "egui", @@ -764,11 +1132,44 @@ checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" [[package]] name = "emath" -version = "0.18.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c223f58c7e38abe1770f367b969f1b3fbd4704b67666bcb65dbb1adb0980ba72" +checksum = "b8ecd80612937e0267909d5351770fe150004e24dab93954f69ca62eecd3f77e" dependencies = [ "bytemuck", + "serde", +] + +[[package]] +name = "enumflags2" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "enumn" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48016319042fb7c87b78d2993084a831793a897a5cd1a2a67cab9d1eeb4b7d76" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", ] [[package]] @@ -786,17 +1187,19 @@ dependencies = [ [[package]] name = "epaint" -version = "0.18.1" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c29567088888e8ac3e8f61bbb2ddc820207ebb8d69eefde5bcefa06d65e4e89" +checksum = "12e78b5c58a1f7f621f9d546add2adce20636422c9b251e29f749e8a2f713c95" dependencies = [ "ab_glyph", - "ahash", + "ahash 0.8.3", "atomic_refcell", "bytemuck", + "ecolor", "emath", "nohash-hasher", - "parking_lot 0.12.1", + "parking_lot", + "serde", ] [[package]] @@ -830,6 +1233,28 @@ dependencies = [ "str-buf", ] +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "exr" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdd2162b720141a91a054640662d3edce3d50a944a50ffca5313cd951abb35b4" +dependencies = [ + "bit_field", + "flume", + "half", + "lebe", + "miniz_oxide 0.6.2", + "rayon-core", + "smallvec", + "zune-inflate", +] + [[package]] name = "fastrand" version = "1.9.0" @@ -839,23 +1264,49 @@ dependencies = [ "instant", ] +[[package]] +name = "fdeflate" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" +dependencies = [ + "simd-adler32", +] + [[package]] name = "filetime" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "redox_syscall 0.2.16", "windows-sys 0.48.0", ] [[package]] -name = "fnv" -version = "1.0.7" +name = "flate2" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +dependencies = [ + "crc32fast", + "miniz_oxide 0.7.1", +] + +[[package]] +name = "flume" +version = "0.10.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "pin-project", + "spin", +] [[package]] name = "foreign-types" @@ -887,11 +1338,66 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" +[[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", + "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.15.10" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7" +checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016" dependencies = [ "gio-sys", "glib-sys", @@ -902,9 +1408,9 @@ dependencies = [ [[package]] name = "gdk-sys" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88" +checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", @@ -943,9 +1449,11 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", + "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -959,11 +1467,21 @@ dependencies = [ "syn 2.0.15", ] +[[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.15.10" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d" +checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" dependencies = [ "glib-sys", "gobject-sys", @@ -985,9 +1503,9 @@ dependencies = [ [[package]] name = "glib-sys" -version = "0.15.10" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4" +checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" dependencies = [ "libc", "system-deps", @@ -1001,9 +1519,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "glow" -version = "0.11.2" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8bd5877156a19b8ac83a29b2306fe20537429d318f3ff0a1a2119f8d9c61919" +checksum = "4e007a07a24de5ecae94160f141029e9a347282cfe25d1d58d85d845cf3130f1" dependencies = [ "js-sys", "slotmap", @@ -1013,62 +1531,54 @@ dependencies = [ [[package]] name = "glutin" -version = "0.28.0" +version = "0.30.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00ea9dbe544bc8a657c4c4a798c2d16cd01b549820e47657297549d28371f6d2" +checksum = "f89bab9ec7715de13d5d5402238e66f48e3a5ae636ebb45aba4013c962e2ff15" dependencies = [ - "android_glue", + "bitflags", + "cfg_aliases", "cgl", - "cocoa", - "core-foundation 0.9.3", + "core-foundation", + "dispatch", "glutin_egl_sys", - "glutin_emscripten_sys", - "glutin_gles2_sys", "glutin_glx_sys", "glutin_wgl_sys", - "lazy_static", "libloading", - "log", - "objc", - "osmesa-sys", - "parking_lot 0.11.2", - "wayland-client", - "wayland-egl", - "winapi", - "winit", + "objc2", + "once_cell", + "raw-window-handle", + "wayland-sys 0.30.1", + "windows-sys 0.45.0", + "x11-dl", ] [[package]] -name = "glutin_egl_sys" -version = "0.1.6" +name = "glutin-winit" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68900f84b471f31ea1d1355567eb865a2cf446294f06cef8d653ed7bcf5f013d" +checksum = "629a873fc04062830bfe8f97c03773bcd7b371e23bcc465d0a61448cd1588fa4" dependencies = [ - "gl_generator", - "winapi", + "cfg_aliases", + "glutin", + "raw-window-handle", + "winit", ] [[package]] -name = "glutin_emscripten_sys" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80de4146df76e8a6c32b03007bc764ff3249dcaeb4f675d68a06caf1bac363f1" - -[[package]] -name = "glutin_gles2_sys" -version = "0.1.5" +name = "glutin_egl_sys" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094e708b730a7c8a1954f4f8a31880af00eb8a1c5b5bf85d28a0a3c6d69103" +checksum = "e5aaf0abb5c4148685b33101ae326a207946b4d3764d6cdc79f8316cdaa8367d" dependencies = [ "gl_generator", - "objc", + "windows-sys 0.45.0", ] [[package]] name = "glutin_glx_sys" -version = "0.1.8" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93d0575865098580c5b3a423188cd959419912ea60b1e48e8b3b526f6d02468" +checksum = "1b53cb5fe568964aa066a3ba91eac5ecbac869fb0842cd0dc9e412434f1a1494" dependencies = [ "gl_generator", "x11-dl", @@ -1076,18 +1586,18 @@ dependencies = [ [[package]] name = "glutin_wgl_sys" -version = "0.1.5" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da5951a1569dbab865c6f2a863efafff193a93caf05538d193e9e3816d21696" +checksum = "ef89398e90033fc6bc65e9bd42fd29bbbfd483bda5b56dc5562f455550618165" dependencies = [ "gl_generator", ] [[package]] name = "gobject-sys" -version = "0.15.10" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a" +checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" dependencies = [ "glib-sys", "libc", @@ -1096,9 +1606,9 @@ dependencies = [ [[package]] name = "gtk-sys" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84" +checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3" dependencies = [ "atk-sys", "cairo-sys-rs", @@ -1112,20 +1622,29 @@ dependencies = [ "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.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.6", +] [[package]] name = "heck" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -dependencies = [ - "unicode-segmentation", -] [[package]] name = "hermit-abi" @@ -1149,7 +1668,13 @@ dependencies = [ name = "hermit-abi" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "humantime" @@ -1183,7 +1708,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" dependencies = [ "android_system_properties", - "core-foundation-sys 0.8.4", + "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", @@ -1200,12 +1725,6 @@ dependencies = [ "cxx-build", ] -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - [[package]] name = "idna" version = "0.3.0" @@ -1216,6 +1735,25 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "image" +version = "0.24.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "exr", + "gif", + "jpeg-decoder", + "num-rational", + "num-traits", + "png", + "qoi", + "tiff", +] + [[package]] name = "indexmap" version = "1.9.3" @@ -1238,7 +1776,7 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "js-sys", "wasm-bindgen", "web-sys", @@ -1279,16 +1817,18 @@ dependencies = [ [[package]] name = "jni" -version = "0.19.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" dependencies = [ "cesu8", + "cfg-if", "combine", "jni-sys", "log", "thiserror", "walkdir", + "windows-sys 0.45.0", ] [[package]] @@ -1297,6 +1837,24 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +[[package]] +name = "jobserver" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +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.61" @@ -1312,27 +1870,18 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" -[[package]] -name = "klask" -version = "1.0.0" -source = "git+https://github.com/xosxos/klask.git?rev=27d4c0b5493423724ffa5793e183f7333089f6eb#27d4c0b5493423724ffa5793e183f7333089f6eb" -dependencies = [ - "cansi", - "clap", - "eframe", - "heck", - "linkify", - "rfd", - "thiserror", - "uuid", -] - [[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.142" @@ -1345,7 +1894,7 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "winapi", ] @@ -1358,15 +1907,6 @@ dependencies = [ "cc", ] -[[package]] -name = "linkify" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96dd5884008358112bc66093362197c7248ece00d46624e2cf71e50029f8cff5" -dependencies = [ - "memchr", -] - [[package]] name = "linux-raw-sys" version = "0.3.4" @@ -1389,7 +1929,7 @@ version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -1409,9 +1949,9 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memmap2" -version = "0.3.1" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b6c2ebff6180198788f5db08d7ce3bc1d0b617176678831a7510825973e357" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" dependencies = [ "libc", ] @@ -1425,6 +1965,15 @@ 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.8.0" @@ -1441,13 +1990,18 @@ dependencies = [ "anyhow", "chrono", "clap", + "eframe", + "egui", + "egui-phosphor", + "egui_extras", "fs_extra", "heck", - "klask", + "image", "log", "pretty_env_logger", "pyo3", "rand", + "rfd", "scopeguard", "semver", "serde", @@ -1465,6 +2019,25 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniz_oxide" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +dependencies = [ + "adler", +] + +[[package]] +name = "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.6" @@ -1477,16 +2050,26 @@ dependencies = [ "windows-sys 0.45.0", ] +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom", +] + [[package]] name = "ndk" -version = "0.5.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d868f654c72e75f8687572699cdabe755f03effbb62542768e995d5b8d699d" +checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" dependencies = [ "bitflags", "jni-sys", "ndk-sys", "num_enum", + "raw-window-handle", "thiserror", ] @@ -1497,62 +2080,50 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" [[package]] -name = "ndk-glue" -version = "0.5.2" +name = "ndk-sys" +version = "0.4.1+23.1.7779620" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71bee8ea72d685477e28bd004cfe1bf99c754d688cd78cad139eae4089484d4" +checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" dependencies = [ - "lazy_static", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-macro", - "ndk-sys", + "jni-sys", ] [[package]] -name = "ndk-macro" -version = "0.3.0" +name = "nix" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" dependencies = [ - "darling", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", + "bitflags", + "cfg-if", + "libc", + "memoffset 0.6.5", ] -[[package]] -name = "ndk-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1bcdd74c20ad5d95aacd60ef9ba40fdf77f767051040541df557b7a9b2a2121" - [[package]] name = "nix" -version = "0.22.3" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" +checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" dependencies = [ + "autocfg", "bitflags", - "cc", - "cfg-if 1.0.0", + "cfg-if", "libc", "memoffset 0.6.5", ] [[package]] name = "nix" -version = "0.24.3" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" dependencies = [ "bitflags", - "cfg-if 1.0.0", + "cfg-if", "libc", - "memoffset 0.6.5", + "memoffset 0.7.1", + "static_assertions", ] [[package]] @@ -1587,6 +2158,17 @@ dependencies = [ "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" @@ -1647,6 +2229,32 @@ dependencies = [ "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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe31e5425d3d0b89a15982c024392815da40689aceb34bad364d58732bcfd649" +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" @@ -1663,22 +2271,42 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] -name = "os_pipe" -version = "1.1.4" +name = "orbclient" +version = "0.3.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177" +checksum = "221d488cd70617f1bd599ed8ceb659df2147d9393717954d82a0f5e8032a6ab1" dependencies = [ - "libc", - "windows-sys 0.48.0", + "redox_syscall 0.3.5", ] [[package]] -name = "osmesa-sys" -version = "0.1.2" +name = "ordered-multimap" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a" +dependencies = [ + "dlv-list", + "hashbrown", +] + +[[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 = "os_pipe" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" +checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177" dependencies = [ - "shared_library", + "libc", + "windows-sys 0.48.0", ] [[package]] @@ -1692,9 +2320,9 @@ dependencies = [ [[package]] name = "pango-sys" -version = "0.15.10" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa" +checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f" dependencies = [ "glib-sys", "gobject-sys", @@ -1703,15 +2331,10 @@ dependencies = [ ] [[package]] -name = "parking_lot" -version = "0.11.2" +name = "parking" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", -] +checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" [[package]] name = "parking_lot" @@ -1720,21 +2343,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.7", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if 1.0.0", - "instant", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", + "parking_lot_core", ] [[package]] @@ -1743,30 +2352,91 @@ version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "redox_syscall 0.2.16", "smallvec", "windows-sys 0.45.0", ] +[[package]] +name = "paste" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" + [[package]] name = "percent-encoding" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +[[package]] +name = "pin-project" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "pin-project-lite" version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "pkg-config" -version = "0.3.26" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "png" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" +checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa" +dependencies = [ + "bitflags", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide 0.7.1", +] + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] [[package]] name = "ppv-lite86" @@ -1810,12 +2480,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3b1ac5b3731ba34fdaa9785f8d74d17448cd18f30cf19e0c7e7b1fdb5272109" dependencies = [ "anyhow", - "cfg-if 1.0.0", + "cfg-if", "indoc", "inventory", "libc", "memoffset 0.8.0", - "parking_lot 0.12.1", + "parking_lot", "pyo3-build-config", "pyo3-ffi", "pyo3-macros", @@ -1866,6 +2536,15 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + [[package]] name = "quick-error" version = "1.2.3" @@ -1911,15 +2590,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "raw-window-handle" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41" -dependencies = [ - "cty", -] - [[package]] name = "raw-window-handle" version = "0.5.2" @@ -1966,6 +2636,17 @@ dependencies = [ "bitflags", ] +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom", + "redox_syscall 0.2.16", + "thiserror", +] + [[package]] name = "regex" version = "1.8.1" @@ -1985,26 +2666,48 @@ checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" [[package]] name = "rfd" -version = "0.10.0" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0149778bd99b6959285b0933288206090c50e2327f47a9c463bfdbf45c8823ea" +checksum = "7cb2988ec50c9bcdb0c012b89643a6094a35a785a37897211ee62e1639342f7b" dependencies = [ + "async-io", "block", "dispatch", + "futures-util", "glib-sys", "gobject-sys", "gtk-sys", "js-sys", - "lazy_static", "log", "objc", "objc-foundation", "objc_id", - "raw-window-handle 0.5.2", + "raw-window-handle", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "windows 0.37.0", + "windows 0.44.0", +] + +[[package]] +name = "ron" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300a51053b1cb55c80b7a9fde4120726ddf25ca241a1cbb926626f62fb136bff" +dependencies = [ + "base64", + "bitflags", + "serde", +] + +[[package]] +name = "rust-ini" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df" +dependencies = [ + "cfg-if", + "ordered-multimap", ] [[package]] @@ -2048,6 +2751,19 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" +[[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" @@ -2066,6 +2782,18 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-xml-rs" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0bf1ba0696ccf0872866277143ff1fd14d22eec235d2b23702f95e6660f7dfa" +dependencies = [ + "log", + "serde", + "thiserror", + "xml-rs", +] + [[package]] name = "serde_derive" version = "1.0.160" @@ -2077,6 +2805,17 @@ dependencies = [ "syn 2.0.15", ] +[[package]] +name = "serde_repr" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + [[package]] name = "serde_spanned" version = "0.6.1" @@ -2092,33 +2831,38 @@ version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest", ] -[[package]] -name = "shared_library" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" -dependencies = [ - "lazy_static", - "libc", -] - [[package]] name = "shlex" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" +[[package]] +name = "simd-adler32" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" + [[package]] name = "similar" version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf" +[[package]] +name = "slab" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +dependencies = [ + "autocfg", +] + [[package]] name = "slotmap" version = "1.0.6" @@ -2136,9 +2880,9 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "smithay-client-toolkit" -version = "0.15.4" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a28f16a97fa0e8ce563b2774d1e732dd5d4025d2772c5dba0a41a0f90a29da3" +checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454" dependencies = [ "bitflags", "calloop", @@ -2146,13 +2890,23 @@ dependencies = [ "lazy_static", "log", "memmap2", - "nix 0.22.3", + "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 = "snapbox" version = "0.4.11" @@ -2184,12 +2938,43 @@ dependencies = [ "anstream", ] +[[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.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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9df65f20698aeed245efdde3628a6b559ea1239bbb871af1b6e3b58c413b2bd1" + [[package]] name = "strsim" version = "0.10.0" @@ -2220,9 +3005,9 @@ dependencies = [ [[package]] name = "system-deps" -version = "6.0.5" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0fe581ad25d11420b873cf9aedaca0419c2b411487b134d4d21065f3d092055" +checksum = "e5fa6fb9ee296c0dc2df41a656ca7948546d061958115ddb0bcaae43ad0d17d2" dependencies = [ "cfg-expr", "heck", @@ -2249,7 +3034,7 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "fastrand", "redox_syscall 0.3.5", "rustix", @@ -2285,6 +3070,17 @@ dependencies = [ "syn 2.0.15", ] +[[package]] +name = "tiff" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + [[package]] name = "time" version = "0.1.45" @@ -2296,6 +3092,31 @@ dependencies = [ "winapi", ] +[[package]] +name = "tiny-skia" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8493a203431061e901613751931f047d1971337153f96d0e5e363d6dbf6a67" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "png", + "tiny-skia-path", +] + +[[package]] +name = "tiny-skia-path" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adbfb5d3f3dd57a0e11d12f4f13d4ebbbc1b5c15b7ab0a156d030b21da5f677c" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -2351,7 +3172,7 @@ version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -2359,13 +3180,13 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] @@ -2406,12 +3227,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] -name = "unicase" -version = "2.6.0" +name = "uds_windows" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d" dependencies = [ - "version_check", + "tempfile", + "winapi", ] [[package]] @@ -2435,12 +3257,6 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-segmentation" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" - [[package]] name = "unicode-width" version = "0.1.10" @@ -2480,6 +3296,12 @@ dependencies = [ "serde", ] +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + [[package]] name = "version-compare" version = "0.1.1" @@ -2501,6 +3323,12 @@ dependencies = [ "libc", ] +[[package]] +name = "waker-fn" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" + [[package]] name = "walkdir" version = "2.3.3" @@ -2529,7 +3357,7 @@ version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "wasm-bindgen-macro", ] @@ -2554,7 +3382,7 @@ version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "js-sys", "wasm-bindgen", "web-sys", @@ -2602,7 +3430,7 @@ dependencies = [ "scoped-tls", "wayland-commons", "wayland-scanner", - "wayland-sys", + "wayland-sys 0.29.5", ] [[package]] @@ -2614,7 +3442,7 @@ dependencies = [ "nix 0.24.3", "once_cell", "smallvec", - "wayland-sys", + "wayland-sys 0.29.5", ] [[package]] @@ -2628,16 +3456,6 @@ dependencies = [ "xcursor", ] -[[package]] -name = "wayland-egl" -version = "0.29.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402de949f81a012926d821a2d659f930694257e76dd92b6e0042ceb27be4107d" -dependencies = [ - "wayland-client", - "wayland-sys", -] - [[package]] name = "wayland-protocols" version = "0.29.5" @@ -2672,6 +3490,18 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "wayland-sys" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b2a02ac608e07132978689a6f9bf4214949c85998c247abadd4f4129b1aa06" +dependencies = [ + "dlib", + "lazy_static", + "log", + "pkg-config", +] + [[package]] name = "web-sys" version = "0.3.61" @@ -2684,23 +3514,26 @@ dependencies = [ [[package]] name = "webbrowser" -version = "0.7.1" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc6a3cffdb686fbb24d9fb8f03a213803277ed2300f11026a3afe1f108dc021b" +checksum = "b692165700260bbd40fbc5ff23766c03e339fbaca907aeea5cb77bf0a553ca83" dependencies = [ + "core-foundation", + "dirs", "jni", - "ndk-glue", + "log", + "ndk-context", + "objc", + "raw-window-handle", "url", "web-sys", - "widestring", - "winapi", ] [[package]] -name = "widestring" -version = "0.5.1" +name = "weezl" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" +checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" [[package]] name = "winapi" @@ -2744,15 +3577,27 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.37.0" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0286ba339aa753e70765d521bb0242cc48e1194562bfa2a2ad7ac8a6de28f5d5" +dependencies = [ + "windows-implement", + "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]] +name = "windows" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647" +checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" dependencies = [ - "windows_aarch64_msvc 0.37.0", - "windows_i686_gnu 0.37.0", - "windows_i686_msvc 0.37.0", - "windows_x86_64_gnu 0.37.0", - "windows_x86_64_msvc 0.37.0", + "windows-targets 0.42.2", ] [[package]] @@ -2764,6 +3609,17 @@ dependencies = [ "windows-targets 0.48.0", ] +[[package]] +name = "windows-implement" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9539b6bd3eadbd9de66c9666b22d802b833da7e996bc06896142e09854a61767" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "windows-sys" version = "0.45.0" @@ -2824,12 +3680,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" -[[package]] -name = "windows_aarch64_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a" - [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -2842,12 +3692,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" -[[package]] -name = "windows_i686_gnu" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1" - [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -2860,12 +3704,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" -[[package]] -name = "windows_i686_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c" - [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -2878,12 +3716,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" -[[package]] -name = "windows_x86_64_gnu" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d" - [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -2908,12 +3740,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" -[[package]] -name = "windows_x86_64_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d" - [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -2928,34 +3754,36 @@ checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] name = "winit" -version = "0.26.1" +version = "0.28.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b43cc931d58b99461188607efd7acb2a093e65fc621f54cad78517a6063e73a" +checksum = "94c9651471cd576737671fbf7081edfea43de3e06846dd9bd4e49ea803c9f55f" dependencies = [ + "android-activity", "bitflags", - "cocoa", - "core-foundation 0.9.3", - "core-graphics 0.22.3", - "core-video-sys", + "cfg_aliases", + "core-foundation", + "core-graphics", "dispatch", "instant", - "lazy_static", "libc", "log", "mio", "ndk", - "ndk-glue", - "ndk-sys", - "objc", - "parking_lot 0.11.2", + "objc2", + "once_cell", + "orbclient", "percent-encoding", - "raw-window-handle 0.4.3", + "raw-window-handle", + "redox_syscall 0.3.5", + "sctk-adwaita", "smithay-client-toolkit", "wasm-bindgen", "wayland-client", + "wayland-commons", "wayland-protocols", + "wayland-scanner", "web-sys", - "winapi", + "windows-sys 0.45.0", "x11-dl", ] @@ -2968,6 +3796,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi", +] + [[package]] name = "x11-dl" version = "2.21.0" @@ -2981,14 +3818,24 @@ dependencies = [ [[package]] name = "x11rb" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e99be55648b3ae2a52342f9a870c0e138709a3493261ce9b469afe6e4df6d8a" +checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507" dependencies = [ "gethostname", - "nix 0.22.3", + "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]] @@ -3000,8 +3847,130 @@ 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.2", + "winapi", +] + [[package]] name = "xml-rs" -version = "0.8.4" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f20f14e2bd1fef6ec891d50dbb37c7290a0568a6bbd9020bf62010d02b6f80e" + +[[package]] +name = "zbus" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29242fa5ec5693629ae74d6eb1f69622a9511f600986d6d9779bccf36ac316e3" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-recursion", + "async-task", + "async-trait", + "byteorder", + "derivative", + "enumflags2", + "event-listener", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "nix 0.26.2", + "once_cell", + "ordered-stream", + "rand", + "serde", + "serde-xml-rs", + "serde_repr", + "sha1", + "static_assertions", + "tracing", + "uds_windows", + "winapi", + "xdg-home", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "537793e26e9af85f774801dc52c6f6292352b2b517c5cf0449ffd3735732a53a" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "regex", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f34f314916bd89bdb9934154627fab152f4f28acdda03e7c4c68181b214fe7e3" +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.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46fe4914a985446d6fd287019b5fceccce38303d71407d9e6e711d44954a05d8" +dependencies = [ + "byteorder", + "enumflags2", + "libc", + "serde", + "static_assertions", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34c20260af4b28b3275d6676c7e2a6be0d4332e8e0aba4616d34007fd84e462a" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" +checksum = "53b22993dbc4d128a17a3b6c92f1c63872dd67198537ee728d8b5d7c40640a8b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] diff --git a/Cargo.toml b/Cargo.toml index d9b74ec..f934c21 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,9 +15,10 @@ crate-type = ["cdylib", "rlib"] # bin for executable, cdylib for Python, rlib fo anyhow = { version = "1.0.70", features = ["std"] } chrono = "0.4.24" clap = { version = "4.2.4", features = ["derive"] } +egui = { version = "0.21.0", features = ["serde"], optional = true } +eframe = { version = "0.21.0", default-features = true, features = [ "accesskit", "default_fonts", "glow", "persistence", "ron", "dark-light" ], optional = true } fs_extra = "1.3.0" heck = "0.4.1" -klask = { version = "1.0.0", optional = true } log = "0.4.17" pretty_env_logger = "0.4.0" pyo3 = { version = "0.18.3", features = ["abi3-py37", "multiple-pymethods", "anyhow", "serde"] } @@ -29,6 +30,10 @@ temp-dir = "0.1.11" thiserror = "1.0.40" toml = "0.7.3" uuid = { version = "1.3.1", features = ["v4", "serde"] } +egui-phosphor = "0.1.0" +egui_extras = { version = "0.21.0", features = ["tracing", "image"] } +image = { version = "0.24.6", features = ["png"] } +rfd = "0.11.3" [dev-dependencies] rand = "0.8.5" @@ -36,8 +41,26 @@ trycmd = "0.14.16" [features] default = [] -gui = ["dep:klask"] +gui = ["dep:egui", "dep:eframe"] -[patch.crates-io] -# https://github.com/MichalGniadek/klask/issues/50 -klask = { git = "https://github.com/xosxos/klask.git", rev = "27d4c0b5493423724ffa5793e183f7333089f6eb" } +[package.metadata.bundle] +name = "Merlon" +identifier = "town.nanaian.merlon" +icon = ["assets/logo/merlon.ico", "assets/logo/merlon.png", "assets/logo/merlon-macos-app-icon.icns"] +resources = [] +copyright = "Copyright 2023 Alex Bates" +category = "public.app-category.developer-tools" +short_description = "Mod manager for the Paper Mario (N64) decompilation" +long_description = """ +Mod package manager for the Paper Mario (N64) decompilation. + +Merlon allows you to create mod packages by editing the decomp source code, and to export packages +into distributable `.merlon` patch files that can be applied to a base ROM. + +For assistance with Merlon, join the #merlon channel of the Paper Mario Modding Discord server: + +https://discord.gg/paper-mario-modding-279322074412089344 +https://discord.com/channels/279322074412089344/1099844075399696394 +""" +deb_depends = [] +osx_frameworks = [] diff --git a/README.md b/README.md index 2a00b34..dd4daf4 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![CI status](https://img.shields.io/github/actions/workflow/status/nanaian/merlon/release.yml?branch=main)](https://github.com/nanaian/merlon/actions) [![Documentation](https://img.shields.io/readthedocs/merlon)](https://merlon.readthedocs.io) [![Downloads](https://img.shields.io/github/downloads/nanaian/merlon/total)](https://github.com/nanaian/merlon/releases) -[![Discord invite](https://img.shields.io/discord/279322074412089344?color=%237289DA&logo=discord&logoColor=ffffff)](https://discord.gg/paper-mario-modding-279322074412089344) +[![Discord invite](https://img.shields.io/discord/279322074412089344?color=%237289DA&logo=discord&logoColor=ffffff)](https://discord.gg/paper-mario-modding) [![Rust crate](https://img.shields.io/crates/v/merlon)](https://crates.io/crates/merlon) [![PyPi package](https://img.shields.io/pypi/v/merlon)](https://pypi.org/project/merlon/) diff --git a/assets/dmg/dmgbuild.json b/assets/dmg/dmgbuild.json new file mode 100644 index 0000000..9b76809 --- /dev/null +++ b/assets/dmg/dmgbuild.json @@ -0,0 +1,19 @@ +{ + "title": "Merlon", + "background": "#d4cbf7", + "format": "UDBZ", + "compression-level": 9, + "window": { "position": { "x": 100, "y": 100 }, + "size": { "width": 640, "height": 300 } }, + "contents": [ + { "x": 140, "y": 140, "type": "file", "path": "../../target/release/bundle/osx/Merlon.app" }, + { "x": 480, "y": 140, "type": "link", "path": "/Applications" } + ], + "icon": "../logo/merlon-macos-app-icon.icns", + "license": { + "default-language": "en_US", + "licenses": { + "en_US": "../../LICENSE" + } + } +} diff --git a/assets/logo/merlon-macos-app-icon.icns b/assets/logo/merlon-macos-app-icon.icns new file mode 100644 index 0000000..3031bf9 Binary files /dev/null and b/assets/logo/merlon-macos-app-icon.icns differ diff --git a/assets/logo/merlon-macos-app-icon.png b/assets/logo/merlon-macos-app-icon.png new file mode 100644 index 0000000..2861e2d Binary files /dev/null and b/assets/logo/merlon-macos-app-icon.png differ diff --git a/assets/logo/merlon-macos-app-icon.svg b/assets/logo/merlon-macos-app-icon.svg new file mode 100644 index 0000000..c67f179 --- /dev/null +++ b/assets/logo/merlon-macos-app-icon.svg @@ -0,0 +1,9509 @@ + + + + diff --git a/docs/getting_started.md b/docs/getting_started.md index 8d76481..4fce2e3 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -60,11 +60,10 @@ If you're not sure which to choose, choose the first option. Download the appropriate executable for your operating system from the [GitHub releases page](https://github.com/nanaian/merlon/releases). -- **Linux** users should download `merlon-linux-x86_64`. This is a static binary that should work on any Linux - distribution. If you're not on x86_64, you can [build Merlon from source](advanced/build_source.md) instead. -- **MacOS** users should download `merlon-macos`. This is a universal binary that works on both Intel and Apple Silicon - Macs. -- **Windows Subsystem for Linux 2** users should download `merlon-linux-x86_64`. +###### Linux and Windows Subsystem for Linux 2 + +Download `merlon-linux-x86_64`. This is a static binary that should work on any Linux distribution. If you're not on +x86_64, you can [build Merlon from source](advanced/build_source.md) instead. Once downloaded, move the file to somewhere on your PATH and mark it executable. For example: @@ -73,9 +72,20 @@ $ sudo mv ~/Downloads/merlon-linux-x86_64 /usr/local/bin/merlon $ sudo chmod +x /usr/local/bin/merlon ``` -On MacOS you may also need to run `sudo xattr -d com.apple.quarantine /usr/local/bin/merlon` to stop Gatekeeper from -blocking the executable. This happens because the executable is not signed and I don't want to pay Apple $100/year to -sign it. +###### macOS + +MacOS users should download `Merlon.dmg`. This is a universal application that works on both Intel and Apple Silicon +Macs. Once downloaded, open the DMG and drag the Merlon application to your Applications folder. + +You can then open the Merlon GUI by double-clicking the application. You may need to right-click and select "Open" the +first time you run it to bypass the security warning. + +To run Merlon from the command line, you'll need to add it to your PATH. To do this, run the following command: + +```console +$ echo 'export PATH="/Applications/Merlon.app/Contents/MacOS:$PATH"' >> ~/.zshrc +$ source ~/.zshrc +``` #### Cargo diff --git a/src/gui.rs b/src/gui.rs new file mode 100644 index 0000000..1cf4164 --- /dev/null +++ b/src/gui.rs @@ -0,0 +1,250 @@ +use std::{path::PathBuf, collections::VecDeque}; + +use serde::{Deserialize, Serialize}; +use anyhow::{Result, bail, anyhow}; +use merlon::package::Package; +use merlon::package::distribute::{Distributable, OpenOptions}; +use merlon::rom::Rom; + +mod logotype; +mod support_link; + +#[derive(Deserialize, Serialize, Default, Debug)] +#[serde(default)] +pub struct App { + packages: VecDeque, + logotype: logotype::Logotype, + about_window: bool, + baserom: Option, +} + +impl App { + pub fn new(cc: &eframe::CreationContext<'_>) -> Self { + let mut fonts = egui::FontDefinitions::default(); + egui_phosphor::add_to_fonts(&mut fonts); + cc.egui_ctx.set_fonts(fonts); + + if let Some(storage) = cc.storage { + log::info!("Loading app state from storage"); + // FIXME: ron parse error, maybe use toml? + /* + let storage_string = &storage.get_string(eframe::APP_KEY).unwrap(); + let app: Result = ron::from_str(&storage_string); + log::debug!("App storage string: {}", storage_string); + log::debug!("Parsed app storage: {:?}", app); + */ + match eframe::get_value(storage, eframe::APP_KEY) { + Some(app) => return app, + None => log::warn!("No app state found in storage, or error parsing"), + } + } + + Default::default() + } + + fn open_package_or_distributable(&mut self, path: PathBuf) -> Result<()> { + let package = if let Ok(package) = Package::try_from(path.clone()) { + package + } else if let Ok(distributable) = Distributable::try_from(path.clone()) { + if let Some(baserom) = self.baserom.as_ref() { + distributable.open_to_dir(OpenOptions { + baserom: baserom.path().to_owned(), + ..Default::default() + })? + } else { + bail!("No baserom selected"); + } + } else { + bail!("Not a package directory or distributable file: {}", path.display()); + }; + + if let Some(existing) = self.packages.iter().find(|p| p.path() == package.path()) { + bail!("Package already open: {}", existing.path().display()); + } + self.packages.push_front(package); + Ok(()) + } + + fn handle_result(&mut self, result: Result) { + if let Err(err) = result { + log::error!("{}", err); + // TODO: show modal error dialog e.g. with egui_modal + } + } +} + +impl eframe::App for App { + fn save(&mut self, storage: &mut dyn eframe::Storage) { + if let Some(rom) = self.baserom.as_ref() { + if !rom.path().is_file() { + log::warn!("baserom file no longer exists, clearing baserom"); + self.baserom = None; + } + } + + log::info!("Saving app state to storage"); + eframe::set_value(storage, eframe::APP_KEY, self); + } + + fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { + ctx.enable_accesskit(); + self.logotype.load_if_first_attempt(ctx); + + egui::TopBottomPanel::top("top_bar").show(ctx, |ui| { + // Draw title bar on macOS + #[cfg(target_os = "macos")] + ui.vertical_centered(|ui| { + ui.set_height(24.0); + ui.allocate_space(egui::vec2(0.0, 2.0)); + ui.label("Merlon"); + }); + }); + + egui::SidePanel::right("side_panel").resizable(false).show(ctx, |ui| { + ui.set_width(200.0); + ui.with_layout(egui::Layout::top_down_justified(egui::Align::Center), |ui| { + ui.spacing_mut().item_spacing.y = 4.0; + ui.add_space(8.0); + + if ui.button("New package…") + .on_hover_text("Create a new Merlon package") + .clicked() + { + // TODO + } + + if ui.button("Import package folder…") + .on_hover_text("Import a Merlon package folder") + .clicked() + { + if let Some(path) = rfd::FileDialog::new() + .add_filter("Merlon distributables", &["merlon"]) + .pick_folder() + { + let result = self.open_package_or_distributable(path); + self.handle_result(result); + } + } + + ui.scope(|ui| { + ui.set_enabled(self.baserom.is_some()); + if ui.button("Import distributable…") + .on_hover_text("Import a Merlon distributable file (.merlon)") + .on_disabled_hover_text("Select a base ROM first") + .clicked() + { + if let Some(path) = rfd::FileDialog::new() + .add_filter("Merlon distributables", &["merlon"]) + .pick_file() + { + let result = self.open_package_or_distributable(path); + self.handle_result(result); + } + } + }); + + if ui.button("Set base ROM…").clicked() { + if let Some(path) = rfd::FileDialog::new() + .add_filter("N64 ROMs", &["z64"]) + .pick_file() + { + let rom = Rom::from(path); + let sha1 = rom.sha1_string(); + log::info!("Base ROM SHA1: {:?}", sha1); + if sha1.unwrap_or_else(|_| "".to_string()) != merlon::rom::PAPERMARIO_US_SHA1 { + self.handle_result::<()>(Err(anyhow!("Not an unmodified Paper Mario (US) ROM"))); + } else { + self.baserom = Some(rom); + + } + } + } + + ui.add_space(16.0); + ui.separator(); + ui.add_space(16.0); + + ui.add(egui::Hyperlink::from_label_and_url("Documentation", "https://merlon.readthedocs.io/")); + ui.add(support_link::SupportLink); + if ui.button("About…").clicked() { + self.about_window = true; + } + }); + }); + + egui::Window::new("About").resizable(false).open(&mut self.about_window).show(ctx, |ui| { + ui.vertical_centered(|ui| { + ui.spacing_mut().item_spacing.y = 8.0; + + ui.add_space(16.0); + ui.add(&mut self.logotype); + + ui.label(format!("Version {}", env!("CARGO_PKG_VERSION"))); + egui::warn_if_debug_build(ui); + + ui.add_space(16.0); + + ui.label("© 2023 Alex Bates (nanaian)"); + ui.label("The author is not affiliated with Nintendo Co., Ltd. in any way."); + ui.label("This Executable Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this program, You can obtain one at https://mozilla.org/MPL/2.0/."); + + ui.add_space(16.0); + + ui.add(egui::Hyperlink::from_label_and_url("Report an issue", "https://github.com/nanaian/merlon/issues")); + ui.add(egui::Hyperlink::from_label_and_url("Source code", "https://github.com/nanaian/merlon")); + ui.add(egui::Hyperlink::from_label_and_url("Paper Mario Modding Discord server", "https://discord.gg/paper-mario-modding")); + + ui.add_space(16.0); + }); + }); + + /*egui::TopBottomPanel::bottom("bottom_bar").show(ctx, |ui| { + });*/ + + egui::CentralPanel::default().show(ctx, |ui| { + ui.vertical_centered(|ui| { + ui.spacing_mut().item_spacing.y = 8.0; + + update_packages_list(ui, &self.packages); + }); + }); + + // Collect dropped files + ctx.input(|i| { + if !i.raw.dropped_files.is_empty() { + // TODO: handle them, i.e. open .merlon files, open directories, etc. + } + }); + } +} + +pub fn update_packages_list(ui: &mut egui::Ui, packages: &VecDeque) { + egui::ScrollArea::vertical().show(ui, |ui| { + if packages.is_empty() { + ui.centered_and_justified(|ui| { + ui.label("No packages found."); + }); + } else { + for package in packages { + let result: Result<()> = ui.group(|ui| { + let manifest = package.manifest()?; // TODO: cache this + let metadata = manifest.metadata(); + + ui.vertical(|ui| { + let name_str: &str = metadata.name().into(); + ui.heading(name_str); + ui.label(metadata.authors().join(", ")); + ui.label(format!("Version {}", metadata.version())); + ui.label(metadata.description()); + ui.small(package.path().to_string_lossy()); + }); + + Ok(()) + }).inner; + if let Err(e) = result { + ui.label(format!("Error: {}", e)); + } + } + } + }); +} diff --git a/src/gui/logotype.rs b/src/gui/logotype.rs new file mode 100644 index 0000000..4ce726c --- /dev/null +++ b/src/gui/logotype.rs @@ -0,0 +1,79 @@ +use egui::*; +use egui_extras::RetainedImage; +use serde::{Deserialize, Serialize}; +use std::fmt::{Debug, Formatter}; + +const PNG_BYTES: &[u8] = include_bytes!("../../assets/logo/logotype.png"); + +/// Merlon logotype. Displays a heading if the image fails to load. +#[derive(Default, Debug)] +pub struct Logotype { + state: State, +} + +enum State { + Unloaded, + Failed, + Loaded { + image: RetainedImage, + texture_id: TextureId, + } +} + +impl Logotype { + pub fn load_if_first_attempt(&mut self, ctx: &Context) { + if let State::Unloaded = self.state { + self.state = match RetainedImage::from_image_bytes("logotype", PNG_BYTES) { + Ok(image) => State::Loaded { + texture_id: image.texture_id(ctx), + image, + }, + Err(err) => { + log::error!("failed loading logotype image: {}", err); + State::Failed + } + }; + } + } +} + +impl Widget for &mut Logotype { + fn ui(self, ui: &mut Ui) -> Response { + match &self.state { + State::Loaded { image, texture_id } => { + ui.image(*texture_id, image.size_vec2()) + } + _ => ui.heading("Merlon"), + } + } +} + +// Always serialize None so that the logotype is not saved to disk. +impl Serialize for Logotype { + fn serialize(&self, serializer: S) -> Result { + serializer.serialize_none() + } +} + +// Deserialize to default, regardless of input. +impl<'de> Deserialize<'de> for Logotype { + fn deserialize>(_: D) -> Result { + Ok(Self::default()) + } +} + +impl Default for State { + fn default() -> Self { + State::Unloaded + } +} + +impl Debug for State { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + match self { + State::Unloaded => write!(f, "Unloaded"), + State::Failed => write!(f, "Failed"), + State::Loaded { .. } => write!(f, "Loaded"), + } + } +} diff --git a/src/gui/support_link.rs b/src/gui/support_link.rs new file mode 100644 index 0000000..bf7002e --- /dev/null +++ b/src/gui/support_link.rs @@ -0,0 +1,62 @@ +use egui::*; + +/// Hyperlink to the support page. +/// Styled with a heart icon and a pink colour. +pub struct SupportLink; + +const PINK: Color32 = Color32::from_rgb(0xea, 0x7a, 0xa1); // #ea7aa1 +const URL: &'static str = "https://github.com/sponsors/nanaian"; + +impl Widget for SupportLink { + fn ui(self, ui: &mut Ui) -> Response { + let text = RichText::new(format!("{} Support development", egui_phosphor::HEART)).color(PINK); // FIXME icon + let label = Label::new(text).sense(Sense::click()); + let (pos, text_galley, response) = label.layout_in_ui(ui); + + // Hand icon on hover + if response.hovered() { + ui.ctx().set_cursor_icon(CursorIcon::PointingHand); + } + + // Draw underline on hover/focus + if ui.is_rect_visible(response.rect) { + let color = PINK; + let visuals = ui.style().interact(&response); + + let underline = if response.hovered() || response.has_focus() { + Stroke::new(visuals.fg_stroke.width, color) + } else { + Stroke::NONE + }; + + ui.painter().add(epaint::TextShape { + pos, + galley: text_galley.galley, + override_text_color: Some(color), + underline, + angle: 0.0, + }); + } + + // On click, open URL + if response.clicked() { + let modifiers = ui.ctx().input(|i| i.modifiers); + ui.ctx().output_mut(|o| { + o.open_url = Some(egui::output::OpenUrl { + url: URL.to_string(), + new_tab: modifiers.any(), + }); + }); + } + if response.middle_clicked() { + ui.ctx().output_mut(|o| { + o.open_url = Some(egui::output::OpenUrl { + url: URL.to_string(), + new_tab: true, + }); + }); + } + + response + } +} diff --git a/src/main.rs b/src/main.rs index bba7b34..dc6da94 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,6 +6,7 @@ use merlon::package::{Package, InitialisedPackage, Distributable}; use std::path::PathBuf; mod new; +mod gui; /// Mod package manager for the Paper Mario (N64) decompilation. /// @@ -63,10 +64,6 @@ enum SubCommand { /// Add a dependency to the current package. Add(merlon::package::init::AddDependencyOptions), - - /// Launch the GUI. - #[cfg(feature = "gui")] - Gui, } #[derive(Parser, Debug)] @@ -93,7 +90,8 @@ fn main() -> Result<()> { let is_gui = std::env::var("TERM").is_err() || matches!(std::env::var("MERLON_GUI"), Ok(v) if v == "1"); if is_gui { - main_gui() + main_gui().unwrap(); // error types aren't compatible + Ok(()) } else { main_cli() } @@ -111,17 +109,18 @@ fn main_cli() -> Result<()> { } #[cfg(feature = "gui")] -fn main_gui() -> Result<()> { - use klask::Settings; - - klask::run_derived::(Settings::default(), |args| { - if let Err(error) = args.run() { - // TODO: better error handling, e.g. nativefiledialog - eprintln!("{}", error); - std::process::exit(1); - } - }); - Ok(()) +fn main_gui() -> eframe::Result<()> { + let native_options = eframe::NativeOptions { + drag_and_drop_support: true, + fullsize_content: true, + min_window_size: Some(egui::vec2(600.0, 300.0)), + ..Default::default() + }; + eframe::run_native( + "Merlon", + native_options, + Box::new(|cc| Box::new(gui::App::new(cc))), + ) } impl Args { @@ -242,9 +241,7 @@ impl Args { } else { bail!("cannot add dependency: not in a package directory."); } - }, - #[cfg(feature = "gui")] - SubCommand::Gui => main_gui(), + } } } } diff --git a/src/package.rs b/src/package.rs index 422a242..523acde 100644 --- a/src/package.rs +++ b/src/package.rs @@ -19,6 +19,7 @@ use std::{ }; use anyhow::{Result, bail}; use pyo3::prelude::*; +use serde::{Serialize, Deserialize, Deserializer, de::Error}; pub mod manifest; pub use manifest::{ @@ -42,7 +43,7 @@ pub fn is_unexported_package(path: &Path) -> bool { } /// A package in the form of a directory. -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Serialize)] #[pyclass(module = "merlon.package")] pub struct Package { path: PathBuf, @@ -267,6 +268,13 @@ impl Hash for Package { } } +impl<'de> Deserialize<'de> for Package { + fn deserialize>(deserializer: D) -> Result { + let path = PathBuf::deserialize(deserializer)?; + Self::try_from(path).map_err(D::Error::custom) + } +} + /// Finds the nearest git root, starting from the current directory. /// If within a submodule, returns the root of the parent repo. /// Otherwise, returns the root of the current repo. diff --git a/src/package/distribute.rs b/src/package/distribute.rs index b73ca24..7a985b1 100644 --- a/src/package/distribute.rs +++ b/src/package/distribute.rs @@ -80,7 +80,7 @@ pub struct ApplyOptions { } /// Options for [`Distributable::open_to_dir`]. -#[derive(Parser, Debug, Clone)] +#[derive(Parser, Debug, Clone, Default)] #[pyclass(module = "merlon.package.distribute")] pub struct OpenOptions { /// The output directory to write the package source code to. diff --git a/src/package/init.rs b/src/package/init.rs index 436ae17..9694e14 100644 --- a/src/package/init.rs +++ b/src/package/init.rs @@ -184,6 +184,15 @@ impl InitialisedPackage { bail!("there is already a decomp clone here - delete the {} directory and try again", SUBREPO_DIR_NAME); } + // Check baserom is valid + if !options.baserom.is_file() { + bail!("baserom {:?} is not a file", options.baserom); + } + let rom = Rom::from(options.baserom.clone()); + if rom.sha1_string().unwrap_or_else(|_| "".to_string()) != crate::rom::PAPERMARIO_US_SHA1 { + bail!("baserom {:?} does not match expected SHA1 for unmodified Paper Mario (US)", options.baserom); + } + // If rev not provided on command line, use the one in the manifest, otherwise use latest let manifest = package.manifest()?; let rev = match &options.rev { @@ -235,10 +244,6 @@ impl InitialisedPackage { .context("failed to create assets subdirectory")?; // Copy baserom - if !options.baserom.is_file() { - bail!("baserom {:?} is not a file", options.baserom); - } - // TODO: check baserom sha1 is valid let baserom_path = package.path().join(SUBREPO_DIR_NAME).join("ver/us/baserom.z64"); copy(options.baserom, &baserom_path) .with_context(|| format!("failed to copy baserom to {:?}", baserom_path))?; diff --git a/src/package/manifest/name.rs b/src/package/manifest/name.rs index 7b59477..886fbee 100644 --- a/src/package/manifest/name.rs +++ b/src/package/manifest/name.rs @@ -100,6 +100,12 @@ impl TryFrom<&str> for Name { } } +impl<'name> Into<&'name str> for &'name Name { + fn into(self) -> &'name str { + &self.0 + } +} + impl FromPyObject<'_> for Name { fn extract(ob: &PyAny) -> PyResult { let s: String = ob.extract()?; diff --git a/src/rom.rs b/src/rom.rs index d301004..ce3fa74 100644 --- a/src/rom.rs +++ b/src/rom.rs @@ -7,9 +7,16 @@ use std::fmt; use sha1::{Sha1, Digest}; use anyhow::Result; use pyo3::prelude::*; +use serde::{Serialize, Deserialize}; + +/// The file extensions that are supported to be opened as ROMs. +pub const EXTENSIONS: &[&str] = &["z64"]; // TODO: auto-convert n64 and v64 to z64 + +/// The SHA1 hash of the Paper Mario (US) ROM. +pub const PAPERMARIO_US_SHA1: &str = "3837f44cda784b466c9a2d99df70d77c322b97a0"; /// An N64 ROM file on disk. -#[derive(Debug)] +#[derive(Debug, Serialize, Deserialize)] #[pyclass(module = "merlon.rom")] pub struct Rom { path: PathBuf,