From 185eca6c67c013bf50995e15c2a1698f16f6e97b Mon Sep 17 00:00:00 2001 From: Jason Lee Date: Fri, 4 Oct 2024 10:23:11 +0800 Subject: [PATCH] scrollbar: Update GPUI and fix scrollbar with new API. (#307) The https://github.com/zed-industries/zed/pull/18513 has been changed the `UniformListScrollHandle` API, it provided the scroll contents size, so we not need calculate it again. --- Cargo.lock | 279 +++++++++++++----------------- crates/ui/src/list/list.rs | 1 - crates/ui/src/scroll/scrollbar.rs | 16 +- crates/ui/src/table.rs | 8 +- 4 files changed, 136 insertions(+), 168 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 27be1ff3..d4294f11 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -241,7 +241,7 @@ dependencies = [ "polling 2.8.0", "rustix 0.37.27", "slab", - "socket2 0.4.10", + "socket2", "waker-fn", ] @@ -474,7 +474,7 @@ dependencies = [ "bitflags 2.6.0", "cexpr", "clang-sys", - "itertools 0.13.0", + "itertools 0.11.0", "log", "prettyplease", "proc-macro2", @@ -723,12 +723,6 @@ dependencies = [ "wayland-client", ] -[[package]] -name = "castaway" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" - [[package]] name = "cbc" version = "0.1.2" @@ -944,7 +938,7 @@ dependencies = [ [[package]] name = "collections" version = "0.1.0" -source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#3d634cea8003d129f881a6a3104ead2cfed0ae46" +source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#82314ac0990fe5f1d7c2370b3f7fcf0097a060d7" dependencies = [ "rustc-hash", ] @@ -1223,36 +1217,6 @@ dependencies = [ "syn 2.0.71", ] -[[package]] -name = "curl" -version = "0.4.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e2161dd6eba090ff1594084e95fd67aeccf04382ffea77999ea94ed42ec67b6" -dependencies = [ - "curl-sys", - "libc", - "openssl-probe", - "openssl-sys", - "schannel", - "socket2 0.5.7", - "windows-sys 0.52.0", -] - -[[package]] -name = "curl-sys" -version = "0.4.73+curl-8.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "450ab250ecf17227c39afb9a2dd9261dc0035cb80f2612472fc0c4aac2dcb84d" -dependencies = [ - "cc", - "libc", - "libz-sys", - "openssl-sys", - "pkg-config", - "vcpkg", - "windows-sys 0.52.0", -] - [[package]] name = "darling" version = "0.20.10" @@ -1309,7 +1273,7 @@ dependencies = [ [[package]] name = "derive_refineable" version = "0.1.0" -source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#3d634cea8003d129f881a6a3104ead2cfed0ae46" +source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#82314ac0990fe5f1d7c2370b3f7fcf0097a060d7" dependencies = [ "proc-macro2", "quote", @@ -2250,7 +2214,7 @@ dependencies = [ [[package]] name = "gpui" version = "0.1.0" -source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#3d634cea8003d129f881a6a3104ead2cfed0ae46" +source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#82314ac0990fe5f1d7c2370b3f7fcf0097a060d7" dependencies = [ "anyhow", "as-raw-xcb-connection", @@ -2350,7 +2314,7 @@ dependencies = [ [[package]] name = "gpui_macros" version = "0.1.0" -source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#3d634cea8003d129f881a6a3104ead2cfed0ae46" +source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#82314ac0990fe5f1d7c2370b3f7fcf0097a060d7" dependencies = [ "proc-macro2", "quote", @@ -2520,17 +2484,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa 1.0.11", -] - [[package]] name = "http" version = "1.1.0" @@ -2545,17 +2498,18 @@ dependencies = [ [[package]] name = "http_client" version = "0.1.0" -source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#3d634cea8003d129f881a6a3104ead2cfed0ae46" +source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#82314ac0990fe5f1d7c2370b3f7fcf0097a060d7" dependencies = [ "anyhow", "derive_more", "futures", - "futures-lite 1.13.0", - "http 1.1.0", - "isahc", + "http", "log", + "rustls", + "rustls-native-certs", "serde", "serde_json", + "smol", "url", ] @@ -2739,33 +2693,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "isahc" -version = "1.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" -dependencies = [ - "async-channel 1.9.0", - "castaway", - "crossbeam-utils", - "curl", - "curl-sys", - "encoding_rs", - "event-listener 2.5.3", - "futures-lite 1.13.0", - "http 0.2.12", - "log", - "mime", - "once_cell", - "polling 2.8.0", - "slab", - "sluice", - "tracing", - "tracing-futures", - "url", - "waker-fn", -] - [[package]] name = "itertools" version = "0.11.0" @@ -2971,18 +2898,6 @@ version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64804cc6a5042d4f05379909ba25b503ec04e2c082151d62122d5dcaa274b961" -[[package]] -name = "libz-sys" -version = "1.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "linkme" version = "0.3.27" @@ -3102,7 +3017,7 @@ dependencies = [ [[package]] name = "media" version = "0.1.0" -source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#3d634cea8003d129f881a6a3104ead2cfed0ae46" +source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#82314ac0990fe5f1d7c2370b3f7fcf0097a060d7" dependencies = [ "anyhow", "bindgen", @@ -3151,12 +3066,6 @@ dependencies = [ "paste", ] -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - [[package]] name = "minimal-lexical" version = "0.2.1" @@ -3505,18 +3414,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" -[[package]] -name = "openssl-sys" -version = "0.9.102" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "option-ext" version = "0.2.0" @@ -4203,7 +4100,7 @@ dependencies = [ [[package]] name = "refineable" version = "0.1.0" -source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#3d634cea8003d129f881a6a3104ead2cfed0ae46" +source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#82314ac0990fe5f1d7c2370b3f7fcf0097a060d7" dependencies = [ "derive_refineable", ] @@ -4260,6 +4157,21 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "roxmltree" version = "0.19.0" @@ -4397,6 +4309,56 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcaf18a4f2be7326cd874a5fa579fae794320a0f388d365dca7e480e55f83f8a" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e696e35370c65c9c541198af4543ccd580cf17fc25d8e05c5a242b202488c55" + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.17" @@ -4480,12 +4442,45 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "seahash" version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.6.0", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "selectors" version = "0.22.0" @@ -4515,7 +4510,7 @@ checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a" [[package]] name = "semantic_version" version = "0.1.0" -source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#3d634cea8003d129f881a6a3104ead2cfed0ae46" +source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#82314ac0990fe5f1d7c2370b3f7fcf0097a060d7" dependencies = [ "anyhow", "serde", @@ -4733,17 +4728,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "sluice" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" -dependencies = [ - "async-channel 1.9.0", - "futures-core", - "futures-io", -] - [[package]] name = "smallvec" version = "1.13.2" @@ -4798,16 +4782,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "socket2" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "soup3" version = "0.5.0" @@ -4953,7 +4927,7 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "sum_tree" version = "0.1.0" -source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#3d634cea8003d129f881a6a3104ead2cfed0ae46" +source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#82314ac0990fe5f1d7c2370b3f7fcf0097a060d7" dependencies = [ "arrayvec", "log", @@ -5351,7 +5325,6 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -5377,16 +5350,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - [[package]] name = "triomphe" version = "0.1.13" @@ -5529,6 +5492,12 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" version = "2.5.2" @@ -5572,7 +5541,7 @@ checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] name = "util" version = "0.1.0" -source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#3d634cea8003d129f881a6a3104ead2cfed0ae46" +source = "git+https://github.com/huacnlee/zed.git?branch=export-platform-window#82314ac0990fe5f1d7c2370b3f7fcf0097a060d7" dependencies = [ "anyhow", "async-fs 1.6.0", @@ -5649,12 +5618,6 @@ dependencies = [ "sval_serde", ] -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version-compare" version = "0.2.0" @@ -6398,7 +6361,7 @@ dependencies = [ "gdkx11", "gtk", "html5ever", - "http 1.1.0", + "http", "javascriptcore-rs", "jni", "kuchikiki", diff --git a/crates/ui/src/list/list.rs b/crates/ui/src/list/list.rs index d8787ba2..6470a2b9 100644 --- a/crates/ui/src/list/list.rs +++ b/crates/ui/src/list/list.rs @@ -200,7 +200,6 @@ where cx.view().entity_id(), self.scrollbar_state.clone(), self.vertical_scroll_handle.clone(), - self.delegate.items_count(), )) } diff --git a/crates/ui/src/scroll/scrollbar.rs b/crates/ui/src/scroll/scrollbar.rs index 1f476eae..7b0657ff 100644 --- a/crates/ui/src/scroll/scrollbar.rs +++ b/crates/ui/src/scroll/scrollbar.rs @@ -2,9 +2,9 @@ use std::{cell::Cell, rc::Rc}; use crate::theme::ActiveTheme; use gpui::{ - fill, point, px, relative, size, Bounds, ContentMask, Edges, Element, EntityId, Hitbox, - IntoElement, MouseDownEvent, MouseMoveEvent, MouseUpEvent, PaintQuad, Pixels, Point, Position, - ScrollHandle, Style, UniformListScrollHandle, + fill, point, px, relative, Bounds, ContentMask, Edges, Element, EntityId, Hitbox, IntoElement, + MouseDownEvent, MouseMoveEvent, MouseUpEvent, PaintQuad, Pixels, Point, Position, ScrollHandle, + Style, UniformListScrollHandle, }; const MIN_THUMB_SIZE: f32 = 80.; @@ -220,11 +220,13 @@ impl Scrollbar { view_id: EntityId, state: Rc>, scroll_handle: UniformListScrollHandle, - items_count: usize, ) -> Self { - let last_item_height = scroll_handle.0.borrow().last_item_height.unwrap_or(px(10.)); - let max_height = items_count as f32 * last_item_height; - let scroll_size = size(px(0.), max_height); + let scroll_size = scroll_handle + .0 + .borrow() + .last_item_size + .map(|size| size.contents) + .unwrap_or_default(); Self::new( view_id, diff --git a/crates/ui/src/table.rs b/crates/ui/src/table.rs index 20fe1650..08b60983 100644 --- a/crates/ui/src/table.rs +++ b/crates/ui/src/table.rs @@ -458,7 +458,6 @@ where cx.view().entity_id(), state, self.vertical_scroll_handle.clone(), - self.delegate.rows_count(), )), ) } @@ -1014,7 +1013,12 @@ where let cols_count: usize = self.delegate.cols_count(); let rows_count = self.delegate.rows_count(); - let row_height = self.vertical_scroll_handle.0.borrow().last_item_height; + let row_height = self + .vertical_scroll_handle + .0 + .borrow() + .last_item_size + .map(|size| size.item.height); let total_height = self .vertical_scroll_handle .0