Set Pane Size

Nate Butler created

Change summary

crates/workspace2/src/dock.rs       | 14 +++++++++++---
crates/workspace2/src/workspace2.rs | 22 +++++++++++++++++++---
2 files changed, 30 insertions(+), 6 deletions(-)

Detailed changes

crates/workspace2/src/dock.rs 🔗

@@ -1,7 +1,8 @@
 use crate::{status_bar::StatusItemView, Axis, Workspace};
 use gpui::{
-    div, Action, AnyView, AppContext, Div, Entity, EntityId, EventEmitter, FocusHandle,
-    ParentElement, Render, Styled, Subscription, View, ViewContext, WeakView, WindowContext,
+    div, px, Action, AnyView, AppContext, Component, Div, Entity, EntityId, EventEmitter,
+    FocusHandle, ParentElement, Render, Styled, Subscription, View, ViewContext, WeakView,
+    WindowContext,
 };
 use schemars::JsonSchema;
 use serde::{Deserialize, Serialize};
@@ -429,7 +430,14 @@ impl Render for Dock {
 
     fn render(&mut self, cx: &mut ViewContext<Self>) -> Self::Element {
         if let Some(entry) = self.visible_entry() {
-            div().size_full().child(entry.panel.to_any())
+            let size = entry.panel.size(cx);
+
+            div()
+                .map(|this| match self.position().axis() {
+                    Axis::Horizontal => this.w(px(size)).h_full(),
+                    Axis::Vertical => this.h(px(size)).w_full(),
+                })
+                .child(entry.panel.to_any())
         } else {
             div()
         }

crates/workspace2/src/workspace2.rs 🔗

@@ -69,7 +69,8 @@ use std::{
 };
 use theme2::ActiveTheme;
 pub use toolbar::{ToolbarItemLocation, ToolbarItemView};
-use ui::{h_stack, Button, ButtonVariant, KeyBinding, Label, TextColor, TextTooltip};
+use ui::TextColor;
+use ui::{h_stack, Button, ButtonVariant, KeyBinding, Label, TextTooltip};
 use util::ResultExt;
 use uuid::Uuid;
 pub use workspace_settings::{AutosaveSetting, WorkspaceSettings};
@@ -3744,7 +3745,15 @@ impl Render for Workspace {
                             .flex_row()
                             .flex_1()
                             .h_full()
-                            .child(div().flex().flex_1().child(self.left_dock.clone()))
+                            // Left Dock
+                            .child(
+                                div()
+                                    .flex()
+                                    .flex_none()
+                                    .overflow_hidden()
+                                    .child(self.left_dock.clone()),
+                            )
+                            // Panes
                             .child(
                                 div()
                                     .flex()
@@ -3761,7 +3770,14 @@ impl Render for Workspace {
                                     ))
                                     .child(div().flex().flex_1().child(self.bottom_dock.clone())),
                             )
-                            .child(div().flex().flex_1().child(self.right_dock.clone())),
+                            // Right Dock
+                            .child(
+                                div()
+                                    .flex()
+                                    .flex_none()
+                                    .overflow_hidden()
+                                    .child(self.right_dock.clone()),
+                            ),
                     ),
             )
             .child(self.status_bar.clone())