Rename Drawable::boxed to into_element and make containers generic

Multi-element are now generic over any drawable child, which can be converted
into an element.

Co-Authored-By: Nathan Sobo <nathan@zed.dev>
Co-Authored-By: Max Brunsfeld <max@zed.dev>
This commit is contained in:
Antonio Scandurra 2023-04-21 18:36:21 +02:00 committed by Nathan Sobo
parent 4d433663bd
commit 03619dfa55
80 changed files with 1132 additions and 1434 deletions

View file

@ -5,7 +5,7 @@ use serde::Deserialize;
use collections::HashMap;
use gpui::{
actions,
elements::{ChildView, Container, Empty, MouseEventHandler, ParentElement, Side, Stack},
elements::{ChildView, Empty, MouseEventHandler, ParentElement, Side, Stack},
geometry::vector::Vector2F,
impl_internal_actions,
platform::{CursorStyle, MouseButton},
@ -348,7 +348,8 @@ impl Dock {
enum DockResizeHandle {}
let resizable = Container::new(ChildView::new(&self.pane, cx).boxed())
let resizable = ChildView::new(&self.pane, cx)
.contained()
.with_style(panel_style)
.with_resize_handle::<DockResizeHandle>(
resize_side as usize,
@ -367,26 +368,21 @@ impl Dock {
});
if anchor == DockAnchor::Right {
resizable
.constrained()
.dynamically(|constraint, _, cx| {
SizeConstraint::new(
Vector2F::new(20., constraint.min.y()),
Vector2F::new(cx.window_size().x() * 0.8, constraint.max.y()),
)
})
.boxed()
resizable.constrained().dynamically(|constraint, _, cx| {
SizeConstraint::new(
Vector2F::new(20., constraint.min.y()),
Vector2F::new(cx.window_size().x() * 0.8, constraint.max.y()),
)
})
} else {
resizable
.constrained()
.dynamically(|constraint, _, cx| {
SizeConstraint::new(
Vector2F::new(constraint.min.x(), 50.),
Vector2F::new(constraint.max.x(), cx.window_size().y() * 0.8),
)
})
.boxed()
resizable.constrained().dynamically(|constraint, _, cx| {
SizeConstraint::new(
Vector2F::new(constraint.min.x(), 50.),
Vector2F::new(constraint.max.x(), cx.window_size().y() * 0.8),
)
})
}
.into_element()
}
DockAnchor::Expanded => {
enum ExpandedDockWash {}
@ -398,27 +394,24 @@ impl Dock {
Empty::new()
.contained()
.with_background_color(style.wash_color)
.boxed()
})
.capture_all()
.on_down(MouseButton::Left, |_, _, cx| {
cx.dispatch_action(HideDock);
})
.with_cursor_style(CursorStyle::Arrow)
.boxed(),
.with_cursor_style(CursorStyle::Arrow),
)
.with_child(
MouseEventHandler::<ExpandedDockPane, _>::new(0, cx, |_state, cx| {
ChildView::new(&self.pane, cx).boxed()
ChildView::new(&self.pane, cx)
})
// Make sure all events directly under the dock pane
// are captured
.capture_all()
.contained()
.with_style(style.maximized)
.boxed(),
.with_style(style.maximized),
)
.boxed()
.into_element()
}
})
}