glerminal 0.1.5

A lightweight OpenGL terminal
Documentation
extern crate glerminal;

use glerminal::VirtualKeyCode;
use glerminal::terminal::TerminalBuilder;
use glerminal::text_buffer::TextBuffer;
use glerminal::text_buffer::parser::Parser;

fn main() {
    let terminal = TerminalBuilder::new()
        .with_title("Input test")
        .with_dimensions((1280, 720))
        .build();
    let mut text_buffer;
    match TextBuffer::new(&terminal, (80, 24)) {
        Ok(buffer) => text_buffer = buffer,
        Err(error) => panic!(format!("Failed to initialize text buffer: {}", error)),
    }

    let mut parser = Parser::new();
    parser.add_color("red", [1.0, 0.2, 0.2, 1.0]);
    parser.add_color("green", [0.2, 1.0, 0.2, 1.0]);
    update_text(&parser, &mut text_buffer, false);

    terminal.flush(&mut text_buffer);

    while terminal.refresh() {
        terminal.draw(&text_buffer);

        let input = terminal.get_current_input();
        if input.was_just_pressed(VirtualKeyCode::Space) {
            update_text(&parser, &mut text_buffer, true);
            terminal.flush(&mut text_buffer);
        } else if input.was_just_released(VirtualKeyCode::Space) {
            update_text(&parser, &mut text_buffer, false);
            terminal.flush(&mut text_buffer);
        }
    }
}

fn update_text(parser: &Parser, text_buffer: &mut TextBuffer, pressed: bool) {
    text_buffer.clear();
    text_buffer.move_cursor(0, 0);
    let mut color = "red";
    if pressed {
        color = "green";
    }
    parser.write(
        text_buffer,
        format!("Spacebar is pressed: [fg={}]{}[/fg]", color, pressed),
    );
}