1use rustui::*;
2use std::{thread, time};
3
4const RENDERING_RATE: time::Duration = time::Duration::from_millis(16);
5const INPUT_CAPTURING_RATE: time::Duration = time::Duration::from_millis(10); fn main() -> Result<(), Box<dyn std::error::Error>> {
8 let mut win = Window::new(false)?;
9 win.initialize(RENDERING_RATE)?; let input_rx = InputListener::new(INPUT_CAPTURING_RATE); loop {
13 if let Ok(InputEvent::Key(Key::Char('q'))) = input_rx.try_recv() {
15 break; }
17
18 win.draw(|canvas| {
20 canvas.set_named_border(
21 "COLORS",
22 Align::Right,
23 Attr::NORMAL,
24 Color::White,
25 Color::default(),
26 );
27
28 let outer_radius: i32 = 12;
30 let inner_radius: i32 = 6;
31 for hue in 0..360 {
32 for radius in inner_radius..outer_radius {
33 let x = (radius as f32 * (hue as f32).to_radians().cos()) as i32;
34 let y = (radius as f32 * (hue as f32).to_radians().sin()) as i32;
35 let sat = 255 * (radius - inner_radius - outer_radius)
36 / (outer_radius - inner_radius);
37 let color = Color::HSV((hue as f32 / 360.0 * 255.0) as u8, sat as u8, 255);
38 canvas.set_str(
39 ((canvas.width / 2) as i32 + x * 2) as usize,
40 ((canvas.height / 2) as i32 + y) as usize,
41 " ",
42 Attr::NORMAL,
43 Color::default(),
44 color,
45 Align::Left,
46 );
47 }
48 }
49 canvas.set_str(
50 canvas.width / 2 + 1,
51 canvas.height / 2,
52 "Color Circle",
53 Attr::BOLD,
54 Color::White,
55 Color::default(),
56 Align::Center,
57 );
58 canvas.set_str(
59 3,
60 2,
61 "Press 'q' to quit",
62 Attr::BOLD,
63 Color::White,
64 Color::default(),
65 Align::Left,
66 );
67 })?;
68
69 thread::sleep(time::Duration::from_millis(100)); }
71 Ok(())
72}