diff --git a/src/main.rs b/src/main.rs index f93fce2..aa16053 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,6 +12,8 @@ use crossterm::{ terminal::{self, ClearType}, }; +mod symbols; + fn main() -> io::Result<()> { let mut stdout = io::stdout(); @@ -61,17 +63,47 @@ fn main() -> io::Result<()> { } fn render_frame() -> io::Result<()> { - let mut stdout = io::stdout(); let (width, height) = terminal::size()?; - // Render red X at middle of screen - queue!( - stdout, - cursor::MoveTo(width / 2, height / 2), - style::SetForegroundColor(Color::Red) - )?; + // Display centered 16:20 in white + let text_width = 6 + 7 + 6 + 7 + 6; + let text_height = 5; + let color = Color::White; - write!(stdout, "X")?; + let x = width / 2 - text_width / 2; + let y = height / 2 - text_height / 2; + + draw_symbol('1', x - 0 + 0 * 7, y, color)?; + draw_symbol('6', x - 0 + 1 * 7, y, color)?; + draw_symbol(':', x - 1 + 2 * 7, y, color)?; + draw_symbol('2', x - 2 + 3 * 7, y, color)?; + draw_symbol('0', x - 2 + 4 * 7, y, color)?; + + return Ok(()); +} + +fn draw_symbol(symbol: char, x: u16, y: u16, color: Color) -> io::Result<()> { + let mut stdout = io::stdout(); + + let data = symbols::symbol_to_render_data(symbol); + + for oy in 0..data.len() { + for ox in 0..data[oy].len() { + if data[oy][ox] { + let cx = ox as u16; + let cy = oy as u16; + + // Render cursor at position by setting background color and using space + queue!( + stdout, + cursor::MoveTo(x + cx, y + cy), + style::SetBackgroundColor(color) + )?; + write!(stdout, " ")?; + queue!(stdout, style::ResetColor)?; + } + } + } return Ok(()); } diff --git a/src/symbols.rs b/src/symbols.rs new file mode 100644 index 0000000..009e155 --- /dev/null +++ b/src/symbols.rs @@ -0,0 +1,160 @@ +pub fn symbol_to_render_data(ch: char) -> [[bool; 6]; 5] { + match ch { + '1' => ONE, + '2' => TWO, + '3' => THREE, + '4' => FOUR, + '5' => FIVE, + '6' => SIX, + '7' => SEVEN, + '8' => EIGHT, + '9' => NINE, + '0' => ZERO, + ':' => DIV, + '-' => DASH, + ' ' => SPACE, + 'A' => A, + 'P' => P, + 'M' => M, + _ => ERR, + } +} + +const O: bool = false; +const X: bool = true; + +const ONE: [[bool; 6]; 5] = [ + [O, O, O, O, X, X], + [O, O, O, O, X, X], + [O, O, O, O, X, X], + [O, O, O, O, X, X], + [O, O, O, O, X, X], +]; + +const TWO: [[bool; 6]; 5] = [ + [X, X, X, X, X, X], + [O, O, O, O, X, X], + [X, X, X, X, X, X], + [X, X, O, O, O, O], + [X, X, X, X, X, X], +]; + +const THREE: [[bool; 6]; 5] = [ + [X, X, X, X, X, X], + [O, O, O, O, X, X], + [X, X, X, X, X, X], + [O, O, O, O, X, X], + [X, X, X, X, X, X], +]; + +const FOUR: [[bool; 6]; 5] = [ + [X, X, O, O, X, X], + [X, X, O, O, X, X], + [X, X, X, X, X, X], + [O, O, O, O, X, X], + [O, O, O, O, X, X], +]; + +const FIVE: [[bool; 6]; 5] = [ + [X, X, X, X, X, X], + [X, X, O, O, O, O], + [X, X, X, X, X, X], + [O, O, O, O, X, X], + [X, X, X, X, X, X], +]; + +const SIX: [[bool; 6]; 5] = [ + [X, X, X, X, X, X], + [X, X, O, O, O, O], + [X, X, X, X, X, X], + [X, X, O, O, X, X], + [X, X, X, X, X, X], +]; + +const SEVEN: [[bool; 6]; 5] = [ + [X, X, X, X, X, X], + [O, O, O, O, X, X], + [O, O, O, O, X, X], + [O, O, O, O, X, X], + [O, O, O, O, X, X], +]; + +const EIGHT: [[bool; 6]; 5] = [ + [X, X, X, X, X, X], + [X, X, O, O, X, X], + [X, X, X, X, X, X], + [X, X, O, O, X, X], + [X, X, X, X, X, X], +]; + +const NINE: [[bool; 6]; 5] = [ + [X, X, X, X, X, X], + [X, X, O, O, X, X], + [X, X, X, X, X, X], + [O, O, O, O, X, X], + [X, X, X, X, X, X], +]; + +const ZERO: [[bool; 6]; 5] = [ + [X, X, X, X, X, X], + [X, X, O, O, X, X], + [X, X, O, O, X, X], + [X, X, O, O, X, X], + [X, X, X, X, X, X], +]; + +const DIV: [[bool; 6]; 5] = [ + [O, O, O, O, O, O], + [O, O, X, X, O, O], + [O, O, O, O, O, O], + [O, O, X, X, O, O], + [O, O, O, O, O, O], +]; + +const DASH: [[bool; 6]; 5] = [ + [O, O, O, O, O, O], + [O, O, O, O, O, O], + [O, X, X, X, X, O], + [O, O, O, O, O, O], + [O, O, O, O, O, O], +]; + +const ERR: [[bool; 6]; 5] = [ + [X, X, X, X, X, X], + [X, X, O, O, O, O], + [X, X, X, X, X, X], + [X, X, O, O, O, O], + [X, X, X, X, X, X], +]; + +const SPACE: [[bool; 6]; 5] = [ + [O, O, O, O, O, O], + [O, O, O, O, O, O], + [O, O, O, O, O, O], + [O, O, O, O, O, O], + [O, O, O, O, O, O], +]; + +const A: [[bool; 6]; 5] = [ + [X, X, X, X, X, X], + [X, X, O, O, X, X], + [X, X, X, X, X, X], + [X, X, O, O, X, X], + [X, X, O, O, X, X], +]; + +const P: [[bool; 6]; 5] = [ + [X, X, X, X, X, X], + [X, X, O, O, X, X], + [X, X, X, X, X, X], + [X, X, O, O, O, O], + [X, X, O, O, O, O], +]; + +const M: [[bool; 6]; 5] = [ + [X, X, X, X, X, X], + [X, X, O, X, O, X], + [X, X, O, X, O, X], + [X, X, O, X, O, X], + [X, X, O, X, O, X], +];