From 9107b7d01838eb575814865f9e37a59949038ac0 Mon Sep 17 00:00:00 2001 From: Ammar Abou Zor Date: Wed, 30 Sep 2026 09:59:41 +0200 Subject: [PATCH 1/2] Update egui to 0.36 * Update egui to latest version after merging the pinned fixes previously set in `Cargo.toml` file. * Remove debug temp fix after fixing it upstream * Further compatibility changes with the new version --- Cargo.lock | 564 ++++++++++-------- Cargo.toml | 19 +- crates/app/src/common/ui/tab_strip.rs | 22 +- .../app/src/common/ui/visibility_tracker.rs | 28 +- crates/app/src/host/common/app_style.rs | 7 - crates/app/src/host/common/ui_utls.rs | 20 +- crates/app/src/host/ui/app_settings/mod.rs | 4 +- crates/app/src/host/ui/command_palette/mod.rs | 1 - crates/app/src/host/ui/dnd_paths.rs | 2 +- crates/app/src/host/ui/home/file_explorer.rs | 7 +- crates/app/src/host/ui/home/mod.rs | 4 +- crates/app/src/host/ui/home/recent.rs | 2 +- crates/app/src/host/ui/mod.rs | 6 +- .../src/host/ui/multi_setup/main_table/mod.rs | 4 +- crates/app/src/host/ui/multi_setup/mod.rs | 14 +- crates/app/src/host/ui/plugin_manager/mod.rs | 6 +- crates/app/src/host/ui/quick_open/mod.rs | 1 - .../ui/session_setup/main_config/process.rs | 14 +- .../ui/session_setup/main_config/serial.rs | 2 +- crates/app/src/host/ui/session_setup/mod.rs | 6 +- .../src/session/ui/bottom_panel/chart/data.rs | 4 +- .../src/session/ui/bottom_panel/chart/mod.rs | 19 +- .../session/ui/bottom_panel/presets/mod.rs | 1 - .../src/session/ui/bottom_panel/search/mod.rs | 19 +- .../ui/bottom_panel/search/nested_search.rs | 35 +- .../src/session/ui/common/log_table/table.rs | 10 +- .../src/session/ui/common/log_table/text.rs | 37 +- crates/app/src/session/ui/jump_to_row.rs | 30 +- crates/app/src/session/ui/mod.rs | 25 +- .../src/session/ui/side_panel/attachments.rs | 4 +- crates/app/src/session/ui/side_panel/mod.rs | 4 +- .../session/ui/side_panel/observing/serial.rs | 6 +- 32 files changed, 495 insertions(+), 432 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9466da298e..98c6d673de 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20,9 +20,9 @@ checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" [[package]] name = "accesskit" -version = "0.24.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5351dcebb14b579ccab05f288596b2ae097005be7ee50a7c3d4ca9d0d5a66f6a" +checksum = "d3b7f7f85a7e5f68090000ed7622545829afd484d210358702ae4cb97dd0c320" dependencies = [ "enumn", "serde", @@ -180,7 +180,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" dependencies = [ "android-properties", - "bitflags 2.11.1", + "bitflags 2.13.2", "cc", "jni", "libc", @@ -481,7 +481,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -516,7 +516,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -594,9 +594,9 @@ dependencies = [ [[package]] name = "bit-set" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ddef2995421ab6a5c779542c81ee77c115206f4ad9d5a8e05f4ff49716a3dd" +checksum = "09ec2f926cc3060f09db9ebc5b52823d85268d24bb917e472c0c4bea35780a7d" dependencies = [ "bit-vec 0.9.1", ] @@ -621,9 +621,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" dependencies = [ "serde_core", ] @@ -735,7 +735,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -762,7 +762,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "log", "polling", "rustix 0.38.44", @@ -776,7 +776,7 @@ version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dbf9978365bac10f54d1d4b04f7ce4427e51f71d61f2fe15e3fed5166474df7" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "polling", "rustix 1.1.4", "slab", @@ -911,9 +911,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" [[package]] name = "cgl" @@ -1011,7 +1011,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -1450,7 +1450,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 2.0.117", ] [[package]] @@ -1461,7 +1461,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -1491,7 +1491,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -1501,7 +1501,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn", + "syn 2.0.117", ] [[package]] @@ -1522,7 +1522,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn", + "syn 2.0.117", "unicode-xid", ] @@ -1617,7 +1617,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -1631,7 +1631,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -1699,8 +1699,9 @@ checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" [[package]] name = "ecolor" -version = "0.34.1" -source = "git+https://github.com/AmmarAbouZor/egui?rev=a9f3a3e4ce95e014d46bae8ab49021b3e77213c8#a9f3a3e4ce95e014d46bae8ab49021b3e77213c8" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0656a7530b9e2841ee7a5f983965bdd9840c32f4012f759cfd44b912cced6b34" dependencies = [ "bytemuck", "emath", @@ -1709,8 +1710,9 @@ dependencies = [ [[package]] name = "eframe" -version = "0.34.1" -source = "git+https://github.com/AmmarAbouZor/egui?rev=a9f3a3e4ce95e014d46bae8ab49021b3e77213c8#a9f3a3e4ce95e014d46bae8ab49021b3e77213c8" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ad41fac6e3149abb4866e93df37dbd33baa95db525c3368c944584e95a5dc2" dependencies = [ "ahash", "bytemuck", @@ -1722,7 +1724,6 @@ dependencies = [ "glow", "glutin", "glutin-winit", - "home", "image", "js-sys", "log", @@ -1737,7 +1738,6 @@ dependencies = [ "serde", "static_assertions", "wasm-bindgen", - "wasm-bindgen-futures", "web-sys", "web-time", "windows-sys 0.61.2", @@ -1746,14 +1746,16 @@ dependencies = [ [[package]] name = "egui" -version = "0.34.1" -source = "git+https://github.com/AmmarAbouZor/egui?rev=a9f3a3e4ce95e014d46bae8ab49021b3e77213c8#a9f3a3e4ce95e014d46bae8ab49021b3e77213c8" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc938cc27cd911415e1e4d151bc56ff9df063d8db081374e87aeb805ea74b2ba" dependencies = [ "accesskit", "ahash", - "bitflags 2.11.1", + "bitflags 2.13.2", "emath", "epaint", + "itertools 0.15.0", "log", "nohash-hasher", "profiling", @@ -1761,21 +1763,23 @@ dependencies = [ "serde", "smallvec", "unicode-segmentation", + "web-sys", ] [[package]] name = "egui-phosphor" -version = "0.12.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4e4b18e368ff336c8dd2102992e2631b118f29a2164b0d2be9d8889dcd367e" +checksum = "3f4299551488dddaa8f757727e1eb4ffdaf277ffe6e30b413403468f5ecf4634" dependencies = [ "egui", ] [[package]] name = "egui-wgpu" -version = "0.34.1" -source = "git+https://github.com/AmmarAbouZor/egui?rev=a9f3a3e4ce95e014d46bae8ab49021b3e77213c8#a9f3a3e4ce95e014d46bae8ab49021b3e77213c8" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cef1f6d1bba40b09a4d0d62cb822b81030922cfbf65c5373398c3a3caafc5bd" dependencies = [ "ahash", "bytemuck", @@ -1793,8 +1797,9 @@ dependencies = [ [[package]] name = "egui-winit" -version = "0.34.1" -source = "git+https://github.com/AmmarAbouZor/egui?rev=a9f3a3e4ce95e014d46bae8ab49021b3e77213c8#a9f3a3e4ce95e014d46bae8ab49021b3e77213c8" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98466000559d66ba4db786a30448b01483946add4188e7f10f522a27b4fb89cc" dependencies = [ "accesskit_winit", "arboard", @@ -1809,15 +1814,14 @@ dependencies = [ "serde", "smithay-clipboard", "web-time", - "webbrowser", "winit", ] [[package]] name = "egui_commonmark" -version = "0.23.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55df531ff51161b3c6212e0ee2166b370f150254bf4448a8a15c3d26fec87958" +checksum = "19e757b2a0639f5f75793e6936ad4c86e8b58ee379d23578ad6924ba9f75ec38" dependencies = [ "egui", "egui_commonmark_backend", @@ -1827,9 +1831,9 @@ dependencies = [ [[package]] name = "egui_commonmark_backend" -version = "0.23.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe04399ca5a2196965833a2918e50400449721fd9350e31ae7d84d6690859437" +checksum = "67e182e6b923b0ade1152f67e7d827cbc266fca7782d50249de0c4cad1a2a4e5" dependencies = [ "egui", "egui_extras", @@ -1838,13 +1842,15 @@ dependencies = [ [[package]] name = "egui_extras" -version = "0.34.1" -source = "git+https://github.com/AmmarAbouZor/egui?rev=a9f3a3e4ce95e014d46bae8ab49021b3e77213c8#a9f3a3e4ce95e014d46bae8ab49021b3e77213c8" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05cbdc785020861553f230f23d330ba1fb72613b9d8e0e457f3bdc8ba6db6dcf" dependencies = [ "ahash", "egui", "enum-map", "image", + "itertools 0.15.0", "log", "mime_guess2", "profiling", @@ -1852,25 +1858,23 @@ dependencies = [ [[package]] name = "egui_glow" -version = "0.34.1" -source = "git+https://github.com/AmmarAbouZor/egui?rev=a9f3a3e4ce95e014d46bae8ab49021b3e77213c8#a9f3a3e4ce95e014d46bae8ab49021b3e77213c8" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "606ed4167daf341e5753d703285c4c1d562324b2c07aa8f405cd7d066fe58f3b" dependencies = [ "bytemuck", "egui", "glow", "log", - "memoffset", "profiling", - "wasm-bindgen", - "web-sys", "winit", ] [[package]] name = "egui_plot" -version = "0.35.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7bd66213736bf9a9a53dc4888570b9194fc0db906507517a7fcc787e888ac47" +checksum = "90f3711a5032bb65a41011b23fcdc6c4bb599757b82cc0181d41e7d1de16986a" dependencies = [ "ahash", "egui", @@ -1879,9 +1883,9 @@ dependencies = [ [[package]] name = "egui_table" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8512decdd471a2b6106d0b42cc0662f0e94b0ca8f21bc1b0075f455f58901010" +checksum = "2f6b5cdba39c9f55810bd291597279728f947f9d1f8cf67eacbe4d26517c96d6" dependencies = [ "egui", "serde", @@ -1896,8 +1900,9 @@ checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "emath" -version = "0.34.1" -source = "git+https://github.com/AmmarAbouZor/egui?rev=a9f3a3e4ce95e014d46bae8ab49021b3e77213c8#a9f3a3e4ce95e014d46bae8ab49021b3e77213c8" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52c8d4141cf0f60fb2f7aefaf352d3ffa5171ef0ab09731c64391801e95e48f1" dependencies = [ "bytemuck", "serde", @@ -1962,7 +1967,7 @@ checksum = "685adfa4d6f3d765a26bc5dbc936577de9abf756c1feeb3089b01dd395034842" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -1982,7 +1987,7 @@ checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -2003,7 +2008,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -2014,7 +2019,7 @@ checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -2042,8 +2047,9 @@ dependencies = [ [[package]] name = "epaint" -version = "0.34.1" -source = "git+https://github.com/AmmarAbouZor/egui?rev=a9f3a3e4ce95e014d46bae8ab49021b3e77213c8#a9f3a3e4ce95e014d46bae8ab49021b3e77213c8" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0ec0308dc23130fc1a7d4623a8534c2ed069c6dc84e258ee4f3de99615aa1a3" dependencies = [ "ahash", "bytemuck", @@ -2051,6 +2057,7 @@ dependencies = [ "emath", "epaint_default_fonts", "font-types", + "harfrust", "log", "nohash-hasher", "parking_lot", @@ -2060,13 +2067,16 @@ dependencies = [ "serde", "skrifa", "smallvec", + "unicode-general-category", + "unicode-segmentation", "vello_cpu", ] [[package]] name = "epaint_default_fonts" -version = "0.34.1" -source = "git+https://github.com/AmmarAbouZor/egui?rev=a9f3a3e4ce95e014d46bae8ab49021b3e77213c8#a9f3a3e4ce95e014d46bae8ab49021b3e77213c8" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773fa9c96dd0dbef887e39d0ed6177f141cce4d68e6041df77570aa3702dfa13" [[package]] name = "equivalent" @@ -2169,12 +2179,9 @@ dependencies = [ [[package]] name = "fearless_simd" -version = "0.3.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb2907d1f08b2b316b9223ced5b0e89d87028ba8deae9764741dba8ff7f3903" -dependencies = [ - "bytemuck", -] +checksum = "b97b65636e5b9ef369943878ac74335ba1c55c1cb6adbf1e2c293c624248d693" [[package]] name = "file_tools" @@ -2226,9 +2233,9 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "font-types" -version = "0.11.3" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b38ad915f6dadd993ced50848a8291a543bd41ca62bc10740d5e64e2ab4cfd7" +checksum = "b8eb065f3251655b3c90e22e5e363f310fc5332fb3402e37bbc94752283248f6" dependencies = [ "bytemuck", "serde", @@ -2261,7 +2268,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -2365,7 +2372,7 @@ checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -2412,7 +2419,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27d12c0aed7f1e24276a241aadc4cb8ea9f83000f34bc062b7cc2d51e3b0fabd" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "debugid", "fxhash", "serde", @@ -2507,6 +2514,22 @@ dependencies = [ "xml-rs", ] +[[package]] +name = "glifo" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed4a1bb24121291d27230c1b1b44e07d6a9b28cefdb32fe1581dfb84e14f940a" +dependencies = [ + "bytemuck", + "foldhash 0.2.0", + "hashbrown 0.17.1", + "log", + "peniko", + "skrifa", + "smallvec", + "vello_common", +] + [[package]] name = "glob" version = "0.3.3" @@ -2544,7 +2567,7 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "cfg_aliases", "cgl", "dispatch2", @@ -2641,6 +2664,15 @@ dependencies = [ "memmap2", ] +[[package]] +name = "guillotiere" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b17e70c989c36bad147b27a58d148c0741c51448aa5653436547323e524d0ab" +dependencies = [ + "euclid", +] + [[package]] name = "h2" version = "0.4.14" @@ -2672,6 +2704,18 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "harfrust" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c03d949a14aa089bbb282f7dd76a498a7f684428e4257202efc119ec010376f9" +dependencies = [ + "bitflags 2.13.2", + "bytemuck", + "read-fonts", + "smallvec", +] + [[package]] name = "hashbrown" version = "0.15.5" @@ -2696,6 +2740,9 @@ name = "hashbrown" version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "foldhash 0.2.0", +] [[package]] name = "heck" @@ -2715,21 +2762,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "hexf-parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" - -[[package]] -name = "home" -version = "0.5.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" -dependencies = [ - "windows-sys 0.61.2", -] - [[package]] name = "http" version = "1.4.0" @@ -3137,6 +3169,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b4baf93f58d4425749ca49a51c50ebab072c5df6994d08fed93541c331481dc" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.18" @@ -3184,7 +3225,7 @@ checksum = "e000de030ff8022ea1da3f466fbb0f3a809f5e51ed31f6dd931c35181ad8e6d7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -3214,7 +3255,7 @@ dependencies = [ "quote", "rustc_version", "simd_cesu8", - "syn", + "syn 2.0.117", ] [[package]] @@ -3242,7 +3283,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" dependencies = [ "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -3257,13 +3298,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -3325,7 +3365,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "libc", "plain", "redox_syscall 0.7.5", @@ -3392,9 +3432,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" dependencies = [ "serde_core", ] @@ -3579,22 +3619,22 @@ dependencies = [ [[package]] name = "naga" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd91265cc2454558f659b3b4b9640f0ddb8cc6521277f166b8a8c181c898079" +checksum = "a616d2fb8c89516ac2723a581f69d6c18576046bed761bd6b305e5618e6ae130" dependencies = [ "arrayvec", - "bit-set 0.9.1", - "bitflags 2.11.1", + "bit-set 0.10.0", + "bitflags 2.13.2", "cfg-if", "cfg_aliases", "codespan-reporting", "half", - "hashbrown 0.16.1", - "hexf-parse", + "hashbrown 0.17.1", "indexmap", "libm", "log", + "naga-types", "num-traits", "once_cell", "rustc-hash 1.1.0", @@ -3602,6 +3642,18 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "naga-types" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "590afbf58a6f4f62873cd5cff4468061844bafa1cdf399cc954537c22d768d49" +dependencies = [ + "hashbrown 0.17.1", + "indexmap", + "rustc-hash 1.1.0", + "thiserror 2.0.18", +] + [[package]] name = "native-tls" version = "0.2.18" @@ -3625,7 +3677,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "jni-sys 0.3.1", "log", "ndk-sys", @@ -3666,7 +3718,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "cfg-if", "cfg_aliases", "libc", @@ -3727,7 +3779,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -3761,7 +3813,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -3777,7 +3829,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.6.2", "objc2 0.6.4", "objc2-core-foundation", @@ -3791,7 +3843,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -3815,7 +3867,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3827,7 +3879,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "dispatch2", "objc2 0.6.4", ] @@ -3838,7 +3890,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "dispatch2", "objc2 0.6.4", "objc2-core-foundation", @@ -3881,7 +3933,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.5.1", "dispatch", "libc", @@ -3894,7 +3946,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.6.2", "objc2 0.6.4", "objc2-core-foundation", @@ -3906,7 +3958,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "objc2 0.6.4", "objc2-core-foundation", ] @@ -3929,7 +3981,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3941,7 +3993,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3964,7 +4016,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit", @@ -3985,7 +4037,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "objc2 0.6.4", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -4008,7 +4060,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -4060,7 +4112,7 @@ version = "0.10.80" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a45fa2aa886c42762255da344f0a0d313e254066c46aad76f300c3d3da62d967" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "cfg-if", "foreign-types 0.3.2", "libc", @@ -4076,7 +4128,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -4281,7 +4333,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote", - "syn", + "syn 2.0.117", "unicase", ] @@ -4295,7 +4347,7 @@ dependencies = [ "phf_shared 0.13.1", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -4343,7 +4395,7 @@ checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -4440,7 +4492,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "crc32fast", "fdeflate", "flate2", @@ -4538,7 +4590,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn", + "syn 2.0.117", ] [[package]] @@ -4606,7 +4658,7 @@ checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" dependencies = [ "bit-set 0.8.0", "bit-vec 0.8.0", - "bitflags 2.11.1", + "bitflags 2.13.2", "num-traits", "rand 0.9.4", "rand_chacha 0.9.0", @@ -4633,7 +4685,7 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "memchr", "unicase", ] @@ -4812,12 +4864,13 @@ dependencies = [ [[package]] name = "read-fonts" -version = "0.37.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b634fabf032fab15307ffd272149b622260f55974d9fad689292a5d33df02e5" +checksum = "046a7d674daf459825b32f5062056d6882db0d2f5a479fbd76ccfc870ac18709" dependencies = [ "bytemuck", "font-types", + "once_cell", ] [[package]] @@ -4835,7 +4888,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", ] [[package]] @@ -4844,7 +4897,7 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4666a1a60d8412eab19d94f6d13dcc9cea0a5ef4fdf6a5db306537413c661b1b" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", ] [[package]] @@ -5001,11 +5054,11 @@ dependencies = [ [[package]] name = "ron" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4147b952f3f819eca0e99527022f7d6a8d05f111aeb0a62960c74eb283bec8fc" +checksum = "81116b9531d61eabc41aeb228e4b6b2435bcca3233b98cf3b3077d4e6e9debb3" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "once_cell", "serde", "serde_derive", @@ -5055,7 +5108,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "errno", "libc", "linux-raw-sys 0.4.15", @@ -5068,7 +5121,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "errno", "libc", "linux-raw-sys 0.12.1", @@ -5191,7 +5244,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -5210,9 +5263,9 @@ dependencies = [ [[package]] name = "self_cell" -version = "1.2.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b12e76d157a900eb52e81bc6e9f3069344290341720e9178cde2407113ac8d89" +checksum = "2ab42ca02749e120097e328d91d415325bdf43b1c72c4c8badf37375fe40a813" [[package]] name = "semver" @@ -5261,7 +5314,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -5285,7 +5338,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -5337,7 +5390,7 @@ version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4d91116f97173694f1642263b2ff837f80d933aa837e2314969f6728f661df3" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "cfg-if", "core-foundation 0.10.1", "core-foundation-sys", @@ -5448,9 +5501,9 @@ checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" [[package]] name = "skrifa" -version = "0.40.0" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbdfe3d2475fbd7ddd1f3e5cf8288a30eb3e5f95832829570cd88115a7434ac" +checksum = "819ab7d62b1d3e72d9d9dea5650bac30424f9111364bb94928dbf5ecad1baa68" dependencies = [ "bytemuck", "read-fonts", @@ -5486,7 +5539,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "calloop 0.13.0", "calloop-wayland-source 0.3.0", "cursor-icon", @@ -5511,7 +5564,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "calloop 0.14.4", "calloop-wayland-source 0.4.1", "cursor-icon", @@ -5694,6 +5747,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "sync_wrapper" version = "1.0.2" @@ -5711,7 +5775,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -5720,7 +5784,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -5741,7 +5805,7 @@ version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc4592f674ce18521c2a81483873a49596655b179f71c5e05d10c1fe66c78745" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "cap-fs-ext", "cap-std", "fd-lock", @@ -5836,7 +5900,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -5847,7 +5911,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -5944,7 +6008,7 @@ checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -6107,7 +6171,7 @@ version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "bytes", "futures-util", "http", @@ -6151,7 +6215,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -6171,7 +6235,7 @@ checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -6263,6 +6327,12 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" +[[package]] +name = "unicode-general-category" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b993bddc193ae5bd0d623b49ec06ac3e9312875fdae725a975c51db1cc1677f" + [[package]] name = "unicode-ident" version = "1.0.24" @@ -6364,27 +6434,28 @@ checksum = "eab68b56840f69efb0fefbe3ab6661499217ffdc58e2eef7c3f6f69835386322" [[package]] name = "vello_common" -version = "0.0.6" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bd1a4c633ce09e7d713df1a6e036644a125e15e0c169cfb5180ddf5836ca04b" +checksum = "b2e9aed918117e8152c9eddfd8362d73c465c23f26c44786aa331707b8a64fa2" dependencies = [ "bytemuck", "fearless_simd", - "hashbrown 0.16.1", + "guillotiere", "log", "peniko", - "skrifa", "smallvec", + "thiserror 2.0.18", ] [[package]] name = "vello_cpu" -version = "0.0.6" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0162bfe48aabf6a9fdcd401b628c7d9f260c2cbabb343c70a65feba6f7849edc" +checksum = "ac7349e1f55f6b801c7c277958df4ea53e7f20f21e8014910ad888b2ecda93ea" dependencies = [ "bytemuck", - "hashbrown 0.16.1", + "glifo", + "hashbrown 0.17.1", "vello_common", ] @@ -6459,9 +6530,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409" dependencies = [ "cfg-if", "once_cell", @@ -6472,19 +6543,20 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.71" +version = "0.4.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +checksum = "3cbab34de2d982e9b48e18d216d04c4a6f641066ff19ffb699980f591ee3610e" dependencies = [ "js-sys", + "tokio", "wasm-bindgen", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6492,22 +6564,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6" dependencies = [ "unicode-ident", ] @@ -6582,7 +6654,7 @@ version = "0.229.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc3b1f053f5d41aa55640a1fa9b6d1b8a9e4418d118ce308d20e24ff3575a8c" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "hashbrown 0.15.5", "indexmap", "semver", @@ -6595,7 +6667,7 @@ version = "0.230.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "808198a69b5a0535583370a51d459baa14261dfab04800c4864ee9e1a14346ed" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "hashbrown 0.15.5", "indexmap", "semver", @@ -6607,7 +6679,7 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "hashbrown 0.15.5", "indexmap", "semver", @@ -6619,7 +6691,7 @@ version = "0.250.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071d99cdfb8111603ed05500506c3298a940b58d609dd0259d3981785dd33556" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "indexmap", "semver", ] @@ -6644,7 +6716,7 @@ dependencies = [ "addr2line", "anyhow", "async-trait", - "bitflags 2.11.1", + "bitflags 2.13.2", "bumpalo", "cc", "cfg-if", @@ -6730,7 +6802,7 @@ dependencies = [ "anyhow", "proc-macro2", "quote", - "syn", + "syn 2.0.117", "wasmtime-component-util", "wasmtime-wit-bindgen", "wit-parser 0.229.0", @@ -6857,7 +6929,7 @@ checksum = "d0963c1438357a3d8c0efe152b4ef5259846c1cf8b864340270744fe5b3bae5e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -6868,7 +6940,7 @@ checksum = "4ae951b72c7c6749a1c15dcdfb6d940a2614c932b4a54f474636e78e2c744b4c" dependencies = [ "anyhow", "async-trait", - "bitflags 2.11.1", + "bitflags 2.13.2", "bytes", "cap-fs-ext", "cap-net-ext", @@ -6984,7 +7056,7 @@ version = "0.31.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "rustix 1.1.4", "wayland-backend", "wayland-scanner", @@ -6996,7 +7068,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "cursor-icon", "wayland-backend", ] @@ -7018,7 +7090,7 @@ version = "0.32.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "563a85523cade2429938e790815fd7319062103b9f4a2dc806e9b53b95982d8f" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "wayland-backend", "wayland-client", "wayland-scanner", @@ -7030,7 +7102,7 @@ version = "20250721.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7043,7 +7115,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e9567599ef23e09b8dad6e429e5738d4509dfc46b3b21f32841a304d16b29c8" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7056,7 +7128,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7069,7 +7141,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7101,9 +7173,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.98" +version = "0.3.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +checksum = "88261b9deccee56594c11a3460c462c41f58d148598fe70ad77070126a68aba4" dependencies = [ "js-sys", "wasm-bindgen", @@ -7119,22 +7191,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webbrowser" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc95580916af1e68ff6a7be07446fc5db73ebf71cf092de939bbf5f7e189f72" -dependencies = [ - "core-foundation 0.10.1", - "jni", - "log", - "ndk-context", - "objc2 0.6.4", - "objc2-foundation 0.3.2", - "url", - "web-sys", -] - [[package]] name = "weezl" version = "0.1.12" @@ -7143,17 +7199,17 @@ checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" [[package]] name = "wgpu" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb3feacc458f7bee8bc1737149b42b6c731aa461039a4264a67bb6681646b250" +checksum = "527ccdf43dd5b2e8676eed9984ce00e2bbb0a1b85b70c1969dcb6cd2eb55ab9e" dependencies = [ "arrayvec", - "bitflags 2.11.1", + "bitflags 2.13.2", "bytemuck", "cfg-if", "cfg_aliases", "document-features", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "js-sys", "log", "portable-atomic", @@ -7171,21 +7227,22 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02da3ad1b568337f25513b317870960ef87073ea0945502e44b864b67a8c77b7" +checksum = "14c018fce9b6270aa203c2fdd56f3cce996713534bd757e4ea58c8560b121f14" dependencies = [ "arrayvec", - "bit-set 0.9.1", + "bit-set 0.10.0", "bit-vec 0.9.1", - "bitflags 2.11.1", + "bitflags 2.13.2", "bytemuck", "cfg_aliases", "document-features", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "indexmap", "log", "naga", + "naga-types", "once_cell", "parking_lot", "portable-atomic", @@ -7202,29 +7259,32 @@ dependencies = [ [[package]] name = "wgpu-core-deps-windows-linux-android" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb01076d0aa08b0ba9bd741e178b5cc440f5abe99d9581323a4c8b5d1a1916" +checksum = "7586165fd5f6d881cb9ce4bb71f40d6caab2c0f1837e3fc1d9788a197fb6004f" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-hal" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8e1a9e7a8512f276f7c62e018c7fa8d60954303fed2e5750114332049193f" +checksum = "b6b7fb58561a792bc237628ba0792e332de418fefe145f13b5ed8201e6d52f58" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "cfg-if", "cfg_aliases", + "hashbrown 0.17.1", "libloading", "log", "naga", + "naga-types", "portable-atomic", "portable-atomic-util", "raw-window-handle", "renderdoc-sys", + "static_assertions", "thiserror 2.0.18", "wgpu-naga-bridge", "wgpu-types", @@ -7232,9 +7292,9 @@ dependencies = [ [[package]] name = "wgpu-naga-bridge" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c654c483f058800972c3645e95388a7eca31bf9fe1933bc20e036588a0be02" +checksum = "d2f62e73117bb7a62bfd9c5a5841438a823f6566c6442a808ee269d2d055c081" dependencies = [ "naga", "wgpu-types", @@ -7242,15 +7302,17 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9bcc31518a0e9735aefebedb5f7a9ef3ed1c42549c9f4c882fa9060ceaac639" +checksum = "99dad6f1fbdbbdb4c278a6508b059d44688f5cebddf78d005a46a31340269286" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "bytemuck", "js-sys", "log", + "naga-types", "raw-window-handle", + "static_assertions", "web-sys", ] @@ -7271,7 +7333,7 @@ checksum = "649c1aca13ef9e9dccf2d5efbbebf12025bc5521c3fb7754355ef60f5eb810be" dependencies = [ "anyhow", "async-trait", - "bitflags 2.11.1", + "bitflags 2.13.2", "thiserror 2.0.18", "tracing", "wasmtime", @@ -7288,7 +7350,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.117", "witx", ] @@ -7300,7 +7362,7 @@ checksum = "d873bb5b59ca703b5e41562e96a4796d1af61bf4cf80bf8a7abda755a380ec1c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", "wiggle-generate", ] @@ -7407,7 +7469,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -7418,7 +7480,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -7649,7 +7711,7 @@ dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.5.1", "bytemuck", "calloop 0.13.0", @@ -7716,7 +7778,7 @@ version = "0.36.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f3fd376f71958b862e7afb20cfe5a22830e1963462f3a17f49d82a6c1d1f42d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "windows-sys 0.59.0", ] @@ -7773,7 +7835,7 @@ version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "051105bab12bc78e161f8dfb3596e772dd6a01ebf9c4840988e00347e744966a" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "futures", "once_cell", ] @@ -7788,7 +7850,7 @@ dependencies = [ "heck", "indexmap", "prettyplease", - "syn", + "syn 2.0.117", "wasm-metadata 0.230.0", "wit-bindgen-core 0.42.1", "wit-component 0.230.0", @@ -7804,7 +7866,7 @@ dependencies = [ "heck", "indexmap", "prettyplease", - "syn", + "syn 2.0.117", "wasm-metadata 0.244.0", "wit-bindgen-core 0.51.0", "wit-component 0.244.0", @@ -7820,7 +7882,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn", + "syn 2.0.117", "wit-bindgen-core 0.42.1", "wit-bindgen-rust 0.42.1", ] @@ -7835,7 +7897,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn", + "syn 2.0.117", "wit-bindgen-core 0.51.0", "wit-bindgen-rust 0.51.0", ] @@ -7847,7 +7909,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b607b15ead6d0e87f5d1613b4f18c04d4e80ceeada5ffa608d8360e6909881df" dependencies = [ "anyhow", - "bitflags 2.11.1", + "bitflags 2.13.2", "indexmap", "log", "serde", @@ -7866,7 +7928,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.11.1", + "bitflags 2.13.2", "indexmap", "log", "serde", @@ -8004,7 +8066,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "dlib", "log", "once_cell", @@ -8048,7 +8110,7 @@ checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", "synstructure", ] @@ -8105,7 +8167,7 @@ checksum = "10da05367f3a7b7553c8cdf8fa91aee6b64afebe32b51c95177957efc47ca3a0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", "zbus-lockstep", "zbus_xml", "zvariant", @@ -8120,7 +8182,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 2.0.117", "zbus_names", "zvariant", "zvariant_utils", @@ -8166,7 +8228,7 @@ checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -8186,7 +8248,7 @@ checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", "synstructure", ] @@ -8226,7 +8288,7 @@ checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -8301,7 +8363,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 2.0.117", "zvariant_utils", ] @@ -8314,6 +8376,6 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn", + "syn 2.0.117", "winnow 1.0.3", ] diff --git a/Cargo.toml b/Cargo.toml index b48b9fc37d..4758bfac80 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -122,19 +122,19 @@ wit-bindgen = "0.42" clap = { version = "4.5", features = ["derive"] } walkdir = "2.5" -egui = "0.34" -eframe = { version = "0.34", default-features = false } +egui = "0.36" +eframe = { version = "0.36", default-features = false } rfd = "0.17" -egui_extras = { version = "0.34", default-features = false } +egui_extras = { version = "0.36", default-features = false } image = { version = "0.25", default-features = false } -egui_table = "0.8" -egui_plot = "0.35" +egui_table = "0.10" +egui_plot = "0.37" # We don't have direct dependency to winit but we need to specify it here to activate # its default features which won't be activated otherwise without activating egui default # features. winit = { version = "0.30" } -egui-phosphor = "0.12" -egui_commonmark = "0.23" +egui-phosphor = "0.14" +egui_commonmark = "0.25" ## Development Dependencies ## # Support for `html_reports` needs running the benchmarks via `cargo-criterion` tool. @@ -146,11 +146,6 @@ trybuild = "1.0" [patch.crates-io] # Dependencies patches before they are released can be defined here. -# These batches are used until PR is included in egui main stream `https://github.com/emilk/egui/pull/8033` -eframe = { git = "https://github.com/AmmarAbouZor/egui", rev = "a9f3a3e4ce95e014d46bae8ab49021b3e77213c8" } -egui = { git = "https://github.com/AmmarAbouZor/egui", rev = "a9f3a3e4ce95e014d46bae8ab49021b3e77213c8" } -egui_extras = { git = "https://github.com/AmmarAbouZor/egui", rev = "a9f3a3e4ce95e014d46bae8ab49021b3e77213c8" } -emath = { git = "https://github.com/AmmarAbouZor/egui", rev = "a9f3a3e4ce95e014d46bae8ab49021b3e77213c8" } [workspace.lints.clippy] undocumented_unsafe_blocks = "deny" diff --git a/crates/app/src/common/ui/tab_strip.rs b/crates/app/src/common/ui/tab_strip.rs index 8fd0f48e11..e6e640d928 100644 --- a/crates/app/src/common/ui/tab_strip.rs +++ b/crates/app/src/common/ui/tab_strip.rs @@ -266,10 +266,8 @@ impl TabStrip { if max_scroll_offset > 0.0 { let current_scroll_offset = output.state.offset.x.clamp(0.0, max_scroll_offset); - let clip_rect_margin = ui.visuals().clip_rect_margin; - let left_rect = self.scroll_button_rect(control_rect, output.inner_rect, true, 0.0); - let right_rect = - self.scroll_button_rect(control_rect, output.inner_rect, false, clip_rect_margin); + let left_rect = self.scroll_button_rect(control_rect, output.inner_rect, true); + let right_rect = self.scroll_button_rect(control_rect, output.inner_rect, false); let mut requested_scroll_delta = 0.0; if self.can_scroll_left(current_scroll_offset) @@ -339,14 +337,11 @@ impl TabStrip { control_rect: Rect, viewport_rect: Rect, fade_from_left: bool, - clip_rect_margin: f32, ) -> Rect { let button_min_x = if fade_from_left { viewport_rect.min.x } else { - // ScrollArea clips content with `clip_rect_margin`, so the rightmost tab can - // still paint slightly past the logical viewport edge. - control_rect.max.x - SCROLL_BUTTON_WIDTH + clip_rect_margin + control_rect.max.x - SCROLL_BUTTON_WIDTH }; Rect::from_min_size( @@ -660,17 +655,6 @@ mod tests { ); } - #[test] - fn right_button_rect_uses_clip_margin() { - let control_rect = Rect::from_min_max(pos2(0.0, 0.0), pos2(120.0, 30.0)); - let viewport_rect = Rect::from_min_max(pos2(0.0, 4.0), pos2(90.0, 30.0)); - - assert_eq!( - test_strip().scroll_button_rect(control_rect, viewport_rect, false, 3.0), - Rect::from_min_max(pos2(103.0, 0.0), pos2(123.0, 30.0)) - ); - } - #[test] fn split_tab_rects_reserves_close_slot() { let tab_rect = Rect::from_min_max(pos2(0.0, 0.0), pos2(180.0, 26.0)); diff --git a/crates/app/src/common/ui/visibility_tracker.rs b/crates/app/src/common/ui/visibility_tracker.rs index 6cff3cc264..96edc926c0 100644 --- a/crates/app/src/common/ui/visibility_tracker.rs +++ b/crates/app/src/common/ui/visibility_tracker.rs @@ -50,9 +50,10 @@ mod tests { let mut tracker = VisibilityTracker::default(); let ctx = egui::Context::default(); - let _ = ctx.run_ui(Default::default(), |ui| { + ctx.run_ui(Default::default(), |ui| { assert!(tracker.is_newly_visible(ui)); - }); + }) + .drop_without_applying_deltas(); } #[test] @@ -60,12 +61,14 @@ mod tests { let mut tracker = VisibilityTracker::default(); let ctx = egui::Context::default(); - let _ = ctx.run_ui(Default::default(), |ui| { + ctx.run_ui(Default::default(), |ui| { assert!(tracker.is_newly_visible(ui)); - }); - let _ = ctx.run_ui(Default::default(), |ui| { + }) + .drop_without_applying_deltas(); + ctx.run_ui(Default::default(), |ui| { assert!(!tracker.is_newly_visible(ui)); - }); + }) + .drop_without_applying_deltas(); } #[test] @@ -73,12 +76,15 @@ mod tests { let mut tracker = VisibilityTracker::default(); let ctx = egui::Context::default(); - let _ = ctx.run_ui(Default::default(), |ui| { + ctx.run_ui(Default::default(), |ui| { assert!(tracker.is_newly_visible(ui)); - }); - let _ = ctx.run_ui(Default::default(), |_| {}); - let _ = ctx.run_ui(Default::default(), |ui| { + }) + .drop_without_applying_deltas(); + ctx.run_ui(Default::default(), |_| {}) + .drop_without_applying_deltas(); + ctx.run_ui(Default::default(), |ui| { assert!(tracker.is_newly_visible(ui)); - }); + }) + .drop_without_applying_deltas(); } } diff --git a/crates/app/src/host/common/app_style.rs b/crates/app/src/host/common/app_style.rs index e32b9bd384..0127707ea8 100644 --- a/crates/app/src/host/common/app_style.rs +++ b/crates/app/src/host/common/app_style.rs @@ -23,13 +23,6 @@ pub fn global_styles(style: &mut Style) { } apply_global_color_styles(&mut style.visuals); - - //NOTE: Workaround until issue with egui_table is fixed. - // Issue Link: https://github.com/rerun-io/egui_table/issues/56 - #[cfg(debug_assertions)] - { - style.debug.warn_if_rect_changes_id = false; - } } fn apply_global_color_styles(visuals: &mut Visuals) { diff --git a/crates/app/src/host/common/ui_utls.rs b/crates/app/src/host/common/ui_utls.rs index 3c8e99a63e..c7b0188b5b 100644 --- a/crates/app/src/host/common/ui_utls.rs +++ b/crates/app/src/host/common/ui_utls.rs @@ -141,29 +141,15 @@ pub fn truncate_path_to_width( TruncatedPath { text, truncated } } -/// Build a single-line [`TextEdit`] that approximates the provided outer size. -/// -/// # Note: -/// -/// This function is a workaround for the regression egui 0.34 regarding -/// `TextEdit::min_size().y` not being respected anymore. +/// Build a single-line [`TextEdit`] with the provided outer size and vertically centered text. pub fn sized_singleline_text_edit<'t>( - ui: &mut Ui, text: &'t mut dyn TextBuffer, size: Vec2, horizontal_margin: i8, ) -> TextEdit<'t> { - let font_id = TextStyle::Body.resolve(ui.style()); - let row_height = ui.fonts_mut(|fonts| fonts.row_height(&font_id)); - let vertical_margin = ((size.y - row_height) / 2.0) - .round() - .clamp(0.0, i8::MAX as f32) as i8; - - // egui 0.34 no longer applies `TextEdit::min_size().y`, so use the inner margin to reach the - // requested row height instead. - // TODO: Keep track on issue: https://github.com/emilk/egui/issues/8071 TextEdit::singleline(text) .desired_width(size.x) - .margin(Margin::symmetric(horizontal_margin, vertical_margin)) + .min_size(size) + .margin(Margin::symmetric(horizontal_margin, 2)) .vertical_align(Align::Center) } diff --git a/crates/app/src/host/ui/app_settings/mod.rs b/crates/app/src/host/ui/app_settings/mod.rs index b27088e7c6..2b676da585 100644 --- a/crates/app/src/host/ui/app_settings/mod.rs +++ b/crates/app/src/host/ui/app_settings/mod.rs @@ -51,13 +51,13 @@ impl AppSettingsView { Panel::top("app_settings_header") .exact_size(40.0) - .show_inside(ui, |ui| { + .show(ui, |ui| { ui.with_layout(Layout::left_to_right(Align::Center), |ui| { ui.heading("App Settings"); }); }); - CentralPanel::default().show_inside(ui, |ui| { + CentralPanel::default().show(ui, |ui| { const ACTIONS_HEIGHT: f32 = 40.0; let content_width = ui.available_width().min(CONTENT_MAX_WIDTH); diff --git a/crates/app/src/host/ui/command_palette/mod.rs b/crates/app/src/host/ui/command_palette/mod.rs index 8a20a75e76..344eb9931e 100644 --- a/crates/app/src/host/ui/command_palette/mod.rs +++ b/crates/app/src/host/ui/command_palette/mod.rs @@ -162,7 +162,6 @@ impl CommandPalette { let search_id = ui.make_persistent_id("command_palette_search"); let query_response = sized_singleline_text_edit( - ui, &mut self.query, vec2(ui.available_width(), 25.0), 7, diff --git a/crates/app/src/host/ui/dnd_paths.rs b/crates/app/src/host/ui/dnd_paths.rs index 80ce83eaf5..b89137fe8a 100644 --- a/crates/app/src/host/ui/dnd_paths.rs +++ b/crates/app/src/host/ui/dnd_paths.rs @@ -26,7 +26,7 @@ fn handle_dropping_files(ui: &mut Ui, actions: &mut UiActions, cmd_tx: &Sender (Response, Option) { diff --git a/crates/app/src/host/ui/home/mod.rs b/crates/app/src/host/ui/home/mod.rs index ac64118bd6..ea7c805fe6 100644 --- a/crates/app/src/host/ui/home/mod.rs +++ b/crates/app/src/host/ui/home/mod.rs @@ -67,12 +67,12 @@ impl HomeView { .size_range(RESIZABLE_PANEL_MIN_SIZE..=RESIZABLE_PANEL_MAX_SIZE) .default_size(RESIZABLE_PANEL_DEFAULT_SIZE) .resizable(true) - .show_animated_inside(ui, preferences.panels_visibility.right, |ui| { + .show_collapsible(ui, &mut preferences.panels_visibility.right, |ui| { self.file_explorer .render_content(actions, &mut storage.file_explorer, ui); }); - CentralPanel::default().show_inside(ui, |ui| { + CentralPanel::default().show(ui, |ui| { // Layout rules: // - Wide views show the horizontal quick actions and center them with recent sessions. // - Smaller views switch to the narrow quick-actions rail, but the pair stays centered diff --git a/crates/app/src/host/ui/home/recent.rs b/crates/app/src/host/ui/home/recent.rs index 92d6f76acc..93ae53bdeb 100644 --- a/crates/app/src/host/ui/home/recent.rs +++ b/crates/app/src/host/ui/home/recent.rs @@ -95,7 +95,7 @@ impl RecentSessionsUi { let focus_filter = self.visibility_tracker.is_newly_visible(ui); let query_response = - sized_singleline_text_edit(ui, &mut self.query, vec2(ui.available_width(), 27.0), 7) + sized_singleline_text_edit(&mut self.query, vec2(ui.available_width(), 27.0), 7) .hint_text("Filter recent sessions") .ui(ui); if focus_filter { diff --git a/crates/app/src/host/ui/mod.rs b/crates/app/src/host/ui/mod.rs index 3798f908c6..3bcbead7f2 100644 --- a/crates/app/src/host/ui/mod.rs +++ b/crates/app/src/host/ui/mod.rs @@ -297,7 +297,7 @@ impl Host { Panel::top("menu_bar") .frame(Frame::side_top_panel(ui.style())) - .show_inside(ui, |ui| { + .show(ui, |ui| { self.render_menu(ui); }); @@ -308,7 +308,7 @@ impl Host { .fill(colors::main_accent_background(ui.visuals().dark_mode)), ) .show_separator_line(false) - .show_inside(ui, |ui| { + .show(ui, |ui| { self.render_tabs(ui); }); @@ -326,7 +326,7 @@ impl Host { CentralPanel::default() .frame(Frame::central_panel(ui.style()).inner_margin(0)) - .show_inside(ui, |ui| { + .show(ui, |ui| { self.render_main(ui); if self.state.app_info.show_update_banner { diff --git a/crates/app/src/host/ui/multi_setup/main_table/mod.rs b/crates/app/src/host/ui/multi_setup/main_table/mod.rs index 29a7bf803c..24ae3daac1 100644 --- a/crates/app/src/host/ui/multi_setup/main_table/mod.rs +++ b/crates/app/src/host/ui/multi_setup/main_table/mod.rs @@ -4,7 +4,7 @@ use std::path::Path; use egui::{ Align, Align2, Color32, Context, CursorIcon, Label, LayerId, Layout, Order, Rect, Response, - RichText, ScrollArea, Sense, Stroke, TextStyle, Ui, Widget, pos2, vec2, + RichText, ScrollArea, Sense, Stroke, TextStyle, Ui, Widget, pos2, scroll_area, vec2, }; use egui_extras::{Column, TableBuilder}; use enum_iterator::all; @@ -79,7 +79,7 @@ impl MainTable { let table = TableBuilder::new(ui) .id_salt(state.id()) .auto_shrink(true) - .drag_to_scroll(false) + .drag_to_scroll(scroll_area::DragScroll::Never) .striped(false) .resizable(false) .cell_layout(Layout::left_to_right(Align::Center)) diff --git a/crates/app/src/host/ui/multi_setup/mod.rs b/crates/app/src/host/ui/multi_setup/mod.rs index d0b3b8f829..cbe787d215 100644 --- a/crates/app/src/host/ui/multi_setup/mod.rs +++ b/crates/app/src/host/ui/multi_setup/mod.rs @@ -53,26 +53,24 @@ impl MultiFileSetup { preferences: &mut HostPreferences, ui: &mut Ui, ) { - Panel::top("actions panel") - .exact_size(40.) - .show_inside(ui, |ui| { - ui.with_layout(Layout::right_to_left(Align::Center), |ui| { - self.top_panel(actions, ui); - }); + Panel::top("actions panel").exact_size(40.).show(ui, |ui| { + ui.with_layout(Layout::right_to_left(Align::Center), |ui| { + self.top_panel(actions, ui); }); + }); Panel::right("side info") .frame(Frame::central_panel(ui.style())) .size_range(RESIZABLE_PANEL_MIN_SIZE..=RESIZABLE_PANEL_MAX_SIZE) .default_size(RESIZABLE_PANEL_DEFAULT_SIZE) .resizable(true) - .show_animated_inside(ui, preferences.panels_visibility.right, |ui| { + .show_collapsible(ui, &mut preferences.panels_visibility.right, |ui| { ui.with_layout(Layout::top_down_justified(Align::LEFT), |ui| { self.side_panel.render_content(ui, &mut self.state); }); }); - CentralPanel::default().show_inside(ui, |ui| { + CentralPanel::default().show(ui, |ui| { self.main_table.render_content(ui, &mut self.state); }); } diff --git a/crates/app/src/host/ui/plugin_manager/mod.rs b/crates/app/src/host/ui/plugin_manager/mod.rs index e5d49f09c5..6b9c752b52 100644 --- a/crates/app/src/host/ui/plugin_manager/mod.rs +++ b/crates/app/src/host/ui/plugin_manager/mod.rs @@ -146,7 +146,7 @@ impl PluginManagerView { Panel::top("plugin_manager_header") .exact_size(40.0) - .show_inside(ui, |ui| { + .show(ui, |ui| { ui.with_layout(Layout::right_to_left(Align::Center), |ui| { if ui.add(buttons::session_setup("Reload", None)).clicked() { actions.try_send_command(&self.cmd_tx, HostCommand::ReloadPlugins); @@ -170,11 +170,11 @@ impl PluginManagerView { .size_range(RESIZABLE_PANEL_MIN_SIZE..=RESIZABLE_PANEL_MAX_SIZE) .default_size(RESIZABLE_PANEL_DEFAULT_SIZE) .resizable(true) - .show_animated_inside(ui, preferences.panels_visibility.right, |ui| { + .show_collapsible(ui, &mut preferences.panels_visibility.right, |ui| { list::render_sidebar(self, data, modals, ui); }); - CentralPanel::default().show_inside(ui, |ui| { + CentralPanel::default().show(ui, |ui| { self.render_selected_details(data, actions, ui); }); } diff --git a/crates/app/src/host/ui/quick_open/mod.rs b/crates/app/src/host/ui/quick_open/mod.rs index f5665da6e9..52943772c0 100644 --- a/crates/app/src/host/ui/quick_open/mod.rs +++ b/crates/app/src/host/ui/quick_open/mod.rs @@ -170,7 +170,6 @@ impl QuickOpen { let search_id = ui.make_persistent_id("quick_open_search"); let query_response = sized_singleline_text_edit( - ui, &mut self.query, vec2(ui.available_width(), 25.0), 7, diff --git a/crates/app/src/host/ui/session_setup/main_config/process.rs b/crates/app/src/host/ui/session_setup/main_config/process.rs index 02e6be5fb7..26d975f072 100644 --- a/crates/app/src/host/ui/session_setup/main_config/process.rs +++ b/crates/app/src/host/ui/session_setup/main_config/process.rs @@ -95,15 +95,11 @@ pub fn command_and_shell( } }); - let text_res = sized_singleline_text_edit( - ui, - &mut config.command, - vec2(ui.available_width(), height), - 4, - ) - .hint_text("Terminal command") - .show(ui) - .response; + let text_res = + sized_singleline_text_edit(&mut config.command, vec2(ui.available_width(), height), 4) + .hint_text("Terminal command") + .show(ui) + .response; if input_visibility.is_newly_visible(ui) { text_res.request_focus(); diff --git a/crates/app/src/host/ui/session_setup/main_config/serial.rs b/crates/app/src/host/ui/session_setup/main_config/serial.rs index 4a1b4916f6..edca655ae0 100644 --- a/crates/app/src/host/ui/session_setup/main_config/serial.rs +++ b/crates/app/src/host/ui/session_setup/main_config/serial.rs @@ -189,7 +189,7 @@ fn render_port_path( }); let path_res = - sized_singleline_text_edit(ui, &mut config.path, vec2(ui.available_width(), height), 4) + sized_singleline_text_edit(&mut config.path, vec2(ui.available_width(), height), 4) .hint_text("Port path") .show(ui) .response; diff --git a/crates/app/src/host/ui/session_setup/mod.rs b/crates/app/src/host/ui/session_setup/mod.rs index 2bbc61f8eb..81b3447ed5 100644 --- a/crates/app/src/host/ui/session_setup/mod.rs +++ b/crates/app/src/host/ui/session_setup/mod.rs @@ -78,7 +78,7 @@ impl SessionSetup { ) { Panel::top("selection_panel") .exact_size(40.) - .show_inside(ui, |ui| { + .show(ui, |ui| { ui.with_layout(Layout::right_to_left(Align::Center), |ui| { self.top_bar(actions, ui); }); @@ -88,12 +88,12 @@ impl SessionSetup { .size_range(RESIZABLE_PANEL_MIN_SIZE..=RESIZABLE_PANEL_MAX_SIZE) .default_size(RESIZABLE_PANEL_DEFAULT_SIZE) .resizable(true) - .show_inside(ui, |ui| { + .show(ui, |ui| { ui.take_available_width(); side_config::render_content(&mut self.state, actions, plugins, ui); }); - CentralPanel::default().show_inside(ui, |ui| { + CentralPanel::default().show(ui, |ui| { ui.centered_and_justified(|ui| { let outcome = self.render_main_config(recent_sessions, plugins, actions, ui); match outcome { diff --git a/crates/app/src/session/ui/bottom_panel/chart/data.rs b/crates/app/src/session/ui/bottom_panel/chart/data.rs index 98f2da2969..efd559ad92 100644 --- a/crates/app/src/session/ui/bottom_panel/chart/data.rs +++ b/crates/app/src/session/ui/bottom_panel/chart/data.rs @@ -1,4 +1,4 @@ -use egui::{Color32, ahash::HashMapExt as _}; +use egui::Color32; use rustc_hash::FxHashMap; use crate::{ @@ -64,7 +64,7 @@ impl ChartsData { self.bars.clear(); for bucket in raw_bars { - let mut counts = FxHashMap::with_capacity(bucket.len()); + let mut counts = FxHashMap::with_capacity_and_hasher(bucket.len(), Default::default()); for bar in bucket { counts.insert(bar.filter_idx, bar.matches_count); diff --git a/crates/app/src/session/ui/bottom_panel/chart/mod.rs b/crates/app/src/session/ui/bottom_panel/chart/mod.rs index 3febdefbd2..20611ffce0 100644 --- a/crates/app/src/session/ui/bottom_panel/chart/mod.rs +++ b/crates/app/src/session/ui/bottom_panel/chart/mod.rs @@ -1,7 +1,7 @@ use std::{ops::RangeInclusive, time::Duration}; use egui::{Direction, Frame, Label, Layout, Margin, Spinner, Ui, Vec2, Widget}; -use egui_plot::{Bar, BarChart, Legend, Line, Plot, PlotBounds}; +use egui_plot::{Bar, BarChart, HoverPosition, Legend, Line, Plot, PlotBounds}; use tokio::sync::mpsc::Sender; use crate::{ @@ -192,15 +192,24 @@ impl ChartUI { .allow_double_click_reset(false) // We are handling reset manually. .show_y(false) .set_margin_fraction(Vec2::splat(CHART_OFFSET as f32)) - .label_formatter(|name, point| { + .label_formatter(|hover| { // Show log number on hover only unless user hovers over // a line chart then show the name of it too. - let log_nr = convert_bounded(point.x.round()); - if name.is_empty() { + let (name, position) = match hover { + HoverPosition::NearDataPoint { + plot_name, + position, + index: _, + } => (*plot_name, position), + HoverPosition::Elsewhere { position } => ("", position), + }; + let log_nr = convert_bounded(position.x.round()); + let label = if name.is_empty() { log_nr.to_string() } else { format!("{name}\n{log_nr}") - } + }; + Some(label) }) .y_axis_formatter(|mark, _rng| { // Show positive numbers only and don't break alignment when when diff --git a/crates/app/src/session/ui/bottom_panel/presets/mod.rs b/crates/app/src/session/ui/bottom_panel/presets/mod.rs index f2a1647130..9d5d88dcdb 100644 --- a/crates/app/src/session/ui/bottom_panel/presets/mod.rs +++ b/crates/app/src/session/ui/bottom_panel/presets/mod.rs @@ -180,7 +180,6 @@ impl PresetsUI { ui.with_layout(Layout::left_to_right(Align::Center), |ui| { let focus_query = self.query_visibility.is_newly_visible(ui); let query_response = sized_singleline_text_edit( - ui, &mut self.query_state.query, ui.available_size(), 7, diff --git a/crates/app/src/session/ui/bottom_panel/search/mod.rs b/crates/app/src/session/ui/bottom_panel/search/mod.rs index d5eb58285c..8f826bddd6 100644 --- a/crates/app/src/session/ui/bottom_panel/search/mod.rs +++ b/crates/app/src/session/ui/bottom_panel/search/mod.rs @@ -181,9 +181,10 @@ mod tests { registry: &mut FilterRegistry, ctx: &Context, ) { - let _ = ctx.run_ui(RawInput::default(), |ui| { + ctx.run_ui(RawInput::default(), |ui| { search.render_content(shared, actions, registry, ui); - }); + }) + .drop_without_applying_deltas(); } #[test] @@ -199,7 +200,8 @@ mod tests { let ctx = Context::default(); render(&mut search, &mut shared, &mut actions, &mut registry, &ctx); - let _ = ctx.run_ui(RawInput::default(), |_| {}); + ctx.run_ui(RawInput::default(), |_| {}) + .drop_without_applying_deltas(); shared.search.nested_mut().open(); shared.view.active_log_table = super::LogTableKind::Search; @@ -222,7 +224,8 @@ mod tests { let ctx = Context::default(); render(&mut search, &mut shared, &mut actions, &mut registry, &ctx); - let _ = ctx.run_ui(RawInput::default(), |_| {}); + ctx.run_ui(RawInput::default(), |_| {}) + .drop_without_applying_deltas(); shared.search.nested_mut().open(); search.focus_nested(); search.focus_primary(); @@ -258,18 +261,20 @@ mod tests { let ctx = Context::default(); render(&mut search, &mut shared, &mut actions, &mut registry, &ctx); - let _ = ctx.run_ui(RawInput::default(), |_| {}); + ctx.run_ui(RawInput::default(), |_| {}) + .drop_without_applying_deltas(); shared.view.active_log_table = super::LogTableKind::Search; let table_focus = Id::new("active_search_table"); let mut table_editor = String::new(); - let _ = ctx.run_ui(RawInput::default(), |ui| { + ctx.run_ui(RawInput::default(), |ui| { TextEdit::singleline(&mut table_editor) .id(table_focus) .show(ui) .response .request_focus(); search.render_content(&mut shared, &mut actions, &mut registry, ui); - }); + }) + .drop_without_applying_deltas(); assert_eq!(ctx.memory(|memory| memory.focused()), Some(table_focus)); } diff --git a/crates/app/src/session/ui/bottom_panel/search/nested_search.rs b/crates/app/src/session/ui/bottom_panel/search/nested_search.rs index eb9143d792..b2578ba366 100644 --- a/crates/app/src/session/ui/bottom_panel/search/nested_search.rs +++ b/crates/app/src/session/ui/bottom_panel/search/nested_search.rs @@ -343,17 +343,20 @@ mod tests { let session_id = Uuid::new_v4(); let table_rect = Rect::from_min_size(pos2(0.0, 0.0), vec2(600.0, 300.0)); let ctx = Context::default(); - let _ = ctx.run_ui(RawInput::default(), |ui| { + ctx.run_ui(RawInput::default(), |ui| { widget.render(session_id, table_rect, &mut state, &mut actions, ui); - }); - let _ = ctx.run_ui(RawInput::default(), |ui| { + }) + .drop_without_applying_deltas(); + ctx.run_ui(RawInput::default(), |ui| { widget.render(session_id, table_rect, &mut state, &mut actions, ui); - }); + }) + .drop_without_applying_deltas(); assert!(widget.has_focus(session_id, &ctx)); - let _ = ctx.run_ui(escape_input(), |ui| { + ctx.run_ui(escape_input(), |ui| { widget.render(session_id, table_rect, &mut state, &mut actions, ui); - }); + }) + .drop_without_applying_deltas(); assert!(!state.is_open()); } @@ -370,19 +373,21 @@ mod tests { let table_rect = Rect::from_min_size(pos2(0.0, 0.0), vec2(600.0, 300.0)); let ctx = Context::default(); let mut other_query = String::new(); - let _ = ctx.run_ui(RawInput::default(), |ui| { + ctx.run_ui(RawInput::default(), |ui| { let response = TextEdit::singleline(&mut other_query) .id(Id::new("other_search_input")) .show(ui) .response; response.request_focus(); widget.render(session_id, table_rect, &mut state, &mut actions, ui); - }); + }) + .drop_without_applying_deltas(); assert!(!widget.has_focus(session_id, &ctx)); - let _ = ctx.run_ui(escape_input(), |ui| { + ctx.run_ui(escape_input(), |ui| { widget.render(session_id, table_rect, &mut state, &mut actions, ui); - }); + }) + .drop_without_applying_deltas(); assert!(state.is_open()); } @@ -408,15 +413,17 @@ mod tests { let session_id = Uuid::new_v4(); let table_rect = Rect::from_min_size(pos2(0.0, 0.0), vec2(600.0, 300.0)); let ctx = Context::default(); - let _ = ctx.run_ui(RawInput::default(), |ui| { + ctx.run_ui(RawInput::default(), |ui| { widget.render(session_id, table_rect, &mut state, &mut actions, ui); - }); + }) + .drop_without_applying_deltas(); assert!(!widget.has_focus(session_id, &ctx)); assert!(state.accept_response(request_id)); - let _ = ctx.run_ui(RawInput::default(), |ui| { + ctx.run_ui(RawInput::default(), |ui| { widget.render(session_id, table_rect, &mut state, &mut actions, ui); - }); + }) + .drop_without_applying_deltas(); assert!(widget.has_focus(session_id, &ctx)); } diff --git a/crates/app/src/session/ui/common/log_table/table.rs b/crates/app/src/session/ui/common/log_table/table.rs index 0c2c2951ed..4f7c98337e 100644 --- a/crates/app/src/session/ui/common/log_table/table.rs +++ b/crates/app/src/session/ui/common/log_table/table.rs @@ -7,8 +7,8 @@ use std::ops::{Range, RangeInclusive}; use egui::{ - Align, Button, Color32, CursorIcon, Frame, Label, Layout, Margin, Rect, Response, RichText, - Sense, Shape, Stroke, TextStyle, Ui, Widget as _, + Align, Button, Color32, CursorIcon, Frame, IdSalt, Label, Layout, Margin, Rect, Response, + RichText, Sense, Shape, Stroke, TextStyle, Ui, Widget as _, text::{LayoutJob, TextFormat}, vec2, }; @@ -159,7 +159,7 @@ pub fn create_table_columns(schema: &dyn LogSchema) -> Vec { /// /// If the table has not rendered yet, the passed columns are enough for the first frame. pub fn apply_columns_to_table_state(ui: &Ui, table_id_salt: &str, columns: &[Column]) { - let table_id = TableState::id(ui, egui::Id::new(table_id_salt)); + let table_id = TableState::id(ui, IdSalt::new(table_id_salt)); let Some(mut state) = TableState::load(ui.ctx(), table_id) else { return; }; @@ -186,7 +186,7 @@ pub fn apply_columns_to_table_state(ui: &Ui, table_id_salt: &str, columns: &[Col /// Copies persisted egui table widths back into the shared application columns. pub fn sync_column_widths(ui: &Ui, table_id_salt: &str, columns: &mut [Column]) { - let table_id = TableState::id(ui, egui::Id::new(table_id_salt)); + let table_id = TableState::id(ui, IdSalt::new(table_id_salt)); let Some(state) = TableState::load(ui.ctx(), table_id) else { return; }; @@ -209,7 +209,7 @@ pub fn columns_filling_last(ui: &Ui, table_id_salt: &str, columns: &[Column]) -> // Put the final resize handle beyond the table container edge so its // expanded interaction rect does not steal surrounding splitter drags. let fill_width = available_width + 2.0 * ui.style().interaction.resize_grab_radius_side; - let table_id = TableState::id(ui, egui::Id::new(table_id_salt)); + let table_id = TableState::id(ui, IdSalt::new(table_id_salt)); // egui_table updates TableState::parent_width on every show, even before this // adjustment is applied. Track the widths we already filled separately. let filled_width_id = table_id.with("last_column_filled_width"); diff --git a/crates/app/src/session/ui/common/log_table/text.rs b/crates/app/src/session/ui/common/log_table/text.rs index 45dadb3d40..8a35ef19de 100644 --- a/crates/app/src/session/ui/common/log_table/text.rs +++ b/crates/app/src/session/ui/common/log_table/text.rs @@ -8,7 +8,7 @@ use std::ops::Range; use egui::{ Color32, Response, TextStyle, Ui, - text::{LayoutJob, LayoutSection}, + text::{ByteIndex, LayoutJob, LayoutSection}, }; use regex::Regex; @@ -358,22 +358,24 @@ fn apply_nested_highlight(job: &mut LayoutJob, nested_spans: &[Range]) { let mut first_nested = 0; for source in source_sections { + let source_start = usize::from(source.byte_range.start); + let source_end = usize::from(source.byte_range.end); while nested_spans .get(first_nested) - .is_some_and(|span| span.end <= source.byte_range.start) + .is_some_and(|span| span.end <= source_start) { first_nested += 1; } - let mut cursor = source.byte_range.start; + let mut cursor = source_start; let mut nested_idx = first_nested; while let Some(span) = nested_spans.get(nested_idx) { - if span.start >= source.byte_range.end { + if span.start >= source_end { break; } let highlight_start = span.start.max(cursor); - let highlight_end = span.end.min(source.byte_range.end); + let highlight_end = span.end.min(source_end); if cursor < highlight_start { push_layout_section(&mut sections, &source, cursor..highlight_start, false); } @@ -384,8 +386,8 @@ fn apply_nested_highlight(job: &mut LayoutJob, nested_spans: &[Range]) { nested_idx += 1; } - if cursor < source.byte_range.end { - push_layout_section(&mut sections, &source, cursor..source.byte_range.end, false); + if cursor < source_end { + push_layout_section(&mut sections, &source, cursor..source_end, false); } } @@ -398,6 +400,7 @@ fn push_layout_section( byte_range: Range, nested: bool, ) { + let byte_range = ByteIndex::from(byte_range.start)..ByteIndex::from(byte_range.end); let leading_space = if byte_range.start == source.byte_range.start { source.leading_space } else { @@ -488,7 +491,10 @@ fn linear_channel(value: u8) -> f32 { mod tests { use std::{ops::Range, path::PathBuf, slice}; - use egui::{Color32, TextFormat, text::LayoutJob}; + use egui::{ + Color32, TextFormat, + text::{ByteIndex, LayoutJob}, + }; use processor::search::filter::{self, SearchFilter}; use regex::Regex; use stypes::{FileFormat, FilterMatch, ObserveOrigin}; @@ -608,7 +614,7 @@ mod tests { fn format_at(job: &LayoutJob, offset: usize) -> &TextFormat { &job.sections .iter() - .find(|section| section.byte_range.contains(&offset)) + .find(|section| section.byte_range.contains(&ByteIndex::from(offset))) .expect("offset should be covered") .format } @@ -901,8 +907,11 @@ mod tests { ); assert_eq!(job.text, content); - assert_eq!(job.sections.first().unwrap().byte_range.start, 0); - assert_eq!(job.sections.last().unwrap().byte_range.end, content.len()); + assert_eq!(job.sections.first().unwrap().byte_range.start, ByteIndex(0)); + assert_eq!( + job.sections.last().unwrap().byte_range.end, + ByteIndex(content.len()) + ); assert!( job.sections .windows(2) @@ -911,7 +920,11 @@ mod tests { let reconstructed: String = job .sections .iter() - .map(|section| &job.text[section.byte_range.clone()]) + .map(|section| { + let start = usize::from(section.byte_range.start); + let end = usize::from(section.byte_range.end); + &job.text[start..end] + }) .collect(); assert_eq!(reconstructed, content); } diff --git a/crates/app/src/session/ui/jump_to_row.rs b/crates/app/src/session/ui/jump_to_row.rs index 137db38599..7805d6620c 100644 --- a/crates/app/src/session/ui/jump_to_row.rs +++ b/crates/app/src/session/ui/jump_to_row.rs @@ -101,7 +101,6 @@ impl JumpToRow { let input_id = ui.make_persistent_id("jump_to_row_input"); let input_response = sized_singleline_text_edit( - ui, &mut self.input, vec2(ui.available_width(), 25.0), 7, @@ -241,7 +240,8 @@ mod tests { fn render(jump: &mut JumpToRow, shared: &mut SessionShared, input: RawInput) { let ctx = Context::default(); - let _ = ctx.run_ui(input, |ui| jump.render(shared, ui)); + ctx.run_ui(input, |ui| jump.render(shared, ui)) + .drop_without_applying_deltas(); } fn pointer_input(pressed: bool) -> RawInput { @@ -311,20 +311,23 @@ mod tests { let ctx = Context::default(); jump.open(); - let _ = ctx.run_ui(RawInput::default(), |ui| jump.render(&mut shared, ui)); + ctx.run_ui(RawInput::default(), |ui| jump.render(&mut shared, ui)) + .drop_without_applying_deltas(); assert!(jump.validation_message(10).is_none()); let text_input = RawInput { events: vec![Event::Text("x".to_owned())], ..Default::default() }; - let _ = ctx.run_ui(text_input, |ui| jump.render(&mut shared, ui)); + ctx.run_ui(text_input, |ui| jump.render(&mut shared, ui)) + .drop_without_applying_deltas(); assert_eq!(jump.input, "x"); assert!(jump.validation_message(10).is_some()); - let _ = ctx.run_ui(key_input(Key::Backspace, Modifiers::NONE), |ui| { + ctx.run_ui(key_input(Key::Backspace, Modifiers::NONE), |ui| { jump.render(&mut shared, ui) - }); + }) + .drop_without_applying_deltas(); assert!(jump.input.is_empty()); assert!(jump.validation_message(10).is_some()); @@ -332,7 +335,8 @@ mod tests { events: vec![Event::Text("4".to_owned())], ..Default::default() }; - let _ = ctx.run_ui(text_input, |ui| jump.render(&mut shared, ui)); + ctx.run_ui(text_input, |ui| jump.render(&mut shared, ui)) + .drop_without_applying_deltas(); assert_eq!(jump.input, "4"); assert!(jump.validation_message(10).is_none()); } @@ -452,13 +456,17 @@ mod tests { let mut shared = new_shared(10); let ctx = Context::default(); - let _ = ctx.run_ui(pointer_input(true), |_| {}); + ctx.run_ui(pointer_input(true), |_| {}) + .drop_without_applying_deltas(); jump.open(); - let _ = ctx.run_ui(pointer_input(false), |ui| jump.render(&mut shared, ui)); + ctx.run_ui(pointer_input(false), |ui| jump.render(&mut shared, ui)) + .drop_without_applying_deltas(); assert!(jump.is_open()); - let _ = ctx.run_ui(pointer_input(true), |ui| jump.render(&mut shared, ui)); - let _ = ctx.run_ui(pointer_input(false), |ui| jump.render(&mut shared, ui)); + ctx.run_ui(pointer_input(true), |ui| jump.render(&mut shared, ui)) + .drop_without_applying_deltas(); + ctx.run_ui(pointer_input(false), |ui| jump.render(&mut shared, ui)) + .drop_without_applying_deltas(); assert!(!jump.is_open()); } diff --git a/crates/app/src/session/ui/mod.rs b/crates/app/src/session/ui/mod.rs index 5290dff254..ac292b0410 100644 --- a/crates/app/src/session/ui/mod.rs +++ b/crates/app/src/session/ui/mod.rs @@ -190,7 +190,7 @@ impl Session { Panel::bottom("status_bar") .resizable(false) .exact_size(23.0) - .show_inside(ui, |ui| { + .show(ui, |ui| { status_bar::render_content(shared, ui); }); @@ -199,7 +199,7 @@ impl Session { .size_range(RESIZABLE_PANEL_MIN_SIZE..=RESIZABLE_PANEL_MAX_SIZE) .default_size(RESIZABLE_PANEL_DEFAULT_SIZE) .resizable(true) - .show_animated_inside(ui, preferences.panels_visibility.right, |ui| { + .show_collapsible(ui, &mut preferences.panels_visibility.right, |ui| { ui.take_available_width(); side_panel.render_content(ui, shared, actions, registry); }); @@ -209,7 +209,7 @@ impl Session { .size_range(RESIZABLE_PANEL_MIN_SIZE..=RESIZABLE_PANEL_MAX_SIZE) .default_size(RESIZABLE_PANEL_DEFAULT_SIZE) .resizable(true) - .show_animated_inside(ui, preferences.panels_visibility.bottom, |ui| { + .show_collapsible(ui, &mut preferences.panels_visibility.bottom, |ui| { ui.take_available_height(); bottom_panel.render_content(shared, actions, registry, ui); }); @@ -220,7 +220,7 @@ impl Session { .show_separator_line(false) .exact_size(30.0) .frame(Frame::NONE.outer_margin(Margin::same(2))) - .show_inside(ui, |ui| { + .show(ui, |ui| { ui.push_id(shared.get_id(), |ui| { sde_bar.render_content(actions, ui); }); @@ -229,7 +229,7 @@ impl Session { CentralPanel::default() .frame(Frame::central_panel(ui.style()).inner_margin(Margin::ZERO)) - .show_inside(ui, |ui| { + .show(ui, |ui| { // We need to give a unique id for the direct parent of each table because // they will be used as identifiers for table state to avoid ID clashes between // tables from different tabs (different sessions). @@ -953,9 +953,10 @@ mod tests { }; let ctx = Context::default(); let mut consumed = false; - let _ = ctx.run_ui(input, |ui| { + ctx.run_ui(input, |ui| { consumed = session.handle_shortcuts(&mut actions, &mut host_state, ui.ctx(), None); - }); + }) + .drop_without_applying_deltas(); assert!(consumed); assert!(!session.shared.search.nested().is_pending()); @@ -996,9 +997,10 @@ mod tests { }; let ctx = Context::default(); let mut consumed = false; - let _ = ctx.run_ui(input, |ui| { + ctx.run_ui(input, |ui| { consumed = session.handle_shortcuts(&mut actions, &mut host_state, ui.ctx(), None); - }); + }) + .drop_without_applying_deltas(); assert!(consumed); assert!(session.shared.search.nested().is_open()); @@ -1166,9 +1168,10 @@ mod tests { }; let ctx = Context::default(); let mut consumed = false; - let _ = ctx.run_ui(input, |ui| { + ctx.run_ui(input, |ui| { consumed = session.handle_shortcuts(actions, host_state, ui.ctx(), None); - }); + }) + .drop_without_applying_deltas(); assert!(consumed, "select-all shortcut should be consumed"); } diff --git a/crates/app/src/session/ui/side_panel/attachments.rs b/crates/app/src/session/ui/side_panel/attachments.rs index 223f3d0004..dc16c8e4f0 100644 --- a/crates/app/src/session/ui/side_panel/attachments.rs +++ b/crates/app/src/session/ui/side_panel/attachments.rs @@ -117,7 +117,7 @@ impl AttachmentsUi { egui::CentralPanel::default() .frame(Frame::NONE) - .show_inside(ui, |ui| { + .show(ui, |ui| { show_side_panel_group(ui, |ui| self.render_list(shared, ui_actions, ui)); }); } @@ -155,7 +155,7 @@ impl AttachmentsUi { .resizable(false) .show_separator_line(false) .exact_size(self.preview_panel_height(ui.available_height())) - .show_inside(ui, |ui| { + .show(ui, |ui| { show_side_panel_group(ui, |ui| { self.render_preview(&attachment, attachments, ui_actions, ui) }); diff --git a/crates/app/src/session/ui/side_panel/mod.rs b/crates/app/src/session/ui/side_panel/mod.rs index 4f7fc54bf1..87e74a5a5c 100644 --- a/crates/app/src/session/ui/side_panel/mod.rs +++ b/crates/app/src/session/ui/side_panel/mod.rs @@ -71,14 +71,14 @@ impl SidePanelUi { .resizable(false) .exact_size(SIDE_TAB_RAIL_WIDTH) .show_separator_line(false) - .show_inside(ui, |ui| { + .show(ui, |ui| { for tab in all::() { render_tab_button(tab, &mut shared.side_tab, ui); ui.add_space(SIDE_TAB_SPACING); } }); - CentralPanel::default().show_inside(ui, |ui| match shared.side_tab { + CentralPanel::default().show(ui, |ui| match shared.side_tab { SideTabType::Observing => self.observing.render_content(shared, actions, ui), SideTabType::Attachments => self.attachments.render_content(shared, actions, ui), SideTabType::Filters => { diff --git a/crates/app/src/session/ui/side_panel/observing/serial.rs b/crates/app/src/session/ui/side_panel/observing/serial.rs index 7bb2258f3b..975626a509 100644 --- a/crates/app/src/session/ui/side_panel/observing/serial.rs +++ b/crates/app/src/session/ui/side_panel/observing/serial.rs @@ -1,4 +1,6 @@ -use egui::{Align, ComboBox, DragValue, Id, Layout, RichText, TextEdit, Ui, Widget, vec2}; +use egui::{ + Align, AsIdSalt, ComboBox, DragValue, Id, Layout, RichText, TextEdit, Ui, Widget, vec2, +}; use stypes::Transport; use tokio::sync::mpsc; use uuid::Uuid; @@ -335,7 +337,7 @@ const FIELD_WIDTH: f32 = 180.0; /// Renders a combo box for selecting one of the predefined named values. fn render_named_value_combo( ui: &mut Ui, - id: impl std::hash::Hash, + id: impl AsIdSalt, current: &mut NamedValue, values: &[NamedValue], ) { From f276869fe1c8ca56a997d462fa2a37f25f50c2ec Mon Sep 17 00:00:00 2001 From: Ammar Abou Zor Date: Wed, 30 Sep 2026 10:47:46 +0200 Subject: [PATCH 2/2] Disable close on drag behavior for panels. Egui new version introduced close on drag behavior which doesn't match the current app. The changes will disable it while keeping the animated open and close behavior + Small refactoring --- crates/app/src/common/ui/mod.rs | 1 + crates/app/src/common/ui/panel.rs | 22 ++++++++++++++++ crates/app/src/host/ui/home/mod.rs | 17 +++++++----- .../src/host/ui/multi_setup/main_table/mod.rs | 5 ++-- crates/app/src/host/ui/multi_setup/mod.rs | 13 +++++----- crates/app/src/host/ui/plugin_manager/mod.rs | 11 ++++---- .../src/session/ui/bottom_panel/chart/data.rs | 4 +-- .../src/session/ui/common/log_table/text.rs | 10 +++---- crates/app/src/session/ui/mod.rs | 26 +++++++++---------- .../session/ui/side_panel/observing/serial.rs | 4 +-- 10 files changed, 70 insertions(+), 43 deletions(-) create mode 100644 crates/app/src/common/ui/panel.rs diff --git a/crates/app/src/common/ui/mod.rs b/crates/app/src/common/ui/mod.rs index 54a564dad6..296f855042 100644 --- a/crates/app/src/common/ui/mod.rs +++ b/crates/app/src/common/ui/mod.rs @@ -1,5 +1,6 @@ pub mod buttons; pub mod modal; +pub mod panel; pub mod search_picker; pub mod tab_strip; pub mod visibility_tracker; diff --git a/crates/app/src/common/ui/panel.rs b/crates/app/src/common/ui/panel.rs new file mode 100644 index 0000000000..d4828f4453 --- /dev/null +++ b/crates/app/src/common/ui/panel.rs @@ -0,0 +1,22 @@ +//! Shared helpers for application panels. + +use egui::{Panel, Ui}; + +/// Shows `panel` with egui's slide animation, while only the application's own +/// toggles change its visibility. +/// +/// egui's drag-to-close, drag-to-open and double-click toggle gestures are disabled. +pub fn show_toggled_panel( + panel: Panel, + ui: &mut Ui, + visible: bool, + add_contents: impl FnOnce(&mut Ui), +) { + // `show_collapsible` writes panel gestures back into `is_expanded`. Pass a + // per-frame copy so those writes are discarded, and disable drag-to-open so a + // closed panel leaves no grab handle behind. + let mut expanded = visible; + panel + .drag_to_open(false) + .show_collapsible(ui, &mut expanded, add_contents); +} diff --git a/crates/app/src/host/ui/home/mod.rs b/crates/app/src/host/ui/home/mod.rs index ea7c805fe6..65ebc3846d 100644 --- a/crates/app/src/host/ui/home/mod.rs +++ b/crates/app/src/host/ui/home/mod.rs @@ -7,7 +7,10 @@ use self::{file_explorer::FileExplorerUi, recent::RecentSessionsUi}; use super::menu::render_connections_menu; use crate::common::{ phosphor::icons, - ui::{RESIZABLE_PANEL_DEFAULT_SIZE, RESIZABLE_PANEL_MAX_SIZE, RESIZABLE_PANEL_MIN_SIZE}, + ui::{ + RESIZABLE_PANEL_DEFAULT_SIZE, RESIZABLE_PANEL_MAX_SIZE, RESIZABLE_PANEL_MIN_SIZE, + panel::show_toggled_panel, + }, }; use crate::host::{ command::HostCommand, @@ -63,14 +66,14 @@ impl HomeView { ) { self.handle_pending_file_dialog(actions); - Panel::right("favorite folders") + let panel = Panel::right("favorite folders") .size_range(RESIZABLE_PANEL_MIN_SIZE..=RESIZABLE_PANEL_MAX_SIZE) .default_size(RESIZABLE_PANEL_DEFAULT_SIZE) - .resizable(true) - .show_collapsible(ui, &mut preferences.panels_visibility.right, |ui| { - self.file_explorer - .render_content(actions, &mut storage.file_explorer, ui); - }); + .resizable(true); + show_toggled_panel(panel, ui, preferences.panels_visibility.right, |ui| { + self.file_explorer + .render_content(actions, &mut storage.file_explorer, ui); + }); CentralPanel::default().show(ui, |ui| { // Layout rules: diff --git a/crates/app/src/host/ui/multi_setup/main_table/mod.rs b/crates/app/src/host/ui/multi_setup/main_table/mod.rs index 24ae3daac1..1942fd813e 100644 --- a/crates/app/src/host/ui/multi_setup/main_table/mod.rs +++ b/crates/app/src/host/ui/multi_setup/main_table/mod.rs @@ -4,7 +4,8 @@ use std::path::Path; use egui::{ Align, Align2, Color32, Context, CursorIcon, Label, LayerId, Layout, Order, Rect, Response, - RichText, ScrollArea, Sense, Stroke, TextStyle, Ui, Widget, pos2, scroll_area, vec2, + RichText, ScrollArea, Sense, Stroke, TextStyle, Ui, Widget, pos2, scroll_area::DragScroll, + vec2, }; use egui_extras::{Column, TableBuilder}; use enum_iterator::all; @@ -79,7 +80,7 @@ impl MainTable { let table = TableBuilder::new(ui) .id_salt(state.id()) .auto_shrink(true) - .drag_to_scroll(scroll_area::DragScroll::Never) + .drag_to_scroll(DragScroll::Never) .striped(false) .resizable(false) .cell_layout(Layout::left_to_right(Align::Center)) diff --git a/crates/app/src/host/ui/multi_setup/mod.rs b/crates/app/src/host/ui/multi_setup/mod.rs index cbe787d215..9d5e6d484b 100644 --- a/crates/app/src/host/ui/multi_setup/mod.rs +++ b/crates/app/src/host/ui/multi_setup/mod.rs @@ -7,6 +7,7 @@ use uuid::Uuid; use crate::{ common::ui::{ RESIZABLE_PANEL_DEFAULT_SIZE, RESIZABLE_PANEL_MAX_SIZE, RESIZABLE_PANEL_MIN_SIZE, buttons, + panel::show_toggled_panel, }, host::{ command::HostCommand, @@ -59,16 +60,16 @@ impl MultiFileSetup { }); }); - Panel::right("side info") + let panel = Panel::right("side info") .frame(Frame::central_panel(ui.style())) .size_range(RESIZABLE_PANEL_MIN_SIZE..=RESIZABLE_PANEL_MAX_SIZE) .default_size(RESIZABLE_PANEL_DEFAULT_SIZE) - .resizable(true) - .show_collapsible(ui, &mut preferences.panels_visibility.right, |ui| { - ui.with_layout(Layout::top_down_justified(Align::LEFT), |ui| { - self.side_panel.render_content(ui, &mut self.state); - }); + .resizable(true); + show_toggled_panel(panel, ui, preferences.panels_visibility.right, |ui| { + ui.with_layout(Layout::top_down_justified(Align::LEFT), |ui| { + self.side_panel.render_content(ui, &mut self.state); }); + }); CentralPanel::default().show(ui, |ui| { self.main_table.render_content(ui, &mut self.state); diff --git a/crates/app/src/host/ui/plugin_manager/mod.rs b/crates/app/src/host/ui/plugin_manager/mod.rs index 6b9c752b52..0ed0bd9999 100644 --- a/crates/app/src/host/ui/plugin_manager/mod.rs +++ b/crates/app/src/host/ui/plugin_manager/mod.rs @@ -18,6 +18,7 @@ use tokio::sync::mpsc::Sender; use crate::{ common::ui::{ RESIZABLE_PANEL_DEFAULT_SIZE, RESIZABLE_PANEL_MAX_SIZE, RESIZABLE_PANEL_MIN_SIZE, buttons, + panel::show_toggled_panel, }, host::{ command::HostCommand, @@ -165,14 +166,14 @@ impl PluginManagerView { }); }); - Panel::right("plugin_manager_sidebar") + let panel = Panel::right("plugin_manager_sidebar") .frame(Frame::side_top_panel(ui.style())) .size_range(RESIZABLE_PANEL_MIN_SIZE..=RESIZABLE_PANEL_MAX_SIZE) .default_size(RESIZABLE_PANEL_DEFAULT_SIZE) - .resizable(true) - .show_collapsible(ui, &mut preferences.panels_visibility.right, |ui| { - list::render_sidebar(self, data, modals, ui); - }); + .resizable(true); + show_toggled_panel(panel, ui, preferences.panels_visibility.right, |ui| { + list::render_sidebar(self, data, modals, ui); + }); CentralPanel::default().show(ui, |ui| { self.render_selected_details(data, actions, ui); diff --git a/crates/app/src/session/ui/bottom_panel/chart/data.rs b/crates/app/src/session/ui/bottom_panel/chart/data.rs index efd559ad92..8d111dbfa5 100644 --- a/crates/app/src/session/ui/bottom_panel/chart/data.rs +++ b/crates/app/src/session/ui/bottom_panel/chart/data.rs @@ -1,5 +1,5 @@ use egui::Color32; -use rustc_hash::FxHashMap; +use rustc_hash::{FxBuildHasher, FxHashMap}; use crate::{ host::{common::colors::TEMP_SEARCH_COLORS, ui::registry::filters::FilterRegistry}, @@ -64,7 +64,7 @@ impl ChartsData { self.bars.clear(); for bucket in raw_bars { - let mut counts = FxHashMap::with_capacity_and_hasher(bucket.len(), Default::default()); + let mut counts = FxHashMap::with_capacity_and_hasher(bucket.len(), FxBuildHasher); for bar in bucket { counts.insert(bar.filter_idx, bar.matches_count); diff --git a/crates/app/src/session/ui/common/log_table/text.rs b/crates/app/src/session/ui/common/log_table/text.rs index 8a35ef19de..15ac064709 100644 --- a/crates/app/src/session/ui/common/log_table/text.rs +++ b/crates/app/src/session/ui/common/log_table/text.rs @@ -44,16 +44,14 @@ pub fn render_log_cell_text( None => ui.monospace(""), }; - // Improve logs manual selection by expanding text respond, which: - // - Make dragging from everywhere selects texts. - // - Avoid egui_table drag on select annoying behavior. + // Expand the text response so dragging from anywhere in the cell starts text selection. expand_cell_response(ui, response) } fn expand_cell_response(ui: &Ui, mut response: Response) -> Response { - // Selectable labels normally claim only their text galley. In the remaining cell whitespace, - // egui_table's backing ScrollArea receives the drag and pans instead of starting selection. - // Change only the hit-test area so text layout and painting remain tied to the label itself. + // Selectable labels normally claim only their text galley, so drags in the remaining cell + // whitespace would not start selection. Change only the hit-test area so text layout and + // painting remain tied to the label itself. response.interact_rect = ui.clip_rect(); // Re-register the same widget so egui hit testing sees the expanded rectangle this pass. diff --git a/crates/app/src/session/ui/mod.rs b/crates/app/src/session/ui/mod.rs index ac292b0410..1d2a333c9a 100644 --- a/crates/app/src/session/ui/mod.rs +++ b/crates/app/src/session/ui/mod.rs @@ -14,7 +14,7 @@ use uuid::Uuid; use crate::{ common::ui::{ RESIZABLE_PANEL_DEFAULT_SIZE, RESIZABLE_PANEL_MAX_SIZE, RESIZABLE_PANEL_MIN_SIZE, - modal::show_busy_indicator, + modal::show_busy_indicator, panel::show_toggled_panel, }, host::{ command::HostCommand, @@ -194,25 +194,25 @@ impl Session { status_bar::render_content(shared, ui); }); - Panel::right("side_panel") + let panel = Panel::right("side_panel") .frame(Frame::side_top_panel(ui.style()).inner_margin(Margin::same(0))) .size_range(RESIZABLE_PANEL_MIN_SIZE..=RESIZABLE_PANEL_MAX_SIZE) .default_size(RESIZABLE_PANEL_DEFAULT_SIZE) - .resizable(true) - .show_collapsible(ui, &mut preferences.panels_visibility.right, |ui| { - ui.take_available_width(); - side_panel.render_content(ui, shared, actions, registry); - }); + .resizable(true); + show_toggled_panel(panel, ui, preferences.panels_visibility.right, |ui| { + ui.take_available_width(); + side_panel.render_content(ui, shared, actions, registry); + }); - Panel::bottom("bottom_panel") + let panel = Panel::bottom("bottom_panel") .frame(Frame::side_top_panel(ui.style()).inner_margin(Margin::ZERO)) .size_range(RESIZABLE_PANEL_MIN_SIZE..=RESIZABLE_PANEL_MAX_SIZE) .default_size(RESIZABLE_PANEL_DEFAULT_SIZE) - .resizable(true) - .show_collapsible(ui, &mut preferences.panels_visibility.bottom, |ui| { - ui.take_available_height(); - bottom_panel.render_content(shared, actions, registry, ui); - }); + .resizable(true); + show_toggled_panel(panel, ui, preferences.panels_visibility.bottom, |ui| { + ui.take_available_height(); + bottom_panel.render_content(shared, actions, registry, ui); + }); if preferences.sde_bar_visible && sde_bar.is_available() { Panel::bottom("sde_bar") diff --git a/crates/app/src/session/ui/side_panel/observing/serial.rs b/crates/app/src/session/ui/side_panel/observing/serial.rs index 975626a509..768b1e935d 100644 --- a/crates/app/src/session/ui/side_panel/observing/serial.rs +++ b/crates/app/src/session/ui/side_panel/observing/serial.rs @@ -337,11 +337,11 @@ const FIELD_WIDTH: f32 = 180.0; /// Renders a combo box for selecting one of the predefined named values. fn render_named_value_combo( ui: &mut Ui, - id: impl AsIdSalt, + id_salt: impl AsIdSalt, current: &mut NamedValue, values: &[NamedValue], ) { - ComboBox::from_id_salt(id) + ComboBox::from_id_salt(id_salt) .width(FIELD_WIDTH.min(ui.available_width())) .truncate() .selected_text(current.name)