Fix tabs layout

Antonio Scandurra and Nathan Sobo created

Co-Authored-By: Nathan Sobo <nathan@zed.dev>

Change summary

gpui/src/elements/container.rs | 5 +++++
gpui/src/elements/line_box.rs  | 6 +++++-
zed/src/workspace/pane.rs      | 5 +++--
3 files changed, 13 insertions(+), 3 deletions(-)

Detailed changes

gpui/src/elements/container.rs 🔗

@@ -53,6 +53,11 @@ impl Container {
         self
     }
 
+    pub fn with_padding_bottom(mut self, padding: f32) -> Self {
+        self.padding.bottom = padding;
+        self
+    }
+
     pub fn with_background_color(mut self, color: impl Into<ColorU>) -> Self {
         self.background_color = Some(color.into());
         self

gpui/src/elements/line_box.rs 🔗

@@ -38,7 +38,11 @@ impl Element for LineBox {
             .select_font(self.family_id, &self.font_properties)
         {
             Ok(font_id) => {
-                let line_height = ctx.font_cache.bounding_box(font_id, self.font_size).y();
+                let line_height = ctx
+                    .font_cache
+                    .bounding_box(font_id, self.font_size)
+                    .y()
+                    .ceil();
                 let child_max = vec2f(
                     constraint.max.x(),
                     ctx.font_cache.ascent(font_id, self.font_size)

zed/src/workspace/pane.rs 🔗

@@ -187,19 +187,20 @@ impl Pane {
             border.right = ix == last_item_ix;
             border.bottom = ix != self.active_item;
 
+            let padding = 6.;
             let mut container = Container::new(
                 Align::new(
                     Label::new(title, settings.ui_font_family, settings.ui_font_size).boxed(),
                 )
                 .boxed(),
             )
-            .with_uniform_padding(6.0)
+            .with_uniform_padding(padding)
             .with_border(border);
 
             if ix == self.active_item {
                 container = container
                     .with_background_color(ColorU::white())
-                    .with_overdraw_bottom(1.5);
+                    .with_padding_bottom(padding + border.width);
             } else {
                 container = container.with_background_color(ColorU::from_u32(0xeaeaebff));
             }