feat: curses instance can be passed to backend

pull/135/head
defiori 5 years ago committed by Florian Dehau
parent 7c4a3d2b02
commit 4a1f3cd61f

@ -55,11 +55,6 @@ name = "crossterm_demo"
path = "examples/crossterm_demo.rs"
required-features = ["crossterm"]
[[example]]
name = "curses"
path = "examples/curses.rs"
required-features = ["curses"]
[[example]]
name = "curses_demo"
path = "examples/curses_demo.rs"

@ -2,11 +2,12 @@ mod demo;
#[allow(dead_code)]
mod util;
use std::io;
use std::time::{Duration, Instant};
use easycurses;
use structopt::StructOpt;
use tui::backend::CursesBackend;
use easycurses;
use tui::Terminal;
use crate::demo::{ui, App};
@ -23,13 +24,14 @@ fn main() -> Result<(), failure::Error> {
let cli = Cli::from_args();
stderrlog::new().quiet(!cli.log).verbosity(4).init()?;
let mut terminal = Terminal::new(CursesBackend::new().unwrap()).unwrap();
terminal.clear().unwrap();
terminal.hide_cursor().unwrap();
terminal
.backend_mut()
.get_curses_window_mut()
.set_input_timeout(easycurses::TimeoutMode::WaitUpTo(50));
let mut backend = CursesBackend::new().ok_or(io::Error::new(io::ErrorKind::Other, ""))?;
let curses = backend.get_curses_mut();
curses.set_echo(false);
curses.set_input_timeout(easycurses::TimeoutMode::WaitUpTo(50));
curses.set_input_mode(easycurses::InputMode::RawCharacter);
curses.set_keypad_enabled(true);
let mut terminal = Terminal::new(backend)?;
terminal.hide_cursor()?;
let mut app = App::new("Curses demo");
@ -37,7 +39,7 @@ fn main() -> Result<(), failure::Error> {
let tick_rate = Duration::from_millis(cli.tick_rate);
loop {
ui::draw(&mut terminal, &app)?;
match terminal.backend_mut().get_curses_window_mut().get_input() {
match terminal.backend_mut().get_curses_mut().get_input() {
Some(input) => {
match input {
easycurses::Input::Character(c) => {
@ -60,7 +62,7 @@ fn main() -> Result<(), failure::Error> {
}
_ => {}
};
terminal.backend_mut().get_curses_window_mut().flush_input();
terminal.backend_mut().get_curses_mut().flush_input();
if last_tick.elapsed() > tick_rate {
app.on_tick();
last_tick = Instant::now();

@ -16,26 +16,20 @@ pub struct CursesBackend {
}
impl CursesBackend {
pub fn new() -> Result<CursesBackend, String> {
match easycurses::EasyCurses::initialize_system() {
Some(mut curses) => {
curses.set_echo(false);
curses.set_input_timeout(easycurses::TimeoutMode::Never);
curses.set_input_mode(easycurses::InputMode::RawCharacter);
curses.set_keypad_enabled(true);
Ok(CursesBackend { curses })
}
None => Err(String::from(
"Can't initialize curses, make sure it is not running already.",
)),
}
pub fn new() -> Option<CursesBackend> {
let curses = easycurses::EasyCurses::initialize_system()?;
Some(CursesBackend { curses })
}
pub fn with_curses(curses: easycurses::EasyCurses) -> CursesBackend {
CursesBackend { curses }
}
pub fn get_curses_window(&self) -> &easycurses::EasyCurses {
pub fn get_curses(&self) -> &easycurses::EasyCurses {
&self.curses
}
pub fn get_curses_window_mut(&mut self) -> &mut easycurses::EasyCurses {
pub fn get_curses_mut(&mut self) -> &mut easycurses::EasyCurses {
&mut self.curses
}
}

Loading…
Cancel
Save