diff options
Diffstat (limited to 'src/griph')
-rw-r--r-- | src/griph/mod.rs | 51 |
1 files changed, 30 insertions, 21 deletions
diff --git a/src/griph/mod.rs b/src/griph/mod.rs index 6b84233..b1449f5 100644 --- a/src/griph/mod.rs +++ b/src/griph/mod.rs @@ -25,7 +25,7 @@ const WIDTH: usize = 256; const HEIGHT: usize = 160; const SIZE: usize = WIDTH * HEIGHT; -pub fn make_1line(min: usize, max: usize, values: &[usize]) -> Gif { +pub fn make_1line(min: usize, max: usize, values: &[Option<usize>]) -> Gif { let range = max - min; // this assumes a range of values that is >1 per pixel let vpp = range / HEIGHT; @@ -45,7 +45,12 @@ pub fn make_1line(min: usize, max: usize, values: &[usize]) -> Gif { standard } -pub fn make_2line(min: usize, max: usize, values1: &[usize], values2: &[usize]) -> Gif { +pub fn make_2line( + min: usize, + max: usize, + values1: &[Option<usize>], + values2: &[Option<usize>], +) -> Gif { let range = max - min; // this assumes a range of values that is >1 per pixel let vpp = range / HEIGHT; @@ -85,39 +90,43 @@ fn draw_grid(raster: &mut [u8]) { } } -fn draw_line(raster: &mut [u8], values: &[usize], vpp: usize, colour: u8) { +fn draw_line(raster: &mut [u8], values: &[Option<usize>], vpp: usize, colour: u8) { // Draw Line // this will be discontinuous and i think that's okay. we // could make it a proper line by keeping track what value // was last and drawing the whole vertical there - for (x, value) in values.iter().enumerate() { - let value_height = value / vpp; - if value_height > (HEIGHT - 1) { - continue; + for (x, maybe) in values.iter().enumerate() { + if let Some(value) = maybe { + let value_height = value / vpp; + if value_height > (HEIGHT - 1) { + continue; + } + let y_val = (HEIGHT - 1) - value_height; + + raster[y_val * WIDTH + x] = colour; } - let y_val = (HEIGHT - 1) - value_height; - - raster[y_val * WIDTH + x] = colour; } } fn draw_line_underfill( raster: &mut [u8], - values: &[usize], + values: &[Option<usize>], vpp: usize, colour: u8, colour_fill: u8, ) { - for (x, value) in values.iter().enumerate() { - let value_height = value / vpp; - if value_height > (HEIGHT - 1) { - continue; - } - let y_val = (HEIGHT - 1) - value_height; - - for y in y_val + 1..HEIGHT { - raster[y * WIDTH + x] = colour_fill; + for (x, maybe) in values.iter().enumerate() { + if let Some(value) = maybe { + let value_height = value / vpp; + if value_height > (HEIGHT - 1) { + continue; + } + let y_val = (HEIGHT - 1) - value_height; + + for y in y_val + 1..HEIGHT { + raster[y * WIDTH + x] = colour_fill; + } + raster[y_val * WIDTH + x] = colour; } - raster[y_val * WIDTH + x] = colour; } } |