60 lines
1.8 KiB
Rust
60 lines
1.8 KiB
Rust
//! This example shows how to:
|
|
//! - initialize the TTY backend (`lib-nestetd-tty`),
|
|
//! - create a simple 'Hello World' output,
|
|
//! - create color gradients on the outputted text
|
|
//! utilizing basic projection functionality from `lib-r3vi`,
|
|
//! - perform basic layouting & compositing.
|
|
|
|
extern crate cgmath;
|
|
extern crate nested;
|
|
extern crate nested_tty;
|
|
extern crate r3vi;
|
|
extern crate termion;
|
|
|
|
use {
|
|
cgmath::Vector2,
|
|
nested::repr_tree::Context,
|
|
nested_tty::{Terminal, TerminalCompositor, TTYApplication, TerminalEvent, TerminalStyle, TerminalView},
|
|
r3vi::view::{port::UpdateTask, ViewPort},
|
|
std::sync::{Arc, RwLock},
|
|
termion::event::{Event, Key},
|
|
};
|
|
|
|
#[async_std::main]
|
|
async fn main() {
|
|
/* Initialize our terminal.
|
|
*/
|
|
let tty_app = TTYApplication::new(|event| { /* handle event */ });
|
|
|
|
/* Setup our "root" view of the application.
|
|
* This will be the compositor, which is able to
|
|
* mix multiple `TerminalView`-Views together.
|
|
* Its output is routed to the `app.port` Viewport,
|
|
* so it will be displayed on TTY-output.
|
|
*/
|
|
let compositor = TerminalCompositor::new(tty_app.port.inner());
|
|
|
|
/* Add the label 'test' at position (7, 2)
|
|
*/
|
|
compositor
|
|
.write()
|
|
.unwrap()
|
|
.push(nested_tty::make_label("test").offset(Vector2::new(7, 2)));
|
|
|
|
/* Add a 'Hello World' label at position (5, 3)
|
|
* and set a coloring determined by formula from
|
|
* the position of each character.
|
|
*/
|
|
compositor.write().unwrap().push(
|
|
nested_tty::make_label("Hello World")
|
|
.map_item(|p, a| {
|
|
a.add_style_back(TerminalStyle::fg_color(((25 * p.x % 255) as u8, 200, 0)))
|
|
})
|
|
.offset(Vector2::new(5, 3)),
|
|
);
|
|
|
|
/* write the changes in the root-view to the terminal
|
|
*/
|
|
tty_app.show().await.expect("output error!");
|
|
}
|
|
|