diff --git a/Cargo.lock b/Cargo.lock index 602e66313e..145efadb1d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -326,7 +326,7 @@ dependencies = [ name = "console-draw" version = "0.1.0" dependencies = [ - "inputd", + "graphics-ipc", "orbclient", "ransid", ] @@ -401,6 +401,7 @@ name = "driver-graphics" version = "0.1.0" dependencies = [ "common", + "graphics-ipc", "inputd", "libredox", "log", @@ -609,7 +610,6 @@ name = "graphics-ipc" version = "0.1.0" dependencies = [ "common", - "inputd", "libredox", "log", ] @@ -1725,6 +1725,7 @@ version = "0.1.0" dependencies = [ "common", "driver-graphics", + "graphics-ipc", "inputd", "libredox", "orbclient", @@ -1780,6 +1781,7 @@ dependencies = [ "common", "driver-graphics", "futures", + "graphics-ipc", "inputd", "libredox", "log", diff --git a/graphics/console-draw/Cargo.toml b/graphics/console-draw/Cargo.toml index 56d8d98562..6153d6143d 100644 --- a/graphics/console-draw/Cargo.toml +++ b/graphics/console-draw/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" orbclient = "0.3.27" ransid = "0.4" -inputd = { path = "../../inputd" } +graphics-ipc = { path = "../graphics-ipc" } [features] default = [] diff --git a/graphics/console-draw/src/lib.rs b/graphics/console-draw/src/lib.rs index 729cbd744a..bbd2d4fdeb 100644 --- a/graphics/console-draw/src/lib.rs +++ b/graphics/console-draw/src/lib.rs @@ -4,7 +4,7 @@ use std::collections::{BTreeSet, VecDeque}; use std::convert::{TryFrom, TryInto}; use std::{cmp, ptr}; -use inputd::Damage; +use graphics_ipc::legacy::Damage; use orbclient::FONT; pub struct DisplayMap { diff --git a/graphics/driver-graphics/Cargo.toml b/graphics/driver-graphics/Cargo.toml index c7cd6f9de5..6ad15add9d 100644 --- a/graphics/driver-graphics/Cargo.toml +++ b/graphics/driver-graphics/Cargo.toml @@ -10,4 +10,5 @@ redox_syscall = "0.5" libredox = "0.1.3" common = { path = "../../common" } +graphics-ipc = { path = "../graphics-ipc" } inputd = { path = "../../inputd" } diff --git a/graphics/driver-graphics/src/lib.rs b/graphics/driver-graphics/src/lib.rs index 33c925206c..147802dc60 100644 --- a/graphics/driver-graphics/src/lib.rs +++ b/graphics/driver-graphics/src/lib.rs @@ -1,7 +1,8 @@ use std::collections::{BTreeMap, HashMap}; use std::io; -use inputd::{Damage, VtEvent, VtEventKind}; +use graphics_ipc::legacy::Damage; +use inputd::{VtEvent, VtEventKind}; use libredox::errno::EOPNOTSUPP; use libredox::Fd; use redox_scheme::{RequestKind, Response, Scheme, SignalBehavior, Socket}; diff --git a/graphics/fbbootlogd/src/display.rs b/graphics/fbbootlogd/src/display.rs index 646d3e4d6a..4fa9d53213 100644 --- a/graphics/fbbootlogd/src/display.rs +++ b/graphics/fbbootlogd/src/display.rs @@ -1,6 +1,6 @@ use event::{user_data, EventQueue}; -use graphics_ipc::legacy::LegacyGraphicsHandle; -use inputd::{ConsumerHandle, Damage}; +use graphics_ipc::legacy::{Damage, LegacyGraphicsHandle}; +use inputd::ConsumerHandle; use libredox::errno::ESTALE; use orbclient::Event; use std::mem; diff --git a/graphics/fbcond/src/display.rs b/graphics/fbcond/src/display.rs index d50ac26217..8595ec6e9c 100644 --- a/graphics/fbcond/src/display.rs +++ b/graphics/fbcond/src/display.rs @@ -1,5 +1,5 @@ -use graphics_ipc::legacy::{DisplayMap, LegacyGraphicsHandle}; -use inputd::{ConsumerHandle, Damage}; +use graphics_ipc::legacy::{Damage, DisplayMap, LegacyGraphicsHandle}; +use inputd::ConsumerHandle; use std::io; pub struct Display { diff --git a/graphics/graphics-ipc/Cargo.toml b/graphics/graphics-ipc/Cargo.toml index 61298ced0e..7491222b9c 100644 --- a/graphics/graphics-ipc/Cargo.toml +++ b/graphics/graphics-ipc/Cargo.toml @@ -8,4 +8,3 @@ log = "0.4" libredox = "0.1.3" common = { path = "../../common" } -inputd = { path = "../../inputd" } diff --git a/graphics/graphics-ipc/src/legacy.rs b/graphics/graphics-ipc/src/legacy.rs index 6d039f8f6b..2bfb4f2ce3 100644 --- a/graphics/graphics-ipc/src/legacy.rs +++ b/graphics/graphics-ipc/src/legacy.rs @@ -1,8 +1,7 @@ use std::fs::File; use std::os::unix::io::AsRawFd; -use std::{io, mem, ptr, slice}; +use std::{cmp, io, mem, ptr, slice}; -use inputd::Damage; use libredox::flag; /// A graphics handle using the legacy graphics API. @@ -110,3 +109,29 @@ impl Drop for DisplayMap { } } } + +// Keep synced with orbital's SyncRect +#[derive(Debug, Copy, Clone)] +#[repr(packed)] +pub struct Damage { + pub x: i32, + pub y: i32, + pub width: i32, + pub height: i32, +} + +impl Damage { + #[must_use] + pub fn clip(mut self, width: i32, height: i32) -> Self { + // Clip damage + self.x = cmp::min(self.x, width); + if self.x + self.width > width { + self.width -= cmp::min(self.width, width - self.x); + } + self.y = cmp::min(self.y, height); + if self.y + self.height > height { + self.height = cmp::min(self.height, height - self.y); + } + self + } +} diff --git a/graphics/vesad/Cargo.toml b/graphics/vesad/Cargo.toml index 8106dbca03..fd983213a7 100644 --- a/graphics/vesad/Cargo.toml +++ b/graphics/vesad/Cargo.toml @@ -12,6 +12,7 @@ redox_event = "0.4.1" common = { path = "../../common" } driver-graphics = { path = "../driver-graphics" } +graphics-ipc = { path = "../graphics-ipc" } inputd = { path = "../../inputd" } libredox = "0.1.3" diff --git a/graphics/vesad/src/scheme.rs b/graphics/vesad/src/scheme.rs index 15d7f2867a..51a3712e02 100644 --- a/graphics/vesad/src/scheme.rs +++ b/graphics/vesad/src/scheme.rs @@ -1,4 +1,5 @@ use driver_graphics::GraphicsAdapter; +use graphics_ipc::legacy::Damage; use crate::{framebuffer::FrameBuffer, screen::GraphicScreen}; @@ -36,7 +37,7 @@ impl GraphicsAdapter for FbAdapter { &mut self, display_id: usize, resource: &Self::Resource, - damage: Option<&[inputd::Damage]>, + damage: Option<&[Damage]>, ) { if let Some(damage) = damage { resource.sync(&mut self.framebuffers[display_id], damage) diff --git a/graphics/vesad/src/screen.rs b/graphics/vesad/src/screen.rs index e90a4b39c2..8460ffbbf7 100644 --- a/graphics/vesad/src/screen.rs +++ b/graphics/vesad/src/screen.rs @@ -3,7 +3,7 @@ use std::convert::TryInto; use std::ptr::{self, NonNull}; use driver_graphics::Resource; -use inputd::Damage; +use graphics_ipc::legacy::Damage; use syscall::PAGE_SIZE; use crate::framebuffer::FrameBuffer; diff --git a/graphics/virtio-gpud/Cargo.toml b/graphics/virtio-gpud/Cargo.toml index a8cf34ed40..ae340bc391 100644 --- a/graphics/virtio-gpud/Cargo.toml +++ b/graphics/virtio-gpud/Cargo.toml @@ -12,6 +12,7 @@ anyhow = "1.0.71" common = { path = "../../common" } driver-graphics = { path = "../driver-graphics" } +graphics-ipc = { path = "../graphics-ipc" } virtio-core = { path = "../../virtio-core" } pcid = { path = "../../pcid" } inputd = { path = "../../inputd" } diff --git a/graphics/virtio-gpud/src/scheme.rs b/graphics/virtio-gpud/src/scheme.rs index 3f140fb8f3..d80f45bbb6 100644 --- a/graphics/virtio-gpud/src/scheme.rs +++ b/graphics/virtio-gpud/src/scheme.rs @@ -2,7 +2,8 @@ use std::sync::Arc; use common::{dma::Dma, sgl}; use driver_graphics::{GraphicsAdapter, GraphicsScheme, Resource}; -use inputd::{Damage, DisplayHandle}; +use graphics_ipc::legacy::Damage; +use inputd::DisplayHandle; use syscall::PAGE_SIZE; diff --git a/inputd/src/lib.rs b/inputd/src/lib.rs index 4bc019d4ad..877e3f3145 100644 --- a/inputd/src/lib.rs +++ b/inputd/src/lib.rs @@ -1,6 +1,3 @@ -#![feature(iter_next_chunk)] - -use std::cmp; use std::fs::{File, OpenOptions}; use std::io::{Error, Read, Write}; use std::mem::size_of; @@ -137,32 +134,6 @@ pub struct VtEvent { pub stride: u32, } -// Keep synced with orbital's SyncRect -#[derive(Debug, Copy, Clone)] -#[repr(packed)] -pub struct Damage { - pub x: i32, - pub y: i32, - pub width: i32, - pub height: i32, -} - -impl Damage { - #[must_use] - pub fn clip(mut self, width: i32, height: i32) -> Self { - // Clip damage - self.x = cmp::min(self.x, width); - if self.x + self.width > width { - self.width -= cmp::min(self.width, width - self.x); - } - self.y = cmp::min(self.y, height); - if self.y + self.height > height { - self.height = cmp::min(self.height, height - self.y); - } - self - } -} - pub struct ProducerHandle(File); impl ProducerHandle {