Render zoomed item in the workspace

Max Brunsfeld created

Change summary

crates/workspace2/src/workspace2.rs | 49 +++++++++++++++++++++++-------
1 file changed, 37 insertions(+), 12 deletions(-)

Detailed changes

crates/workspace2/src/workspace2.rs 🔗

@@ -3556,6 +3556,8 @@ impl Render for Workspace {
             )
         };
 
+        let theme = cx.theme().clone();
+        let colors = theme.colors();
         cx.set_rem_size(ui_font_size);
 
         self.actions(div(), cx)
@@ -3568,10 +3570,10 @@ impl Render for Workspace {
             .gap_0()
             .justify_start()
             .items_start()
-            .text_color(cx.theme().colors().text)
-            .bg(cx.theme().colors().background)
+            .text_color(colors.text)
+            .bg(colors.background)
             .border()
-            .border_color(cx.theme().colors().border)
+            .border_color(colors.border)
             .children(self.titlebar_item.clone())
             .child(
                 div()
@@ -3584,7 +3586,7 @@ impl Render for Workspace {
                     .overflow_hidden()
                     .border_t()
                     .border_b()
-                    .border_color(cx.theme().colors().border)
+                    .border_color(colors.border)
                     .child(
                         canvas(cx.listener(|workspace, bounds, _| {
                             workspace.bounds = *bounds;
@@ -3623,13 +3625,17 @@ impl Render for Workspace {
                             .flex_row()
                             .h_full()
                             // Left Dock
-                            .child(
-                                div()
-                                    .flex()
-                                    .flex_none()
-                                    .overflow_hidden()
-                                    .child(self.left_dock.clone()),
-                            )
+                            .children(if self.zoomed_position == Some(DockPosition::Left) {
+                                None
+                            } else {
+                                Some(
+                                    div()
+                                        .flex()
+                                        .flex_none()
+                                        .overflow_hidden()
+                                        .child(self.left_dock.clone()),
+                                )
+                            })
                             // Panes
                             .child(
                                 div()
@@ -3657,7 +3663,26 @@ impl Render for Workspace {
                                     .child(self.right_dock.clone()),
                             ),
                     )
-                    .children(self.render_notifications(cx)),
+                    .children(self.render_notifications(cx))
+                    .children(self.zoomed.as_ref().and_then(|view| {
+                        let zoomed_view = view.upgrade()?;
+                        let div = div()
+                            .z_index(1)
+                            .absolute()
+                            .overflow_hidden()
+                            .border_color(colors.border)
+                            .bg(colors.background)
+                            .child(zoomed_view)
+                            .inset_0()
+                            .shadow_lg();
+
+                        Some(match self.zoomed_position {
+                            Some(DockPosition::Left) => div.right_2().border_r(),
+                            Some(DockPosition::Right) => div.left_2().border_l(),
+                            Some(DockPosition::Bottom) => div.top_2().border_t(),
+                            None => div.top_2().bottom_2().left_2().right_2().border(),
+                        })
+                    })),
             )
             .child(self.status_bar.clone())
     }