From 6928ad13352348851a486a7b636858c3dfd25efc Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Tue, 7 Nov 2023 11:00:53 -0800 Subject: [PATCH] Rename List -> UniformList Co-authored-by: Mikayla --- crates/gpui2/src/elements.rs | 4 +- .../src/elements/{list.rs => uniform_list.rs} | 54 ++++++++----------- crates/picker2/src/picker2.rs | 9 ++-- 3 files changed, 27 insertions(+), 40 deletions(-) rename crates/gpui2/src/elements/{list.rs => uniform_list.rs} (85%) diff --git a/crates/gpui2/src/elements.rs b/crates/gpui2/src/elements.rs index 3ebe5bf5d1..eb061f7d34 100644 --- a/crates/gpui2/src/elements.rs +++ b/crates/gpui2/src/elements.rs @@ -1,11 +1,11 @@ mod div; mod img; -mod list; mod svg; mod text; +mod uniform_list; pub use div::*; pub use img::*; -pub use list::*; pub use svg::*; pub use text::*; +pub use uniform_list::*; diff --git a/crates/gpui2/src/elements/list.rs b/crates/gpui2/src/elements/uniform_list.rs similarity index 85% rename from crates/gpui2/src/elements/list.rs rename to crates/gpui2/src/elements/uniform_list.rs index acd1a524f3..64933951f5 100644 --- a/crates/gpui2/src/elements/list.rs +++ b/crates/gpui2/src/elements/uniform_list.rs @@ -9,18 +9,18 @@ use smallvec::SmallVec; use std::{cmp, ops::Range, sync::Arc}; use taffy::style::Overflow; -pub fn list( +pub fn uniform_list( id: Id, item_count: usize, f: impl 'static + Fn(&mut V, Range, &mut ViewContext) -> SmallVec<[C; 64]>, -) -> List +) -> UniformList where Id: Into, V: 'static, C: Component, { let id = id.into(); - List { + UniformList { id: id.clone(), style: Default::default(), item_count, @@ -35,7 +35,7 @@ where } } -pub struct List { +pub struct UniformList { id: ElementId, style: StyleRefinement, item_count: usize, @@ -47,20 +47,20 @@ pub struct List { ) -> SmallVec<[AnyElement; 64]>, >, interactivity: StatefulInteractivity, - scroll_handle: Option, + scroll_handle: Option, } #[derive(Clone)] -pub struct ListScrollHandle(Arc>>); +pub struct UniformListScrollHandle(Arc>>); #[derive(Clone, Debug)] -struct ListScrollHandleState { +struct ScrollHandleState { item_height: Pixels, list_height: Pixels, scroll_offset: Arc>>, } -impl ListScrollHandle { +impl UniformListScrollHandle { pub fn new() -> Self { Self(Arc::new(Mutex::new(None))) } @@ -80,19 +80,14 @@ impl ListScrollHandle { } } -#[derive(Default)] -pub struct ListState { - interactive: InteractiveElementState, -} - -impl Styled for List { +impl Styled for UniformList { fn style(&mut self) -> &mut StyleRefinement { &mut self.style } } -impl Element for List { - type ElementState = ListState; +impl Element for UniformList { + type ElementState = InteractiveElementState; fn id(&self) -> Option { Some(self.id.clone()) @@ -104,8 +99,7 @@ impl Element for List { element_state: Option, _: &mut ViewContext, ) -> Self::ElementState { - let element_state = element_state.unwrap_or_default(); - element_state + element_state.unwrap_or_default() } fn layout( @@ -141,16 +135,15 @@ impl Element for List { if self.item_count > 0 { let item_height = self.measure_item_height(view_state, padded_bounds, cx); if let Some(scroll_handle) = self.scroll_handle.clone() { - scroll_handle.0.lock().replace(ListScrollHandleState { + scroll_handle.0.lock().replace(ScrollHandleState { item_height, list_height: padded_bounds.size.height, - scroll_offset: element_state.interactive.track_scroll_offset(), + scroll_offset: element_state.track_scroll_offset(), }); } let visible_item_count = (padded_bounds.size.height / item_height).ceil() as usize + 1; let scroll_offset = element_state - .interactive .scroll_offset() .map_or((0.0).into(), |offset| offset.y); let first_visible_element_ix = (-scroll_offset / item_height).floor() as usize; @@ -194,19 +187,14 @@ impl Element for List { let overflow = point(style.overflow.x, Overflow::Scroll); cx.with_z_index(0, |cx| { - self.interactivity.paint( - bounds, - content_size, - overflow, - &mut element_state.interactive, - cx, - ); + self.interactivity + .paint(bounds, content_size, overflow, element_state, cx); }); }) } } -impl List { +impl UniformList { fn measure_item_height( &self, view_state: &mut V, @@ -228,25 +216,25 @@ impl List { cx.layout_bounds(layout_id).size.height } - pub fn track_scroll(mut self, handle: ListScrollHandle) -> Self { + pub fn track_scroll(mut self, handle: UniformListScrollHandle) -> Self { self.scroll_handle = Some(handle); self } } -impl StatelessInteractive for List { +impl StatelessInteractive for UniformList { fn stateless_interactivity(&mut self) -> &mut StatelessInteractivity { self.interactivity.as_stateless_mut() } } -impl StatefulInteractive for List { +impl StatefulInteractive for UniformList { fn stateful_interactivity(&mut self) -> &mut StatefulInteractivity { &mut self.interactivity } } -impl Component for List { +impl Component for UniformList { fn render(self) -> AnyElement { AnyElement::new(self) } diff --git a/crates/picker2/src/picker2.rs b/crates/picker2/src/picker2.rs index 8161c0d0a2..74bdcd19bd 100644 --- a/crates/picker2/src/picker2.rs +++ b/crates/picker2/src/picker2.rs @@ -1,6 +1,6 @@ use gpui::{ - div, list, Component, ElementId, FocusHandle, ListScrollHandle, ParentElement, - StatelessInteractive, Styled, ViewContext, + div, uniform_list, Component, ElementId, FocusHandle, ParentElement, StatelessInteractive, + Styled, UniformListScrollHandle, ViewContext, }; use std::cmp; @@ -24,7 +24,6 @@ pub trait PickerDelegate: Sized + 'static { fn confirm(&mut self, secondary: bool, picker_id: ElementId, cx: &mut ViewContext); fn dismissed(&mut self, picker_id: ElementId, cx: &mut ViewContext); - // todo!("rename to render_candidate?") fn render_match( &self, ix: usize, @@ -47,7 +46,7 @@ impl Picker { impl Picker { pub fn render(self, view: &mut V, _cx: &mut ViewContext) -> impl Component { let id = self.id.clone(); - let scroll_handle = ListScrollHandle::new(); + let scroll_handle = UniformListScrollHandle::new(); div() .size_full() .id(self.id.clone()) @@ -120,7 +119,7 @@ impl Picker { } }) .child( - list( + uniform_list( "candidates", view.match_count(self.id.clone()), move |view: &mut V, visible_range, cx| {