termpixels

A work in progress TUI framework.

Add in Cargo.toml:

```toml [dependencies] termpixels = "*"

```

Example:

bash cargo run --release --example green_box

Code:

```rust use std::io; use termpixels::ansi_term::{Color, Style}; use termpixels::termion::event::{Event, Key}; use termpixels::termion::input::TermRead; use termpixels::termion::raw::IntoRawMode; use termpixels::{Location, Renderable, Size};

struct GreenBox { fill: char, size: Size, position: Location, display: char, }

impl Renderable for GreenBox { fn size(&self) -> Size { self.size }

fn position(&self) -> Location {
    self.position
}

fn ascii_for(&self, location: &Location) -> char {
    if self.is_center(location) {
        self.display
    } else if self.is_corner(location) {
        '+'
    } else if self.is_right_boundary(location) || self.is_left_boundary(location) {
        '│'
    } else if self.is_top_boundary(location) || self.is_bottom_boundary(location) {
        '─'
    } else {
        self.fill
    }
}

fn style_for(&self, location: &Location) -> Style {
    if self.is_center(location) {
        Style::default().fg(Color::Black).on(Color::White)
    } else if self.is_boundary(location) {
        Style::default().on(Color::Red)
    } else {
        Style::default().on(Color::Green)
    }
}

fn on_event(&mut self, event: Event) -> io::Result<()> {
    match event {
        Event::Key(Key::Esc) | Event::Key(Key::Ctrl('c')) => {
            Err(io::Error::from(io::ErrorKind::Interrupted))
        }
        Event::Key(Key::Char(c)) => {
            self.display = c;
            Ok(())
        }
        _ => Ok(()),
    }
}

}

fn main() { let mut panel = GreenBox { display: 'x', fill: ' ', size: (20, 10), // width, height position: (20, 4), // x, y }; let mut stdout = io::stdout().intorawmode().unwrap(); let stdin = io::stdin(); let mut events = stdin.events(); if let Err(err) = panel.render(&mut stdout, &mut events) { eprintln!("{}", err); std::process::exit(1); }; } ```