Support exact ratios for layout constraints

This commit is contained in:
David Flemström 2019-02-25 19:03:35 +01:00 committed by Florian Dehau
parent e037db076c
commit d360cd3434

View File

@ -24,6 +24,7 @@ pub enum Direction {
pub enum Constraint { pub enum Constraint {
// TODO: enforce range 0 - 100 // TODO: enforce range 0 - 100
Percentage(u16), Percentage(u16),
Ratio(u32, u32),
Length(u16), Length(u16),
Max(u16), Max(u16),
Min(u16), Min(u16),
@ -159,6 +160,11 @@ fn split(area: Rect, layout: &Layout) -> Vec<Rect> {
Constraint::Percentage(v) => { Constraint::Percentage(v) => {
elements[i].width | EQ(WEAK) | (f64::from(v * dest_area.width) / 100.0) elements[i].width | EQ(WEAK) | (f64::from(v * dest_area.width) / 100.0)
} }
Constraint::Ratio(n, d) => {
elements[i].width
| EQ(WEAK)
| (f64::from(dest_area.width) * f64::from(n) / f64::from(d))
}
Constraint::Min(v) => elements[i].width | GE(WEAK) | f64::from(v), Constraint::Min(v) => elements[i].width | GE(WEAK) | f64::from(v),
Constraint::Max(v) => elements[i].width | LE(WEAK) | f64::from(v), Constraint::Max(v) => elements[i].width | LE(WEAK) | f64::from(v),
}); });
@ -176,6 +182,11 @@ fn split(area: Rect, layout: &Layout) -> Vec<Rect> {
Constraint::Percentage(v) => { Constraint::Percentage(v) => {
elements[i].height | EQ(WEAK) | (f64::from(v * dest_area.height) / 100.0) elements[i].height | EQ(WEAK) | (f64::from(v * dest_area.height) / 100.0)
} }
Constraint::Ratio(n, d) => {
elements[i].height
| EQ(WEAK)
| (f64::from(dest_area.height) * f64::from(n) / f64::from(d))
}
Constraint::Min(v) => elements[i].height | GE(WEAK) | f64::from(v), Constraint::Min(v) => elements[i].height | GE(WEAK) | f64::from(v),
Constraint::Max(v) => elements[i].height | LE(WEAK) | f64::from(v), Constraint::Max(v) => elements[i].height | LE(WEAK) | f64::from(v),
}); });