Fix buffer_line_height bugs (#2756)

Mikayla Maki created

Release Notes:

- Bug fix: Raise minimum line height to 1.1
- Bug fix: Disable buffer_line_height setting in non-buffer UI

Change summary

crates/editor/src/editor.rs        | 14 ++++++++++++--
crates/editor/src/element.rs       |  1 +
crates/theme/src/theme_settings.rs |  2 +-
3 files changed, 14 insertions(+), 3 deletions(-)

Detailed changes

crates/editor/src/editor.rs 🔗

@@ -1300,7 +1300,7 @@ impl Editor {
         let editor_view_id = cx.view_id();
         let display_map = cx.add_model(|cx| {
             let settings = settings::get::<ThemeSettings>(cx);
-            let style = build_style(settings, get_field_editor_theme.as_deref(), None, cx);
+            let style = build_style(settings, get_field_editor_theme.as_deref(), None, &mode, cx);
             DisplayMap::new(
                 buffer.clone(),
                 style.text.font_id,
@@ -1500,6 +1500,7 @@ impl Editor {
             settings::get::<ThemeSettings>(cx),
             self.get_field_editor_theme.as_deref(),
             self.override_text_style.as_deref(),
+            &self.mode,
             cx,
         )
     }
@@ -8152,10 +8153,11 @@ fn build_style(
     settings: &ThemeSettings,
     get_field_editor_theme: Option<&GetFieldEditorTheme>,
     override_text_style: Option<&OverrideTextStyle>,
+    mode: &EditorMode,
     cx: &AppContext,
 ) -> EditorStyle {
     let font_cache = cx.font_cache();
-    let line_height_scalar = settings.line_height();
+    let mut line_height_scalar = settings.line_height();
     let theme_id = settings.theme.meta.id;
     let mut theme = settings.theme.editor.clone();
     let mut style = if let Some(get_field_editor_theme) = get_field_editor_theme {
@@ -8166,6 +8168,14 @@ fn build_style(
             .container
             .background_color
             .unwrap_or_default();
+
+        line_height_scalar = match mode {
+            EditorMode::Full => line_height_scalar,
+            EditorMode::AutoHeight { .. } | EditorMode::SingleLine => cx
+                .font_cache()
+                .line_height(field_editor_theme.text.font_size),
+        };
+
         EditorStyle {
             text: field_editor_theme.text,
             placeholder_text: field_editor_theme.placeholder_text,

crates/editor/src/element.rs 🔗

@@ -1977,6 +1977,7 @@ impl Element<Editor> for EditorElement {
 
         let snapshot = editor.snapshot(cx);
         let style = self.style.clone();
+
         let line_height = (style.text.font_size * style.line_height_scalar).round();
 
         let gutter_padding;

crates/theme/src/theme_settings.rs 🔗

@@ -13,7 +13,7 @@ use std::sync::Arc;
 use util::ResultExt as _;
 
 const MIN_FONT_SIZE: f32 = 6.0;
-const MIN_LINE_HEIGHT: f32 = 1.0;
+const MIN_LINE_HEIGHT: f32 = 1.1;
 
 #[derive(Clone, JsonSchema)]
 pub struct ThemeSettings {