From 310e5e3cde30124f4bba43a010395331a1f050b1 Mon Sep 17 00:00:00 2001 From: Jason Lee Date: Mon, 8 Jul 2024 23:22:08 +0800 Subject: [PATCH] Avoid PickerStory clone vec. --- crates/story/src/picker_story.rs | 23 +++++++++++++---------- crates/workspace/src/pane.rs | 2 +- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/crates/story/src/picker_story.rs b/crates/story/src/picker_story.rs index 385746ef..0b60286f 100644 --- a/crates/story/src/picker_story.rs +++ b/crates/story/src/picker_story.rs @@ -1,3 +1,5 @@ +use std::sync::Arc; + use gpui::{ deferred, div, prelude::FluentBuilder as _, px, FocusHandle, FocusableView, InteractiveElement as _, IntoElement, ParentElement, Render, Styled, View, ViewContext, @@ -14,8 +16,8 @@ use ui::{ pub struct ListItemDeletegate { story: WeakView, selected_index: usize, - items: Vec, - matches: Vec, + items: Vec>, + matches: Vec>, } impl ListDelegate for ListItemDeletegate { @@ -47,7 +49,7 @@ impl ListDelegate for ListItemDeletegate { .selected(selected) .py_1() .px_3() - .child(item.clone()); + .child(item.to_string()); Some(list_item) } else { None @@ -82,7 +84,7 @@ impl ListDelegate for ListItemDeletegate { pub struct PickerStory { list: View>, open: bool, - selected_value: Option, + selected_value: Option>, } impl PickerStory { @@ -91,7 +93,7 @@ impl PickerStory { } fn new(cx: &mut ViewContext) -> Self { - let items: Vec = [ + let items: Vec> = [ "Baguette (France)", "Baklava (Turkey)", "Beef Wellington (UK)", @@ -143,7 +145,7 @@ impl PickerStory { "Wiener Schnitzel (Austria)", ] .iter() - .map(|s| s.to_string()) + .map(|s| Arc::new(s.to_string())) .collect(); let story = cx.view().downgrade(); @@ -191,10 +193,11 @@ impl Render for PickerStory { ) .when_some(self.selected_value.clone(), |this, selected_value| { this.child( - h_flex() - .gap_1() - .child("You have selected:") - .child(div().child(selected_value).text_color(gpui::red())), + h_flex().gap_1().child("You have selected:").child( + div() + .child(selected_value.to_string()) + .text_color(gpui::red()), + ), ) }) .when(self.open, |this| { diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index 16fb684b..4aaa86c7 100644 --- a/crates/workspace/src/pane.rs +++ b/crates/workspace/src/pane.rs @@ -117,7 +117,7 @@ impl Render for DraggedTab { }, cx, ); - Tab::new("", label).selected(self.is_active).render(cx) + Tab::new("", label).selected(self.is_active).into_element() } }