diff options
Diffstat (limited to 'src/buffer/mod.rs')
| -rw-r--r-- | src/buffer/mod.rs | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/buffer/mod.rs b/src/buffer/mod.rs index 10b49c1..0a7e9ba 100644 --- a/src/buffer/mod.rs +++ b/src/buffer/mod.rs @@ -1,23 +1,33 @@ mod threads; +use crate::window::Window; + use std::io::{Stdin, Write}; use termion::event::Key; use termion::input::TermRead; pub use threads::Threads; + pub struct Client { + window: Window, buffers: Vec<Buffer>, } impl Client { - pub fn new(initial_buffer: Buffer) -> Self { + pub fn new<W: Write>(initial_buffer: Buffer, out: &mut W) -> Self { + let mut window = Window::new(); + match &initial_buffer { + Buffer::Threads(t) => t.fill_window(&mut window), + } + window.draw(out).unwrap(); Self { + window, buffers: vec![initial_buffer], } } - pub fn run<W: Write>(mut self, mut screen: W, stdin: Stdin) { + pub fn run<W: Write>(mut self, out: &mut W, stdin: Stdin) { for c in stdin.keys() { let c = c.unwrap(); // Global keybinds @@ -32,12 +42,14 @@ impl Client { } let next_buffer = match self.buffers.last_mut().unwrap() { - Buffer::Threads(s) => s.tick(&mut screen, c), + Buffer::Threads(s) => s.tick(&mut self.window, c), }; if let Some(next_buffer) = next_buffer { self.buffers.push(next_buffer); } + + self.window.draw(out).unwrap(); } } } |
