From 19b1df3315fd7d291d8188899274c6e51f3c337f Mon Sep 17 00:00:00 2001 From: gennyble Date: Thu, 16 Oct 2025 10:29:39 -0500 Subject: change cpu graph to use continuous line --- src/griph/mod.rs | 59 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 8 deletions(-) (limited to 'src/griph') diff --git a/src/griph/mod.rs b/src/griph/mod.rs index 09879f3..bf496fd 100644 --- a/src/griph/mod.rs +++ b/src/griph/mod.rs @@ -10,7 +10,7 @@ pub const DARK_PALETTE: &[u8] = &[ 48, 192, 48, // Secondary 2 Colour - Green 96, 96, 224, // Primary Underfill - Light Blue 48, 128, 48, // Secondary Underfill - Lesser Green - 144, 144, 144 // Graphline Underfill - 16 * 9 gray + 255, 255, 255 // Graphline Underfill - 16 * 9 gray ]; const BACKGROUND: u8 = 0; @@ -28,6 +28,7 @@ const HEIGHT: usize = 160; const SIZE: usize = WIDTH * HEIGHT; pub enum Style { + Discontinuous, Line, UnderfilledLine, } @@ -44,10 +45,15 @@ pub fn make_1line(min: usize, max: usize, values: &[Option], style: Style draw_line(&mut raster, values, vpp, LINE); let plt = match style { - Style::Line => { + Style::Discontinuous => { draw_line(&mut raster, values, vpp, LINE); &DARK_PALETTE[0..12] } + Style::Line => { + draw_line_continuous(&mut raster, values, vpp, LINE); + //&DARK_PALETTE[0..12] + DARK_PALETTE + } Style::UnderfilledLine => { draw_line_underfill(&mut raster, values, vpp, LINE_FILL, LINE); &DARK_PALETTE @@ -143,6 +149,7 @@ fn draw_line(raster: &mut [u8], values: &[Option], vpp: f32, colour: u8) if let Some(value) = maybe { let value_height = (*value as f32 / vpp) as usize; if value_height > (HEIGHT - 1) { + //TODO: this causes too-high values not to draw at all; gaps continue; } let y_val = (HEIGHT - 1) - value_height; @@ -152,6 +159,41 @@ fn draw_line(raster: &mut [u8], values: &[Option], vpp: f32, colour: u8) } } +fn draw_line_continuous(raster: &mut [u8], values: &[Option], vpp: f32, colour: u8) { + let mut last_value = None; + + for (x, maybe) in values.iter().enumerate() { + if let Some(value) = maybe { + let value_height = (*value as f32 / vpp) as usize; + let overflow = value_height > HEIGHT - 1; + let y_val = (HEIGHT - 1) - value_height.min(HEIGHT - 1); + + match last_value { + Some(last) if last > y_val => { + for y_offset in y_val..last { + raster[y_offset * WIDTH + x] = colour; + } + raster[y_val * WIDTH + x] = colour; + } + Some(last) if last < y_val => { + for y_offset in last..y_val { + raster[y_offset * WIDTH + x - 1] = colour; + } + raster[y_val * WIDTH + x] = colour; + } + _ => { + // This is the None case and the equal value case + raster[y_val * WIDTH + x] = colour; + } + } + + last_value = Some(y_val); + } else { + last_value = None; + } + } +} + fn draw_line_underfill( raster: &mut [u8], values: &[Option], @@ -162,15 +204,16 @@ fn draw_line_underfill( for (x, maybe) in values.iter().enumerate() { if let Some(value) = maybe { let value_height = (*value as f32 / vpp) as usize; - if value_height > (HEIGHT - 1) { - continue; - } - let y_val = (HEIGHT - 1) - value_height; + let overflow = value_height > HEIGHT - 1; + let y_val = (HEIGHT - 1) - value_height.min(HEIGHT - 1); - for y in y_val + 1..HEIGHT { + for y in y_val..HEIGHT { raster[y * WIDTH + x] = colour_fill; } - raster[y_val * WIDTH + x] = colour; + + if !overflow { + raster[y_val * WIDTH + x] = colour; + } } } } -- cgit 1.4.1-3-g733a5