diff --git a/zed/src/chat_panel.rs b/zed/src/chat_panel.rs index 2b5570ca91..5f4f3e13c7 100644 --- a/zed/src/chat_panel.rs +++ b/zed/src/chat_panel.rs @@ -47,7 +47,7 @@ impl ChatPanel { cx: &mut ViewContext, ) -> Self { let input_editor = cx.add_view(|cx| { - Editor::auto_height(settings.clone(), cx).with_style({ + Editor::auto_height(4, settings.clone(), cx).with_style({ let settings = settings.clone(); move |_| settings.borrow().theme.chat_panel.input_editor.as_editor() }) @@ -237,13 +237,9 @@ impl ChatPanel { fn render_input_box(&self) -> ElementBox { let theme = &self.settings.borrow().theme; - Container::new( - ConstrainedBox::new(ChildView::new(self.input_editor.id()).boxed()) - .with_max_height(100.) - .boxed(), - ) - .with_style(&theme.chat_panel.input_editor_container) - .boxed() + Container::new(ChildView::new(self.input_editor.id()).boxed()) + .with_style(&theme.chat_panel.input_editor_container) + .boxed() } fn render_channel_name( diff --git a/zed/src/editor.rs b/zed/src/editor.rs index 38e9a3ac3e..39c588f8d1 100644 --- a/zed/src/editor.rs +++ b/zed/src/editor.rs @@ -272,9 +272,10 @@ pub enum SelectPhase { End, } -enum EditorMode { +#[derive(Copy, Clone, PartialEq, Eq)] +pub enum EditorMode { SingleLine, - AutoHeight, + AutoHeight { max_lines: usize }, Full, } @@ -301,10 +302,9 @@ pub struct Editor { } pub struct Snapshot { + pub mode: EditorMode, pub display_snapshot: DisplayMapSnapshot, pub placeholder_text: Option>, - pub gutter_visible: bool, - pub auto_height: bool, pub theme: Arc, pub font_family: FamilyId, pub font_size: f32, @@ -332,10 +332,14 @@ impl Editor { view } - pub fn auto_height(settings: watch::Receiver, cx: &mut ViewContext) -> Self { + pub fn auto_height( + max_lines: usize, + settings: watch::Receiver, + cx: &mut ViewContext, + ) -> Self { let buffer = cx.add_model(|cx| Buffer::new(0, String::new(), cx)); let mut view = Self::for_buffer(buffer, settings, cx); - view.mode = EditorMode::AutoHeight; + view.mode = EditorMode::AutoHeight { max_lines }; view } @@ -407,9 +411,8 @@ impl Editor { let settings = self.settings.borrow(); Snapshot { + mode: self.mode, display_snapshot: self.display_map.update(cx, |map, cx| map.snapshot(cx)), - gutter_visible: matches!(self.mode, EditorMode::Full), - auto_height: matches!(self.mode, EditorMode::AutoHeight), scroll_position: self.scroll_position, scroll_top_anchor: self.scroll_top_anchor.clone(), theme: settings.theme.clone(), @@ -464,7 +467,7 @@ impl Editor { let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx)); let mut scroll_position = compute_scroll_position(&display_map, self.scroll_position, &self.scroll_top_anchor); - let max_scroll_top = if matches!(self.mode, EditorMode::AutoHeight) { + let max_scroll_top = if matches!(self.mode, EditorMode::AutoHeight { .. }) { (display_map.max_point().row() as f32 - visible_lines + 1.).max(0.) } else { display_map.max_point().row().saturating_sub(1) as f32 @@ -496,7 +499,7 @@ impl Editor { .row() as f32 + 1.0; - let margin = if matches!(self.mode, EditorMode::AutoHeight) { + let margin = if matches!(self.mode, EditorMode::AutoHeight { .. }) { 0. } else { ((visible_lines - (last_cursor_bottom - first_cursor_top)) / 2.0) @@ -760,7 +763,7 @@ impl Editor { fn newline(&mut self, Newline(insert_newline): &Newline, cx: &mut ViewContext) { match self.mode { EditorMode::SingleLine => cx.propagate_action(), - EditorMode::AutoHeight => { + EditorMode::AutoHeight { .. } => { if *insert_newline { self.insert(&Insert("\n".into()), cx); } else { diff --git a/zed/src/editor/element.rs b/zed/src/editor/element.rs index a14356819d..791c6a5be0 100644 --- a/zed/src/editor/element.rs +++ b/zed/src/editor/element.rs @@ -396,7 +396,7 @@ impl Element for EditorElement { let gutter_padding; let gutter_width; - if snapshot.gutter_visible { + if snapshot.mode == EditorMode::Full { gutter_padding = snapshot.em_width(cx.font_cache); match snapshot.max_line_number_width(cx.font_cache, cx.text_layout_cache) { Err(error) => { @@ -424,11 +424,12 @@ impl Element for EditorElement { }); let scroll_height = (snapshot.max_point().row() + 1) as f32 * line_height; - if snapshot.auto_height { + if let EditorMode::AutoHeight { max_lines } = snapshot.mode { size.set_y( scroll_height .min(constraint.max_along(Axis::Vertical)) - .max(constraint.min_along(Axis::Vertical)), + .max(constraint.min_along(Axis::Vertical)) + .min(line_height * max_lines as f32), ) } else if size.y().is_infinite() { size.set_y(scroll_height); @@ -485,7 +486,7 @@ impl Element for EditorElement { } }); - let line_number_layouts = if snapshot.gutter_visible { + let line_number_layouts = if snapshot.mode == EditorMode::Full { let settings = self .view .upgrade(cx.app)