prototty_common

Crates.ioprototty_common
lib.rsprototty_common
version0.25.0
sourcesrc
created_at2018-01-02 11:38:09.818838
updated_at2019-03-01 21:39:26.748262
descriptionDefinition of common ui elements and views for use with prototty.
homepagehttps://github.com/stevebob/prototty.git
repositoryhttps://github.com/stevebob/prototty.git
max_upload_size
id45193
size46,462
Stephen Sherratt (gridbugs)

documentation

https://docs.rs/prototty_common

README

prototty_common

Version Documentation

A collection of common elements and decorators.

Decorators Example

Let's continue the title example started here:

This will extend the unix frontend to draw a border around its output using the Border decorator defined in this crate.

extern crate prototty;
extern crate prototty_unix;
extern crate prototty_common;

// Assuming the title and its views were defined here
extern crate prototty_title;

use prototty::{Renderer, View, ViewSize, ViewGrid, Coord, Size};
use prototty_title::*;

// The `Border` decorator in prototty_common requires that the
// view which it decorates implements `ViewSize`, defined in
// prototty. Since neither `ViewSize` nor `Title` are defined
// in this crate, we need to define a new type, and implement
// `View` and `ViewSize` here in this crate.
struct SizedDemoTitleView;
impl View<Title> for SizedDemoTitleView {
    fn view<G: ViewGrid>(&self, title: &Title, coord: Coord, depth: i32, grid: &mut G) {
        // behave identically to `DemoTitleView`
        DemoTitleView.view(title, coord, depth, grid);
    }
}
impl ViewSize<Title> for SizedDemoTitleView {
    fn size(&self, title: &Title) -> Size {
        // 3 high, since the title is rendered on
        // line 0 and 2
        Size::new(title.width, 3)
    }
}

fn main() {

    let mut context = prototty_unix::Context::new().unwrap();

    let title = Title {
        width: 20,
        text: "My Title".to_string(),
    };

    // create and configure the border
    let mut border = prototty_common::Border::new();
    border.title = Some("Border Title".to_string());
    border.underline_title = true;

    // create a decorated view
    let decorated_view = prototty_common::Decorated::new(&SizedDemoTitleView, &border);

    // render the title using the view
    context.render(&decorated_view, &title).unwrap();

    // exit after a key is pressed
    context.wait_input().unwrap();
}

Running this will produce the following output in your terminal:

Example

Commit count: 1090

cargo fmt