Git panel editor scroll (#26465)

Conrad Irwin created

Release Notes:

- N/A

Change summary

crates/git_ui/src/git_panel.rs | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)

Detailed changes

crates/git_ui/src/git_panel.rs 🔗

@@ -270,6 +270,8 @@ impl Drop for RemoteOperationGuard {
     }
 }
 
+const MAX_PANEL_EDITOR_LINES: usize = 6;
+
 pub(crate) fn commit_message_editor(
     commit_message_buffer: Entity<Buffer>,
     placeholder: Option<&str>,
@@ -279,7 +281,7 @@ pub(crate) fn commit_message_editor(
     cx: &mut Context<'_, Editor>,
 ) -> Editor {
     let buffer = cx.new(|cx| MultiBuffer::singleton(commit_message_buffer, cx));
-    let max_lines = if in_panel { 6 } else { 18 };
+    let max_lines = if in_panel { MAX_PANEL_EDITOR_LINES } else { 18 };
     let mut commit_editor = Editor::new(
         EditorMode::AutoHeight { max_lines },
         buffer,
@@ -2590,8 +2592,12 @@ impl GitPanel {
         let branch = active_repository.read(cx).current_branch().cloned();
 
         let footer_size = px(32.);
-        let gap = px(8.0);
-        let max_height = window.line_height() * 5. + gap + footer_size;
+        let gap = px(9.0);
+        let max_height = panel_editor_style
+            .text
+            .line_height_in_pixels(window.rem_size())
+            * MAX_PANEL_EDITOR_LINES
+            + gap;
 
         let git_panel = cx.entity().clone();
         let display_name = SharedString::from(Arc::from(
@@ -2600,6 +2606,9 @@ impl GitPanel {
                 .display_name(project, cx)
                 .trim_end_matches("/"),
         ));
+        let editor_is_long = self.commit_editor.update(cx, |editor, cx| {
+            editor.max_point(cx).row().0 >= MAX_PANEL_EDITOR_LINES as u32
+        });
 
         let footer = v_flex()
             .child(PanelRepoFooter::new(
@@ -2612,11 +2621,10 @@ impl GitPanel {
                 panel_editor_container(window, cx)
                     .id("commit-editor-container")
                     .relative()
-                    .h(max_height)
                     .w_full()
+                    .h(max_height + footer_size)
                     .border_t_1()
                     .border_color(cx.theme().colors().border_variant)
-                    .bg(cx.theme().colors().editor_background)
                     .cursor_text()
                     .on_click(cx.listener(move |this, _: &ClickEvent, window, cx| {
                         window.focus(&this.commit_editor.focus_handle(cx));
@@ -2624,6 +2632,10 @@ impl GitPanel {
                     .child(
                         h_flex()
                             .id("commit-footer")
+                            .border_t_1()
+                            .when(editor_is_long, |el| {
+                                el.border_color(cx.theme().colors().border_variant)
+                            })
                             .absolute()
                             .bottom_0()
                             .left_0()