mirror of
https://github.com/bobwen-dev/hunter
synced 2025-04-12 00:55:41 +02:00
fix size calculation of HBox widgets
This commit is contained in:
parent
a20fd73168
commit
355d9a3101
28
src/hbox.rs
28
src/hbox.rs
@ -89,32 +89,30 @@ impl<T> HBox<T> where T: Widget + PartialEq {
|
|||||||
Ok(ratios)
|
Ok(ratios)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn calculate_coordinates(&self)
|
pub fn calculate_coordinates(&self) -> HResult<Vec<Coordinates>> {
|
||||||
-> HResult<Vec<Coordinates>> {
|
|
||||||
let box_coords = self.get_coordinates()?;
|
let box_coords = self.get_coordinates()?;
|
||||||
let box_xsize = box_coords.xsize();
|
let box_xsize = box_coords.xsize();
|
||||||
let box_ysize = box_coords.ysize();
|
let box_ysize = box_coords.ysize();
|
||||||
let box_top = box_coords.top().y();
|
let box_top = box_coords.top().y();
|
||||||
|
|
||||||
let mut ratios = match &self.ratios {
|
let ratios = match self.ratios.clone() {
|
||||||
Some(ratios) => ratios.clone(),
|
Some(ratios) => ratios,
|
||||||
None => self.calculate_equal_ratios()?
|
None => self.calculate_equal_ratios()?
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let ratios_sum: usize = ratios.iter().sum();
|
||||||
|
|
||||||
|
let mut ratios = ratios.iter()
|
||||||
|
.map(|&r| (r as f64 * box_xsize as f64 / ratios_sum as f64).round() as usize)
|
||||||
|
.map(|r| if r < 10 { 10 } else { r })
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
let mut ratios_sum: usize = ratios.iter().sum();
|
let mut ratios_sum: usize = ratios.iter().sum();
|
||||||
|
|
||||||
ratios = ratios.iter().map(|&r|
|
while ratios_sum + ratios.len() > box_xsize as usize + 1 {
|
||||||
(r as f64 * box_xsize as f64 / ratios_sum as f64).round() as usize).collect();
|
|
||||||
|
|
||||||
for r in &mut ratios {
|
|
||||||
if *r < 10 { *r = 10 }
|
|
||||||
}
|
|
||||||
|
|
||||||
ratios_sum = ratios.iter().sum();
|
|
||||||
|
|
||||||
while ratios_sum + ratios.len() > box_xsize as usize {
|
|
||||||
let ratios_max = ratios.iter()
|
let ratios_max = ratios.iter()
|
||||||
.position(|&r| r == *ratios.iter().max().unwrap()).unwrap();
|
.position(|&r| r == *ratios.iter().max().unwrap())
|
||||||
|
.unwrap();
|
||||||
ratios[ratios_max] = ratios[ratios_max] - 1;
|
ratios[ratios_max] = ratios[ratios_max] - 1;
|
||||||
ratios_sum -= 1;
|
ratios_sum -= 1;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user