/// Work-around for `f32::clamp()` being unstable pub(crate) trait StableClamp { fn clamp_(self, min: f32, max: f32) -> f32; } impl StableClamp for f32 { fn clamp_(self, min: f32, max: f32) -> f32 { assert!(min <= max); let mut x = self; if x < min { x = min; } if x > max { x = max; } x } }