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 @@
[](https://github.com/nanaian/merlon/actions)
[](https://merlon.readthedocs.io)
[](https://github.com/nanaian/merlon/releases)
-[](https://discord.gg/paper-mario-modding-279322074412089344)
+[](https://discord.gg/paper-mario-modding)
[](https://crates.io/crates/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,