1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
use crate::backend::Backend; use crate::buffer::{Buffer, Cell}; use crate::layout::Rect; use std::io; #[derive(Debug)] pub struct TestBackend { width: u16, buffer: Buffer, height: u16, cursor: bool, pos: (u16, u16), } impl TestBackend { pub fn new(width: u16, height: u16) -> TestBackend { TestBackend { width, height, buffer: Buffer::empty(Rect::new(0, 0, width, height)), cursor: false, pos: (0, 0), } } pub fn buffer(&self) -> &Buffer { &self.buffer } } impl Backend for TestBackend { fn draw<'a, I>(&mut self, content: I) -> Result<(), io::Error> where I: Iterator<Item = (u16, u16, &'a Cell)>, { for (x, y, c) in content { let cell = self.buffer.get_mut(x, y); cell.symbol = c.symbol.clone(); cell.style = c.style; } Ok(()) } fn hide_cursor(&mut self) -> Result<(), io::Error> { self.cursor = false; Ok(()) } fn show_cursor(&mut self) -> Result<(), io::Error> { self.cursor = true; Ok(()) } fn get_cursor(&mut self) -> Result<(u16, u16), io::Error> { Ok(self.pos) } fn set_cursor(&mut self, x: u16, y: u16) -> Result<(), io::Error> { self.pos = (x, y); Ok(()) } fn clear(&mut self) -> Result<(), io::Error> { Ok(()) } fn size(&self) -> Result<Rect, io::Error> { Ok(Rect::new(0, 0, self.width, self.height)) } fn flush(&mut self) -> Result<(), io::Error> { Ok(()) } }