diff --git a/Cargo.lock b/Cargo.lock index 437eeb0d..1e56749b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,22 +8,6 @@ version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" -[[package]] -name = "ab_glyph" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5110f1c78cf582855d895ecd0746b653db010cec6d9f5575293f27934d980a39" -dependencies = [ - "ab_glyph_rasterizer", - "owned_ttf_parser", -] - -[[package]] -name = "ab_glyph_rasterizer" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" - [[package]] name = "addr2line" version = "0.19.0" @@ -178,9 +162,9 @@ checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" [[package]] name = "ash" -version = "0.37.2+1.3.238" +version = "0.37.3+1.3.251" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28bf19c1f0a470be5fbf7522a308a05df06610252c5bcf5143e1b23f629a9a03" +checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a" dependencies = [ "libloading 0.7.4", ] @@ -246,7 +230,7 @@ checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -263,7 +247,7 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -289,9 +273,9 @@ dependencies = [ [[package]] name = "base64" -version = "0.21.0" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" [[package]] name = "bincode" @@ -371,9 +355,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.12.2" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b" +checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" [[package]] name = "bytemuck" @@ -392,7 +376,7 @@ checksum = "fdde5c9cd29ebd706ce1b35600920a33550e402fc998a2e53ad3b42c3c47a192" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -484,7 +468,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -559,9 +543,9 @@ dependencies = [ [[package]] name = "console" -version = "0.15.6" +version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0525278dce688103060006713371cedbad27186c7d913f33d866b498da0f595" +checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" dependencies = [ "encode_unicode", "lazy_static", @@ -931,7 +915,7 @@ checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -1122,7 +1106,7 @@ checksum = "af8d8cbea8f21307d7e84bca254772981296f058a1d36b461bf4d83a7499fc9e" dependencies = [ "fontconfig-parser", "log", - "memmap2 0.6.1", + "memmap2 0.6.2", "slotmap", "tinyvec", "ttf-parser 0.19.0", @@ -1215,7 +1199,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -1307,9 +1291,9 @@ checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" [[package]] name = "glow" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e007a07a24de5ecae94160f141029e9a347282cfe25d1d58d85d845cf3130f1" +checksum = "807edf58b70c0b5b2181dd39fe1839dbdb3ba02645630dc5f753e23da307f762" dependencies = [ "js-sys", "slotmap", @@ -1380,6 +1364,12 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "grid" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eec1c01eb1de97451ee0d60de7d81cf1e72aabefb021616027f3d1c3ec1c723c" + [[package]] name = "h2" version = "0.3.19" @@ -1643,7 +1633,7 @@ dependencies = [ "log", "lyon", "lz4_flex", - "memmap2 0.6.1", + "memmap2 0.6.2", "notify", "open", "pollster", @@ -1653,7 +1643,8 @@ dependencies = [ "serde", "serde_yaml", "syntect", - "tiny-skia 0.9.1", + "taffy", + "tiny-skia", "toml", "twox-hash", "usvg", @@ -1708,9 +1699,9 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ "hermit-abi 0.3.1", "libc", @@ -1916,12 +1907,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de" [[package]] name = "lru" @@ -2039,9 +2027,9 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0aa1b505aeecb0adb017db2b6a79a17a38e64f882a201f05e9de8a982cd6096" +checksum = "6d28bba84adfe6646737845bc5ebbfa2c08424eb1c37e94a1fd2a82adb56a872" dependencies = [ "libc", ] @@ -2111,21 +2099,21 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", "log", "wasi", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] name = "naga" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94d3edd593521f4a1dfd9b25193ed0224764572905f013d30ca5fbb85e010876" +checksum = "80cd00bd6180a8790f1c020ed258a46b8d73dd5bd6af104a238c9d71f806938e" dependencies = [ "bit-set", "bitflags 1.3.2", @@ -2395,9 +2383,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.17.1" +version = "1.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" +checksum = "9670a07f94779e00908f3e686eab508878ebb390ba6e604d3a284c00e8d0487b" [[package]] name = "onig" @@ -2433,9 +2421,9 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.52" +version = "0.10.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56" +checksum = "12df40a956736488b7b44fe79fe12d4f245bb5b3f5a1f6095e499760015be392" dependencies = [ "bitflags 1.3.2", "cfg-if", @@ -2454,7 +2442,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -2465,9 +2453,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.87" +version = "0.9.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e" +checksum = "c2ce0f250f34a308dcfdbb351f511359857d4ed2134ba715a4eadd46e1ffd617" dependencies = [ "cc", "libc", @@ -2542,15 +2530,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "owned_ttf_parser" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "706de7e2214113d63a8238d1910463cfce781129a6f263d13fdb09ff64355ba4" -dependencies = [ - "ttf-parser 0.19.0", -] - [[package]] name = "parking" version = "2.1.0" @@ -2671,7 +2650,7 @@ checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -2801,9 +2780,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.58" +version = "1.0.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa1fb82fc0c281dd9671101b66b771ebbe1eaf967b96ac8740dcba4b70005ca8" +checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b" dependencies = [ "unicode-ident", ] @@ -2834,9 +2813,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500" +checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" dependencies = [ "proc-macro2", ] @@ -2948,13 +2927,13 @@ dependencies = [ [[package]] name = "regex" -version = "1.8.1" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370" +checksum = "81ca098a9821bd52d6b24fd8b10bd081f47d39c22778cafaa75a2857a62c6390" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.7.1", + "regex-syntax 0.7.2", ] [[package]] @@ -2965,9 +2944,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" +checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" [[package]] name = "renderdoc-sys" @@ -3016,9 +2995,9 @@ dependencies = [ [[package]] name = "resvg" -version = "0.33.0" +version = "0.34.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df5f3de3bb51d8a4766a1ef5d85851f2737716dea899516248d25e313a51b0d" +checksum = "b0e3d65cea36eefb28a020edb6e66341764e00cd4b426e0c1f0599b1adaa78f5" dependencies = [ "gif", "jpeg-decoder", @@ -3026,9 +3005,8 @@ dependencies = [ "pico-args", "png", "rgb", - "svgfilters", "svgtypes", - "tiny-skia 0.9.1", + "tiny-skia", "usvg", ] @@ -3041,19 +3019,6 @@ dependencies = [ "bytemuck", ] -[[package]] -name = "rosvgtree" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad747e7384940e7bf33b15ba433b7bad9f44c0c6d5287a67c2cb22cd1743d497" -dependencies = [ - "log", - "roxmltree", - "simplecss", - "siphasher", - "svgtypes", -] - [[package]] name = "roxmltree" version = "0.18.0" @@ -3158,19 +3123,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" -[[package]] -name = "sctk-adwaita" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda4e97be1fd174ccc2aae81c8b694e803fa99b34e8fd0f057a9d70698e3ed09" -dependencies = [ - "ab_glyph", - "log", - "memmap2 0.5.10", - "smithay-client-toolkit", - "tiny-skia 0.8.4", -] - [[package]] name = "security-framework" version = "2.9.1" @@ -3211,7 +3163,7 @@ checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -3233,7 +3185,7 @@ checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -3407,9 +3359,9 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "strict-num" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9df65f20698aeed245efdde3628a6b559ea1239bbb871af1b6e3b58c413b2bd1" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" dependencies = [ "float-cmp", ] @@ -3452,16 +3404,6 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2" -[[package]] -name = "svgfilters" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "639abcebc15fdc2df179f37d6f5463d660c1c79cd552c12343a4600827a04bce" -dependencies = [ - "float-cmp", - "rgb", -] - [[package]] name = "svgtypes" version = "0.11.0" @@ -3495,9 +3437,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.16" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01" +checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" dependencies = [ "proc-macro2", "quote", @@ -3538,6 +3480,17 @@ dependencies = [ "windows-sys 0.45.0", ] +[[package]] +name = "taffy" +version = "0.3.11" +source = "git+https://github.com/DioxusLabs/taffy?rev=d338f3731da519d182bbc074de46382984ab7c4a#d338f3731da519d182bbc074de46382984ab7c4a" +dependencies = [ + "arrayvec", + "grid", + "num-traits", + "slotmap", +] + [[package]] name = "tempfile" version = "3.5.0" @@ -3588,7 +3541,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -3631,23 +3584,9 @@ dependencies = [ [[package]] name = "tiny-skia" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8493a203431061e901613751931f047d1971337153f96d0e5e363d6dbf6a67" -dependencies = [ - "arrayref", - "arrayvec", - "bytemuck", - "cfg-if", - "png", - "tiny-skia-path 0.8.4", -] - -[[package]] -name = "tiny-skia" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce2986c82f77818c7b9144c70818fdde98db15308e329ae2f7204d767808fd3c" +checksum = "7db11798945fa5c3e5490c794ccca7c6de86d3afdd54b4eb324109939c6f37bc" dependencies = [ "arrayref", "arrayvec", @@ -3655,25 +3594,14 @@ dependencies = [ "cfg-if", "log", "png", - "tiny-skia-path 0.9.0", -] - -[[package]] -name = "tiny-skia-path" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adbfb5d3f3dd57a0e11d12f4f13d4ebbbc1b5c15b7ab0a156d030b21da5f677c" -dependencies = [ - "arrayref", - "bytemuck", - "strict-num", + "tiny-skia-path", ] [[package]] name = "tiny-skia-path" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7acb0ccda1ac91084353a56d0b69b0e29c311fd809d2088b1ed2f9ae1841c47" +checksum = "2f60aa35c89ac2687ace1a2556eaaea68e8c0d47408a2e3e7f5c98a489e7281c" dependencies = [ "arrayref", "bytemuck", @@ -3697,9 +3625,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.28.1" +version = "1.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105" +checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" dependencies = [ "autocfg", "bytes", @@ -3758,9 +3686,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.19.9" +version = "0.19.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d964908cec0d030b812013af25a0e57fddfadb1e066ecc6681d86253129d4f" +checksum = "2380d56e8670370eee6566b0bfd4265f65b3f432e8c6d85623f728d4fa31f739" dependencies = [ "indexmap", "serde", @@ -3795,7 +3723,7 @@ checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -3884,9 +3812,9 @@ checksum = "2281c8c1d221438e373249e065ca4989c4c36952c211ff21a0ee91c44a3869e7" [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" [[package]] name = "unicode-linebreak" @@ -3962,9 +3890,9 @@ dependencies = [ [[package]] name = "usvg" -version = "0.33.0" +version = "0.34.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae32eb823aab35fc343b19c4d354f70e713b442ce34cdfa8497bf6c39af8a342" +checksum = "d2304b933107198a910c1f3219acb65246f2b148f862703cffd51c6e62156abe" dependencies = [ "base64", "log", @@ -3977,26 +3905,27 @@ dependencies = [ [[package]] name = "usvg-parser" -version = "0.33.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7529174e721c8078d62b08399258469b1d68b4e5f2983b347d6a9d39779366c" +checksum = "12b940fea80394e3b14cb21c83fa1b8f8a41023c25929bba68bb84a76193ebed" dependencies = [ "data-url", "flate2", "imagesize", "kurbo", "log", - "rosvgtree", - "strict-num", + "roxmltree", + "simplecss", + "siphasher", "svgtypes", "usvg-tree", ] [[package]] name = "usvg-text-layout" -version = "0.33.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e672fbc19261c6553113cc04ff2ff38ae52fadbd90f2d814040857795fb5c50" +checksum = "69dfd6119f431aa7e969b4a69f9cc8b9ae37b8ae85bb26780ccfa3beaf8b71eb" dependencies = [ "fontdb 0.14.1", "kurbo", @@ -4010,14 +3939,14 @@ dependencies = [ [[package]] name = "usvg-tree" -version = "0.33.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a56e9cd3be5eb6d6744477e95b82d52d393fc1dba4b5b090912c33af337c20b" +checksum = "3185eb13b6e3d3cf1817d29612251cc308d5a7e5e6235362e67efe832435c6d9" dependencies = [ - "kurbo", "rctree", "strict-num", "svgtypes", + "tiny-skia-path", ] [[package]] @@ -4109,7 +4038,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", "wasm-bindgen-shared", ] @@ -4143,7 +4072,7 @@ checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4258,9 +4187,9 @@ checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" [[package]] name = "wgpu" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13edd72c7b08615b7179dd7e778ee3f0bdc870ef2de9019844ff2cceeee80b11" +checksum = "3059ea4ddec41ca14f356833e2af65e7e38c0a8f91273867ed526fb9bafcca95" dependencies = [ "arrayvec", "cfg-if", @@ -4282,9 +4211,9 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625bea30a0ba50d88025f95c80211d1a85c86901423647fb74f397f614abbd9a" +checksum = "8f478237b4bf0d5b70a39898a66fa67ca3a007d79f2520485b8b0c3dfc46f8c2" dependencies = [ "arrayvec", "bit-vec", @@ -4581,7 +4510,6 @@ dependencies = [ "percent-encoding", "raw-window-handle", "redox_syscall 0.3.5", - "sctk-adwaita", "smithay-client-toolkit", "wasm-bindgen", "wayland-client", @@ -4664,9 +4592,9 @@ dependencies = [ [[package]] name = "xml-rs" -version = "0.8.11" +version = "0.8.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1690519550bfa95525229b9ca2350c63043a4857b3b0013811b2ccf4a2420b01" +checksum = "2d8f380ae16a37b30e6a2cf67040608071384b1450c189e61bea3ff57cde922d" [[package]] name = "xmlparser" diff --git a/Cargo.toml b/Cargo.toml index 9de35659..3a99eb45 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,9 +32,9 @@ html5ever = "0.26.0" image = "0.24.6" clap = { version = "4.2.7", features = ["cargo"] } copypasta = { version = "0.8.2", default-features = false } -resvg = "0.33.0" -usvg = "0.33.0" -tiny-skia = "0.9.0" +resvg = "0.34.1" +usvg = "0.34.1" +tiny-skia = "0.10.0" anyhow = "1.0.71" dirs = "5.0.1" serde = { version = "1.0.162", features = ["derive"] } @@ -55,6 +55,7 @@ indexmap = { version = "1.9.3", features = ["serde"] } html-escape = "0.2.13" fxhash = "0.2.1" twox-hash = "1.6.3" +taffy = { git = "https://github.com/DioxusLabs/taffy", rev = "d338f3731da519d182bbc074de46382984ab7c4a" } syntect = "5.0.0" [dependencies.glyphon] @@ -77,4 +78,4 @@ lto = true [dev-dependencies] insta = "1.29.0" -pretty_assertions = "1.3.0" +pretty_assertions = "1.3.0" \ No newline at end of file diff --git a/src/image/mod.rs b/src/image/mod.rs index 6a51d824..360972fe 100644 --- a/src/image/mod.rs +++ b/src/image/mod.rs @@ -9,7 +9,7 @@ use std::io; use std::path::PathBuf; use std::sync::{Arc, Mutex}; use std::time::Instant; -use usvg::{Size as UsvgSize, TreeParsing, TreeTextToPath}; +use usvg::{TreeParsing, TreeTextToPath}; use wgpu::util::DeviceExt; use wgpu::{BindGroup, Device, TextureFormat}; use winit::event_loop::EventLoopProxy; @@ -196,18 +196,18 @@ impl Image { fontdb.load_system_fonts(); let mut tree = usvg::Tree::from_data(&image_data, &opt).unwrap(); tree.size = tree.size.scale_to( - UsvgSize::new( - tree.size.width() * hidpi_scale as f64, - tree.size.height() * hidpi_scale as f64, + tiny_skia::Size::from_wh( + tree.size.width() * hidpi_scale, + tree.size.height() * hidpi_scale, ) .unwrap(), ); tree.convert_text(&fontdb); let rtree = resvg::Tree::from_usvg(&tree); - let pixmap_size = resvg::IntSize::from_usvg(rtree.size); - let mut pixmap = tiny_skia::Pixmap::new(pixmap_size.width(), pixmap_size.height()) - .context("Couldn't create svg pixmap") - .unwrap(); + let mut pixmap = + tiny_skia::Pixmap::new(rtree.size.width() as u32, rtree.size.height() as u32) + .context("Couldn't create svg pixmap") + .unwrap(); rtree.render(tiny_skia::Transform::default(), &mut pixmap.as_mut()); ImageData::new( ImageBuffer::from_raw(pixmap.width(), pixmap.height(), pixmap.data().into()) diff --git a/src/main.rs b/src/main.rs index 425ff2de..3ddf3438 100644 --- a/src/main.rs +++ b/src/main.rs @@ -30,15 +30,16 @@ use positioner::Spacer; use positioner::DEFAULT_MARGIN; use positioner::DEFAULT_PADDING; use renderer::Renderer; +use taffy::Taffy; use text::TextBox; use text::TextSystem; use utils::{ImageCache, Point, Rect, Size}; use anyhow::Context; -#[cfg(feature = "x11")] -use copypasta::{ClipboardContext, ClipboardProvider}; #[cfg(feature = "wayland")] use copypasta::{nop_clipboard::NopClipboardContext as ClipboardContext, ClipboardProvider}; +#[cfg(feature = "x11")] +use copypasta::{ClipboardContext, ClipboardProvider}; use notify::{RecommendedWatcher, RecursiveMode, Watcher}; use winit::event::ModifiersState; @@ -405,6 +406,7 @@ impl Inlyne { let cursor_icon = if let Some(hoverable) = Self::find_hoverable( &mut self.renderer.text_system, + &mut self.renderer.positioner.taffy, &self.elements, loc, screen_size, @@ -493,6 +495,7 @@ impl Inlyne { let screen_size = self.renderer.screen_size(); if let Some(hoverable) = Self::find_hoverable( &mut self.renderer.text_system, + &mut self.renderer.positioner.taffy, &self.elements, last_loc, screen_size, @@ -709,6 +712,7 @@ impl Inlyne { fn find_hoverable<'a>( text_system: &mut TextSystem, + taffy: &mut Taffy, elements: &'a [Positioned], loc: Point, screen_size: Size, @@ -742,6 +746,7 @@ impl Inlyne { table .find_hoverable( text_system, + taffy, loc, bounds.pos, screen_pos(screen_size, bounds.pos.0), @@ -752,7 +757,7 @@ impl Inlyne { Element::Image(image) => Some(Hoverable::Image(image)), Element::Spacer(_) => unreachable!("Spacers are filtered"), Element::Row(row) => { - Self::find_hoverable(text_system, &row.elements, loc, screen_size, zoom) + Self::find_hoverable(text_system, taffy, &row.elements, loc, screen_size, zoom) } Element::Section(section) => { if let Some(ref summary) = *section.summary { @@ -763,7 +768,14 @@ impl Inlyne { } } if !*section.hidden.borrow() { - Self::find_hoverable(text_system, §ion.elements, loc, screen_size, zoom) + Self::find_hoverable( + text_system, + taffy, + §ion.elements, + loc, + screen_size, + zoom, + ) } else { None } diff --git a/src/positioner.rs b/src/positioner.rs index 5ed0f6f2..c2272ef5 100644 --- a/src/positioner.rs +++ b/src/positioner.rs @@ -1,9 +1,9 @@ use std::{cell::RefCell, collections::HashMap}; use anyhow::Context; +use taffy::Taffy; use crate::{ - table::{TABLE_COL_GAP, TABLE_ROW_GAP}, text::{TextBox, TextSystem}, utils::{Align, Point, Rect, Size}, Element, @@ -44,16 +44,20 @@ pub struct Positioner { pub hidpi_scale: f32, pub page_width: f32, pub anchors: HashMap, + pub taffy: Taffy, } impl Positioner { pub fn new(screen_size: Size, hidpi_scale: f32, page_width: f32) -> Self { + let mut taffy = Taffy::new(); + taffy.disable_rounding(); Self { reserved_height: DEFAULT_PADDING * hidpi_scale, hidpi_scale, page_width, screen_size, anchors: HashMap::new(), + taffy, } } @@ -107,34 +111,18 @@ impl Positioner { } Element::Table(table) => { let pos = (DEFAULT_MARGIN + centering, self.reserved_height); - let width = table - .column_widths( - text_system, - ( - self.screen_size.0 - pos.0 - DEFAULT_MARGIN - centering, - f32::INFINITY, - ), - zoom, - ) - .iter() - .fold(0., |acc, x| acc + x); - let height = table - .row_heights( - text_system, - ( - self.screen_size.0 - pos.0 - DEFAULT_MARGIN - centering, - f32::INFINITY, - ), - zoom, - ) - .iter() - .fold(0., |acc, x| acc + x); - Rect::new( - pos, + let layout = table.layout( + text_system, + &mut self.taffy, ( - width * (TABLE_COL_GAP * table.headers.len() as f32), - height + (TABLE_ROW_GAP * (table.rows.len() + 1) as f32), + self.screen_size.0 - pos.0 - DEFAULT_MARGIN - centering, + f32::INFINITY, ), + zoom, + )?; + Rect::new( + (DEFAULT_MARGIN + centering, self.reserved_height), + layout.size, ) } Element::Row(row) => { diff --git a/src/renderer.rs b/src/renderer.rs index 7aca1a75..3bf32c91 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -3,7 +3,7 @@ use crate::fonts::get_fonts; use crate::image::ImageRenderer; use crate::opts::FontOptions; use crate::positioner::{Positioned, Positioner, DEFAULT_MARGIN}; -use crate::table::{TABLE_COL_GAP, TABLE_ROW_GAP}; +use crate::table::TABLE_ROW_GAP; use crate::text::{CachedTextArea, TextCache, TextSystem}; use crate::utils::{Point, Rect, Selection, Size}; use crate::Element; @@ -15,7 +15,7 @@ use lyon::geom::Box2D; use lyon::path::Polygon; use lyon::tessellation::*; use std::borrow::Cow; -use std::sync::Arc; +use std::sync::{Arc, Mutex}; use wgpu::util::DeviceExt; use wgpu::{BindGroup, Buffer, IndexFormat, MultisampleState, TextureFormat}; use winit::window::Window; @@ -150,12 +150,12 @@ impl Renderer { surface.configure(&device, &config); let image_renderer = ImageRenderer::new(&device, &surface_format); - let font_system = get_fonts(&font_opts); + let font_system = Arc::new(Mutex::new(get_fonts(&font_opts))); let swash_cache = SwashCache::new(); let mut text_atlas = TextAtlas::new(&device, &queue, surface_format); let text_renderer = TextRenderer::new(&mut text_atlas, &device, MultisampleState::default(), None); - let text_cache = TextCache::new(); + let text_cache = Arc::new(Mutex::new(TextCache::new())); let text_system = TextSystem { font_system, swash_cache, @@ -358,45 +358,31 @@ impl Renderer { } } Element::Table(table) => { - let row_heights = table.row_heights( - &mut self.text_system, - ( - screen_size.0 - pos.0 - DEFAULT_MARGIN - centering, - f32::INFINITY, - ), - self.zoom, + let bounds = ( + (screen_size.0 - pos.0 - DEFAULT_MARGIN - centering).max(0.), + f32::INFINITY, ); - let column_widths = table.column_widths( + let layout = table.layout( &mut self.text_system, - ( - screen_size.0 - pos.0 - DEFAULT_MARGIN - centering, - f32::INFINITY, - ), + &mut self.positioner.taffy, + bounds, self.zoom, - ); - let mut x = 0.; - let mut y = 0.; + )?; - let header_height = row_heights.first().unwrap(); - for (col, width) in column_widths.iter().enumerate() { + for (col, node) in layout.headers.iter().enumerate() { if let Some(text_box) = table.headers.get(col) { - let bounds = ( - (screen_size.0 - pos.0 - x - DEFAULT_MARGIN - centering) - .min(screen_size.0 - DEFAULT_MARGIN - centering), - f32::INFINITY, - ); text_areas.push(text_box.text_areas( &mut self.text_system, - (pos.0 + x, pos.1 + y), - bounds, + (pos.0 + node.location.x, pos.1 + node.location.y), + (node.size.width, f32::MAX), self.zoom, self.scroll_y, )); if let Some(selection) = self.selection { let (selection_rects, selection_text) = text_box.render_selection( &mut self.text_system, - (pos.0 + x, pos.1 + y), - bounds, + (pos.0 + node.location.x, pos.1 + node.location.y), + (node.size.width, node.size.height), self.zoom, selection, ); @@ -412,10 +398,17 @@ impl Renderer { )?; } } - x += width + TABLE_COL_GAP; } } - y += header_height + (TABLE_ROW_GAP / 2.); + let last_header_node = layout.headers.last().unwrap(); + let y = last_header_node.location.y + + last_header_node.size.height + + TABLE_ROW_GAP / 2.; + let x = layout + .headers + .last() + .map(|f| f.location.x + f.size.width) + .unwrap_or(0.); { let min = ( scrolled_pos.0.max(DEFAULT_MARGIN + centering), @@ -423,7 +416,7 @@ impl Renderer { ); let max = ( (scrolled_pos.0 + x), - scrolled_pos.1 + y + 1. * self.hidpi_scale * self.zoom, + scrolled_pos.1 + y + 2. * self.hidpi_scale * self.zoom, ); self.draw_rectangle( Rect::from_min_max(min, max), @@ -431,20 +424,14 @@ impl Renderer { )?; } - y += TABLE_ROW_GAP / 2.; - for (row, height) in row_heights.iter().skip(1).enumerate() { - let mut x = 0.; - for (col, width) in column_widths.iter().enumerate() { + for (row, node_row) in layout.rows.iter().enumerate() { + for (col, node) in node_row.iter().enumerate() { if let Some(row) = table.rows.get(row) { if let Some(text_box) = row.get(col) { - let bounds = ( - screen_size.0 - pos.0 - x - DEFAULT_MARGIN - centering, - f32::INFINITY, - ); text_areas.push(text_box.text_areas( &mut self.text_system, - (pos.0 + x, pos.1 + y), - bounds, + (pos.0 + node.location.x, pos.1 + node.location.y), + (node.size.width, f32::MAX), self.zoom, self.scroll_y, )); @@ -453,8 +440,8 @@ impl Renderer { let (selection_rects, selection_text) = text_box .render_selection( &mut self.text_system, - (pos.0 + x, pos.1 + y), - bounds, + (pos.0 + node.location.x, pos.1 + node.location.y), + (node.size.width, node.size.height), self.zoom, selection, ); @@ -475,24 +462,29 @@ impl Renderer { } } } - x += width + TABLE_COL_GAP; } - y += height + (TABLE_COL_GAP / 2.); + let last_row_node = node_row.last().unwrap(); + let y = last_row_node.location.y + + last_row_node.size.height + + TABLE_ROW_GAP / 2.; + let x = node_row + .last() + .map(|f| f.location.x + f.size.width) + .unwrap_or(0.); { let min = ( scrolled_pos.0.max(DEFAULT_MARGIN + centering), scrolled_pos.1 + y, ); let max = ( - (scrolled_pos.0 + x), + scrolled_pos.0 + x, scrolled_pos.1 + y + 1. * self.hidpi_scale * self.zoom, ); self.draw_rectangle( Rect::from_min_max(min, max), - native_color(self.theme.code_block_color, &self.surface_format), + native_color(self.theme.text_color, &self.surface_format), )?; } - y += TABLE_ROW_GAP / 2.; } } Element::Image(_) => {} @@ -758,32 +750,34 @@ impl Renderer { // Prepare image bind groups for drawing let image_bindgroups = self.image_bindgroups(elements); - let text_areas: Vec