diff --git a/Cargo.lock b/Cargo.lock index 20c65956206..6c805a71f0d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -55,6 +55,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", + "getrandom", "once_cell", "version_check", "zerocopy", @@ -92,13 +93,15 @@ checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] name = "android-activity" -version = "0.4.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c77a0045eda8b888c76ea473c2b0515ba6f471d318f8927c5c72240937035a6" +checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" dependencies = [ "android-properties", - "bitflags 1.3.2", + "bitflags 2.5.0", "cc", + "cesu8", + "jni 0.21.1", "jni-sys", "libc", "log", @@ -106,6 +109,7 @@ dependencies = [ "ndk-context", "ndk-sys", "num_enum", + "thiserror", ] [[package]] @@ -176,7 +180,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2041f1943049c7978768d84e6d0fd95de98b76d6c4727b09e78ec253d29fa58" dependencies = [ "clipboard-win", - "core-graphics 0.23.2", + "core-graphics", "image", "log", "objc", @@ -203,6 +207,12 @@ dependencies = [ "serde", ] +[[package]] +name = "as-raw-xcb-connection" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" + [[package]] name = "ash" version = "0.37.3+1.3.251" @@ -261,6 +271,12 @@ dependencies = [ "webpki-roots", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "atomic_refcell" version = "0.1.13" @@ -285,7 +301,7 @@ dependencies = [ "log", "mach2", "msg", - "nix 0.25.1", + "nix 0.27.1", "serde_json", "unwind-sys", ] @@ -396,21 +412,21 @@ dependencies = [ [[package]] name = "block-sys" -version = "0.1.0-beta.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" +checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7" dependencies = [ "objc-sys", ] [[package]] name = "block2" -version = "0.2.0-alpha.6" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" +checksum = "15b55663a85f33501257357e6421bb33e769d5c9ffb5ba0921c975a123e35e68" dependencies = [ "block-sys", - "objc2-encode", + "objc2", ] [[package]] @@ -552,16 +568,28 @@ checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" [[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.5.0", "log", - "nix 0.25.1", - "slotmap", + "polling", + "rustix", + "slab", "thiserror", - "vec_map", +] + +[[package]] +name = "calloop-wayland-source" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" +dependencies = [ + "calloop", + "rustix", + "wayland-backend", + "wayland-client", ] [[package]] @@ -712,16 +740,16 @@ dependencies = [ [[package]] name = "cocoa" -version = "0.24.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" dependencies = [ "bitflags 1.3.2", "block", "cocoa-foundation", "core-foundation", - "core-graphics 0.22.3", - "foreign-types 0.3.2", + "core-graphics", + "foreign-types 0.5.0", "libc", "objc", ] @@ -845,10 +873,13 @@ dependencies = [ ] [[package]] -name = "const-cstr" -version = "0.3.0" +name = "concurrent-queue" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed3d0b5ff30645a68f35ece8cea4556ca14ef8a1651455f789a099a0513532a6" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] [[package]] name = "constellation" @@ -942,19 +973,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" @@ -979,18 +997,6 @@ dependencies = [ "libc", ] -[[package]] -name = "core-text" -version = "19.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d74ada66e07c1cefa18f8abfba765b486f250de2e4a999e5727fc0dd4b4a25" -dependencies = [ - "core-foundation", - "core-graphics 0.22.3", - "foreign-types 0.3.2", - "libc", -] - [[package]] name = "core-text" version = "20.1.0" @@ -998,7 +1004,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9d2790b5c08465d49f8dc05c8bcae9fea467855947db39b0f8145c091aaced5" dependencies = [ "core-foundation", - "core-graphics 0.23.2", + "core-graphics", "foreign-types 0.5.0", "libc", ] @@ -1110,6 +1116,22 @@ dependencies = [ "syn 2.0.60", ] +[[package]] +name = "cstr" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68523903c8ae5aacfa32a0d9ae60cadeb764e1da14ee0d26b1f3089f13a54636" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "cursor-icon" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" + [[package]] name = "d3d12" version = "0.19.0" @@ -1380,18 +1402,18 @@ dependencies = [ [[package]] name = "ecolor" -version = "0.22.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e479a7fa3f23d4e794f8b2f8b3568dd4e47886ad1b12c9c095e141cb591eb63" +checksum = "03cfe80b1890e1a8cdbffc6044d6872e814aaf6011835a2a5e2db0e5c5c4ef4e" dependencies = [ "bytemuck", ] [[package]] name = "egui" -version = "0.22.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3aef8ec3ae1b772f340170c65bf27d5b8c28f543a0116c844d2ac08d01123e7" +checksum = "180f595432a5b615fc6b74afef3955249b86cfea72607b40740a4cd60d5297d0" dependencies = [ "ahash", "epaint", @@ -1401,24 +1423,24 @@ dependencies = [ [[package]] name = "egui-winit" -version = "0.22.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a49155fd4a0a4fb21224407a91de0030847972ef90fc64edb63621caea61cb2" +checksum = "aa4d44f8d89f70d4480545eb2346b76ea88c3022e9f4706cebc799dbe8b004a2" dependencies = [ "arboard", "egui", - "instant", "log", - "raw-window-handle 0.5.2", + "raw-window-handle", "smithay-clipboard", + "web-time", "winit", ] [[package]] name = "egui_glow" -version = "0.22.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f8c2752cdf1b0ef5fcda59a898cacabad974d4f5880e92a420b2c917022da64" +checksum = "a08e3be8728b4c59493dbfec041c657e6725bdeafdbd49aef3f1dbb9e551fa01" dependencies = [ "bytemuck", "egui", @@ -1428,6 +1450,7 @@ dependencies = [ "memoffset", "wasm-bindgen", "web-sys", + "winit", ] [[package]] @@ -1438,9 +1461,9 @@ checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" [[package]] name = "emath" -version = "0.22.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3857d743a6e0741cdd60b622a74c7a36ea75f5f8f11b793b41d905d2c9721a4b" +checksum = "6916301ecf80448f786cdf3eb51d9dbdd831538732229d49119e2d4312eaaf09" dependencies = [ "bytemuck", ] @@ -1536,13 +1559,12 @@ dependencies = [ [[package]] name = "epaint" -version = "0.22.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09333964d4d57f40a85338ba3ca5ed4716070ab184dcfed966b35491c5c64f3b" +checksum = "77b9fdf617dd7f58b0c8e6e9e4a1281f730cde0831d40547da446b2bb76a47af" dependencies = [ "ab_glyph", "ahash", - "atomic_refcell", "bytemuck", "ecolor", "emath", @@ -1655,9 +1677,9 @@ dependencies = [ [[package]] name = "float-ord" -version = "0.2.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bad48618fdb549078c333a7a8528acb57af271d0433bdecd523eb620628364e" +checksum = "8ce81f49ae8a0482e4c55ea62ebbd7e5a686af544c00b9d090bba3ff9be97b3d" [[package]] name = "flume" @@ -1676,15 +1698,15 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "font-kit" -version = "0.11.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21fe28504d371085fae9ac7a3450f0b289ab71e07c8e57baa3fb68b9e57d6ce5" +checksum = "d50ba02d3a19ab9012a00314ff4d105128cdc7ba223d69d48181f2d257244d51" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "byteorder", "core-foundation", - "core-graphics 0.22.3", - "core-text 19.2.0", + "core-graphics", + "core-text", "dirs-next", "dwrote", "float-ord", @@ -1956,8 +1978,8 @@ dependencies = [ "bitflags 2.5.0", "byteorder", "core-foundation", - "core-graphics 0.22.3", - "core-text 19.2.0", + "core-graphics", + "core-text", "cssparser", "dwrote", "euclid", @@ -2128,7 +2150,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ed782fa3e949c31146671da6e7a227a5e7d354660df1db6d0aac4974dc82a3c" dependencies = [ "heck", - "proc-macro-crate 3.1.0", + "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.60", @@ -2152,9 +2174,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "glow" -version = "0.12.3" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca0fe580e4b60a8ab24a868bc08e2f03cbcb20d3d676601fa909386713333728" +checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1" dependencies = [ "js-sys", "slotmap", @@ -2567,16 +2589,17 @@ dependencies = [ [[package]] name = "harfbuzz-sys" -version = "0.5.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf8c27ca13930dc4ffe474880040fe9e0f03c2121600dc9c95423624cab3e467" +checksum = "eb86e2fef3ba40cebffb8fa2cba811f06aa5c5fd296a4e469473e5398d166594" dependencies = [ "cc", - "core-graphics 0.22.3", - "core-text 19.2.0", - "foreign-types 0.3.2", - "freetype", + "core-graphics", + "core-text", + "foreign-types 0.5.0", + "freetype-sys", "pkg-config", + "winapi", ] [[package]] @@ -2790,6 +2813,17 @@ dependencies = [ "cc", ] +[[package]] +name = "icrate" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d3aaff8a54577104bafdf686ff18565c3b6903ca5782a2026ef06e2c7aa319" +dependencies = [ + "block2", + "dispatch", + "objc2", +] + [[package]] name = "icu_collections" version = "1.4.0" @@ -2945,18 +2979,6 @@ dependencies = [ "libc", ] -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "io-kit-sys" version = "0.4.1" @@ -3067,6 +3089,22 @@ dependencies = [ "walkdir", ] +[[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" @@ -3643,18 +3681,18 @@ checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" [[package]] name = "memmap2" -version = "0.5.10" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" dependencies = [ "libc", ] [[package]] name = "memoffset" -version = "0.6.5" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ "autocfg", ] @@ -3867,15 +3905,16 @@ dependencies = [ [[package]] name = "ndk" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" +checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "jni-sys", + "log", "ndk-sys", "num_enum", - "raw-window-handle 0.5.2", + "raw-window-handle", "thiserror", ] @@ -3887,9 +3926,9 @@ checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" [[package]] name = "ndk-sys" -version = "0.4.1+23.1.7779620" +version = "0.5.0+25.2.9519653" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" +checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" dependencies = [ "jni-sys", ] @@ -3993,28 +4032,13 @@ checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] name = "nix" -version = "0.24.3" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "cfg-if", "libc", - "memoffset", -] - -[[package]] -name = "nix" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset", - "pin-utils", ] [[package]] @@ -4120,23 +4144,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 1.2.1", + "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.60", ] [[package]] @@ -4171,29 +4195,25 @@ dependencies = [ [[package]] name = "objc-sys" -version = "0.2.0-beta.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" +checksum = "da284c198fb9b7b0603f8635185e85fbd5b64ee154b1ed406d489077de2d6d60" [[package]] name = "objc2" -version = "0.3.0-beta.3" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe31e5425d3d0b89a15982c024392815da40689aceb34bad364d58732bcfd649" +checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d" dependencies = [ - "block2", "objc-sys", "objc2-encode", ] [[package]] name = "objc2-encode" -version = "2.0.0-pre.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" -dependencies = [ - "objc-sys", -] +checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666" [[package]] name = "objc_exception" @@ -4507,6 +4527,21 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "polling" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix", + "tracing", + "windows-sys 0.52.0", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -4535,17 +4570,6 @@ dependencies = [ "syn 2.0.60", ] -[[package]] -name = "proc-macro-crate" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" -dependencies = [ - "once_cell", - "thiserror", - "toml 0.5.11", -] - [[package]] name = "proc-macro-crate" version = "3.1.0" @@ -4617,6 +4641,15 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "quick-xml" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +dependencies = [ + "memchr", +] + [[package]] name = "quickcheck" version = "1.0.3" @@ -4694,9 +4727,9 @@ checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" [[package]] name = "raqote" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48bbdc1825eea658de94084241b12bffb214f0bd3bac9a442a405a384e2a042b" +checksum = "5c3061d5dcf59093c811d645c517be6eb7c26a0110d146730418950139496f84" dependencies = [ "euclid", "font-kit", @@ -4707,12 +4740,6 @@ dependencies = [ "typed-arena", ] -[[package]] -name = "raw-window-handle" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" - [[package]] name = "raw-window-handle" version = "0.6.0" @@ -5156,9 +5183,9 @@ dependencies = [ [[package]] name = "sctk-adwaita" -version = "0.5.4" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda4e97be1fd174ccc2aae81c8b694e803fa99b34e8fd0f057a9d70698e3ed09" +checksum = "82b2eaf3a5b264a521b988b2e73042e742df700c4f962cde845d1541adb46550" dependencies = [ "ab_glyph", "log", @@ -5563,7 +5590,7 @@ dependencies = [ "libc", "libservo", "log", - "raw-window-handle 0.5.2", + "raw-window-handle", "servo-media", "servo_allocator", "shellwords", @@ -5645,7 +5672,7 @@ dependencies = [ "getopts", "gl_generator", "ipc-channel", - "jni", + "jni 0.18.0", "libc", "libloading 0.8.3", "libservo", @@ -5706,31 +5733,47 @@ dependencies = [ [[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", + "bitflags 2.5.0", "calloop", - "dlib", - "lazy_static", + "calloop-wayland-source", + "cursor-icon", + "libc", "log", "memmap2", - "nix 0.24.3", - "pkg-config", + "rustix", + "thiserror", + "wayland-backend", "wayland-client", + "wayland-csd-frame", "wayland-cursor", "wayland-protocols", + "wayland-protocols-wlr", + "wayland-scanner", + "xkeysym", ] [[package]] name = "smithay-clipboard" -version = "0.6.6" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a345c870a1fae0b1b779085e81b51e614767c239e93503588e54c5b17f4b0e8" +checksum = "c091e7354ea8059d6ad99eace06dd13ddeedbb0ac72d40a9a6e7ff790525882d" dependencies = [ + "libc", "smithay-client-toolkit", - "wayland-client", + "wayland-backend", +] + +[[package]] +name = "smol_str" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6845563ada680337a52d43bb0b29f396f2d911616f6573012645b9e3d048a49" +dependencies = [ + "serde", ] [[package]] @@ -5948,16 +5991,16 @@ dependencies = [ [[package]] name = "surfman" -version = "0.9.1" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a10a79c436583753fa108971470dd42f2111ce068f1b6fdebd981a96f920bdf" +checksum = "d43b99fd15373be8ef0ab83114da9e40d37211f99846b292d72543c4bd3d58d6" dependencies = [ "bitflags 1.3.2", "cfg_aliases", "cgl", "cocoa", "core-foundation", - "core-graphics 0.22.3", + "core-graphics", "euclid", "fnv", "gl_generator", @@ -5968,7 +6011,7 @@ dependencies = [ "mach2", "metal 0.24.0", "objc", - "raw-window-handle 0.5.2", + "raw-window-handle", "servo-display-link", "sparkle", "wayland-sys 0.30.1", @@ -6229,23 +6272,23 @@ checksum = "06535c958d6abe68dc4b4ef9e6845f758fc42fe463d0093d0aca40254f03fb14" [[package]] name = "tiny-skia" -version = "0.8.4" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8493a203431061e901613751931f047d1971337153f96d0e5e363d6dbf6a67" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" dependencies = [ "arrayref", "arrayvec", "bytemuck", "cfg-if", - "png", + "log", "tiny-skia-path", ] [[package]] name = "tiny-skia-path" -version = "0.8.4" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adbfb5d3f3dd57a0e11d12f4f13d4ebbbc1b5c15b7ab0a156d030b21da5f677c" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" dependencies = [ "arrayref", "bytemuck", @@ -6776,6 +6819,18 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.92" @@ -6806,76 +6861,100 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] -name = "wayland-client" -version = "0.29.5" +name = "wayland-backend" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715" +checksum = "9d50fa61ce90d76474c87f5fc002828d81b32677340112b4ef08079a9d459a40" dependencies = [ - "bitflags 1.3.2", + "cc", "downcast-rs", - "libc", - "nix 0.24.3", + "rustix", "scoped-tls", - "wayland-commons", - "wayland-scanner", - "wayland-sys 0.29.5", + "smallvec", + "wayland-sys 0.31.1", ] [[package]] -name = "wayland-commons" -version = "0.29.5" +name = "wayland-client" +version = "0.31.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902" +checksum = "82fb96ee935c2cea6668ccb470fb7771f6215d1691746c2d896b447a00ad3f1f" dependencies = [ - "nix 0.24.3", - "once_cell", - "smallvec", - "wayland-sys 0.29.5", + "bitflags 2.5.0", + "rustix", + "wayland-backend", + "wayland-scanner", +] + +[[package]] +name = "wayland-csd-frame" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" +dependencies = [ + "bitflags 2.5.0", + "cursor-icon", + "wayland-backend", ] [[package]] name = "wayland-cursor" -version = "0.29.5" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661" +checksum = "71ce5fa868dd13d11a0d04c5e2e65726d0897be8de247c0c5a65886e283231ba" dependencies = [ - "nix 0.24.3", + "rustix", "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", + "bitflags 2.5.0", + "wayland-backend", "wayland-client", - "wayland-commons", + "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.5.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-wlr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" +dependencies = [ + "bitflags 2.5.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", "wayland-scanner", ] [[package]] name = "wayland-scanner" -version = "0.29.5" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53" +checksum = "63b3a62929287001986fb58c789dce9b67604a397c15c611ad9f747300b6c283" dependencies = [ "proc-macro2", + "quick-xml", "quote", - "xml-rs", -] - -[[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]] @@ -6890,6 +6969,18 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "wayland-sys" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15a0c8eaff5216d07f226cb7a549159267f3467b289d9a2e52fd3ef5aae2b7af" +dependencies = [ + "dlib", + "log", + "once_cell", + "pkg-config", +] + [[package]] name = "web-sys" version = "0.3.69" @@ -6900,6 +6991,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "webdriver" version = "0.49.0" @@ -7137,7 +7238,7 @@ dependencies = [ "parking_lot", "profiling", "range-alloc", - "raw-window-handle 0.6.0", + "raw-window-handle", "rustc-hash", "smallvec", "thiserror", @@ -7426,37 +7527,50 @@ checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" [[package]] name = "winit" -version = "0.28.7" +version = "0.29.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9596d90b45384f5281384ab204224876e8e8bf7d58366d9b795ad99aa9894b94" +checksum = "0d59ad965a635657faf09c8f062badd885748428933dad8e8bdd64064d92e5ca" dependencies = [ + "ahash", "android-activity", - "bitflags 1.3.2", + "atomic-waker", + "bitflags 2.5.0", + "bytemuck", + "calloop", "cfg_aliases", "core-foundation", - "core-graphics 0.22.3", - "dispatch", - "instant", + "core-graphics", + "cursor-icon", + "icrate", + "js-sys", "libc", "log", - "mio", + "memmap2", "ndk", + "ndk-sys", "objc2", "once_cell", "orbclient", "percent-encoding", - "raw-window-handle 0.5.2", + "raw-window-handle", "redox_syscall 0.3.5", + "rustix", "sctk-adwaita", "smithay-client-toolkit", + "smol_str", + "unicode-segmentation", "wasm-bindgen", + "wasm-bindgen-futures", + "wayland-backend", "wayland-client", - "wayland-commons", "wayland-protocols", - "wayland-scanner", + "wayland-protocols-plasma", "web-sys", - "windows-sys 0.45.0", + "web-time", + "windows-sys 0.48.0", "x11-dl", + "x11rb", + "xkbcommon-dl", ] [[package]] @@ -7492,8 +7606,8 @@ version = "0.1.0" source = "git+https://github.com/servo/webrender?branch=0.64#9d354adf8955b1390dd56db89e6d5a9ea7880391" dependencies = [ "core-foundation", - "core-graphics 0.23.2", - "core-text 20.1.0", + "core-graphics", + "core-text", "dwrote", "euclid", "freetype", @@ -7553,7 +7667,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.3", + "once_cell", "rustix", "x11rb-protocol", ] @@ -7587,6 +7705,25 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12ea8eda4b1eb72f02d148402e23832d56a33f55d8c1b2d5bcdde91d79d47cb1" +[[package]] +name = "xkbcommon-dl" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" +dependencies = [ + "bitflags 2.5.0", + "dlib", + "log", + "once_cell", + "xkeysym", +] + +[[package]] +name = "xkeysym" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054a8e68b76250b253f671d1268cb7f1ae089ec35e195b2efb2a4e9a836d0621" + [[package]] name = "xml-rs" version = "0.8.20" @@ -7606,11 +7743,11 @@ dependencies = [ [[package]] name = "yeslogic-fontconfig-sys" -version = "3.2.0" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2bbd69036d397ebbff671b1b8e4d918610c181c5a16073b96f984a38d08c386" +checksum = "ffb6b23999a8b1a997bf47c7bb4d19ad4029c3327bb3386ebe0a5ff584b33c7a" dependencies = [ - "const-cstr", + "cstr", "dlib", "once_cell", "pkg-config", diff --git a/components/background_hang_monitor/Cargo.toml b/components/background_hang_monitor/Cargo.toml index 67eafb0dc02..2e0a4630c98 100644 --- a/components/background_hang_monitor/Cargo.toml +++ b/components/background_hang_monitor/Cargo.toml @@ -28,5 +28,5 @@ lazy_static = { workspace = true } mach2 = "0.4" [target.'cfg(all(target_os = "linux", not(any(target_arch = "arm", target_arch = "aarch64"))))'.dependencies] -nix = "0.25" +nix = { version = "0.27", features = ["signal"] } unwind-sys = "0.1.4" diff --git a/components/canvas/Cargo.toml b/components/canvas/Cargo.toml index ce420ae0c01..46c78b8ea08 100644 --- a/components/canvas/Cargo.toml +++ b/components/canvas/Cargo.toml @@ -22,7 +22,7 @@ canvas_traits = { workspace = true } crossbeam-channel = { workspace = true } cssparser = { workspace = true } euclid = { workspace = true } -font-kit = "0.11" +font-kit = { version = "0.13" } fnv = { workspace = true } gfx = { path = "../gfx" } half = "2" @@ -32,7 +32,7 @@ lyon_geom = "1.0.4" num-traits = { workspace = true } pathfinder_geometry = "0.5" pixels = { path = "../pixels" } -raqote = "0.8.2" +raqote = "0.8.4" servo_arc = { workspace = true } sparkle = { workspace = true } style = { workspace = true } diff --git a/components/gfx/Cargo.toml b/components/gfx/Cargo.toml index bec2264c44c..06982af6aee 100644 --- a/components/gfx/Cargo.toml +++ b/components/gfx/Cargo.toml @@ -22,7 +22,7 @@ euclid = { workspace = true } fnv = { workspace = true } fontsan = { git = "https://github.com/servo/fontsan" } gfx_traits = { workspace = true } -harfbuzz-sys = "0.5" +harfbuzz-sys = "0.6" ipc-channel = { workspace = true } lazy_static = { workspace = true } libc = { workspace = true } @@ -47,19 +47,21 @@ xi-unicode = { workspace = true } [target.'cfg(target_os = "macos")'.dependencies] byteorder = { workspace = true } core-foundation = "0.9" -core-graphics = "0.22" -core-text = "19.0" +core-graphics = "0.23" +core-text = "20.1" [target.'cfg(any(target_os = "linux", target_os = "android"))'.dependencies] +harfbuzz-sys = { version = "0.6", features = ["bundled"] } freetype = "0.7" servo_allocator = { path = "../allocator" } [target.'cfg(target_os = "linux")'.dependencies] -fontconfig_sys = { package = "yeslogic-fontconfig-sys", version = "3" } +fontconfig_sys = { package = "yeslogic-fontconfig-sys", version = "5" } [target.'cfg(target_os = "android")'.dependencies] xml-rs = "0.8" [target.'cfg(target_os = "windows")'.dependencies] +harfbuzz-sys = { version = "0.6", features = ["bundled"] } dwrote = "0.11" truetype = { version = "0.47.3", features = ["ignore-invalid-language-ids"] } diff --git a/ports/servoshell/Cargo.toml b/ports/servoshell/Cargo.toml index 2c0548e17b1..386c90c6137 100644 --- a/ports/servoshell/Cargo.toml +++ b/ports/servoshell/Cargo.toml @@ -54,29 +54,29 @@ xr-profile = ["libservo/xr-profile"] servo_allocator = { path = "../../components/allocator" } [target.'cfg(not(target_os = "android"))'.dependencies] -arboard = "3" +arboard = { version = "3" } backtrace = { workspace = true } cfg-if = { workspace = true } -egui = "0.22.0" -egui_glow = { version = "0.22.0", features = ["winit"] } -egui-winit = { version = "0.22.0", default-features = false, features = ["clipboard", "wayland"] } +egui = { version = "0.26.2" } +egui_glow = { version = "0.26.2", features = ["winit"] } +egui-winit = { version = "0.26.2", default-features = false, features = ["clipboard", "wayland"] } euclid = { workspace = true } getopts = { workspace = true } gilrs = "0.10.7" gleam = { workspace = true } -glow = "0.12.2" +glow = "0.13.1" keyboard-types = { workspace = true } lazy_static = { workspace = true } libc = { workspace = true } libservo = { path = "../../components/servo" } log = { workspace = true } -raw-window-handle = "0.5" +raw-window-handle = "0.6" servo-media = { workspace = true } shellwords = "1.0.0" -surfman = { workspace = true, features = ["sm-x11", "sm-raw-window-handle"] } +surfman = { workspace = true, features = ["sm-x11", "sm-raw-window-handle-06"] } tinyfiledialogs = "3.0" webxr = { git = "https://github.com/servo/webxr", features = ["ipc", "glwindow", "headless"] } -winit = "0.28.7" +winit = "0.29.10" url = { workspace = true } [target.'cfg(any(target_os = "linux", target_os = "windows"))'.dependencies] diff --git a/ports/servoshell/app.rs b/ports/servoshell/app.rs index 50f9babdd62..70518bec3db 100644 --- a/ports/servoshell/app.rs +++ b/ports/servoshell/app.rs @@ -63,7 +63,8 @@ impl App { user_agent: Option, url: Option, ) { - let events_loop = EventsLoop::new(opts::get().headless, opts::get().output_file.is_some()); + let events_loop = EventsLoop::new(opts::get().headless, opts::get().output_file.is_some()) + .expect("Failed to create events loop"); // Implements window methods, used by compositor. let window = if opts::get().headless { @@ -112,13 +113,7 @@ impl App { debug_assert_eq!(webrender_gl.get_error(), gleam::gl::NO_ERROR); app.minibrowser = Some( - Minibrowser::new( - &rendering_context, - &events_loop, - window.as_ref(), - initial_url.clone(), - ) - .into(), + Minibrowser::new(&rendering_context, &events_loop, initial_url.clone()).into(), ); } @@ -200,7 +195,11 @@ impl App { return; } - if let winit::event::Event::RedrawRequested(_) = event { + if let winit::event::Event::WindowEvent { + window_id: _, + event: winit::event::WindowEvent::RedrawRequested, + } = event + { // We need to redraw the window for some reason. trace!("RedrawRequested"); @@ -227,7 +226,7 @@ impl App { event: WindowEvent::ScaleFactorChanged { scale_factor, .. }, .. } => { - // Intercept any ScaleFactorChanged events away from EguiGlow::on_event, so + // Intercept any ScaleFactorChanged events away from EguiGlow::on_window_event, so // we can use our own logic for calculating the scale factor and set egui’s // scale factor to that value manually. let effective_scale_factor = window.hidpi_factor().get(); @@ -244,8 +243,12 @@ impl App { // the minibrowser, and present the new frame. window.winit_window().unwrap().request_redraw(); }, - winit::event::Event::WindowEvent { ref event, .. } => { - let response = minibrowser.on_event(event); + winit::event::Event::WindowEvent { + ref event, + window_id: _, + } => { + let response = + minibrowser.on_window_event(window.winit_window().unwrap(), &event); // Update minibrowser if there's resize event to sync up with window. if let WindowEvent::Resized(_) = event { minibrowser.update( @@ -255,7 +258,6 @@ impl App { "Sync WebView size with Window Resize event", ); } - if response.repaint { // Request a winit redraw event, so we can recomposite, update and paint // the minibrowser, and present the new frame. @@ -361,7 +363,7 @@ impl App { /// Processes the given winit Event, possibly converting it to an [EmbedderEvent] and /// routing that to the App or relevant Window event queues. - fn queue_embedder_events_for_winit_event(&self, event: winit::event::Event<'_, WakerEvent>) { + fn queue_embedder_events_for_winit_event(&self, event: winit::event::Event) { match event { // App level events winit::event::Event::Suspended => { @@ -376,10 +378,6 @@ impl App { }, winit::event::Event::DeviceEvent { .. } => {}, - winit::event::Event::RedrawRequested(_) => { - self.event_queue.borrow_mut().push(EmbedderEvent::Idle); - }, - // Window level events winit::event::Event::WindowEvent { window_id, event, .. @@ -388,14 +386,18 @@ impl App { warn!("Got an event from unknown window"); }, Some(window) => { + if event == winit::event::WindowEvent::RedrawRequested { + self.event_queue.borrow_mut().push(EmbedderEvent::Idle); + } + window.queue_embedder_events_for_winit_event(event); }, }, - winit::event::Event::LoopDestroyed | - winit::event::Event::NewEvents(..) | - winit::event::Event::MainEventsCleared | - winit::event::Event::RedrawEventsCleared => {}, + winit::event::Event::LoopExiting | + winit::event::Event::AboutToWait | + winit::event::Event::MemoryWarning | + winit::event::Event::NewEvents(..) => {}, } } diff --git a/ports/servoshell/egui_glue.rs b/ports/servoshell/egui_glue.rs index 0e7f61a6b20..824ef757a74 100644 --- a/ports/servoshell/egui_glue.rs +++ b/ports/servoshell/egui_glue.rs @@ -33,6 +33,7 @@ // IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. +use egui::{ViewportId, ViewportOutput}; use egui_glow::ShaderVersion; pub use egui_winit; use egui_winit::winit; @@ -61,17 +62,28 @@ impl EguiGlow { }) .unwrap(); + let egui_ctx = egui::Context::default(); Self { - egui_ctx: Default::default(), - egui_winit: egui_winit::State::new(event_loop), + egui_winit: egui_winit::State::new( + egui_ctx.clone(), + ViewportId::ROOT, + event_loop, + None, + None, + ), + egui_ctx, painter, shapes: Default::default(), textures_delta: Default::default(), } } - pub fn on_event(&mut self, event: &winit::event::WindowEvent<'_>) -> EventResponse { - self.egui_winit.on_event(&self.egui_ctx, event) + pub fn on_window_event( + &mut self, + window: &winit::window::Window, + event: &winit::event::WindowEvent, + ) -> EventResponse { + self.egui_winit.on_window_event(window, event) } /// Returns the `Duration` of the timeout after which egui should be repainted even if there's no new events. @@ -85,17 +97,21 @@ impl EguiGlow { let raw_input = self.egui_winit.take_egui_input(window); let egui::FullOutput { platform_output, - repaint_after, + viewport_output, textures_delta, shapes, + pixels_per_point: _pixels_per_point, } = self.egui_ctx.run(raw_input, run_ui); self.egui_winit - .handle_platform_output(window, &self.egui_ctx, platform_output); + .handle_platform_output(window, platform_output); self.shapes = shapes; self.textures_delta.append(textures_delta); - repaint_after + match viewport_output.get(&ViewportId::ROOT) { + Some(&ViewportOutput { repaint_delay, .. }) => repaint_delay, + None => std::time::Duration::ZERO, + } } /// Paint the results of the last call to [`Self::run`]. @@ -108,14 +124,12 @@ impl EguiGlow { self.painter.set_texture(id, &image_delta); } + let pixels_per_point = self.egui_ctx.pixels_per_point(); /////// let clipped_primitives = self.egui_ctx.tessellate(shapes); - let clipped_primitives = self.egui_ctx.tessellate(shapes.clone()); + let clipped_primitives = self.egui_ctx.tessellate(shapes.clone(), pixels_per_point); let dimensions: [u32; 2] = window.inner_size().into(); - self.painter.paint_primitives( - dimensions, - self.egui_ctx.pixels_per_point(), - &clipped_primitives, - ); + self.painter + .paint_primitives(dimensions, pixels_per_point, &clipped_primitives); for id in textures_delta.free.drain(..) { self.painter.free_texture(id); diff --git a/ports/servoshell/events_loop.rs b/ports/servoshell/events_loop.rs index 2a3c76629ba..a1654193129 100644 --- a/ports/servoshell/events_loop.rs +++ b/ports/servoshell/events_loop.rs @@ -33,24 +33,33 @@ impl EventsLoop { // Ideally, we could use the winit event loop in both modes, // but on Linux, the event loop requires a X11 server. #[cfg(not(any(target_os = "linux", target_os = "macos")))] - pub fn new(_headless: bool, _has_output_file: bool) -> EventsLoop { - EventsLoop(EventLoop::Winit(Some( - winit::event_loop::EventLoopBuilder::with_user_event().build(), - ))) + pub fn new( + _headless: bool, + _has_output_file: bool, + ) -> Result { + Ok(EventsLoop(EventLoop::Winit(Some( + winit::event_loop::EventLoopBuilder::with_user_event().build()?, + )))) } #[cfg(target_os = "linux")] - pub fn new(headless: bool, _has_output_file: bool) -> EventsLoop { - EventsLoop(if headless { + pub fn new( + headless: bool, + _has_output_file: bool, + ) -> Result { + Ok(EventsLoop(if headless { EventLoop::Headless(Arc::new((Mutex::new(false), Condvar::new()))) } else { EventLoop::Winit(Some( - winit::event_loop::EventLoopBuilder::with_user_event().build(), + winit::event_loop::EventLoopBuilder::with_user_event().build()?, )) - }) + })) } #[cfg(target_os = "macos")] - pub fn new(headless: bool, _has_output_file: bool) -> EventsLoop { - EventsLoop(if headless { + pub fn new( + headless: bool, + _has_output_file: bool, + ) -> Result { + Ok(EventsLoop(if headless { EventLoop::Headless(Arc::new((Mutex::new(false), Condvar::new()))) } else { let mut event_loop_builder = winit::event_loop::EventLoopBuilder::with_user_event(); @@ -59,8 +68,8 @@ impl EventsLoop { // when generating an output file. event_loop_builder.with_activation_policy(ActivationPolicy::Prohibited); } - EventLoop::Winit(Some(event_loop_builder.build())) - }) + EventLoop::Winit(Some(event_loop_builder.build()?)) + })) } } @@ -88,32 +97,36 @@ impl EventsLoop { pub fn run_forever(self, mut callback: F) where F: FnMut( - winit::event::Event<'_, WakerEvent>, + winit::event::Event, Option<&winit::event_loop::EventLoopWindowTarget>, - &mut winit::event_loop::ControlFlow, + &mut ControlFlow, ), { match self.0 { EventLoop::Winit(events_loop) => { let events_loop = events_loop.expect("Can't run an unavailable event loop."); - events_loop.run(move |e, window_target, ref mut control_flow| { - callback(e, Some(window_target), control_flow) - }); + events_loop + .run(move |e, window_target| { + let mut control_flow = ControlFlow::default(); + callback(e, Some(window_target), &mut control_flow); + control_flow.apply_to(window_target); + }) + .expect("Failed while running events loop"); }, EventLoop::Headless(ref data) => { let (flag, condvar) = &**data; let mut event = winit::event::Event::NewEvents(winit::event::StartCause::Init); loop { self.sleep(flag, condvar); - let mut control_flow = winit::event_loop::ControlFlow::Poll; + let mut control_flow = ControlFlow::Poll; callback(event, None, &mut control_flow); event = winit::event::Event::::UserEvent(WakerEvent); - if control_flow != winit::event_loop::ControlFlow::Poll { + if control_flow != ControlFlow::Poll { *flag.lock().unwrap() = false; } - if control_flow == winit::event_loop::ControlFlow::Exit { + if control_flow == ControlFlow::Exit { break; } } @@ -136,6 +149,63 @@ impl EventsLoop { } } +#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)] +pub enum ControlFlow { + Poll, + + #[default] + Wait, + + WaitUntil(std::time::Instant), + + /// winit removed their ControlFlow::Exit variant in 0.29.2 + Exit, +} + +impl ControlFlow { + fn apply_to(self, window_target: &winit::event_loop::EventLoopWindowTarget) { + match self { + ControlFlow::Poll => { + window_target.set_control_flow(winit::event_loop::ControlFlow::Poll) + }, + ControlFlow::Wait => { + window_target.set_control_flow(winit::event_loop::ControlFlow::Wait) + }, + ControlFlow::WaitUntil(instant) => { + window_target.set_control_flow(winit::event_loop::ControlFlow::WaitUntil(instant)) + }, + ControlFlow::Exit => window_target.exit(), + } + } + + pub fn set_poll(&mut self) { + *self = ControlFlow::Poll; + } + + pub fn set_wait(&mut self) { + *self = ControlFlow::Wait; + } + + #[allow(unused)] + pub fn set_wait_until(&mut self, instant: std::time::Instant) { + *self = ControlFlow::WaitUntil(instant); + } + + pub fn set_exit(&mut self) { + *self = ControlFlow::Exit; + } +} + +impl From for ControlFlow { + fn from(cf: winit::event_loop::ControlFlow) -> Self { + match cf { + winit::event_loop::ControlFlow::Poll => Self::Poll, + winit::event_loop::ControlFlow::Wait => Self::Wait, + winit::event_loop::ControlFlow::WaitUntil(instant) => Self::WaitUntil(instant), + } + } +} + struct HeadedEventLoopWaker { proxy: Arc>>, } diff --git a/ports/servoshell/headed_window.rs b/ports/servoshell/headed_window.rs index 8a006a7e878..01bd19df52b 100644 --- a/ports/servoshell/headed_window.rs +++ b/ports/servoshell/headed_window.rs @@ -10,7 +10,7 @@ use std::rc::Rc; use euclid::{Angle, Length, Point2D, Rotation3D, Scale, Size2D, UnknownUnit, Vector2D, Vector3D}; use log::{debug, info, trace}; -use raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle}; +use raw_window_handle::{HasDisplayHandle, HasWindowHandle}; use servo::compositing::windowing::{ AnimationState, EmbedderCoordinates, EmbedderEvent, MouseWindowEvent, WindowMethods, }; @@ -27,10 +27,8 @@ use surfman::{Connection, Context, Device, SurfaceType}; #[cfg(target_os = "windows")] use winapi; use winit::dpi::{LogicalPosition, PhysicalPosition, PhysicalSize}; -use winit::event::{ - ElementState, KeyboardInput, ModifiersState, MouseButton, MouseScrollDelta, TouchPhase, - VirtualKeyCode, -}; +use winit::event::{ElementState, KeyEvent, MouseButton, MouseScrollDelta, TouchPhase}; +use winit::keyboard::{Key as LogicalKey, ModifiersState, NamedKey}; #[cfg(any(target_os = "linux", target_os = "windows"))] use winit::window::Icon; @@ -50,10 +48,10 @@ pub struct Window { primary_monitor: winit::monitor::MonitorHandle, event_queue: RefCell>, mouse_pos: Cell>, - last_pressed: Cell)>>, + last_pressed: Cell)>>, /// A map of winit's key codes to key values that are interpreted from /// winit's ReceivedChar events. - keys_down: RefCell>, + keys_down: RefCell>, animation_state: Cell, fullscreen: Cell, device_pixel_ratio_override: Option, @@ -119,15 +117,19 @@ impl Window { let inner_size = winit_size_to_euclid_size(winit_window.inner_size()); // Initialize surfman - let display_handle = winit_window.raw_display_handle(); - let connection = Connection::from_raw_display_handle(display_handle) - .expect("Failed to create connection"); + let display_handle = winit_window + .display_handle() + .expect("could not get display handle from window"); + let connection = + Connection::from_display_handle(display_handle).expect("Failed to create connection"); let adapter = connection .create_adapter() .expect("Failed to create adapter"); - let window_handle = winit_window.raw_window_handle(); + let window_handle = winit_window + .window_handle() + .expect("could not get window handle from window"); let native_widget = connection - .create_native_widget_from_raw_window_handle(window_handle, Size2D::new(width, height)) + .create_native_widget_from_window_handle(window_handle, Size2D::new(width, height)) .expect("Failed to create native widget"); let surface_type = SurfaceType::Widget { native_widget }; let rendering_context = RenderingContext::create(&connection, &adapter, surface_type) @@ -199,20 +201,25 @@ impl Window { .push(EmbedderEvent::Keyboard(event)); } - fn handle_keyboard_input(&self, input: KeyboardInput) { - let mut event = keyboard_event_from_winit(input, self.modifiers_state.get()); + fn handle_keyboard_input(&self, input: KeyEvent) { + if let Some(input_text) = &input.text { + for ch in input_text.chars() { + self.handle_received_character(ch); + } + } + + let mut event = keyboard_event_from_winit(&input, self.modifiers_state.get()); trace!("handling {:?}", event); if event.state == KeyState::Down && event.key == Key::Unidentified { // If pressed and probably printable, we expect a ReceivedCharacter event. // Wait for that to be received and don't queue any event right now. - self.last_pressed.set(Some((event, input.virtual_keycode))); + self.last_pressed + .set(Some((event, Some(input.logical_key)))); return; } else if event.state == KeyState::Up && event.key == Key::Unidentified { // If release and probably printable, this is following a ReceiverCharacter event. - if let Some(key_code) = input.virtual_keycode { - if let Some(key) = self.keys_down.borrow_mut().remove(&key_code) { - event.key = key; - } + if let Some(key) = self.keys_down.borrow_mut().remove(&input.logical_key) { + event.key = key; } } @@ -303,12 +310,21 @@ impl WindowPortsMethods for Window { self.winit_window.set_title(title); } - fn set_inner_size(&self, size: DeviceIntSize) { + fn request_inner_size(&self, size: DeviceIntSize) -> Option { let toolbar_height = self.toolbar_height() * self.hidpi_factor(); let toolbar_height = toolbar_height.get().ceil() as i32; let total_size = PhysicalSize::new(size.width, size.height + toolbar_height); self.winit_window - .set_inner_size::>(total_size) + .request_inner_size::>(PhysicalSize::new( + total_size.width, + total_size.height, + )) + .and_then(|size| { + Some(DeviceIntSize::new( + size.width.try_into().ok()?, + size.height.try_into().ok()?, + )) + }) } fn set_position(&self, point: DeviceIntPoint) { @@ -338,7 +354,7 @@ impl WindowPortsMethods for Window { let winit_cursor = match cursor { Cursor::Default => CursorIcon::Default, - Cursor::Pointer => CursorIcon::Hand, + Cursor::Pointer => CursorIcon::Pointer, Cursor::ContextMenu => CursorIcon::ContextMenu, Cursor::Help => CursorIcon::Help, Cursor::Progress => CursorIcon::Progress, @@ -384,13 +400,14 @@ impl WindowPortsMethods for Window { self.winit_window.id() } - fn queue_embedder_events_for_winit_event(&self, event: winit::event::WindowEvent<'_>) { + fn queue_embedder_events_for_winit_event(&self, event: winit::event::WindowEvent) { match event { - winit::event::WindowEvent::ReceivedCharacter(ch) => self.handle_received_character(ch), - winit::event::WindowEvent::KeyboardInput { input, .. } => { - self.handle_keyboard_input(input) + winit::event::WindowEvent::KeyboardInput { event, .. } => { + self.handle_keyboard_input(event) + }, + winit::event::WindowEvent::ModifiersChanged(modifiers) => { + self.modifiers_state.set(modifiers.state()) }, - winit::event::WindowEvent::ModifiersChanged(state) => self.modifiers_state.set(state), winit::event::WindowEvent::MouseInput { state, button, .. } => { if button == MouseButton::Left || button == MouseButton::Right { self.handle_mouse(button, state, self.mouse_pos.get()); @@ -587,12 +604,15 @@ impl webxr::glwindow::GlWindow for XRWindow { device: &mut Device, _context: &mut Context, ) -> webxr::glwindow::GlWindowRenderTarget { - let window_handle = self.winit_window.raw_window_handle(); + let window_handle = self + .winit_window + .window_handle() + .expect("could not get window handle from window"); let size = self.winit_window.inner_size(); let size = Size2D::new(size.width as i32, size.height as i32); let native_widget = device .connection() - .create_native_widget_from_raw_window_handle(window_handle, size) + .create_native_widget_from_window_handle(window_handle, size) .expect("Failed to create native widget"); webxr::glwindow::GlWindowRenderTarget::NativeWidget(native_widget) } @@ -648,20 +668,20 @@ impl XRWindowPose { self.xr_translation.set(vec); } - fn handle_xr_rotation(&self, input: &KeyboardInput, modifiers: ModifiersState) { + fn handle_xr_rotation(&self, input: &KeyEvent, modifiers: ModifiersState) { if input.state != winit::event::ElementState::Pressed { return; } let mut x = 0.0; let mut y = 0.0; - match input.virtual_keycode { - Some(VirtualKeyCode::Up) => x = 1.0, - Some(VirtualKeyCode::Down) => x = -1.0, - Some(VirtualKeyCode::Left) => y = 1.0, - Some(VirtualKeyCode::Right) => y = -1.0, + match input.logical_key { + LogicalKey::Named(NamedKey::ArrowUp) => x = 1.0, + LogicalKey::Named(NamedKey::ArrowDown) => x = -1.0, + LogicalKey::Named(NamedKey::ArrowLeft) => y = 1.0, + LogicalKey::Named(NamedKey::ArrowRight) => y = -1.0, _ => return, }; - if modifiers.shift() { + if modifiers.shift_key() { x *= 10.0; y *= 10.0; } diff --git a/ports/servoshell/headless_window.rs b/ports/servoshell/headless_window.rs index 3f7499548cb..67d32c02cf6 100644 --- a/ports/servoshell/headless_window.rs +++ b/ports/servoshell/headless_window.rs @@ -73,23 +73,27 @@ impl WindowPortsMethods for Window { unsafe { winit::window::WindowId::dummy() } } - fn set_inner_size(&self, size: DeviceIntSize) { + fn request_inner_size(&self, size: DeviceIntSize) -> Option { let (width, height) = size.into(); // Surfman doesn't support zero-sized surfaces. - let new_size = Size2D::new(width.max(1), height.max(1)); - if self.inner_size.get() == new_size { - return; + let new_size = DeviceIntSize::new(width.max(1), height.max(1)); + if self.inner_size.get() == new_size.to_untyped() { + return Some(new_size); } match self.rendering_context.resize(new_size.to_untyped()) { Ok(()) => { - self.inner_size.set(new_size); + self.inner_size.set(new_size.to_untyped()); if let Ok(ref mut queue) = self.event_queue.write() { queue.push(EmbedderEvent::WindowResize); } + Some(new_size) + }, + Err(error) => { + warn!("Could not resize window: {error:?}"); + None }, - Err(error) => warn!("Could not resize window: {error:?}"), } } @@ -126,7 +130,7 @@ impl WindowPortsMethods for Window { self.animation_state.get() == AnimationState::Animating } - fn queue_embedder_events_for_winit_event(&self, _event: winit::event::WindowEvent<'_>) { + fn queue_embedder_events_for_winit_event(&self, _event: winit::event::WindowEvent) { // Not expecting any winit events. } diff --git a/ports/servoshell/keyutils.rs b/ports/servoshell/keyutils.rs index ef8800078be..6b153e86c52 100644 --- a/ports/servoshell/keyutils.rs +++ b/ports/servoshell/keyutils.rs @@ -4,7 +4,8 @@ use keyboard_types::{Code, Key, KeyState, KeyboardEvent, Location, Modifiers}; use log::info; -use winit::event::{ElementState, KeyboardInput, ModifiersState, VirtualKeyCode}; +use winit::event::{ElementState, KeyEvent}; +use winit::keyboard::{Key as LogicalKey, KeyCode, ModifiersState, NamedKey, PhysicalKey}; // Some shortcuts use Cmd on Mac and Control on other systems. #[cfg(target_os = "macos")] @@ -18,249 +19,249 @@ pub const CMD_OR_ALT: Modifiers = Modifiers::META; #[cfg(not(target_os = "macos"))] pub const CMD_OR_ALT: Modifiers = Modifiers::ALT; -fn get_servo_key_from_winit_key(key: Option) -> Key { - use winit::event::VirtualKeyCode::*; +fn get_servo_key_from_winit_key(key: &LogicalKey) -> Key { // TODO: figure out how to map NavigateForward, NavigateBackward // TODO: map the remaining keys if possible - let key = if let Some(key) = key { - key - } else { - return Key::Unidentified; - }; match key { // printable: Key1 to Key0 // printable: A to Z - Escape => Key::Escape, - F1 => Key::F1, - F2 => Key::F2, - F3 => Key::F3, - F4 => Key::F4, - F5 => Key::F5, - F6 => Key::F6, - F7 => Key::F7, - F8 => Key::F8, - F9 => Key::F9, - F10 => Key::F10, - F11 => Key::F11, - F12 => Key::F12, + LogicalKey::Named(NamedKey::Escape) => Key::Escape, + LogicalKey::Named(NamedKey::F1) => Key::F1, + LogicalKey::Named(NamedKey::F2) => Key::F2, + LogicalKey::Named(NamedKey::F3) => Key::F3, + LogicalKey::Named(NamedKey::F4) => Key::F4, + LogicalKey::Named(NamedKey::F5) => Key::F5, + LogicalKey::Named(NamedKey::F6) => Key::F6, + LogicalKey::Named(NamedKey::F7) => Key::F7, + LogicalKey::Named(NamedKey::F8) => Key::F8, + LogicalKey::Named(NamedKey::F9) => Key::F9, + LogicalKey::Named(NamedKey::F10) => Key::F10, + LogicalKey::Named(NamedKey::F11) => Key::F11, + LogicalKey::Named(NamedKey::F12) => Key::F12, // F13 to F15 are not mapped - Snapshot => Key::PrintScreen, + LogicalKey::Named(NamedKey::PrintScreen) => Key::PrintScreen, // Scroll not mapped - Pause => Key::Pause, - Insert => Key::Insert, - Home => Key::Home, - Delete => Key::Delete, - End => Key::End, - PageDown => Key::PageDown, - PageUp => Key::PageUp, - Left => Key::ArrowLeft, - Up => Key::ArrowUp, - Right => Key::ArrowRight, - Down => Key::ArrowDown, - Back => Key::Backspace, - Return => Key::Enter, + LogicalKey::Named(NamedKey::Pause) => Key::Pause, + LogicalKey::Named(NamedKey::Insert) => Key::Insert, + LogicalKey::Named(NamedKey::Home) => Key::Home, + LogicalKey::Named(NamedKey::Delete) => Key::Delete, + LogicalKey::Named(NamedKey::End) => Key::End, + LogicalKey::Named(NamedKey::PageDown) => Key::PageDown, + LogicalKey::Named(NamedKey::PageUp) => Key::PageUp, + LogicalKey::Named(NamedKey::ArrowLeft) => Key::ArrowLeft, + LogicalKey::Named(NamedKey::ArrowUp) => Key::ArrowUp, + LogicalKey::Named(NamedKey::ArrowRight) => Key::ArrowRight, + LogicalKey::Named(NamedKey::ArrowDown) => Key::ArrowDown, + LogicalKey::Named(NamedKey::Backspace) => Key::Backspace, + LogicalKey::Named(NamedKey::Enter) => Key::Enter, // printable: Space - Compose => Key::Compose, + LogicalKey::Named(NamedKey::Compose) => Key::Compose, // Caret not mapped - Numlock => Key::NumLock, + LogicalKey::Named(NamedKey::NumLock) => Key::NumLock, // printable: Numpad0 to Numpad9 // AbntC1 and AbntC2 not mapped // printable: Add, Apostrophe, // Apps, At, Ax not mapped // printable: Backslash, - Calculator => Key::LaunchApplication2, - Capital => Key::CapsLock, + LogicalKey::Named(NamedKey::LaunchApplication2) => Key::LaunchApplication2, + LogicalKey::Named(NamedKey::CapsLock) => Key::CapsLock, // printable: Colon, Comma, - Convert => Key::Convert, + LogicalKey::Named(NamedKey::Convert) => Key::Convert, // not mapped: Decimal, // printable: Divide, Equals, Grave, - Kana => Key::KanaMode, - Kanji => Key::KanjiMode, - LAlt => Key::Alt, + LogicalKey::Named(NamedKey::KanaMode) => Key::KanaMode, + LogicalKey::Named(NamedKey::KanjiMode) => Key::KanjiMode, + LogicalKey::Named(NamedKey::Alt) => Key::Alt, // printable: LBracket, - LControl => Key::Control, - LShift => Key::Shift, - LWin => Key::Meta, - Mail => Key::LaunchMail, + LogicalKey::Named(NamedKey::Control) => Key::Control, + LogicalKey::Named(NamedKey::Shift) => Key::Shift, + LogicalKey::Named(NamedKey::Meta) => Key::Meta, + LogicalKey::Named(NamedKey::LaunchMail) => Key::LaunchMail, // not mapped: MediaSelect, - MediaStop => Key::MediaStop, + LogicalKey::Named(NamedKey::MediaStop) => Key::MediaStop, // printable: Minus, Multiply, - Mute => Key::AudioVolumeMute, - MyComputer => Key::LaunchApplication1, + LogicalKey::Named(NamedKey::AudioVolumeMute) => Key::AudioVolumeMute, + LogicalKey::Named(NamedKey::LaunchApplication1) => Key::LaunchApplication1, // not mapped: NavigateForward, NavigateBackward - NextTrack => Key::MediaTrackNext, - NoConvert => Key::NonConvert, + LogicalKey::Named(NamedKey::MediaTrackNext) => Key::MediaTrackNext, + LogicalKey::Named(NamedKey::NonConvert) => Key::NonConvert, // printable: NumpadComma, NumpadEnter, NumpadEquals, // not mapped: OEM102, // printable: Period, - PlayPause => Key::MediaPlayPause, - Power => Key::Power, - PrevTrack => Key::MediaTrackPrevious, - RAlt => Key::Alt, + LogicalKey::Named(NamedKey::MediaPlayPause) => Key::MediaPlayPause, + LogicalKey::Named(NamedKey::Power) => Key::Power, + LogicalKey::Named(NamedKey::MediaTrackPrevious) => Key::MediaTrackPrevious, // printable RBracket - RControl => Key::Control, - RShift => Key::Shift, - RWin => Key::Meta, // printable Semicolon, Slash - Sleep => Key::Standby, + LogicalKey::Named(NamedKey::Standby) => Key::Standby, // not mapped: Stop, // printable Subtract, // not mapped: Sysrq, - Tab => Key::Tab, + LogicalKey::Named(NamedKey::Tab) => Key::Tab, // printable: Underline, // not mapped: Unlabeled, - VolumeDown => Key::AudioVolumeDown, - VolumeUp => Key::AudioVolumeUp, - Wake => Key::WakeUp, - WebBack => Key::BrowserBack, - WebFavorites => Key::BrowserFavorites, - WebForward => Key::BrowserForward, - WebHome => Key::BrowserHome, - WebRefresh => Key::BrowserRefresh, - WebSearch => Key::BrowserSearch, - WebStop => Key::BrowserStop, + LogicalKey::Named(NamedKey::AudioVolumeDown) => Key::AudioVolumeDown, + LogicalKey::Named(NamedKey::AudioVolumeUp) => Key::AudioVolumeUp, + LogicalKey::Named(NamedKey::WakeUp) => Key::WakeUp, + LogicalKey::Named(NamedKey::BrowserBack) => Key::BrowserBack, + LogicalKey::Named(NamedKey::BrowserFavorites) => Key::BrowserFavorites, + LogicalKey::Named(NamedKey::BrowserForward) => Key::BrowserForward, + LogicalKey::Named(NamedKey::BrowserHome) => Key::BrowserHome, + LogicalKey::Named(NamedKey::BrowserRefresh) => Key::BrowserRefresh, + LogicalKey::Named(NamedKey::BrowserSearch) => Key::BrowserSearch, + LogicalKey::Named(NamedKey::BrowserStop) => Key::BrowserStop, // printable Yen, - Copy => Key::Copy, - Paste => Key::Paste, - Cut => Key::Cut, + LogicalKey::Named(NamedKey::Copy) => Key::Copy, + LogicalKey::Named(NamedKey::Paste) => Key::Paste, + LogicalKey::Named(NamedKey::Cut) => Key::Cut, _ => Key::Unidentified, } } -fn get_servo_location_from_winit_key(key: Option) -> Location { - use winit::event::VirtualKeyCode::*; - // TODO: add more numpad keys - let key = if let Some(key) = key { - key +fn get_servo_location_from_physical_key(physical_key: PhysicalKey) -> Location { + let key_code = if let PhysicalKey::Code(key_code) = physical_key { + key_code } else { return Location::Standard; }; - match key { - LShift | LControl | LAlt | LWin => Location::Left, - RShift | RControl | RAlt | RWin => Location::Right, - Numpad0 | Numpad1 | Numpad2 | Numpad3 | Numpad4 | Numpad5 | Numpad6 | Numpad7 | - Numpad8 | Numpad9 => Location::Numpad, - NumpadComma | NumpadEnter | NumpadEquals => Location::Numpad, + + // TODO: add more numpad keys + match key_code { + KeyCode::ShiftLeft | KeyCode::ControlLeft | KeyCode::AltLeft | KeyCode::SuperLeft => { + Location::Left + }, + KeyCode::ShiftRight | KeyCode::ControlRight | KeyCode::AltRight | KeyCode::SuperRight => { + Location::Right + }, + KeyCode::Numpad0 | + KeyCode::Numpad1 | + KeyCode::Numpad2 | + KeyCode::Numpad3 | + KeyCode::Numpad4 | + KeyCode::Numpad5 | + KeyCode::Numpad6 | + KeyCode::Numpad7 | + KeyCode::Numpad8 | + KeyCode::Numpad9 => Location::Numpad, + KeyCode::NumpadComma | KeyCode::NumpadEnter | KeyCode::NumpadEqual => Location::Numpad, _ => Location::Standard, } } -#[cfg(target_os = "linux")] -fn get_servo_code_from_scancode(scancode: u32) -> Code { +fn get_servo_code_from_physical_key(physical_key: PhysicalKey) -> Code { + let key_code = if let PhysicalKey::Code(key_code) = physical_key { + key_code + } else { + return Code::Unidentified; + }; + // TODO: Map more codes - use keyboard_types::Code::*; - match scancode { - 1 => Escape, - 2 => Digit1, - 3 => Digit2, - 4 => Digit3, - 5 => Digit4, - 6 => Digit5, - 7 => Digit6, - 8 => Digit7, - 9 => Digit8, - 10 => Digit9, - 11 => Digit0, + match key_code { + KeyCode::Escape => Code::Escape, + KeyCode::Digit1 => Code::Digit1, + KeyCode::Digit2 => Code::Digit2, + KeyCode::Digit3 => Code::Digit3, + KeyCode::Digit4 => Code::Digit4, + KeyCode::Digit5 => Code::Digit5, + KeyCode::Digit6 => Code::Digit6, + KeyCode::Digit7 => Code::Digit7, + KeyCode::Digit8 => Code::Digit8, + KeyCode::Digit9 => Code::Digit9, + KeyCode::Digit0 => Code::Digit0, - 14 => Backspace, - 15 => Tab, - 16 => KeyQ, - 17 => KeyW, - 18 => KeyE, - 19 => KeyR, - 20 => KeyT, - 21 => KeyY, - 22 => KeyU, - 23 => KeyI, - 24 => KeyO, - 25 => KeyP, - 26 => BracketLeft, - 27 => BracketRight, - 28 => Enter, + KeyCode::Backspace => Code::Backspace, + KeyCode::Tab => Code::Tab, + KeyCode::KeyQ => Code::KeyQ, + KeyCode::KeyW => Code::KeyW, + KeyCode::KeyE => Code::KeyE, + KeyCode::KeyR => Code::KeyR, + KeyCode::KeyT => Code::KeyT, + KeyCode::KeyY => Code::KeyY, + KeyCode::KeyU => Code::KeyU, + KeyCode::KeyI => Code::KeyI, + KeyCode::KeyO => Code::KeyO, + KeyCode::KeyP => Code::KeyP, + KeyCode::BracketLeft => Code::BracketLeft, + KeyCode::BracketRight => Code::BracketRight, + KeyCode::Enter => Code::Enter, - 30 => KeyA, - 31 => KeyS, - 32 => KeyD, - 33 => KeyF, - 34 => KeyG, - 35 => KeyH, - 36 => KeyJ, - 37 => KeyK, - 38 => KeyL, - 39 => Semicolon, - 40 => Quote, + KeyCode::KeyA => Code::KeyA, + KeyCode::KeyS => Code::KeyS, + KeyCode::KeyD => Code::KeyD, + KeyCode::KeyF => Code::KeyF, + KeyCode::KeyG => Code::KeyG, + KeyCode::KeyH => Code::KeyH, + KeyCode::KeyJ => Code::KeyJ, + KeyCode::KeyK => Code::KeyK, + KeyCode::KeyL => Code::KeyL, + KeyCode::Semicolon => Code::Semicolon, + KeyCode::Quote => Code::Quote, - 42 => ShiftLeft, - 43 => Backslash, - 44 => KeyZ, - 45 => KeyX, - 46 => KeyC, - 47 => KeyV, - 48 => KeyB, - 49 => KeyN, - 50 => KeyM, - 51 => Comma, - 52 => Period, - 53 => Slash, - 54 => ShiftRight, + KeyCode::ShiftLeft => Code::ShiftLeft, + KeyCode::Backslash => Code::Backslash, + KeyCode::KeyZ => Code::KeyZ, + KeyCode::KeyX => Code::KeyX, + KeyCode::KeyC => Code::KeyC, + KeyCode::KeyV => Code::KeyV, + KeyCode::KeyB => Code::KeyB, + KeyCode::KeyN => Code::KeyN, + KeyCode::KeyM => Code::KeyM, + KeyCode::Comma => Code::Comma, + KeyCode::Period => Code::Period, + KeyCode::Slash => Code::Slash, + KeyCode::ShiftRight => Code::ShiftRight, - 57 => Space, + KeyCode::Space => Code::Space, - 59 => F1, - 60 => F2, - 61 => F3, - 62 => F4, - 63 => F5, - 64 => F6, - 65 => F7, - 66 => F8, - 67 => F9, - 68 => F10, + KeyCode::F1 => Code::F1, + KeyCode::F2 => Code::F2, + KeyCode::F3 => Code::F3, + KeyCode::F4 => Code::F4, + KeyCode::F5 => Code::F5, + KeyCode::F6 => Code::F6, + KeyCode::F7 => Code::F7, + KeyCode::F8 => Code::F8, + KeyCode::F9 => Code::F9, + KeyCode::F10 => Code::F10, - 87 => F11, - 88 => F12, + KeyCode::F11 => Code::F11, + KeyCode::F12 => Code::F12, - 103 => ArrowUp, - 104 => PageUp, - 105 => ArrowLeft, - 106 => ArrowRight, + KeyCode::ArrowUp => Code::ArrowUp, + KeyCode::PageUp => Code::PageUp, + KeyCode::ArrowLeft => Code::ArrowLeft, + KeyCode::ArrowRight => Code::ArrowRight, - 102 => Home, - 107 => End, - 108 => ArrowDown, - 109 => PageDown, - 110 => Insert, - 111 => Delete, + KeyCode::Home => Code::Home, + KeyCode::End => Code::End, + KeyCode::ArrowDown => Code::ArrowDown, + KeyCode::PageDown => Code::PageDown, + KeyCode::Insert => Code::Insert, + KeyCode::Delete => Code::Delete, - _ => Unidentified, + _ => Code::Unidentified, } } -#[cfg(not(target_os = "linux"))] -fn get_servo_code_from_scancode(_scancode: u32) -> Code { - // TODO: Implement for Windows and Mac OS - Code::Unidentified -} - fn get_modifiers(mods: ModifiersState) -> Modifiers { let mut modifiers = Modifiers::empty(); - modifiers.set(Modifiers::CONTROL, mods.ctrl()); - modifiers.set(Modifiers::SHIFT, mods.shift()); - modifiers.set(Modifiers::ALT, mods.alt()); - modifiers.set(Modifiers::META, mods.logo()); + modifiers.set(Modifiers::CONTROL, mods.control_key()); + modifiers.set(Modifiers::SHIFT, mods.shift_key()); + modifiers.set(Modifiers::ALT, mods.alt_key()); + modifiers.set(Modifiers::META, mods.super_key()); modifiers } -pub fn keyboard_event_from_winit(input: KeyboardInput, state: ModifiersState) -> KeyboardEvent { +pub fn keyboard_event_from_winit(input: &KeyEvent, state: ModifiersState) -> KeyboardEvent { info!("winit keyboard input: {:?}", input); KeyboardEvent { state: match input.state { ElementState::Pressed => KeyState::Down, ElementState::Released => KeyState::Up, }, - key: get_servo_key_from_winit_key(input.virtual_keycode), - code: get_servo_code_from_scancode(input.scancode), - location: get_servo_location_from_winit_key(input.virtual_keycode), + key: get_servo_key_from_winit_key(&input.logical_key), + code: get_servo_code_from_physical_key(input.physical_key), + location: get_servo_location_from_physical_key(input.physical_key), modifiers: get_modifiers(state), repeat: false, is_composing: false, diff --git a/ports/servoshell/minibrowser.rs b/ports/servoshell/minibrowser.rs index 08cb7c3364e..20491380ba7 100644 --- a/ports/servoshell/minibrowser.rs +++ b/ports/servoshell/minibrowser.rs @@ -61,7 +61,6 @@ impl Minibrowser { pub fn new( rendering_context: &RenderingContext, events_loop: &EventsLoop, - window: &dyn WindowPortsMethods, initial_url: ServoUrl, ) -> Self { let gl = unsafe { @@ -70,10 +69,6 @@ impl Minibrowser { // Adapted from https://github.com/emilk/egui/blob/9478e50d012c5138551c38cbee16b07bc1fcf283/crates/egui_glow/examples/pure_glow.rs let context = EguiGlow::new(events_loop.as_winit(), Arc::new(gl), None); - context - .egui_ctx - .set_pixels_per_point(window.hidpi_factor().get()); - let widget_surface_fbo = match rendering_context.context_surface_info() { Ok(Some(info)) => NonZeroU32::new(info.framebuffer_object).map(NativeFramebuffer), Ok(None) => panic!("Failed to get widget surface info from surfman!"), @@ -96,8 +91,12 @@ impl Minibrowser { /// Preprocess the given [winit::event::WindowEvent], returning unconsumed for mouse events in /// the Servo browser rect. This is needed because the CentralPanel we create for our webview /// would otherwise make egui report events in that area as consumed. - pub fn on_event(&mut self, event: &winit::event::WindowEvent<'_>) -> EventResponse { - let mut result = self.context.on_event(event); + pub fn on_window_event( + &mut self, + window: &winit::window::Window, + event: &winit::event::WindowEvent, + ) -> EventResponse { + let mut result = self.context.on_window_event(window, event); result.consumed &= match event { winit::event::WindowEvent::CursorMoved { position, .. } => { let scale = Scale::<_, DeviceIndependentPixel, _>::new( diff --git a/ports/servoshell/tracing.rs b/ports/servoshell/tracing.rs index 394765d1423..cc7d603191a 100644 --- a/ports/servoshell/tracing.rs +++ b/ports/servoshell/tracing.rs @@ -65,7 +65,7 @@ mod from_winit { }; } - impl LogTarget for winit::event::Event<'_, WakerEvent> { + impl LogTarget for winit::event::Event { fn log_target(&self) -> &'static str { use winit::event::StartCause; match self { @@ -80,15 +80,14 @@ mod from_winit { Self::UserEvent(WakerEvent) => target!("UserEvent(WakerEvent)"), Self::Suspended => target!("Suspended"), Self::Resumed => target!("Resumed"), - Self::MainEventsCleared => target!("MainEventsCleared"), - Self::RedrawRequested(..) => target!("RedrawRequested"), - Self::RedrawEventsCleared => target!("RedrawEventsCleared"), - Self::LoopDestroyed => target!("LoopDestroyed"), + Self::AboutToWait => target!("AboutToWait"), + Self::LoopExiting => target!("LoopExiting"), + Self::MemoryWarning => target!("MemoryWarning"), } } } - impl LogTarget for winit::event::WindowEvent<'_> { + impl LogTarget for winit::event::WindowEvent { fn log_target(&self) -> &'static str { macro_rules! target_variant { ($name:literal) => { @@ -96,6 +95,7 @@ mod from_winit { }; } match self { + Self::ActivationTokenDone { .. } => target!("ActivationTokenDone"), Self::Resized(..) => target_variant!("Resized"), Self::Moved(..) => target_variant!("Moved"), Self::CloseRequested => target_variant!("CloseRequested"), @@ -103,7 +103,6 @@ mod from_winit { Self::DroppedFile(..) => target_variant!("DroppedFile"), Self::HoveredFile(..) => target_variant!("HoveredFile"), Self::HoveredFileCancelled => target_variant!("HoveredFileCancelled"), - Self::ReceivedCharacter(..) => target_variant!("ReceivedCharacter"), Self::Focused(..) => target_variant!("Focused"), Self::KeyboardInput { .. } => target_variant!("KeyboardInput"), Self::ModifiersChanged(..) => target_variant!("ModifiersChanged"), @@ -122,6 +121,7 @@ mod from_winit { Self::ScaleFactorChanged { .. } => target_variant!("ScaleFactorChanged"), Self::ThemeChanged(..) => target_variant!("ThemeChanged"), Self::Occluded(..) => target_variant!("Occluded"), + Self::RedrawRequested => target!("RedrawRequested"), } } } diff --git a/ports/servoshell/webview.rs b/ports/servoshell/webview.rs index 34d87da6fe3..00ffacf9731 100644 --- a/ports/servoshell/webview.rs +++ b/ports/servoshell/webview.rs @@ -477,7 +477,7 @@ where .push(EmbedderEvent::MoveResizeWebView(webview_id, new_rect)); } } - self.window.set_inner_size(size); + self.window.request_inner_size(size); }, EmbedderMsg::Prompt(definition, origin) => { let res = if opts::get().headless { diff --git a/ports/servoshell/window_trait.rs b/ports/servoshell/window_trait.rs index 490ec0415dc..b7bf9cba717 100644 --- a/ports/servoshell/window_trait.rs +++ b/ports/servoshell/window_trait.rs @@ -34,10 +34,10 @@ pub trait WindowPortsMethods: WindowMethods { ) -> Option>; fn page_height(&self) -> f32; fn get_fullscreen(&self) -> bool; - fn queue_embedder_events_for_winit_event(&self, event: winit::event::WindowEvent<'_>); + fn queue_embedder_events_for_winit_event(&self, event: winit::event::WindowEvent); fn is_animating(&self) -> bool; fn set_title(&self, _title: &str) {} - fn set_inner_size(&self, _size: DeviceIntSize); + fn request_inner_size(&self, size: DeviceIntSize) -> Option; fn set_position(&self, _point: DeviceIntPoint) {} fn set_fullscreen(&self, _state: bool) {} fn set_cursor(&self, _cursor: Cursor) {} diff --git a/python/servo/command_base.py b/python/servo/command_base.py index 74de8850164..2ad49d1097d 100644 --- a/python/servo/command_base.py +++ b/python/servo/command_base.py @@ -486,11 +486,6 @@ class CommandBase(object): if platform.is_macos: util.prepend_paths_to_env(env, "DYLD_LIBRARY_PATH", os.path.join(gstreamer_root, "lib")) - effective_target = self.cross_compile_target or servo.platform.host_triple() - if "msvc" in effective_target: - # Always build harfbuzz from source - env["HARFBUZZ_SYS_NO_PKG_CONFIG"] = "true" - if sys.platform != "win32": env.setdefault("CC", "clang") env.setdefault("CXX", "clang++") @@ -615,7 +610,6 @@ class CommandBase(object): env['OBJCOPY'] = to_ndk_bin("llvm-objcopy") env['YASM'] = to_ndk_bin("yasm") env['STRIP'] = to_ndk_bin("llvm-strip") - env['HARFBUZZ_SYS_NO_PKG_CONFIG'] = "true" env['RUST_FONTCONFIG_DLOPEN'] = "on" env["LIBCLANG_PATH"] = path.join(llvm_toolchain, "lib64") diff --git a/python/servo/platform/linux.py b/python/servo/platform/linux.py index 9f7ff2e0ff2..e382dbec0ec 100644 --- a/python/servo/platform/linux.py +++ b/python/servo/platform/linux.py @@ -38,7 +38,7 @@ APT_PKGS = [ 'libharfbuzz-dev', 'liblzma-dev', 'libudev-dev', 'libunwind-dev', 'libvulkan1', 'libx11-dev', 'libxcb-render0-dev', 'libxcb-shape0-dev', 'libxcb-xfixes0-dev', 'libxmu-dev', 'libxmu6', 'libegl1-mesa-dev', - 'llvm-dev', 'm4', 'xorg-dev', + 'llvm-dev', 'm4', 'xorg-dev', 'libxkbcommon0', "libxkbcommon-x11-0" ] # https://packages.fedoraproject.org @@ -56,7 +56,8 @@ DNF_PKGS = ['libtool', 'gcc-c++', 'libXi-devel', 'freetype-devel', 'gstreamer1-devel', 'gstreamer1-plugins-base-devel', 'gstreamer1-plugins-good', 'gstreamer1-plugins-bad-free-devel', 'gstreamer1-plugins-ugly-free', 'libjpeg-turbo-devel', - 'zlib', 'libjpeg', 'vulkan-loader'] + 'zlib', 'libjpeg', 'vulkan-loader', 'libxkbcommon', + 'libxkbcommon-x11'] # https://voidlinux.org/packages/ # 1. open devtools @@ -71,7 +72,8 @@ XBPS_PKGS = ['libtool', 'gcc', 'libXi-devel', 'freetype-devel', 'ncurses-devel', 'harfbuzz-devel', 'ccache', 'glu-devel', 'clang', 'gstreamer1-devel', 'gst-plugins-base1-devel', 'gst-plugins-good1', 'gst-plugins-bad1-devel', - 'gst-plugins-ugly1', 'vulkan-loader'] + 'gst-plugins-ugly1', 'vulkan-loader', 'libxkbcommon', + 'libxkbcommon-x11'] GSTREAMER_URL = \ "https://github.com/servo/servo-build-deps/releases/download/linux/gstreamer-1.16-x86_64-linux-gnu.20190515.tar.gz" diff --git a/servo-tidy.toml b/servo-tidy.toml index f81df346f91..6db10c6da0e 100644 --- a/servo-tidy.toml +++ b/servo-tidy.toml @@ -34,10 +34,10 @@ packages = [ # New versions of these dependencies is pulled in by GStreamer / GLib. "itertools", - "proc-macro-crate", "toml", # Duplicated by winit. + "jni", "windows-sys", "windows-targets", "windows_aarch64_gnullvm", @@ -52,7 +52,6 @@ packages = [ "foreign-types", "foreign-types-shared", "metal", - "raw-window-handle", # Duplicated by indexmap. "hashbrown", @@ -68,10 +67,6 @@ packages = [ "phf", "phf_generator", "phf_shared", - - # These can be removed once winit, font-kit, etc are upgraded - "core-graphics", - "core-text", ] # Files that are ignored for all tidy and lint checks. files = [ diff --git a/tests/wpt/meta-legacy-layout/css/css-text/shaping/reference/shaping-023-ref.html.ini b/tests/wpt/meta-legacy-layout/css/css-text/shaping/reference/shaping-023-ref.html.ini deleted file mode 100644 index 5d9260aca14..00000000000 --- a/tests/wpt/meta-legacy-layout/css/css-text/shaping/reference/shaping-023-ref.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[shaping-023-ref.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-text/shaping/reference/shaping-023-ref.html.ini b/tests/wpt/meta/css/css-text/shaping/reference/shaping-023-ref.html.ini deleted file mode 100644 index 5d9260aca14..00000000000 --- a/tests/wpt/meta/css/css-text/shaping/reference/shaping-023-ref.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[shaping-023-ref.html] - expected: FAIL