atmos/kernel/
glyph_fill.rs1extern crate alloc;
9use alloc::vec::Vec;
10
11pub fn nonzero_spans(crossings: &mut [(f32, i8)], out: &mut Vec<(f32, f32)>) {
15 out.clear();
16 crossings.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(core::cmp::Ordering::Equal));
17 let mut winding: i32 = 0;
18 let mut start = 0.0f32;
19 for &(x, dir) in crossings.iter() {
20 let before = winding;
21 winding += dir as i32;
22 if before == 0 && winding != 0 {
23 start = x;
24 } else if before != 0 && winding == 0 && x > start {
25 out.push((start, x));
26 }
27 }
28}