Make flex elements fill available space when they contain a float

Co-Authored-By: Antonio Scandurra <me@as-cii.com>
This commit is contained in:
Nathan Sobo 2022-05-10 06:14:30 -06:00
parent 12783a588c
commit eef99f059d
2 changed files with 12 additions and 5 deletions

View file

@ -378,7 +378,6 @@ impl ContactsPanel {
.contained() .contained()
.with_style(theme.edit_contact.container) .with_style(theme.edit_contact.container)
.aligned() .aligned()
.flex_float()
.boxed() .boxed()
}) })
.on_click(move |_, cx| { .on_click(move |_, cx| {

View file

@ -117,14 +117,15 @@ impl Element for Flex {
) -> (Vector2F, Self::LayoutState) { ) -> (Vector2F, Self::LayoutState) {
let mut total_flex = None; let mut total_flex = None;
let mut fixed_space = 0.0; let mut fixed_space = 0.0;
let mut contains_float = false;
let cross_axis = self.axis.invert(); let cross_axis = self.axis.invert();
let mut cross_axis_max: f32 = 0.0; let mut cross_axis_max: f32 = 0.0;
for child in &mut self.children { for child in &mut self.children {
if let Some(flex) = child let metadata = child.metadata::<FlexParentData>();
.metadata::<FlexParentData>() contains_float |= metadata.map_or(false, |metadata| metadata.float);
.and_then(|metadata| metadata.flex.map(|(flex, _)| flex))
{ if let Some(flex) = metadata.and_then(|metadata| metadata.flex.map(|(flex, _)| flex)) {
*total_flex.get_or_insert(0.) += flex; *total_flex.get_or_insert(0.) += flex;
} else { } else {
let child_constraint = match self.axis { let child_constraint = match self.axis {
@ -177,6 +178,13 @@ impl Element for Flex {
} }
}; };
if contains_float {
match self.axis {
Axis::Horizontal => size.set_x(size.x().max(constraint.max.x())),
Axis::Vertical => size.set_y(size.y().max(constraint.max.y())),
}
}
if constraint.min.x().is_finite() { if constraint.min.x().is_finite() {
size.set_x(size.x().max(constraint.min.x())); size.set_x(size.x().max(constraint.min.x()));
} }