diff --git a/graphics/fbbootlogd/src/main.rs b/graphics/fbbootlogd/src/main.rs index cd4d44ff07..ca1c3863df 100644 --- a/graphics/fbbootlogd/src/main.rs +++ b/graphics/fbbootlogd/src/main.rs @@ -16,7 +16,6 @@ use crate::scheme::FbbootlogScheme; mod display; mod scheme; -mod text; fn main() { redox_daemon::Daemon::new(|daemon| inner(daemon)).expect("failed to create daemon"); diff --git a/graphics/fbbootlogd/src/scheme.rs b/graphics/fbbootlogd/src/scheme.rs index 7e37aa8cb6..1e9f408ef8 100644 --- a/graphics/fbbootlogd/src/scheme.rs +++ b/graphics/fbbootlogd/src/scheme.rs @@ -1,10 +1,9 @@ -use std::collections::BTreeMap; +use std::collections::{BTreeMap, VecDeque}; use redox_scheme::Scheme; use syscall::{Error, EventFlags, Result, EBADF, EINVAL, ENOENT}; use crate::display::Display; -use crate::text::TextScreen; pub struct Handle { pub events: EventFlags, @@ -12,18 +11,17 @@ pub struct Handle { } pub struct FbbootlogScheme { - pub screen: TextScreen, + display: Display, + text_screen: console_draw::TextScreen, next_id: usize, pub handles: BTreeMap, } impl FbbootlogScheme { pub fn new() -> FbbootlogScheme { - let display = Display::open_first_vt().expect("Failed to open display for vt"); - let screen = TextScreen::new(display); - FbbootlogScheme { - screen, + display: Display::open_first_vt().expect("Failed to open display for vt"), + text_screen: console_draw::TextScreen::new(), next_id: 0, handles: BTreeMap::new(), } @@ -94,7 +92,21 @@ impl Scheme for FbbootlogScheme { fn write(&mut self, id: usize, buf: &[u8], _offset: u64, _fcntl_flags: u32) -> Result { let _handle = self.handles.get(&id).ok_or(Error::new(EBADF))?; - self.screen.write(buf) + let mut map = self.display.map.lock().unwrap(); + let damage = self.text_screen.write( + &mut console_draw::DisplayMap { + offscreen: map.inner.ptr_mut(), + width: map.inner.width(), + height: map.inner.height(), + }, + buf, + &mut VecDeque::new(), + ); + drop(map); + + self.display.sync_rects(damage); + + Ok(buf.len()) } fn close(&mut self, id: usize) -> Result { diff --git a/graphics/fbbootlogd/src/text.rs b/graphics/fbbootlogd/src/text.rs deleted file mode 100644 index 15e34e0584..0000000000 --- a/graphics/fbbootlogd/src/text.rs +++ /dev/null @@ -1,41 +0,0 @@ -extern crate ransid; - -use std::collections::VecDeque; - -use syscall::error::*; - -use crate::display::Display; - -pub struct TextScreen { - pub display: Display, - inner: console_draw::TextScreen, -} - -impl TextScreen { - pub fn new(display: Display) -> TextScreen { - TextScreen { - display, - inner: console_draw::TextScreen::new(), - } - } -} - -impl TextScreen { - pub fn write(&mut self, buf: &[u8]) -> Result { - let mut map = self.display.map.lock().unwrap(); - let damage = self.inner.write( - &mut console_draw::DisplayMap { - offscreen: map.inner.ptr_mut(), - width: map.inner.width(), - height: map.inner.height(), - }, - buf, - &mut VecDeque::new(), - ); - drop(map); - - self.display.sync_rects(damage); - - Ok(buf.len()) - } -}