When a dock is zoomed, don't render it in its normal place

Max Brunsfeld created

Change summary

crates/workspace2/src/workspace2.rs | 165 +++---------------------------
1 file changed, 19 insertions(+), 146 deletions(-)

Detailed changes

crates/workspace2/src/workspace2.rs 🔗

@@ -3625,17 +3625,15 @@ impl Render for Workspace {
                             .flex_row()
                             .h_full()
                             // Left Dock
-                            .children(if self.zoomed_position == Some(DockPosition::Left) {
-                                None
-                            } else {
-                                Some(
+                            .children(self.zoomed_position.ne(&Some(DockPosition::Left)).then(
+                                || {
                                     div()
                                         .flex()
                                         .flex_none()
                                         .overflow_hidden()
-                                        .child(self.left_dock.clone()),
-                                )
-                            })
+                                        .child(self.left_dock.clone())
+                                },
+                            ))
                             // Panes
                             .child(
                                 div()
@@ -3652,16 +3650,22 @@ impl Render for Workspace {
                                         &self.app_state,
                                         cx,
                                     ))
-                                    .child(self.bottom_dock.clone()),
+                                    .children(
+                                        self.zoomed_position
+                                            .ne(&Some(DockPosition::Bottom))
+                                            .then(|| self.bottom_dock.clone()),
+                                    ),
                             )
                             // Right Dock
-                            .child(
-                                div()
-                                    .flex()
-                                    .flex_none()
-                                    .overflow_hidden()
-                                    .child(self.right_dock.clone()),
-                            ),
+                            .children(self.zoomed_position.ne(&Some(DockPosition::Right)).then(
+                                || {
+                                    div()
+                                        .flex()
+                                        .flex_none()
+                                        .overflow_hidden()
+                                        .child(self.right_dock.clone())
+                                },
+                            )),
                     )
                     .children(self.render_notifications(cx))
                     .children(self.zoomed.as_ref().and_then(|view| {
@@ -3688,137 +3692,6 @@ impl Render for Workspace {
     }
 }
 
-// impl View for Workspace {
-
-//     fn render(&mut self, cx: &mut ViewContext<Self>) -> AnyElement<Self> {
-//         let theme = theme::current(cx).clone();
-//         Stack::new()
-//             .with_child(
-//                 Flex::column()
-//                     .with_child(self.render_titlebar(&theme, cx))
-//                     .with_child(
-//                         Stack::new()
-//                             .with_child({
-//                                 let project = self.project.clone();
-//                                 Flex::row()
-//                                     .with_children(self.render_dock(DockPosition::Left, cx))
-//                                     .with_child(
-//                                         Flex::column()
-//                                             .with_child(
-//                                                 FlexItem::new(
-//                                                     self.center.render(
-//                                                         &project,
-//                                                         &theme,
-//                                                         &self.follower_states,
-//                                                         self.active_call(),
-//                                                         self.active_pane(),
-//                                                         self.zoomed
-//                                                             .as_ref()
-//                                                             .and_then(|zoomed| zoomed.upgrade(cx))
-//                                                             .as_ref(),
-//                                                         &self.app_state,
-//                                                         cx,
-//                                                     ),
-//                                                 )
-//                                                 .flex(1., true),
-//                                             )
-//                                             .with_children(
-//                                                 self.render_dock(DockPosition::Bottom, cx),
-//                                             )
-//                                             .flex(1., true),
-//                                     )
-//                                     .with_children(self.render_dock(DockPosition::Right, cx))
-//                             })
-//                             .with_child(Overlay::new(
-//                                 Stack::new()
-//                                     .with_children(self.zoomed.as_ref().and_then(|zoomed| {
-//                                         enum ZoomBackground {}
-//                                         let zoomed = zoomed.upgrade(cx)?;
-
-//                                         let mut foreground_style =
-//                                             theme.workspace.zoomed_pane_foreground;
-//                                         if let Some(zoomed_dock_position) = self.zoomed_position {
-//                                             foreground_style =
-//                                                 theme.workspace.zoomed_panel_foreground;
-//                                             let margin = foreground_style.margin.top;
-//                                             let border = foreground_style.border.top;
-
-//                                             // Only include a margin and border on the opposite side.
-//                                             foreground_style.margin.top = 0.;
-//                                             foreground_style.margin.left = 0.;
-//                                             foreground_style.margin.bottom = 0.;
-//                                             foreground_style.margin.right = 0.;
-//                                             foreground_style.border.top = false;
-//                                             foreground_style.border.left = false;
-//                                             foreground_style.border.bottom = false;
-//                                             foreground_style.border.right = false;
-//                                             match zoomed_dock_position {
-//                                                 DockPosition::Left => {
-//                                                     foreground_style.margin.right = margin;
-//                                                     foreground_style.border.right = border;
-//                                                 }
-//                                                 DockPosition::Right => {
-//                                                     foreground_style.margin.left = margin;
-//                                                     foreground_style.border.left = border;
-//                                                 }
-//                                                 DockPosition::Bottom => {
-//                                                     foreground_style.margin.top = margin;
-//                                                     foreground_style.border.top = border;
-//                                                 }
-//                                             }
-//                                         }
-
-//                                         Some(
-//                                             ChildView::new(&zoomed, cx)
-//                                                 .contained()
-//                                                 .with_style(foreground_style)
-//                                                 .aligned()
-//                                                 .contained()
-//                                                 .with_style(theme.workspace.zoomed_background)
-//                                                 .mouse::<ZoomBackground>(0)
-//                                                 .capture_all()
-//                                                 .on_down(
-//                                                     MouseButton::Left,
-//                                                     |_, this: &mut Self, cx| {
-//                                                         this.zoom_out(cx);
-//                                                     },
-//                                                 ),
-//                                         )
-//                                     }))
-//                                     .with_children(self.modal.as_ref().map(|modal| {
-//                                         // Prevent clicks within the modal from falling
-//                                         // through to the rest of the workspace.
-//                                         enum ModalBackground {}
-//                                         MouseEventHandler::new::<ModalBackground, _>(
-//                                             0,
-//                                             cx,
-//                                             |_, cx| ChildView::new(modal.view.as_any(), cx),
-//                                         )
-//                                         .on_click(MouseButton::Left, |_, _, _| {})
-//                                         .contained()
-//                                         .with_style(theme.workspace.modal)
-//                                         .aligned()
-//                                         .top()
-//                                     }))
-//                                     .with_children(self.render_notifications(&theme.workspace, cx)),
-//                             ))
-//                             .provide_resize_bounds::<WorkspaceBounds>()
-//                             .flex(1.0, true),
-//                     )
-//                     .with_child(ChildView::new(&self.status_bar, cx))
-//                     .contained()
-//                     .with_background_color(theme.workspace.background),
-//             )
-//             .with_children(DragAndDrop::render(cx))
-//             .with_children(self.render_disconnected_overlay(cx))
-//             .into_any_named("workspace")
-//     }
-
-//     fn modifiers_changed(&mut self, e: &ModifiersChangedEvent, cx: &mut ViewContext<Self>) -> bool {
-//         DragAndDrop::<Workspace>::update_modifiers(e.modifiers, cx)
-//     }
-// }
-
 impl WorkspaceStore {
     pub fn new(client: Arc<Client>, cx: &mut ModelContext<Self>) -> Self {
         Self {