graphics/fbbootlogd: Inline TextScreen into FbbootlogScheme

This commit is contained in:
bjorn3
2025-02-22 16:27:27 +01:00
parent d83d050c0d
commit 4b61e7bc86
3 changed files with 20 additions and 50 deletions
-1
View File
@@ -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");
+20 -8
View File
@@ -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> {
-41
View File
@@ -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())
}
}