feat: render fixed time

This commit is contained in:
Pihkaal
2024-01-18 16:33:13 +01:00
parent ae602a9b49
commit 3fe23adb17
2 changed files with 200 additions and 8 deletions

View File

@@ -12,6 +12,8 @@ use crossterm::{
terminal::{self, ClearType}, terminal::{self, ClearType},
}; };
mod symbols;
fn main() -> io::Result<()> { fn main() -> io::Result<()> {
let mut stdout = io::stdout(); let mut stdout = io::stdout();
@@ -61,17 +63,47 @@ fn main() -> io::Result<()> {
} }
fn render_frame() -> io::Result<()> { fn render_frame() -> io::Result<()> {
let mut stdout = io::stdout();
let (width, height) = terminal::size()?; let (width, height) = terminal::size()?;
// Render red X at middle of screen // Display centered 16:20 in white
queue!( let text_width = 6 + 7 + 6 + 7 + 6;
stdout, let text_height = 5;
cursor::MoveTo(width / 2, height / 2), let color = Color::White;
style::SetForegroundColor(Color::Red)
)?;
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(()); return Ok(());
} }

160
src/symbols.rs Normal file
View File

@@ -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],
];