diff --git a/__gui/druid/Cargo.lock b/__gui/druid/Cargo.lock index 19e2392..41960b1 100644 --- a/__gui/druid/Cargo.lock +++ b/__gui/druid/Cargo.lock @@ -1,10 +1,12 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +version = 3 + [[package]] name = "anyhow" -version = "1.0.40" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b2cd92db5cbd74e8e5028f7e27dd7aa3090e89e4f2a197cc7c8dfb69c7063b" +checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" [[package]] name = "arrayvec" @@ -57,15 +59,15 @@ dependencies = [ [[package]] name = "base-x" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" +checksum = "dc19a4937b4fbd3fe3379793130e42060d10627a360f2127802b10b87e7baf74" [[package]] name = "bitflags" -version = "1.2.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "block" @@ -75,9 +77,9 @@ checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] name = "bumpalo" -version = "3.6.1" +version = "3.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63396b8a4b9de3f4fdfb320ab6080762242f66a8ef174c49d8e19b674db4cdbe" +checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" [[package]] name = "cairo-rs" @@ -107,9 +109,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.67" +version = "1.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd" +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" [[package]] name = "cfg-if" @@ -160,15 +162,15 @@ dependencies = [ [[package]] name = "const_fn" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402da840495de3f976eaefc3485b7f5eb5b0bf9761f9a47be27fe975b3b8c2ec" +checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935" [[package]] name = "core-foundation" -version = "0.9.1" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ "core-foundation-sys", "libc", @@ -176,15 +178,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "core-graphics" -version = "0.22.2" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "269f35f69b542b80e736a20a89a05215c0ce80c2c03c514abb2e318b78379d86" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" dependencies = [ "bitflags", "core-foundation", @@ -371,9 +373,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "futures" -version = "0.3.14" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d5813545e459ad3ca1bff9915e9ad7f1a47dc6a91b627ce321d5863b7dd253" +checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" dependencies = [ "futures-channel", "futures-core", @@ -386,9 +388,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.14" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce79c6a52a299137a6013061e0cf0e688fce5d7f1bc60125f520912fdb29ec25" +checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" dependencies = [ "futures-core", "futures-sink", @@ -396,15 +398,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.14" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "098cd1c6dda6ca01650f1a37a794245eb73181d0d4d4e955e2f3c37db7af1815" +checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" [[package]] name = "futures-executor" -version = "0.3.14" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f6cb7042eda00f0049b1d2080aa4b93442997ee507eb3828e8bd7577f94c9d" +checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" dependencies = [ "futures-core", "futures-task", @@ -413,17 +415,16 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.14" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "365a1a1fb30ea1c03a830fdb2158f5236833ac81fa0ad12fe35b29cddc35cb04" +checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" [[package]] name = "futures-macro" -version = "0.3.14" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668c6733a182cd7deb4f1de7ba3bf2120823835b3bcfbeacf7d2c4a773c1bb8b" +checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" dependencies = [ - "proc-macro-hack", "proc-macro2", "quote", "syn", @@ -431,21 +432,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.14" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5629433c555de3d82861a7a4e3794a4c40040390907cfbfd7143a92a426c23" +checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" [[package]] name = "futures-task" -version = "0.3.14" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba7aa51095076f3ba6d9a1f702f74bd05ec65f555d70d2033d55ba8d69f581bc" +checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" [[package]] name = "futures-util" -version = "0.3.14" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c144ad54d60f23927f0a6b6d816e4271278b64f005ad65e4e35291d2de9c025" +checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" dependencies = [ "futures-channel", "futures-core", @@ -456,8 +457,6 @@ dependencies = [ "memchr", "pin-project-lite", "pin-utils", - "proc-macro-hack", - "proc-macro-nested", "slab", ] @@ -664,27 +663,27 @@ dependencies = [ [[package]] name = "heck" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cbf45460356b7deeb5e3415b5563308c0a9b057c85e12b06ad551f98d0a6ac" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" dependencies = [ "unicode-segmentation", ] [[package]] name = "hermit-abi" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ "libc", ] [[package]] name = "instant" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ "cfg-if", "js-sys", @@ -723,15 +722,15 @@ dependencies = [ [[package]] name = "itoa" -version = "0.4.7" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" +checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" [[package]] name = "js-sys" -version = "0.3.50" +version = "0.3.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d99f9e3e84b8f67f846ef5b4cbbc3b1c29f6c759fcbce6f01aa0e73d932a24c" +checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" dependencies = [ "wasm-bindgen", ] @@ -762,15 +761,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.94" +version = "0.2.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18794a8ad5b29321f790b55d93dfba91e125cb1a9edbd4f8e3150acc771c1a5e" +checksum = "5916d2ae698f6de9bfb891ad7a8d65c09d232dc58cc4ac433c7da3b2fd84bc2b" [[package]] name = "log" -version = "0.4.14" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" dependencies = [ "cfg-if", ] @@ -786,15 +785,15 @@ dependencies = [ [[package]] name = "matches" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" [[package]] name = "memchr" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "objc" @@ -807,9 +806,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.7.2" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3" +checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" [[package]] name = "pango" @@ -923,9 +922,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.6" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc0e1f259c92177c30a4c9d177246edd0a3568b25756a977d0632cf8fa37e905" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "pin-utils" @@ -935,9 +934,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.19" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" +checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" [[package]] name = "proc-macro-crate" @@ -978,35 +977,29 @@ version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" -[[package]] -name = "proc-macro-nested" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" - [[package]] name = "proc-macro2" -version = "1.0.26" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec" +checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1" dependencies = [ "unicode-xid", ] [[package]] name = "quote" -version = "1.0.9" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" dependencies = [ "proc-macro2", ] [[package]] name = "rental" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8545debe98b2b139fb04cad8618b530e9b07c152d99a5de83c860b877d67847f" +checksum = "cc89fe2acac36d212474d138aaf939c04a82df5b61d07011571ebce5aef81f2e" dependencies = [ "rental-impl", "stable_deref_trait", @@ -1040,9 +1033,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.5" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" [[package]] name = "scopeguard" @@ -1067,15 +1060,15 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.125" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "558dc50e1a5a5fa7112ca2ce4effcb321b0300c0d4ccf0776a9f60cd89031171" +checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" [[package]] name = "serde_derive" -version = "1.0.125" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b093b7a2bb58203b5da3056c05b4ec1fed827dcfdb37347a8841695263b3d06d" +checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" dependencies = [ "proc-macro2", "quote", @@ -1084,9 +1077,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.64" +version = "1.0.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79" +checksum = "f972498cf015f7c0746cac89ebe1d6ef10c293b94175a243a2d9442c163d9944" dependencies = [ "itoa", "ryu", @@ -1095,15 +1088,24 @@ dependencies = [ [[package]] name = "sha1" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" +checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" +dependencies = [ + "sha1_smol", +] + +[[package]] +name = "sha1_smol" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" [[package]] name = "simple_logger" -version = "1.11.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd57f17c093ead1d4a1499dc9acaafdd71240908d64775465543b8d9a9f1d198" +checksum = "45b60258a35dc3cb8a16890b8fd6723349bfa458d7960e25e633f1b1c19d7b5e" dependencies = [ "atty", "log", @@ -1112,15 +1114,15 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f173ac3d1a7e3b28003f40de0b5ce7fe2710f9b9dc3fc38664cebee46b3b6527" +checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" [[package]] name = "smallvec" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" +checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" [[package]] name = "stable_deref_trait" @@ -1206,9 +1208,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.71" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad184cc9470f9117b2ac6817bfe297307418819ba40552f9b3846f05c33d5373" +checksum = "7ff7c592601f11445996a06f8ad0c27f094a58857c2f89e97974ab9235b92c52" dependencies = [ "proc-macro2", "quote", @@ -1232,18 +1234,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.24" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f4a65597094d4483ddaed134f409b2cb7c1beccf25201a9f73c719254fa98e" +checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.24" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7765189610d8241a44529806d6fd1f2e0a08734313a35d5b3a556f92b381f3c0" +checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" dependencies = [ "proc-macro2", "quote", @@ -1252,9 +1254,9 @@ dependencies = [ [[package]] name = "time" -version = "0.2.26" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08a8cbfbf47955132d0202d1662f49b2423ae35862aee471f3ba4b133358f372" +checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242" dependencies = [ "const_fn", "libc", @@ -1277,9 +1279,9 @@ dependencies = [ [[package]] name = "time-macros-impl" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c3be1edfad6027c69f5491cf4cb310d1a71ecd6af742788c6ff8bced86b8fa" +checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f" dependencies = [ "proc-macro-hack", "proc-macro2", @@ -1296,9 +1298,9 @@ checksum = "29738eedb4388d9ea620eeab9384884fc3f06f586a2eddb56bedc5885126c7c1" [[package]] name = "toml" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" dependencies = [ "serde", ] @@ -1383,9 +1385,9 @@ dependencies = [ [[package]] name = "unicode-segmentation" -version = "1.7.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796" +checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" [[package]] name = "unicode-xid" @@ -1407,15 +1409,15 @@ checksum = "d63556a25bae6ea31b52e640d7c41d1ab27faba4ccb600013837a3d0b3994ca1" [[package]] name = "version_check" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "wasm-bindgen" -version = "0.2.73" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83240549659d187488f91f33c0f8547cbfef0b2088bc470c116d1d260ef623d9" +checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1423,9 +1425,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.73" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae70622411ca953215ca6d06d3ebeb1e915f0f6613e3b495122878d7ebec7dae" +checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" dependencies = [ "bumpalo", "lazy_static", @@ -1438,9 +1440,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.73" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e734d91443f177bfdb41969de821e15c516931c3c3db3d318fa1b68975d0f6f" +checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1448,9 +1450,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.73" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53739ff08c8a68b0fdbcd54c372b8ab800b1449ab3c9d706503bc7dd1621b2c" +checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" dependencies = [ "proc-macro2", "quote", @@ -1461,15 +1463,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.73" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9a543ae66aa233d14bb765ed9af4a33e81b8b58d1584cf1b47ff8cd0b9e4489" +checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" [[package]] name = "web-sys" -version = "0.3.50" +version = "0.3.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a905d57e488fec8861446d3393670fb50d27a262344013181c2cdf9fff5481be" +checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/__gui/druid/examples/calc.rs b/__gui/druid/examples/calc.rs new file mode 100644 index 0000000..47361cc --- /dev/null +++ b/__gui/druid/examples/calc.rs @@ -0,0 +1,262 @@ +// Copyright 2018 The xi-editor Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Simple calculator. + +use druid::{ + theme, AppLauncher, Color, Data, Lens, LocalizedString, RenderContext, Widget, WidgetExt, + WindowDesc, +}; + +use druid::widget::{CrossAxisAlignment, Flex, Label, Painter}; + +#[derive(Clone, Data, Lens)] +struct CalcState { + /// The number displayed. Generally a valid float. + value: String, + operand: f64, + operator: char, + in_num: bool, +} + +impl CalcState { + fn digit(&mut self, digit: u8) { + if !self.in_num { + self.value.clear(); + self.in_num = true; + } + let ch = (b'0' + digit) as char; + self.value.push(ch); + } + + fn display(&mut self) { + // TODO: change hyphen-minus to actual minus + self.value = self.operand.to_string(); + } + + fn compute(&mut self) { + if self.in_num { + let operand2 = self.value.parse().unwrap_or(0.0); + let result = match self.operator { + '+' => Some(self.operand + operand2), + '−' => Some(self.operand - operand2), + '×' => Some(self.operand * operand2), + '÷' => Some(self.operand / operand2), + _ => None, + }; + if let Some(result) = result { + self.operand = result; + self.display(); + self.in_num = false; + } + } + } + + fn op(&mut self, op: char) { + match op { + '+' | '−' | '×' | '÷' | '=' => { + self.compute(); + self.operand = self.value.parse().unwrap_or(0.0); + self.operator = op; + self.in_num = false; + } + '±' => { + if self.in_num { + if self.value.starts_with('−') { + self.value = self.value[3..].to_string(); + } else { + self.value = ["−", &self.value].concat(); + } + } else { + self.operand = -self.operand; + self.display(); + } + } + '.' => { + if !self.in_num { + self.value = "0".to_string(); + self.in_num = true; + } + if self.value.find('.').is_none() { + self.value.push('.'); + } + } + 'c' => { + self.value = "0".to_string(); + self.in_num = false; + } + 'C' => { + self.value = "0".to_string(); + self.operator = 'C'; + self.in_num = false; + } + '⌫' => { + if self.in_num { + self.value.pop(); + if self.value.is_empty() || self.value == "−" { + self.value = "0".to_string(); + self.in_num = false; + } + } + } + _ => unreachable!(), + } + } +} + +fn op_button_label(op: char, label: String) -> impl Widget { + let painter = Painter::new(|ctx, _, env| { + let bounds = ctx.size().to_rect(); + + ctx.fill(bounds, &env.get(theme::PRIMARY_DARK)); + + if ctx.is_hot() { + ctx.stroke(bounds.inset(-0.5), &Color::WHITE, 1.0); + } + + if ctx.is_active() { + ctx.fill(bounds, &env.get(theme::PRIMARY_LIGHT)); + } + }); + + Label::new(label) + .with_text_size(24.) + .center() + .background(painter) + .expand() + .on_click(move |_ctx, data: &mut CalcState, _env| data.op(op)) +} + +fn op_button(op: char) -> impl Widget { + op_button_label(op, op.to_string()) +} + +fn digit_button(digit: u8) -> impl Widget { + let painter = Painter::new(|ctx, _, env| { + let bounds = ctx.size().to_rect(); + + ctx.fill(bounds, &env.get(theme::BACKGROUND_LIGHT)); + + if ctx.is_hot() { + ctx.stroke(bounds.inset(-0.5), &Color::WHITE, 1.0); + } + + if ctx.is_active() { + ctx.fill(bounds, &Color::rgb8(0x71, 0x71, 0x71)); + } + }); + + Label::new(format!("{}", digit)) + .with_text_size(24.) + .center() + .background(painter) + .expand() + .on_click(move |_ctx, data: &mut CalcState, _env| data.digit(digit)) +} + +fn flex_row( + w1: impl Widget + 'static, + w2: impl Widget + 'static, + w3: impl Widget + 'static, + w4: impl Widget + 'static, +) -> impl Widget { + Flex::row() + .with_flex_child(w1, 1.0) + .with_spacer(1.0) + .with_flex_child(w2, 1.0) + .with_spacer(1.0) + .with_flex_child(w3, 1.0) + .with_spacer(1.0) + .with_flex_child(w4, 1.0) +} + +fn build_calc() -> impl Widget { + let display = Label::new(|data: &String, _env: &_| data.clone()) + .with_text_size(32.0) + .lens(CalcState::value) + .padding(5.0); + Flex::column() + .with_flex_spacer(0.2) + .with_child(display) + .with_flex_spacer(0.2) + .cross_axis_alignment(CrossAxisAlignment::End) + .with_flex_child( + flex_row( + op_button_label('c', "CE".to_string()), + op_button('C'), + op_button('⌫'), + op_button('÷'), + ), + 1.0, + ) + .with_spacer(1.0) + .with_flex_child( + flex_row( + digit_button(7), + digit_button(8), + digit_button(9), + op_button('×'), + ), + 1.0, + ) + .with_spacer(1.0) + .with_flex_child( + flex_row( + digit_button(4), + digit_button(5), + digit_button(6), + op_button('−'), + ), + 1.0, + ) + .with_spacer(1.0) + .with_flex_child( + flex_row( + digit_button(1), + digit_button(2), + digit_button(3), + op_button('+'), + ), + 1.0, + ) + .with_spacer(1.0) + .with_flex_child( + flex_row( + op_button('±'), + digit_button(0), + op_button('.'), + op_button('='), + ), + 1.0, + ) +} + +pub fn main() { + let window = WindowDesc::new(build_calc) + .window_size((223., 300.)) + .resizable(false) + .title( + LocalizedString::new("calc-demo-window-title").with_placeholder("Simple Calculator"), + ); + let calc_state = CalcState { + value: "0".to_string(), + operand: 0.0, + operator: 'C', + in_num: false, + }; + AppLauncher::with_window(window) + .use_simple_logger() + .launch(calc_state) + .expect("launch failed"); +} \ No newline at end of file diff --git a/__gui/druid/examples/ex1.rs b/__gui/druid/examples/ex1.rs new file mode 100644 index 0000000..fd99bd2 --- /dev/null +++ b/__gui/druid/examples/ex1.rs @@ -0,0 +1,48 @@ +use druid::widget::{Align, Flex, Label, TextBox}; +use druid::{AppLauncher, Data, Env, Lens, LocalizedString, Widget, WindowDesc, WidgetExt}; + +const VERTICAL_WIDGET_SPACING: f64 = 20.0; +const TEXT_BOX_WIDTH: f64 = 200.0; +const WINDOW_TITLE: LocalizedString = LocalizedString::new("Hello World!"); + +#[derive(Clone, Data, Lens)] +struct HelloState { + name: String, +} + +fn main() { + // describe the main window + let main_window = WindowDesc::new(build_root_widget) + .title(WINDOW_TITLE) + .window_size((400.0, 400.0)); + + // create the initial app state + let initial_state = HelloState { + name: "World".into(), + }; + + // start the application + AppLauncher::with_window(main_window) + .launch(initial_state) + .expect("Failed to launch application"); +} + +fn build_root_widget() -> impl Widget { + // a label that will determine its text based on the current app data. + let label = Label::new(|data: &HelloState, _env: &Env| format!("Hello {}!", data.name)); + // a text box that modifies `name`. + let text_box = TextBox::new() + .with_placeholder("Who are we greeting?") + .fix_width(TEXT_BOX_WIDTH) + // .expand_width() + .lens(HelloState::name); + + // arrange the two widgets vertically, with some padding + let layout = Flex::column() + .with_child(label) + .with_spacer(VERTICAL_WIDGET_SPACING) + .with_child(text_box); + + // center the two widgets in the available space + Align::centered(layout) +} \ No newline at end of file diff --git a/__gui/druid/examples/flex.rs b/__gui/druid/examples/flex.rs new file mode 100644 index 0000000..bcf4a2b --- /dev/null +++ b/__gui/druid/examples/flex.rs @@ -0,0 +1,332 @@ +// Copyright 2020 The xi-editor Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Demonstrates alignment of children in the flex container. + +use druid::widget::prelude::*; +use druid::widget::{ + Button, Checkbox, CrossAxisAlignment, Flex, Label, MainAxisAlignment, ProgressBar, RadioGroup, + SizedBox, Slider, Stepper, Switch, TextBox, WidgetExt, +}; +use druid::{ + AppLauncher, Color, Data, Lens, LensExt, LocalizedString, PlatformError, WidgetId, WindowDesc, +}; + +const DEFAULT_SPACER_SIZE: f64 = 8.; + +#[derive(Clone, Data, Lens)] +struct AppState { + demo_state: DemoState, + params: Params, +} + +#[derive(Clone, Data, Lens)] +struct DemoState { + pub input_text: String, + pub enabled: bool, + volume: f64, +} + +#[derive(Clone, Data, Lens)] +struct Params { + axis: FlexType, + cross_alignment: CrossAxisAlignment, + main_alignment: MainAxisAlignment, + fill_major_axis: bool, + debug_layout: bool, + fix_minor_axis: bool, + fix_major_axis: bool, + spacers: Spacers, + spacer_size: f64, +} + +#[derive(Clone, Copy, PartialEq, Data)] +enum Spacers { + None, + Flex, + Fixed, +} + +#[derive(Clone, Copy, PartialEq, Data)] +enum FlexType { + Row, + Column, +} + +/// builds a child Flex widget from some paramaters. +struct Rebuilder { + inner: Box>, +} + +impl Rebuilder { + fn new() -> Rebuilder { + Rebuilder { + inner: SizedBox::empty().boxed(), + } + } + + fn rebuild_inner(&mut self, data: &AppState) { + self.inner = build_widget(&data.params); + } +} + +impl Widget for Rebuilder { + fn event(&mut self, ctx: &mut EventCtx, event: &Event, data: &mut AppState, env: &Env) { + self.inner.event(ctx, event, data, env) + } + + fn lifecycle(&mut self, ctx: &mut LifeCycleCtx, event: &LifeCycle, data: &AppState, env: &Env) { + if let LifeCycle::WidgetAdded = event { + self.rebuild_inner(data); + } + self.inner.lifecycle(ctx, event, data, env) + } + + fn update(&mut self, ctx: &mut UpdateCtx, old_data: &AppState, data: &AppState, env: &Env) { + if !old_data.params.same(&data.params) { + self.rebuild_inner(data); + ctx.children_changed(); + } else { + self.inner.update(ctx, old_data, data, env); + } + } + + fn layout( + &mut self, + ctx: &mut LayoutCtx, + bc: &BoxConstraints, + data: &AppState, + env: &Env, + ) -> Size { + self.inner.layout(ctx, bc, data, env) + } + + fn paint(&mut self, ctx: &mut PaintCtx, data: &AppState, env: &Env) { + self.inner.paint(ctx, data, env) + } + + fn id(&self) -> Option { + self.inner.id() + } +} + +fn make_control_row() -> impl Widget { + Flex::row() + .cross_axis_alignment(CrossAxisAlignment::Start) + .with_child( + Flex::column() + .cross_axis_alignment(CrossAxisAlignment::Start) + .with_child(Label::new("Type:").padding(5.0)) + .with_child( + RadioGroup::new(vec![("Row", FlexType::Row), ("Column", FlexType::Column)]) + .lens(Params::axis), + ), + ) + .with_child( + Flex::column() + .cross_axis_alignment(CrossAxisAlignment::Start) + .with_child(Label::new("CrossAxis:").padding(5.0)) + .with_child( + RadioGroup::new(vec![ + ("Start", CrossAxisAlignment::Start), + ("Center", CrossAxisAlignment::Center), + ("End", CrossAxisAlignment::End), + ]) + .lens(Params::cross_alignment), + ), + ) + .with_child( + Flex::column() + .cross_axis_alignment(CrossAxisAlignment::Start) + .with_child(Label::new("MainAxis:").padding(5.0)) + .with_child( + RadioGroup::new(vec![ + ("Start", MainAxisAlignment::Start), + ("Center", MainAxisAlignment::Center), + ("End", MainAxisAlignment::End), + ("Between", MainAxisAlignment::SpaceBetween), + ("Evenly", MainAxisAlignment::SpaceEvenly), + ("Around", MainAxisAlignment::SpaceAround), + ]) + .lens(Params::main_alignment), + ), + ) + .with_child(make_spacer_select()) + .with_child( + Flex::column() + .cross_axis_alignment(CrossAxisAlignment::Start) + .with_child(Label::new("Misc:").padding((0., 0., 0., 10.))) + .with_child(Checkbox::new("Debug layout").lens(Params::debug_layout)) + .with_spacer(10.) + .with_child(Checkbox::new("Fill main axis").lens(Params::fill_major_axis)) + .with_spacer(10.) + .with_child(Checkbox::new("Fix minor axis size").lens(Params::fix_minor_axis)) + .with_spacer(10.) + .with_child(Checkbox::new("Fix major axis size").lens(Params::fix_major_axis)) + .padding(5.0), + ) + .border(Color::grey(0.6), 2.0) + .rounded(5.0) + .lens(AppState::params) +} + +fn make_spacer_select() -> impl Widget { + Flex::column() + .cross_axis_alignment(CrossAxisAlignment::Start) + .with_child(Label::new("Insert Spacers:").padding(5.0)) + .with_child( + RadioGroup::new(vec![ + ("None", Spacers::None), + ("Flex", Spacers::Flex), + ("Fixed:", Spacers::Fixed), + ]) + .lens(Params::spacers), + ) + .with_child( + Flex::row() + .with_child( + TextBox::new() + .parse() + .lens( + Params::spacer_size + .map(|x| Some(*x), |x, y| *x = y.unwrap_or(DEFAULT_SPACER_SIZE)), + ) + .fix_width(60.0), + ) + .with_child( + Stepper::new() + .with_range(2.0, 50.0) + .with_step(2.0) + .lens(Params::spacer_size), + ) + .padding((8.0, 5.0)), + ) +} + +fn space_if_needed(flex: &mut Flex, params: &Params) { + match params.spacers { + Spacers::None => (), + Spacers::Fixed => flex.add_spacer(params.spacer_size), + Spacers::Flex => flex.add_flex_spacer(1.0), + } +} + +fn build_widget(state: &Params) -> Box> { + let flex = match state.axis { + FlexType::Column => Flex::column(), + FlexType::Row => Flex::row(), + } + .cross_axis_alignment(state.cross_alignment) + .main_axis_alignment(state.main_alignment) + .must_fill_main_axis(state.fill_major_axis); + + let mut flex = flex.with_child(TextBox::new().lens(DemoState::input_text)); + space_if_needed(&mut flex, state); + + flex.add_child( + Button::new("Clear").on_click(|_ctx, data: &mut DemoState, _env| { + data.input_text.clear(); + data.enabled = false; + data.volume = 0.0; + }), + ); + + space_if_needed(&mut flex, state); + + flex.add_child(Label::new(|data: &DemoState, _: &Env| { + data.input_text.clone() + })); + space_if_needed(&mut flex, state); + flex.add_child(Checkbox::new("Demo").lens(DemoState::enabled)); + space_if_needed(&mut flex, state); + flex.add_child(Slider::new().lens(DemoState::volume)); + space_if_needed(&mut flex, state); + flex.add_child(ProgressBar::new().lens(DemoState::volume)); + space_if_needed(&mut flex, state); + flex.add_child( + Stepper::new() + .with_range(0.0, 1.0) + .with_step(0.1) + .with_wraparound(true) + .lens(DemoState::volume), + ); + space_if_needed(&mut flex, state); + flex.add_child(Switch::new().lens(DemoState::enabled)); + + let flex = flex + .background(Color::rgba8(0, 0, 0xFF, 0x30)) + .lens(AppState::demo_state); + + let mut flex = SizedBox::new(flex); + if state.fix_minor_axis { + match state.axis { + FlexType::Row => flex = flex.height(200.), + FlexType::Column => flex = flex.width(200.), + } + } + + if state.fix_major_axis { + match state.axis { + FlexType::Row => flex = flex.width(600.), + FlexType::Column => flex = flex.height(300.), + } + } + + if state.debug_layout { + flex.debug_paint_layout().boxed() + } else { + flex.boxed() + } +} + +fn make_ui() -> impl Widget { + Flex::column() + .must_fill_main_axis(true) + .with_child(make_control_row()) + .with_spacer(20.) + .with_flex_child(Rebuilder::new(), 1.0) + .padding(10.0) +} + +pub fn main() -> Result<(), PlatformError> { + let main_window = WindowDesc::new(make_ui) + .window_size((620., 600.00)) + .with_min_size((620., 265.00)) + .title(LocalizedString::new("Flex Container Options")); + + let demo_state = DemoState { + input_text: "hello".into(), + enabled: false, + volume: 0.0, + }; + + let params = Params { + axis: FlexType::Row, + cross_alignment: CrossAxisAlignment::Center, + main_alignment: MainAxisAlignment::Start, + debug_layout: false, + fix_minor_axis: false, + fix_major_axis: false, + spacers: Spacers::None, + spacer_size: DEFAULT_SPACER_SIZE, + fill_major_axis: false, + }; + + let data = AppState { demo_state, params }; + + AppLauncher::with_window(main_window) + .use_simple_logger() + .launch(data)?; + Ok(()) +} \ No newline at end of file