1
0
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:
rabite 2020-05-25 20:04:34 +02:00
parent a20fd73168
commit 355d9a3101

View File

@ -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;
} }