diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d00beb0..5c1eff3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,14 +19,14 @@ jobs: bin: zcb3.exe name: zcb3-Windows-x86_64.zip command: both - + - release_for: macOS-x86_64 os: macOS-latest target: x86_64-apple-darwin bin: zcb3 name: zcb3-Darwin-x86_64.tar.gz command: both - + - release_for: Linux-x86_64 os: ubuntu-20.04 target: x86_64-unknown-linux-gnu @@ -45,7 +45,9 @@ jobs: - name: Checkout uses: actions/checkout@v3 - name: Install build-essential and libgtk-3-dev on Linux - run: sudo apt-get install --yes build-essential libgtk-3-dev + run: | + sudo apt-get update + sudo apt-get install --yes build-essential libgtk-3-dev if: contains(matrix.platform.name, 'linux') - name: Build binary uses: houseabsolute/actions-rust-cross@v0 @@ -55,7 +57,7 @@ jobs: args: "--release" strip: true - name: Publish release artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: zcb3-${{ matrix.platform.target }} path: "target/${{ matrix.platform.target }}/release/zcb3*" diff --git a/Cargo.lock b/Cargo.lock index e2af740..a75830d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "ab_glyph" -version = "0.2.27" +version = "0.2.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c3a1cbc201cc13ed06cf875efb781f2249b3677f5c74571b67d817877f9d697" +checksum = "79faae4620f45232f599d9bc7b290f88247a0834162c4495ab2f02d60004adfb" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -99,6 +99,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + [[package]] name = "ahash" version = "0.8.11" @@ -187,9 +193,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" [[package]] name = "anstyle-parse" @@ -221,9 +227,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" [[package]] name = "arboard" @@ -327,7 +333,7 @@ checksum = "c8828ec6e544c02b0d6691d21ed9f9218d0384a82542855073c2a3f58304aaf0" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.1.0", + "fastrand 2.1.1", "futures-lite 2.3.0", "slab", ] @@ -476,7 +482,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", ] [[package]] @@ -505,13 +511,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.80" +version = "0.1.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", ] [[package]] @@ -712,7 +718,7 @@ dependencies = [ "chrono", "dlhn", "fasteval2", - "fastrand 2.1.0", + "fastrand 2.1.1", "flate2", "gdr", "hound", @@ -729,9 +735,9 @@ dependencies = [ [[package]] name = "built" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6a6c0b39c38fd754ac338b00a88066436389c0f029da5d37d1e01091d9b7c17" +checksum = "236e6289eda5a812bc6b53c3b024039382a2895fbbeef2d748b2931546d392c4" [[package]] name = "bumpalo" @@ -756,7 +762,7 @@ checksum = "1ee891b04274a59bd38b412188e24b849617b2e45a0fd8d057deb63e7403761b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", ] [[package]] @@ -765,6 +771,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + [[package]] name = "bytes" version = "1.6.0" @@ -799,9 +811,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.103" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2755ff20a1d93490d26ba33a6f092a38a508398a5320df5d4b3014fcccce9410" +checksum = "eaff6f8ce506b9773fa786672d63fc7a191ffea1be33f72bbd4aeacefca9ffc8" dependencies = [ "jobserver", "libc", @@ -852,14 +864,14 @@ dependencies = [ "js-sys", "num-traits", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] name = "clap" -version = "4.5.8" +version = "4.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84b3edb18336f4df585bc9aa31dd99c036dfa5dc5e9a2939a722a188f3a8970d" +checksum = "7be5744db7978a28d9df86a214130d106a89ce49644cbc4e3f0c22c3fba30615" dependencies = [ "clap_builder", "clap_derive", @@ -867,9 +879,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.8" +version = "4.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1c09dd5ada6c6c78075d6fd0da3f90d8080651e2d6cc8eb2f1aaa4034ced708" +checksum = "a5fbc17d3ef8278f55b282b2a2e75ae6f6c7d4bb70ed3d0382375104bfafdb4b" dependencies = [ "anstream", "anstyle", @@ -879,14 +891,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.8" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", ] [[package]] @@ -897,43 +909,13 @@ checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" [[package]] name = "clipboard-win" -version = "5.3.1" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79f4473f5144e20d9aceaf2972478f06ddf687831eafeeb434fbaf0acc4144ad" +checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" dependencies = [ "error-code", ] -[[package]] -name = "cocoa" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" -dependencies = [ - "bitflags 1.3.2", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" -dependencies = [ - "bitflags 1.3.2", - "block", - "core-foundation", - "core-graphics-types", - "libc", - "objc", -] - [[package]] name = "codespan-reporting" version = "0.11.1" @@ -944,12 +926,6 @@ 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.1" @@ -1218,22 +1194,23 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "ecolor" -version = "0.27.2" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20930a432bbd57a6d55e07976089708d4893f3d556cf42a0d79e9e321fa73b10" +checksum = "2e6b451ff1143f6de0f33fc7f1b68fecfd2c7de06e104de96c4514de3f5396f8" dependencies = [ "bytemuck", + "emath", "serde", ] [[package]] name = "eframe" -version = "0.27.2" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020e2ccef6bbcec71dbc542f7eed64a5846fc3076727f5746da8fd307c91bab2" +checksum = "6490ef800b2e41ee129b1f32f9ac15f713233fe3bc18e241a1afe1e4fb6811e0" dependencies = [ + "ahash", "bytemuck", - "cocoa", "document-features", "egui", "egui-wgpu", @@ -1242,16 +1219,17 @@ dependencies = [ "glow", "glutin", "glutin-winit", - "image 0.24.9", + "image", "js-sys", "log", - "objc", + "objc2 0.5.2", + "objc2-app-kit", + "objc2-foundation", "parking_lot", "percent-encoding", "raw-window-handle 0.5.2", "raw-window-handle 0.6.2", "static_assertions", - "thiserror", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -1262,12 +1240,13 @@ dependencies = [ [[package]] name = "egui" -version = "0.27.2" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "584c5d1bf9a67b25778a3323af222dbe1a1feb532190e103901187f92c7fe29a" +checksum = "20c97e70a2768de630f161bb5392cbd3874fcf72868f14df0e002e82e06cb798" dependencies = [ "accesskit", "ahash", + "emath", "epaint", "log", "nohash-hasher", @@ -1276,18 +1255,19 @@ dependencies = [ [[package]] name = "egui-modal" -version = "0.3.6" -source = "git+https://github.com/zeozeozeo/egui-modal#4aa823eb217122d889b81864dbbffd0d6259bd5d" +version = "0.4.0" +source = "git+https://github.com/zeozeozeo/egui-modal#4771c35e972cd22db054d0224937680c0472a7cf" dependencies = [ "egui", ] [[package]] name = "egui-wgpu" -version = "0.27.2" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469ff65843f88a702b731a1532b7d03b0e8e96d283e70f3a22b0e06c46cb9b37" +checksum = "47c7a7c707877c3362a321ebb4f32be811c0b91f7aebf345fb162405c0218b4c" dependencies = [ + "ahash", "bytemuck", "document-features", "egui", @@ -1302,11 +1282,12 @@ dependencies = [ [[package]] name = "egui-winit" -version = "0.27.2" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e3da0cbe020f341450c599b35b92de4af7b00abde85624fd16f09c885573609" +checksum = "fac4e066af341bf92559f60dbdf2020b2a03c963415349af5f3f8d79ff7a4926" dependencies = [ "accesskit_winit", + "ahash", "arboard", "egui", "log", @@ -1319,8 +1300,9 @@ dependencies = [ [[package]] name = "egui_clickpack_db" -version = "0.2.0" -source = "git+https://github.com/zeozeozeo/egui_clickpack_db.git#eb60943e3d7e0226729a01e4f53924196a31c2c6" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46b76c851a18d448542a53b337890f5b63a8edcb354aca6e0b1fedcc5ea9c5d8" dependencies = [ "egui", "egui_extras", @@ -1336,13 +1318,14 @@ dependencies = [ [[package]] name = "egui_extras" -version = "0.27.2" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b78779f35ded1a853786c9ce0b43fe1053e10a21ea3b23ebea411805ce41593" +checksum = "5bb783d9fa348f69ed5c340aa25af78b5472043090e8b809040e30960cc2a746" dependencies = [ + "ahash", "egui", "enum-map", - "image 0.24.9", + "image", "log", "mime_guess2", "serde", @@ -1350,10 +1333,11 @@ dependencies = [ [[package]] name = "egui_glow" -version = "0.27.2" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0e5d975f3c86edc3d35b1db88bb27c15dde7c55d3b5af164968ab5ede3f44ca" +checksum = "4e2bdc8b38cfa17cc712c4ae079e30c71c00cd4c2763c9e16dc7860a02769103" dependencies = [ + "ahash", "bytemuck", "egui", "glow", @@ -1366,11 +1350,13 @@ dependencies = [ [[package]] name = "egui_plot" -version = "0.27.2" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7854b86dc1c2d352c5270db3d600011daa913d6b554141a03939761323288a1" +checksum = "c7acc4fe778c41b91d57e04c1a2cf5765b3dc977f9f8384d2bb2eb4254855365" dependencies = [ + "ahash", "egui", + "emath", ] [[package]] @@ -1381,9 +1367,9 @@ checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "emath" -version = "0.27.2" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4c3a552cfca14630702449d35f41c84a0d15963273771c6059175a803620f3f" +checksum = "0a6a21708405ea88f63d8309650b4d77431f4bc28fb9d8e6f77d3963b51249e6" dependencies = [ "bytemuck", "serde", @@ -1422,7 +1408,7 @@ checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", ] [[package]] @@ -1443,7 +1429,7 @@ checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", ] [[package]] @@ -1454,7 +1440,7 @@ checksum = "6fd000fd6988e73bbe993ea3db9b1aa64906ab88766d654973924340c8cddb42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", ] [[package]] @@ -1469,9 +1455,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.3" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" +checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" dependencies = [ "anstream", "anstyle", @@ -1482,9 +1468,9 @@ dependencies = [ [[package]] name = "epaint" -version = "0.27.2" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b381f8b149657a4acf837095351839f32cd5c4aec1817fc4df84e18d76334176" +checksum = "3f0dcc0a0771e7500e94cd1cb797bd13c9f23b9409bdc3c824e2cbc562b7fa01" dependencies = [ "ab_glyph", "ahash", @@ -1591,9 +1577,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "fdeflate" @@ -1606,12 +1592,12 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.8.0", ] [[package]] @@ -1632,7 +1618,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", ] [[package]] @@ -1692,7 +1678,7 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" dependencies = [ - "fastrand 2.1.0", + "fastrand 2.1.1", "futures-core", "futures-io", "parking", @@ -1707,7 +1693,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", ] [[package]] @@ -1911,9 +1897,9 @@ dependencies = [ [[package]] name = "gpu-descriptor" -version = "0.2.4" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c" +checksum = "9c08c1f623a8d0b722b8b99f821eb0ba672a1618f0d3b16ddbee1cedd2dd8557" dependencies = [ "bitflags 2.6.0", "gpu-descriptor-types", @@ -1922,9 +1908,9 @@ dependencies = [ [[package]] name = "gpu-descriptor-types" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c" +checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ "bitflags 2.6.0", ] @@ -2078,25 +2064,12 @@ dependencies = [ [[package]] name = "image" -version = "0.24.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "num-traits", - "png", -] - -[[package]] -name = "image" -version = "0.25.1" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd54d660e773627692c524beaad361aca785a4f9f5730ce91f42aabe5bce3d11" +checksum = "99314c8a2152b8ddb211f924cdae532d8c5e4c8bb54728e12fff1b0cd5963a10" dependencies = [ "bytemuck", - "byteorder", + "byteorder-lite", "num-traits", "png", ] @@ -2264,7 +2237,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e310b3a6b5907f99202fcdb4960ff45b93735d7c7d96b760fcff8db2dc0e103d" dependencies = [ "cfg-if", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -2372,9 +2345,9 @@ dependencies = [ [[package]] name = "metal" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25" +checksum = "5637e166ea14be6063a3f8ba5ccb9a4159df7d8f6d61c02fc3d480b1f90dcfcb" dependencies = [ "bitflags 2.6.0", "block", @@ -2411,12 +2384,22 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + [[package]] name = "naga" -version = "0.19.2" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e3524642f53d9af419ab5e8dd29d3ba155708267667c2f3f06c88c9e130843" +checksum = "e536ae46fcab0876853bd4a632ede5df4b1c2527a58f6c5a4150fe86be858231" dependencies = [ + "arrayvec", "bit-set", "bitflags 2.6.0", "codespan-reporting", @@ -2555,7 +2538,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", ] [[package]] @@ -2565,7 +2548,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" dependencies = [ "malloc_buf", - "objc_exception", ] [[package]] @@ -2720,15 +2702,6 @@ dependencies = [ "objc2-metal", ] -[[package]] -name = "objc_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - [[package]] name = "objc_id" version = "0.1.1" @@ -2746,9 +2719,9 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "open" -version = "5.1.4" +version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5ca541f22b1c46d4bb9801014f234758ab4297e7870b904b6a8415b980a7388" +checksum = "9d2c909a3fce3bd80efef4cd1c6c056bd9376a8fe06fcfdbebaf32cb485a7e37" dependencies = [ "is-wsl", "libc", @@ -2776,9 +2749,9 @@ dependencies = [ [[package]] name = "owned_ttf_parser" -version = "0.21.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b41438d2fc63c46c74a2203bf5ccd82c41ba04347b2fcf5754f230b167067d5" +checksum = "490d3a563d3122bf7c911a59b0add9389e5ec0f5f0c3ac6b91ff235a0e6a7f90" dependencies = [ "ttf-parser", ] @@ -2809,7 +2782,7 @@ dependencies = [ "libc", "redox_syscall 0.5.2", "smallvec", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -2867,7 +2840,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" dependencies = [ "atomic-waker", - "fastrand 2.1.0", + "fastrand 2.1.1", "futures-io", ] @@ -2887,7 +2860,7 @@ dependencies = [ "crc32fast", "fdeflate", "flate2", - "miniz_oxide", + "miniz_oxide 0.7.4", ] [[package]] @@ -2981,9 +2954,9 @@ checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" [[package]] name = "quick-xml" -version = "0.31.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +checksum = "6f24d770aeca0eacb81ac29dfbc55ebcc09312fdd1f8bbecdc7e4a84e000e3b4" dependencies = [ "memchr", ] @@ -3216,11 +3189,12 @@ dependencies = [ [[package]] name = "rustls" -version = "0.22.4" +version = "0.23.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" +checksum = "4828ea528154ae444e5a642dbb7d5623354030dc9822b83fd9bb79683c7399d0" dependencies = [ "log", + "once_cell", "ring", "rustls-pki-types", "rustls-webpki", @@ -3236,9 +3210,9 @@ checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" [[package]] name = "rustls-webpki" -version = "0.102.4" +version = "0.102.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" +checksum = "f9a6fccd794a42c2c105b513a2f62bc3fd8f3ba57a4593677ceb0bd035164d78" dependencies = [ "ring", "rustls-pki-types", @@ -3294,9 +3268,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sctk-adwaita" -version = "0.8.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b2eaf3a5b264a521b988b2e73042e742df700c4f962cde845d1541adb46550" +checksum = "70b31447ca297092c5a9916fc3b955203157b37c19ca8edde4f52e9843e602c7" dependencies = [ "ab_glyph", "log", @@ -3307,20 +3281,20 @@ dependencies = [ [[package]] name = "self-replace" -version = "1.3.7" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525db198616b2bcd0f245daf7bfd8130222f7ee6af9ff9984c19a61bf1160c55" +checksum = "03ec815b5eab420ab893f63393878d89c90fdd94c0bcc44c07abb8ad95552fb7" dependencies = [ - "fastrand 1.9.0", + "fastrand 2.1.1", "tempfile", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "serde" -version = "1.0.203" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] @@ -3336,22 +3310,23 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.203" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", ] [[package]] name = "serde_json" -version = "1.0.118" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d947f6b3163d8857ea16c4fa0dd4840d52f3041039a85decd46867eb1abef2e4" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -3364,7 +3339,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", ] [[package]] @@ -3747,9 +3722,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.68" +version = "2.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "901fa70d88b9d6c98022e23b4136f9f3e54e4662c3bc1bd1d84a42a9a0f0c1e9" +checksum = "2f0209b68b3613b093e0ec905354eccaedcfe83b8cb37cbdeae64026c3064c16" dependencies = [ "proc-macro2", "quote", @@ -3758,14 +3733,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.10.1" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ "cfg-if", - "fastrand 2.1.0", + "fastrand 2.1.1", + "once_cell", "rustix 0.38.34", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3794,7 +3770,7 @@ checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", ] [[package]] @@ -3863,9 +3839,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c55115c6fbe2d2bef26eb09ad74bde02d8255476fc0c7b515ef09fbb35742d82" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -3932,7 +3908,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", ] [[package]] @@ -3946,9 +3922,9 @@ dependencies = [ [[package]] name = "ttf-parser" -version = "0.21.1" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" +checksum = "8686b91785aff82828ed725225925b33b4fde44c4bb15876e5f7c832724c420a" [[package]] name = "type-map" @@ -4032,9 +4008,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "ureq" -version = "2.9.7" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d11a831e3c0b56e438a28308e7c810799e3c118417f342d30ecec080105395cd" +checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" dependencies = [ "base64", "flate2", @@ -4042,7 +4018,6 @@ dependencies = [ "once_cell", "rustls", "rustls-pki-types", - "rustls-webpki", "url", "webpki-roots", ] @@ -4126,7 +4101,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", "wasm-bindgen-shared", ] @@ -4160,7 +4135,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4173,9 +4148,9 @@ checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "wayland-backend" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34e9e6b6d4a2bb4e7e69433e0b35c7923b95d4dc8503a84d25ec917a4bbfdf07" +checksum = "269c04f203640d0da2092d1b8d89a2d081714ae3ac2f1b53e99f205740517198" dependencies = [ "cc", "downcast-rs", @@ -4187,9 +4162,9 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.3" +version = "0.31.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e63801c85358a431f986cffa74ba9599ff571fc5774ac113ed3b490c19a1133" +checksum = "08bd0f46c069d3382a36c8666c1b9ccef32b8b04f41667ca1fef06a1adcc2982" dependencies = [ "bitflags 2.6.0", "rustix 0.38.34", @@ -4210,9 +4185,9 @@ dependencies = [ [[package]] name = "wayland-cursor" -version = "0.31.3" +version = "0.31.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a206e8b2b53b1d3fcb9428fec72bc278ce539e2fa81fe2bfc1ab27703d5187b9" +checksum = "09414bcf0fd8d9577d73e9ac4659ebc45bcc9cff1980a350543ad8e50ee263b2" dependencies = [ "rustix 0.38.34", "wayland-client", @@ -4259,9 +4234,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.2" +version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67da50b9f80159dec0ea4c11c13e24ef9e7574bd6ce24b01860a175010cea565" +checksum = "edf466fc49a4feb65a511ca403fec3601494d0dee85dbf37fff6fa0dd4eec3b6" dependencies = [ "proc-macro2", "quick-xml", @@ -4270,9 +4245,9 @@ dependencies = [ [[package]] name = "wayland-sys" -version = "0.31.2" +version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "105b1842da6554f91526c14a2a2172897b7f745a805d62af4ce698706be79c12" +checksum = "4a6754825230fa5b27bafaa28c30b3c9e72c55530581220cef401fa422c0fae7" dependencies = [ "dlib", "log", @@ -4302,17 +4277,18 @@ dependencies = [ [[package]] name = "webbrowser" -version = "0.8.15" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db67ae75a9405634f5882791678772c94ff5f16a66535aae186e26aa0841fc8b" +checksum = "425ba64c1e13b1c6e8c5d2541c8fac10022ca584f33da781db01b5756aef1f4e" dependencies = [ + "block2 0.5.1", "core-foundation", "home", "jni", "log", "ndk-context", - "objc", - "raw-window-handle 0.5.2", + "objc2 0.5.2", + "objc2-foundation", "url", "web-sys", ] @@ -4328,13 +4304,14 @@ dependencies = [ [[package]] name = "wgpu" -version = "0.19.4" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbd7311dbd2abcfebaabf1841a2824ed7c8be443a0f29166e5d3c6a53a762c01" +checksum = "90e37c7b9921b75dfd26dd973fdcbce36f13dfa6e2dc82aece584e0ed48c355c" dependencies = [ "arrayvec", "cfg-if", "cfg_aliases 0.1.1", + "document-features", "js-sys", "log", "parking_lot", @@ -4352,15 +4329,16 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "0.19.4" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b94525fc99ba9e5c9a9e24764f2bc29bad0911a7446c12f446a8277369bf3a" +checksum = "d50819ab545b867d8a454d1d756b90cd5f15da1f2943334ca314af10583c9d39" dependencies = [ "arrayvec", "bit-vec", "bitflags 2.6.0", "cfg_aliases 0.1.1", "codespan-reporting", + "document-features", "indexmap", "log", "naga", @@ -4378,9 +4356,9 @@ dependencies = [ [[package]] name = "wgpu-hal" -version = "0.19.4" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1a4924366df7ab41a5d8546d6534f1f33231aa5b3f72b9930e300f254e39c3" +checksum = "172e490a87295564f3fcc0f165798d87386f6231b04d4548bca458cbbfd63222" dependencies = [ "android_system_properties", "arrayvec", @@ -4419,9 +4397,9 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "0.19.2" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b671ff9fb03f78b46ff176494ee1ebe7d603393f42664be55b64dc8d53969805" +checksum = "1353d9a46bff7f955a680577f34c69122628cc2076e1d6f3a9be6ef00ae793ef" dependencies = [ "bitflags 2.6.0", "js-sys", @@ -4483,7 +4461,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" dependencies = [ "windows-core", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -4492,7 +4470,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -4541,7 +4519,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -4576,18 +4563,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -4604,9 +4591,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -4622,9 +4609,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -4640,15 +4627,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -4664,9 +4651,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -4682,9 +4669,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -4700,9 +4687,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -4718,9 +4705,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winit" @@ -4971,7 +4958,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", "zvariant_utils 2.0.0", ] @@ -4999,7 +4986,7 @@ dependencies = [ [[package]] name = "zcb3" -version = "3.5.0" +version = "3.5.2" dependencies = [ "anyhow", "bot", @@ -5012,8 +4999,8 @@ dependencies = [ "egui_extras", "egui_plot", "env_logger", - "fastrand 2.1.0", - "image 0.25.1", + "fastrand 2.1.1", + "image", "log", "rayon", "rfd", @@ -5030,22 +5017,22 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", ] [[package]] @@ -5127,7 +5114,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", "zvariant_utils 2.0.0", ] @@ -5150,5 +5137,5 @@ checksum = "fc242db087efc22bd9ade7aa7809e4ba828132edc312871584a6b4391bdf8786" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.70", ] diff --git a/Cargo.toml b/Cargo.toml index e54a8df..6206fe1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zcb3" -version = "3.5.0" +version = "3.5.2" edition = "2021" authors = ["zeozeozeo"] build = "build.rs" @@ -16,28 +16,28 @@ codegen-units = 1 members = [".", "bot", "bot/ybot_fmt", "bot/gdr"] [dependencies] -clap = { version = "4.5.7", features = ["derive"] } -eframe = "0.27.2" +clap = { version = "4.5.19", features = ["derive"] } +eframe = "0.28" egui-modal = { git = "https://github.com/zeozeozeo/egui-modal" } -env_logger = "0.11.3" -image = { version = "0.25.1", default-features = false, features = ["ico", "png"] } +env_logger = "0.11.5" +image = { version = "0.25.2", default-features = false, features = ["ico", "png"] } rfd = "0.14.1" bot = { path = "bot" } -serde_json = "1.0.118" +serde_json = "1" log = "0.4.21" -anyhow = "1.0.86" +anyhow = "1.0.89" rayon = "1.10.0" -egui_extras = { version = "0.27.2", features = ["image"] } +egui_extras = { version = "0.28", features = ["image"] } rustmatica = "0.2.0" -egui_plot = "0.27.2" -serde = "1.0.203" -self-replace = "1.3.7" -ureq = "2.9.7" -fastrand = "2.1.0" -egui_clickpack_db = { git = "https://github.com/zeozeozeo/egui_clickpack_db.git" } +egui_plot = "0.28" +serde = "1" +self-replace = "1.5.0" +ureq = "2.10.1" +fastrand = "2.1.1" +egui_clickpack_db = "0.3.0" chrono = "0.4.38" timeago = "0.4.2" -tempfile = "3.10.1" +tempfile = "3.12.0" # needed to hide console window on windows [target.'cfg(target_os = "windows")'.dependencies] diff --git a/bot/Cargo.toml b/bot/Cargo.toml index 267e21d..d812c30 100644 --- a/bot/Cargo.toml +++ b/bot/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -anyhow = "1.0.86" +anyhow = "1.0.89" bincode = "1.3.3" byteorder = "1.5.0" chrono = "0.4.38" @@ -18,10 +18,10 @@ leb128 = "0.2.5" log = "0.4.21" lzma-rs = "0.3.0" rayon = "1.10.0" -serde = { version = "1.0.203", features = ["derive"] } -serde_json = "1.0.118" +serde = { version = "1.0.210", features = ["derive"] } +serde_json = "1.0.128" symphonia = { version = "0.5.4", features = ["all"] } ybot_fmt = { path = "ybot_fmt" } gdr = { path = "gdr" } -fastrand = "2.1.0" -flate2 = "1.0.30" +fastrand = "2.1.1" +flate2 = "1.0.34" diff --git a/bot/gdr/Cargo.toml b/bot/gdr/Cargo.toml index c6a1ffe..b1edb72 100644 --- a/bot/gdr/Cargo.toml +++ b/bot/gdr/Cargo.toml @@ -8,5 +8,5 @@ edition = "2021" [dependencies] log = "0.4.21" rmp-serde = "1.3.0" -serde = "1.0.203" -serde_json = "1.0.118" +serde = "1.0.210" +serde_json = "1.0.128" diff --git a/bot/gdr/src/lib.rs b/bot/gdr/src/lib.rs index 668f322..7027d8d 100644 --- a/bot/gdr/src/lib.rs +++ b/bot/gdr/src/lib.rs @@ -165,9 +165,7 @@ impl Default for Replay { impl Replay { pub fn from_slice(data: &[u8]) -> Result { rmp_serde::from_slice(data) - .map_err(|e| { - log::warn!("failed to parse messagepack GDR file: {e}") - }) + .map_err(|e| log::warn!("failed to parse messagepack GDR file: {e}")) .or_else(|_| serde_json::from_slice(data)) } diff --git a/bot/src/parser.rs b/bot/src/parser.rs index 3af9a38..aef33fa 100644 --- a/bot/src/parser.rs +++ b/bot/src/parser.rs @@ -1832,6 +1832,7 @@ impl Replay { let is_new = action_data_size == size_of::(); // read action data + let mut prev_frame_idx = 0; for _ in 0..num_actions { let mut buf = [0; size_of::()]; reader.read_exact(&mut buf)?; @@ -1839,11 +1840,16 @@ impl Replay { let action: ActionDataNew = unsafe { std::mem::transmute(buf) }; let button = Button::from_button_idx(action.button, action.hold); let time = action.frame as f32 / self.fps; - let f = frame_datas + let frame_idx = frame_datas .iter() - .find(|e| e.frame == action.frame && e.player2 == action.player2) - .cloned() - .unwrap_or_default(); + .skip(prev_frame_idx) + .position(|e| e.frame == action.frame && e.player2 == action.player2); + let f = if let Some(idx) = frame_idx { + prev_frame_idx = idx; + &frame_datas[idx] + } else { + &FrameData::default() + }; if action.player2 { self.process_action_p2(time, button, action.frame); self.extended_p2(action.hold, action.frame, f.x, f.y, f.y_accel as _, f.rot); @@ -1855,11 +1861,16 @@ impl Replay { let action: ActionData = unsafe { std::ptr::read(buf.as_ptr() as *const _) }; let button = Button::from_down(action.hold); let time = action.frame as f32 / self.fps; - let f = frame_datas + let frame_idx = frame_datas .iter() - .find(|e| e.frame == action.frame && e.player2 == action.player2) - .cloned() - .unwrap_or_default(); + .skip(prev_frame_idx) + .position(|e| e.frame == action.frame && e.player2 == action.player2); + let f = if let Some(idx) = frame_idx { + prev_frame_idx = idx; + &frame_datas[idx] + } else { + &FrameData::default() + }; if action.player2 { self.process_action_p2(time, button, action.frame); self.extended_p2(action.hold, action.frame, f.x, f.y, f.y_accel as _, f.rot); diff --git a/src/gui.rs b/src/gui.rs index b9e3ca3..38e136b 100644 --- a/src/gui.rs +++ b/src/gui.rs @@ -22,6 +22,7 @@ use std::{ io::{BufWriter, Cursor, Write}, ops::RangeInclusive, path::Path, + rc::Rc, time::{Duration, Instant}, }; use std::{io::BufReader, path::PathBuf}; @@ -50,7 +51,8 @@ pub fn run_gui() -> Result<(), eframe::Error> { options, Box::new(|cc| { egui_extras::install_image_loaders(&cc.egui_ctx); - Box::::default() + cc.egui_ctx.style_mut(|s| s.interaction.tooltip_delay = 0.0); + Ok(Box::::default()) }), ) } @@ -163,8 +165,8 @@ struct App { last_chars: [Key; 9], char_idx: u8, expr_error: String, - plot_points: Vec, - update_tags: Option<(usize, usize, String)>, + plot_points: Rc>, + update_to_tag: Option>, update_expr: bool, clickpack_path: Option, conf_after_replay_selected: Option, @@ -191,8 +193,8 @@ impl Default for App { last_chars: [Key::A; 9], char_idx: 0, expr_error: String::new(), - plot_points: vec![], - update_tags: None, + plot_points: Rc::new(vec![]), + update_to_tag: None, update_expr: false, clickpack_path: None, conf_after_replay_selected: None, @@ -239,11 +241,7 @@ fn drag_value( ) { help_text(ui, help, |ui| { let dragged = ui - .add( - DragValue::new(value) - .clamp_range(clamp_range.clone()) - .speed(0.01), - ) + .add(DragValue::new(value).range(clamp_range.clone()).speed(0.01)) .dragged(); ui.label( if dragged && (clamp_range.start() == value || clamp_range.end() == value) { @@ -441,7 +439,7 @@ fn ureq_get(url: &str) -> Result, String> { Ok(buf) } -fn get_latest_tag() -> Result<(usize, String)> { +fn get_latest_tag() -> Result { let body = ureq_agent() .get("https://api.github.com/repos/zeozeozeo/zcb3/tags") .call()? @@ -454,7 +452,15 @@ fn get_latest_tag() -> Result<(usize, String)> { let name = latest_tag.get("name").context("couldn't get tag name")?; let tagname = name.as_str().context("tag name is not a string")?; - Ok((tagname.replace('.', "").parse()?, tagname.to_string())) + Ok(tagname.to_string()) +} + +fn is_older_version(current: &str, latest: &str) -> bool { + current + .split('.') + .map(|s| s.parse::().unwrap_or(0)) + .zip(latest.split('.').map(|s| s.parse::().unwrap_or(0))) + .any(|(c, l)| c < l) } fn update_to_latest(tag: &str) -> Result<()> { @@ -503,7 +509,7 @@ fn update_to_latest(tag: &str) -> Result<()> { // replace executable self_replace::self_replace(&new_binary) - .map_err(|e| anyhow::anyhow!("{e}. Try using this executable: {new_binary}"))?; + .map_err(|e| anyhow::anyhow!("{e}. Use the created executable: {new_binary}"))?; if std::path::Path::new(&new_binary).try_exists()? { std::fs::remove_file(new_binary)?; @@ -515,10 +521,6 @@ fn update_to_latest(tag: &str) -> Result<()> { Ok(()) } -fn get_current_tag() -> usize { - built_info::PKG_VERSION.replace('.', "").parse().unwrap() -} - fn capitalize_first_letter(s: &str) -> String { let mut c = s.chars(); match c.next() { @@ -529,38 +531,49 @@ fn capitalize_first_letter(s: &str) -> String { impl App { fn show_update_check_modal(&mut self, modal: &Modal, dialog: &Modal, ctx: &egui::Context) { - let Some((tag, current_tag, tag_string)) = self.update_tags.clone() else { + let Some(update_to_tag) = self.update_to_tag.clone() else { return; }; modal.show(|ui| { modal.title(ui, "New version available"); modal.frame(ui, |ui| { - modal.body_and_icon(ui, - format!("A new version of ZCB is available (latest: {tag}, this: {current_tag}).\n\ - Download the new version on the GitHub page, Discord server or use the auto-updater."), - Icon::Info); + modal.body_and_icon( + ui, + format!( + "A new version of ZCB is available (latest: {}, this: {}).\n\ + Download the new version on the GitHub page, \ + Discord server or use the auto-updater (note: you might have \ + to restart ZCB).", + update_to_tag, + built_info::PKG_VERSION + ), + Icon::Info, + ); }); modal.buttons(ui, |ui| { - if modal.button(ui, "auto-update") - .on_hover_text("Automatically update to the newest version.\n\ + if modal + .button(ui, "auto-update") + .on_hover_text( + "Automatically update to the newest version.\n\ This might take some time!\n\ - You might have to restart ZCB") + You might have to restart ZCB", + ) .clicked() { - if let Err(e) = update_to_latest(&tag_string) { + if let Err(e) = update_to_latest(&update_to_tag) { dialog .dialog() .with_title("Failed to perform auto-update") - .with_body(format!("{e}. Try updating manually.")) + .with_body(e) .with_icon(Icon::Error) .open(); } else { ctx.send_viewport_cmd(egui::ViewportCommand::Close); } - self.update_tags = None; + self.update_to_tag = None; } if modal.button(ui, "close").clicked() { - self.update_tags = None; + self.update_to_tag = None; } }); }); @@ -568,20 +581,32 @@ impl App { fn do_update_check(&mut self, modal: &Modal, dialog: &Modal) { let latest_tag = get_latest_tag(); - let current_tag = get_current_tag(); - if let Ok((tag, tag_str)) = latest_tag { - log::info!("latest tag: {tag}, current tag {current_tag}"); - if tag > current_tag { - self.update_tags = Some((tag, current_tag, tag_str)); + if let Ok(latest_tag) = latest_tag { + log::info!( + "latest tag: {latest_tag}, current tag {}", + built_info::PKG_VERSION + ); + if is_older_version(built_info::PKG_VERSION, &latest_tag) { + self.update_to_tag = Some(Rc::new(latest_tag)); modal.open(); } else { + let time_traveler = latest_tag != built_info::PKG_VERSION; dialog .dialog() - .with_title("You are up-to-date!") + .with_title(if time_traveler { + "You're a time traveler!" + } else { + "You are up-to-date!" + }) .with_body(format!( - "You are running the latest version of ZCB ({}).\n\ + "You are running {} of ZCB ({}).\n\ You can always download new versions on GitHub or on the Discord server.", + if time_traveler { + "an unreleased version" + } else { + "the latest version" + }, get_version(), )) .with_icon(Icon::Success) @@ -1073,7 +1098,10 @@ impl App { }); ui.collapsing("Volume settings", |ui| { - ui.label("General volume settings."); + ui.label( + "General volume settings. The volume variation variable \ + defines the range of the random volume offset.", + ); let vol = &mut self.conf.vol_settings; drag_value( @@ -1094,10 +1122,12 @@ impl App { ui.collapsing("Spam volume changes", |ui| { ui.label( - "This can be used to change the volume of the clicks in spams. \ - The spam time is the maximum time between actions when they can be \ - considered 'spam actions'. The spam volume offset factor depends on the delta. \ - The maximum spam offset factor is the maximum value this factor can be.", + "Adjusts the volume of 'spam clicks', which are defined as actions within \ + a maximum time limit, known as the 'spam time'. The volume offset \ + is based on the delta time between actions, multiplied by the spam \ + volume offset factor, and clamped \ + by the maximum spam volume offset. \ + In short, this can be used to lower the volume of clicks in spams.", ); let vol = &mut self.conf.vol_settings; @@ -1290,7 +1320,7 @@ impl App { &mut p.step, "Pitch step", 0.0001..=f32::INFINITY, - "Step between pitch values. The more = the better & the slower", + "Step between pitch values. The less = the better & the slower", ); }); }); @@ -1541,8 +1571,8 @@ impl App { }); ui.collapsing("Supported audio formats", |ui| { ui.label( - "AAC, ADPCM, AIFF, ALAC, CAF, FLAC, MKV, MP1, \ - MP2, MP3, MP4, OGG, Vorbis, WAV, and WebM audio files.", + "AAC, ADPCM, AIFF, ALAC, CAF, FLAC, MKV, MP1, MP2, MP3, MP4, OGG, Vorbis, WAV, \ + and WebM audio files.", ); }); @@ -1801,12 +1831,22 @@ impl App { 0.0..num_actions as f64, num_actions.min(MAX_PLOT_POINTS), ); - self.plot_points = points.points().to_vec(); // save in cache + self.plot_points = points.points().to_vec().into(); // save in cache points } else { - // this clone is really expensive, but it is faster than - // recomputing the entire set of points each frame - PlotPoints::Owned(self.plot_points.clone()) + // PlotPoints can either be an Owned(Vec) or a Generator(ExplicitGenerator), + // so we have to do this hack in order to not clone all plot points each frame + let plot_points = self.plot_points.clone(); + PlotPoints::from_explicit_callback( + move |t| { + plot_points + .get(t as usize) + .unwrap_or(&PlotPoint::new(0.0, 0.0)) + .y + }, + 0.0..self.plot_points.len().saturating_sub(1) as f64, + self.plot_points.len(), + ) }; let line = Line::new(plot_points).name(self.conf.expr_variable.to_string()); @@ -1816,7 +1856,7 @@ impl App { let plot = Plot::new("volume_multiplier_plot") .legend(Legend::default()) .data_aspect(self.conf.plot_data_aspect) - .y_axis_width(4); + .y_axis_min_width(4.0); plot.show(ui, |plot_ui| { plot_ui.line(line); })