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:
parent
12783a588c
commit
eef99f059d
2 changed files with 12 additions and 5 deletions
|
@ -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| {
|
||||||
|
|
|
@ -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()));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue