diff --git a/Cargo.lock b/Cargo.lock index be7d7a2..b1d77e2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,12 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" - [[package]] name = "ab_glyph" version = "0.2.28" @@ -73,6 +67,33 @@ version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +[[package]] +name = "android-activity" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" +dependencies = [ + "android-properties", + "bitflags 2.6.0", + "cc", + "cesu8", + "jni", + "jni-sys", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "num_enum", + "thiserror", +] + +[[package]] +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" @@ -169,15 +190,15 @@ checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" [[package]] name = "arrayvec" -version = "0.5.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] -name = "arrayvec" -version = "0.7.4" +name = "as-raw-xcb-connection" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" [[package]] name = "ash" @@ -188,6 +209,12 @@ dependencies = [ "libloading 0.7.4", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "autocfg" version = "1.3.0" @@ -260,12 +287,46 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "block2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b55663a85f33501257357e6421bb33e769d5c9ffb5ba0921c975a123e35e68" +dependencies = [ + "block-sys", + "objc2 0.4.1", +] + +[[package]] +name = "block2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +dependencies = [ + "objc2 0.5.2", +] + [[package]] name = "bumpalo" version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +[[package]] +name = "by_address" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" + [[package]] name = "bytemuck" version = "1.16.1" @@ -300,16 +361,16 @@ checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" [[package]] name = "calloop" -version = "0.10.6" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e0d00eb1ea24371a97d2da6201c6747a633dc6dc1988ef503403b4c59504a8" +checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "log", - "nix 0.25.1", - "slotmap", + "polling", + "rustix", + "slab", "thiserror", - "vec_map", ] [[package]] @@ -326,6 +387,18 @@ dependencies = [ "thiserror", ] +[[package]] +name = "calloop-wayland-source" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" +dependencies = [ + "calloop 0.12.4", + "rustix", + "wayland-backend", + "wayland-client", +] + [[package]] name = "calloop-wayland-source" version = "0.3.0" @@ -335,7 +408,7 @@ dependencies = [ "calloop 0.13.0", "rustix", "wayland-backend", - "wayland-client 0.31.5", + "wayland-client", ] [[package]] @@ -343,6 +416,16 @@ name = "cc" version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" [[package]] name = "cfg-if" @@ -356,6 +439,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" version = "0.4.38" @@ -373,13 +462,11 @@ dependencies = [ [[package]] name = "clipboard-win" -version = "4.5.0" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362" +checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" dependencies = [ "error-code", - "str-buf", - "winapi", ] [[package]] @@ -418,61 +505,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6173fd61b610d15a7566dd7b7620775627441c4ab9dac8906e17cb93a24b782" -[[package]] -name = "cmake" -version = "0.1.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" -dependencies = [ - "cc", -] - -[[package]] -name = "cocoa" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" -dependencies = [ - "bitflags 1.3.2", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics 0.22.3", - "foreign-types 0.3.2", - "libc", - "objc", -] - -[[package]] -name = "cocoa" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" -dependencies = [ - "bitflags 1.3.2", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics 0.23.2", - "foreign-types 0.5.0", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" -dependencies = [ - "bitflags 1.3.2", - "block", - "core-foundation", - "core-graphics-types", - "libc", - "objc", -] - [[package]] name = "codespan-reporting" version = "0.11.1" @@ -550,8 +582,6 @@ dependencies = [ "i18n-embed", "i18n-embed-fl", "iced", - "iced_lazy", - "iced_native", "itertools 0.13.0", "lazy_static", "log", @@ -604,6 +634,47 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +[[package]] +name = "com" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e17887fd17353b65b1b2ef1c526c83e26cd72e74f598a8dc1bee13a48f3d9f6" +dependencies = [ + "com_macros", +] + +[[package]] +name = "com_macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d375883580a668c7481ea6631fc1a8863e33cc335bf56bfad8d7e6d4b04b13a5" +dependencies = [ + "com_macros_support", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "com_macros_support" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad899a1087a9296d5644792d7cb72b8e34c1bec8e7d4fbc002230169a6e8710c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + [[package]] name = "concurrent-queue" version = "2.5.0" @@ -623,12 +694,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "const_panic" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6051f239ecec86fde3410901ab7860d458d160371533842974fc61f96d15879b" - [[package]] name = "convert_case" version = "0.6.0" @@ -654,19 +719,6 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" -[[package]] -name = "core-graphics" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "core-graphics-types", - "foreign-types 0.3.2", - "libc", -] - [[package]] name = "core-graphics" version = "0.23.2" @@ -692,15 +744,24 @@ dependencies = [ ] [[package]] -name = "core-text" -version = "20.1.0" +name = "cosmic-text" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9d2790b5c08465d49f8dc05c8bcae9fea467855947db39b0f8145c091aaced5" +checksum = "75acbfb314aeb4f5210d379af45ed1ec2c98c7f1790bf57b8a4c562ac0c51b71" dependencies = [ - "core-foundation", - "core-graphics 0.23.2", - "foreign-types 0.5.0", - "libc", + "fontdb", + "libm", + "log", + "rangemap", + "rustc-hash", + "rustybuzz", + "self_cell 1.0.4", + "swash", + "sys-locale", + "unicode-bidi", + "unicode-linebreak", + "unicode-script", + "unicode-segmentation", ] [[package]] @@ -721,34 +782,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "crossbeam-channel" -version = "0.5.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" version = "0.8.20" @@ -756,27 +789,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] -name = "crossfont" -version = "0.5.2" +name = "crunchy" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb5a3822b594afc99b503cc1859b94686d3c3efdd60507a28587dab80ee1071" -dependencies = [ - "cocoa 0.25.0", - "core-foundation", - "core-foundation-sys", - "core-graphics 0.23.2", - "core-text", - "dwrote", - "foreign-types 0.5.0", - "freetype-rs", - "libc", - "log", - "objc", - "once_cell", - "pkg-config", - "servo-fontconfig", - "winapi", -] +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-common" @@ -812,10 +828,10 @@ dependencies = [ ] [[package]] -name = "cty" -version = "0.2.2" +name = "ctor-lite" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" +checksum = "1f791803201ab277ace03903de1594460708d2d54df6053f2d9e82f592b19e3b" [[package]] name = "cursor-icon" @@ -825,50 +841,15 @@ checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" [[package]] name = "d3d12" -version = "0.5.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "827914e1f53b1e0e025ecd3d967a7836b7bcb54520f90e21ef8df7b4d88a2759" +checksum = "3e3d747f100290a1ca24b752186f61f6637e1deffe3bf6320de6fcb29510a307" dependencies = [ - "bitflags 1.3.2", - "libloading 0.7.4", + "bitflags 2.6.0", + "libloading 0.8.5", "winapi", ] -[[package]] -name = "darling" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" -dependencies = [ - "darling_core", - "quote", - "syn 1.0.109", -] - [[package]] name = "dashmap" version = "5.5.3" @@ -876,7 +857,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown 0.14.5", + "hashbrown", "lock_api", "once_cell", "parking_lot_core 0.9.10", @@ -957,77 +938,70 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] -name = "dtoa" -version = "1.0.9" +name = "drm" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" +checksum = "98888c4bbd601524c11a7ed63f814b8825f420514f78e96f752c437ae9cbb5d1" +dependencies = [ + "bitflags 2.6.0", + "bytemuck", + "drm-ffi", + "drm-fourcc", + "rustix", +] [[package]] -name = "dtoa-short" -version = "0.3.5" +name = "drm-ffi" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +checksum = "97c98727e48b7ccb4f4aea8cfe881e5b07f702d17b7875991881b41af7278d53" dependencies = [ - "dtoa", + "drm-sys", + "rustix", ] [[package]] -name = "dwrote" -version = "0.11.0" +name = "drm-fourcc" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b" -dependencies = [ - "lazy_static", - "libc", - "serde", - "serde_derive", - "winapi", - "wio", -] +checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" [[package]] -name = "ego-tree" -version = "0.6.2" +name = "drm-sys" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68a4904193147e0a8dec3314640e6db742afd5f6e634f428a6af230d9b3591" +checksum = "fd39dde40b6e196c2e8763f23d119ddb1a8714534bf7d77fa97a65b0feda3986" +dependencies = [ + "libc", + "linux-raw-sys 0.6.4", +] [[package]] -name = "either" -version = "1.13.0" +name = "dtoa" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" [[package]] -name = "encase" -version = "0.3.0" +name = "dtoa-short" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a516181e9a36e8982cb37933c5e7dba638c42938cacde46ee4e5b4156f881b9" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" dependencies = [ - "const_panic", - "encase_derive", - "glam", - "thiserror", + "dtoa", ] [[package]] -name = "encase_derive" -version = "0.3.0" +name = "ego-tree" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5b802412eea315f29f2bb2da3a5963cd6121f56eaa06aebcdc0c54eea578f22" -dependencies = [ - "encase_derive_impl", -] +checksum = "3a68a4904193147e0a8dec3314640e6db742afd5f6e634f428a6af230d9b3591" [[package]] -name = "encase_derive_impl" -version = "0.3.0" +name = "either" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f2f4de457d974f548d2c2a16f709ebd81013579e543bd1a9b19ced88132c2cf" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "encoding_rs" @@ -1088,12 +1062,18 @@ dependencies = [ [[package]] name = "error-code" -version = "2.3.1" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" +checksum = "a0474425d51df81997e2f90a21591180b38eccf27292d755f3e30750225c175b" + +[[package]] +name = "etagere" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e2f1e3be19fb10f549be8c1bf013e8675b4066c445e36eb76d2ebb2f54ee495" dependencies = [ - "libc", - "str-buf", + "euclid", + "svg_fmt", ] [[package]] @@ -1106,14 +1086,10 @@ dependencies = [ ] [[package]] -name = "expat-sys" -version = "2.1.6" +name = "fast-srgb8" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658f19728920138342f68408b7cf7644d90d4784353d8ebc32e7e8663dbe45fa" -dependencies = [ - "cmake", - "pkg-config", -] +checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1" [[package]] name = "fastrand" @@ -1169,7 +1145,7 @@ dependencies = [ "fluent-syntax", "intl-memoizer", "intl_pluralrules", - "rustc-hash 1.1.0", + "rustc-hash", "self_cell 0.10.3", "smallvec", "unic-langid", @@ -1199,6 +1175,38 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "font-types" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34fd7136aca682873d859ef34494ab1a7d3f57ecd485ed40eb6437ee8c85aa29" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "fontconfig-parser" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a595cb550439a117696039dfc69830492058211b771a2a165379f2a1a53d84d" +dependencies = [ + "roxmltree", +] + +[[package]] +name = "fontdb" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "020e203f177c0fb250fb19455a252e838d2bbbce1f80f25ecc42402aafa8cd38" +dependencies = [ + "fontconfig-parser", + "log", + "memmap2 0.8.0", + "slotmap", + "tinyvec", + "ttf-parser 0.19.2", +] + [[package]] name = "foreign-types" version = "0.3.2" @@ -1247,29 +1255,7 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ - "percent-encoding", -] - -[[package]] -name = "freetype-rs" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74eadec9d0a5c28c54bb9882e54787275152a4e36ce206b45d7451384e5bf5fb" -dependencies = [ - "bitflags 1.3.2", - "freetype-sys", - "libc", -] - -[[package]] -name = "freetype-sys" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a37d4011c0cc628dfa766fcc195454f4b068d7afdc2adfd28861191d866e731a" -dependencies = [ - "cmake", - "libc", - "pkg-config", + "percent-encoding", ] [[package]] @@ -1427,17 +1413,28 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + [[package]] name = "glam" -version = "0.21.3" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518faa5064866338b013ff9b2350dc318e14cc4fcd6cb8206d7e7c9886c98815" +checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3" [[package]] name = "glow" -version = "0.11.2" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8bd5877156a19b8ac83a29b2306fe20537429d318f3ff0a1a2119f8d9c61919" +checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1" dependencies = [ "js-sys", "slotmap", @@ -1446,60 +1443,56 @@ dependencies = [ ] [[package]] -name = "glyph_brush" -version = "0.7.9" +name = "glutin_wgl_sys" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca26e3a8a43052ca015c0b1ce055035ff5bc47afddff5b01c7141e0c3e3a2a1" +checksum = "6c8098adac955faa2d31079b65dc48841251f69efd3ac25477903fc424362ead" dependencies = [ - "glyph_brush_draw_cache", - "glyph_brush_layout", - "ordered-float", - "rustc-hash 2.0.0", - "twox-hash", + "gl_generator", ] [[package]] -name = "glyph_brush_draw_cache" -version = "0.1.6" +name = "glyphon" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6c910def52365fef3f439a6b50a4d5c11b28eec4cf6c191f6dfea18e88d7f" +checksum = "6a62d0338e4056db6a73221c2fb2e30619452f6ea9651bac4110f51b0f7a7581" dependencies = [ - "ab_glyph", - "crossbeam-channel", - "crossbeam-deque", - "linked-hash-map", - "rayon", - "rustc-hash 2.0.0", + "cosmic-text", + "etagere", + "lru", + "wgpu", ] [[package]] -name = "glyph_brush_layout" -version = "0.2.4" +name = "gpu-alloc" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1e288bfd2f6c0313f78bf5aa538356ad481a3bb97e9b7f93220ab0066c5992" +checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" dependencies = [ - "ab_glyph", - "approx", - "xi-unicode", + "bitflags 2.6.0", + "gpu-alloc-types", ] [[package]] -name = "gpu-alloc" -version = "0.5.4" +name = "gpu-alloc-types" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22beaafc29b38204457ea030f6fb7a84c9e4dd1b86e311ba0542533453d87f62" +checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" dependencies = [ - "bitflags 1.3.2", - "gpu-alloc-types", + "bitflags 2.6.0", ] [[package]] -name = "gpu-alloc-types" -version = "0.2.0" +name = "gpu-allocator" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54804d0d6bc9d7f26db4eaec1ad10def69b599315f487d32c334a80d1efe67a5" +checksum = "6f56f6318968d03c18e1bcf4857ff88c61157e9da8e47c5f29055d60e1228884" dependencies = [ - "bitflags 1.3.2", + "log", + "presser", + "thiserror", + "winapi", + "windows", ] [[package]] @@ -1510,7 +1503,7 @@ checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c" dependencies = [ "bitflags 2.6.0", "gpu-descriptor-types", - "hashbrown 0.14.5", + "hashbrown", ] [[package]] @@ -1544,7 +1537,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.2.6", + "indexmap", "slab", "tokio", "tokio-util", @@ -1552,10 +1545,14 @@ dependencies = [ ] [[package]] -name = "hashbrown" -version = "0.12.3" +name = "half" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] [[package]] name = "hashbrown" @@ -1567,6 +1564,27 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "hassle-rs" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890" +dependencies = [ + "bitflags 2.6.0", + "com", + "libc", + "libloading 0.8.5", + "thiserror", + "widestring", + "winapi", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + [[package]] name = "heck" version = "0.5.0" @@ -1778,37 +1796,44 @@ dependencies = [ [[package]] name = "iced" -version = "0.8.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d11492d829f0035ed3fa9217faccf16e57a5612a74dc7c49822c6f6a5ab1b829" +checksum = "7d4eb0fbbefb8c428b70680e77ed9013887b17c1d6be366b40f264f956d1a096" dependencies = [ "iced_core", "iced_futures", - "iced_graphics", - "iced_native", - "iced_wgpu", + "iced_renderer", + "iced_widget", "iced_winit", "thiserror", ] [[package]] name = "iced_core" -version = "0.8.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cc28737fc055fbc0a938141debf04a397dccaf53a4c51cb5bfcf76ee03b04f1" +checksum = "7d7e6bbd197f311ed3d8b71651876b0ce01318fde52cda862a9a7a4373c9b930" dependencies = [ - "bitflags 1.3.2", - "instant", + "bitflags 2.6.0", + "glam", + "log", + "num-traits", "palette", + "raw-window-handle", + "smol_str", + "thiserror", + "web-time", + "xxhash-rust", ] [[package]] name = "iced_futures" -version = "0.6.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "215d51fa4f70dbb63775d7141243c4d98d4d525d8949695601f8fbac7dcbc04e" +checksum = "370bad88fb3832cbeeb3fa6c486b4701fb7e8da32a753b3101d4ce81fc1d9497" dependencies = [ "futures", + "iced_core", "log", "wasm-bindgen-futures", "wasm-timer", @@ -1816,87 +1841,123 @@ dependencies = [ [[package]] name = "iced_graphics" -version = "0.7.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d58ad90b769e97bd245946b03c4932f82841c8645a7cee47d99115c8b341e8aa" +checksum = "6a044c193ef0840eacabfa05424717331d1fc5b3ecb9a89316200c75da2ba9a4" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "bytemuck", - "glam", - "iced_native", - "iced_style", + "cosmic-text", + "half", + "iced_core", + "iced_futures", "log", - "raw-window-handle 0.5.2", + "once_cell", + "raw-window-handle", + "rustc-hash", "thiserror", + "unicode-segmentation", + "xxhash-rust", ] [[package]] -name = "iced_lazy" -version = "0.5.0" +name = "iced_renderer" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "370ffb291ff5609ca488a2596df98a049b2a4d572c621aa0b2c586694ca327cf" +checksum = "5c281e03001d566058f53dec9325bbe61c62da715341206d2627f57a3ecc7f69" dependencies = [ - "iced_native", - "ouroboros", + "iced_graphics", + "iced_tiny_skia", + "iced_wgpu", + "log", + "thiserror", ] [[package]] -name = "iced_native" -version = "0.9.1" +name = "iced_runtime" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9942cdcd78591e816aae558721942aa366b03ed7f3f964b51de23c68ec78be7" +checksum = "a79f852c01cc6d61663c94379cb3974ac3ad315a28c504e847d573e094f46822" dependencies = [ "iced_core", "iced_futures", - "iced_style", - "num-traits", - "twox-hash", - "unicode-segmentation", + "raw-window-handle", + "thiserror", ] [[package]] name = "iced_style" -version = "0.7.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad5eb9547d32b9ff9b019526657974112b86baab58b2b91b1624316b309700b6" +checksum = "2ea42a740915d2a5a9ff9c3aa0bca28b16e9fb660bc8f675eed71d186cadb579" dependencies = [ "iced_core", "once_cell", "palette", ] +[[package]] +name = "iced_tiny_skia" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c2228781f4d381a1cbbd7905a9f077351aa8d37269094021d5d9e779f130aff" +dependencies = [ + "bytemuck", + "cosmic-text", + "iced_graphics", + "kurbo", + "log", + "rustc-hash", + "softbuffer", + "tiny-skia", + "xxhash-rust", +] + [[package]] name = "iced_wgpu" -version = "0.9.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbdcca29092b56f6715dfbc183796b627d3ead82883594e7d6babf5c76151c45" +checksum = "e3c243b6700452886aac1ee1987e84d9fb43b56b53fea9a1eb67713fd0fde244" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "bytemuck", - "encase", "futures", "glam", - "glyph_brush", + "glyphon", "guillotiere", "iced_graphics", - "iced_native", "log", - "raw-window-handle 0.5.2", + "once_cell", "wgpu", - "wgpu_glyph", +] + +[[package]] +name = "iced_widget" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e01b2212adecf1cb80e2267f302c0e0c263e55f97812056949199ccf9f0b908" +dependencies = [ + "iced_renderer", + "iced_runtime", + "iced_style", + "num-traits", + "ouroboros", + "thiserror", + "unicode-segmentation", ] [[package]] name = "iced_winit" -version = "0.8.0" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ef7747251a0b4a417589c5a8139d1858edf88d05566018a1a0b772d0229ef68" +checksum = "63f66831d0e399b93f631739121a6171780d344b275d56808b9504d8ca75c7d2" dependencies = [ - "iced_futures", "iced_graphics", - "iced_native", + "iced_runtime", + "iced_style", "log", "thiserror", + "tracing", "web-sys", "winapi", "window_clipboard", @@ -1904,10 +1965,15 @@ dependencies = [ ] [[package]] -name = "ident_case" -version = "1.0.1" +name = "icrate" +version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +checksum = "99d3aaff8a54577104bafdf686ff18565c3b6903ca5782a2026ef06e2c7aa319" +dependencies = [ + "block2 0.3.0", + "dispatch", + "objc2 0.4.1", +] [[package]] name = "idna" @@ -1919,16 +1985,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - [[package]] name = "indexmap" version = "2.2.6" @@ -1936,7 +1992,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown", ] [[package]] @@ -1946,9 +2002,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", ] [[package]] @@ -2006,12 +2059,37 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + [[package]] name = "jni-sys" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +[[package]] +name = "jobserver" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +dependencies = [ + "libc", +] + [[package]] name = "js-sys" version = "0.3.69" @@ -2023,15 +2101,31 @@ dependencies = [ [[package]] name = "khronos-egl" -version = "4.1.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c2352bd1d0bceb871cb9d40f24360c8133c11d7486b68b5381c1dd1a32015e3" +checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" dependencies = [ "libc", - "libloading 0.7.4", + "libloading 0.8.5", "pkg-config", ] +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + +[[package]] +name = "kurbo" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1618d4ebd923e97d67e7cd363d80aef35fe961005cbbbb3d2dad8bdd1bc63440" +dependencies = [ + "arrayvec", + "smallvec", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -2064,21 +2158,32 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + [[package]] name = "libredox" -version = "0.1.3" +version = "0.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" dependencies = [ "bitflags 2.6.0", "libc", + "redox_syscall 0.4.1", ] [[package]] -name = "linked-hash-map" -version = "0.5.6" +name = "libredox" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", +] [[package]] name = "linux-raw-sys" @@ -2086,6 +2191,12 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "linux-raw-sys" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0b5399f6804fbab912acbd8878ed3532d506b7c951b8f9f164ef90fef39e3f4" + [[package]] name = "locale_config" version = "0.3.0" @@ -2115,6 +2226,15 @@ version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +[[package]] +name = "lru" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +dependencies = [ + "hashbrown", +] + [[package]] name = "mac" version = "0.1.1" @@ -2152,9 +2272,9 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memmap2" -version = "0.5.10" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +checksum = "43a5a03cefb0d953ec0be133036f14e109412fa594edc2f77227249db66cc3ed" dependencies = [ "libc", ] @@ -2168,27 +2288,19 @@ dependencies = [ "libc", ] -[[package]] -name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - [[package]] name = "metal" -version = "0.24.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de11355d1f6781482d027a3b4d4de7825dcedb197bf573e0596d00008402d060" +checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "block", "core-graphics-types", - "foreign-types 0.3.2", + "foreign-types 0.5.0", "log", "objc", + "paste", ] [[package]] @@ -2214,25 +2326,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", - "log", "wasi", "windows-sys 0.48.0", ] [[package]] name = "naga" -version = "0.10.1" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21bb1a241901d94de4725d638a5295187b046ceb89ed8b2be368038654d9c81d" +checksum = "50e3524642f53d9af419ab5e8dd29d3ba155708267667c2f3f06c88c9e130843" dependencies = [ "bit-set", - "bitflags 1.3.2", + "bitflags 2.6.0", "codespan-reporting", "hexf-parse", - "indexmap 1.9.3", + "indexmap", "log", "num-traits", - "rustc-hash 1.1.0", + "rustc-hash", "spirv", "termcolor", "thiserror", @@ -2251,99 +2362,46 @@ dependencies = [ "openssl-probe", "openssl-sys", "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "ndk" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" -dependencies = [ - "bitflags 1.3.2", - "jni-sys", - "ndk-sys", - "num_enum", - "raw-window-handle 0.5.2", - "thiserror", -] - -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - -[[package]] -name = "ndk-glue" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0434fabdd2c15e0aab768ca31d5b7b333717f03cf02037d5a0a3ff3c278ed67f" -dependencies = [ - "libc", - "log", - "ndk", - "ndk-context", - "ndk-macro", - "ndk-sys", - "once_cell", - "parking_lot 0.12.3", -] - -[[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", + "security-framework", + "security-framework-sys", + "tempfile", ] [[package]] -name = "ndk-sys" -version = "0.4.1+23.1.7779620" +name = "ndk" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" +checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" dependencies = [ + "bitflags 2.6.0", "jni-sys", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror", ] [[package]] -name = "new_debug_unreachable" -version = "1.0.6" +name = "ndk-context" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" [[package]] -name = "nix" -version = "0.24.3" +name = "ndk-sys" +version = "0.5.0+25.2.9519653" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset", + "jni-sys", ] [[package]] -name = "nix" -version = "0.25.1" +name = "new_debug_unreachable" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset", -] +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] name = "num-traits" @@ -2366,23 +2424,23 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.5.11" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.5.11" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.72", ] [[package]] @@ -2406,6 +2464,122 @@ dependencies = [ "objc_id", ] +[[package]] +name = "objc-sys" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" + +[[package]] +name = "objc2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d" +dependencies = [ + "objc-sys", + "objc2-encode 3.0.0", +] + +[[package]] +name = "objc2" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +dependencies = [ + "objc-sys", + "objc2-encode 4.0.3", +] + +[[package]] +name = "objc2-app-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +dependencies = [ + "bitflags 2.6.0", + "block2 0.5.1", + "libc", + "objc2 0.5.2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "objc2-core-data" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +dependencies = [ + "bitflags 2.6.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-image" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +dependencies = [ + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc2-encode" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666" + +[[package]] +name = "objc2-encode" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" + +[[package]] +name = "objc2-foundation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" +dependencies = [ + "bitflags 2.6.0", + "block2 0.5.1", + "dispatch", + "libc", + "objc2 0.5.2", +] + +[[package]] +name = "objc2-metal" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" +dependencies = [ + "bitflags 2.6.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" +dependencies = [ + "bitflags 2.6.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", + "objc2-metal", +] + [[package]] name = "objc_exception" version = "0.1.2" @@ -2490,36 +2664,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] -name = "ordered-float" -version = "4.2.1" +name = "orbclient" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ff2cf528c6c03d9ed653d6c4ce1dc0582dc4af309790ad92f07c1cd551b0be" +checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" dependencies = [ - "num-traits", + "libredox 0.0.2", ] [[package]] name = "ouroboros" -version = "0.13.0" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f357ef82d1b4db66fbed0b8d542cbd3c22d0bf5b393b3c257b9ba4568e70c9c3" +checksum = "944fa20996a25aded6b4795c6d63f10014a7a83f8be9828a11860b08c5fc4a67" dependencies = [ "aliasable", "ouroboros_macro", - "stable_deref_trait", + "static_assertions", ] [[package]] name = "ouroboros_macro" -version = "0.13.0" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44a0b52c2cbaef7dffa5fec1a43274afe8bd2a644fa9fc50a9ef4ff0269b1257" +checksum = "39b0deead1528fd0e5947a8546a9642a9777c25f6e1e26f34c97b204bbb465bd" dependencies = [ - "Inflector", - "proc-macro-error", + "heck 0.4.1", + "itertools 0.12.1", "proc-macro2", + "proc-macro2-diagnostics", "quote", - "syn 1.0.109", + "syn 2.0.72", ] [[package]] @@ -2528,31 +2703,31 @@ version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "490d3a563d3122bf7c911a59b0add9389e5ec0f5f0c3ac6b91ff235a0e6a7f90" dependencies = [ - "ttf-parser", + "ttf-parser 0.24.0", ] [[package]] name = "palette" -version = "0.6.1" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f9cd68f7112581033f157e56c77ac4a5538ec5836a2e39284e65bd7d7275e49" +checksum = "4cbf71184cc5ecc2e4e1baccdb21026c20e5fc3dcf63028a086131b3ab00b6e6" dependencies = [ "approx", - "num-traits", + "fast-srgb8", "palette_derive", "phf 0.11.2", ] [[package]] name = "palette_derive" -version = "0.6.1" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05eedf46a8e7c27f74af0c9cfcdb004ceca158cb1b918c6f68f8d7a549b3e427" +checksum = "f5030daf005bface118c096f510ffb781fc28f9ab6a32ab224d8631be6851d30" dependencies = [ - "find-crate", + "by_address", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.72", ] [[package]] @@ -2603,6 +2778,12 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "percent-encoding" version = "2.3.1" @@ -2757,14 +2938,19 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" +[[package]] +name = "presser" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" + [[package]] name = "proc-macro-crate" -version = "1.3.1" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ - "once_cell", - "toml_edit 0.19.15", + "toml_edit 0.21.1", ] [[package]] @@ -2806,6 +2992,19 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "proc-macro2-diagnostics" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", + "version_check", + "yansi", +] + [[package]] name = "profiling" version = "1.0.15" @@ -2867,55 +3066,50 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" [[package]] -name = "raw-window-handle" -version = "0.3.4" +name = "rangemap" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28f55143d0548dad60bb4fbdc835a3d7ac6acc3324506450c5fdd6e42903a76" -dependencies = [ - "libc", - "raw-window-handle 0.4.3", -] +checksum = "f60fcc7d6849342eff22c4350c8b9a989ee8ceabc4b481253e8946b9fe83d684" [[package]] name = "raw-window-handle" -version = "0.4.3" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41" -dependencies = [ - "cty", -] +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] -name = "raw-window-handle" -version = "0.5.2" +name = "read-fonts" +version = "0.19.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" +checksum = "e8b8af39d1f23869711ad4cea5e7835a20daa987f80232f7f2a2374d648ca64d" +dependencies = [ + "bytemuck", + "font-types", +] [[package]] -name = "rayon" -version = "1.10.0" +name = "redox_syscall" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "either", - "rayon-core", + "bitflags 1.3.2", ] [[package]] -name = "rayon-core" -version = "1.12.1" +name = "redox_syscall" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ - "crossbeam-deque", - "crossbeam-utils", + "bitflags 1.3.2", ] [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ "bitflags 1.3.2", ] @@ -2936,7 +3130,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" dependencies = [ "getrandom", - "libredox", + "libredox 0.1.3", "thiserror", ] @@ -2971,9 +3165,9 @@ checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "renderdoc-sys" -version = "0.7.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1382d1f0a252c4bf97dc20d979a2fdd05b024acd7c2ed0f7595d7817666a157" +checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "reqwest" @@ -3040,6 +3234,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "roxmltree" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cd14fd5e3b777a7422cca79358c57a8f6e3a703d9ac187448d0daf220c2407f" + [[package]] name = "rust-embed" version = "8.5.0" @@ -3086,12 +3286,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" -[[package]] -name = "rustc-hash" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" - [[package]] name = "rustix" version = "0.38.34" @@ -3101,7 +3295,7 @@ dependencies = [ "bitflags 2.6.0", "errno", "libc", - "linux-raw-sys", + "linux-raw-sys 0.4.14", "windows-sys 0.52.0", ] @@ -3121,20 +3315,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] -name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - -[[package]] -name = "safe_arch" -version = "0.5.2" +name = "rustybuzz" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ff3d6d9696af502cc3110dacce942840fb06ff4514cad92236ecc455f2ce05" +checksum = "2ee8fe2a8461a0854a37101fe7a1b13998d0cfa987e43248e81d2a5f4570f6fa" dependencies = [ + "bitflags 1.3.2", "bytemuck", + "libm", + "smallvec", + "ttf-parser 0.20.0", + "unicode-bidi-mirroring", + "unicode-ccc", + "unicode-properties", + "unicode-script", ] +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + [[package]] name = "same-file" version = "1.0.6" @@ -3183,13 +3385,14 @@ dependencies = [ [[package]] name = "sctk-adwaita" -version = "0.4.3" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61270629cc6b4d77ec1907db1033d5c2e1a404c412743621981a871dc9c12339" +checksum = "70b31447ca297092c5a9916fc3b955203157b37c19ca8edde4f52e9843e602c7" dependencies = [ - "crossfont", + "ab_glyph", "log", - "smithay-client-toolkit 0.16.1", + "memmap2 0.9.4", + "smithay-client-toolkit 0.18.1", "tiny-skia", ] @@ -3302,27 +3505,6 @@ dependencies = [ "serde", ] -[[package]] -name = "servo-fontconfig" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e3e22fe5fd73d04ebf0daa049d3efe3eae55369ce38ab16d07ddd9ac5c217c" -dependencies = [ - "libc", - "servo-fontconfig-sys", -] - -[[package]] -name = "servo-fontconfig-sys" -version = "5.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e36b879db9892dfa40f95da1c38a835d41634b825fbd8c4c418093d53c24b388" -dependencies = [ - "expat-sys", - "freetype-sys", - "pkg-config", -] - [[package]] name = "servo_arc" version = "0.3.0" @@ -3355,6 +3537,16 @@ version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +[[package]] +name = "skrifa" +version = "0.19.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab45fb68b53576a43d4fc0e9ec8ea64e29a4d2cc7f44506964cb75f288222e9" +dependencies = [ + "bytemuck", + "read-fonts", +] + [[package]] name = "slab" version = "0.4.9" @@ -3381,21 +3573,27 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "smithay-client-toolkit" -version = "0.16.1" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "870427e30b8f2cbe64bf43ec4b86e88fe39b0a84b3f15efd9c9c2d020bc86eb9" +checksum = "922fd3eeab3bd820d76537ce8f582b1cf951eceb5475c28500c7457d9d17f53a" dependencies = [ - "bitflags 1.3.2", - "calloop 0.10.6", - "dlib", - "lazy_static", + "bitflags 2.6.0", + "calloop 0.12.4", + "calloop-wayland-source 0.2.0", + "cursor-icon", + "libc", "log", - "memmap2 0.5.10", - "nix 0.24.3", - "pkg-config", - "wayland-client 0.29.5", - "wayland-cursor 0.29.5", - "wayland-protocols 0.29.5", + "memmap2 0.9.4", + "rustix", + "thiserror", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols 0.31.2", + "wayland-protocols-wlr 0.2.0", + "wayland-scanner", + "xkeysym", ] [[package]] @@ -3406,7 +3604,7 @@ checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ "bitflags 2.6.0", "calloop 0.13.0", - "calloop-wayland-source", + "calloop-wayland-source 0.3.0", "cursor-icon", "libc", "log", @@ -3414,12 +3612,12 @@ dependencies = [ "rustix", "thiserror", "wayland-backend", - "wayland-client 0.31.5", + "wayland-client", "wayland-csd-frame", - "wayland-cursor 0.31.5", + "wayland-cursor", "wayland-protocols 0.32.3", - "wayland-protocols-wlr", - "wayland-scanner 0.31.4", + "wayland-protocols-wlr 0.3.3", + "wayland-scanner", "xkeysym", ] @@ -3434,6 +3632,15 @@ dependencies = [ "wayland-backend", ] +[[package]] +name = "smol_str" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" +dependencies = [ + "serde", +] + [[package]] name = "socket2" version = "0.5.7" @@ -3445,13 +3652,45 @@ dependencies = [ ] [[package]] -name = "spirv" -version = "0.2.0+1.5.4" +name = "softbuffer" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830" +checksum = "d623bff5d06f60d738990980d782c8c866997d9194cfe79ecad00aa2f76826dd" dependencies = [ - "bitflags 1.3.2", - "num-traits", + "as-raw-xcb-connection", + "bytemuck", + "cfg_aliases 0.2.1", + "core-graphics", + "drm", + "fastrand", + "foreign-types 0.5.0", + "js-sys", + "log", + "memmap2 0.9.4", + "objc2 0.5.2", + "objc2-app-kit", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle", + "redox_syscall 0.5.3", + "rustix", + "tiny-xlib", + "wasm-bindgen", + "wayland-backend", + "wayland-client", + "wayland-sys", + "web-sys", + "windows-sys 0.52.0", + "x11rb", +] + +[[package]] +name = "spirv" +version = "0.3.0+sdk-1.3.268.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" +dependencies = [ + "bitflags 2.6.0", ] [[package]] @@ -3467,10 +3706,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] -name = "str-buf" -version = "1.0.6" +name = "strict-num" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" [[package]] name = "string_cache" @@ -3519,7 +3758,7 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "heck", + "heck 0.5.0", "proc-macro2", "quote", "rustversion", @@ -3532,6 +3771,17 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20e16a0f46cf5fd675563ef54f26e83e20f2366bcf027bcb3cc3ed2b98aaf2ca" +[[package]] +name = "swash" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d7773d67fe3373048cf840bfcc54ec3207cfc1e95c526b287ef2eb5eff9faf6" +dependencies = [ + "skrifa", + "yazi", + "zeno", +] + [[package]] name = "syn" version = "1.0.109" @@ -3560,6 +3810,15 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[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" @@ -3635,27 +3894,41 @@ dependencies = [ [[package]] name = "tiny-skia" -version = "0.7.0" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642680569bb895b16e4b9d181c60be1ed136fa0c9c7f11d004daf053ba89bf82" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" dependencies = [ "arrayref", - "arrayvec 0.5.2", + "arrayvec", "bytemuck", "cfg-if", + "log", "png", - "safe_arch", "tiny-skia-path", ] [[package]] name = "tiny-skia-path" -version = "0.7.0" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c114d32f0c2ee43d585367cb013dfaba967ab9f62b90d9af0d696e955e70fa6c" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" dependencies = [ "arrayref", "bytemuck", + "strict-num", +] + +[[package]] +name = "tiny-xlib" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d52f22673960ad13af14ff4025997312def1223bfa7c8e4949d099e6b3d5d1c" +dependencies = [ + "as-raw-xcb-connection", + "ctor-lite", + "libloading 0.8.5", + "pkg-config", + "tracing", ] [[package]] @@ -3764,11 +4037,11 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.19.15" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ - "indexmap 2.2.6", + "indexmap", "toml_datetime", "winnow 0.5.40", ] @@ -3779,7 +4052,7 @@ version = "0.22.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "278f3d518e152219c994ce877758516bca5e118eaed6996192a774fb9fbf0788" dependencies = [ - "indexmap 2.2.6", + "indexmap", "serde", "serde_spanned", "toml_datetime", @@ -3799,9 +4072,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + [[package]] name = "tracing-core" version = "0.1.32" @@ -3819,20 +4104,21 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "ttf-parser" -version = "0.24.0" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8686b91785aff82828ed725225925b33b4fde44c4bb15876e5f7c832724c420a" +checksum = "49d64318d8311fc2668e48b63969f4343e0a85c4a109aa8460d6672e364b8bd1" [[package]] -name = "twox-hash" -version = "1.6.3" +name = "ttf-parser" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" -dependencies = [ - "cfg-if", - "rand", - "static_assertions", -] +checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" + +[[package]] +name = "ttf-parser" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8686b91785aff82828ed725225925b33b4fde44c4bb15876e5f7c832724c420a" [[package]] name = "type-map" @@ -3840,7 +4126,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" dependencies = [ - "rustc-hash 1.1.0", + "rustc-hash", ] [[package]] @@ -3899,12 +4185,30 @@ version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +[[package]] +name = "unicode-bidi-mirroring" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56d12260fb92d52f9008be7e4bca09f584780eb2266dc8fecc6a192bec561694" + +[[package]] +name = "unicode-ccc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1" + [[package]] 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.23" @@ -3914,6 +4218,18 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-properties" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291" + +[[package]] +name = "unicode-script" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8d71f5726e5f285a935e9fe8edfd53f0491eb6e9a5774097fdabee7cd8c9cd" + [[package]] name = "unicode-segmentation" version = "1.11.0" @@ -3961,12 +4277,6 @@ 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 = "version_check" version = "0.9.4" @@ -4090,23 +4400,7 @@ dependencies = [ "rustix", "scoped-tls", "smallvec", - "wayland-sys 0.31.4", -] - -[[package]] -name = "wayland-client" -version = "0.29.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715" -dependencies = [ - "bitflags 1.3.2", - "downcast-rs", - "libc", - "nix 0.24.3", - "scoped-tls", - "wayland-commons", - "wayland-scanner 0.29.5", - "wayland-sys 0.29.5", + "wayland-sys", ] [[package]] @@ -4118,19 +4412,7 @@ dependencies = [ "bitflags 2.6.0", "rustix", "wayland-backend", - "wayland-scanner 0.31.4", -] - -[[package]] -name = "wayland-commons" -version = "0.29.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902" -dependencies = [ - "nix 0.24.3", - "once_cell", - "smallvec", - "wayland-sys 0.29.5", + "wayland-scanner", ] [[package]] @@ -4144,17 +4426,6 @@ dependencies = [ "wayland-backend", ] -[[package]] -name = "wayland-cursor" -version = "0.29.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661" -dependencies = [ - "nix 0.24.3", - "wayland-client 0.29.5", - "xcursor", -] - [[package]] name = "wayland-cursor" version = "0.31.5" @@ -4162,20 +4433,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ef9489a8df197ebf3a8ce8a7a7f0a2320035c3743f3c1bd0bdbccf07ce64f95" dependencies = [ "rustix", - "wayland-client 0.31.5", + "wayland-client", "xcursor", ] [[package]] name = "wayland-protocols" -version = "0.29.5" +version = "0.31.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6" +checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" dependencies = [ - "bitflags 1.3.2", - "wayland-client 0.29.5", - "wayland-commons", - "wayland-scanner 0.29.5", + "bitflags 2.6.0", + "wayland-backend", + "wayland-client", + "wayland-scanner", ] [[package]] @@ -4186,32 +4457,47 @@ checksum = "62989625a776e827cc0f15d41444a3cea5205b963c3a25be48ae1b52d6b4daaa" dependencies = [ "bitflags 2.6.0", "wayland-backend", - "wayland-client 0.31.5", - "wayland-scanner 0.31.4", + "wayland-client", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-plasma" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23803551115ff9ea9bce586860c5c5a971e360825a0309264102a9495a5ff479" +dependencies = [ + "bitflags 2.6.0", + "wayland-backend", + "wayland-client", + "wayland-protocols 0.31.2", + "wayland-scanner", ] [[package]] name = "wayland-protocols-wlr" -version = "0.3.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd993de54a40a40fbe5601d9f1fbcaef0aebcc5fda447d7dc8f6dcbaae4f8953" +checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" dependencies = [ "bitflags 2.6.0", "wayland-backend", - "wayland-client 0.31.5", - "wayland-protocols 0.32.3", - "wayland-scanner 0.31.4", + "wayland-client", + "wayland-protocols 0.31.2", + "wayland-scanner", ] [[package]] -name = "wayland-scanner" -version = "0.29.5" +name = "wayland-protocols-wlr" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53" +checksum = "fd993de54a40a40fbe5601d9f1fbcaef0aebcc5fda447d7dc8f6dcbaae4f8953" dependencies = [ - "proc-macro2", - "quote", - "xml-rs", + "bitflags 2.6.0", + "wayland-backend", + "wayland-client", + "wayland-protocols 0.32.3", + "wayland-scanner", ] [[package]] @@ -4225,17 +4511,6 @@ dependencies = [ "quote", ] -[[package]] -name = "wayland-sys" -version = "0.29.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4" -dependencies = [ - "dlib", - "lazy_static", - "pkg-config", -] - [[package]] name = "wayland-sys" version = "0.31.4" @@ -4250,9 +4525,19 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0" dependencies = [ "js-sys", "wasm-bindgen", @@ -4260,16 +4545,19 @@ dependencies = [ [[package]] name = "wgpu" -version = "0.14.2" +version = "0.19.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f643110d228fd62a60c5ed2ab56c4d5b3704520bd50561174ec4ec74932937" +checksum = "cbd7311dbd2abcfebaabf1841a2824ed7c8be443a0f29166e5d3c6a53a762c01" dependencies = [ - "arrayvec 0.7.4", + "arrayvec", + "cfg-if", + "cfg_aliases 0.1.1", "js-sys", "log", "naga", "parking_lot 0.12.3", - "raw-window-handle 0.5.2", + "profiling", + "raw-window-handle", "smallvec", "static_assertions", "wasm-bindgen", @@ -4282,21 +4570,23 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "0.14.2" +version = "0.19.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6000d1284ef8eec6076fd5544a73125fd7eb9b635f18dceeb829d826f41724ca" +checksum = "28b94525fc99ba9e5c9a9e24764f2bc29bad0911a7446c12f446a8277369bf3a" dependencies = [ - "arrayvec 0.7.4", + "arrayvec", "bit-vec", - "bitflags 1.3.2", - "cfg_aliases", + "bitflags 2.6.0", + "cfg_aliases 0.1.1", "codespan-reporting", - "fxhash", + "indexmap", "log", "naga", + "once_cell", "parking_lot 0.12.3", "profiling", - "raw-window-handle 0.5.2", + "raw-window-handle", + "rustc-hash", "smallvec", "thiserror", "web-sys", @@ -4306,35 +4596,41 @@ dependencies = [ [[package]] name = "wgpu-hal" -version = "0.14.1" +version = "0.19.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cc320a61acb26be4f549c9b1b53405c10a223fbfea363ec39474c32c348d12f" +checksum = "bfabcfc55fd86611a855816326b2d54c3b2fd7972c27ce414291562650552703" dependencies = [ "android_system_properties", - "arrayvec 0.7.4", + "arrayvec", "ash", "bit-set", - "bitflags 1.3.2", + "bitflags 2.6.0", "block", + "cfg_aliases 0.1.1", "core-graphics-types", "d3d12", - "foreign-types 0.3.2", - "fxhash", "glow", + "glutin_wgl_sys", "gpu-alloc", + "gpu-allocator", "gpu-descriptor", + "hassle-rs", "js-sys", "khronos-egl", - "libloading 0.7.4", + "libc", + "libloading 0.8.5", "log", "metal", "naga", + "ndk-sys", "objc", + "once_cell", "parking_lot 0.12.3", "profiling", "range-alloc", - "raw-window-handle 0.5.2", + "raw-window-handle", "renderdoc-sys", + "rustc-hash", "smallvec", "thiserror", "wasm-bindgen", @@ -4345,24 +4641,20 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "0.14.1" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb6b28ef22cac17b9109b25b3bf8c9a103eeb293d7c5f78653979b09140375f6" +checksum = "b671ff9fb03f78b46ff176494ee1ebe7d603393f42664be55b64dc8d53969805" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", + "js-sys", + "web-sys", ] [[package]] -name = "wgpu_glyph" -version = "0.18.0" +name = "widestring" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cafb82773e0f124a33674dab5de4dff73175aeb921949047ab014efb58fb446" -dependencies = [ - "bytemuck", - "glyph_brush", - "log", - "wgpu", -] +checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" [[package]] name = "winapi" @@ -4397,18 +4689,28 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "window_clipboard" -version = "0.2.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "015dd4474dc6aa96fe19aae3a24587a088bd90331dba5a5cc60fb3a180234c4d" +checksum = "f6d692d46038c433f9daee7ad8757e002a4248c20b0a3fbc991d99521d3bcb6d" dependencies = [ "clipboard-win", "clipboard_macos", "clipboard_wayland", "clipboard_x11", - "raw-window-handle 0.3.4", + "raw-window-handle", "thiserror", ] +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core", + "windows-targets 0.52.6", +] + [[package]] name = "windows-core" version = "0.52.0" @@ -4420,15 +4722,11 @@ dependencies = [ [[package]] name = "windows-sys" -version = "0.36.1" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", + "windows-targets 0.42.2", ] [[package]] @@ -4449,6 +4747,21 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -4480,6 +4793,12 @@ dependencies = [ "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -4494,9 +4813,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" @@ -4512,9 +4831,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" @@ -4536,9 +4855,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" @@ -4554,9 +4873,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" @@ -4570,6 +4889,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -4584,9 +4909,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" @@ -4602,35 +4927,50 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winit" -version = "0.27.5" +version = "0.29.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb796d6fbd86b2fd896c9471e6f04d39d750076ebe5680a3958f00f5ab97657c" +checksum = "0d59ad965a635657faf09c8f062badd885748428933dad8e8bdd64064d92e5ca" dependencies = [ - "bitflags 1.3.2", - "cocoa 0.24.1", + "ahash", + "android-activity", + "atomic-waker", + "bitflags 2.6.0", + "bytemuck", + "calloop 0.12.4", + "cfg_aliases 0.1.1", "core-foundation", - "core-graphics 0.22.3", - "dispatch", - "instant", + "core-graphics", + "cursor-icon", + "icrate", + "js-sys", "libc", "log", - "mio", + "memmap2 0.9.4", "ndk", - "ndk-glue", - "objc", + "ndk-sys", + "objc2 0.4.1", "once_cell", - "parking_lot 0.12.3", + "orbclient", "percent-encoding", - "raw-window-handle 0.4.3", - "raw-window-handle 0.5.2", + "raw-window-handle", + "redox_syscall 0.3.5", + "rustix", "sctk-adwaita", - "smithay-client-toolkit 0.16.1", + "smithay-client-toolkit 0.18.1", + "smol_str", + "unicode-segmentation", "wasm-bindgen", - "wayland-client 0.29.5", - "wayland-protocols 0.29.5", + "wasm-bindgen-futures", + "wayland-backend", + "wayland-client", + "wayland-protocols 0.31.2", + "wayland-protocols-plasma", "web-sys", - "windows-sys 0.36.1", + "web-time", + "windows-sys 0.48.0", "x11-dl", + "x11rb", + "xkbcommon-dl", ] [[package]] @@ -4661,15 +5001,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "wio" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" -dependencies = [ - "winapi", -] - [[package]] name = "x11-dl" version = "2.21.0" @@ -4687,7 +5018,11 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" dependencies = [ + "as-raw-xcb-connection", "gethostname", + "libc", + "libloading 0.8.5", + "once_cell", "rustix", "x11rb-protocol", ] @@ -4705,10 +5040,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d491ee231a51ae64a5b762114c3ac2104b967aadba1de45c86ca42cf051513b7" [[package]] -name = "xi-unicode" -version = "0.3.0" +name = "xkbcommon-dl" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a" +checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" +dependencies = [ + "bitflags 2.6.0", + "dlib", + "log", + "once_cell", + "xkeysym", +] [[package]] name = "xkeysym" @@ -4722,6 +5064,30 @@ version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "791978798f0597cfc70478424c2b4fdc2b7a8024aaff78497ef00f24ef674193" +[[package]] +name = "xxhash-rust" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63658493314859b4dfdf3fb8c1defd61587839def09582db50b8a4e93afca6bb" + +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[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.35" diff --git a/Cargo.toml b/Cargo.toml index 04cb8be..be39440 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,9 +32,10 @@ codegen-units = 1 inherits = "test" [dependencies] -iced = "0.8" -iced_lazy = "0.5" -iced_native = "0.9" +iced = { version = "0.12", features = ["lazy", "advanced"] } +#iced_lazy = "0.6" +#iced_native = "0.10" + # iced_style = "0.5" # iced = { git = "https://github.com/iced-rs/iced" } # iced_lazy = { git = "https://github.com/iced-rs/iced" } diff --git a/src/component/attributes.rs b/src/component/attributes.rs index e5600ab..fed5cbe 100644 --- a/src/component/attributes.rs +++ b/src/component/attributes.rs @@ -1,10 +1,12 @@ -use iced::{ - widget::{column, row, text, Column}, - Alignment, Length, -}; -use iced_lazy::Component; use std::{cell::RefCell, rc::Rc}; +use crate::widget::dots; +use crate::{ + fl, + i18n::flt, + widget::dots::{Shape, SheetDots}, + Element, H2_SIZE, TITLE_SPACING, +}; use cofd::{ character::{ modifier::ModifierTarget, @@ -12,12 +14,10 @@ use cofd::{ }, prelude::*, }; - -use crate::{ - fl, - i18n::flt, - widget::dots::{Shape, SheetDots}, - Element, H2_SIZE, TITLE_SPACING, +use iced::widget::{component, Component}; +use iced::{ + widget::{column, row, text, Column}, + Alignment, Length, }; pub struct AttributeBar { @@ -50,7 +50,10 @@ impl AttributeBar { } } - fn mk_attr_col(&self, character: &Character, cat: TraitCategory) -> Element { + fn mk_attr_col(&self, character: &Character, cat: TraitCategory) -> Element + where + Theme: text::StyleSheet + dots::StyleSheet + 'static, + { let mut col1 = Column::new().spacing(3); let mut col2 = Column::new() .spacing(5) @@ -81,7 +84,10 @@ impl AttributeBar { } } -impl Component for AttributeBar { +impl Component for AttributeBar +where + Theme: text::StyleSheet + dots::StyleSheet + 'static, +{ type State = (); type Event = Event; @@ -89,7 +95,7 @@ impl Component for AttributeBar { Some((self.on_change)(event.0, event.1)) } - fn view(&self, _state: &Self::State) -> Element { + fn view(&self, _state: &Self::State) -> Element { let character = self.character.borrow(); column![ @@ -116,11 +122,12 @@ impl Component for AttributeBar { } } -impl<'a, Message> From> for Element<'a, Message> +impl<'a, Message, Theme> From> for Element<'a, Message, Theme> where Message: 'a, + Theme: text::StyleSheet + dots::StyleSheet + 'static, { fn from(info_bar: AttributeBar) -> Self { - iced_lazy::component(info_bar) + component(info_bar) } } diff --git a/src/component/info.rs b/src/component/info.rs index 32479b9..e5ce488 100644 --- a/src/component/info.rs +++ b/src/component/info.rs @@ -1,21 +1,21 @@ +use iced::widget::{component, container, scrollable, Component}; use iced::{ widget::{column, pick_list, row, text, text_input, Column}, Alignment, Length, }; -use iced_lazy::Component; use std::{cell::RefCell, rc::Rc}; -use cofd::{ - character::InfoTrait, - prelude::*, - splat::{Splat, XSplat, YSplat, ZSplat}, -}; - use crate::{ fl, i18n::{flt, Translated}, Element, INPUT_PADDING, }; +use cofd::{ + character::InfoTrait, + prelude::*, + splat::{Splat, XSplat, YSplat, ZSplat}, +}; +use iced::overlay::menu; pub struct InfoBar { character: Rc>, @@ -46,7 +46,14 @@ impl InfoBar { } } - fn mk_info_col(&self, info: Vec, character: &Character) -> Element { + fn mk_info_col( + &self, + info: Vec, + character: &Character, + ) -> Element + where + Theme: text_input::StyleSheet + text::StyleSheet + 'static, + { let mut col1 = Column::new().spacing(3); let mut col2 = Column::new() .spacing(3) @@ -80,10 +87,9 @@ impl InfoBar { col1 = col1.push(text(format!("{}:", flt(msg, attribute).unwrap()))); col2 = col2.push( - text_input("", character.info.get(_trait), move |val| { - Event::InfoTraitChanged(val, _trait) - }) - .padding(INPUT_PADDING), + text_input("", character.info.get(_trait)) + .on_input(move |val| Event::InfoTraitChanged(val, _trait)) + .padding(INPUT_PADDING), ); } @@ -91,11 +97,20 @@ impl InfoBar { } } -impl Component for InfoBar { +impl Component for InfoBar +where + Theme: text_input::StyleSheet + text::StyleSheet, + Theme: pick_list::StyleSheet + + scrollable::StyleSheet + + menu::StyleSheet + + container::StyleSheet + + 'static, + ::Style: From<::Style>, +{ type State = (); type Event = Event; - fn update(&mut self, _state: &mut Self::State, event: Self::Event) -> Option { + fn update(&mut self, _state: &mut Self::State, event: Event) -> Option { let mut character = self.character.borrow_mut(); match event { @@ -133,10 +148,10 @@ impl Component for InfoBar { clippy::single_match_else, clippy::too_many_lines )] - fn view(&self, _state: &Self::State) -> Element { + fn view(&self, _state: &Self::State) -> Element { let character = self.character.borrow(); - let col3: Element = match character.splat { + let col3: Element = match character.splat { Splat::Mortal => self.mk_info_col( vec![InfoTrait::Age, InfoTrait::Faction, InfoTrait::GroupName], &character, @@ -167,53 +182,79 @@ impl Component for InfoBar { let ysplat = character.splat.ysplat(); let zsplat = character.splat.zsplat(); - let xsplat: Element = if let Some(xsplat) = xsplat.clone() && xsplat.is_custom() { - text_input("", xsplat.name(), { - let xsplat = xsplat.clone(); - move |val| { - let mut xsplat = xsplat.clone(); - *xsplat.name_mut().unwrap() = val; - Event::XSplatChanged(xsplat) - } - }).padding(INPUT_PADDING) - .into() + let xsplat: Element = if let Some(xsplat) = xsplat.clone() + && xsplat.is_custom() + { + text_input("", xsplat.name()) + .on_input({ + let xsplat = xsplat.clone(); + move |val| { + let mut xsplat = xsplat.clone(); + *xsplat.name_mut().unwrap() = val; + Event::XSplatChanged(xsplat) + } + }) + .padding(INPUT_PADDING) + .into() } else { - pick_list(xsplats, xsplat.map(Into::into), |val| Event::XSplatChanged(val.unwrap())) + pick_list( + xsplats, + xsplat.map(Into::>::into), + |val| Event::XSplatChanged(val.unwrap()), + ) .padding(INPUT_PADDING) - .width(Length::Fill).into() + .width(Length::Fill) + .into() }; - let ysplat: Element = if let Some(ysplat) = ysplat.clone() && ysplat.is_custom() { - text_input("", ysplat.name(), { - let ysplat = ysplat.clone(); - move |val| { - let mut ysplat = ysplat.clone(); - *ysplat.name_mut().unwrap() = val; - Event::YSplatChanged(ysplat) - } - }).padding(INPUT_PADDING) - .into() + let ysplat: Element = if let Some(ysplat) = ysplat.clone() + && ysplat.is_custom() + { + text_input("", ysplat.name()) + .on_input({ + let ysplat = ysplat.clone(); + move |val| { + let mut ysplat = ysplat.clone(); + *ysplat.name_mut().unwrap() = val; + Event::YSplatChanged(ysplat) + } + }) + .padding(INPUT_PADDING) + .into() } else { - pick_list(ysplats, ysplat.map(Into::into), |val| Event::YSplatChanged(val.unwrap())) + pick_list( + ysplats, + ysplat.map(Into::>::into), + |val| Event::YSplatChanged(val.unwrap()), + ) .padding(INPUT_PADDING) - .width(Length::Fill).into() + .width(Length::Fill) + .into() }; - let zsplat: Element = if let Some(zsplat) = zsplat.clone() && zsplat.is_custom() { - text_input("", zsplat.name(), { - let zsplat = zsplat.clone(); - move |val| { - let mut zsplat = zsplat.clone(); - *zsplat.name_mut().unwrap() = val; - Event::ZSplatChanged(zsplat) - } - }).padding(INPUT_PADDING) - .into() - } else { - pick_list(zsplats, zsplat.map(Into::into), |val| Event::ZSplatChanged(val.unwrap())) + let zsplat: Element = if let Some(zsplat) = zsplat.clone() + && zsplat.is_custom() + { + text_input("", zsplat.name()) + .on_input({ + let zsplat = zsplat.clone(); + move |val| { + let mut zsplat = zsplat.clone(); + *zsplat.name_mut().unwrap() = val; + Event::ZSplatChanged(zsplat) + } + }) .padding(INPUT_PADDING) - .width(Length::Fill) .into() + } else { + pick_list( + zsplats, + zsplat.map(Into::>::into), + |val| Event::ZSplatChanged(val.unwrap()), + ) + .padding(INPUT_PADDING) + .width(Length::Fill) + .into() }; row![ @@ -257,16 +298,24 @@ impl Component for InfoBar { ), col3, ] + .width(Length::Fill) .spacing(10) .into() } } -impl<'a, Message> From> for Element<'a, Message> +impl<'a, Message, Theme> From> for Element<'a, Message, Theme> where Message: 'a, + Theme: text_input::StyleSheet + text::StyleSheet, + Theme: pick_list::StyleSheet + + scrollable::StyleSheet + + menu::StyleSheet + + container::StyleSheet + + 'static, + ::Style: From<::Style>, { fn from(info_bar: InfoBar) -> Self { - iced_lazy::component(info_bar) + component(info_bar) } } diff --git a/src/component/list.rs b/src/component/list.rs index 6a8b88a..92f5872 100644 --- a/src/component/list.rs +++ b/src/component/list.rs @@ -1,42 +1,38 @@ +use iced::widget::{component, Component}; use iced::{ widget::{text, Column}, - Alignment, + Alignment, Element, Pixels, }; -use iced_lazy::Component; -use iced_native::Pixels; -use crate::{Element, H3_SIZE, TITLE_SPACING}; +use crate::{H3_SIZE, TITLE_SPACING}; -pub struct List<'a, T, Message> { +pub struct List<'a, T, Message, Theme> { str: String, min: Option, max: Option, vec: Vec, - f: Box) -> Element<'a, Message>>, + f: Box) -> Element<'a, Message, Theme>>, max_width: f32, // on_change: Box Message>, } -pub fn list<'a, T, Message>( +pub fn list<'a, T, Message, Theme>( str: String, min: Option, max: Option, vec: Vec, - f: impl Fn(usize, Option) -> Element<'a, Message> + 'static, + f: impl Fn(usize, Option) -> Element<'a, Message, Theme> + 'static, // on_change: impl Fn(usize, T) -> Message + 'static, -) -> List<'a, T, Message> { +) -> List<'a, T, Message, Theme> { List::new(str, min, max, vec, f) } -// #[derive(Clone)] -// pub struct Event(Message); - -impl<'a, T, Message> List<'a, T, Message> { +impl<'a, T, Message, Theme> List<'a, T, Message, Theme> { fn new( str: String, min: Option, max: Option, vec: Vec, - f: impl Fn(usize, Option) -> Element<'a, Message> + 'static, + f: impl Fn(usize, Option) -> Element<'a, Message, Theme> + 'static, // on_change: impl Fn(usize, T) -> Message + 'static, ) -> Self { Self { @@ -56,9 +52,10 @@ impl<'a, T, Message> List<'a, T, Message> { } } -impl<'a, T, Message> Component for List<'a, T, Message> +impl<'a, T, Message, Theme> Component for List<'a, T, Message, Theme> where T: Clone, + Theme: text::StyleSheet, { type State = (); type Event = Message; @@ -67,8 +64,8 @@ where Some(event) } - fn view(&self, _state: &Self::State) -> Element { - let mut col = Column::new(); + fn view(&self, _state: &Self::State) -> Element<'_, Message, Theme> { + let mut col = Column::<'_, Message, Theme>::new(); for i in 0..std::cmp::min( self.max.unwrap_or(usize::MAX), @@ -89,12 +86,13 @@ where } } -impl<'a, T, Message> From> for Element<'a, Message> +impl<'a, T, Message, Theme> From> for Element<'a, Message, Theme> where T: 'a + Clone, Message: 'a, + Theme: text::StyleSheet + 'static, { - fn from(list: List<'a, T, Message>) -> Self { - iced_lazy::component(list) + fn from(list: List<'a, T, Message, Theme>) -> Self { + component(list) } } diff --git a/src/component/mod.rs b/src/component/mod.rs index 10e40a1..9df6504 100644 --- a/src/component/mod.rs +++ b/src/component/mod.rs @@ -1,17 +1,17 @@ mod attributes; -mod forms; +// mod forms; mod info; -mod integrity; +// mod integrity; mod list; -mod merits; +// mod merits; mod skills; -mod traits; +// mod traits; pub use attributes::{attribute_bar, AttributeBar}; -pub use forms::{forms_component, FormsComponent}; +// pub use forms::{forms_component, FormsComponent}; pub use info::{info_bar, InfoBar}; -pub use integrity::{integrity_component, IntegrityComponent}; +// pub use integrity::{integrity_component, IntegrityComponent}; pub use list::{list, List}; -pub use merits::{merit_component, MeritComponent}; +// pub use merits::{merit_component, MeritComponent}; pub use skills::{skills_component, SkillsComponent}; -pub use traits::{traits_component, TraitsComponent}; +// pub use traits::{traits_component, TraitsComponent}; diff --git a/src/component/skills.rs b/src/component/skills.rs index 6dccd5d..0c98332 100644 --- a/src/component/skills.rs +++ b/src/component/skills.rs @@ -1,26 +1,25 @@ -use closure::closure; -use iced::{ - theme::{self}, - widget::{button, checkbox, column, row, text, text_input, Column}, - Alignment, Color, Length, -}; -use iced_lazy::Component; use std::{cell::RefCell, rc::Rc}; -use cofd::{ - character::{modifier::ModifierTarget, traits::TraitCategory}, - prelude::*, - splat::Splat, -}; - +use super::list; +use crate::widget::dots; use crate::{ fl, i18n::flt, widget::dots::{Shape, SheetDots}, Element, H2_SIZE, H3_SIZE, TITLE_SPACING, }; - -use super::list; +use closure::closure; +use cofd::{ + character::{modifier::ModifierTarget, traits::TraitCategory}, + prelude::*, + splat::Splat, +}; +use iced::widget::{component, Component}; +use iced::{ + theme::{self}, + widget::{button, checkbox, column, row, text, text_input, Column}, + Alignment, Color, Length, +}; pub struct SkillsComponent { character: Rc>, @@ -66,12 +65,22 @@ impl SkillsComponent { } } - fn mk_skill_col( + fn mk_skill_col( &self, state: &State, character: &Character, cat: &TraitCategory, - ) -> Element { + ) -> Element + where + Theme: 'static + + button::StyleSheet + + dots::StyleSheet + + text::StyleSheet + + text_input::StyleSheet + + checkbox::StyleSheet, + ::Style: From, + ::Style: From, + { let mut col = Column::new(); let mut col0 = Column::new().spacing(3); @@ -90,11 +99,12 @@ impl SkillsComponent { }; col0 = col0.push( - checkbox("", flag, { - let skill = skill; - move |_| Event::RoteSkillChanged(skill) - }) - .spacing(0), + checkbox("", flag) + .on_toggle({ + let skill = skill; + move |_| Event::RoteSkillChanged(skill) + }) + .spacing(0), ); } @@ -140,10 +150,12 @@ impl SkillsComponent { Some(specialties.len() + 1), None, specialties.clone(), - closure!(clone skill, - |i, val| text_input("", &val.unwrap_or_default(), - move |val| Event::SpecialtyChanged(skill, i, val)).padding(0).into() - ), + closure!(clone skill, |i, val| { + text_input("", &val.unwrap_or_default()) + .on_input(move |val| Event::SpecialtyChanged(skill, i, val)) + .padding(0) + .into() + }), )); col0 = Column::new().spacing(3); @@ -169,7 +181,17 @@ impl SkillsComponent { } } -impl Component for SkillsComponent { +impl Component for SkillsComponent +where + Theme: 'static + + button::StyleSheet + + dots::StyleSheet + + text::StyleSheet + + text_input::StyleSheet + + checkbox::StyleSheet, + ::Style: From, + ::Style: From, +{ type State = State; type Event = Event; @@ -177,18 +199,24 @@ impl Component for SkillsComponent { match event { Event::SkillChanged(val, skill) => Some((self.on_change)(val, skill)), Event::RoteSkillChanged(skill) => Some((self.on_rote_change)(skill)), - Event::SpecialtyChanged(skill, i, val) => Some((self.on_specialty_change)(skill, i, val)), - Event::SpecialtySkillChanged(skill) => if let Some(cur) = state.specialty_skill && cur == skill { - state.specialty_skill = None; - None - } else { - state.specialty_skill = Some(skill); - None + Event::SpecialtyChanged(skill, i, val) => { + Some((self.on_specialty_change)(skill, i, val)) + } + Event::SpecialtySkillChanged(skill) => { + if let Some(cur) = state.specialty_skill + && cur == skill + { + state.specialty_skill = None; + None + } else { + state.specialty_skill = Some(skill); + None + } } } } - fn view(&self, state: &Self::State) -> Element { + fn view(&self, state: &Self::State) -> Element { let character = self.character.borrow(); column![ @@ -205,11 +233,19 @@ impl Component for SkillsComponent { } } -impl<'a, Message> From> for Element<'a, Message> +impl<'a, Message, Theme> From> for Element<'a, Message, Theme> where Message: 'a, + Theme: 'static + + button::StyleSheet + + dots::StyleSheet + + text::StyleSheet + + text_input::StyleSheet + + checkbox::StyleSheet, + ::Style: From, + ::Style: From, { fn from(info_bar: SkillsComponent) -> Self { - iced_lazy::component(info_bar) + component(info_bar) } } diff --git a/src/main.rs b/src/main.rs index 97da4a5..142b1ce 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,3 @@ -#![feature(is_some_and)] #![feature(let_chains)] #![deny(clippy::pedantic)] #![allow( @@ -15,7 +14,7 @@ use iced::{ executor, widget::{button, column, row, Column}, - Alignment, Application, Command, Theme, + Alignment, Application, Command, Element, Length, Theme, }; #[cfg(target_arch = "wasm32")] use log::Level; @@ -48,8 +47,6 @@ pub enum State { }, } -pub type Element<'a, Message> = iced::Element<'a, Message, iced::Renderer>; - struct PlayerCompanionApp { state: State, prev_state: Option, @@ -131,9 +128,9 @@ impl PlayerCompanionApp { impl Application for PlayerCompanionApp { type Executor = executor::Default; - type Flags = (); type Message = Message; type Theme = Theme; + type Flags = (); fn new(_flags: ()) -> (Self, Command) { let _language_requester = i18n::setup(); @@ -224,16 +221,16 @@ impl Application for PlayerCompanionApp { Command::none() } - fn view(&self) -> Element { - // view::overview_tab(character.clone(), Message::Previous) - // Column::new().align_items(align) + fn view(&self) -> Element { match &self.state { State::CharacterList => column![ view::character_list(self.characters.clone(), Message::PickCharacter), button("New Character").on_press(Message::NewCharacter) ] + .width(Length::Fill) .align_items(Alignment::Center) .into(), + State::CharacterCreator => view::creator_view(Message::AddCharacter).into(), State::Sheet { active_tab, @@ -241,17 +238,21 @@ impl Application for PlayerCompanionApp { } => { let _brw = character.borrow(); - let tab: Element = match active_tab { + let tab: Element = match active_tab { Tab::Overview => view::overview_tab(character.clone()).into(), - Tab::Equipment => view::equipment_tab(character.clone()).into(), - // Tab::Forms => { - // if let Splat::Werewolf(_, _, _, _) = brw.splat { - // view::werewolf::form_tab(character.clone(), Message::Msg).into() - // } else { - // unreachable!() - // } - // } - Tab::SplatExtras => view::splat_extras_tab(character.clone()).into(), + _ => { + todo!() + } // Tab::Equipment => view::equipment_tab(character.clone()).into(), + + // Tab::Forms => { + // if let Splat::Werewolf(_, _, _, _) = brw.splat { + // view::werewolf::form_tab(character.clone(), Message::Msg).into() + // } else { + // unreachable!() + // } + // } + + // Tab::SplatExtras => view::splat_extras_tab(character.clone()).into(), }; // let mut row = row![ @@ -262,7 +263,7 @@ impl Application for PlayerCompanionApp { // ]; // if let Splat::Werewolf(_, _, _, data) = &brw.splat { - // row = row.push(button("Forms").on_press(Message::TabSelected(Tab::Forms))); + // row = row.push(button("Forms").on_press(Message::TabSelected(Tab::Forms))); // } // row = row.push(button("Equipment").on_press(Message::TabSelected(Tab::Equipment))); @@ -275,8 +276,9 @@ impl Application for PlayerCompanionApp { button("Equipment").on_press(Message::TabSelected(Tab::Equipment)), button("Splat").on_press(Message::TabSelected(Tab::SplatExtras)), ]) - .spacing(1) .push(tab) + .width(Length::Fill) + .spacing(1) .into() } } @@ -294,7 +296,6 @@ fn main() -> anyhow::Result<()> { } mod demo { - use cofd::{ character::CharacterInfo, prelude::*, diff --git a/src/view/character_list.rs b/src/view/character_list.rs index 9b00b0a..2e6be57 100644 --- a/src/view/character_list.rs +++ b/src/view/character_list.rs @@ -1,13 +1,11 @@ -use iced::{ - widget::{button, column, row, text, Column}, - Alignment, Length, -}; -use iced_lazy::Component; use std::{cell::RefCell, marker::PhantomData, rc::Rc}; +use crate::i18n::flt; use cofd::prelude::*; - -use crate::{i18n::flt, Element}; +use iced::{ + widget::{button, column, component, row, text, Column, Component}, + Alignment, Element, Length, +}; pub struct CharacterList { characters: Vec>>, @@ -40,7 +38,10 @@ impl CharacterList { } } - fn mk_char(&self, i: usize, character: &Character) -> Element { + fn mk_char(&self, i: usize, character: &Character) -> Element + where + Theme: button::StyleSheet + text::StyleSheet + 'static, + { let mut subtitle = flt(character.splat.name(), None).unwrap(); if let Some(ysplat) = character.splat.ysplat() { @@ -55,8 +56,6 @@ impl CharacterList { .unwrap_or_else(|| xsplat.name().to_owned()); } - // button(text(fl!("select"))).on_press(Event::PickCharacter(i)) - let name = if character.info.name.is_empty() { "Unnamed" } else { @@ -70,22 +69,23 @@ impl CharacterList { } } -impl Component for CharacterList { +impl Component for CharacterList +where + Theme: button::StyleSheet + text::StyleSheet + 'static, +{ type State = (); - type Event = Event; fn update(&mut self, _state: &mut Self::State, event: Self::Event) -> Option { - // let mut character = self.character.borrow_mut(); - match event { Event::PickCharacter(i) => Some((self.on_pick)(i)), } } - #[allow(clippy::too_many_lines)] - fn view(&self, _state: &Self::State) -> Element { - let mut list = Column::new().width(Length::FillPortion(4)).spacing(5); + fn view(&self, _state: &Self::State) -> Element<'_, Event, Theme> { + let mut list = Column::new() + .width(Length::FillPortion(4)) + .spacing(5); for (i, character) in self.characters.iter().enumerate() { list = list.push(self.mk_char(i, &character.borrow())); @@ -103,11 +103,12 @@ impl Component for CharacterList { } } -impl<'a, Message> From> for Element<'a, Message> +impl<'a, Message, Theme> From> for Element<'a, Message, Theme> where + Theme: button::StyleSheet + text::StyleSheet + 'static, Message: 'a, { fn from(character_list: CharacterList) -> Self { - iced_lazy::component(character_list) + component(character_list) } } diff --git a/src/view/creator.rs b/src/view/creator.rs index 9a6268f..e7161d3 100644 --- a/src/view/creator.rs +++ b/src/view/creator.rs @@ -1,12 +1,12 @@ +use cofd::{prelude::*, splat::Splat}; +use iced::overlay::menu; +use iced::widget::{container, overlay, scrollable, Column, Row}; use iced::{ - widget::{button, column, pick_list, row, text}, - Length, + widget::{button, column, component, pick_list, row, text, Component}, + Element, Length, }; -use iced_lazy::Component; - -use cofd::{prelude::*, splat::Splat}; -use crate::{i18n::Translated, Element, INPUT_PADDING}; +use crate::{i18n::Translated, INPUT_PADDING}; pub struct CreatorView { on_done: Box Message>, @@ -33,21 +33,33 @@ impl CreatorView { } } - fn splat(&self) -> Element { + fn splat(&self) -> Element + where + Theme: pick_list::StyleSheet + + scrollable::StyleSheet + + menu::StyleSheet + + container::StyleSheet + + 'static, + ::Style: From<::Style>, + { let splats: Vec> = Splat::all().into_iter().map(Into::into).collect(); - pick_list(splats, Some(self.splat.clone().into()), |val| { - Event::SplatChanged(val.unwrap()) - }) - .padding(INPUT_PADDING) - .width(Length::Fill) - .into() + let splat: Translated = self.splat.clone().into(); + pick_list(splats, Some(splat), |val| Event::SplatChanged(val.unwrap())) + .padding(INPUT_PADDING) + .width(Length::Fill) + .into() } } -impl Component for CreatorView { +impl Component for CreatorView +where + Theme: button::StyleSheet + text::StyleSheet + menu::StyleSheet + 'static, + Theme: + pick_list::StyleSheet + scrollable::StyleSheet + menu::StyleSheet + container::StyleSheet, + ::Style: From<::Style>, +{ type State = (); - type Event = Event; fn update(&mut self, _state: &mut Self::State, event: Self::Event) -> Option { @@ -62,25 +74,27 @@ impl Component for CreatorView { } } - #[allow(clippy::too_many_lines)] - fn view(&self, _state: &Self::State) -> Element { + fn view(&self, _state: &Self::State) -> Element<'_, Event, Theme> { column![ text("Character Creator"), row![self.splat()], row![ - button("Done").on_press(Event::Done) - // button("Previous"), button("Next") + button("Done").on_press(Event::Done), // button("Previous"), button("Next") ] ] .into() } } -impl<'a, Message> From> for Element<'a, Message> +impl<'a, Message, Theme> From> for Element<'a, Message, Theme> where + Theme: button::StyleSheet + text::StyleSheet + menu::StyleSheet + 'static, + Theme: + pick_list::StyleSheet + scrollable::StyleSheet + menu::StyleSheet + container::StyleSheet, + ::Style: From<::Style>, Message: 'a, { fn from(creator: CreatorView) -> Self { - iced_lazy::component(creator) + component(creator) } } diff --git a/src/view/mod.rs b/src/view/mod.rs index bc53559..4ee46fe 100644 --- a/src/view/mod.rs +++ b/src/view/mod.rs @@ -1,11 +1,11 @@ mod character_list; mod creator; -mod equipment; +// mod equipment; mod overview; -mod splat_extras; +// mod splat_extras; pub use character_list::{character_list, CharacterList}; pub use creator::{creator_view, CreatorView}; -pub use equipment::{equipment_tab, EquipmentTab}; +// pub use equipment::{equipment_tab, EquipmentTab}; pub use overview::{overview_tab, OverviewTab}; -pub use splat_extras::{splat_extras_tab, SplatExtrasTab}; +// pub use splat_extras::{splat_extras_tab, SplatExtrasTab}; diff --git a/src/view/overview.rs b/src/view/overview.rs index 7fe31f7..a7e9fbe 100644 --- a/src/view/overview.rs +++ b/src/view/overview.rs @@ -1,11 +1,6 @@ -use closure::closure; -use iced::{ - widget::{column, pick_list, row, text, text_input, Column}, - Alignment, Length, -}; -use iced_lazy::Component; use std::{cell::RefCell, marker::PhantomData, rc::Rc}; +use closure::closure; use cofd::{ character::Wound, prelude::*, @@ -17,16 +12,29 @@ use cofd::{ Merit, Splat, }, }; +use iced::overlay::menu; +use iced::widget::{button, container, scrollable}; +use iced::{ + widget::{column, component, pick_list, row, text, text_input, Column, Component}, + Alignment, Element, Length, +}; +use crate::widget::{dots, track}; use crate::{ - component::{ - attribute_bar, info_bar, integrity_component, list, merit_component, skills_component, - traits_component, - }, + component::{attribute_bar, info_bar, list, skills_component}, + // component::{ + // attribute_bar, info_bar, integrity_component, list, merit_component, skills_component, + // traits_component, + // }, fl, i18n::{flt, Translated}, widget::{dots::Shape, dots::SheetDots, track::HealthTrack}, - Element, COMPONENT_SPACING, H2_SIZE, H3_SIZE, INPUT_PADDING, MAX_INPUT_WIDTH, TITLE_SPACING, + COMPONENT_SPACING, + H2_SIZE, + H3_SIZE, + INPUT_PADDING, + MAX_INPUT_WIDTH, + TITLE_SPACING, }; pub struct OverviewTab { @@ -87,7 +95,16 @@ impl OverviewTab { } } - fn abilities(&self, character: &Character) -> Element { + fn abilities(&self, character: &Character) -> Element + where + Theme: 'static, + Theme: text::StyleSheet + text_input::StyleSheet + dots::StyleSheet, + Theme: pick_list::StyleSheet + + scrollable::StyleSheet + + menu::StyleSheet + + container::StyleSheet, + ::Style: From<::Style>, + { let splat_name = character.splat.name(); let mut col = Column::new() @@ -129,23 +146,20 @@ impl OverviewTab { for (ability, val) in &character.abilities { if ability.is_custom() { col1 = col1.push( - text_input( - "", - ability.name(), - closure!(clone ability, |val| { + text_input("", ability.name()) + .on_input(closure!(clone ability, |val| { let mut new = ability.clone(); *new.name_mut().unwrap() = val; Event::AbilityChanged(ability.clone(), new) - }), - ) - .padding(INPUT_PADDING), + })) + .padding(INPUT_PADDING), ); } else { col1 = col1 .push( pick_list( vec.clone(), - Some(ability.clone().into()), + Some::>(ability.clone().into()), closure!(clone ability, |val| Event::AbilityChanged(ability.clone(), val.unwrap())), ) .width(Length::Fill) @@ -166,10 +180,12 @@ impl OverviewTab { } new = new.push( - pick_list(vec, None, |key| Event::NewAbility(key.unwrap())) - .width(Length::Fill) - .padding(INPUT_PADDING) - .text_size(20), + pick_list(vec, None::>, |key| { + Event::NewAbility(key.unwrap()) + }) + .width(Length::Fill) + .padding(INPUT_PADDING) + .text_size(20), ); } @@ -184,9 +200,16 @@ impl OverviewTab { } } -impl Component for OverviewTab +impl Component for OverviewTab where Message: Clone, + Theme: 'static + button::StyleSheet + iced::widget::checkbox::StyleSheet, + Theme: text::StyleSheet + text_input::StyleSheet + dots::StyleSheet + track::StyleSheet, + Theme: + pick_list::StyleSheet + scrollable::StyleSheet + menu::StyleSheet + container::StyleSheet, + ::Style: From<::Style>, + ::Style: From, + ::Style: From, { type State = (); @@ -348,7 +371,9 @@ where } Event::HuntersAspectChanged(val) => { if let Splat::Werewolf(.., data) = &mut character.splat { - if let HuntersAspect::_Custom(name) = &val && name.eq("") { + if let HuntersAspect::_Custom(name) = &val + && name.eq("") + { data.hunters_aspect = None; } else { data.hunters_aspect = Some(val); @@ -361,7 +386,7 @@ where } #[allow(clippy::too_many_lines)] - fn view(&self, _state: &Self::State) -> iced_native::Element { + fn view(&self, _state: &Self::State) -> Element<'_, Event, Theme> { let character = self.character.borrow(); let health = { @@ -432,7 +457,7 @@ where column![] }; - let integrity = integrity_component(self.character.clone()); + // let integrity = integrity_component(self.character.clone()); let conditions = list( fl!("conditions"), @@ -440,11 +465,10 @@ where None, character.conditions.clone(), |i, val| { - text_input("", &val.unwrap_or_default(), move |val| { - Event::ConditionChanged(i, val) - }) - .padding(INPUT_PADDING) - .into() + text_input("", &val.unwrap_or_default()) + .on_input(move |val| Event::ConditionChanged(i, val)) + .padding(INPUT_PADDING) + .into() }, ); // .max_width(MAX_INPUT_WIDTH); @@ -455,11 +479,10 @@ where Some(3), character.aspirations.clone(), |i, val| { - text_input("", &val.unwrap_or_default(), move |val| { - Event::AspirationChanged(i, val) - }) - .padding(INPUT_PADDING) - .into() + text_input("", &val.unwrap_or_default()) + .on_input(move |val| Event::AspirationChanged(i, val)) + .padding(INPUT_PADDING) + .into() }, ); // .max_width(MAX_INPUT_WIDTH); @@ -476,11 +499,10 @@ where _ => 1, }), data.obsessions.clone(), - |i, val| text_input("", &val.unwrap_or_default(), move |val| { - Event::SplatThingChanged(i, val) - }) - .padding(INPUT_PADDING) - .into() + |i, val| text_input("", &val.unwrap_or_default(),) + .on_input(move |val| { Event::SplatThingChanged(i, val) }) + .padding(INPUT_PADDING) + .into() )] .max_width(MAX_INPUT_WIDTH) } else { @@ -488,44 +510,49 @@ where }; let kuruth_triggers = if let Splat::Werewolf(.., data) = &character.splat { - let (passive, common, specific): (Element, Element, Element) = - if let KuruthTriggers::_Custom(KuruthTriggerSet { - passive, - common, - specific, - }) = &data.triggers - { - ( - text_input("", passive, |passive| { + let (passive, common, specific): ( + Element, + Element, + Element, + ) = if let KuruthTriggers::_Custom(KuruthTriggerSet { + passive, + common, + specific, + }) = &data.triggers + { + ( + text_input("", passive) + .on_input(|passive| { Event::KuruthTriggerChanged(KuruthTrigger::Passive, passive) }) .padding(INPUT_PADDING) .into(), - text_input("", common, |common| { + text_input("", common) + .on_input(|common| { Event::KuruthTriggerChanged(KuruthTrigger::Common, common) }) .padding(INPUT_PADDING) .into(), - text_input("", specific, |specific| { + text_input("", specific) + .on_input(|specific| { Event::KuruthTriggerChanged(KuruthTrigger::Specific, specific) }) .padding(INPUT_PADDING) .into(), - ) - } else { - let name = data.triggers.name().unwrap(); + ) + } else { + let name = data.triggers.name().unwrap(); - let passive = flt("kuruth-triggers", Some(&format!("{name}-passive"))).unwrap(); - let common = flt("kuruth-triggers", Some(&format!("{name}-common"))).unwrap(); - let specific = - flt("kuruth-triggers", Some(&format!("{name}-specific"))).unwrap(); + let passive = flt("kuruth-triggers", Some(&format!("{name}-passive"))).unwrap(); + let common = flt("kuruth-triggers", Some(&format!("{name}-common"))).unwrap(); + let specific = flt("kuruth-triggers", Some(&format!("{name}-specific"))).unwrap(); - ( - text(passive).into(), - text(common).into(), - text(specific).into(), - ) - }; + ( + text(passive).into(), + text(common).into(), + text(specific).into(), + ) + }; let vec: Vec> = KuruthTriggers::all().into_iter().map(Into::into).collect(); @@ -533,9 +560,11 @@ where column![ text(fl!("kuruth-triggers")), column![ - pick_list(vec, Some(data.triggers.clone().into()), |val| { - Event::KuruthTriggersChanged(val.unwrap()) - }) + pick_list( + vec, + Some::>(data.triggers.clone().into()), + |val| { Event::KuruthTriggersChanged(val.unwrap()) } + ) .width(Length::Fill) .padding(INPUT_PADDING), text(fl!("werewolf", "passive")), @@ -555,8 +584,8 @@ where }; let abilities = self.abilities(&character); - let merits = merit_component(self.character.clone(), Event::MeritChanged); - let traits = traits_component(&character, Event::TraitChanged); + // let merits = merit_component(self.character.clone(), Event::MeritChanged); + // let traits = traits_component(&character, Event::TraitChanged); let regalia = if let Splat::Changeling(seeming, .., data) = &character.splat { let sg = seeming.get_favored_regalia(); @@ -564,23 +593,29 @@ where let seeming_regalia = text(flt(character.splat.name(), Some(sg.name())).unwrap()); - let regalia: Element = if let Some(Regalia::_Custom(name)) = &data.regalia { - text_input("", name, |val| Event::RegaliaChanged(Regalia::_Custom(val))) + let regalia: Element = + if let Some(Regalia::_Custom(name)) = &data.regalia { + text_input("", name) + .on_input(|val| Event::RegaliaChanged(Regalia::_Custom(val))) + .width(Length::Fill) + .padding(INPUT_PADDING) + .into() + } else { + let reg: Vec> = all_regalia + .iter() + .filter(|®| reg != sg) + .cloned() + .map(Into::into) + .collect(); + + pick_list( + reg, + data.regalia.clone().map(Into::>::into), + |val| Event::RegaliaChanged(val.unwrap()), + ) .width(Length::Fill) - .padding(INPUT_PADDING) .into() - } else { - let reg: Vec> = all_regalia - .iter().filter(|®| reg != sg).cloned() - .map(Into::into) - .collect(); - - pick_list(reg, data.regalia.clone().map(Into::into), |val| { - Event::RegaliaChanged(val.unwrap()) - }) - .width(Length::Fill) - .into() - }; + }; column![ text(fl!("favored-regalia")).size(H3_SIZE), @@ -592,38 +627,37 @@ where column![] }; - let frailties: Element = if let Splat::Changeling(.., data) = &character.splat - { - list( - fl!("changeling", "frailties"), - Some(3), - Some(3), - data.frailties.clone(), - |i, val| { - text_input("", &val.unwrap_or_default(), move |val| { - Event::SplatThingChanged(i, val) - }) - .padding(INPUT_PADDING) - .into() - }, - ) - .into() - } else { - column![].into() - }; + let frailties: Element = + if let Splat::Changeling(.., data) = &character.splat { + list( + fl!("changeling", "frailties"), + Some(3), + Some(3), + data.frailties.clone(), + |i, val| { + text_input("", &val.unwrap_or_default()) + .on_input(move |val| Event::SplatThingChanged(i, val)) + .padding(INPUT_PADDING) + .into() + }, + ) + .into() + } else { + column![].into() + }; - let banes: Element = if let Splat::Vampire(.., data) = &character.splat { + let banes: Element = if let Splat::Vampire(.., data) = &character.splat + { list( fl!("vampire", "banes"), Some(3), Some(3), data.banes.clone(), |i, val| { - text_input("", &val.unwrap_or_default(), move |val| { - Event::SplatThingChanged(i, val) - }) - .padding(INPUT_PADDING) - .into() + text_input("", &val.unwrap_or_default()) + .on_input(move |val| Event::SplatThingChanged(i, val)) + .padding(INPUT_PADDING) + .into() }, ) .into() @@ -631,7 +665,7 @@ where column![].into() }; - let hunters_aspect: Element = + let hunters_aspect: Element = if let Splat::Werewolf(auspice, tribe, _, data) = &character.splat { let mut vec: Vec> = if let Some(auspice) = auspice { vec![auspice.get_hunters_aspect().clone().into()] @@ -654,16 +688,21 @@ where if let Some(HuntersAspect::_Custom(name)) = &data.hunters_aspect { col = col.push( - text_input("", name, |val| { - Event::HuntersAspectChanged(HuntersAspect::_Custom(val)) - }) - .padding(INPUT_PADDING), + text_input("", name) + .on_input(|val| { + Event::HuntersAspectChanged(HuntersAspect::_Custom(val)) + }) + .padding(INPUT_PADDING), ); } else { col = col.push( - pick_list(vec, data.hunters_aspect.clone().map(Into::into), |val| { - Event::HuntersAspectChanged(val.unwrap()) - }) + pick_list( + vec, + data.hunters_aspect + .clone() + .map(Into::>::into), + |val| Event::HuntersAspectChanged(val.unwrap()), + ) .width(Length::Fill) .padding(INPUT_PADDING), ); @@ -674,7 +713,7 @@ where column![].into() }; - let mut col1 = Column::new() + let mut col1: Column = Column::new() .align_items(Alignment::Center) .width(Length::Fill) .spacing(COMPONENT_SPACING); @@ -682,9 +721,6 @@ where let mut col2 = Column::new() .push(health) .push(willpower) - // .push(st) - // .push(fuel) - // .push(integrity) .spacing(COMPONENT_SPACING) .align_items(Alignment::Center) .width(Length::Fill); @@ -699,50 +735,50 @@ where } } - col2 = col2.push(integrity); + // col2 = col2.push(integrity); match &character.splat { Splat::Vampire(..) => { col1 = col1 .push(abilities) - .push(merits) + // .push(merits) .push(aspirations) .push(banes) .push(conditions); - col2 = col2.push(traits); + // col2 = col2.push(traits); } Splat::Werewolf(..) => { col1 = col1 - .push(merits) + // .push(merits) .push(abilities) .push(aspirations) .push(hunters_aspect) - .push(conditions) - .push(traits); + .push(conditions); + // .push(traits); col2 = col2.push(kuruth_triggers); } Splat::Mage(..) => { - col1 = col1.push(abilities).push(merits).push(traits); + // col1 = col1.push(abilities).push(merits).push(traits); col2 = col2.push(conditions).push(aspirations).push(obsessions); } Splat::Changeling(..) => { col1 = col1 - .push(merits) + // .push(merits) .push(regalia) .push(frailties) .push(aspirations) .push(conditions); - col2 = col2.push(traits); + // col2 = col2.push(traits); } Splat::Bound(..) => { col1 = col1 - .push(merits) + // .push(merits) // Keys .push(abilities); col2 = col2.push(aspirations); } _ => { - col1 = col1.push(merits).push(traits); + // col1 = col1.push(merits).push(traits); col2 = col2.push(conditions).push(aspirations); } } @@ -784,11 +820,18 @@ where } } -impl<'a, Message> From> for Element<'a, Message> +impl<'a, Message, Theme> From> for Element<'a, Message, Theme> where Message: 'a + Clone, + Theme: 'static + button::StyleSheet + iced::widget::checkbox::StyleSheet, + Theme: text::StyleSheet + text_input::StyleSheet + dots::StyleSheet + track::StyleSheet, + Theme: + pick_list::StyleSheet + scrollable::StyleSheet + menu::StyleSheet + container::StyleSheet, + ::Style: From<::Style>, + ::Style: From, + ::Style: From, { fn from(overview_tab: OverviewTab) -> Self { - iced_lazy::component(overview_tab) + component(overview_tab) } } diff --git a/src/view/splat_extras.rs b/src/view/splat_extras.rs index 9be29a2..e056665 100644 --- a/src/view/splat_extras.rs +++ b/src/view/splat_extras.rs @@ -16,7 +16,7 @@ use cofd::{ }; use crate::{ - component::{self, list}, + // component::{self, list}, fl, i18n::{flt, Translated}, widget::dots::{Shape, SheetDots}, diff --git a/src/widget/dots.rs b/src/widget/dots.rs index 39130a3..8ae3376 100644 --- a/src/widget/dots.rs +++ b/src/widget/dots.rs @@ -1,56 +1,15 @@ -use iced::{ - event, mouse, widget::Column, Alignment, Background, Color, Element, Event, Length, Point, - Rectangle, Theme, -}; -use iced_native::{ - layout, renderer, text, touch, - widget::{self, Column as Col, Row, Tree}, - Clipboard, Layout, Shell, Widget, -}; +use std::default::Default; -pub enum Shape { - Dots, - Boxes, -} - -#[derive(Default)] -pub enum Axis { - Vertical, - #[default] - Horizontal, -} +use iced::advanced::layout::{self, Layout}; +use iced::advanced::widget::{self, Widget}; +use iced::advanced::{renderer, Clipboard, Shell}; +use iced::widget::{text, Column, Row}; +use iced::{event, touch, Background, Theme}; +use iced::{mouse, Alignment, Border, Color, Element, Length, Rectangle, Size}; -pub enum ColOrRow<'a, Message, Renderer> { - Col(Col<'a, Message, Renderer>), - Row(Row<'a, Message, Renderer>), -} - -impl<'a, Message, Renderer> ColOrRow<'a, Message, Renderer> { - pub fn push(self, child: impl Into>) -> Self { - match self { - ColOrRow::Col(col) => ColOrRow::Col(col.push(child)), - ColOrRow::Row(row) => ColOrRow::Row(row.push(child)), - } - } -} - -impl<'a, Message, Renderer> From> for Element<'a, Message, Renderer> +pub struct SheetDots<'a, Message, Theme> where - Message: 'a, - Renderer: 'a + text::Renderer, -{ - fn from(val: ColOrRow<'a, Message, Renderer>) -> Self { - match val { - ColOrRow::Col(col) => col.into(), - ColOrRow::Row(row) => row.into(), - } - } -} - -pub struct SheetDots<'a, Message, Renderer> -where - Renderer: text::Renderer, - Renderer::Theme: StyleSheet, + Theme: StyleSheet, { value: u16, min: u16, @@ -58,7 +17,7 @@ where on_click: Box Message + 'a>, size: u16, spacing: u16, - style: ::Style, + style: ::Style, shape: Shape, row_count: Option, axis: Axis, @@ -68,23 +27,19 @@ where fn iter<'a>( layout: Layout<'a>, axis: &Axis, -) -> itertools::Either< - impl Iterator>, - impl Iterator>, -> { +) -> itertools::Either>, impl Iterator>> { let iter = layout.children().flat_map(Layout::children); if let Axis::Horizontal = axis { itertools::Either::Left(iter) } else { - itertools::Either::Right(iter.collect::>().into_iter().rev()) + itertools::Either::Right(iter.collect::>().into_iter().rev()) } } -impl<'a, Message, Renderer> SheetDots<'a, Message, Renderer> +impl<'a, Message, Theme> SheetDots<'a, Message, Theme> where Message: Clone, - Renderer: text::Renderer, - Renderer::Theme: StyleSheet, + Theme: StyleSheet, { /// The default size of a [`Radio`] button. pub const DEFAULT_SIZE: u16 = 19; @@ -134,41 +89,44 @@ where } } -impl<'a, Message, Renderer> Widget for SheetDots<'a, Message, Renderer> +impl<'a, Message, Theme, Renderer> Widget + for SheetDots<'a, Message, Theme> where Message: Clone, - Renderer: text::Renderer, - Renderer::Theme: StyleSheet + widget::text::StyleSheet, + Renderer: renderer::Renderer, + Theme: StyleSheet + text::StyleSheet + 'static, { - fn width(&self) -> iced::Length { - self.width - } - - fn height(&self) -> iced::Length { - iced::Length::Shrink + fn size(&self) -> Size { + Size { + width: self.width, + height: Length::Shrink, + } } - fn layout(&self, renderer: &Renderer, limits: &layout::Limits) -> layout::Node { - let mut col = Column::<(), Renderer>::new() - .spacing(self.spacing) - .width(self.width); + fn layout( + &self, + tree: &mut widget::Tree, + renderer: &Renderer, + limits: &layout::Limits, + ) -> layout::Node { + let mut col = Column::new().spacing(self.spacing).width(self.width); let per_row_count = self.row_count.unwrap_or(self.max); let new_row = || match self.axis { Axis::Vertical => ColOrRow::Col( - Col::<(), Renderer>::new() + Column::new() .spacing(self.spacing) .align_items(Alignment::Center), ), Axis::Horizontal => ColOrRow::Row( - Row::<(), Renderer>::new() + Row::new() .spacing(self.spacing) .align_items(Alignment::Center), ), }; - let mut col_or_row: ColOrRow<(), Renderer> = new_row(); + let mut col_or_row: ColOrRow = new_row(); for i in 0..self.max { col_or_row = col_or_row.push(Row::new().width(self.size).height(self.size)); @@ -187,78 +145,24 @@ where col = col.push(col_or_row); } - col.layout(renderer, limits) - } - - fn on_event( - &mut self, - _state: &mut Tree, - event: Event, - layout: Layout<'_>, - cursor_position: Point, - _renderer: &Renderer, - _clipboard: &mut dyn Clipboard, - shell: &mut Shell<'_, Message>, - ) -> event::Status { - match event { - Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left)) - | Event::Touch(touch::Event::FingerPressed { .. }) => { - for (i, layout) in iter(layout, &self.axis).enumerate() { - if layout.bounds().contains(cursor_position) { - let i = if self.value as usize == i + 1 { - i - } else { - i + 1 - }; - - if i + 1 > self.min as usize { - shell.publish((self.on_click)(i as u16)); - } - - return event::Status::Captured; - } - } - } - _ => {} - } - - event::Status::Ignored - } - - fn mouse_interaction( - &self, - _state: &Tree, - layout: Layout<'_>, - cursor_position: Point, - _viewport: &Rectangle, - _renderer: &Renderer, - ) -> mouse::Interaction { - if layout - .children() - .flat_map(Layout::children) - .any(|layout| layout.bounds().contains(cursor_position)) - { - mouse::Interaction::Pointer - } else { - mouse::Interaction::default() - } + col.layout(tree, renderer, limits) } fn draw( &self, - _state: &Tree, + _state: &widget::Tree, renderer: &mut Renderer, - theme: &Renderer::Theme, + theme: &Theme, _style: &renderer::Style, layout: Layout<'_>, - cursor_position: Point, + cursor: mouse::Cursor, _viewport: &Rectangle, ) { let mut mouse_i = None; for (i, layout) in iter(layout, &self.axis).enumerate() { let bounds = layout.bounds(); - if bounds.contains(cursor_position) { + if let Some(_) = cursor.position_over(bounds) { mouse_i = Some(i); } } @@ -278,12 +182,15 @@ where renderer.fill_quad( renderer::Quad { bounds, - border_radius: match self.shape { - Shape::Dots => (size / 2.0).into(), - Shape::Boxes => (0.0).into(), + border: Border { + radius: match self.shape { + Shape::Dots => (size / 2.0).into(), + Shape::Boxes => (0.0).into(), + }, + width: custom_style.border_width, + color: custom_style.border_color, }, - border_width: custom_style.border_width, - border_color: custom_style.border_color, + ..Default::default() }, custom_style.background, ); @@ -292,28 +199,86 @@ where renderer.fill_quad( renderer::Quad { bounds, - border_radius: match self.shape { - Shape::Dots => dot_size.into(), - Shape::Boxes => (0.0).into(), + border: Border { + radius: match self.shape { + Shape::Dots => dot_size.into(), + Shape::Boxes => (0.0).into(), + }, + width: 0.0, + color: Color::TRANSPARENT, }, - border_width: 0.0, - border_color: Color::TRANSPARENT, + ..Default::default() }, custom_style.dot_color, ); } } } + + fn on_event( + &mut self, + _state: &mut widget::Tree, + event: event::Event, + layout: Layout<'_>, + cursor: mouse::Cursor, + _renderer: &Renderer, + _clipboard: &mut dyn Clipboard, + shell: &mut Shell<'_, Message>, + _viewport: &Rectangle, + ) -> event::Status { + match event { + event::Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left)) + | event::Event::Touch(touch::Event::FingerPressed { .. }) => { + for (i, layout) in iter(layout, &self.axis).enumerate() { + if let Some(_) = cursor.position_over(layout.bounds()) { + let i = if self.value as usize == i + 1 { + i + } else { + i + 1 + }; + + if i + 1 > self.min as usize { + shell.publish((self.on_click)(i as u16)); + } + + return event::Status::Captured; + } + } + } + _ => {} + } + + event::Status::Ignored + } + + fn mouse_interaction( + &self, + _state: &widget::Tree, + layout: Layout<'_>, + cursor: mouse::Cursor, + _viewport: &Rectangle, + _renderer: &Renderer, + ) -> mouse::Interaction { + if layout + .children() + .flat_map(Layout::children) + .any(|layout| cursor.position_over(layout.bounds()).is_some()) + { + mouse::Interaction::Pointer + } else { + mouse::Interaction::default() + } + } } -impl<'a, Message, Renderer> From> - for Element<'a, Message, Renderer> +impl<'a, Message, Theme, Renderer> From> + for Element<'a, Message, Theme, Renderer> where Message: 'a + Clone, - Renderer: 'a + text::Renderer, - Renderer::Theme: StyleSheet + widget::text::StyleSheet, + Renderer: renderer::Renderer, + Theme: StyleSheet + text::StyleSheet + 'static, { - fn from(radio: SheetDots<'a, Message, Renderer>) -> Self { + fn from(radio: SheetDots<'a, Message, Theme>) -> Self { Element::new(radio) } } @@ -363,3 +328,47 @@ impl StyleSheet for Theme { } } } + +pub enum Shape { + Dots, + Boxes, +} + +#[derive(Default)] +pub enum Axis { + Vertical, + #[default] + Horizontal, +} + +pub enum ColOrRow<'a, Message, Theme, Renderer> { + Col(Column<'a, Message, Theme, Renderer>), + Row(Row<'a, Message, Theme, Renderer>), +} + +impl<'a, Message, Theme, Renderer> ColOrRow<'a, Message, Theme, Renderer> +where + Renderer: renderer::Renderer, +{ + pub fn push(self, child: impl Into>) -> Self { + match self { + ColOrRow::Col(col) => ColOrRow::Col(col.push(child)), + ColOrRow::Row(row) => ColOrRow::Row(row.push(child)), + } + } +} + +impl<'a, Message, Theme, Renderer> From> + for Element<'a, Message, Theme, Renderer> +where + Message: 'a, + Renderer: 'a + renderer::Renderer, + Theme: 'static, +{ + fn from(val: ColOrRow<'a, Message, Theme, Renderer>) -> Self { + match val { + ColOrRow::Col(col) => col.into(), + ColOrRow::Row(row) => row.into(), + } + } +} diff --git a/src/widget/track.rs b/src/widget/track.rs index 1d63422..6ead8e6 100644 --- a/src/widget/track.rs +++ b/src/widget/track.rs @@ -1,16 +1,18 @@ -use iced::{event, mouse, Alignment, Background, Color, Element, Event, Point, Rectangle, Theme}; -use iced_native::{ - layout, renderer, text, touch, - widget::{self, Column, Row, Tree}, - Clipboard, Layout, Shell, Widget, -}; +use std::default::Default; + +use iced::advanced::layout::{self, Layout}; +use iced::advanced::widget::{self, Widget}; +use iced::advanced::{renderer, Clipboard, Shell}; +use iced::widget::{text, Column, Row}; +use iced::{event, touch, Background, Theme}; +use iced::{mouse, Alignment, Border, Color, Element, Length, Rectangle, Size}; use cofd::character::{Damage, Wound}; +use iced::border::Radius; -pub struct HealthTrack<'a, Message, Renderer> +pub struct HealthTrack<'a, Message, Theme> where - Renderer: text::Renderer, - Renderer::Theme: StyleSheet, + Theme: StyleSheet, { damage: Damage, max: usize, @@ -18,14 +20,13 @@ where on_click: Box Message + 'a>, size: u16, spacing: u16, - style: ::Style, + style: ::Style, } -impl<'a, Message, Renderer> HealthTrack<'a, Message, Renderer> +impl<'a, Message, Theme> HealthTrack<'a, Message, Theme> where Message: Clone, - Renderer: text::Renderer, - Renderer::Theme: StyleSheet, + Theme: StyleSheet, { /// The default size of a [`Radio`] button. pub const DEFAULT_SIZE: u16 = 19; @@ -49,24 +50,28 @@ where } } -impl<'a, Message, Renderer> Widget for HealthTrack<'a, Message, Renderer> +impl<'a, Message, Theme, Renderer> Widget + for HealthTrack<'a, Message, Theme> where Message: Clone, - Renderer: text::Renderer, - Renderer::Theme: StyleSheet + widget::text::StyleSheet, + Renderer: renderer::Renderer, + Theme: StyleSheet + text::StyleSheet, { - fn width(&self) -> iced::Length { - iced::Length::Shrink - } - - fn height(&self) -> iced::Length { - iced::Length::Shrink + fn size(&self) -> Size { + Size { + width: Length::Shrink, + height: Length::Shrink, + } } - fn layout(&self, renderer: &Renderer, limits: &layout::Limits) -> layout::Node { - let mut col = Column::<(), Renderer>::new() - .spacing(self.spacing) - .width(self.width()); + fn layout( + &self, + tree: &mut widget::Tree, + renderer: &Renderer, + limits: &layout::Limits, + ) -> layout::Node { + let mut col: Column = + Column::new().spacing(self.spacing).width(Length::Shrink); let per_row_count = self.per_row_count.unwrap_or(self.max); @@ -89,24 +94,61 @@ where col = col.push(row); } - col.layout(renderer, limits) + col.layout(tree, renderer, limits) + } + + fn draw( + &self, + _state: &widget::Tree, + renderer: &mut Renderer, + theme: &Theme, + _style: &renderer::Style, + layout: Layout<'_>, + cursor: mouse::Cursor, + _viewport: &Rectangle, + ) { + for (i, layout) in layout.children().flat_map(Layout::children).enumerate() { + let bounds = layout.bounds(); + let custom_style = theme.active(self.style); + + let wound = self.damage.get_i(i); + renderer.fill_quad( + renderer::Quad { + bounds, + border: Border { + radius: 0.into(), + width: custom_style.border_width, + color: custom_style.border_color, + }, + ..Default::default() + }, + // custom_style.background, + match wound { + Wound::None => Color::from_rgb(0.0, 1.0, 0.0), + Wound::Bashing => Color::from_rgb(1.0, 1.0, 0.0), + Wound::Lethal => Color::from_rgb(1.0, 0.8, 0.0), + Wound::Aggravated => Color::from_rgb(1.0, 0.0, 0.0), + }, + ); + } } fn on_event( &mut self, - _state: &mut Tree, - event: Event, + _state: &mut widget::Tree, + event: event::Event, layout: Layout<'_>, - cursor_position: Point, + cursor: mouse::Cursor, _renderer: &Renderer, _clipboard: &mut dyn Clipboard, shell: &mut Shell<'_, Message>, + _viewport: &Rectangle, ) -> event::Status { match event { - Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left)) - | Event::Touch(touch::Event::FingerPressed { .. }) => { + event::Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left)) + | event::Event::Touch(touch::Event::FingerPressed { .. }) => { for (i, layout) in layout.children().flat_map(Layout::children).enumerate() { - if layout.bounds().contains(cursor_position) { + if let Some(_) = cursor.position_over(layout.bounds()) { let wound = self.damage.get_i(i); shell.publish((self.on_click)(wound)); @@ -122,66 +164,32 @@ where fn mouse_interaction( &self, - _state: &Tree, + _state: &widget::Tree, layout: Layout<'_>, - cursor_position: Point, + cursor: mouse::Cursor, _viewport: &Rectangle, _renderer: &Renderer, ) -> mouse::Interaction { if layout .children() .flat_map(Layout::children) - .any(|layout| layout.bounds().contains(cursor_position)) + .any(|layout| cursor.position_over(layout.bounds()).is_some()) { mouse::Interaction::Pointer } else { mouse::Interaction::default() } } - - fn draw( - &self, - _state: &Tree, - renderer: &mut Renderer, - theme: &Renderer::Theme, - _style: &renderer::Style, - layout: Layout<'_>, - _cursor_position: Point, - _viewport: &Rectangle, - ) { - for (i, layout) in layout.children().flat_map(Layout::children).enumerate() { - let bounds = layout.bounds(); - let custom_style = theme.active(self.style); - - let wound = self.damage.get_i(i); - renderer.fill_quad( - renderer::Quad { - bounds, - border_radius: (0.0).into(), - border_width: custom_style.border_width, - border_color: custom_style.border_color, - // ..Default::default() - }, - // custom_style.background, - match wound { - Wound::None => Color::from_rgb(0.0, 1.0, 0.0), - Wound::Bashing => Color::from_rgb(1.0, 1.0, 0.0), - Wound::Lethal => Color::from_rgb(1.0, 0.8, 0.0), - Wound::Aggravated => Color::from_rgb(1.0, 0.0, 0.0), - }, - ); - } - } } -impl<'a, Message, Renderer> From> - for Element<'a, Message, Renderer> +impl<'a, Message, Theme, Renderer> From> + for Element<'a, Message, Theme, Renderer> where Message: 'a + Clone, - Renderer: 'a + text::Renderer, - Renderer::Theme: StyleSheet + widget::text::StyleSheet, + Renderer: 'a + renderer::Renderer, + Theme: StyleSheet + text::StyleSheet + 'static, { - fn from(radio: HealthTrack<'a, Message, Renderer>) -> Self { + fn from(radio: HealthTrack<'a, Message, Theme>) -> Self { Element::new(radio) } }