diff --git a/examples/crossterm_demo.rs b/examples/crossterm_demo.rs index 3ea21f4..9bf3a64 100644 --- a/examples/crossterm_demo.rs +++ b/examples/crossterm_demo.rs @@ -30,6 +30,9 @@ struct Cli { /// time in ms between two ticks. #[argh(option, default = "250")] tick_rate: u64, + /// whether unicode symbols are used to improve the overall look of the app + #[argh(option, default = "true")] + enhanced_graphics: bool, } fn main() -> Result<(), Box> { @@ -48,10 +51,11 @@ fn main() -> Result<(), Box> { // Setup input handling let (tx, rx) = mpsc::channel(); + let tick_rate = Duration::from_millis(cli.tick_rate); thread::spawn(move || { loop { // poll for tick rate duration, if no events, sent tick event. - if event::poll(Duration::from_millis(cli.tick_rate)).unwrap() { + if event::poll(tick_rate).unwrap() { if let CEvent::Key(key) = event::read().unwrap() { tx.send(Event::Input(key)).unwrap(); } @@ -61,7 +65,7 @@ fn main() -> Result<(), Box> { } }); - let mut app = App::new("Crossterm Demo"); + let mut app = App::new("Crossterm Demo", cli.enhanced_graphics); terminal.clear()?; diff --git a/examples/curses_demo.rs b/examples/curses_demo.rs index 6875372..93068ab 100644 --- a/examples/curses_demo.rs +++ b/examples/curses_demo.rs @@ -18,6 +18,9 @@ struct Cli { /// time in ms between two ticks. #[argh(option, default = "250")] tick_rate: u64, + /// whether unicode symbols are used to improve the overall look of the app + #[argh(option, default = "true")] + enhanced_graphics: bool, } fn main() -> Result<(), Box> { @@ -32,7 +35,7 @@ fn main() -> Result<(), Box> { let mut terminal = Terminal::new(backend)?; terminal.hide_cursor()?; - let mut app = App::new("Curses demo"); + let mut app = App::new("Curses demo", cli.enhanced_graphics); let mut last_tick = Instant::now(); let tick_rate = Duration::from_millis(cli.tick_rate); diff --git a/examples/demo/app.rs b/examples/demo/app.rs index 158a3b0..4f880c1 100644 --- a/examples/demo/app.rs +++ b/examples/demo/app.rs @@ -108,17 +108,18 @@ pub struct App<'a> { pub should_quit: bool, pub tabs: TabsState<'a>, pub show_chart: bool, - pub progress: u16, + pub progress: f64, pub sparkline: Signal, pub tasks: StatefulList<&'a str>, pub logs: StatefulList<(&'a str, &'a str)>, pub signals: Signals, pub barchart: Vec<(&'a str, u64)>, pub servers: Vec>, + pub enhanced_graphics: bool, } impl<'a> App<'a> { - pub fn new(title: &'a str) -> App<'a> { + pub fn new(title: &'a str, enhanced_graphics: bool) -> App<'a> { let mut rand_signal = RandomSignal::new(0, 100); let sparkline_points = rand_signal.by_ref().take(300).collect(); let mut sin_signal = SinSignal::new(0.2, 3.0, 18.0); @@ -130,7 +131,7 @@ impl<'a> App<'a> { should_quit: false, tabs: TabsState::new(vec!["Tab0", "Tab1"]), show_chart: true, - progress: 0, + progress: 0.0, sparkline: Signal { source: rand_signal, points: sparkline_points, @@ -178,6 +179,7 @@ impl<'a> App<'a> { status: "Up", }, ], + enhanced_graphics, } } @@ -211,9 +213,9 @@ impl<'a> App<'a> { pub fn on_tick(&mut self) { // Update progress - self.progress += 5; - if self.progress > 100 { - self.progress = 0; + self.progress += 0.001; + if self.progress > 1.0 { + self.progress = 0.0; } self.sparkline.on_tick(); diff --git a/examples/demo/ui.rs b/examples/demo/ui.rs index 1fdee87..c84c0fe 100644 --- a/examples/demo/ui.rs +++ b/examples/demo/ui.rs @@ -1,12 +1,15 @@ -use tui::backend::Backend; -use tui::layout::{Constraint, Direction, Layout, Rect}; -use tui::style::{Color, Modifier, Style}; -use tui::widgets::canvas::{Canvas, Line, Map, MapResolution, Rectangle}; -use tui::widgets::{ - Axis, BarChart, Block, Borders, Chart, Dataset, Gauge, List, Marker, Paragraph, Row, Sparkline, - Table, Tabs, Text, +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, + style::{Color, Modifier, Style}, + symbols, + widgets::canvas::{Canvas, Line, Map, MapResolution, Rectangle}, + widgets::{ + Axis, BarChart, Block, Borders, Chart, Dataset, Gauge, List, Paragraph, Row, Sparkline, + Table, Tabs, Text, + }, + Frame, }; -use tui::Frame; use crate::demo::App; @@ -58,7 +61,7 @@ where let block = Block::default().borders(Borders::ALL).title("Graphs"); f.render_widget(block, area); - let label = format!("{} / 100", app.progress); + let label = format!("{:.2}%", app.progress * 100.0); let gauge = Gauge::default() .block(Block::default().title("Gauge:")) .style( @@ -68,13 +71,18 @@ where .modifier(Modifier::ITALIC | Modifier::BOLD), ) .label(&label) - .percent(app.progress); + .ratio(app.progress); f.render_widget(gauge, chunks[0]); let sparkline = Sparkline::default() .block(Block::default().title("Sparkline:")) .style(Style::default().fg(Color::Green)) - .data(&app.sparkline.points); + .data(&app.sparkline.points) + .bar_set(if app.enhanced_graphics { + symbols::bar::NINE_LEVELS + } else { + symbols::bar::THREE_LEVELS + }); f.render_widget(sparkline, chunks[1]); } @@ -134,6 +142,11 @@ where .data(&app.barchart) .bar_width(3) .bar_gap(2) + .bar_set(if app.enhanced_graphics { + symbols::bar::NINE_LEVELS + } else { + symbols::bar::THREE_LEVELS + }) .value_style( Style::default() .fg(Color::Black) @@ -153,12 +166,16 @@ where let datasets = [ Dataset::default() .name("data2") - .marker(Marker::Dot) + .marker(symbols::Marker::Dot) .style(Style::default().fg(Color::Cyan)) .data(&app.signals.sin1.points), Dataset::default() .name("data3") - .marker(Marker::Braille) + .marker(if app.enhanced_graphics { + symbols::Marker::Braille + } else { + symbols::Marker::Dot + }) .style(Style::default().fg(Color::Yellow)) .data(&app.signals.sin2.points), ]; @@ -285,6 +302,11 @@ where ctx.print(server.coords.1, server.coords.0, "X", color); } }) + .marker(if app.enhanced_graphics { + symbols::Marker::Braille + } else { + symbols::Marker::Dot + }) .x_bounds([-180.0, 180.0]) .y_bounds([-90.0, 90.0]); f.render_widget(map, chunks[1]); diff --git a/examples/rustbox_demo.rs b/examples/rustbox_demo.rs index 7182d35..72d0601 100644 --- a/examples/rustbox_demo.rs +++ b/examples/rustbox_demo.rs @@ -17,6 +17,9 @@ struct Cli { /// time in ms between two ticks. #[argh(option, default = "250")] tick_rate: u64, + /// whether unicode symbols are used to improve the overall look of the app + #[argh(option, default = "true")] + enhanced_graphics: bool, } fn main() -> Result<(), Box> { @@ -26,7 +29,7 @@ fn main() -> Result<(), Box> { let mut terminal = Terminal::new(backend)?; terminal.hide_cursor()?; - let mut app = App::new("Rustbox demo"); + let mut app = App::new("Rustbox demo", cli.enhanced_graphics); let mut last_tick = Instant::now(); let tick_rate = Duration::from_millis(cli.tick_rate); diff --git a/examples/termion_demo.rs b/examples/termion_demo.rs index af9bbf1..ed6130c 100644 --- a/examples/termion_demo.rs +++ b/examples/termion_demo.rs @@ -17,6 +17,9 @@ struct Cli { /// time in ms between two ticks. #[argh(option, default = "250")] tick_rate: u64, + /// whether unicode symbols are used to improve the overall look of the app + #[argh(option, default = "true")] + enhanced_graphics: bool, } fn main() -> Result<(), Box> { @@ -34,7 +37,7 @@ fn main() -> Result<(), Box> { let mut terminal = Terminal::new(backend)?; terminal.hide_cursor()?; - let mut app = App::new("Termion demo"); + let mut app = App::new("Termion demo", cli.enhanced_graphics); loop { terminal.draw(|mut f| ui::draw(&mut f, &mut app))?;