view/
view.rs

1//! Demonstrates mutable views.
2
3use tuit::prelude::*;
4use tuit::std::stdout_render::StdoutRenderer;
5use tuit::style::Colour;
6use tuit::terminal::ConstantSize;
7use tuit::terminal::Rectangle;
8use tuit::widgets::builtins::{Ruler, Uv};
9use tuit::widgets::Direction;
10
11#[cfg(not(feature = "ansi_renderer"))]
12fn main() {
13    println!("You must apply the stdout_render feature to view this example. Use `cargo --features stdout_render`");
14}
15
16// a regression causes this
17// lint to return a false-positive,
18// so I disabled it.
19#[allow(clippy::needless_borrows_for_generic_args)]
20#[cfg(feature = "ansi_renderer")]
21fn main() -> anyhow::Result<()> {
22    let mut terminal: ConstantSize<100, 20> = ConstantSize::new();
23
24    let uv = Uv;
25
26    uv.drawn(&mut terminal)?;
27
28    let ruler = Ruler::new(10, Direction::Left).expect("Can't fail");
29    ruler.drawn(&mut terminal)?;
30    
31    let ruler = Ruler::new(10, Direction::Down).expect("Can't fail");
32    ruler.drawn(&mut terminal)?;
33
34    let mut view_text = "V I E W T E X T ".chars().cycle();
35    let mut view = terminal
36        .view_mut(Rectangle::of_size((95, 15)).at((3, 1)))
37        .expect("Should always create a view successfully");
38
39    for cell in view.cells_mut() {
40        cell.style.bg_colour = Some(Colour::Rgb24(0, 127, 0));
41        cell.character = view_text.next().expect("Won't fail yo. like... ever... trust me bro.");
42    }
43
44    terminal.display(StdoutRenderer::default())?;
45
46    Ok(())
47}