use crate::constraint::{Constraint, OccupiedSize};
use crate::element::Element;
use crate::sizing::SizeType;
pub(crate) fn resolve_dim(s: &SizeType, c: u32, min: &SizeType) -> u32 {
let raw = match s {
SizeType::Fix(k) => *k,
SizeType::Fill { .. } => c,
SizeType::Scale { ratio, min: m } => {
let scaled = ((c as f32) * ratio).round() as u32;
scaled.max(*m)
}
};
let floor = match min {
SizeType::Fix(k) => *k,
_ => 0,
};
raw.max(floor).min(c)
}
pub(crate) fn occupy(element: &Element, c: Constraint) -> OccupiedSize {
let w = resolve_dim(&element.size.width, c.w, &element.min_size.width);
let h = resolve_dim(&element.size.height, c.h, &element.min_size.height);
OccupiedSize { w, h }
}