feat: added deref impl for backend types

pull/632/head
Ahmad 2 years ago
parent a6b25a4877
commit 62f151c359

@ -1,10 +1,16 @@
use crate::{app::App, ui};
use std::{error::Error, io, sync::mpsc, thread, time::Duration};
use std::{
error::Error,
io::{self, Write},
sync::mpsc,
thread,
time::Duration,
};
use termion::{
event::Key,
input::{MouseTerminal, TermRead},
raw::IntoRawMode,
screen::AlternateScreen,
screen::{AlternateScreen, ToAlternateScreen, ToMainScreen},
};
use tui::{
backend::{Backend, TermionBackend},
@ -13,16 +19,21 @@ use tui::{
pub fn run(tick_rate: Duration, enhanced_graphics: bool) -> Result<(), Box<dyn Error>> {
// setup terminal
let stdout = io::stdout().into_raw_mode()?;
let stdout = MouseTerminal::from(stdout);
let stdout = AlternateScreen::from(stdout);
let backend = TermionBackend::new(stdout);
let mut terminal = Terminal::new(backend)?;
let mut stdout = MouseTerminal::from(io::stdout()).into_raw_mode()?;
stdout.activate_raw_mode()?;
write!(stdout, "{}", ToAlternateScreen)?;
let mut terminal = Terminal::new(TermionBackend::new(stdout))?;
// create app and run it
let app = App::new("Termion demo", enhanced_graphics);
run_app(&mut terminal, app, tick_rate)?;
// restore terminal
terminal.backend().suspend_raw_mode()?;
write!(terminal.backend_mut(), "{}", ToMainScreen)?;
terminal.show_cursor()?;
println!("bonsoir");
Ok(())
}

@ -13,7 +13,10 @@ use crossterm::{
},
terminal::{self, Clear, ClearType},
};
use std::io::{self, Write};
use std::{
io::{self, Write},
ops::{Deref, DerefMut},
};
pub struct CrosstermBackend<W: Write> {
buffer: W,
@ -41,6 +44,20 @@ where
}
}
impl<W: Write> Deref for CrosstermBackend<W> {
type Target = W;
fn deref(&self) -> &Self::Target {
&self.buffer
}
}
impl<W: Write> DerefMut for CrosstermBackend<W> {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.buffer
}
}
impl<W> Backend for CrosstermBackend<W>
where
W: Write,

@ -7,6 +7,7 @@ use crate::{
use std::{
fmt,
io::{self, Write},
ops::{Deref, DerefMut},
};
pub struct TermionBackend<W>
@ -38,6 +39,20 @@ where
}
}
impl<W: Write> Deref for TermionBackend<W> {
type Target = W;
fn deref(&self) -> &Self::Target {
&self.stdout
}
}
impl<W: Write> DerefMut for TermionBackend<W> {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.stdout
}
}
impl<W> Backend for TermionBackend<W>
where
W: Write,

Loading…
Cancel
Save