From b5c76ccc95d6459e2d9f9da22d2af2d8be96c040 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Fri, 17 Sep 2021 16:45:09 -0700 Subject: [PATCH] Render close icons on all tabs when tab bar is hovered --- zed/src/workspace/pane.rs | 69 ++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/zed/src/workspace/pane.rs b/zed/src/workspace/pane.rs index c0cd6bb9fd7e47141cc633a55cb9eeb00e48ca81..f4d409ae5df489295d61633a124fc1fe193e8b94 100644 --- a/zed/src/workspace/pane.rs +++ b/zed/src/workspace/pane.rs @@ -185,13 +185,13 @@ impl Pane { theme.workspace.tab.label.text.font_size, ); - let mut row = Flex::row(); - for (ix, item) in self.items.iter().enumerate() { - let is_active = ix == self.active_item; + enum Tabs {} + let tabs = MouseEventHandler::new::(0, cx, |mouse_state, cx| { + let mut row = Flex::row(); + for (ix, item) in self.items.iter().enumerate() { + let is_active = ix == self.active_item; - enum Tab {} - row.add_child( - MouseEventHandler::new::(item.id(), cx, |mouse_state, cx| { + row.add_child({ let mut title = item.title(cx); if title.len() > MAX_TAB_TITLE_LEN { let mut truncated_len = MAX_TAB_TITLE_LEN; @@ -276,7 +276,7 @@ impl Pane { ) .with_child( Align::new( - ConstrainedBox::new(if is_active || mouse_state.hovered { + ConstrainedBox::new(if mouse_state.hovered { let item_id = item.id(); enum TabCloseButton {} let icon = Svg::new("icons/x.svg"); @@ -316,36 +316,37 @@ impl Pane { }) .boxed() }) - .boxed(), - ) - } + } - // Ensure there's always a minimum amount of space after the last tab, - // so that the tab's border doesn't abut the window's border. - let mut border = Border::bottom(1.0, Color::default()); - border.color = theme.workspace.tab.container.border.color; - - row.add_child( - ConstrainedBox::new( - Container::new(Empty::new().boxed()) - .with_border(border) - .boxed(), - ) - .with_min_width(20.) - .named("fixed-filler"), - ); + // Ensure there's always a minimum amount of space after the last tab, + // so that the tab's border doesn't abut the window's border. + let mut border = Border::bottom(1.0, Color::default()); + border.color = theme.workspace.tab.container.border.color; - row.add_child( - Expanded::new( - 0.0, - Container::new(Empty::new().boxed()) - .with_border(border) - .boxed(), - ) - .named("filler"), - ); + row.add_child( + ConstrainedBox::new( + Container::new(Empty::new().boxed()) + .with_border(border) + .boxed(), + ) + .with_min_width(20.) + .named("fixed-filler"), + ); + + row.add_child( + Expanded::new( + 0.0, + Container::new(Empty::new().boxed()) + .with_border(border) + .boxed(), + ) + .named("filler"), + ); + + row.boxed() + }); - ConstrainedBox::new(row.boxed()) + ConstrainedBox::new(tabs.boxed()) .with_height(line_height + 16.) .named("tabs") }