diff --git a/Cargo.lock b/Cargo.lock index 0d7e6401..c52d218c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9,7 +9,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0e9889e6db118d49d88d84728d0e964d973a5680befb5f85f55141beea5c20b" dependencies = [ "libc", - "mach 0.1.2", + "mach", ] [[package]] @@ -20,14 +20,14 @@ checksum = "99696c398cbaf669d2368076bdb3d627fb0ce51a26899d7c61228c5c0af3bf4a" dependencies = [ "CoreFoundation-sys", "libc", - "mach 0.1.2", + "mach", ] [[package]] name = "ab_glyph" -version = "0.2.21" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5110f1c78cf582855d895ecd0746b653db010cec6d9f5575293f27934d980a39" +checksum = "80179d7dd5d7e8c285d67c4a1e652972a92de7475beddfb92028c76463b13225" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -41,9 +41,9 @@ checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" [[package]] name = "addr2line" -version = "0.19.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] @@ -56,24 +56,37 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "once_cell", "version_check", + "zerocopy", ] [[package]] name = "aho-corasick" -version = "1.0.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] +[[package]] +name = "aliasable" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" + +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + [[package]] name = "alphagen" version = "0.1.0" @@ -85,14 +98,14 @@ dependencies = [ [[package]] name = "alsa" -version = "0.6.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5915f52fe2cf65e83924d037b6c5290b7cee097c6b5c8700746e6168a343fd6b" +checksum = "e2562ad8dcf0f789f65c6fdaad8a8a9708ed6b488e649da28c01656ad66b8b47" dependencies = [ "alsa-sys", "bitflags 1.3.2", "libc", - "nix 0.23.2", + "nix 0.24.3", ] [[package]] @@ -106,16 +119,34 @@ dependencies = [ ] [[package]] -name = "android-tzdata" -version = "0.1.1" +name = "android-activity" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" +checksum = "64529721f27c2314ced0890ce45e469574a73e5e6fdd6e9da1860eb29285f5e0" +dependencies = [ + "android-properties", + "bitflags 1.3.2", + "cc", + "jni-sys", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys 0.4.1+23.1.7779620", + "num_enum 0.6.1", +] [[package]] -name = "android_glue" -version = "0.2.3" +name = "android-properties" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" + +[[package]] +name = "android-tzdata" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" [[package]] name = "android_system_properties" @@ -128,30 +159,29 @@ dependencies = [ [[package]] name = "anstream" -version = "0.3.2" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" +checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", - "is-terminal", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" [[package]] name = "anstyle-parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" +checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" dependencies = [ "utf8parse", ] @@ -167,9 +197,9 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "1.0.1" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" +checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" dependencies = [ "anstyle", "windows-sys 0.48.0", @@ -177,9 +207,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.71" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "approx" @@ -208,12 +238,6 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" - [[package]] name = "arrayvec" version = "0.7.4" @@ -223,28 +247,50 @@ dependencies = [ "serde", ] +[[package]] +name = "ash" +version = "0.37.3+1.3.251" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a" +dependencies = [ + "libloading 0.7.4", +] + [[package]] name = "async-channel" -version = "1.8.0" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" +checksum = "d37875bd9915b7d67c2f117ea2c30a0989874d0b2cb694fe25403c85763c0c9e" dependencies = [ "concurrent-queue", - "event-listener", + "event-listener 3.1.0", + "event-listener-strategy", "futures-core", + "pin-project-lite", ] [[package]] name = "async-executor" -version = "1.5.1" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb" +checksum = "fc5ea910c42e5ab19012bab31f53cb4d63d54c3a27730f9a833a88efcf4bb52d" dependencies = [ - "async-lock", + "async-lock 3.1.0", "async-task", "concurrent-queue", - "fastrand", - "futures-lite", + "fastrand 2.0.1", + "futures-lite 2.0.1", "slab", ] @@ -254,12 +300,12 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776" dependencies = [ - "async-channel", + "async-channel 1.9.0", "async-executor", - "async-io", - "async-lock", + "async-io 1.13.0", + "async-lock 2.8.0", "blocking", - "futures-lite", + "futures-lite 1.13.0", "once_cell", ] @@ -269,44 +315,92 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ - "async-lock", + "async-lock 2.8.0", "autocfg", - "cfg-if 1.0.0", + "cfg-if", "concurrent-queue", - "futures-lite", + "futures-lite 1.13.0", "log", "parking", - "polling", - "rustix", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2 0.4.10", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41ed9d5715c2d329bf1b4da8d60455b99b187f27ba726df2883799af9af60997" +dependencies = [ + "async-lock 3.1.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.0.1", + "parking", + "polling 3.3.0", + "rustix 0.38.24", "slab", - "socket2", + "tracing", "waker-fn", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", ] [[package]] name = "async-lock" -version = "2.7.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" +checksum = "deb2ab2aa8a746e221ab826c73f48bc6ba41be6763f0855cb249eb6d154cf1d7" dependencies = [ - "event-listener", + "event-listener 3.1.0", + "event-listener-strategy", + "pin-project-lite", ] [[package]] name = "async-process" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a9d28b1d97e08915212e2e45310d47854eafa69600756fc735fb788f75199c9" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" dependencies = [ - "async-io", - "async-lock", - "autocfg", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-signal", "blocking", - "cfg-if 1.0.0", - "event-listener", - "futures-lite", - "rustix", - "signal-hook", + "cfg-if", + "event-listener 3.1.0", + "futures-lite 1.13.0", + "rustix 0.38.24", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-signal" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" +dependencies = [ + "async-io 2.2.0", + "async-lock 2.8.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.24", + "signal-hook-registry", + "slab", "windows-sys 0.48.0", ] @@ -316,16 +410,16 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" dependencies = [ - "async-channel", + "async-channel 1.9.0", "async-global-executor", - "async-io", - "async-lock", + "async-io 1.13.0", + "async-lock 2.8.0", "async-process", "crossbeam-utils", "futures-channel", "futures-core", "futures-io", - "futures-lite", + "futures-lite 1.13.0", "gloo-timers", "kv-log-macro", "log", @@ -339,15 +433,15 @@ dependencies = [ [[package]] name = "async-task" -version = "4.4.0" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" +checksum = "b4eb2cdb97421e01129ccb49169d8279ed21e829929144f4a22a6e54ac549ca1" [[package]] name = "atomic-waker" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "atty" @@ -374,38 +468,32 @@ checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" [[package]] name = "backtrace" -version = "0.3.67" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line", "cc", - "cfg-if 1.0.0", + "cfg-if", "libc", - "miniz_oxide 0.6.2", + "miniz_oxide", "object", "rustc-demangle", ] -[[package]] -name = "base-x" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" - [[package]] name = "base64" -version = "0.21.2" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" [[package]] name = "bindgen" -version = "0.64.0" +version = "0.69.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" +checksum = "9ffcebc3849946a7170a05992aac39da343a90676ab392c51a4280981d6379c2" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.1", "cexpr", "clang-sys", "lazy_static", @@ -416,9 +504,24 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 1.0.109", + "syn 2.0.39", ] +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + [[package]] name = "bit_field" version = "0.10.2" @@ -433,9 +536,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.0.2" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "487f1e0fcbe47deb8b0574e646def1c903389d95241dd1bbcc6ce4a715dfc0c1" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" [[package]] name = "block" @@ -443,26 +546,46 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" +[[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" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65" +checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" dependencies = [ - "async-channel", - "async-lock", + "async-channel 2.1.0", + "async-lock 3.1.0", "async-task", - "atomic-waker", - "fastrand", - "futures-lite", - "log", + "fastrand 2.0.1", + "futures-io", + "futures-lite 2.0.1", + "piper", + "tracing", ] [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "byte-slice-cast" @@ -472,35 +595,35 @@ checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "bytemuck" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdde5c9cd29ebd706ce1b35600920a33550e402fc998a2e53ad3b42c3c47a192" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.22", + "syn 2.0.39", ] [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" [[package]] name = "cache-padded" @@ -510,21 +633,26 @@ checksum = "981520c98f422fcc584dc1a95c334e6953900b9106bc47a9839b81790009eb21" [[package]] name = "calloop" -version = "0.9.3" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf2eec61efe56aa1e813f5126959296933cf0700030e4314786c48779a66ab82" +checksum = "52e0d00eb1ea24371a97d2da6201c6747a633dc6dc1988ef503403b4c59504a8" dependencies = [ + "bitflags 1.3.2", "log", - "nix 0.22.3", + "nix 0.25.1", + "slotmap", + "thiserror", + "vec_map", ] [[package]] name = "cc" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ "jobserver", + "libc", ] [[package]] @@ -542,12 +670,6 @@ dependencies = [ "nom", ] -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - [[package]] name = "cfg-if" version = "1.0.0" @@ -555,27 +677,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "cgl" -version = "0.3.2" +name = "cfg_aliases" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" -dependencies = [ - "libc", -] +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" [[package]] name = "chrono" -version = "0.4.26" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", - "time 0.1.45", "wasm-bindgen", - "winapi", + "windows-targets 0.48.5", ] [[package]] @@ -608,25 +726,23 @@ dependencies = [ [[package]] name = "clap" -version = "4.3.8" +version = "4.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9394150f5b4273a1763355bd1c2ec54cc5a2593f790587bcd6b2c947cfa9211" +checksum = "2275f18819641850fa26c89acc84d465c1bf91ce57bc2748b28c420473352f64" dependencies = [ "clap_builder", - "clap_derive 4.3.2", - "once_cell", + "clap_derive 4.4.7", ] [[package]] name = "clap_builder" -version = "4.3.8" +version = "4.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a78fbdd3cc2914ddf37ba444114bc7765bbdcb55ec9cbe6fa054f0137400717" +checksum = "07cdf1b148b25c1e1f7a42225e30a0d99a615cd4637eae7365548dd4529b95bc" dependencies = [ "anstream", "anstyle", - "bitflags 1.3.2", - "clap_lex 0.5.0", + "clap_lex 0.6.0", "strsim", ] @@ -645,14 +761,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.3.2" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8cd2b2a819ad6eec39e8f1d6b53001af1e5469f8c177579cdaeb313115b825f" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.22", + "syn 2.0.39", ] [[package]] @@ -666,9 +782,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "clipboard-win" @@ -708,18 +824,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "983a7010836ecd04dde2c6d27a0cb56ec5d21572177e782bdcb24a600124e921" dependencies = [ "thiserror", - "x11rb", + "x11rb 0.9.0", ] [[package]] name = "coarsetime" -version = "0.1.23" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a90d114103adbc625300f346d4d09dfb4ab1c4a8df6868435dd903392ecf4354" +checksum = "71367d3385c716342014ad17e3d19f7788ae514885a1f4c24f500260fb365e1a" dependencies = [ "libc", "once_cell", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] @@ -732,8 +848,8 @@ dependencies = [ "bitflags 1.3.2", "block", "cocoa-foundation", - "core-foundation 0.9.3", - "core-graphics 0.22.3", + "core-foundation", + "core-graphics", "foreign-types", "libc", "objc", @@ -741,19 +857,28 @@ dependencies = [ [[package]] name = "cocoa-foundation" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" dependencies = [ "bitflags 1.3.2", "block", - "core-foundation 0.9.3", + "core-foundation", "core-graphics-types", - "foreign-types", "libc", "objc", ] +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + [[package]] name = "collect_array" version = "0.1.3" @@ -772,6 +897,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +[[package]] +name = "com-rs" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf43edc576402991846b093a7ca18a3477e0ef9c588cde84964b5d3e43016642" + [[package]] name = "combine" version = "4.6.6" @@ -784,9 +915,9 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400" dependencies = [ "crossbeam-utils", ] @@ -797,17 +928,17 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e37668cb35145dcfaa1931a5f37fde375eeae8068b4c0d2f289da28a270b2d2c" dependencies = [ - "directories", + "directories 4.0.1", "serde", "thiserror", - "toml", + "toml 0.5.11", ] [[package]] name = "conquer-once" -version = "0.3.2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c6d3a9775a69f6d1fe2cc888999b67ed30257d3da4d2af91984e722f2ec918a" +checksum = "5d008a441c0f269f36ca13712528069a86a3e60dffee1d98b976eb3b0b2160b4" dependencies = [ "conquer-util", ] @@ -818,50 +949,22 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e763eef8846b13b380f37dfecda401770b0ca4e56e95170237bd7c25c7db3582" -[[package]] -name = "core-foundation" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" -dependencies = [ - "core-foundation-sys 0.7.0", - "libc", -] - [[package]] name = "core-foundation" version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ - "core-foundation-sys 0.8.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 1.3.2", - "core-foundation 0.7.0", - "foreign-types", - "libc", -] - [[package]] name = "core-graphics" version = "0.22.3" @@ -869,7 +972,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" dependencies = [ "bitflags 1.3.2", - "core-foundation 0.9.3", + "core-foundation", "core-graphics-types", "foreign-types", "libc", @@ -882,64 +985,73 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33" dependencies = [ "bitflags 1.3.2", - "core-foundation 0.9.3", - "libc", -] - -[[package]] -name = "core-video-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" -dependencies = [ - "cfg-if 0.1.10", - "core-foundation-sys 0.7.0", - "core-graphics 0.19.2", + "core-foundation", "libc", - "objc", ] [[package]] name = "coreaudio-rs" -version = "0.10.0" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11894b20ebfe1ff903cbdc52259693389eea03b94918a2def2c30c3bf227ad88" +checksum = "321077172d79c662f64f5071a03120748d5bb652f5231570141be24cfcd2bace" dependencies = [ "bitflags 1.3.2", + "core-foundation-sys", "coreaudio-sys", ] [[package]] name = "coreaudio-sys" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f034b2258e6c4ade2f73bf87b21047567fb913ee9550837c2316d139b0262b24" +checksum = "f3120ebb80a9de008e638ad833d4127d50ea3d3a960ea23ea69bc66d9358a028" dependencies = [ "bindgen", ] +[[package]] +name = "cosmic-text" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0b68966c2543609f8d92f9d33ac3b719b2a67529b0c6c0b3e025637b477eef9" +dependencies = [ + "aliasable", + "fontdb", + "libm", + "log", + "rangemap", + "rustybuzz 0.8.0", + "swash", + "sys-locale", + "unicode-bidi", + "unicode-linebreak", + "unicode-script", + "unicode-segmentation", +] + [[package]] name = "cpal" -version = "0.14.2" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f342c1b63e185e9953584ff2199726bf53850d96610a310e3aca09e9405a2d0b" +checksum = "6d959d90e938c5493000514b446987c07aed46c668faaa7d34d6c7a67b1a578c" dependencies = [ "alsa", - "core-foundation-sys 0.8.4", + "core-foundation-sys", "coreaudio-rs", - "jni", + "dasp_sample", + "jni 0.19.0", "js-sys", "libc", - "mach 0.3.2", - "ndk 0.7.0", + "mach2", + "ndk", "ndk-context", "oboe", "once_cell", "parking_lot 0.12.1", - "stdweb", - "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", "web-sys", - "windows 0.37.0", + "windows 0.46.0", ] [[package]] @@ -948,14 +1060,14 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] name = "creek" -version = "0.2.3" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5144c0d2ade935e744126361ede4007ca3d7d36d06bc3d227b49393c511094b3" +checksum = "b01a32e142cd462c493f706a208780b3f90bed74b55c4ee9f6a67d3f4fe292bd" dependencies = [ "creek-core", "creek-decode-symphonia", @@ -964,28 +1076,29 @@ dependencies = [ [[package]] name = "creek-core" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee99446d0b490e7b6bd094772ec2067cfa0a94bb2a2ed97b141cacf7a533551" +checksum = "324fdebf340780c68b62d526f524a4cad41495db651d9c1333d2930ba189d6e4" dependencies = [ "rtrb", ] [[package]] name = "creek-decode-symphonia" -version = "0.1.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f924e3a21a66fe9e2d6628a33081b5d1934e8d5c8165541d731fb410479e177" +checksum = "8371cf1deee7e3df88125c6c54e95e7966ba62e508b041db238f48a383119706" dependencies = [ "creek-core", + "log", "symphonia", ] [[package]] name = "creek-encode-wav" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d86aa83b7e6ff8d7bcf452a7ea821ad3dc01b6fd932817f0d469da820037a4b" +checksum = "063e2422d455bb48879d04b0787b1e697e24c6fd3f3a3fa54554636e1595f316" dependencies = [ "byte-slice-cast", "creek-core", @@ -997,7 +1110,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", ] @@ -1007,7 +1120,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", ] @@ -1019,7 +1132,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" dependencies = [ "autocfg", - "cfg-if 1.0.0", + "cfg-if", "crossbeam-utils", "memoffset 0.9.0", "scopeguard", @@ -1031,7 +1144,7 @@ version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -1041,45 +1154,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] -name = "cty" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" - -[[package]] -name = "darling" -version = "0.13.4" +name = "d3d12" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +checksum = "d8f0de2f5a8e7bd4a9eec0e3c781992a4ce1724f68aec7d7a3715344de8b39da" dependencies = [ - "darling_core", - "darling_macro", + "bitflags 1.3.2", + "libloading 0.7.4", + "winapi", ] [[package]] -name = "darling_core" -version = "0.13.4" +name = "dasp_sample" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 1.0.109", -] +checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" [[package]] -name = "darling_macro" -version = "0.13.4" +name = "data-url" +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 = "8d7439c3735f405729d52c3fbbe4de140eaf938a1fe47d227c27f8254d4302a5" [[package]] name = "defmt" @@ -1101,7 +1196,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.22", + "syn 2.0.39", ] [[package]] @@ -1114,7 +1209,17 @@ dependencies = [ ] [[package]] -name = "derivative" +name = "deranged" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derivative" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" @@ -1130,7 +1235,16 @@ version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210" dependencies = [ - "dirs-sys", + "dirs-sys 0.3.7", +] + +[[package]] +name = "directories" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +dependencies = [ + "dirs-sys 0.4.1", ] [[package]] @@ -1145,10 +1259,16 @@ dependencies = [ ] [[package]] -name = "discard" -version = "1.0.4" +name = "dirs-sys" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] [[package]] name = "dispatch" @@ -1164,7 +1284,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.22", + "syn 2.0.39", ] [[package]] @@ -1173,7 +1293,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" dependencies = [ - "libloading 0.8.0", + "libloading 0.8.1", ] [[package]] @@ -1184,15 +1304,15 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "either" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "embedded-graphics" -version = "0.7.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "750082c65094fbcc4baf9ba31583ce9a8bb7f52cadfb96f6164b1bc7f922f32b" +checksum = "0649998afacf6d575d126d83e68b78c0ab0e00ca2ac7e9b3db11b4cbe8274ef0" dependencies = [ "az", "byteorder", @@ -1203,9 +1323,9 @@ dependencies = [ [[package]] name = "embedded-graphics-core" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8b1239db5f3eeb7e33e35bd10bd014e7b2537b17e071f726a09351431337cfa" +checksum = "ba9ecd261f991856250d2207f6d8376946cd9f412a2165d3b75bc87a0bc7a044" dependencies = [ "az", "byteorder", @@ -1213,18 +1333,18 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.32" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] name = "enum-derive-2018" -version = "2.0.1" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c12aad72e0c5b4f1e0cc866187d8812deeaa1fccc892d3baf44c2b154d3e27b" +checksum = "bdda1596b510968293c861d7bcce74303321b3d4db91bd4467533b7c9abc8dfe" [[package]] name = "env_logger" @@ -1247,33 +1367,32 @@ checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1" [[package]] name = "errno" -version = "0.3.1" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "f258a7194e7f7c2a7837a8913aeab7fd8c383457034fa20ce4dd3dcb813e8eb8" dependencies = [ - "errno-dragonfly", "libc", "windows-sys 0.48.0", ] [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "error-code" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" dependencies = [ - "cc", "libc", + "str-buf", ] [[package]] -name = "error-code" -version = "2.3.1" +name = "etagere" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" +checksum = "306960881d6c46bd0dd6b7f07442a441418c08d0d3e63d8d080b0f64c6343e4e" dependencies = [ - "libc", - "str-buf", + "euclid", + "svg_fmt", ] [[package]] @@ -1291,6 +1410,27 @@ version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +[[package]] +name = "event-listener" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d96b852f1345da36d551b9473fa1e2b1eb5c5195585c6c018118bc92a8d91160" +dependencies = [ + "event-listener 3.1.0", + "pin-project-lite", +] + [[package]] name = "exr" version = "1.6.4" @@ -1301,12 +1441,18 @@ dependencies = [ "flume", "half", "lebe", - "miniz_oxide 0.7.1", + "miniz_oxide", "rayon-core", "smallvec", "zune-inflate", ] +[[package]] +name = "fast-srgb8" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1" + [[package]] name = "fastrand" version = "1.9.0" @@ -1316,30 +1462,36 @@ dependencies = [ "instant", ] +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + [[package]] name = "fdeflate" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" +checksum = "64d6dafc854908ff5da46ff3f8f473c6984119a2876a383a860246dd7841a868" dependencies = [ "simd-adler32", ] [[package]] name = "flate2" -version = "1.0.26" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ "crc32fast", - "miniz_oxide 0.7.1", + "miniz_oxide", ] [[package]] name = "float-cmp" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1267f4ac4f343772758f7b1bdcbe767c218bbab93bb432acbf5162bbf85a6c4" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" dependencies = [ "num-traits", ] @@ -1352,12 +1504,9 @@ checksum = "28a80e3145d8ad11ba0995949bbcf48b9df2be62772b3d351ef017dff6ecb853" [[package]] name = "float_next_after" -version = "0.1.5" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fc612c5837986b7104a87a0df74a5460931f1c5274be12f8d0f40aa2f30d632" -dependencies = [ - "num-traits", -] +checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8" [[package]] name = "flume" @@ -1378,6 +1527,29 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "fontconfig-parser" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "674e258f4b5d2dcd63888c01c68413c51f565e8af99d2f7701c7b81d79ef41c4" +dependencies = [ + "roxmltree", +] + +[[package]] +name = "fontdb" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af8d8cbea8f21307d7e84bca254772981296f058a1d36b461bf4d83a7499fc9e" +dependencies = [ + "fontconfig-parser", + "log", + "memmap2 0.6.2", + "slotmap", + "tinyvec", + "ttf-parser 0.19.2", +] + [[package]] name = "fontdue" version = "0.7.3" @@ -1421,9 +1593,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" dependencies = [ "futures-channel", "futures-core", @@ -1436,9 +1608,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" dependencies = [ "futures-core", "futures-sink", @@ -1446,15 +1618,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" dependencies = [ "futures-core", "futures-task", @@ -1464,9 +1636,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" [[package]] name = "futures-lite" @@ -1474,7 +1646,7 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" dependencies = [ - "fastrand", + "fastrand 1.9.0", "futures-core", "futures-io", "memchr", @@ -1483,34 +1655,48 @@ dependencies = [ "waker-fn", ] +[[package]] +name = "futures-lite" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3831c2651acb5177cbd83943f3d9c8912c5ad03c76afcc0e9511ba568ec5ebb" +dependencies = [ + "fastrand 2.0.1", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", +] + [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.22", + "syn 2.0.39", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" dependencies = [ "futures-channel", "futures-core", @@ -1536,14 +1722,14 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] @@ -1559,35 +1745,21 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" - -[[package]] -name = "gl_generator" -version = "0.14.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" -dependencies = [ - "khronos_api", - "log", - "xml-rs", -] +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" [[package]] name = "glam" -version = "0.10.2" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579160312273c954cc51bd440f059dde741029ac8daf8c84fece76cb77f62c15" -dependencies = [ - "version_check", -] +checksum = "518faa5064866338b013ff9b2350dc318e14cc4fcd6cb8206d7e7c9886c98815" [[package]] name = "glam" -version = "0.21.3" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518faa5064866338b013ff9b2350dc318e14cc4fcd6cb8206d7e7c9886c98815" +checksum = "b5418c17512bdf42730f9032c74e1ae39afc408745ebb2acf72fbc4691c17945" [[package]] name = "glob" @@ -1609,9 +1781,9 @@ dependencies = [ [[package]] name = "glow" -version = "0.11.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8bd5877156a19b8ac83a29b2306fe20537429d318f3ff0a1a2119f8d9c61919" +checksum = "ca0fe580e4b60a8ab24a868bc08e2f03cbcb20d3d676601fa909386713333728" dependencies = [ "js-sys", "slotmap", @@ -1620,132 +1792,84 @@ dependencies = [ ] [[package]] -name = "glow_glyph" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f4e62c64947b9a24fe20e2bba9ad819ecb506ef5c8df7ffc4737464c6df9510" -dependencies = [ - "bytemuck", - "glow", - "glyph_brush", - "log", -] - -[[package]] -name = "glutin" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00ea9dbe544bc8a657c4c4a798c2d16cd01b549820e47657297549d28371f6d2" -dependencies = [ - "android_glue", - "cgl", - "cocoa", - "core-foundation 0.9.3", - "glutin_egl_sys", - "glutin_emscripten_sys", - "glutin_gles2_sys", - "glutin_glx_sys", - "glutin_wgl_sys", - "lazy_static", - "libloading 0.7.4", - "log", - "objc", - "osmesa-sys", - "parking_lot 0.11.2", - "wayland-client", - "wayland-egl", - "winapi", - "winit", -] - -[[package]] -name = "glutin_egl_sys" -version = "0.1.6" +name = "glyphon" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68900f84b471f31ea1d1355567eb865a2cf446294f06cef8d653ed7bcf5f013d" +checksum = "5e87caa7459145f5e5f167bf34db4532901404c679e62339fb712a0e3ccf722a" dependencies = [ - "gl_generator", - "winapi", + "cosmic-text", + "etagere", + "lru", + "wgpu", ] [[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 = "gpu-alloc" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094e708b730a7c8a1954f4f8a31880af00eb8a1c5b5bf85d28a0a3c6d69103" +checksum = "22beaafc29b38204457ea030f6fb7a84c9e4dd1b86e311ba0542533453d87f62" dependencies = [ - "gl_generator", - "objc", + "bitflags 1.3.2", + "gpu-alloc-types", ] [[package]] -name = "glutin_glx_sys" -version = "0.1.8" +name = "gpu-alloc-types" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93d0575865098580c5b3a423188cd959419912ea60b1e48e8b3b526f6d02468" +checksum = "54804d0d6bc9d7f26db4eaec1ad10def69b599315f487d32c334a80d1efe67a5" dependencies = [ - "gl_generator", - "x11-dl", + "bitflags 1.3.2", ] [[package]] -name = "glutin_wgl_sys" -version = "0.1.5" +name = "gpu-allocator" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da5951a1569dbab865c6f2a863efafff193a93caf05538d193e9e3816d21696" +checksum = "ce95f9e2e11c2c6fadfce42b5af60005db06576f231f5c92550fdded43c423e8" dependencies = [ - "gl_generator", + "backtrace", + "log", + "thiserror", + "winapi", + "windows 0.44.0", ] [[package]] -name = "glyph_brush" -version = "0.7.7" +name = "gpu-descriptor" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4edefd123f28a0b1d41ec4a489c2b43020b369180800977801611084f342978d" +checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c" dependencies = [ - "glyph_brush_draw_cache", - "glyph_brush_layout", - "ordered-float", - "rustc-hash", - "twox-hash", + "bitflags 2.4.1", + "gpu-descriptor-types", + "hashbrown 0.14.2", ] [[package]] -name = "glyph_brush_draw_cache" -version = "0.1.5" +name = "gpu-descriptor-types" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6010675390f6889e09a21e2c8b575b3ee25667ea8237a8d59423f73cb8c28610" +checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c" dependencies = [ - "ab_glyph", - "crossbeam-channel", - "crossbeam-deque", - "linked-hash-map", - "rayon", - "rustc-hash", + "bitflags 2.4.1", ] [[package]] -name = "glyph_brush_layout" -version = "0.2.3" +name = "guillotiere" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc32c2334f00ca5ac3695c5009ae35da21da8c62d255b5b96d56e2597a637a38" +checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782" dependencies = [ - "ab_glyph", - "approx", - "xi-unicode", + "euclid", + "svg_fmt", ] [[package]] name = "h2" -version = "0.3.20" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" +checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" dependencies = [ "bytes", "fnv", @@ -1753,7 +1877,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 1.9.3", + "indexmap 2.1.0", "slab", "tokio", "tokio-util", @@ -1766,7 +1890,7 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "crunchy", ] @@ -1787,9 +1911,28 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.0" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "hassle-rs" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +checksum = "1397650ee315e8891a0df210707f0fc61771b0cc518c3023896064c5407cb3b0" +dependencies = [ + "bitflags 1.3.2", + "com-rs", + "libc", + "libloading 0.7.4", + "thiserror", + "widestring", + "winapi", +] [[package]] name = "heck" @@ -1808,24 +1951,38 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.2.6" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" [[package]] -name = "hermit-abi" -version = "0.3.1" +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + +[[package]] +name = "hound" +version = "3.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62adaabb884c94955b19907d60019f4e145d091c75345379e70d1ee696f7854f" + +[[package]] +name = "hrtf" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +checksum = "0f4de47a84fd55fa33aa5ef337016814fdc869fdad23e7898b5322fa290248e6" +dependencies = [ + "byteorder", + "rubato", + "rustfft", +] [[package]] name = "http" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ "bytes", "fnv", @@ -1851,9 +2008,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" @@ -1878,7 +2035,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.4.10", "tokio", "tower-service", "tracing", @@ -1900,16 +2057,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.57" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" dependencies = [ "android_system_properties", - "core-foundation-sys 0.8.4", + "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows 0.48.0", + "windows-core", ] [[package]] @@ -1923,39 +2080,41 @@ dependencies = [ [[package]] name = "iced" -version = "0.4.2" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6025abe6b1056c9b5adad79c484c5fd8b7012e5230f3b0439a1294ade7ded7bf" +checksum = "c708807ec86f99dd729dc4d42db5239acf118cec14d3c5f57679dcfdbbc472b1" dependencies = [ "iced_core", "iced_futures", - "iced_glow", - "iced_glutin", - "iced_graphics", - "iced_native", - "iced_pure", + "iced_renderer", + "iced_widget", "iced_winit", "thiserror", ] [[package]] name = "iced_core" -version = "0.5.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf9133ceb345ec640047d5597fb8aa88e9cf74ce2d0277a9a62e2d6ed4a8148" +checksum = "64d0bc4fbf018576d08d93f838e6058cc6f10bbc05e04ae249a2a44dffb4ebc8" dependencies = [ "bitflags 1.3.2", - "wasm-timer", + "instant", + "log", + "palette", + "thiserror", + "twox-hash", ] [[package]] name = "iced_futures" -version = "0.4.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13d13241d5ed32846bbcffaf60e27e7ceebb60cf16d791ff00d582f0d4d1b07b" +checksum = "14dab0054a9c7a1cbce227a8cd9ee4a094497b3d06094551ac6c1488d563802e" dependencies = [ "async-std", "futures", + "iced_core", "log", "tokio", "wasm-bindgen-futures", @@ -1963,93 +2122,125 @@ dependencies = [ ] [[package]] -name = "iced_glow" -version = "0.3.0" +name = "iced_graphics" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f8d1a2a04e2570230df7c864c1012b88ec0027a94baaf7664e3045651db87ae" +checksum = "67ff14447a221e9e9205a13d84d7bbdf0636a3b1daa02cfca690ed09689c4d2b" dependencies = [ + "bitflags 1.3.2", "bytemuck", - "euclid", - "glow", - "glow_glyph", - "glyph_brush", - "iced_graphics", - "iced_native", + "glam 0.24.2", + "half", + "iced_core", "log", + "lyon_path", + "raw-window-handle", + "thiserror", ] [[package]] -name = "iced_glutin" -version = "0.3.0" +name = "iced_renderer" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e18f56d746d304b92a7dcdfcffa93fafb732aec046b0bf9fb1b39d6bc91c20a7" +checksum = "1033385b0db0099a0d13178c9ff93c1ce11e7d0177522acf578bf79febdb2af8" dependencies = [ - "glutin", "iced_graphics", - "iced_native", - "iced_winit", + "iced_tiny_skia", + "iced_wgpu", + "log", + "raw-window-handle", + "thiserror", ] [[package]] -name = "iced_graphics" -version = "0.3.1" +name = "iced_runtime" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2adcf703fc326e0985ea99c75f1b73e718560a7b220d57ec6478417ccb2f463f" +checksum = "7c6c89853e1250c6fac82c5015fa2144517be9b33d4b8e456f10e198b23e28bd" dependencies = [ - "bytemuck", - "glam 0.10.2", - "iced_native", - "iced_pure", - "iced_style", - "lyon", - "raw-window-handle 0.4.3", + "iced_core", + "iced_futures", "thiserror", ] [[package]] -name = "iced_native" -version = "0.5.1" +name = "iced_style" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca174d4693a5daa2ffcae38d5c28cf0dbd54bd8fc19848f28392cd52624751a" +checksum = "d85c47d9d13e2281f75ddf98c865daf2101632bd2b855c401dd0b1c8b81a31a0" dependencies = [ "iced_core", - "iced_futures", - "iced_style", - "num-traits", + "once_cell", + "palette", +] + +[[package]] +name = "iced_tiny_skia" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7715f6222c9470bbbd75a39f70478fa0d1bdfb81a377a34fd1b090ffccc480b" +dependencies = [ + "bytemuck", + "cosmic-text", + "iced_graphics", + "kurbo", + "log", + "raw-window-handle", + "resvg", + "rustc-hash", + "softbuffer", + "tiny-skia 0.10.0", "twox-hash", - "unicode-segmentation", ] [[package]] -name = "iced_pure" -version = "0.2.2" +name = "iced_wgpu" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80aeaecadfd6832c2c787cbdfd357adc256a51c55d68142d852037451e72f393" +checksum = "703f7c5de46b997ed7b18e05ec67059dcdf3beeac51e917c21071b021bb848b9" dependencies = [ - "iced_native", - "iced_style", - "num-traits", + "bitflags 1.3.2", + "bytemuck", + "futures", + "glam 0.24.2", + "glyphon", + "guillotiere", + "iced_graphics", + "log", + "lyon", + "once_cell", + "raw-window-handle", + "resvg", + "rustc-hash", + "twox-hash", + "wgpu", ] [[package]] -name = "iced_style" -version = "0.4.0" +name = "iced_widget" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a90028c94ab62c13cd3b6fb1499a593a51510d4729c5b4e8e60705b2b28c6bc2" +checksum = "a177219ae51c3ba08f228ab932354b360cc669e94aec50c01e7c9b675f074c7c" dependencies = [ - "iced_core", + "iced_renderer", + "iced_runtime", + "iced_style", + "num-traits", + "thiserror", + "unicode-segmentation", ] [[package]] name = "iced_winit" -version = "0.4.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72011b895e439e2ebad8f545720e3e97c7368ecfc47a23cbfeaa9508a98af90c" +checksum = "ad0c884bcb14722a57192b40a5ef6b5e170fa2f01fe2ff28d6cdd9efe37acf70" dependencies = [ - "iced_futures", "iced_graphics", - "iced_native", + "iced_runtime", + "iced_style", "log", + "raw-window-handle", "thiserror", "web-sys", "winapi", @@ -2057,12 +2248,6 @@ dependencies = [ "winit", ] -[[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.4.0" @@ -2075,9 +2260,9 @@ dependencies = [ [[package]] name = "image" -version = "0.24.6" +version = "0.24.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" +checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711" dependencies = [ "bytemuck", "byteorder", @@ -2092,6 +2277,12 @@ dependencies = [ "tiff", ] +[[package]] +name = "imagesize" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" + [[package]] name = "indexmap" version = "1.9.3" @@ -2104,12 +2295,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown 0.14.0", + "hashbrown 0.14.2", ] [[package]] @@ -2118,7 +2309,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", @@ -2130,34 +2321,22 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.1", + "hermit-abi 0.3.3", "libc", "windows-sys 0.48.0", ] [[package]] name = "ipnet" -version = "2.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" - -[[package]] -name = "is-terminal" -version = "0.4.7" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" -dependencies = [ - "hermit-abi 0.3.1", - "io-lifetimes", - "rustix", - "windows-sys 0.48.0", -] +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "jni" @@ -2173,6 +2352,20 @@ dependencies = [ "walkdir", ] +[[package]] +name = "jni" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + [[package]] name = "jni-sys" version = "0.3.0" @@ -2181,9 +2374,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" dependencies = [ "libc", ] @@ -2199,18 +2392,32 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" dependencies = [ "wasm-bindgen", ] [[package]] -name = "khronos_api" -version = "3.1.0" +name = "khronos-egl" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c2352bd1d0bceb871cb9d40f24360c8133c11d7486b68b5381c1dd1a32015e3" +dependencies = [ + "libc", + "libloading 0.7.4", + "pkg-config", +] + +[[package]] +name = "kurbo" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" +checksum = "bd85a5776cd9500c2e2059c8c76c3b01528566b7fcbaf8098b55a33fc298849b" +dependencies = [ + "arrayvec", +] [[package]] name = "kv-log-macro" @@ -2241,9 +2448,9 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "libc" -version = "0.2.147" +version = "0.2.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" [[package]] name = "libloading" @@ -2251,25 +2458,47 @@ 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", ] [[package]] name = "libloading" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d580318f95776505201b28cf98eb1fa5e4be3b689633ba6a3e6cd880ff22d8cb" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "windows-sys 0.48.0", ] [[package]] -name = "linked-hash-map" -version = "0.5.6" +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] + +[[package]] +name = "libredox" +version = "0.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] [[package]] name = "linux-raw-sys" @@ -2277,11 +2506,23 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" +[[package]] +name = "linux-raw-sys" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" + +[[package]] +name = "llq" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22edcb39a6fc7e511be7ba578a719af09125391ecde44e0bd61ad3c8e003a4a3" + [[package]] name = "lock_api" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", @@ -2289,9 +2530,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" dependencies = [ "value-bag", ] @@ -2333,11 +2574,20 @@ dependencies = [ "winapi", ] +[[package]] +name = "lru" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a83fb7698b3643a0e34f9ae6f2e8f0178c0fd42f8b59d493aa271ff3a5bf21" +dependencies = [ + "hashbrown 0.14.2", +] + [[package]] name = "lyon" -version = "0.17.10" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf0510ed5e3e2fb80f3db2061ef5ca92d87bfda1a624bb1eacf3bd50226e4cbb" +checksum = "91e7f9cda98b5430809e63ca5197b06c7d191bf7e26dfc467d5a3f0290e2a74f" dependencies = [ "lyon_algorithms", "lyon_tessellation", @@ -2345,42 +2595,44 @@ dependencies = [ [[package]] name = "lyon_algorithms" -version = "0.17.7" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8037f716541ba0d84d3de05c0069f8068baf73990d55980558b84d944c8a244a" +checksum = "a3bca95f9a4955b3e4a821fbbcd5edfbd9be2a9a50bb5758173e5358bfb4c623" dependencies = [ "lyon_path", - "sid", + "num-traits", ] [[package]] name = "lyon_geom" -version = "0.17.7" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d89ccbdafd83d259403e22061be27bccc3254bba65cdc5303250c4227c8c8e" +checksum = "74df1ff0a0147282eb10699537a03baa7d31972b58984a1d44ce0624043fe8ad" dependencies = [ - "arrayvec 0.5.2", + "arrayvec", "euclid", "num-traits", ] [[package]] name = "lyon_path" -version = "0.17.7" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0a59fdf767ca0d887aa61d1b48d4bbf6a124c1a45503593f7d38ab945bfbc0" +checksum = "ca507745ba7ccbc76e5c44e7b63b1a29d2b0d6126f375806a5bbaf657c7d6c45" dependencies = [ "lyon_geom", + "num-traits", ] [[package]] name = "lyon_tessellation" -version = "0.17.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7230e08dd0638048e46f387f255dbe7a7344a3e6705beab53242b5af25635760" +checksum = "23bcac20d47825850fabf1e869bf7c2bbe2daefa0776c3cd2eb7cb74635f6e4a" dependencies = [ "float_next_after", "lyon_path", + "thiserror", ] [[package]] @@ -2392,15 +2644,6 @@ dependencies = [ "libc", ] -[[package]] -name = "mach" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" -dependencies = [ - "libc", -] - [[package]] name = "mach2" version = "0.4.1" @@ -2412,9 +2655,9 @@ dependencies = [ [[package]] name = "macro-attr-2018" -version = "2.1.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66fbbf2d3635c91b436074cf14a7c8948dc608e193c9d2b389bdc64aae2ca37b" +checksum = "f21755d53936fc1663b414dba30636788f2183d3e782bdee4b1e7236637974e7" [[package]] name = "macroquad" @@ -2451,7 +2694,7 @@ name = "matrix-drawing" version = "0.1.4" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec", "embedded-graphics", "fonts", "more-asserts", @@ -2462,24 +2705,24 @@ dependencies = [ [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[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", ] [[package]] name = "memmap2" -version = "0.5.10" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +checksum = "6d28bba84adfe6646737845bc5ebbfa2c08424eb1c37e94a1fd2a82adb56a872" dependencies = [ "libc", ] @@ -2511,11 +2754,25 @@ dependencies = [ "autocfg", ] +[[package]] +name = "metal" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de11355d1f6781482d027a3b4d4de7825dcedb197bf573e0596d00008402d060" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-graphics-types", + "foreign-types", + "log", + "objc", +] + [[package]] name = "micromath" -version = "1.1.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc4010833aea396656c2f91ee704d51a6f1329ec2ab56ffd00bfd56f7481ea94" +checksum = "c3c8dda44ff03a2f238717214da50f65d5a53b45cd213a7370424ffdb6fae815" [[package]] name = "mime" @@ -2541,15 +2798,6 @@ dependencies = [ "winapi", ] -[[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" @@ -2562,13 +2810,13 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" dependencies = [ "libc", "log", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "windows-sys 0.48.0", ] @@ -2580,16 +2828,36 @@ checksum = "20a4c60ca5c9c0e114b3bd66ff4aa5f9b2b175442be51ca6c4365d687a97a2ac" dependencies = [ "log", "mio", - "nix 0.26.2", + "nix 0.26.4", "serialport", "winapi", ] [[package]] name = "more-asserts" -version = "0.2.2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fafa6961cabd9c63bcd77a45d7e3b7f3b552b70417831fb0f56db717e72407e" + +[[package]] +name = "naga" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" +checksum = "bbcc2e0513220fd2b598e6068608d4462db20322c0e77e47f6f488dfcfc279cb" +dependencies = [ + "bit-set", + "bitflags 1.3.2", + "codespan-reporting", + "hexf-parse", + "indexmap 1.9.3", + "log", + "num-traits", + "rustc-hash", + "spirv", + "termcolor", + "thiserror", + "unicode-xid", +] [[package]] name = "nanorand" @@ -2618,32 +2886,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "ndk" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d868f654c72e75f8687572699cdabe755f03effbb62542768e995d5b8d699d" -dependencies = [ - "bitflags 1.3.2", - "jni-sys", - "ndk-sys 0.2.2", - "num_enum", - "thiserror", -] - -[[package]] -name = "ndk" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" -dependencies = [ - "bitflags 1.3.2", - "jni-sys", - "ndk-sys 0.3.0", - "num_enum", - "thiserror", -] - [[package]] name = "ndk" version = "0.7.0" @@ -2653,8 +2895,8 @@ dependencies = [ "bitflags 1.3.2", "jni-sys", "ndk-sys 0.4.1+23.1.7779620", - "num_enum", - "raw-window-handle 0.5.2", + "num_enum 0.5.11", + "raw-window-handle", "thiserror", ] @@ -2664,49 +2906,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" -[[package]] -name = "ndk-glue" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71bee8ea72d685477e28bd004cfe1bf99c754d688cd78cad139eae4089484d4" -dependencies = [ - "lazy_static", - "libc", - "log", - "ndk 0.5.0", - "ndk-context", - "ndk-macro", - "ndk-sys 0.2.2", -] - -[[package]] -name = "ndk-macro" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c" -dependencies = [ - "darling", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "ndk-sys" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1bcdd74c20ad5d95aacd60ef9ba40fdf77f767051040541df557b7a9b2a2121" -[[package]] -name = "ndk-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" -dependencies = [ - "jni-sys", -] - [[package]] name = "ndk-sys" version = "0.4.1+23.1.7779620" @@ -2724,48 +2929,47 @@ checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" dependencies = [ "bitflags 1.3.2", "cc", - "cfg-if 1.0.0", + "cfg-if", "libc", "memoffset 0.6.5", ] [[package]] name = "nix" -version = "0.23.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" dependencies = [ "bitflags 1.3.2", - "cc", - "cfg-if 1.0.0", + "cfg-if", "libc", "memoffset 0.6.5", ] [[package]] name = "nix" -version = "0.24.3" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" dependencies = [ + "autocfg", "bitflags 1.3.2", - "cfg-if 1.0.0", + "cfg-if", "libc", "memoffset 0.6.5", ] [[package]] name = "nix" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" dependencies = [ "bitflags 1.3.2", - "cfg-if 1.0.0", + "cfg-if", "libc", "memoffset 0.7.1", "pin-utils", - "static_assertions", ] [[package]] @@ -2780,9 +2984,9 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" dependencies = [ "num-traits", ] @@ -2821,20 +3025,21 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg", + "libm", ] [[package]] name = "num_cpus" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.2.6", + "hermit-abi 0.3.3", "libc", ] @@ -2844,7 +3049,16 @@ version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" dependencies = [ - "num_enum_derive", + "num_enum_derive 0.5.11", +] + +[[package]] +name = "num_enum" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" +dependencies = [ + "num_enum_derive 0.6.1", ] [[package]] @@ -2859,6 +3073,18 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "num_enum_derive" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.39", +] + [[package]] name = "num_threads" version = "0.1.6" @@ -2875,6 +3101,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" dependencies = [ "malloc_buf", + "objc_exception", ] [[package]] @@ -2889,7 +3116,42 @@ dependencies = [ ] [[package]] -name = "objc_id" +name = "objc-sys" +version = "0.2.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" + +[[package]] +name = "objc2" +version = "0.3.0-beta.3.patch-leaks.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468" +dependencies = [ + "block2", + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-encode" +version = "2.0.0-pre.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "objc_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" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" @@ -2899,21 +3161,21 @@ dependencies = [ [[package]] name = "object" -version = "0.30.4" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" dependencies = [ "memchr", ] [[package]] name = "oboe" -version = "0.4.6" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27f63c358b4fa0fbcfefd7c8be5cfc39c08ce2389f5325687e7762a48d30a5c1" +checksum = "8868cc237ee02e2d9618539a23a8d228b9bb3fc2e7a5b11eed3831de77c395d0" dependencies = [ - "jni", - "ndk 0.6.0", + "jni 0.20.0", + "ndk", "ndk-context", "num-derive", "num-traits", @@ -2922,9 +3184,9 @@ dependencies = [ [[package]] name = "oboe-sys" -version = "0.4.5" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3370abb7372ed744232c12954d920d1a40f1c4686de9e79e800021ef492294bd" +checksum = "7f44155e7fb718d3cfddcf70690b2b51ac4412f347cd9e4fbe511abe9cd7b5f2" dependencies = [ "cc", ] @@ -2937,12 +3199,12 @@ checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "openssl" -version = "0.10.55" +version = "0.10.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" +checksum = "7a257ad03cd8fb16ad4172fedf8094451e1af1c4b70097636ef2eac9a5f0cc33" dependencies = [ - "bitflags 1.3.2", - "cfg-if 1.0.0", + "bitflags 2.4.1", + "cfg-if", "foreign-types", "libc", "once_cell", @@ -2958,7 +3220,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.22", + "syn 2.0.39", ] [[package]] @@ -2969,9 +3231,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.90" +version = "0.9.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6" +checksum = "40a4130519a360279579c2053038317e40eff64d13fd3f004f9e1b72b8a6aaf9" dependencies = [ "cc", "libc", @@ -2980,38 +3242,35 @@ dependencies = [ ] [[package]] -name = "ordered-float" -version = "3.7.0" +name = "option-ext" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fc2dbde8f8a79f2102cc474ceb0ad68e3b80b85289ea62389b60e66777e4213" -dependencies = [ - "num-traits", -] +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] -name = "os_str_bytes" -version = "6.5.1" +name = "orbclient" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d5d9eb14b174ee9aa2ef96dc2b94637a2d4b6e7cb873c7e171f0c20c6cf3eac" +checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" +dependencies = [ + "libredox 0.0.2", +] [[package]] -name = "osmesa-sys" -version = "0.1.2" +name = "os_str_bytes" +version = "6.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" -dependencies = [ - "shared_library", -] +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" [[package]] name = "overlay" version = "0.1.4" dependencies = [ - "clap 4.3.8", + "clap 4.4.8", "coarsetime", "confy", "crossbeam-channel", - "directories", + "directories 4.0.1", "image", "log", "log-panics", @@ -3027,18 +3286,41 @@ dependencies = [ [[package]] name = "owned_ttf_parser" -version = "0.19.0" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4586edfe4c648c71797a74c84bacb32b52b212eff5dfe2bb9f2c599844023e7" +dependencies = [ + "ttf-parser 0.20.0", +] + +[[package]] +name = "palette" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2e2f34147767aa758aa649415b50a69eeb46a67f9dc7db8011eeb3d84b351dc" +dependencies = [ + "approx", + "fast-srgb8", + "palette_derive", + "phf", +] + +[[package]] +name = "palette_derive" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "706de7e2214113d63a8238d1910463cfce781129a6f263d13fdb09ff64355ba4" +checksum = "b7db010ec5ff3d4385e4f133916faacd9dad0f6a09394c92d825b3aed310fa0a" dependencies = [ - "ttf-parser 0.19.1", + "proc-macro2", + "quote", + "syn 2.0.39", ] [[package]] name = "parking" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" [[package]] name = "parking_lot" @@ -3058,7 +3340,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.8", + "parking_lot_core 0.9.9", ] [[package]] @@ -3067,7 +3349,7 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "instant", "libc", "redox_syscall 0.2.16", @@ -3077,22 +3359,22 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", - "redox_syscall 0.3.5", + "redox_syscall 0.4.1", "smallvec", - "windows-targets", + "windows-targets 0.48.5", ] [[package]] name = "paste" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "peeking_take_while" @@ -3106,31 +3388,79 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pico-args" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" + [[package]] name = "pin-project" -version = "1.1.0" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.0" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 2.0.22", + "syn 2.0.39", ] [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -3138,6 +3468,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +dependencies = [ + "atomic-waker", + "fastrand 2.0.1", + "futures-io", +] + [[package]] name = "piston-float" version = "1.0.1" @@ -3152,15 +3493,15 @@ checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] name = "png" -version = "0.17.9" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59871cc5b6cce7eaccca5a802b4173377a1c2ba90654246789a8fa2334426d11" +checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64" dependencies = [ "bitflags 1.3.2", "crc32fast", "fdeflate", "flate2", - "miniz_oxide 0.7.1", + "miniz_oxide", ] [[package]] @@ -3171,7 +3512,7 @@ checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" dependencies = [ "autocfg", "bitflags 1.3.2", - "cfg-if 1.0.0", + "cfg-if", "concurrent-queue", "libc", "log", @@ -3179,12 +3520,32 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "polling" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e53b6af1f60f36f8c2ac2aad5459d75a5a9b4be1e8cdd40264f315d78193e531" +dependencies = [ + "cfg-if", + "concurrent-queue", + "pin-project-lite", + "rustix 0.38.24", + "tracing", + "windows-sys 0.48.0", +] + [[package]] name = "pollster" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -3207,7 +3568,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ "once_cell", - "toml_edit", + "toml_edit 0.19.15", ] [[package]] @@ -3236,13 +3597,19 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.63" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" dependencies = [ "unicode-ident", ] +[[package]] +name = "profiling" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f89dff0959d98c9758c88826cc002e2c3d0b9dfac4139711d1f30de442f1139b" + [[package]] name = "qoi" version = "0.4.1" @@ -3258,11 +3625,20 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "658fa1faf7a4cc5f057c9ee5ef560f717ad9d8dc66d975267f709624d6e1ab88" +[[package]] +name = "quick-xml" +version = "0.28.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1" +dependencies = [ + "memchr", +] + [[package]] name = "quote" -version = "1.0.28" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -3298,23 +3674,16 @@ dependencies = [ ] [[package]] -name = "raw-window-handle" -version = "0.3.4" +name = "range-alloc" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28f55143d0548dad60bb4fbdc835a3d7ac6acc3324506450c5fdd6e42903a76" -dependencies = [ - "libc", - "raw-window-handle 0.4.3", -] +checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" [[package]] -name = "raw-window-handle" -version = "0.4.3" +name = "rangemap" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41" -dependencies = [ - "cty", -] +checksum = "977b1e897f9d764566891689e642653e5ed90c6895106acd005eb4c1d0203991" [[package]] name = "raw-window-handle" @@ -3324,9 +3693,9 @@ checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" [[package]] name = "rayon" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" dependencies = [ "either", "rayon-core", @@ -3334,16 +3703,20 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" dependencies = [ - "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "num_cpus", ] +[[package]] +name = "rctree" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b42e27ef78c35d3998403c1d26f3efd9e135d3e5121b0a4845cc5cc27547f4f" + [[package]] name = "realfft" version = "3.3.0" @@ -3371,14 +3744,23 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ "getrandom", - "redox_syscall 0.2.16", + "libredox 0.0.1", "thiserror", ] @@ -3388,19 +3770,21 @@ version = "0.1.4" dependencies = [ "array-concat", "arrayref", - "clap 4.3.8", + "clap 4.4.8", "collect_array", "confy", "conquer-once", "derivative", - "directories", + "directories 5.0.1", "embedded-graphics", "enum-derive-2018", "env_logger", - "futures-lite", + "futures-lite 1.13.0", "iced", + "iced_core", "iced_futures", - "iced_native", + "iced_renderer", + "iced_runtime", "log", "log-panics", "log4rs", @@ -3415,10 +3799,10 @@ dependencies = [ "serde_json", "skip_error", "thiserror", - "time 0.3.22", + "time", "tokio", "tokio-serial", - "toml", + "toml 0.8.8", "uwh-common", "web-audio-api", "winres", @@ -3426,9 +3810,21 @@ dependencies = [ [[package]] name = "regex" -version = "1.8.4" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" dependencies = [ "aho-corasick", "memchr", @@ -3437,15 +3833,21 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.7.2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "renderdoc-sys" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" +checksum = "216080ab382b992234dda86873c18d4c48358f5cfcb70fd693d7f6f2131b628b" [[package]] name = "reqwest" -version = "0.11.18" +version = "0.11.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" dependencies = [ "base64", "bytes", @@ -3468,6 +3870,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "system-configuration", "tokio", "tokio-native-tls", "tower-service", @@ -3478,6 +3881,41 @@ dependencies = [ "winreg", ] +[[package]] +name = "resvg" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6554f47c38eca56827eea7f285c2a3018b4e12e0e195cc105833c008be338f1" +dependencies = [ + "gif", + "jpeg-decoder", + "log", + "pico-args", + "png", + "rgb", + "svgtypes", + "tiny-skia 0.10.0", + "usvg", +] + +[[package]] +name = "rgb" +version = "0.8.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "roxmltree" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "862340e351ce1b271a378ec53f304a5558f7db87f3769dc655a8f6ecbb68b302" +dependencies = [ + "xmlparser", +] + [[package]] name = "rppal" version = "0.14.1" @@ -3498,9 +3936,9 @@ dependencies = [ [[package]] name = "rubato" -version = "0.12.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd70209c27d5b08f5528bdc779ea3ffb418954e28987f9f9775c6eac41003f9c" +checksum = "e6dd52e80cfc21894deadf554a5673002938ae4625f7a283e536f9cf7c17b0d5" dependencies = [ "num-complex", "num-integer", @@ -3520,15 +3958,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver", -] - [[package]] name = "rustfft" version = "6.1.0" @@ -3546,23 +3975,69 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.20" +version = "0.37.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b96e891d04aa506a6d1f318d2771bcb1c7dfda84e126660ace067c9b474bb2c0" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" dependencies = [ "bitflags 1.3.2", "errno", "io-lifetimes", "libc", - "linux-raw-sys", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ad981d6c340a49cdc40a1028d9c6084ec7e9fa33fcb839cab656a267071e234" +dependencies = [ + "bitflags 2.4.1", + "errno", + "libc", + "linux-raw-sys 0.4.11", "windows-sys 0.48.0", ] +[[package]] +name = "rustybuzz" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162bdf42e261bee271b3957691018634488084ef577dddeb6420a9684cab2a6a" +dependencies = [ + "bitflags 1.3.2", + "bytemuck", + "smallvec", + "ttf-parser 0.18.1", + "unicode-bidi-mirroring", + "unicode-ccc", + "unicode-general-category", + "unicode-script", +] + +[[package]] +name = "rustybuzz" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82eea22c8f56965eeaf3a209b3d24508256c7b920fb3b6211b8ba0f7c0583250" +dependencies = [ + "bitflags 1.3.2", + "bytemuck", + "libm", + "smallvec", + "ttf-parser 0.19.2", + "unicode-bidi-mirroring", + "unicode-ccc", + "unicode-general-category", + "unicode-script", +] + [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "same-file" @@ -3575,11 +4050,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" dependencies = [ - "windows-sys 0.42.0", + "windows-sys 0.48.0", ] [[package]] @@ -3590,79 +4065,86 @@ checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] -name = "security-framework" -version = "2.9.1" +name = "sctk-adwaita" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" +checksum = "cda4e97be1fd174ccc2aae81c8b694e803fa99b34e8fd0f057a9d70698e3ed09" dependencies = [ - "bitflags 1.3.2", - "core-foundation 0.9.3", - "core-foundation-sys 0.8.4", - "libc", - "security-framework-sys", + "ab_glyph", + "log", + "memmap2 0.5.10", + "smithay-client-toolkit", + "tiny-skia 0.8.4", ] [[package]] -name = "security-framework-sys" -version = "2.9.0" +name = "security-framework" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" dependencies = [ - "core-foundation-sys 0.8.4", + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", "libc", + "security-framework-sys", ] [[package]] -name = "semver" -version = "0.9.0" +name = "security-framework-sys" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" dependencies = [ - "semver-parser", + "core-foundation-sys", + "libc", ] -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - [[package]] name = "serde" -version = "1.0.164" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d" +checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.164" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" +checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.22", + "syn 2.0.39", ] [[package]] name = "serde_json" -version = "1.0.99" +version = "1.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" dependencies = [ "itoa", "ryu", "serde", ] +[[package]] +name = "serde_spanned" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -3677,85 +4159,56 @@ dependencies = [ [[package]] name = "serialport" -version = "4.2.1" +version = "4.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353dc2cbfc67c9a14a89a1292a9d8e819bd51066b083e08c1974ba08e3f48c62" +checksum = "c32634e2bd4311420caa504404a55fad2131292c485c97014cbed89a5899885f" dependencies = [ "CoreFoundation-sys", "IOKit-sys", - "bitflags 2.0.2", - "cfg-if 1.0.0", + "bitflags 1.3.2", + "cfg-if", "mach2", - "nix 0.26.2", + "nix 0.26.4", "regex", "scopeguard", "winapi", ] -[[package]] -name = "sha1" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" -dependencies = [ - "sha1_smol", -] - -[[package]] -name = "sha1_smol" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" - -[[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" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" [[package]] -name = "sid" -version = "0.6.1" +name = "signal-hook-registry" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd5ac56c121948b4879bba9e519852c211bcdd8f014efff766441deff0b91bdb" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ - "num-traits", + "libc", ] [[package]] -name = "signal-hook" -version = "0.3.15" +name = "simd-adler32" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" -dependencies = [ - "libc", - "signal-hook-registry", -] +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" [[package]] -name = "signal-hook-registry" -version = "1.4.1" +name = "simplecss" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "a11be7c62927d9427e9f40f3444d5499d868648e2edbc4e2116de69e7ec0e89d" dependencies = [ - "libc", + "log", ] [[package]] -name = "simd-adler32" -version = "0.3.5" +name = "siphasher" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "skip_error" @@ -3765,9 +4218,9 @@ checksum = "0a17bb801cb94f28c0885ef79ca5b412519ab95e6bfd3160506d5e84570d5173" [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] @@ -3783,43 +4236,25 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.10.0" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" [[package]] name = "smithay-client-toolkit" -version = "0.15.4" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a28f16a97fa0e8ce563b2774d1e732dd5d4025d2772c5dba0a41a0f90a29da3" +checksum = "870427e30b8f2cbe64bf43ec4b86e88fe39b0a84b3f15efd9c9c2d020bc86eb9" dependencies = [ "bitflags 1.3.2", "calloop", "dlib", "lazy_static", "log", - "memmap2 0.3.1", - "nix 0.22.3", - "pkg-config", - "wayland-client", - "wayland-cursor", - "wayland-protocols", -] - -[[package]] -name = "smithay-client-toolkit" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454" -dependencies = [ - "bitflags 1.3.2", - "dlib", - "lazy_static", - "log", "memmap2 0.5.10", "nix 0.24.3", "pkg-config", - "wayland-client", + "wayland-client 0.29.5", "wayland-cursor", "wayland-protocols", ] @@ -3830,83 +4265,82 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a345c870a1fae0b1b779085e81b51e614767c239e93503588e54c5b17f4b0e8" dependencies = [ - "smithay-client-toolkit 0.16.0", - "wayland-client", + "smithay-client-toolkit", + "wayland-client 0.29.5", ] [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", ] [[package]] -name = "spin" -version = "0.9.8" +name = "socket2" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ - "lock_api", + "libc", + "windows-sys 0.48.0", ] [[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "stdweb" -version = "0.4.20" +name = "softbuffer" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" +checksum = "c2b953f6ba7285f0af131eb748aabd8ddaf53e0b81dda3ba5d803b0847d6559f" dependencies = [ - "discard", - "rustc_version", - "stdweb-derive", - "stdweb-internal-macros", - "stdweb-internal-runtime", + "bytemuck", + "cfg_aliases", + "cocoa", + "core-graphics", + "fastrand 1.9.0", + "foreign-types", + "log", + "nix 0.26.4", + "objc", + "raw-window-handle", + "redox_syscall 0.3.5", + "thiserror", "wasm-bindgen", + "wayland-backend", + "wayland-client 0.30.2", + "wayland-sys 0.30.1", + "web-sys", + "windows-sys 0.48.0", + "x11-dl", + "x11rb 0.11.1", ] [[package]] -name = "stdweb-derive" -version = "0.5.3" +name = "spin" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" dependencies = [ - "proc-macro2", - "quote", - "serde", - "serde_derive", - "syn 1.0.109", + "lock_api", ] [[package]] -name = "stdweb-internal-macros" -version = "0.2.9" +name = "spirv" +version = "0.2.0+1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" +checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830" dependencies = [ - "base-x", - "proc-macro2", - "quote", - "serde", - "serde_derive", - "serde_json", - "sha1", - "syn 1.0.109", + "bitflags 1.3.2", + "num-traits", ] [[package]] -name = "stdweb-internal-runtime" -version = "0.1.5" +name = "static_assertions" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "str-buf" @@ -3920,12 +4354,47 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" +[[package]] +name = "strict-num" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" +dependencies = [ + "float-cmp", +] + [[package]] name = "strsim" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +[[package]] +name = "svg_fmt" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2" + +[[package]] +name = "svgtypes" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed4b0611e7f3277f68c0fa18e385d9e2d26923691379690039548f867cef02a7" +dependencies = [ + "kurbo", + "siphasher", +] + +[[package]] +name = "swash" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b7c73c813353c347272919aa1af2885068b05e625e5532b43049e4f641ae77f" +dependencies = [ + "yazi", + "zeno", +] + [[package]] name = "symphonia" version = "0.5.3" @@ -3993,7 +4462,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7c73eb88fee79705268cc7b742c7bc93a7b76e092ab751d0833866970754142" dependencies = [ - "arrayvec 0.7.4", + "arrayvec", "bitflags 1.3.2", "bytemuck", "lazy_static", @@ -4071,34 +4540,63 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.22" +version = "2.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2efbeae7acf4eabd6bcdcbd11c92f45231ddda7539edc7806bd1a04a03b24616" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "sys-locale" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e801cf239ecd6ccd71f03d270d67dd53d13e90aab208bf4b8fe4ad957ea949b0" +dependencies = [ + "libc", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tempfile" -version = "3.6.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" dependencies = [ - "autocfg", - "cfg-if 1.0.0", - "fastrand", - "redox_syscall 0.3.5", - "rustix", + "cfg-if", + "fastrand 2.0.1", + "redox_syscall 0.4.1", + "rustix 0.38.24", "windows-sys 0.48.0", ] [[package]] name = "termcolor" -version = "1.2.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449" dependencies = [ "winapi-util", ] @@ -4111,40 +4609,39 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.40" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.22", + "syn 2.0.39", ] [[package]] name = "thread-id" -version = "4.1.0" +version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ee93aa2b8331c0fec9091548843f2c90019571814057da3b783f9de09349d73" +checksum = "f0ec81c46e9eb50deaa257be2f148adf052d1fb7701cfd55ccfab2525280b70b" dependencies = [ "libc", - "redox_syscall 0.2.16", "winapi", ] [[package]] name = "tiff" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471" +checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211" dependencies = [ "flate2", "jpeg-decoder", @@ -4153,24 +4650,15 @@ dependencies = [ [[package]] name = "time" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - -[[package]] -name = "time" -version = "0.3.22" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea9e1b3cf1243ae005d9e74085d4d542f3125458f3a81af210d901dcd7411efd" +checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" dependencies = [ + "deranged", "itoa", "libc", "num_threads", + "powerfmt", "serde", "time-core", "time-macros", @@ -4178,19 +4666,70 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.9" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" +checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" dependencies = [ "time-core", ] +[[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 0.8.4", +] + +[[package]] +name = "tiny-skia" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7db11798945fa5c3e5490c794ccca7c6de86d3afdd54b4eb324109939c6f37bc" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "log", + "png", + "tiny-skia-path 0.10.0", +] + +[[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 = "tiny-skia-path" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f60aa35c89ac2687ace1a2556eaaea68e8c0d47408a2e3e7f5c98a489e7281c" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -4208,30 +4747,30 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.28.2" +version = "1.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" +checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" dependencies = [ - "autocfg", + "backtrace", "bytes", "libc", "mio", "num_cpus", "pin-project-lite", - "socket2", + "socket2 0.5.5", "tokio-macros", "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.22", + "syn 2.0.39", ] [[package]] @@ -4250,7 +4789,7 @@ version = "5.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa6e2e4cf0520a99c5f87d5abb24172b5bd220de57c3181baaaa5440540c64aa" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "futures", "log", "mio-serial", @@ -4259,9 +4798,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", @@ -4280,19 +4819,47 @@ dependencies = [ "serde", ] +[[package]] +name = "toml" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.21.0", +] + [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] [[package]] name = "toml_edit" -version = "0.19.11" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "266f016b7f039eec8a1a80dfe6156b633d208b9fccca5e4db1d6775b0c4e34a7" +checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.1.0", + "serde", + "serde_spanned", "toml_datetime", "winnow", ] @@ -4305,20 +4872,19 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if 1.0.0", "pin-project-lite", "tracing-core", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", ] @@ -4347,9 +4913,21 @@ checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd" [[package]] name = "ttf-parser" -version = "0.19.1" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0609f771ad9c6155384897e1df4d948e692667cc0588548b68eb44d052b27633" + +[[package]] +name = "ttf-parser" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49d64318d8311fc2668e48b63969f4343e0a85c4a109aa8460d6672e364b8bd1" + +[[package]] +name = "ttf-parser" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a464a4b34948a5f67fddd2b823c62d9d92e44be75058b99939eae6c5b6960b33" +checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" [[package]] name = "twox-hash" @@ -4357,7 +4935,7 @@ version = "1.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "rand", "static_assertions", ] @@ -4369,37 +4947,146 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] -name = "unicode-ident" -version = "1.0.9" +name = "unicode-bidi-mirroring" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" +checksum = "56d12260fb92d52f9008be7e4bca09f584780eb2266dc8fecc6a192bec561694" [[package]] -name = "unicode-normalization" -version = "0.1.22" +name = "unicode-ccc" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] +checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1" [[package]] -name = "unicode-segmentation" -version = "1.10.1" +name = "unicode-general-category" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" +checksum = "2281c8c1d221438e373249e065ca4989c4c36952c211ff21a0ee91c44a3869e7" [[package]] -name = "url" -version = "2.4.0" +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-linebreak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-script" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d817255e1bed6dfd4ca47258685d14d2bdcfbc64fdc9e3819bd5848057b8ecc" + +[[package]] +name = "unicode-segmentation" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" + +[[package]] +name = "unicode-vo" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "url" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" dependencies = [ "form_urlencoded", "idna", "percent-encoding", ] +[[package]] +name = "usvg" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14d09ddfb0d93bf84824c09336d32e42f80961a9d1680832eb24fdf249ce11e6" +dependencies = [ + "base64", + "log", + "pico-args", + "usvg-parser", + "usvg-text-layout", + "usvg-tree", + "xmlwriter", +] + +[[package]] +name = "usvg-parser" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d19bf93d230813599927d88557014e0908ecc3531666d47c634c6838bc8db408" +dependencies = [ + "data-url", + "flate2", + "imagesize", + "kurbo", + "log", + "roxmltree", + "simplecss", + "siphasher", + "svgtypes", + "usvg-tree", +] + +[[package]] +name = "usvg-text-layout" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "035044604e89652c0a2959b8b356946997a52649ba6cade45928c2842376feb4" +dependencies = [ + "fontdb", + "kurbo", + "log", + "rustybuzz 0.7.0", + "unicode-bidi", + "unicode-script", + "unicode-vo", + "usvg-tree", +] + +[[package]] +name = "usvg-tree" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7939a7e4ed21cadb5d311d6339730681c3e24c3e81d60065be80e485d3fc8b92" +dependencies = [ + "rctree", + "strict-num", + "svgtypes", + "tiny-skia-path 0.10.0", +] + [[package]] name = "utf8parse" version = "0.2.1" @@ -4411,7 +5098,7 @@ name = "uwh-common" version = "0.1.4" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec", "defmt", "derivative", "displaydoc", @@ -4420,15 +5107,15 @@ dependencies = [ "log", "reqwest", "serde", - "time 0.3.22", - "toml", + "time", + "toml 0.8.8", ] [[package]] name = "value-bag" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4d330786735ea358f3bc09eea4caa098569c1c93f342d9aca0514915022fe7e" +checksum = "4a72e1902dde2bd6441347de2b70b7f5d59bf157c6c62f0c44572607a1d55bbe" [[package]] name = "vcpkg" @@ -4436,6 +5123,12 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + [[package]] name = "vecmath" version = "1.0.0" @@ -4453,15 +5146,15 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "waker-fn" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" +checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" [[package]] name = "walkdir" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ "same-file", "winapi-util", @@ -4476,12 +5169,6 @@ dependencies = [ "try-lock", ] -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -4490,36 +5177,36 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.22", + "syn 2.0.39", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.37" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "js-sys", "wasm-bindgen", "web-sys", @@ -4527,9 +5214,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4537,22 +5224,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" dependencies = [ "proc-macro2", "quote", - "syn 2.0.22", + "syn 2.0.39", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" [[package]] name = "wasm-timer" @@ -4569,6 +5256,21 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wayland-backend" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b48e27457e8da3b2260ac60d0a94512f5cba36448679f3747c0865b7893ed8" +dependencies = [ + "cc", + "downcast-rs", + "io-lifetimes", + "nix 0.26.4", + "scoped-tls", + "smallvec", + "wayland-sys 0.30.1", +] + [[package]] name = "wayland-client" version = "0.29.5" @@ -4581,8 +5283,20 @@ dependencies = [ "nix 0.24.3", "scoped-tls", "wayland-commons", - "wayland-scanner", - "wayland-sys", + "wayland-scanner 0.29.5", + "wayland-sys 0.29.5", +] + +[[package]] +name = "wayland-client" +version = "0.30.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "489c9654770f674fc7e266b3c579f4053d7551df0ceb392f153adb1f9ed06ac8" +dependencies = [ + "bitflags 1.3.2", + "nix 0.26.4", + "wayland-backend", + "wayland-scanner 0.30.1", ] [[package]] @@ -4594,7 +5308,7 @@ dependencies = [ "nix 0.24.3", "once_cell", "smallvec", - "wayland-sys", + "wayland-sys 0.29.5", ] [[package]] @@ -4604,20 +5318,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661" dependencies = [ "nix 0.24.3", - "wayland-client", + "wayland-client 0.29.5", "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" @@ -4625,9 +5329,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6" dependencies = [ "bitflags 1.3.2", - "wayland-client", + "wayland-client 0.29.5", "wayland-commons", - "wayland-scanner", + "wayland-scanner 0.29.5", ] [[package]] @@ -4641,6 +5345,17 @@ dependencies = [ "xml-rs", ] +[[package]] +name = "wayland-scanner" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9b873b257fbc32ec909c0eb80dea312076a67014e65e245f5eb69a6b8ab330e" +dependencies = [ + "proc-macro2", + "quick-xml", + "quote", +] + [[package]] name = "wayland-sys" version = "0.29.5" @@ -4652,21 +5367,36 @@ 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-audio-api" -version = "0.26.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd314efae40c8c14a2c2ae41bac1f97e51777efbc0ef2cb5afc3b459d8685602" +checksum = "20211522d5ba0d302025c8fde30553fc9295d416d478d686bb0e987acd51420e" dependencies = [ - "arrayvec 0.7.4", + "arc-swap", + "arrayvec", "cpal", "creek", "crossbeam-channel", + "dasp_sample", "float_eq", - "lazy_static", + "hound", + "hrtf", + "llq", "log", "num-complex", - "once_cell", "realfft", "rubato", "rustc-hash", @@ -4677,9 +5407,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" dependencies = [ "js-sys", "wasm-bindgen", @@ -4691,6 +5421,112 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" +[[package]] +name = "wgpu" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "480c965c9306872eb6255fa55e4b4953be55a8b64d57e61d7ff840d3dcc051cd" +dependencies = [ + "arrayvec", + "cfg-if", + "js-sys", + "log", + "naga", + "parking_lot 0.12.1", + "profiling", + "raw-window-handle", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f478237b4bf0d5b70a39898a66fa67ca3a007d79f2520485b8b0c3dfc46f8c2" +dependencies = [ + "arrayvec", + "bit-vec", + "bitflags 2.4.1", + "codespan-reporting", + "log", + "naga", + "parking_lot 0.12.1", + "profiling", + "raw-window-handle", + "rustc-hash", + "smallvec", + "thiserror", + "web-sys", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-hal" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ecb3258078e936deee14fd4e0febe1cfe9bbb5ffef165cb60218d2ee5eb4448" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags 2.4.1", + "block", + "core-graphics-types", + "d3d12", + "foreign-types", + "glow", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor", + "hassle-rs", + "js-sys", + "khronos-egl", + "libc", + "libloading 0.8.1", + "log", + "metal", + "naga", + "objc", + "parking_lot 0.12.1", + "profiling", + "range-alloc", + "raw-window-handle", + "renderdoc-sys", + "rustc-hash", + "smallvec", + "thiserror", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "winapi", +] + +[[package]] +name = "wgpu-types" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0c153280bb108c2979eb5c7391cb18c56642dd3c072e55f52065e13e2a1252a" +dependencies = [ + "bitflags 2.4.1", + "js-sys", + "web-sys", +] + +[[package]] +name = "widestring" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8" + [[package]] name = "winapi" version = "0.3.9" @@ -4709,9 +5545,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi", ] @@ -4733,53 +5569,52 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "window_clipboard" -version = "0.2.4" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "015dd4474dc6aa96fe19aae3a24587a088bd90331dba5a5cc60fb3a180234c4d" +checksum = "63287c9c4396ccf5346d035a9b0fcaead9e18377637f5eaa78b7ac65c873ff7d" dependencies = [ "clipboard-win", "clipboard_macos", "clipboard_wayland", "clipboard_x11", - "raw-window-handle 0.3.4", + "raw-window-handle", "thiserror", ] [[package]] name = "windows" -version = "0.37.0" +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]] name = "windows" -version = "0.48.0" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25" dependencies = [ - "windows-targets", + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets 0.48.5", ] [[package]] name = "windows-sys" -version = "0.42.0" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets 0.42.2", ] [[package]] @@ -4788,22 +5623,37 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", ] [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] @@ -4814,15 +5664,9 @@ checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" 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" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" @@ -4832,15 +5676,9 @@ checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" - -[[package]] -name = "windows_i686_gnu" -version = "0.37.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" @@ -4850,15 +5688,9 @@ checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" - -[[package]] -name = "windows_i686_msvc" -version = "0.37.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" @@ -4868,15 +5700,9 @@ checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.37.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" @@ -4886,9 +5712,9 @@ checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" @@ -4898,15 +5724,9 @@ checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" 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" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" @@ -4916,59 +5736,62 @@ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winit" -version = "0.26.1" +version = "0.28.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b43cc931d58b99461188607efd7acb2a093e65fc621f54cad78517a6063e73a" +checksum = "9596d90b45384f5281384ab204224876e8e8bf7d58366d9b795ad99aa9894b94" dependencies = [ + "android-activity", "bitflags 1.3.2", - "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 0.5.0", - "ndk-glue", - "ndk-sys 0.2.2", - "objc", - "parking_lot 0.11.2", + "ndk", + "objc2", + "once_cell", + "orbclient", "percent-encoding", - "raw-window-handle 0.4.3", - "smithay-client-toolkit 0.15.4", + "raw-window-handle", + "redox_syscall 0.3.5", + "sctk-adwaita", + "smithay-client-toolkit", "wasm-bindgen", - "wayland-client", + "wayland-client 0.29.5", + "wayland-commons", "wayland-protocols", + "wayland-scanner 0.29.5", "web-sys", - "winapi", + "windows-sys 0.45.0", "x11-dl", ] [[package]] name = "winnow" -version = "0.4.7" +version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca0ace3845f0d96209f0375e6d367e3eb87eb65d27d445bdc9f1843a26f39448" +checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" dependencies = [ "memchr", ] [[package]] name = "winreg" -version = "0.10.1" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "winapi", + "cfg-if", + "windows-sys 0.48.0", ] [[package]] @@ -4977,7 +5800,7 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c" dependencies = [ - "toml", + "toml 0.5.11", ] [[package]] @@ -5003,6 +5826,31 @@ dependencies = [ "winapi-wsapoll", ] +[[package]] +name = "x11rb" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf3c79412dd91bae7a7366b8ad1565a85e35dd049affc3a6a2c549e97419617" +dependencies = [ + "gethostname", + "libc", + "libloading 0.7.4", + "nix 0.25.1", + "once_cell", + "winapi", + "winapi-wsapoll", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0b1513b141123073ce54d5bb1d33f801f17508fbd61e02060b1214e96d39c56" +dependencies = [ + "nix 0.25.1", +] + [[package]] name = "xcursor" version = "0.3.4" @@ -5013,16 +5861,54 @@ dependencies = [ ] [[package]] -name = "xi-unicode" -version = "0.3.0" +name = "xml-rs" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a" +checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a" [[package]] -name = "xml-rs" -version = "0.8.14" +name = "xmlparser" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" + +[[package]] +name = "xmlwriter" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" + +[[package]] +name = "yazi" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c94451ac9513335b5e23d7a8a2b61a7102398b8cca5160829d313e84c9d98be1" + +[[package]] +name = "zeno" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd15f8e0dbb966fd9245e7498c7e9e5055d9e5c8b676b95bd67091cd11a1e697" + +[[package]] +name = "zerocopy" +version = "0.7.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52839dc911083a8ef63efa4d039d1f58b5e409f923e44c80828f206f66e5541c" +checksum = "e97e415490559a91254a2979b4829267a57d2fcd741a98eee8b722fb57289aa0" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd7e48ccf166952882ca8bd778a43502c64f33bf94c12ebe2a7f08e5a0f6689f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] [[package]] name = "zune-inflate" diff --git a/fonts/Cargo.toml b/fonts/Cargo.toml index 3bf33d4d..566f5c5a 100644 --- a/fonts/Cargo.toml +++ b/fonts/Cargo.toml @@ -5,4 +5,4 @@ authors = ["Atlantis Sports "] edition = "2021" [dependencies] -embedded-graphics = "0.7" +embedded-graphics = "0.8" diff --git a/fonts/src/lib.rs b/fonts/src/lib.rs index 21ded789..84c5cacd 100644 --- a/fonts/src/lib.rs +++ b/fonts/src/lib.rs @@ -5,7 +5,7 @@ pub mod fonts { ($name:ident, $file:literal, $w:literal, $h:literal, $spacing:literal, $base:literal) => { pub const $name: embedded_graphics::mono_font::MonoFont = embedded_graphics::mono_font::MonoFont { - image: embedded_graphics::image::ImageRaw::new_binary( + image: embedded_graphics::image::ImageRaw::new( core::include_bytes!(core::concat!(core::env!("OUT_DIR"), "/", $file)), $w * 8, ), diff --git a/matrix-drawing/Cargo.toml b/matrix-drawing/Cargo.toml index 4ab7d6dd..43620ff1 100644 --- a/matrix-drawing/Cargo.toml +++ b/matrix-drawing/Cargo.toml @@ -11,9 +11,9 @@ std = ["arrayvec/std", "serde/std", "uwh-common/std"] [dependencies] arrayref = "0.3" arrayvec = { version = "0.7", default-features = false } -embedded-graphics = "0.7" -fonts = { version = "0.1", path = "../fonts" } -more-asserts = "0.2" -serde = { version = "1.0", default-features = false } -serde_derive = "1.0" +embedded-graphics = "0.8" +fonts = { version = "0.1.4", path = "../fonts" } +more-asserts = "0.3" +serde = { version = "1", default-features = false } +serde_derive = "1" uwh-common = { version = "0.1.4", path = "../uwh-common", default-features = false } diff --git a/refbox/Cargo.toml b/refbox/Cargo.toml index 73ae0352..74a3d3a9 100644 --- a/refbox/Cargo.toml +++ b/refbox/Cargo.toml @@ -15,21 +15,24 @@ arrayref = "0.3" collect_array = "0.1" clap = { version = "4", features = ["derive"] } confy = "0.5" -conquer-once = "0.3" -derivative = "2.2" -directories = "4" -embedded-graphics = "0.7" -enum-derive-2018 = "2" +conquer-once = "0.4" +derivative = "2" +directories = "5" +embedded-graphics = "0.8" +enum-derive-2018 = "3" env_logger = "0.9" futures-lite = "1" -iced = { version = "0.4", default-features = false, features = ["canvas", "glow", "pure", "tokio"] } -iced_futures = { version = "0.4", features = ["async-std"] } -iced_native = "0.5" +iced = { version = "0.10", default-features = false, features = ["canvas", "svg", "tokio", "wgpu"] } +iced_core = "0.10" +iced_futures = { version = "0.7", features = ["async-std"] } +# iced_native = "0.10" +iced_renderer = "0.1" +iced_runtime = "0.1" log = "0.4" log4rs = { version = "1", default-features = false, features = ["background_rotation", "compound_policy", "console_appender", "fixed_window_roller", "gzip", "pattern_encoder", "rolling_file_appender", "size_trigger"]} log-panics = { version = "2", features = ["with-backtrace"]} -macro-attr-2018 = "2" -more-asserts = "0.2" +macro-attr-2018 = "3" +more-asserts = "0.3" paste = "1" reqwest = { version = "0.11", features = ["json"] } serde = "1" @@ -40,10 +43,10 @@ thiserror = "1" time = { version = "0.3", features = ["local-offset", "macros", "serde", "serde-human-readable"] } tokio = { version = "1", features = ["io-util", "macros", "net", "sync", "time"] } tokio-serial = "5" -toml = "0.5" -uwh-common = { version = "0.1", path = "../uwh-common"} -matrix-drawing = { version = "0.1", path = "../matrix-drawing"} -web-audio-api = { version = "0.26", default-features = false, features = ["cpal"] } +toml = "0.8" +uwh-common = { version = "0.1.3", path = "../uwh-common"} +matrix-drawing = { version = "0.1.3", path = "../matrix-drawing"} +web-audio-api = { version = "0.34", default-features = false, features = ["cpal"] } [target.'cfg(target_os = "linux")'.dependencies] rppal = "0.14" diff --git a/refbox/resources/Roboto-Medium.ttf b/refbox/resources/Roboto-Medium.ttf index 092470d8..ac0f908b 100644 Binary files a/refbox/resources/Roboto-Medium.ttf and b/refbox/resources/Roboto-Medium.ttf differ diff --git a/refbox/resources/arrow_drop_down.svg b/refbox/resources/arrow_drop_down.svg new file mode 100644 index 00000000..4fdf49ae --- /dev/null +++ b/refbox/resources/arrow_drop_down.svg @@ -0,0 +1,9 @@ + + + diff --git a/refbox/resources/arrow_drop_up.svg b/refbox/resources/arrow_drop_up.svg new file mode 100644 index 00000000..e94f3cee --- /dev/null +++ b/refbox/resources/arrow_drop_up.svg @@ -0,0 +1,9 @@ + + + diff --git a/refbox/resources/backspace.svg b/refbox/resources/backspace.svg new file mode 100644 index 00000000..cd0da8b5 --- /dev/null +++ b/refbox/resources/backspace.svg @@ -0,0 +1,9 @@ + + + diff --git a/refbox/resources/pause.svg b/refbox/resources/pause.svg new file mode 100644 index 00000000..a8977059 --- /dev/null +++ b/refbox/resources/pause.svg @@ -0,0 +1,9 @@ + + + diff --git a/refbox/resources/play_arrow.svg b/refbox/resources/play_arrow.svg new file mode 100644 index 00000000..03f06c1a --- /dev/null +++ b/refbox/resources/play_arrow.svg @@ -0,0 +1,9 @@ + + + diff --git a/refbox/src/app/mod.rs b/refbox/src/app/mod.rs index 8b72bc62..064dcb8f 100644 --- a/refbox/src/app/mod.rs +++ b/refbox/src/app/mod.rs @@ -5,21 +5,18 @@ use crate::{ sound_controller::*, tournament_manager::*, }; -use iced::{ - executor, - pure::{column, Application, Element}, - Command, Subscription, -}; +use iced::{executor, widget::column, Application, Command, Subscription}; use iced_futures::{ futures::stream::{self, BoxStream}, - subscription::Recipe, + subscription::{EventStream, Recipe}, }; +use iced_runtime::{command, window}; use log::*; use reqwest::{Client, Method, StatusCode}; use std::{ + borrow::Cow, cmp::min, collections::BTreeMap, - hash::Hasher, process::Child, sync::{Arc, Mutex}, }; @@ -43,7 +40,7 @@ mod message; use message::*; pub mod style; -use style::{PADDING, SPACING, WINDOW_BACKGROUND}; +use style::{PADDING, SPACING}; pub mod update_sender; use update_sender::*; @@ -51,6 +48,8 @@ use update_sender::*; const REQUEST_TIMEOUT: Duration = Duration::from_secs(10); const MAX_RETRIES: usize = 6; +pub type Element<'a, Message> = iced::Element<'a, Message, iced::Renderer>; + pub struct RefBoxApp { tm: Arc>, config: Config, @@ -444,6 +443,7 @@ impl Drop for RefBoxApp { impl Application for RefBoxApp { type Executor = executor::Default; type Message = Message; + type Theme = style::ApplicationTheme; type Flags = RefBoxAppFlags; fn new(flags: Self::Flags) -> (Self, Command) { @@ -520,7 +520,16 @@ impl Application for RefBoxApp { fullscreen, list_all_tournaments, }, - Command::none(), + Command::single(command::Action::LoadFont { + bytes: Cow::from(&include_bytes!("../../resources/Roboto-Medium.ttf")[..]), + tagger: Box::new(|res| match res { + Ok(()) => { + info!("Loaded font"); + Message::NoAction + } + Err(e) => panic!("Failed to load font: {e:?}"), + }), + }), ) } @@ -535,14 +544,6 @@ impl Application for RefBoxApp { "UWH Ref Box".into() } - fn mode(&self) -> iced::window::Mode { - if self.fullscreen { - iced::window::Mode::Fullscreen - } else { - iced::window::Mode::Windowed - } - } - fn update(&mut self, message: Message) -> Command { trace!("Handling message: {message:?}"); @@ -554,6 +555,14 @@ impl Application for RefBoxApp { self.last_message = message.clone(); } + let command = if matches!(message, Message::Init) && self.fullscreen { + Command::single(command::Action::Window(window::Action::ChangeMode( + iced_core::window::Mode::Fullscreen, + ))) + } else { + Command::none() + }; + match message { Message::Init => self.request_tournament_list(), Message::NewSnapshot(snapshot) => { @@ -1633,119 +1642,113 @@ impl Application for RefBoxApp { Message::NoAction => {} }; - Command::none() - } - - fn background_color(&self) -> iced::Color { - WINDOW_BACKGROUND + command } fn view(&self) -> Element { let clock_running = self.tm.lock().unwrap().clock_is_running(); - let mut main_view = column() - .spacing(SPACING) - .padding(PADDING) - .push(match self.app_state { - AppState::MainPage => { - let new_config = if self.snapshot.current_period == GamePeriod::BetweenGames { - self.tm - .lock() - .unwrap() - .next_game_info() - .as_ref() - .and_then(|info| Some(info.timing.as_ref()?.clone().into())) - } else { - None - }; - - let config = if let Some(ref c) = new_config { - c - } else { - &self.config.game - }; + let mut main_view = column![match self.app_state { + AppState::MainPage => { + let new_config = if self.snapshot.current_period == GamePeriod::BetweenGames { + self.tm + .lock() + .unwrap() + .next_game_info() + .as_ref() + .and_then(|info| Some(info.timing.as_ref()?.clone().into())) + } else { + None + }; - build_main_view( - &self.snapshot, - config, - self.using_uwhscores, - &self.games, - self.config.mode, - clock_running, - ) - } - AppState::TimeEdit(_, time, timeout_time) => build_time_edit_view( - &self.snapshot, - time, - timeout_time, - self.config.mode, - clock_running, - ), - AppState::ScoreEdit { - scores, - is_confirmation, - } => build_score_edit_view( - &self.snapshot, - scores, - is_confirmation, - self.config.mode, - clock_running, - ), - AppState::PenaltyOverview(indices) => build_penalty_overview_page( - &self.snapshot, - self.pen_edit.get_printable_lists(Instant::now()).unwrap(), - indices, - self.config.mode, - clock_running, - ), - AppState::KeypadPage(page, player_num) => build_keypad_page( - &self.snapshot, - page, - player_num, - self.config.mode, - clock_running, - ), - AppState::GameDetailsPage => build_game_info_page( + let config = if let Some(ref c) = new_config { + c + } else { + &self.config.game + }; + build_main_view( &self.snapshot, - &self.config.game, + config, self.using_uwhscores, &self.games, self.config.mode, clock_running, - ), - AppState::EditGameConfig(page) => build_game_config_edit_page( - &self.snapshot, - self.edited_settings.as_ref().unwrap(), - &self.tournaments, - page, - self.config.mode, - clock_running, - ), - AppState::ParameterEditor(param, dur) => build_game_parameter_editor( - &self.snapshot, - param, - dur, - self.config.mode, - clock_running, - ), - AppState::ParameterList(param, index) => build_list_selector_page( - &self.snapshot, - param, - index, - self.edited_settings.as_ref().unwrap(), - &self.tournaments, - self.config.mode, - clock_running, - ), - AppState::ConfirmationPage(ref kind) => { - build_confirmation_page(&self.snapshot, kind, self.config.mode, clock_running) - } - AppState::ConfirmScores(scores) => build_score_confirmation_page( - &self.snapshot, - scores, - self.config.mode, - clock_running, - ), - }); + ) + } + AppState::TimeEdit(_, time, timeout_time) => build_time_edit_view( + &self.snapshot, + time, + timeout_time, + self.config.mode, + clock_running, + ), + AppState::ScoreEdit { + scores, + is_confirmation, + } => build_score_edit_view( + &self.snapshot, + scores, + is_confirmation, + self.config.mode, + clock_running, + ), + AppState::PenaltyOverview(indices) => build_penalty_overview_page( + &self.snapshot, + self.pen_edit.get_printable_lists(Instant::now()).unwrap(), + indices, + self.config.mode, + clock_running, + ), + AppState::KeypadPage(page, player_num) => build_keypad_page( + &self.snapshot, + page, + player_num, + self.config.mode, + clock_running, + ), + AppState::GameDetailsPage => build_game_info_page( + &self.snapshot, + &self.config.game, + self.using_uwhscores, + &self.games, + self.config.mode, + clock_running, + ), + AppState::EditGameConfig(page) => build_game_config_edit_page( + &self.snapshot, + self.edited_settings.as_ref().unwrap(), + &self.tournaments, + page, + self.config.mode, + clock_running, + ), + AppState::ParameterEditor(param, dur) => build_game_parameter_editor( + &self.snapshot, + param, + dur, + self.config.mode, + clock_running, + ), + AppState::ParameterList(param, index) => build_list_selector_page( + &self.snapshot, + param, + index, + self.edited_settings.as_ref().unwrap(), + &self.tournaments, + self.config.mode, + clock_running, + ), + AppState::ConfirmationPage(ref kind) => { + build_confirmation_page(&self.snapshot, kind, self.config.mode, clock_running) + } + AppState::ConfirmScores(scores) => build_score_confirmation_page( + &self.snapshot, + scores, + self.config.mode, + clock_running, + ), + }] + .spacing(SPACING) + .padding(PADDING); match self.app_state { AppState::ScoreEdit { @@ -1771,16 +1774,16 @@ struct TimeUpdater { clock_running_receiver: watch::Receiver, } -impl Recipe for TimeUpdater { +impl Recipe for TimeUpdater { type Output = Message; - fn hash(&self, state: &mut H) { + fn hash(&self, state: &mut iced_core::Hasher) { use std::hash::Hash; "TimeUpdater".hash(state); } - fn stream(self: Box, _input: BoxStream<'static, I>) -> BoxStream<'static, Self::Output> { + fn stream(self: Box, _input: EventStream) -> BoxStream<'static, Self::Output> { debug!("Updater started"); struct State { @@ -1868,16 +1871,16 @@ struct MessageListener { rx: Arc>>>, } -impl Recipe for MessageListener { +impl Recipe for MessageListener { type Output = Message; - fn hash(&self, state: &mut H) { + fn hash(&self, state: &mut iced_core::Hasher) { use std::hash::Hash; "MessageListener".hash(state); } - fn stream(self: Box, _input: BoxStream<'static, I>) -> BoxStream<'static, Self::Output> { + fn stream(self: Box, _input: EventStream) -> BoxStream<'static, Self::Output> { info!("Message Listener started"); let rx = self diff --git a/refbox/src/app/style.rs b/refbox/src/app/style.rs index 1e272dfb..6a30d1b6 100644 --- a/refbox/src/app/style.rs +++ b/refbox/src/app/style.rs @@ -1,19 +1,24 @@ use iced::{ - pure::widget::{button, container}, - Background, Color, Vector, + application, + widget::{self, button, container, svg, text}, + Background, BorderRadius, Color, Vector, }; +use iced_core::text::LineHeight; +use iced_renderer::Renderer; use paste::paste; pub const BORDER_RADIUS: f32 = 9.0; pub const BORDER_WIDTH: f32 = 6.0; -pub const SPACING: u16 = 8; // Must be a multiple of 4 -pub const PADDING: u16 = 8; -pub const MIN_BUTTON_SIZE: u16 = 89; +pub const SPACING: f32 = 8.0; +pub const PADDING: f32 = 8.0; +pub const MIN_BUTTON_SIZE: f32 = 89.0; -pub const SMALL_TEXT: u16 = 22; -pub const SMALL_PLUS_TEXT: u16 = 34; -pub const MEDIUM_TEXT: u16 = 44; -pub const LARGE_TEXT: u16 = 80; +pub const SMALL_TEXT: f32 = 19.0; +pub const SMALL_PLUS_TEXT: f32 = 29.0; +pub const MEDIUM_TEXT: f32 = 38.0; +pub const LARGE_TEXT: f32 = 66.0; + +pub const LINE_HEIGHT: LineHeight = LineHeight::Relative(1.15); // See https://stackoverflow.com/a/727339 for color mixing math. For darkening colors with pure // black, the math simplifies to new_r = orig_r * (1 - black_alpha), so we will multiply by the @@ -48,8 +53,20 @@ pub const DISABLED_COLOR: Color = GRAY; pub const WINDOW_BACKGROUND: Color = Color::from_rgb(0.82, 0.82, 0.82); -#[derive(Clone, Copy, Debug)] -pub enum Button { +#[derive(Clone, Copy, Debug, Default)] +pub enum ApplicationTheme { + #[default] + Light, +} + +pub type Element<'a, Message> = iced::Element<'a, Message, Renderer>; +pub type Button<'a, Message> = widget::Button<'a, Message, Renderer>; +pub type Container<'a, Message> = widget::Container<'a, Message, Renderer>; +pub type Row<'a, Message> = widget::Row<'a, Message, Renderer>; +pub type Text<'a> = widget::Text<'a, Renderer>; + +#[derive(Clone, Copy, Debug, Default)] +pub enum ButtonStyle { White, WhiteSelected, Black, @@ -63,123 +80,200 @@ pub enum Button { Green, GreenSelected, Blue, + #[default] Gray, LightGray, } -impl button::StyleSheet for Button { - fn active(&self) -> button::Style { - let (background_color, text_color) = match self { - Self::White | Self::WhiteSelected => (WHITE, BLACK), - Self::Black | Self::BlackSelected => (BLACK, WHITE), - Self::Red | Self::RedSelected => (RED, BLACK), - Self::Orange | Self::OrangeSelected => (ORANGE, BLACK), - Self::Yellow | Self::YellowSelected => (YELLOW, BLACK), - Self::Green | Self::GreenSelected => (GREEN, BLACK), - Self::Blue => (BLUE, WHITE), - Self::Gray => (GRAY, BLACK), - Self::LightGray => (LIGHT_GRAY, BLACK), +impl button::StyleSheet for ApplicationTheme { + type Style = ButtonStyle; + + fn active(&self, style: &Self::Style) -> button::Appearance { + let (background_color, text_color) = match style { + ButtonStyle::White | ButtonStyle::WhiteSelected => (WHITE, BLACK), + ButtonStyle::Black | ButtonStyle::BlackSelected => (BLACK, WHITE), + ButtonStyle::Red | ButtonStyle::RedSelected => (RED, BLACK), + ButtonStyle::Orange | ButtonStyle::OrangeSelected => (ORANGE, BLACK), + ButtonStyle::Yellow | ButtonStyle::YellowSelected => (YELLOW, BLACK), + ButtonStyle::Green | ButtonStyle::GreenSelected => (GREEN, BLACK), + ButtonStyle::Blue => (BLUE, WHITE), + ButtonStyle::Gray => (GRAY, BLACK), + ButtonStyle::LightGray => (LIGHT_GRAY, BLACK), }; - let border_width = match self { - Self::White - | Self::Black - | Self::Red - | Self::Orange - | Self::Yellow - | Self::Green - | Self::Blue - | Self::Gray - | Self::LightGray => 0.0, - Self::WhiteSelected - | Self::BlackSelected - | Self::RedSelected - | Self::OrangeSelected - | Self::YellowSelected - | Self::GreenSelected => BORDER_WIDTH, + let border_width = match style { + ButtonStyle::White + | ButtonStyle::Black + | ButtonStyle::Red + | ButtonStyle::Orange + | ButtonStyle::Yellow + | ButtonStyle::Green + | ButtonStyle::Blue + | ButtonStyle::Gray + | ButtonStyle::LightGray => 0.0, + ButtonStyle::WhiteSelected + | ButtonStyle::BlackSelected + | ButtonStyle::RedSelected + | ButtonStyle::OrangeSelected + | ButtonStyle::YellowSelected + | ButtonStyle::GreenSelected => BORDER_WIDTH, }; let background = Some(Background::Color(background_color)); - button::Style { + button::Appearance { shadow_offset: Vector::default(), background, - border_radius: BORDER_RADIUS, + border_radius: BorderRadius::from(BORDER_RADIUS), border_width, border_color: BORDER_COLOR, text_color, } } - fn hovered(&self) -> button::Style { - self.active() + fn hovered(&self, style: &Self::Style) -> button::Appearance { + self.active(style) } - fn pressed(&self) -> button::Style { - let background_color = match self { - Self::White | Self::WhiteSelected => WHITE_PRESSED, - Self::Black | Self::BlackSelected => BLACK_PRESSED, - Self::Red | Self::RedSelected => RED_PRESSED, - Self::Orange | Self::OrangeSelected => ORANGE_PRESSED, - Self::Yellow | Self::YellowSelected => YELLOW_PRESSED, - Self::Green | Self::GreenSelected => GREEN_PRESSED, - Self::Blue => BLUE_PRESSED, - Self::Gray => GRAY_PRESSED, - Self::LightGray => LIGHT_GRAY_PRESSED, + fn pressed(&self, style: &Self::Style) -> button::Appearance { + let background_color = match style { + ButtonStyle::White | ButtonStyle::WhiteSelected => WHITE_PRESSED, + ButtonStyle::Black | ButtonStyle::BlackSelected => BLACK_PRESSED, + ButtonStyle::Red | ButtonStyle::RedSelected => RED_PRESSED, + ButtonStyle::Orange | ButtonStyle::OrangeSelected => ORANGE_PRESSED, + ButtonStyle::Yellow | ButtonStyle::YellowSelected => YELLOW_PRESSED, + ButtonStyle::Green | ButtonStyle::GreenSelected => GREEN_PRESSED, + ButtonStyle::Blue => BLUE_PRESSED, + ButtonStyle::Gray => GRAY_PRESSED, + ButtonStyle::LightGray => LIGHT_GRAY_PRESSED, }; - button::Style { + button::Appearance { background: Some(Background::Color(background_color)), - ..self.active() + ..self.active(style) } } - fn disabled(&self) -> button::Style { - button::Style { + fn disabled(&self, style: &Self::Style) -> button::Appearance { + button::Appearance { background: Some(Background::Color(WINDOW_BACKGROUND)), border_color: DISABLED_COLOR, border_width: BORDER_WIDTH, text_color: DISABLED_COLOR, - ..self.active() + ..self.active(style) } } } -#[derive(Clone, Copy, Debug)] -pub enum Container { +#[derive(Clone, Copy, Debug, Default)] +pub enum ContainerStyle { LightGray, + #[default] Gray, Black, White, ScrollBar, Disabled, + Transparent, } -impl container::StyleSheet for Container { - fn style(&self) -> container::Style { - match self { - Self::LightGray => cont_style(LIGHT_GRAY, BLACK), - Self::Gray => cont_style(GRAY, BLACK), - Self::Black => cont_style(BLACK, WHITE), - Self::White => cont_style(WHITE, BLACK), - Self::ScrollBar => cont_style(WINDOW_BACKGROUND, BLACK), - Self::Disabled => container::Style { +impl container::StyleSheet for ApplicationTheme { + type Style = ContainerStyle; + + fn appearance(&self, style: &Self::Style) -> container::Appearance { + match style { + ContainerStyle::LightGray => cont_style(LIGHT_GRAY, BLACK), + ContainerStyle::Gray => cont_style(GRAY, BLACK), + ContainerStyle::Black => cont_style(BLACK, WHITE), + ContainerStyle::White => cont_style(WHITE, BLACK), + ContainerStyle::ScrollBar => cont_style(WINDOW_BACKGROUND, BLACK), + ContainerStyle::Disabled => container::Appearance { text_color: Some(DISABLED_COLOR), background: None, - border_radius: BORDER_RADIUS, + border_radius: BorderRadius::from(BORDER_RADIUS), border_width: BORDER_WIDTH, border_color: DISABLED_COLOR, }, + ContainerStyle::Transparent => container::Appearance { + text_color: None, + background: None, + border_radius: BorderRadius::from(BORDER_RADIUS), + border_width: 0.0, + border_color: BORDER_COLOR, + }, } } } -fn cont_style(bkgnd: Color, text: Color) -> container::Style { - container::Style { +fn cont_style(bkgnd: Color, text: Color) -> container::Appearance { + container::Appearance { text_color: Some(text), background: Some(Background::Color(bkgnd)), - border_radius: BORDER_RADIUS, + border_radius: BorderRadius::from(BORDER_RADIUS), border_width: 0.0, border_color: BORDER_COLOR, } } + +#[derive(Clone, Copy, Debug, Default)] +pub enum TextStyle { + #[default] + Defualt, + Black, + White, + Green, + Yellow, + Orange, + Red, +} + +impl text::StyleSheet for ApplicationTheme { + type Style = TextStyle; + + fn appearance(&self, style: Self::Style) -> text::Appearance { + text::Appearance { + color: match style { + TextStyle::Defualt => None, + TextStyle::Black => Some(BLACK), + TextStyle::White => Some(WHITE), + TextStyle::Green => Some(GREEN), + TextStyle::Yellow => Some(YELLOW), + TextStyle::Orange => Some(ORANGE), + TextStyle::Red => Some(RED), + }, + } + } +} + +#[derive(Clone, Copy, Debug, Default)] +pub enum SvgStyle { + #[default] + White, + Black, +} + +impl svg::StyleSheet for ApplicationTheme { + type Style = SvgStyle; + + fn appearance(&self, style: &Self::Style) -> svg::Appearance { + let color = match style { + SvgStyle::White => Some(WHITE), + SvgStyle::Black => Some(BLACK), + }; + svg::Appearance { color } + } +} + +#[derive(Clone, Copy, Debug, Default)] +pub struct ApplicationStyle {} + +impl application::StyleSheet for ApplicationTheme { + type Style = ApplicationStyle; + + fn appearance(&self, _style: &Self::Style) -> application::Appearance { + application::Appearance { + background_color: WINDOW_BACKGROUND, + text_color: BLACK, + } + } +} diff --git a/refbox/src/app/view_builders/configuration.rs b/refbox/src/app/view_builders/configuration.rs index 5f349b0a..184788d9 100644 --- a/refbox/src/app/view_builders/configuration.rs +++ b/refbox/src/app/view_builders/configuration.rs @@ -1,14 +1,17 @@ use super::{ message::*, shared_elements::*, - style::{self, MEDIUM_TEXT, MIN_BUTTON_SIZE, PADDING, SMALL_TEXT, SPACING}, + style::{ + ButtonStyle, ContainerStyle, Element, LINE_HEIGHT, MEDIUM_TEXT, MIN_BUTTON_SIZE, PADDING, + SMALL_TEXT, SPACING, + }, }; use crate::config::Mode; use crate::sound_controller::*; use collect_array::CollectArrayResult; use iced::{ alignment::{Horizontal, Vertical}, - pure::{button, column, container, horizontal_space, row, text, vertical_space, Element}, + widget::{button, column, container, horizontal_space, row, text, vertical_space}, Alignment, Length, }; use std::collections::BTreeMap; @@ -166,81 +169,61 @@ fn make_main_config_page<'a>( game_number.to_string() }; - column() - .spacing(SPACING) - .height(Length::Fill) - .push(make_game_time_button( - snapshot, - false, - false, - mode, - clock_running, - )) - .push(make_value_button( - "GAME:", - game_label, - (true, game_large_text), - game_btn_msg, - )) - .push( - make_message_button( - "TOURNAMENT OPTIONS", - Some(Message::ChangeConfigPage(ConfigPage::Tournament)), - ) - .style(style::Button::LightGray), + column![ + make_game_time_button(snapshot, false, false, mode, clock_running,), + make_value_button("GAME:", game_label, (true, game_large_text), game_btn_msg,), + make_message_button( + "TOURNAMENT OPTIONS", + Some(Message::ChangeConfigPage(ConfigPage::Tournament)), ) - .push( - make_message_button( - "POOL AND SOUND OPTIONS", - Some(Message::ChangeConfigPage(ConfigPage::Sound)), - ) - .style(style::Button::LightGray), + .style(ButtonStyle::LightGray), + make_message_button( + "POOL AND SOUND OPTIONS", + Some(Message::ChangeConfigPage(ConfigPage::Sound)), ) - .push( - row() - .spacing(SPACING) - .width(Length::Fill) - .height(Length::Fill) - .push(make_value_button( - "APP\nMODE", - settings.mode.to_string().to_uppercase(), - (false, true), - Some(Message::CycleParameter(CyclingParameter::Mode)), - )) - .push(make_value_button( - "HIDE TIME FOR\nLAST 15 SECONDS", - bool_string(settings.hide_time), - (false, true), - Some(Message::ToggleBoolParameter(BoolGameParameter::HideTime)), - )) - .push(make_value_button( - "TRACK CAP NUMBER\nOF SCORER", - bool_string(settings.collect_scorer_cap_num), - (false, true), - Some(Message::ToggleBoolParameter( - BoolGameParameter::ScorerCapNum, - )), + .style(ButtonStyle::LightGray), + row![ + make_value_button( + "APP\nMODE", + settings.mode.to_string().to_uppercase(), + (false, true), + Some(Message::CycleParameter(CyclingParameter::Mode)), + ), + make_value_button( + "HIDE TIME FOR\nLAST 15 SECONDS", + bool_string(settings.hide_time), + (false, true), + Some(Message::ToggleBoolParameter(BoolGameParameter::HideTime)), + ), + make_value_button( + "TRACK CAP NUMBER\nOF SCORER", + bool_string(settings.collect_scorer_cap_num), + (false, true), + Some(Message::ToggleBoolParameter( + BoolGameParameter::ScorerCapNum, )), - ) - .push( - row() - .spacing(SPACING) + ), + ] + .spacing(SPACING) + .width(Length::Fill) + .height(Length::Fill), + row![ + make_button("CANCEL") + .style(ButtonStyle::Red) .width(Length::Fill) - .push( - make_button("CANCEL") - .style(style::Button::Red) - .width(Length::Fill) - .on_press(Message::ConfigEditComplete { canceled: true }), - ) - .push(horizontal_space(Length::Fill)) - .push( - make_button("DONE") - .style(style::Button::Green) - .width(Length::Fill) - .on_press(Message::ConfigEditComplete { canceled: false }), - ), - ) - .into() + .on_press(Message::ConfigEditComplete { canceled: true }), + horizontal_space(Length::Fill), + make_button("DONE") + .style(ButtonStyle::Green) + .width(Length::Fill) + .on_press(Message::ConfigEditComplete { canceled: false }), + ] + .spacing(SPACING) + .width(Length::Fill), + ] + .spacing(SPACING) + .height(Length::Fill) + .into() } fn make_tournament_config_page<'a>( @@ -315,57 +298,55 @@ fn make_tournament_config_page<'a>( .height(Length::Fill) .into(), vertical_space(Length::Fill).into(), - row() - .spacing(SPACING) - .height(Length::Fill) - .push(horizontal_space(Length::Fill)) - .push(horizontal_space(Length::Fill)) - .push( - make_button("DONE") - .style(style::Button::Green) - .width(Length::Fill) - .on_press(Message::ChangeConfigPage(ConfigPage::Main)), - ) - .into(), + row![ + horizontal_space(Length::Fill), + horizontal_space(Length::Fill), + make_button("DONE") + .style(ButtonStyle::Green) + .width(Length::Fill) + .on_press(Message::ChangeConfigPage(ConfigPage::Main)), + ] + .spacing(SPACING) + .height(Length::Fill) + .into(), ] } else { [ - row() - .spacing(SPACING) - .height(Length::Fill) - .push(make_value_button( + row![ + make_value_button( "HALF LENGTH:", time_string(config.half_play_duration), (false, true), Some(Message::EditParameter(LengthParameter::Half)), - )) - .push(make_value_button( + ), + make_value_button( "OVERTIME\nALLOWED:", bool_string(config.overtime_allowed), (false, true), Some(Message::ToggleBoolParameter( BoolGameParameter::OvertimeAllowed, )), - )) - .push(make_value_button( + ), + make_value_button( "SUDDEN DEATH\nALLOWED:", bool_string(config.sudden_death_allowed), (false, true), Some(Message::ToggleBoolParameter( BoolGameParameter::SuddenDeathAllowed, )), - )) - .into(), - row() - .spacing(SPACING) - .height(Length::Fill) - .push(make_value_button( + ) + ] + .spacing(SPACING) + .height(Length::Fill) + .into(), + row![ + make_value_button( "HALF TIME\nLENGTH:", time_string(config.half_time_duration), (false, true), Some(Message::EditParameter(LengthParameter::HalfTime)), - )) - .push(make_value_button( + ), + make_value_button( "PRE OT\nBREAK LENGTH:", time_string(config.pre_overtime_break), (false, true), @@ -374,8 +355,8 @@ fn make_tournament_config_page<'a>( } else { None }, - )) - .push(make_value_button( + ), + make_value_button( "PRE SD\nBREAK LENGTH:", time_string(config.pre_sudden_death_duration), (false, true), @@ -384,18 +365,19 @@ fn make_tournament_config_page<'a>( } else { None }, - )) - .into(), - row() - .spacing(SPACING) - .height(Length::Fill) - .push(make_value_button( + ) + ] + .spacing(SPACING) + .height(Length::Fill) + .into(), + row![ + make_value_button( "NOMINAL BRK\nBTWN GAMES:", time_string(config.nominal_break), (false, true), Some(Message::EditParameter(LengthParameter::NominalBetweenGame)), - )) - .push(make_value_button( + ), + make_value_button( "OT HALF\nLENGTH:", time_string(config.ot_half_play_duration), (false, true), @@ -404,26 +386,27 @@ fn make_tournament_config_page<'a>( } else { None }, - )) - .push(make_value_button( + ), + make_value_button( "NUM TEAM T/Os\nALLWD PER HALF:", config.team_timeouts_per_half.to_string(), (false, true), Some(Message::KeypadPage(KeypadPage::TeamTimeouts( config.team_timeout_duration, ))), - )) - .into(), - row() - .spacing(SPACING) - .height(Length::Fill) - .push(make_value_button( + ) + ] + .spacing(SPACING) + .height(Length::Fill) + .into(), + row![ + make_value_button( "MINIMUM BRK\nBTWN GAMES:", time_string(config.minimum_break), (false, true), Some(Message::EditParameter(LengthParameter::MinimumBetweenGame)), - )) - .push(make_value_button( + ), + make_value_button( "OT HALF\nTIME LENGTH:", time_string(config.ot_half_time_duration), (false, true), @@ -432,38 +415,32 @@ fn make_tournament_config_page<'a>( } else { None }, - )) - .push( - make_button("DONE") - .style(style::Button::Green) - .width(Length::Fill) - .on_press(Message::ChangeConfigPage(ConfigPage::Main)), - ) - .into(), + ), + make_button("DONE") + .style(ButtonStyle::Green) + .width(Length::Fill) + .on_press(Message::ChangeConfigPage(ConfigPage::Main)), + ] + .spacing(SPACING) + .height(Length::Fill) + .into(), ] }; - let mut col = column() - .spacing(SPACING) - .height(Length::Fill) - .push(make_game_time_button( - snapshot, - false, - false, - mode, - clock_running, - )) - .push( - make_value_button( - "USING UWHPORTAL:", - bool_string(using_uwhscores), - (true, true), - Some(Message::ToggleBoolParameter( - BoolGameParameter::UsingUwhScores, - )), - ) - .height(Length::Fill), - ); + let mut col = column![ + make_game_time_button(snapshot, false, true, mode, clock_running), + make_value_button( + "USING UWHPORTAL:", + bool_string(using_uwhscores), + (true, true), + Some(Message::ToggleBoolParameter( + BoolGameParameter::UsingUwhScores, + )), + ) + .height(Length::Fill), + ] + .spacing(SPACING) + .height(Length::Fill); for row in rows { col = col.push(row); @@ -489,16 +466,17 @@ fn make_sound_config_page<'a>( .center_y() .width(Length::FillPortion(2)) .height(Length::Fill) - .style(style::Container::White); + .style(ContainerStyle::White); let black = container("BLACK") .center_x() .center_y() .width(Length::FillPortion(2)) .height(Length::Fill) - .style(style::Container::Black); + .style(ContainerStyle::Black); let center = text("STARTING SIDES") .size(MEDIUM_TEXT) + .line_height(LINE_HEIGHT) .vertical_alignment(Vertical::Center) .horizontal_alignment(Horizontal::Center) .width(Length::FillPortion(3)); @@ -507,153 +485,140 @@ fn make_sound_config_page<'a>( // of view we need to reverse the direction let sides = if *white_on_right { // White to Ref's left - row().padding(PADDING).push(white).push(center).push(black) + row![white, center, black].padding(PADDING) } else { // White to Ref's right - row().padding(PADDING).push(black).push(center).push(white) + row![black, center, white].padding(PADDING) }; let sides_btn = button(sides.width(Length::Fill).height(Length::Fill)) .height(Length::Fill) .width(Length::Fill) .padding(0) - .style(style::Button::LightGray) + .style(ButtonStyle::LightGray) .on_press(Message::ToggleBoolParameter( BoolGameParameter::WhiteOnRight, )); - column() + column![ + make_game_time_button(snapshot, false, true, mode, clock_running), + sides_btn, + row![ + make_value_button( + "SOUND\nENABLED:", + bool_string(sound.sound_enabled), + (false, true), + Some(Message::ToggleBoolParameter( + BoolGameParameter::SoundEnabled, + )), + ), + make_value_button( + "WHISTLE\nVOLUME:", + sound.whistle_vol.to_string().to_uppercase(), + (false, true), + if sound.sound_enabled && sound.whistle_enabled { + Some(Message::CycleParameter(CyclingParameter::AlertVolume)) + } else { + None + }, + ), + make_message_button( + "MANAGE REMOTES", + Some(Message::ChangeConfigPage(ConfigPage::Remotes(0, false))), + ) + .style(ButtonStyle::LightGray) + .height(Length::Fill), + ] .spacing(SPACING) - .height(Length::Fill) - .push(make_game_time_button( - snapshot, - false, - false, - mode, - clock_running, - )) - .push(sides_btn) - .push( - row() - .spacing(SPACING) - .height(Length::Fill) - .push(make_value_button( - "SOUND\nENABLED:", - bool_string(sound.sound_enabled), - (false, true), + .height(Length::Fill), + row![ + make_value_button( + "WHISTLE\nENABLED:", + bool_string(sound.whistle_enabled), + (false, true), + if sound.sound_enabled { Some(Message::ToggleBoolParameter( - BoolGameParameter::SoundEnabled, - )), - )) - .push(make_value_button( - "WHISTLE\nVOLUME:", - sound.whistle_vol.to_string().to_uppercase(), - (false, true), - if sound.sound_enabled && sound.whistle_enabled { - Some(Message::CycleParameter(CyclingParameter::AlertVolume)) - } else { - None - }, - )) - .push( - make_message_button( - "MANAGE REMOTES", - Some(Message::ChangeConfigPage(ConfigPage::Remotes(0, false))), - ) - .style(style::Button::LightGray) - .height(Length::Fill), - ), - ) - .push( - row() - .spacing(SPACING) - .height(Length::Fill) - .push(make_value_button( - "WHISTLE\nENABLED:", - bool_string(sound.whistle_enabled), - (false, true), - if sound.sound_enabled { - Some(Message::ToggleBoolParameter( - BoolGameParameter::RefAlertEnabled, - )) - } else { - None - }, - )) - .push(make_value_button( - "ABOVE WATER\nVOLUME:", - sound.above_water_vol.to_string().to_uppercase(), - (false, true), - if sound.sound_enabled { - Some(Message::CycleParameter(CyclingParameter::AboveWaterVol)) - } else { - None - }, - )) - .push(make_value_button( - "AUTO SOUND\nSTART PLAY:", - bool_string(sound.auto_sound_start_play), - (false, true), - if sound.sound_enabled { - Some(Message::ToggleBoolParameter( - BoolGameParameter::AutoSoundStartPlay, - )) - } else { - None - }, - )), - ) - .push( - row() - .spacing(SPACING) - .height(Length::Fill) - .push(make_value_button( - "BUZZER\nSOUND:", - sound.buzzer_sound.to_string().to_uppercase(), - (false, true), - if sound.sound_enabled { - Some(Message::CycleParameter(CyclingParameter::BuzzerSound)) - } else { - None - }, - )) - .push(make_value_button( - "UNDER WATER\nVOLUME:", - sound.under_water_vol.to_string().to_uppercase(), - (false, true), - if sound.sound_enabled { - Some(Message::CycleParameter(CyclingParameter::UnderWaterVol)) - } else { - None - }, - )) - .push(make_value_button( - "AUTO SOUND\nSTOP PLAY:", - bool_string(sound.auto_sound_stop_play), - (false, true), - if sound.sound_enabled { - Some(Message::ToggleBoolParameter( - BoolGameParameter::AutoSoundStopPlay, - )) - } else { - None - }, - )), - ) - .push( - row() - .spacing(SPACING) - .height(Length::Fill) - .push(horizontal_space(Length::Fill)) - .push(horizontal_space(Length::Fill)) - .push( - make_button("DONE") - .style(style::Button::Green) - .width(Length::Fill) - .on_press(Message::ChangeConfigPage(ConfigPage::Main)), - ), - ) - .into() + BoolGameParameter::RefAlertEnabled, + )) + } else { + None + }, + ), + make_value_button( + "ABOVE WATER\nVOLUME:", + sound.above_water_vol.to_string().to_uppercase(), + (false, true), + if sound.sound_enabled { + Some(Message::CycleParameter(CyclingParameter::AboveWaterVol)) + } else { + None + }, + ), + make_value_button( + "AUTO SOUND\nSTART PLAY:", + bool_string(sound.auto_sound_start_play), + (false, true), + if sound.sound_enabled { + Some(Message::ToggleBoolParameter( + BoolGameParameter::AutoSoundStartPlay, + )) + } else { + None + }, + ) + ] + .spacing(SPACING) + .height(Length::Fill), + row![ + make_value_button( + "BUZZER\nSOUND:", + sound.buzzer_sound.to_string().to_uppercase(), + (false, true), + if sound.sound_enabled { + Some(Message::CycleParameter(CyclingParameter::BuzzerSound)) + } else { + None + }, + ), + make_value_button( + "UNDER WATER\nVOLUME:", + sound.under_water_vol.to_string().to_uppercase(), + (false, true), + if sound.sound_enabled { + Some(Message::CycleParameter(CyclingParameter::UnderWaterVol)) + } else { + None + }, + ), + make_value_button( + "AUTO SOUND\nSTOP PLAY:", + bool_string(sound.auto_sound_stop_play), + (false, true), + if sound.sound_enabled { + Some(Message::ToggleBoolParameter( + BoolGameParameter::AutoSoundStopPlay, + )) + } else { + None + }, + ) + ] + .spacing(SPACING) + .height(Length::Fill), + row![ + horizontal_space(Length::Fill), + horizontal_space(Length::Fill), + make_button("DONE") + .style(ButtonStyle::Green) + .width(Length::Fill) + .on_press(Message::ChangeConfigPage(ConfigPage::Main)), + ] + .spacing(SPACING) + .height(Length::Fill), + ] + .spacing(SPACING) + .height(Length::Fill) + .into() } fn make_remote_config_page<'a>( @@ -667,6 +632,7 @@ fn make_remote_config_page<'a>( const REMOTES_LIST_LEN: usize = 4; let title = text("REMOTES") + .line_height(LINE_HEIGHT) .height(Length::Fill) .width(Length::Fill) .horizontal_alignment(Horizontal::Center) @@ -691,44 +657,40 @@ fn make_remote_config_page<'a>( let sound_text = format!("SOUND: {}", sound_text); container( - row() - .padding(PADDING) - .spacing(SPACING) - .push( - text(format!("ID: {:05X}", rem_info.id)) - .size(MEDIUM_TEXT) - .vertical_alignment(Vertical::Center) - .horizontal_alignment(Horizontal::Center) - .height(Length::Fill) - .width(Length::Fill), - ) - .push( - make_message_button( - sound_text, - Some(Message::CycleParameter( - CyclingParameter::RemoteBuzzerSound(idx), - )), - ) - .width(Length::Units(275)) - .height(Length::Units(MIN_BUTTON_SIZE - (2 * PADDING))) - .style(style::Button::Yellow), + row![ + text(format!("ID: {:05X}", rem_info.id)) + .size(MEDIUM_TEXT) + .line_height(LINE_HEIGHT) + .vertical_alignment(Vertical::Center) + .horizontal_alignment(Horizontal::Center) + .height(Length::Fill) + .width(Length::Fill), + make_message_button( + sound_text, + Some(Message::CycleParameter( + CyclingParameter::RemoteBuzzerSound(idx), + )), ) - .push( - make_message_button("DELETE", Some(Message::DeleteRemote(idx))) - .width(Length::Units(130)) - .height(Length::Units(MIN_BUTTON_SIZE - (2 * PADDING))) - .style(style::Button::Red), - ), + .width(Length::Fixed(275.0)) + .height(Length::Fixed(MIN_BUTTON_SIZE - (2.0 * PADDING))) + .style(ButtonStyle::Yellow), + make_message_button("DELETE", Some(Message::DeleteRemote(idx))) + .width(Length::Fixed(130.0)) + .height(Length::Fixed(MIN_BUTTON_SIZE - (2.0 * PADDING))) + .style(ButtonStyle::Red), + ] + .padding(PADDING) + .spacing(SPACING), ) .width(Length::Fill) - .height(Length::Units(MIN_BUTTON_SIZE)) - .style(style::Container::Gray) + .height(Length::Fixed(MIN_BUTTON_SIZE)) + .style(ContainerStyle::Gray) .into() } else { container(horizontal_space(Length::Fill)) .width(Length::Fill) - .height(Length::Units(MIN_BUTTON_SIZE)) - .style(style::Container::Disabled) + .height(Length::Fixed(MIN_BUTTON_SIZE)) + .style(ContainerStyle::Disabled) .into() } }) @@ -739,52 +701,38 @@ fn make_remote_config_page<'a>( } else { make_message_button("ADD", Some(Message::RequestRemoteId)) } - .style(style::Button::Orange); - - column() + .style(ButtonStyle::Orange); + + column![ + make_game_time_button(snapshot, false, true, mode, clock_running), + row![ + make_scroll_list( + buttons.unwrap(), + settings.sound.remotes.len(), + index, + title, + ScrollOption::GameParameter, + ContainerStyle::LightGray, + ) + .height(Length::Fill) + .width(Length::FillPortion(5)), + column![ + vertical_space(Length::Fill), + add_btn, + make_message_button("DONE", Some(Message::ChangeConfigPage(ConfigPage::Sound)),) + .style(ButtonStyle::Green), + ] + .spacing(SPACING) + .height(Length::Fill) + .width(Length::Fill), + ] .spacing(SPACING) .height(Length::Fill) - .push(make_game_time_button( - snapshot, - false, - false, - mode, - clock_running, - )) - .push( - row() - .spacing(SPACING) - .height(Length::Fill) - .width(Length::Fill) - .push( - make_scroll_list( - buttons.unwrap(), - settings.sound.remotes.len(), - index, - title, - ScrollOption::GameParameter, - style::Container::LightGray, - ) - .height(Length::Fill) - .width(Length::FillPortion(5)), - ) - .push( - column() - .spacing(SPACING) - .height(Length::Fill) - .width(Length::Fill) - .push(vertical_space(Length::Fill)) - .push(add_btn) - .push( - make_message_button( - "DONE", - Some(Message::ChangeConfigPage(ConfigPage::Sound)), - ) - .style(style::Button::Green), - ), - ), - ) - .into() + .width(Length::Fill), + ] + .spacing(SPACING) + .height(Length::Fill) + .into() } pub(in super::super) fn build_game_parameter_editor<'a>( @@ -827,43 +775,32 @@ pub(in super::super) fn build_game_parameter_editor<'a>( ), }; - column() - .spacing(SPACING) - .align_items(Alignment::Center) - .width(Length::Fill) - .height(Length::Fill) - .push(make_game_time_button( - snapshot, - false, - false, - mode, - clock_running, - )) - .push(vertical_space(Length::Fill)) - .push(make_time_editor(title, length, false)) - .push(vertical_space(Length::Fill)) - .push( - text(String::from("Help: ") + hint) - .size(SMALL_TEXT) - .horizontal_alignment(Horizontal::Center), - ) - .push(vertical_space(Length::Fill)) - .push( - row() - .spacing(SPACING) - .push( - make_button("CANCEL") - .style(style::Button::Red) - .width(Length::Fill) - .on_press(Message::ParameterEditComplete { canceled: true }), - ) - .push(horizontal_space(Length::Fill)) - .push( - make_button("DONE") - .style(style::Button::Green) - .width(Length::Fill) - .on_press(Message::ParameterEditComplete { canceled: false }), - ), - ) - .into() + column![ + make_game_time_button(snapshot, false, true, mode, clock_running), + vertical_space(Length::Fill), + make_time_editor(title, length, false), + vertical_space(Length::Fill), + text(String::from("Help: ") + hint) + .size(SMALL_TEXT) + .line_height(LINE_HEIGHT) + .horizontal_alignment(Horizontal::Center), + vertical_space(Length::Fill), + row![ + make_button("CANCEL") + .style(ButtonStyle::Red) + .width(Length::Fill) + .on_press(Message::ParameterEditComplete { canceled: true }), + horizontal_space(Length::Fill), + make_button("DONE") + .style(ButtonStyle::Green) + .width(Length::Fill) + .on_press(Message::ParameterEditComplete { canceled: false }), + ] + .spacing(SPACING), + ] + .spacing(SPACING) + .align_items(Alignment::Center) + .width(Length::Fill) + .height(Length::Fill) + .into() } diff --git a/refbox/src/app/view_builders/confirmation.rs b/refbox/src/app/view_builders/confirmation.rs index c059218f..322faf04 100644 --- a/refbox/src/app/view_builders/confirmation.rs +++ b/refbox/src/app/view_builders/confirmation.rs @@ -1,11 +1,11 @@ use super::{ - style::{self, PADDING, SPACING}, + style::{ButtonStyle, ContainerStyle, Element, LINE_HEIGHT, PADDING, SPACING}, *, }; use iced::{ alignment::Horizontal, - pure::{column, container, horizontal_space, row, text, vertical_space, Element}, + widget::{column, container, horizontal_space, row, text, vertical_space}, Alignment, Length, }; @@ -28,58 +28,54 @@ pub(in super::super) fn build_confirmation_page<'a>( ConfirmationKind::GameConfigChanged(_) => vec![ ( "GO BACK TO EDITOR", - style::Button::Green, + ButtonStyle::Green, ConfirmationOption::GoBack, ), ( "DISCARD CHANGES", - style::Button::Yellow, + ButtonStyle::Yellow, ConfirmationOption::DiscardChanges, ), ( "END CURRENT GAME AND APPLY CHANGES", - style::Button::Red, + ButtonStyle::Red, ConfirmationOption::EndGameAndApply, ), ], ConfirmationKind::GameNumberChanged => vec![ ( "GO BACK TO EDITOR", - style::Button::Green, + ButtonStyle::Green, ConfirmationOption::GoBack, ), ( "DISCARD CHANGES", - style::Button::Yellow, + ButtonStyle::Yellow, ConfirmationOption::DiscardChanges, ), ( "KEEP CURRENT GAME AND APPLY CHANGE", - style::Button::Orange, + ButtonStyle::Orange, ConfirmationOption::KeepGameAndApply, ), ( "END CURRENT GAME AND APPLY CHANGE", - style::Button::Red, + ButtonStyle::Red, ConfirmationOption::EndGameAndApply, ), ], ConfirmationKind::Error(_) => { - vec![( - "OK", - style::Button::Green, - ConfirmationOption::DiscardChanges, - )] + vec![("OK", ButtonStyle::Green, ConfirmationOption::DiscardChanges)] } ConfirmationKind::UwhScoresIncomplete => vec![ ( "GO BACK TO EDITOR", - style::Button::Green, + ButtonStyle::Green, ConfirmationOption::GoBack, ), ( "DISCARD CHANGES", - style::Button::Yellow, + ButtonStyle::Yellow, ConfirmationOption::DiscardChanges, ), ], @@ -91,44 +87,39 @@ pub(in super::super) fn build_confirmation_page<'a>( .on_press(Message::ConfirmationSelected(option)) }); - let mut button_col = column().spacing(SPACING).width(Length::Fill); + let mut button_col = column![].spacing(SPACING).width(Length::Fill); for button in buttons { button_col = button_col.push(button); } - column() - .width(Length::Fill) - .height(Length::Fill) - .align_items(Alignment::Center) - .push(make_game_time_button( - snapshot, - false, - false, - mode, - clock_running, - )) - .push(vertical_space(Length::Fill)) - .push( - row() - .push(horizontal_space(Length::Fill)) - .push( - container( - column() - .spacing(SPACING) - .width(Length::Fill) - .align_items(Alignment::Center) - .push(text(header_text).horizontal_alignment(Horizontal::Center)) - .push(button_col), - ) - .width(Length::FillPortion(3)) - .style(style::Container::LightGray) - .padding(PADDING), - ) - .push(horizontal_space(Length::Fill)), - ) - .push(vertical_space(Length::Fill)) - .into() + column![ + make_game_time_button(snapshot, false, true, mode, clock_running), + vertical_space(Length::Fill), + row![ + horizontal_space(Length::Fill), + container( + column![ + text(header_text) + .line_height(LINE_HEIGHT) + .horizontal_alignment(Horizontal::Center), + button_col + ] + .spacing(SPACING) + .width(Length::Fill) + .align_items(Alignment::Center), + ) + .width(Length::FillPortion(3)) + .style(ContainerStyle::LightGray) + .padding(PADDING), + horizontal_space(Length::Fill) + ], + vertical_space(Length::Fill) + ] + .width(Length::Fill) + .height(Length::Fill) + .align_items(Alignment::Center) + .into() } pub(in super::super) fn build_score_confirmation_page<'a>( @@ -141,52 +132,40 @@ pub(in super::super) fn build_score_confirmation_page<'a>( "Is this score correct?\nConfirm with cheif referee.\n\nBlack: {} White: {}\n", scores.black, scores.white )) + .line_height(LINE_HEIGHT) .horizontal_alignment(Horizontal::Center); - let options = row() - .spacing(SPACING) - .width(Length::Fill) - .push( - make_button("YES") - .style(style::Button::Green) - .on_press(Message::ScoreConfirmation { correct: true }), - ) - .push( - make_button("NO") - .style(style::Button::Red) - .on_press(Message::ScoreConfirmation { correct: false }), - ); + let options = row![ + make_button("YES") + .style(ButtonStyle::Green) + .on_press(Message::ScoreConfirmation { correct: true }), + make_button("NO") + .style(ButtonStyle::Red) + .on_press(Message::ScoreConfirmation { correct: false }), + ] + .spacing(SPACING) + .width(Length::Fill); - column() - .width(Length::Fill) - .height(Length::Fill) - .align_items(Alignment::Center) - .push(make_game_time_button( - snapshot, - false, - false, - mode, - clock_running, - )) - .push(vertical_space(Length::Fill)) - .push( - row() - .push(horizontal_space(Length::Fill)) - .push( - container( - column() - .spacing(SPACING) - .width(Length::Fill) - .align_items(Alignment::Center) - .push(header) - .push(options), - ) - .width(Length::FillPortion(3)) - .style(style::Container::LightGray) - .padding(PADDING), - ) - .push(horizontal_space(Length::Fill)), - ) - .push(vertical_space(Length::Fill)) - .into() + column![ + make_game_time_button(snapshot, false, true, mode, clock_running), + vertical_space(Length::Fill), + row![ + horizontal_space(Length::Fill), + container( + column![header, options] + .spacing(SPACING) + .width(Length::Fill) + .align_items(Alignment::Center), + ) + .width(Length::FillPortion(3)) + .style(ContainerStyle::LightGray) + .padding(PADDING), + horizontal_space(Length::Fill) + ], + vertical_space(Length::Fill) + ] + .width(Length::Fill) + .height(Length::Fill) + .align_items(Alignment::Center) + .into() } diff --git a/refbox/src/app/view_builders/game_info.rs b/refbox/src/app/view_builders/game_info.rs index 636c9b1d..58258bb0 100644 --- a/refbox/src/app/view_builders/game_info.rs +++ b/refbox/src/app/view_builders/game_info.rs @@ -1,10 +1,10 @@ use super::{ - style::{self, SMALL_TEXT, SPACING}, + style::{ButtonStyle, Element, SMALL_TEXT, SPACING}, *, }; use iced::{ alignment::{Horizontal, Vertical}, - pure::{column, horizontal_space, row, text, Element}, + widget::{column, horizontal_space, row, text}, Length, }; @@ -21,55 +21,40 @@ pub(in super::super) fn build_game_info_page<'a>( clock_running: bool, ) -> Element<'a, Message> { let (left_details, right_details) = details_strings(snapshot, config, using_uwhscores, games); - column() + column![ + make_game_time_button(snapshot, false, false, mode, clock_running,), + row![ + text(left_details) + .size(SMALL_TEXT) + .vertical_alignment(Vertical::Top) + .horizontal_alignment(Horizontal::Left) + .width(Length::Fill), + text(right_details) + .size(SMALL_TEXT) + .vertical_alignment(Vertical::Top) + .horizontal_alignment(Horizontal::Left) + .width(Length::Fill), + ] .spacing(SPACING) - .height(Length::Fill) - .push(make_game_time_button( - snapshot, - false, - false, - mode, - clock_running, - )) - .push( - row() - .spacing(SPACING) + .width(Length::Fill) + .height(Length::Fill), + row![ + make_button("BACK") + .style(ButtonStyle::Red) .width(Length::Fill) - .height(Length::Fill) - .push( - text(left_details) - .size(SMALL_TEXT) - .vertical_alignment(Vertical::Top) - .horizontal_alignment(Horizontal::Left) - .width(Length::Fill), - ) - .push( - text(right_details) - .size(SMALL_TEXT) - .vertical_alignment(Vertical::Top) - .horizontal_alignment(Horizontal::Left) - .width(Length::Fill), - ), - ) - .push( - row() - .spacing(SPACING) + .on_press(Message::ConfigEditComplete { canceled: true }), + horizontal_space(Length::Fill), + make_button("SETTINGS") + .style(ButtonStyle::Gray) .width(Length::Fill) - .push( - make_button("BACK") - .style(style::Button::Red) - .width(Length::Fill) - .on_press(Message::ConfigEditComplete { canceled: true }), - ) - .push(horizontal_space(Length::Fill)) - .push( - make_button("SETTINGS") - .style(style::Button::Gray) - .width(Length::Fill) - .on_press(Message::EditGameConfig), - ), - ) - .into() + .on_press(Message::EditGameConfig), + ] + .spacing(SPACING) + .width(Length::Fill), + ] + .spacing(SPACING) + .height(Length::Fill) + .into() } fn details_strings( diff --git a/refbox/src/app/view_builders/keypad_pages/game_number_edit.rs b/refbox/src/app/view_builders/keypad_pages/game_number_edit.rs index 0e67fd55..5d13bd5a 100644 --- a/refbox/src/app/view_builders/keypad_pages/game_number_edit.rs +++ b/refbox/src/app/view_builders/keypad_pages/game_number_edit.rs @@ -1,32 +1,24 @@ -use super::{ - style::{self, SPACING}, - *, -}; - +use super::{style::Element, *}; use iced::{ - pure::{column, row, vertical_space, Element}, + widget::{column, row, vertical_space}, Length, }; pub(super) fn make_game_number_edit_page<'a>() -> Element<'a, Message> { - column() - .spacing(SPACING) - .push(vertical_space(Length::Fill)) - .push( - row() - .spacing(SPACING) - .push( - make_button("CANCEL") - .style(style::Button::Red) - .width(Length::Fill) - .on_press(Message::ParameterEditComplete { canceled: true }), - ) - .push( - make_button("DONE") - .style(style::Button::Green) - .width(Length::Fill) - .on_press(Message::ParameterEditComplete { canceled: false }), - ), - ) - .into() + column![ + vertical_space(Length::Fill), + row![ + make_button("CANCEL") + .style(ButtonStyle::Red) + .width(Length::Fill) + .on_press(Message::ParameterEditComplete { canceled: true }), + make_button("DONE") + .style(ButtonStyle::Green) + .width(Length::Fill) + .on_press(Message::ParameterEditComplete { canceled: false }), + ] + .spacing(SPACING), + ] + .spacing(SPACING) + .into() } diff --git a/refbox/src/app/view_builders/keypad_pages/mod.rs b/refbox/src/app/view_builders/keypad_pages/mod.rs index 5e8826e1..3500e65b 100644 --- a/refbox/src/app/view_builders/keypad_pages/mod.rs +++ b/refbox/src/app/view_builders/keypad_pages/mod.rs @@ -1,13 +1,20 @@ use crate::config::Mode; use super::{ - style::{self, LARGE_TEXT, MEDIUM_TEXT, MIN_BUTTON_SIZE, PADDING, SPACING}, + style::{ + ButtonStyle, ContainerStyle, Element, SvgStyle, LARGE_TEXT, LINE_HEIGHT, MEDIUM_TEXT, + MIN_BUTTON_SIZE, PADDING, SPACING, + }, *, }; use iced::{ alignment::{Horizontal, Vertical}, - pure::{column, container, row, text, Element}, + widget::{ + button, column, container, row, + svg::{self, Svg}, + text, + }, Alignment, Length, }; @@ -32,148 +39,104 @@ pub(in super::super) fn build_keypad_page<'a>( mode: Mode, clock_running: bool, ) -> Element<'a, Message> { - column() - .spacing(SPACING) - .height(Length::Fill) - .push(make_game_time_button( - snapshot, - false, - false, - mode, - clock_running, - )) - .push( - row() - .spacing(SPACING) - .height(Length::Fill) - .push( - container( - column() - .spacing(SPACING) - .push( - row() - .align_items(Alignment::Center) - .height(Length::Fill) - .width(Length::Units(3 * MIN_BUTTON_SIZE + 2 * SPACING)) - .push( - text(page.text()) - .horizontal_alignment(Horizontal::Left) - .vertical_alignment(Vertical::Center), - ) - .push( - text(player_num.to_string()) - .size(LARGE_TEXT) - .width(Length::Fill) - .horizontal_alignment(Horizontal::Right) - .vertical_alignment(Vertical::Center), - ), - ) - .push( - row() - .spacing(SPACING) - .push( - make_small_button("7", MEDIUM_TEXT) - .style(style::Button::Blue) - .on_press(Message::KeypadButtonPress( - KeypadButton::Seven, - )), - ) - .push( - make_small_button("8", MEDIUM_TEXT) - .style(style::Button::Blue) - .on_press(Message::KeypadButtonPress( - KeypadButton::Eight, - )), - ) - .push( - make_small_button("9", MEDIUM_TEXT) - .style(style::Button::Blue) - .on_press(Message::KeypadButtonPress( - KeypadButton::Nine, - )), - ), - ) - .push( - row() - .spacing(SPACING) - .push( - make_small_button("4", MEDIUM_TEXT) - .style(style::Button::Blue) - .on_press(Message::KeypadButtonPress( - KeypadButton::Four, - )), - ) - .push( - make_small_button("5", MEDIUM_TEXT) - .style(style::Button::Blue) - .on_press(Message::KeypadButtonPress( - KeypadButton::Five, - )), - ) - .push( - make_small_button("6", MEDIUM_TEXT) - .style(style::Button::Blue) - .on_press(Message::KeypadButtonPress( - KeypadButton::Six, - )), - ), + column![ + make_game_time_button(snapshot, false, true, mode, clock_running), + row![ + container( + column![ + row![ + text(page.text()) + .line_height(LINE_HEIGHT) + .horizontal_alignment(Horizontal::Left) + .vertical_alignment(Vertical::Center), + text(player_num.to_string()) + .size(LARGE_TEXT) + .line_height(LINE_HEIGHT) + .width(Length::Fill) + .horizontal_alignment(Horizontal::Right) + .vertical_alignment(Vertical::Center), + ] + .align_items(Alignment::Center) + .height(Length::Fill) + .width(Length::Fixed(3.0 * MIN_BUTTON_SIZE + 2.0 * SPACING)), + row![ + make_small_button("7", MEDIUM_TEXT) + .style(ButtonStyle::Blue) + .on_press(Message::KeypadButtonPress(KeypadButton::Seven,)), + make_small_button("8", MEDIUM_TEXT) + .style(ButtonStyle::Blue) + .on_press(Message::KeypadButtonPress(KeypadButton::Eight,)), + make_small_button("9", MEDIUM_TEXT) + .style(ButtonStyle::Blue) + .on_press(Message::KeypadButtonPress(KeypadButton::Nine,)), + ] + .spacing(SPACING), + row![ + make_small_button("4", MEDIUM_TEXT) + .style(ButtonStyle::Blue) + .on_press(Message::KeypadButtonPress(KeypadButton::Four,)), + make_small_button("5", MEDIUM_TEXT) + .style(ButtonStyle::Blue) + .on_press(Message::KeypadButtonPress(KeypadButton::Five,)), + make_small_button("6", MEDIUM_TEXT) + .style(ButtonStyle::Blue) + .on_press(Message::KeypadButtonPress(KeypadButton::Six,)), + ] + .spacing(SPACING), + row![ + make_small_button("1", MEDIUM_TEXT) + .style(ButtonStyle::Blue) + .on_press(Message::KeypadButtonPress(KeypadButton::One,)), + make_small_button("2", MEDIUM_TEXT) + .style(ButtonStyle::Blue) + .on_press(Message::KeypadButtonPress(KeypadButton::Two,)), + make_small_button("3", MEDIUM_TEXT) + .style(ButtonStyle::Blue) + .on_press(Message::KeypadButtonPress(KeypadButton::Three,)), + ] + .spacing(SPACING), + row![ + make_small_button("0", MEDIUM_TEXT) + .style(ButtonStyle::Blue) + .on_press(Message::KeypadButtonPress(KeypadButton::Zero,)), + button( + container( + Svg::new(svg::Handle::from_memory( + &include_bytes!("../../../../resources/backspace.svg")[..], + )) + .style(SvgStyle::White) + .height(Length::Fixed(MEDIUM_TEXT * 1.2)), ) - .push( - row() - .spacing(SPACING) - .push( - make_small_button("1", MEDIUM_TEXT) - .style(style::Button::Blue) - .on_press(Message::KeypadButtonPress( - KeypadButton::One, - )), - ) - .push( - make_small_button("2", MEDIUM_TEXT) - .style(style::Button::Blue) - .on_press(Message::KeypadButtonPress( - KeypadButton::Two, - )), - ) - .push( - make_small_button("3", MEDIUM_TEXT) - .style(style::Button::Blue) - .on_press(Message::KeypadButtonPress( - KeypadButton::Three, - )), - ), - ) - .push( - row() - .spacing(SPACING) - .push( - make_small_button("0", MEDIUM_TEXT) - .style(style::Button::Blue) - .on_press(Message::KeypadButtonPress( - KeypadButton::Zero, - )), - ) - .push( - make_small_button("\u{232b}", LARGE_TEXT) - .width(Length::Units(2 * MIN_BUTTON_SIZE + SPACING)) - .style(style::Button::Blue) - .on_press(Message::KeypadButtonPress( - KeypadButton::Delete, - )), - ), - ), - ) - .style(style::Container::LightGray) - .padding(PADDING), - ) - .push(match page { - KeypadPage::AddScore(color) => make_score_add_page(color), - KeypadPage::Penalty(origin, color, kind) => { - make_penalty_edit_page(origin, color, kind, mode) - } - KeypadPage::GameNumber => make_game_number_edit_page(), - KeypadPage::TeamTimeouts(dur) => make_team_timeout_edit_page(dur), - }), - ) - .into() + .width(Length::Fill) + .height(Length::Fill) + .style(ContainerStyle::Transparent) + .center_x() + .center_y(), + ) + .width(Length::Fixed(2.0 * MIN_BUTTON_SIZE + SPACING)) + .height(Length::Fixed(MIN_BUTTON_SIZE)) + .style(ButtonStyle::Blue) + .on_press(Message::KeypadButtonPress(KeypadButton::Delete,)), + ] + .spacing(SPACING), + ] + .spacing(SPACING), + ) + .style(ContainerStyle::LightGray) + .padding(PADDING), + match page { + KeypadPage::AddScore(color) => make_score_add_page(color), + KeypadPage::Penalty(origin, color, kind) => { + make_penalty_edit_page(origin, color, kind, mode) + } + KeypadPage::GameNumber => make_game_number_edit_page(), + KeypadPage::TeamTimeouts(dur) => make_team_timeout_edit_page(dur), + } + ] + .spacing(SPACING) + .height(Length::Fill), + ] + .spacing(SPACING) + .height(Length::Fill) + .into() } diff --git a/refbox/src/app/view_builders/keypad_pages/penalty_edit.rs b/refbox/src/app/view_builders/keypad_pages/penalty_edit.rs index 87aa8a88..7ed1fe4a 100644 --- a/refbox/src/app/view_builders/keypad_pages/penalty_edit.rs +++ b/refbox/src/app/view_builders/keypad_pages/penalty_edit.rs @@ -1,12 +1,6 @@ -use crate::config::Mode; - -use super::{ - style::{self, SPACING}, - *, -}; - +use super::{style::Element, *}; use iced::{ - pure::{column, row, vertical_space, Element}, + widget::{column, row, vertical_space}, Length, }; @@ -19,8 +13,8 @@ pub(super) fn make_penalty_edit_page<'a>( mode: Mode, ) -> Element<'a, Message> { let (black_style, white_style) = match color { - GameColor::Black => (style::Button::BlackSelected, style::Button::White), - GameColor::White => (style::Button::Black, style::Button::WhiteSelected), + GameColor::Black => (ButtonStyle::BlackSelected, ButtonStyle::White), + GameColor::White => (ButtonStyle::Black, ButtonStyle::WhiteSelected), }; let (green, yellow, orange) = match mode { @@ -45,55 +39,54 @@ pub(super) fn make_penalty_edit_page<'a>( let (green_style, yellow_style, orange_style, td_style) = if kind == green { ( - style::Button::GreenSelected, - style::Button::Yellow, - style::Button::Orange, - style::Button::Red, + ButtonStyle::GreenSelected, + ButtonStyle::Yellow, + ButtonStyle::Orange, + ButtonStyle::Red, ) } else if kind == yellow { ( - style::Button::Green, - style::Button::YellowSelected, - style::Button::Orange, - style::Button::Red, + ButtonStyle::Green, + ButtonStyle::YellowSelected, + ButtonStyle::Orange, + ButtonStyle::Red, ) } else if kind == orange { ( - style::Button::Green, - style::Button::Yellow, - style::Button::OrangeSelected, - style::Button::Red, + ButtonStyle::Green, + ButtonStyle::Yellow, + ButtonStyle::OrangeSelected, + ButtonStyle::Red, ) } else if kind == PenaltyKind::TotalDismissal { ( - style::Button::Green, - style::Button::Yellow, - style::Button::Orange, - style::Button::RedSelected, + ButtonStyle::Green, + ButtonStyle::Yellow, + ButtonStyle::Orange, + ButtonStyle::RedSelected, ) } else { ( - style::Button::Green, - style::Button::Yellow, - style::Button::Orange, - style::Button::Red, + ButtonStyle::Green, + ButtonStyle::Yellow, + ButtonStyle::Orange, + ButtonStyle::Red, ) }; - let mut exit_row = row().spacing(SPACING).push( - make_button("CANCEL") - .style(style::Button::Red) - .width(Length::Fill) - .on_press(Message::PenaltyEditComplete { - canceled: true, - deleted: false, - }), - ); + let mut exit_row = row![make_button("CANCEL") + .style(ButtonStyle::Red) + .width(Length::Fill) + .on_press(Message::PenaltyEditComplete { + canceled: true, + deleted: false, + }),] + .spacing(SPACING); if origin.is_some() { exit_row = exit_row.push( make_button("DELETE") - .style(style::Button::Orange) + .style(ButtonStyle::Orange) .width(Length::Fill) .on_press(Message::PenaltyEditComplete { canceled: false, @@ -104,7 +97,7 @@ pub(super) fn make_penalty_edit_page<'a>( exit_row = exit_row.push( make_button("DONE") - .style(style::Button::Green) + .style(ButtonStyle::Green) .width(Length::Fill) .on_press(Message::PenaltyEditComplete { canceled: false, @@ -128,49 +121,36 @@ pub(super) fn make_penalty_edit_page<'a>( let yellow_label = labels[1]; let orange_label = labels[2]; - column() - .spacing(SPACING) - .push(vertical_space(Length::Fill)) - .push( - row() - .spacing(SPACING) - .push( - make_button("BLACK") - .style(black_style) - .on_press(Message::ChangeColor(GameColor::Black)), - ) - .push( - make_button("WHITE") - .style(white_style) - .on_press(Message::ChangeColor(GameColor::White)), - ), - ) - .push(vertical_space(Length::Fill)) - .push( - row() - .spacing(SPACING) - .push( - make_button(green_label) - .style(green_style) - .on_press(Message::ChangeKind(green)), - ) - .push( - make_button(yellow_label) - .style(yellow_style) - .on_press(Message::ChangeKind(yellow)), - ) - .push( - make_button(orange_label) - .style(orange_style) - .on_press(Message::ChangeKind(orange)), - ) - .push( - make_button("TD") - .style(td_style) - .on_press(Message::ChangeKind(PenaltyKind::TotalDismissal)), - ), - ) - .push(vertical_space(Length::Fill)) - .push(exit_row) - .into() + column![ + vertical_space(Length::Fill), + row![ + make_button("BLACK") + .style(black_style) + .on_press(Message::ChangeColor(GameColor::Black)), + make_button("WHITE") + .style(white_style) + .on_press(Message::ChangeColor(GameColor::White)), + ] + .spacing(SPACING), + vertical_space(Length::Fill), + row![ + make_button(green_label) + .style(green_style) + .on_press(Message::ChangeKind(green)), + make_button(yellow_label) + .style(yellow_style) + .on_press(Message::ChangeKind(yellow)), + make_button(orange_label) + .style(orange_style) + .on_press(Message::ChangeKind(orange)), + make_button("TD") + .style(td_style) + .on_press(Message::ChangeKind(PenaltyKind::TotalDismissal)), + ] + .spacing(SPACING), + vertical_space(Length::Fill), + exit_row, + ] + .spacing(SPACING) + .into() } diff --git a/refbox/src/app/view_builders/keypad_pages/score_add.rs b/refbox/src/app/view_builders/keypad_pages/score_add.rs index ce6d6008..db9f10e9 100644 --- a/refbox/src/app/view_builders/keypad_pages/score_add.rs +++ b/refbox/src/app/view_builders/keypad_pages/score_add.rs @@ -1,10 +1,6 @@ -use super::{ - style::{self, SPACING}, - *, -}; - +use super::{style::Element, *}; use iced::{ - pure::{column, row, vertical_space, Element}, + widget::{column, row, vertical_space}, Length, }; @@ -12,43 +8,34 @@ use uwh_common::game_snapshot::Color as GameColor; pub(super) fn make_score_add_page<'a>(color: GameColor) -> Element<'a, Message> { let (black_style, white_style) = match color { - GameColor::Black => (style::Button::BlackSelected, style::Button::White), - GameColor::White => (style::Button::Black, style::Button::WhiteSelected), + GameColor::Black => (ButtonStyle::BlackSelected, ButtonStyle::White), + GameColor::White => (ButtonStyle::Black, ButtonStyle::WhiteSelected), }; - column() - .spacing(SPACING) - .push(vertical_space(Length::Fill)) - .push( - row() - .spacing(SPACING) - .push( - make_button("BLACK") - .style(black_style) - .on_press(Message::ChangeColor(GameColor::Black)), - ) - .push( - make_button("WHITE") - .style(white_style) - .on_press(Message::ChangeColor(GameColor::White)), - ), - ) - .push(vertical_space(Length::Fill)) - .push( - row() - .spacing(SPACING) - .push( - make_button("CANCEL") - .style(style::Button::Red) - .width(Length::Fill) - .on_press(Message::AddScoreComplete { canceled: true }), - ) - .push( - make_button("DONE") - .style(style::Button::Green) - .width(Length::Fill) - .on_press(Message::AddScoreComplete { canceled: false }), - ), - ) - .into() + column![ + vertical_space(Length::Fill), + row![ + make_button("BLACK") + .style(black_style) + .on_press(Message::ChangeColor(GameColor::Black)), + make_button("WHITE") + .style(white_style) + .on_press(Message::ChangeColor(GameColor::White)), + ] + .spacing(SPACING), + vertical_space(Length::Fill), + row![ + make_button("CANCEL") + .style(ButtonStyle::Red) + .width(Length::Fill) + .on_press(Message::AddScoreComplete { canceled: true }), + make_button("DONE") + .style(ButtonStyle::Green) + .width(Length::Fill) + .on_press(Message::AddScoreComplete { canceled: false }), + ] + .spacing(SPACING), + ] + .spacing(SPACING) + .into() } diff --git a/refbox/src/app/view_builders/keypad_pages/team_timeout_edit.rs b/refbox/src/app/view_builders/keypad_pages/team_timeout_edit.rs index 03b617de..fb116056 100644 --- a/refbox/src/app/view_builders/keypad_pages/team_timeout_edit.rs +++ b/refbox/src/app/view_builders/keypad_pages/team_timeout_edit.rs @@ -1,41 +1,32 @@ -use super::{ - style::{self, SPACING}, - *, -}; - +use super::{style::Element, *}; use iced::{ - pure::{column, horizontal_space, row, vertical_space, Element}, + widget::{column, horizontal_space, row, vertical_space}, Length, }; use std::time::Duration; pub(super) fn make_team_timeout_edit_page<'a>(duration: Duration) -> Element<'a, Message> { - column() - .spacing(SPACING) - .push(vertical_space(Length::Fill)) - .push( - row() - .push(horizontal_space(Length::Fill)) - .push(make_time_editor("TIMEOUT LENGTH", duration, false)) - .push(horizontal_space(Length::Fill)), - ) - .push(vertical_space(Length::Fill)) - .push( - row() - .spacing(SPACING) - .push( - make_button("CANCEL") - .style(style::Button::Red) - .width(Length::Fill) - .on_press(Message::ParameterEditComplete { canceled: true }), - ) - .push( - make_button("DONE") - .style(style::Button::Green) - .width(Length::Fill) - .on_press(Message::ParameterEditComplete { canceled: false }), - ), - ) - .into() + column![ + vertical_space(Length::Fill), + row![ + horizontal_space(Length::Fill), + make_time_editor("TIMEOUT LENGTH", duration, false), + horizontal_space(Length::Fill) + ], + vertical_space(Length::Fill), + row![ + make_button("CANCEL") + .style(ButtonStyle::Red) + .width(Length::Fill) + .on_press(Message::ParameterEditComplete { canceled: true }), + make_button("DONE") + .style(ButtonStyle::Green) + .width(Length::Fill) + .on_press(Message::ParameterEditComplete { canceled: false }), + ] + .spacing(SPACING), + ] + .spacing(SPACING) + .into() } diff --git a/refbox/src/app/view_builders/list_selector.rs b/refbox/src/app/view_builders/list_selector.rs index 56212d78..3f5dd9df 100644 --- a/refbox/src/app/view_builders/list_selector.rs +++ b/refbox/src/app/view_builders/list_selector.rs @@ -1,11 +1,11 @@ use super::{ - style::{self, MIN_BUTTON_SIZE, PADDING, SPACING}, + style::{ButtonStyle, ContainerStyle, Element, LINE_HEIGHT, MIN_BUTTON_SIZE, PADDING, SPACING}, *, }; use collect_array::CollectArrayResult; use iced::{ alignment::{Horizontal, Vertical}, - pure::{button, column, horizontal_space, row, text, vertical_space, Element}, + widget::{button, column, horizontal_space, row, text, vertical_space}, Length, }; @@ -30,6 +30,7 @@ pub(in super::super) fn build_list_selector_page<'a>( }; let title = text(title) + .line_height(LINE_HEIGHT) .height(Length::Fill) .width(Length::Fill) .horizontal_alignment(Horizontal::Center) @@ -48,22 +49,23 @@ pub(in super::super) fn build_list_selector_page<'a>( .map(|pen| { if let Some((btn_text, msg_val)) = pen { let text = text(btn_text) + .line_height(LINE_HEIGHT) .vertical_alignment(Vertical::Center) .horizontal_alignment(Horizontal::Left) .width(Length::Fill); button(text) .padding(PADDING) - .height(Length::Units(MIN_BUTTON_SIZE)) + .height(Length::Fixed(MIN_BUTTON_SIZE)) .width(Length::Fill) - .style(style::Button::Gray) + .style(ButtonStyle::Gray) .on_press(Message::ParameterSelected(param, msg_val)) .into() } else { button(horizontal_space(Length::Shrink)) - .height(Length::Units(MIN_BUTTON_SIZE)) + .height(Length::Fixed(MIN_BUTTON_SIZE)) .width(Length::Fill) - .style(style::Button::Gray) + .style(ButtonStyle::Gray) .into() } }) @@ -109,38 +111,29 @@ pub(in super::super) fn build_list_selector_page<'a>( index, title, ScrollOption::GameParameter, - style::Container::LightGray, + ContainerStyle::LightGray, ) .width(Length::FillPortion(4)); - column() + column![ + make_game_time_button(snapshot, false, true, mode, clock_running), + row![ + scroll_list, + column![ + vertical_space(Length::Fill), + make_button("CANCEL") + .style(ButtonStyle::Red) + .width(Length::Fill) + .height(Length::Fixed(MIN_BUTTON_SIZE)) + .on_press(Message::ParameterEditComplete { canceled: true }), + ] + .width(Length::Fill), + ] .spacing(SPACING) .height(Length::Fill) - .push(make_game_time_button( - snapshot, - false, - false, - mode, - clock_running, - )) - .push( - row() - .spacing(SPACING) - .height(Length::Fill) - .width(Length::Fill) - .push(scroll_list) - .push( - column() - .width(Length::Fill) - .push(vertical_space(Length::Fill)) - .push( - make_button("CANCEL") - .style(style::Button::Red) - .width(Length::Fill) - .height(Length::Units(MIN_BUTTON_SIZE)) - .on_press(Message::ParameterEditComplete { canceled: true }), - ), - ), - ) - .into() + .width(Length::Fill), + ] + .spacing(SPACING) + .height(Length::Fill) + .into() } diff --git a/refbox/src/app/view_builders/main_view.rs b/refbox/src/app/view_builders/main_view.rs index 49339e22..7a520dcb 100644 --- a/refbox/src/app/view_builders/main_view.rs +++ b/refbox/src/app/view_builders/main_view.rs @@ -1,14 +1,16 @@ use super::{ - style::{self, LARGE_TEXT, MIN_BUTTON_SIZE, PADDING, SMALL_PLUS_TEXT, SMALL_TEXT, SPACING}, + style::{ + ButtonStyle, Element, LARGE_TEXT, LINE_HEIGHT, MIN_BUTTON_SIZE, PADDING, SMALL_PLUS_TEXT, + SMALL_TEXT, SPACING, + }, *, }; use iced::{ alignment::{Horizontal, Vertical}, - pure::{button, column, horizontal_space, row, text, Element}, + widget::{button, column, horizontal_space, row, text}, Alignment, Length, }; - use uwh_common::{ config::Game as GameConfig, game_snapshot::{Color as GameColor, GamePeriod, GameSnapshot, PenaltyTime, TimeoutSnapshot}, @@ -24,10 +26,7 @@ pub(in super::super) fn build_main_view<'a>( ) -> Element<'a, Message> { let time_button = make_game_time_button(snapshot, true, false, mode, clock_running); - let mut center_col = column() - .spacing(SPACING) - .width(Length::Fill) - .push(time_button); + let mut center_col = column![time_button].spacing(SPACING).width(Length::Fill); match snapshot.timeout { TimeoutSnapshot::White(_) @@ -36,7 +35,7 @@ pub(in super::super) fn build_main_view<'a>( | TimeoutSnapshot::PenaltyShot(_) => { center_col = center_col.push( make_button("END TIMEOUT") - .style(style::Button::Yellow) + .style(ButtonStyle::Yellow) .on_press(Message::EndTimeout), ) } @@ -49,7 +48,7 @@ pub(in super::super) fn build_main_view<'a>( | GamePeriod::PreSuddenDeath => { center_col = center_col.push( make_button("START NOW") - .style(style::Button::Green) + .style(ButtonStyle::Green) .on_press(Message::StartPlayNow), ) } @@ -66,11 +65,12 @@ pub(in super::super) fn build_main_view<'a>( button( text(config_string(snapshot, config, using_uwhscores, games)) .size(SMALL_TEXT) + .line_height(LINE_HEIGHT) .vertical_alignment(Vertical::Center) .horizontal_alignment(Horizontal::Left), ) .padding(PADDING) - .style(style::Button::LightGray) + .style(ButtonStyle::LightGray) .width(Length::Fill) .height(Length::Fill) .on_press(Message::ShowGameDetails), @@ -102,32 +102,31 @@ pub(in super::super) fn build_main_view<'a>( }; let button_style = if make_penalties_red { - style::Button::Red + ButtonStyle::Red } else { match color { - GameColor::Black => style::Button::Black, - GameColor::White => style::Button::White, + GameColor::Black => ButtonStyle::Black, + GameColor::White => ButtonStyle::White, } }; button( - column() - .spacing(SPACING) - .push( - text("Penalties") - .vertical_alignment(Vertical::Center) - .horizontal_alignment(Horizontal::Center) - .width(Length::Fill), - ) - .push( - text(penalty_string(penalties)) - .vertical_alignment(Vertical::Top) - .horizontal_alignment(Horizontal::Left) - .width(Length::Fill) - .height(Length::Fill), - ) - .width(Length::Fill) - .height(Length::Fill), + column![ + text("PENALTIES") + .line_height(LINE_HEIGHT) + .vertical_alignment(Vertical::Center) + .horizontal_alignment(Horizontal::Center) + .width(Length::Fill), + text(penalty_string(penalties)) + .line_height(LINE_HEIGHT) + .vertical_alignment(Vertical::Top) + .horizontal_alignment(Horizontal::Left) + .width(Length::Fill) + .height(Length::Fill), + ] + .spacing(SPACING) + .width(Length::Fill) + .height(Length::Fill), ) .padding(PADDING) .width(Length::Fill) @@ -137,32 +136,40 @@ pub(in super::super) fn build_main_view<'a>( }; let mut black_score_btn = button( - column() - .align_items(Alignment::Center) - .width(Length::Fill) - .push("BLACK") - .push(text(snapshot.b_score.to_string()).size(LARGE_TEXT)), + column![ + text("BLACK").line_height(LINE_HEIGHT), + text(snapshot.b_score.to_string()) + .size(LARGE_TEXT) + .line_height(LINE_HEIGHT), + ] + .align_items(Alignment::Center) + .width(Length::Fill), ) .padding(PADDING) .width(Length::Fill) - .height(Length::Units(MIN_BUTTON_SIZE + SMALL_PLUS_TEXT + PADDING)) - .style(style::Button::Black); + .height(Length::Fixed(MIN_BUTTON_SIZE + SMALL_PLUS_TEXT + PADDING)) + .style(ButtonStyle::Black); - let mut black_new_score_btn = make_button("SCORE\nBLACK").style(style::Button::Black); + let mut black_new_score_btn = + make_multi_label_button(("SCORE", "BLACK")).style(ButtonStyle::Black); let mut white_score_btn = button( - column() - .align_items(Alignment::Center) - .width(Length::Fill) - .push("WHITE") - .push(text(snapshot.w_score.to_string()).size(LARGE_TEXT)), + column![ + text("WHITE").line_height(LINE_HEIGHT), + text(snapshot.w_score.to_string()) + .size(LARGE_TEXT) + .line_height(LINE_HEIGHT), + ] + .align_items(Alignment::Center) + .width(Length::Fill), ) .padding(PADDING) .width(Length::Fill) - .height(Length::Units(MIN_BUTTON_SIZE + SMALL_PLUS_TEXT + PADDING)) - .style(style::Button::White); + .height(Length::Fixed(MIN_BUTTON_SIZE + SMALL_PLUS_TEXT + PADDING)) + .style(ButtonStyle::White); - let mut white_new_score_btn = make_button("SCORE\nWHITE").style(style::Button::White); + let mut white_new_score_btn = + make_multi_label_button(("SCORE", "WHITE")).style(ButtonStyle::White); if snapshot.current_period != GamePeriod::BetweenGames { black_score_btn = black_score_btn.on_press(Message::EditScores); @@ -171,46 +178,46 @@ pub(in super::super) fn build_main_view<'a>( white_new_score_btn = white_new_score_btn.on_press(Message::AddNewScore(GameColor::White)); } - let black_col = column() - .spacing(SPACING) - .align_items(Alignment::Center) + let black_col = column![ + black_score_btn, + black_new_score_btn, + make_penalty_button(snapshot, GameColor::Black), + ] + .spacing(SPACING) + .align_items(Alignment::Center) + .width(Length::Fill); + + let white_col = column![ + white_score_btn, + white_new_score_btn, + make_penalty_button(snapshot, GameColor::White), + ] + .spacing(SPACING) + .align_items(Alignment::Center) + .width(Length::Fill); + + row![ + row![ + black_col, + horizontal_space(Length::Fixed(3.0 * SPACING / 4.0)), + ] .width(Length::Fill) - .push(black_score_btn) - .push(black_new_score_btn) - .push(make_penalty_button(snapshot, GameColor::Black)); - - let white_col = column() - .spacing(SPACING) - .align_items(Alignment::Center) + .spacing(0), + row![ + horizontal_space(Length::Fixed(SPACING / 4.0)), + center_col, + horizontal_space(Length::Fixed(SPACING / 4.0)), + ] + .width(Length::FillPortion(2)) + .spacing(0), + row![ + horizontal_space(Length::Fixed(3.0 * SPACING / 4.0)), + white_col, + ] .width(Length::Fill) - .push(white_score_btn) - .push(white_new_score_btn) - .push(make_penalty_button(snapshot, GameColor::White)); - - row() - .spacing(0) - .height(Length::Fill) - .push( - row() - .width(Length::Fill) - .spacing(0) - .push(black_col) - .push(horizontal_space(Length::Units(3 * SPACING / 4))), - ) - .push( - row() - .width(Length::FillPortion(2)) - .spacing(0) - .push(horizontal_space(Length::Units(SPACING / 4))) - .push(center_col) - .push(horizontal_space(Length::Units(SPACING / 4))), - ) - .push( - row() - .width(Length::Fill) - .spacing(0) - .push(horizontal_space(Length::Units(3 * SPACING / 4))) - .push(white_col), - ) - .into() + .spacing(0), + ] + .spacing(0) + .height(Length::Fill) + .into() } diff --git a/refbox/src/app/view_builders/penalties.rs b/refbox/src/app/view_builders/penalties.rs index ae64d268..28341932 100644 --- a/refbox/src/app/view_builders/penalties.rs +++ b/refbox/src/app/view_builders/penalties.rs @@ -1,11 +1,15 @@ use super::{ - style::{self, GREEN, MIN_BUTTON_SIZE, ORANGE, PADDING, RED, SPACING}, + style::{ + ButtonStyle, Container, ContainerStyle, Element, LINE_HEIGHT, MIN_BUTTON_SIZE, PADDING, + SPACING, + }, *, }; +use crate::app::style::TextStyle; use collect_array::CollectArrayResult; use iced::{ alignment::{Horizontal, Vertical}, - pure::{button, column, horizontal_space, row, text, widget::Container, Element}, + widget::{button, column, horizontal_space, row, text}, Length, }; @@ -18,68 +22,65 @@ pub(in super::super) fn build_penalty_overview_page<'a>( mode: Mode, clock_running: bool, ) -> Element<'a, Message> { - column() + let default_pen_len = match mode { + Mode::Hockey3V3 => PenaltyKind::ThirtySecond, + Mode::Hockey6V6 => PenaltyKind::OneMinute, + Mode::Rugby => PenaltyKind::TwoMinute, + }; + + column![ + make_game_time_button(snapshot, false, true, mode, clock_running), + row![ + make_penalty_list( + penalties.black, + indices.black, + GameColor::Black, + default_pen_len + ), + make_penalty_list( + penalties.white, + indices.white, + GameColor::White, + default_pen_len + ) + ] .spacing(SPACING) - .height(Length::Fill) - .push(make_game_time_button( - snapshot, - false, - false, - mode, - clock_running, - )) - .push( - row() - .spacing(SPACING) - .height(Length::Fill) - .push(make_penalty_list( - penalties.black, - indices.black, + .height(Length::Fill), + row![ + make_button("CANCEL") + .style(ButtonStyle::Red) + .width(Length::Fill) + .on_press(Message::PenaltyOverviewComplete { canceled: true }), + make_button("NEW") + .style(ButtonStyle::Blue) + .width(Length::Fill) + .on_press(Message::KeypadPage(KeypadPage::Penalty( + None, GameColor::Black, - )) - .push(make_penalty_list( - penalties.white, - indices.white, - GameColor::White, - )), - ) - .push( - row() - .spacing(SPACING) - .push( - make_button("CANCEL") - .style(style::Button::Red) - .width(Length::Fill) - .on_press(Message::PenaltyOverviewComplete { canceled: true }), - ) - .push( - make_button("NEW") - .style(style::Button::Blue) - .width(Length::Fill) - .on_press(Message::KeypadPage(KeypadPage::Penalty( - None, - GameColor::Black, - PenaltyKind::OneMinute, - ))), - ) - .push( - make_button("DONE") - .style(style::Button::Green) - .width(Length::Fill) - .on_press(Message::PenaltyOverviewComplete { canceled: false }), - ), - ) - .into() + default_pen_len, + ))), + make_button("DONE") + .style(ButtonStyle::Green) + .width(Length::Fill) + .on_press(Message::PenaltyOverviewComplete { canceled: false }), + ] + .spacing(SPACING), + ] + .spacing(SPACING) + .height(Length::Fill) + .into() } fn make_penalty_list<'a>( penalties: Vec<(String, FormatHint, PenaltyKind)>, index: usize, color: GameColor, + default_pen_len: PenaltyKind, ) -> Container<'a, Message> { const PENALTY_LIST_LEN: usize = 3; let title = text(format!("{} PENALTIES", color.to_string().to_uppercase())) + .line_height(LINE_HEIGHT) .height(Length::Fill) .width(Length::Fill) .horizontal_alignment(Horizontal::Center) @@ -97,22 +98,23 @@ fn make_penalty_list<'a>( .map(|pen| { if let Some((i, (pen_text, format, kind))) = pen { let mut text = text(pen_text) + .line_height(LINE_HEIGHT) .vertical_alignment(Vertical::Center) .horizontal_alignment(Horizontal::Left) .width(Length::Fill); match format { FormatHint::NoChange => {} - FormatHint::Edited => text = text.color(ORANGE), - FormatHint::Deleted => text = text.color(RED), - FormatHint::New => text = text.color(GREEN), + FormatHint::Edited => text = text.style(TextStyle::Orange), + FormatHint::Deleted => text = text.style(TextStyle::Red), + FormatHint::New => text = text.style(TextStyle::Green), } button(text) .padding(PADDING) - .height(Length::Units(MIN_BUTTON_SIZE)) + .height(Length::Fixed(MIN_BUTTON_SIZE)) .width(Length::Fill) - .style(style::Button::Gray) + .style(ButtonStyle::Gray) .on_press(Message::KeypadPage(KeypadPage::Penalty( Some((color, i)), color, @@ -121,13 +123,13 @@ fn make_penalty_list<'a>( .into() } else { button(horizontal_space(Length::Shrink)) - .height(Length::Units(MIN_BUTTON_SIZE)) + .height(Length::Fixed(MIN_BUTTON_SIZE)) .width(Length::Fill) - .style(style::Button::Gray) + .style(ButtonStyle::Gray) .on_press(Message::KeypadPage(KeypadPage::Penalty( None, color, - PenaltyKind::OneMinute, + default_pen_len, ))) .into() } @@ -135,8 +137,8 @@ fn make_penalty_list<'a>( .collect(); let cont_style = match color { - GameColor::Black => style::Container::Black, - GameColor::White => style::Container::White, + GameColor::Black => ContainerStyle::Black, + GameColor::White => ContainerStyle::White, }; let scroll_option = match color { diff --git a/refbox/src/app/view_builders/score_edit.rs b/refbox/src/app/view_builders/score_edit.rs index 95623d42..c3aac4d5 100644 --- a/refbox/src/app/view_builders/score_edit.rs +++ b/refbox/src/app/view_builders/score_edit.rs @@ -1,11 +1,11 @@ use super::{ - style::{self, LARGE_TEXT, PADDING, SPACING}, + style::{ButtonStyle, ContainerStyle, Element, LARGE_TEXT, LINE_HEIGHT, PADDING, SPACING}, *, }; use iced::{ alignment::Horizontal, - pure::{column, container, horizontal_space, row, text, vertical_space, Element}, + widget::{column, container, horizontal_space, row, text, vertical_space}, Alignment, Length, }; @@ -25,95 +25,85 @@ pub(in super::super) fn build_score_edit_view<'a>( }; let black_edit = container( - row() + row![ + column![ + make_small_button("+", LARGE_TEXT) + .style(ButtonStyle::Blue) + .on_press(Message::ChangeScore { + color: GameColor::Black, + increase: true, + }), + make_small_button("-", LARGE_TEXT) + .style(ButtonStyle::Blue) + .on_press(Message::ChangeScore { + color: GameColor::Black, + increase: false, + }), + ] + .spacing(SPACING), + column![ + "BLACK", + text(scores.black.to_string()) + .size(LARGE_TEXT) + .line_height(LINE_HEIGHT) + ] .spacing(SPACING) - .align_items(Alignment::Center) - .push( - column() - .spacing(SPACING) - .push( - make_small_button("+", LARGE_TEXT) - .style(style::Button::Blue) - .on_press(Message::ChangeScore { - color: GameColor::Black, - increase: true, - }), - ) - .push( - make_small_button("-", LARGE_TEXT) - .style(style::Button::Blue) - .on_press(Message::ChangeScore { - color: GameColor::Black, - increase: false, - }), - ), - ) - .push( - column() - .spacing(SPACING) - .width(Length::Fill) - .align_items(Alignment::Center) - .push("BLACK") - .push(text(scores.black.to_string()).size(LARGE_TEXT)), - ), + .width(Length::Fill) + .align_items(Alignment::Center), + ] + .spacing(SPACING) + .align_items(Alignment::Center), ) .padding(PADDING) .width(Length::FillPortion(2)) - .style(style::Container::Black); + .style(ContainerStyle::Black); let white_edit = container( - row() + row![ + column![ + "WHITE", + text(scores.white.to_string()) + .size(LARGE_TEXT) + .line_height(LINE_HEIGHT) + ] .spacing(SPACING) - .align_items(Alignment::Center) - .push( - column() - .spacing(SPACING) - .width(Length::Fill) - .align_items(Alignment::Center) - .push("WHITE") - .push(text(scores.white.to_string()).size(LARGE_TEXT)), - ) - .push( - column() - .spacing(SPACING) - .push( - make_small_button("+", LARGE_TEXT) - .style(style::Button::Blue) - .on_press(Message::ChangeScore { - color: GameColor::White, - increase: true, - }), - ) - .push( - make_small_button("-", LARGE_TEXT) - .style(style::Button::Blue) - .on_press(Message::ChangeScore { - color: GameColor::White, - increase: false, - }), - ), - ), + .width(Length::Fill) + .align_items(Alignment::Center), + column![ + make_small_button("+", LARGE_TEXT) + .style(ButtonStyle::Blue) + .on_press(Message::ChangeScore { + color: GameColor::White, + increase: true, + }), + make_small_button("-", LARGE_TEXT) + .style(ButtonStyle::Blue) + .on_press(Message::ChangeScore { + color: GameColor::White, + increase: false, + }), + ] + .spacing(SPACING), + ] + .spacing(SPACING) + .align_items(Alignment::Center), ) .padding(PADDING) .width(Length::FillPortion(2)) - .style(style::Container::White); + .style(ContainerStyle::White); - let mut main_col = column() - .spacing(SPACING) - .height(Length::Fill) - .push(make_game_time_button( - snapshot, - false, - false, - mode, - clock_running, - )) - .push(vertical_space(Length::Fill)); + let mut main_col = column![ + make_game_time_button(snapshot, false, true, mode, clock_running), + vertical_space(Length::Fill) + ] + .spacing(SPACING) + .height(Length::Fill); if is_confirmation { main_col = main_col .push( text("Please enter the final score") + .line_height(LINE_HEIGHT) .horizontal_alignment(Horizontal::Center) .width(Length::Fill), ) @@ -122,25 +112,25 @@ pub(in super::super) fn build_score_edit_view<'a>( main_col .push( - row() - .spacing(SPACING) - .push(horizontal_space(Length::Fill)) - .push(black_edit) - .push(horizontal_space(Length::Fill)) - .push(white_edit) - .push(horizontal_space(Length::Fill)), + row![ + horizontal_space(Length::Fill), + black_edit, + horizontal_space(Length::Fill), + white_edit, + horizontal_space(Length::Fill) + ] + .spacing(SPACING), ) .push(vertical_space(Length::Fill)) .push( - row() - .spacing(SPACING) - .push(make_message_button("CANCEL", cancel_btn_msg).style(style::Button::Red)) - .push(horizontal_space(Length::Fill)) - .push( - make_button("DONE") - .style(style::Button::Green) - .on_press(Message::ScoreEditComplete { canceled: false }), - ), + row![ + make_message_button("CANCEL", cancel_btn_msg).style(ButtonStyle::Red), + horizontal_space(Length::Fill), + make_button("DONE") + .style(ButtonStyle::Green) + .on_press(Message::ScoreEditComplete { canceled: false }), + ] + .spacing(SPACING), ) .into() } diff --git a/refbox/src/app/view_builders/shared_elements.rs b/refbox/src/app/view_builders/shared_elements.rs index 4d814a4a..a99145c6 100644 --- a/refbox/src/app/view_builders/shared_elements.rs +++ b/refbox/src/app/view_builders/shared_elements.rs @@ -1,19 +1,18 @@ use super::{ message::*, style::{ - self, BLACK, GREEN, LARGE_TEXT, MEDIUM_TEXT, MIN_BUTTON_SIZE, PADDING, RED, - SMALL_PLUS_TEXT, SMALL_TEXT, SPACING, WHITE, YELLOW, + Button, ButtonStyle, Container, ContainerStyle, Row, SvgStyle, Text, TextStyle, LARGE_TEXT, + LINE_HEIGHT, MEDIUM_TEXT, MIN_BUTTON_SIZE, PADDING, SMALL_PLUS_TEXT, SMALL_TEXT, SPACING, }, + Element, }; use crate::{config::Mode, tournament_manager::TournamentManager}; -use uwh_common::{drawing_support::*, uwhscores::GameInfo}; - use iced::{ alignment::{Horizontal, Vertical}, - pure::{ - button, column, container, horizontal_space, row, text, vertical_space, - widget::{Button, Container, Row, Text}, - Element, + widget::{ + button, column, container, horizontal_space, row, + svg::{self, Svg}, + text, vertical_space, }, Alignment, Length, }; @@ -27,18 +26,38 @@ use std::{ }; use uwh_common::{ config::Game as GameConfig, + drawing_support::*, game_snapshot::{GamePeriod, GameSnapshot, PenaltySnapshot, PenaltyTime, TimeoutSnapshot}, + uwhscores::GameInfo, }; +macro_rules! column { + () => ( + iced::widget::Column::new() + ); + ($($x:expr),+ $(,)?) => ( + iced::widget::Column::with_children(vec![$($crate::app::Element::from($x)),+]) + ); +} + +macro_rules! row { + () => ( + iced::widget::Row::new() + ); + ($($x:expr),+ $(,)?) => ( + iced::widget::Row::with_children(vec![$($crate::app::Element::from($x)),+]) + ); +} + pub(super) fn make_scroll_list<'a, const LIST_LEN: usize>( buttons: [Element<'a, Message>; LIST_LEN], num_items: usize, index: usize, - title: Text, + title: Text<'a>, scroll_option: ScrollOption, - cont_style: impl iced::pure::widget::container::StyleSheet + 'a, + cont_style: ContainerStyle, ) -> Container<'a, Message> { - let mut main_col = column().spacing(SPACING).width(Length::Fill).push(title); + let mut main_col = column![title].spacing(SPACING).width(Length::Fill); for button in buttons { main_col = main_col.push(button); @@ -71,9 +90,39 @@ pub(super) fn make_scroll_list<'a, const LIST_LEN: usize>( other => Length::FillPortion(other), }; - let mut up_btn = make_small_button("\u{25b2}", MEDIUM_TEXT).style(style::Button::Blue); - - let mut down_btn = make_small_button("\u{25be}", MEDIUM_TEXT).style(style::Button::Blue); + let mut up_btn = button( + container( + Svg::new(svg::Handle::from_memory( + &include_bytes!("../../../resources/arrow_drop_up.svg")[..], + )) + .style(SvgStyle::White), + ) + .width(Length::Fill) + .height(Length::Fill) + .style(ContainerStyle::Transparent) + .center_x() + .center_y(), + ) + .width(Length::Fixed(MIN_BUTTON_SIZE)) + .height(Length::Fixed(MIN_BUTTON_SIZE)) + .style(ButtonStyle::Blue); + + let mut down_btn = button( + container( + Svg::new(svg::Handle::from_memory( + &include_bytes!("../../../resources/arrow_drop_down.svg")[..], + )) + .style(SvgStyle::White), + ) + .width(Length::Fill) + .height(Length::Fill) + .style(ContainerStyle::Transparent) + .center_x() + .center_y(), + ) + .width(Length::Fixed(MIN_BUTTON_SIZE)) + .height(Length::Fixed(MIN_BUTTON_SIZE)) + .style(ButtonStyle::Blue); if can_scroll_up { up_btn = up_btn.on_press(Message::Scroll { @@ -89,46 +138,39 @@ pub(super) fn make_scroll_list<'a, const LIST_LEN: usize>( }); } - let scroll_bar = row() + let scroll_bar = row![] .width(Length::Fill) .height(Length::Fill) .push(horizontal_space(Length::Fill)) .push( - container( - column() - .push(vertical_space(top_len)) - .push( - container(vertical_space(Length::Fill)) - .width(Length::Fill) - .height(Length::FillPortion(LIST_LEN as u16)) - .style(style::Container::Gray), - ) - .push(vertical_space(bottom_len)), - ) + container(column![ + vertical_space(top_len), + container(vertical_space(Length::Fill)) + .width(Length::Fill) + .height(Length::FillPortion(LIST_LEN as u16)) + .style(ContainerStyle::Gray), + vertical_space(bottom_len), + ]) .padding(PADDING) .width(Length::FillPortion(2)) .height(Length::Fill) - .style(style::Container::ScrollBar), + .style(ContainerStyle::ScrollBar), ) .push(horizontal_space(Length::Fill)); container( - row() - .spacing(SPACING) - .width(Length::Fill) - .height(Length::Fill) - .push(main_col) - .push( - column() - .spacing(SPACING) - .width(Length::Units(MIN_BUTTON_SIZE)) - .height(Length::Fill) - .push(up_btn) - .push(scroll_bar) - .push(down_btn), - ), + row![ + main_col, + column![up_btn, scroll_bar, down_btn] + .spacing(SPACING) + .width(Length::Fixed(MIN_BUTTON_SIZE)) + .height(Length::Fill), + ] + .spacing(SPACING) + .width(Length::Fill) + .height(Length::Fill) + .padding(PADDING), ) - .padding(PADDING) .width(Length::Fill) .height(Length::Fill) .style(cont_style) @@ -142,79 +184,85 @@ pub(in super::super) fn build_timeout_ribbon<'a>( let tm = tm.lock().unwrap(); let black = match snapshot.timeout { - TimeoutSnapshot::None => make_message_button( - "BLACK\nTIMEOUT", + TimeoutSnapshot::None => make_multi_label_message_button( + ("BLACK", "TIMEOUT"), tm.can_start_b_timeout() .ok() .map(|_| Message::BlackTimeout(false)), ) - .style(style::Button::Black), - TimeoutSnapshot::Black(_) => make_message_button("END\nTIMEOUT", Some(Message::EndTimeout)) - .style(style::Button::Yellow), + .style(ButtonStyle::Black), + TimeoutSnapshot::Black(_) => { + make_multi_label_message_button(("END", "TIMEOUT"), Some(Message::EndTimeout)) + .style(ButtonStyle::Yellow) + } TimeoutSnapshot::White(_) | TimeoutSnapshot::Ref(_) | TimeoutSnapshot::PenaltyShot(_) => { - make_message_button( - "SWITCH TO\nBLACK", + make_multi_label_message_button( + ("SWITCH TO", "BLACK"), tm.can_switch_to_b_timeout() .ok() .map(|_| Message::BlackTimeout(true)), ) - .style(style::Button::Black) + .style(ButtonStyle::Black) } }; let white = match snapshot.timeout { - TimeoutSnapshot::None => make_message_button( - "WHITE\nTIMEOUT", + TimeoutSnapshot::None => make_multi_label_message_button( + ("WHITE", "TIMEOUT"), tm.can_start_w_timeout() .ok() .map(|_| Message::WhiteTimeout(false)), ) - .style(style::Button::White), - TimeoutSnapshot::White(_) => make_message_button("END\nTIMEOUT", Some(Message::EndTimeout)) - .style(style::Button::Yellow), + .style(ButtonStyle::White), + TimeoutSnapshot::White(_) => { + make_multi_label_message_button(("END", "TIMEOUT"), Some(Message::EndTimeout)) + .style(ButtonStyle::Yellow) + } TimeoutSnapshot::Black(_) | TimeoutSnapshot::Ref(_) | TimeoutSnapshot::PenaltyShot(_) => { - make_message_button( - "SWITCH TO\nWHITE", + make_multi_label_message_button( + ("SWITCH TO", "WHITE"), tm.can_switch_to_w_timeout() .ok() .map(|_| Message::WhiteTimeout(true)), ) - .style(style::Button::White) + .style(ButtonStyle::White) } }; let referee = match snapshot.timeout { - TimeoutSnapshot::None => make_message_button( - "REF\nTIMEOUT", + TimeoutSnapshot::None => make_multi_label_message_button( + ("REF", "TIMEOUT"), tm.can_start_ref_timeout() .ok() .map(|_| Message::RefTimeout(false)), ) - .style(style::Button::Yellow), - TimeoutSnapshot::Ref(_) => make_message_button("END\nTIMEOUT", Some(Message::EndTimeout)) - .style(style::Button::Yellow), + .style(ButtonStyle::Yellow), + TimeoutSnapshot::Ref(_) => { + make_multi_label_message_button(("END", "TIMEOUT"), Some(Message::EndTimeout)) + .style(ButtonStyle::Yellow) + } TimeoutSnapshot::Black(_) | TimeoutSnapshot::White(_) | TimeoutSnapshot::PenaltyShot(_) => { - make_message_button( - "SWITCH TO\nREF", + make_multi_label_message_button( + ("SWITCH TO", "REF"), tm.can_switch_to_ref_timeout() .ok() .map(|_| Message::RefTimeout(true)), ) - .style(style::Button::Yellow) + .style(ButtonStyle::Yellow) } }; let penalty = match snapshot.timeout { - TimeoutSnapshot::None => make_message_button( - "PENALTY\nSHOT", + TimeoutSnapshot::None => make_multi_label_message_button( + ("PENALTY", "SHOT"), tm.can_start_penalty_shot() .ok() .map(|_| Message::PenaltyShot(false)), ) - .style(style::Button::Red), + .style(ButtonStyle::Red), TimeoutSnapshot::PenaltyShot(_) => { - make_message_button("END\nTIMEOUT", Some(Message::EndTimeout)) - .style(style::Button::Yellow) + make_multi_label_message_button(("END", "TIMEOUT"), Some(Message::EndTimeout)) + .style(ButtonStyle::Yellow) } TimeoutSnapshot::Black(_) | TimeoutSnapshot::White(_) | TimeoutSnapshot::Ref(_) => { let can_switch = if mode == Mode::Rugby { @@ -222,22 +270,17 @@ pub(in super::super) fn build_timeout_ribbon<'a>( } else { tm.can_switch_to_penalty_shot() }; - make_message_button( - "SWITCH TO\nPEN SHOT", + make_multi_label_message_button( + ("SWITCH TO", "PEN SHOT"), can_switch.ok().map(|_| Message::PenaltyShot(true)), ) - .style(style::Button::Red) + .style(ButtonStyle::Red) } }; drop(tm); - row() - .spacing(SPACING) - .push(black) - .push(referee) - .push(penalty) - .push(white) + row![black, referee, penalty, white].spacing(SPACING) } pub(super) fn make_game_time_button<'a>( @@ -280,20 +323,20 @@ pub(super) fn make_game_time_button<'a>( let (mut period_text, period_color) = { let (text, color) = match snapshot.current_period { - GamePeriod::BetweenGames => ("NEXT GAME", YELLOW), - GamePeriod::FirstHalf => ("FIRST HALF", GREEN), - GamePeriod::HalfTime => ("HALF TIME", YELLOW), - GamePeriod::SecondHalf => ("SECOND HALF", GREEN), - GamePeriod::PreOvertime => ("PRE OVERTIME BREAK", YELLOW), - GamePeriod::OvertimeFirstHalf => ("OVERTIME FIRST HALF", GREEN), - GamePeriod::OvertimeHalfTime => ("OVERTIME HALF TIME", YELLOW), - GamePeriod::OvertimeSecondHalf => ("OVERTIME SECOND HALF", GREEN), - GamePeriod::PreSuddenDeath => ("PRE SUDDEN DEATH BREAK", YELLOW), - GamePeriod::SuddenDeath => ("SUDDEN DEATH", GREEN), + GamePeriod::BetweenGames => ("NEXT GAME", TextStyle::Yellow), + GamePeriod::FirstHalf => ("FIRST HALF", TextStyle::Green), + GamePeriod::HalfTime => ("HALF TIME", TextStyle::Yellow), + GamePeriod::SecondHalf => ("SECOND HALF", TextStyle::Green), + GamePeriod::PreOvertime => ("PRE OVERTIME BREAK", TextStyle::Yellow), + GamePeriod::OvertimeFirstHalf => ("OVERTIME FIRST HALF", TextStyle::Green), + GamePeriod::OvertimeHalfTime => ("OVERTIME HALF TIME", TextStyle::Yellow), + GamePeriod::OvertimeSecondHalf => ("OVERTIME SECOND HALF", TextStyle::Green), + GamePeriod::PreSuddenDeath => ("PRE SUDDEN DEATH BREAK", TextStyle::Yellow), + GamePeriod::SuddenDeath => ("SUDDEN DEATH", TextStyle::Green), }; if make_red { - (text, BLACK) + (text, TextStyle::Black) } else { (text, color) } @@ -320,30 +363,35 @@ pub(super) fn make_game_time_button<'a>( }; } - let make_time_view_row = |period_text, time_text, color| { + let make_time_view_row = |period_text, time_text, style| { let per = text(period_text) - .color(color) + .line_height(LINE_HEIGHT) + .style(style) .width(Length::Fill) .vertical_alignment(Vertical::Center) .horizontal_alignment(Horizontal::Right); let time = text(time_text) - .color(color) + .line_height(LINE_HEIGHT) + .style(style) .size(LARGE_TEXT) .width(Length::Fill) .vertical_alignment(Vertical::Center) .horizontal_alignment(Horizontal::Left); - let r = row().spacing(SPACING); + let r = row![].spacing(SPACING); make_time_view!(r, per, time) }; - let make_time_view_col = |period_text, time_text, color| { - let per = text(period_text).color(color); - let time = text(time_text).color(color).size(LARGE_TEXT); - let c = column(); + let make_time_view_col = |period_text, time_text, style| { + let per = text(period_text).line_height(LINE_HEIGHT).style(style); + let time = text(time_text) + .line_height(LINE_HEIGHT) + .style(style) + .size(LARGE_TEXT); + let c = column![]; make_time_view!(c, per, time) }; - let mut content = row() + let mut content = row![] .spacing(SPACING) .height(Length::Fill) .width(Length::Fill) @@ -352,11 +400,18 @@ pub(super) fn make_game_time_button<'a>( let timeout_info = match snapshot.timeout { TimeoutSnapshot::White(_) => Some(( if tall { "WHT T/O" } else { "WHITE TIMEOUT" }, - if make_red { BLACK } else { WHITE }, + if make_red { + TextStyle::Black + } else { + TextStyle::White + }, )), - TimeoutSnapshot::Black(_) => Some((if tall { "BLK T/O" } else { "BLACK TIMEOUT" }, BLACK)), - TimeoutSnapshot::Ref(_) => Some(("REF TMOUT", YELLOW)), - TimeoutSnapshot::PenaltyShot(_) => Some(("PNLTY SHT", RED)), + TimeoutSnapshot::Black(_) => Some(( + if tall { "BLK T/O" } else { "BLACK TIMEOUT" }, + TextStyle::Black, + )), + TimeoutSnapshot::Ref(_) => Some(("REF TMOUT", TextStyle::Yellow)), + TimeoutSnapshot::PenaltyShot(_) => Some(("PNLTY SHT", TextStyle::Red)), TimeoutSnapshot::None => None, }; @@ -384,15 +439,15 @@ pub(super) fn make_game_time_button<'a>( } let button_height = if tall { - Length::Units(MIN_BUTTON_SIZE + SMALL_PLUS_TEXT + PADDING) + Length::Fixed(MIN_BUTTON_SIZE + SMALL_PLUS_TEXT + PADDING) } else { - Length::Units(MIN_BUTTON_SIZE) + Length::Fixed(MIN_BUTTON_SIZE) }; let button_style = if make_red { - style::Button::Red + ButtonStyle::Red } else { - style::Button::Gray + ButtonStyle::Gray }; let time_button = button(content) @@ -406,28 +461,30 @@ pub(super) fn make_game_time_button<'a>( Message::EditTime }); - let mut time_row = row() + let mut time_row = row![time_button] .height(button_height) .width(Length::Fill) - .spacing(SPACING) - .push(time_button); + .spacing(SPACING); if mode == Mode::Rugby { - let play_pause_text = if clock_running { - "\u{25AE} \u{25AE}" - } else { - "\u{25B6}" - }; - let play_pause_text = text(play_pause_text) - .size(LARGE_TEXT) - .vertical_alignment(Vertical::Center) - .horizontal_alignment(Horizontal::Center) - .width(Length::Fill) - .height(Length::Fill); - let mut play_pause_button = button(play_pause_text) - .style(style::Button::Gray) + let play_pause_icon = container( + Svg::new(svg::Handle::from_memory(if clock_running { + &include_bytes!("../../../resources/pause.svg")[..] + } else { + &include_bytes!("../../../resources/play_arrow.svg")[..] + })) + .style(SvgStyle::Black) + .height(Length::Fixed(LARGE_TEXT * 1.2)), + ) + .width(Length::Fill) + .height(Length::Fill) + .style(ContainerStyle::Transparent) + .center_x() + .center_y(); + let mut play_pause_button = button(play_pause_icon) + .style(ButtonStyle::Gray) .height(button_height) - .width(Length::Units(MIN_BUTTON_SIZE)); + .width(Length::Fixed(MIN_BUTTON_SIZE)); if !editing_time { play_pause_button = play_pause_button.on_press(if clock_running { Message::StopClock @@ -441,75 +498,70 @@ pub(super) fn make_game_time_button<'a>( time_row } -pub(super) fn make_time_editor<'a, T: Into>( +pub(super) fn make_time_editor<'a, T: ToString>( title: T, time: Duration, timeout: bool, ) -> Container<'a, Message> { let wide = time > Duration::from_secs(MAX_STRINGABLE_SECS as u64); + let min_edits = column![ + make_small_button("+", LARGE_TEXT) + .style(ButtonStyle::Blue) + .on_press(Message::ChangeTime { + increase: true, + secs: 60, + timeout, + }), + make_small_button("-", LARGE_TEXT) + .style(ButtonStyle::Blue) + .on_press(Message::ChangeTime { + increase: false, + secs: 60, + timeout, + }), + ] + .spacing(SPACING); + + let sec_edits = column![ + make_small_button("+", LARGE_TEXT) + .style(ButtonStyle::Blue) + .on_press(Message::ChangeTime { + increase: true, + secs: 1, + timeout, + }), + make_small_button("-", LARGE_TEXT) + .style(ButtonStyle::Blue) + .on_press(Message::ChangeTime { + increase: false, + secs: 1, + timeout, + }), + ] + .spacing(SPACING); + + let time_edit = row![ + min_edits, + text(time_string(time)) + .size(LARGE_TEXT) + .line_height(LINE_HEIGHT) + .horizontal_alignment(Horizontal::Center) + .width(Length::Fixed(if wide { 300.0 } else { 200.0 })), + sec_edits, + ] + .spacing(SPACING) + .align_items(Alignment::Center); + container( - column() - .spacing(SPACING) - .align_items(Alignment::Center) - .push(text(title).size(MEDIUM_TEXT)) - .push( - row() - .spacing(SPACING) - .align_items(Alignment::Center) - .push( - column() - .spacing(SPACING) - .push( - make_small_button("+", LARGE_TEXT) - .style(style::Button::Blue) - .on_press(Message::ChangeTime { - increase: true, - secs: 60, - timeout, - }), - ) - .push( - make_small_button("-", LARGE_TEXT) - .style(style::Button::Blue) - .on_press(Message::ChangeTime { - increase: false, - secs: 60, - timeout, - }), - ), - ) - .push( - text(time_string(time)) - .size(LARGE_TEXT) - .horizontal_alignment(Horizontal::Center) - .width(Length::Units(if wide { 300 } else { 200 })), - ) - .push( - column() - .spacing(SPACING) - .push( - make_small_button("+", LARGE_TEXT) - .style(style::Button::Blue) - .on_press(Message::ChangeTime { - increase: true, - secs: 1, - timeout, - }), - ) - .push( - make_small_button("-", LARGE_TEXT) - .style(style::Button::Blue) - .on_press(Message::ChangeTime { - increase: false, - secs: 1, - timeout, - }), - ), - ), - ), + column![ + text(title).size(MEDIUM_TEXT).line_height(LINE_HEIGHT), + time_edit + ] + .spacing(SPACING) + .align_items(Alignment::Center), ) - .style(style::Container::LightGray) + .style(ContainerStyle::LightGray) .padding(PADDING) } @@ -694,19 +746,36 @@ pub(super) fn config_string( result } -pub(super) fn make_button<'a, Message: Clone, T: Into>(label: T) -> Button<'a, Message> { +pub(super) fn make_button<'a, Message: Clone, T: ToString>(label: T) -> Button<'a, Message> { + button(centered_text(label)) + .padding(PADDING) + .height(Length::Fixed(MIN_BUTTON_SIZE)) + .width(Length::Fill) +} + +pub(super) fn make_multi_label_button<'a, Message: 'a + Clone, T: ToString>( + labels: (T, T), +) -> Button<'a, Message> { button( - text(label) - .vertical_alignment(Vertical::Center) - .horizontal_alignment(Horizontal::Center) - .width(Length::Fill), + column![centered_text(labels.0), centered_text(labels.1)] + .width(Length::Fill) + .height(Length::Fill), ) .padding(PADDING) - .height(Length::Units(MIN_BUTTON_SIZE)) + .height(Length::Fixed(MIN_BUTTON_SIZE)) .width(Length::Fill) } -pub(super) fn make_message_button<'a, Message: Clone, T: Into>( +fn centered_text<'a, T: ToString>(label: T) -> Text<'a> { + text(label) + .line_height(LINE_HEIGHT) + .vertical_alignment(Vertical::Center) + .horizontal_alignment(Horizontal::Center) + .width(Length::Fill) + .height(Length::Fill) +} + +pub(super) fn make_message_button<'a, Message: Clone, T: ToString>( label: T, message: Option, ) -> Button<'a, Message> { @@ -717,55 +786,59 @@ pub(super) fn make_message_button<'a, Message: Clone, T: Into>( } } -pub(super) fn make_small_button<'a, Message: Clone, T: Into>( +pub(super) fn make_multi_label_message_button<'a, Message: 'a + Clone, T: ToString>( + labels: (T, T), + message: Option, +) -> Button<'a, Message> { + if let Some(msg) = message { + make_multi_label_button(labels).on_press(msg) + } else { + make_multi_label_button(labels) + } +} + +pub(super) fn make_small_button<'a, Message: Clone, T: ToString>( label: T, - size: u16, + size: f32, ) -> Button<'a, Message> { - button( - text(label) - .size(size) - .vertical_alignment(Vertical::Center) - .horizontal_alignment(Horizontal::Center) - .width(Length::Fill), - ) - .width(Length::Units(MIN_BUTTON_SIZE)) - .height(Length::Units(MIN_BUTTON_SIZE)) + button(centered_text(label).size(size)) + .width(Length::Fixed(MIN_BUTTON_SIZE)) + .height(Length::Fixed(MIN_BUTTON_SIZE)) } -pub(super) fn make_value_button<'a, Message: 'a + Clone, T: Into, U: Into>( +pub(super) fn make_value_button<'a, Message: 'a + Clone, T: ToString, U: ToString>( first_label: T, second_label: U, large_text: (bool, bool), message: Option, ) -> Button<'a, Message> { let mut button = button( - row() - .spacing(SPACING) - .align_items(Alignment::Center) - .push( - text(first_label) - .size(if large_text.0 { - MEDIUM_TEXT - } else { - SMALL_TEXT - }) - .vertical_alignment(Vertical::Center), - ) - .push(horizontal_space(Length::Fill)) - .push( - text(second_label) - .size(if large_text.1 { - MEDIUM_TEXT - } else { - SMALL_TEXT - }) - .vertical_alignment(Vertical::Center), - ), + row![ + text(first_label) + .size(if large_text.0 { + MEDIUM_TEXT + } else { + SMALL_TEXT + }) + .line_height(LINE_HEIGHT) + .vertical_alignment(Vertical::Center), + horizontal_space(Length::Fill), + text(second_label) + .size(if large_text.1 { + MEDIUM_TEXT + } else { + SMALL_TEXT + }) + .line_height(LINE_HEIGHT) + .vertical_alignment(Vertical::Center), + ] + .spacing(SPACING) + .align_items(Alignment::Center) + .padding(PADDING), ) - .padding(PADDING) .height(Length::Fill) .width(Length::Fill) - .style(style::Button::LightGray); + .style(ButtonStyle::LightGray); if let Some(message) = message { button = button.on_press(message); diff --git a/refbox/src/app/view_builders/time_edit.rs b/refbox/src/app/view_builders/time_edit.rs index bfe4aef3..89128fb1 100644 --- a/refbox/src/app/view_builders/time_edit.rs +++ b/refbox/src/app/view_builders/time_edit.rs @@ -1,10 +1,10 @@ use super::{ - style::{self, SMALL_TEXT, SPACING}, + style::{ButtonStyle, LINE_HEIGHT, SMALL_TEXT, SPACING}, *, }; use iced::{ alignment::Horizontal, - pure::{column, horizontal_space, row, text, vertical_space, Element}, + widget::{column, horizontal_space, row, text, vertical_space}, Alignment, Length, }; use std::time::Duration; @@ -17,12 +17,13 @@ pub(in super::super) fn build_time_edit_view<'a>( mode: Mode, clock_running: bool, ) -> Element<'a, Message> { - let mut edit_row = row() - .spacing(SPACING) - .align_items(Alignment::Center) - .push(horizontal_space(Length::Fill)) - .push(make_time_editor("GAME TIME", time, false)) - .push(horizontal_space(Length::Fill)); + let mut edit_row = row![ + horizontal_space(Length::Fill), + make_time_editor("GAME TIME", time, false), + horizontal_space(Length::Fill) + ] + .spacing(SPACING) + .align_items(Alignment::Center); if snapshot.timeout != TimeoutSnapshot::None { edit_row = edit_row @@ -31,42 +32,31 @@ pub(in super::super) fn build_time_edit_view<'a>( .push(horizontal_space(Length::Fill)); } - column() - .spacing(SPACING) - .height(Length::Fill) - .push(make_game_time_button( - snapshot, - false, - true, - mode, - clock_running, - )) - .push(vertical_space(Length::Fill)) - .push( - text("Note: Game time is paused while on this screen") - .size(SMALL_TEXT) + column![ + make_game_time_button(snapshot, false, false, mode, clock_running), + vertical_space(Length::Fill), + text("Note: Game time is paused while on this screen") + .size(SMALL_TEXT) + .line_height(LINE_HEIGHT) + .width(Length::Fill) + .horizontal_alignment(Horizontal::Center), + vertical_space(Length::Fill), + edit_row, + vertical_space(Length::Fill), + row![ + make_button("CANCEL") + .style(ButtonStyle::Red) .width(Length::Fill) - .horizontal_alignment(Horizontal::Center), - ) - .push(vertical_space(Length::Fill)) - .push(edit_row) - .push(vertical_space(Length::Fill)) - .push( - row() - .spacing(SPACING) - .push( - make_button("CANCEL") - .style(style::Button::Red) - .width(Length::Fill) - .on_press(Message::TimeEditComplete { canceled: true }), - ) - .push(horizontal_space(Length::Fill)) - .push( - make_button("DONE") - .style(style::Button::Green) - .width(Length::Fill) - .on_press(Message::TimeEditComplete { canceled: false }), - ), - ) - .into() + .on_press(Message::TimeEditComplete { canceled: true }), + horizontal_space(Length::Fill), + make_button("DONE") + .style(ButtonStyle::Green) + .width(Length::Fill) + .on_press(Message::TimeEditComplete { canceled: false }), + ] + .spacing(SPACING), + ] + .spacing(SPACING) + .height(Length::Fill) + .into() } diff --git a/refbox/src/main.rs b/refbox/src/main.rs index 1a489eac..097c16b1 100644 --- a/refbox/src/main.rs +++ b/refbox/src/main.rs @@ -1,7 +1,8 @@ #![cfg_attr(windows, windows_subsystem = "windows")] use clap::Parser; -use iced::{pure::Application, window::icon::Icon, Settings}; +use iced::{window::icon, Application, Settings}; +use iced_core::Font; use log::*; #[cfg(debug_assertions)] use log4rs::append::console::{ConsoleAppender, Target}; @@ -181,7 +182,7 @@ fn main() -> std::result::Result<(), Box> { let spacing = args.spacing.unwrap_or(args.scale / 4.0); let icon = - Icon::from_rgba(Vec::from(app_icon::DATA), app_icon::WIDTH, app_icon::HEIGHT).unwrap(); + icon::from_rgba(Vec::from(app_icon::DATA), app_icon::WIDTH, app_icon::HEIGHT).unwrap(); if args.is_simulator { let flags = sim_app::SimRefBoxAppFlags { @@ -308,7 +309,12 @@ fn main() -> std::result::Result<(), Box> { settings.window.resizable = false; settings.window.icon = Some(icon); settings.default_text_size = app::style::SMALL_PLUS_TEXT; - settings.default_font = Some(include_bytes!("../resources/Roboto-Medium.ttf")); + settings.default_font = Font { + family: iced_core::font::Family::Name("Roboto"), + weight: iced_core::font::Weight::Medium, + stretch: iced_core::font::Stretch::Normal, + monospaced: false, + }; info!("Starting UI"); app::RefBoxApp::run(settings)?; diff --git a/refbox/src/sim_app/mod.rs b/refbox/src/sim_app/mod.rs index 2d774b04..dda4d191 100644 --- a/refbox/src/sim_app/mod.rs +++ b/refbox/src/sim_app/mod.rs @@ -1,19 +1,21 @@ use arrayref::array_ref; use iced::{ - canvas::{Cache, Cursor, Fill, Geometry, Program}, - executor, Application, Canvas, Color, Command, Element, Length, Point, Rectangle, Size, - Subscription, + application, executor, + mouse::Cursor, + widget::canvas::{Cache, Canvas, Fill, Geometry, Program}, + Application, Color, Command, Length, Point, Rectangle, Size, Subscription, }; use iced_futures::{ futures::{ future::{pending, Pending}, stream::{self, BoxStream}, }, - subscription::Recipe, + subscription::{EventStream, Recipe}, }; +use iced_runtime::{command, window}; use log::*; use matrix_drawing::{draw_panels, transmitted_data::TransmittedData}; -use std::{hash::Hasher, rc::Rc, sync::Mutex}; +use std::{rc::Rc, sync::Mutex}; use tokio::{ net::TcpStream, time::{self, Duration}, @@ -22,7 +24,6 @@ use tokio::{ mod display_simulator; use display_simulator::*; -const WINDOW_BACKGROUND: Color = Color::BLACK; const WIDTH: usize = 256; const HEIGHT: usize = 64; @@ -45,7 +46,6 @@ pub struct SimRefBoxApp { buffer: Rc>>, cache: Cache, listener: SnapshotListener, - should_stop: bool, } #[derive(Clone, Debug)] @@ -53,9 +53,33 @@ pub struct SimRefBoxAppFlags { pub tcp_port: u16, } +#[derive(Clone, Copy, Debug, Default)] +pub enum ApplicationTheme { + #[default] + Dark, +} + +#[derive(Clone, Copy, Debug, Default)] +pub struct ApplicationStyle {} + +impl application::StyleSheet for ApplicationTheme { + type Style = ApplicationStyle; + + fn appearance(&self, _style: &Self::Style) -> application::Appearance { + application::Appearance { + background_color: Color::BLACK, + text_color: Color::BLACK, + } + } +} + +type Renderer = iced_renderer::Renderer; +type Element<'a, Message> = iced::Element<'a, Message, Renderer>; + impl Application for SimRefBoxApp { type Executor = executor::Default; type Message = Message; + type Theme = ApplicationTheme; type Flags = SimRefBoxAppFlags; fn new(flags: Self::Flags) -> (Self, Command) { @@ -66,7 +90,6 @@ impl Application for SimRefBoxApp { buffer: Rc::new(Mutex::new(Default::default())), cache: Cache::new(), listener: SnapshotListener { port: tcp_port }, - should_stop: false, }, Command::none(), ) @@ -80,14 +103,6 @@ impl Application for SimRefBoxApp { "Panel Simulator".into() } - fn background_color(&self) -> iced::Color { - WINDOW_BACKGROUND - } - - fn should_exit(&self) -> bool { - self.should_stop - } - fn update(&mut self, message: Message) -> Command { trace!("Handling message: {message:?}"); match message { @@ -96,15 +111,14 @@ impl Application for SimRefBoxApp { buffer.clear_buffer(); draw_panels(&mut *buffer, data.snapshot, data.white_on_right, data.flash).unwrap(); self.cache.clear(); + Command::none() } - Message::Stop => self.should_stop = true, - Message::NoAction => {} + Message::Stop => Command::single(command::Action::Window(window::Action::Close)), + Message::NoAction => Command::none(), } - - Command::none() } - fn view(&mut self) -> Element { + fn view(&self) -> Element { Canvas::new(self) .width(Length::Fill) .height(Length::Fill) @@ -112,11 +126,20 @@ impl Application for SimRefBoxApp { } } -impl Program for SimRefBoxApp { - fn draw(&self, bounds: Rectangle, _cursor: Cursor) -> Vec { +impl Program for SimRefBoxApp { + type State = (); + + fn draw( + &self, + _state: &Self::State, + renderer: &Renderer, + _theme: &ApplicationTheme, + bounds: Rectangle, + _cursor: Cursor, + ) -> Vec { let buffer_ = self.buffer.clone(); let panel = - self.cache.draw(bounds.size(), |frame| { + self.cache.draw(renderer, bounds.size(), |frame| { let buffer = buffer_.lock().unwrap(); let horiz_spacing = frame.width() / ((WIDTH * 5 + 1) as f32); @@ -152,16 +175,16 @@ struct SnapshotListener { port: u16, } -impl Recipe for SnapshotListener { +impl Recipe for SnapshotListener { type Output = Message; - fn hash(&self, state: &mut H) { + fn hash(&self, state: &mut iced_core::Hasher) { use std::hash::Hash; "SnapshotListener".hash(state); } - fn stream(self: Box, _input: BoxStream<'static, I>) -> BoxStream<'static, Self::Output> { + fn stream(self: Box, _input: EventStream) -> BoxStream<'static, Self::Output> { info!("Sim: starting listener"); #[derive(Debug)] diff --git a/refbox/src/sound_controller/mod.rs b/refbox/src/sound_controller/mod.rs index caeadc03..050e2ea5 100644 --- a/refbox/src/sound_controller/mod.rs +++ b/refbox/src/sound_controller/mod.rs @@ -553,7 +553,7 @@ impl Sound { gain_r.connect_at(&_merger, 0, 1); gain_r.gain().set_value(volumes.right); - let source = context.create_buffer_source(); + let mut source = context.create_buffer_source(); source.set_buffer(buffer); source.connect(&gain_l); source.connect(&gain_r); @@ -599,7 +599,7 @@ impl Sound { } } - async fn stop(self) { + async fn stop(mut self) { let fade_end = self.context.current_time() + FADE_LEN; // Set the gains so that the start of the fade is now, not when the sound started diff --git a/uwh-common/Cargo.toml b/uwh-common/Cargo.toml index e62f6937..487230b5 100644 --- a/uwh-common/Cargo.toml +++ b/uwh-common/Cargo.toml @@ -23,7 +23,7 @@ time = { version = "0.3", features = [ "serde", "serde-human-readable", ], optional = true } -toml = { version = "0.5", optional = true } +toml = { version = "0.8", optional = true } [dev-dependencies] env_logger = "0.9"