use cranpose_ui_graphics::whole;
pub fn round_to_px(value: f32, density: f32) -> f32 {
if density <= 0.0 || !density.is_finite() {
return value;
}
round_to_grid(value, density)
}
pub fn round_to_grid(value: f32, density: f32) -> f32 {
if density == 1.0 {
return whole::floor(value + 0.5);
}
whole::floor(value * density + 0.5) / density
}
pub fn ceil_to_px(value: f32, density: f32) -> f32 {
if density <= 0.0 || !density.is_finite() {
return value;
}
ceil_to_grid(value, density)
}
pub fn ceil_to_grid(value: f32, density: f32) -> f32 {
if density == 1.0 {
return whole::ceil(value);
}
let scaled = value * density;
let pixels = whole::ceil(scaled);
if scaled >= pixels {
return value;
}
let below = (pixels - 1.0) / density;
if below >= value {
below
} else {
pixels / density
}
}
#[cfg(test)]
#[path = "tests/pixels_tests.rs"]
mod tests;