graphics/fbbootlogd: Inline TextScreen into FbbootlogScheme
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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<usize, Handle>,
|
||||
}
|
||||
|
||||
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<usize> {
|
||||
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<usize> {
|
||||
|
||||
@@ -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<usize> {
|
||||
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())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user