use crate::backend;
use crate::kurbo::Rect;
use std::fmt;
use std::fmt::Display;
#[derive(Clone, Debug, PartialEq)]
pub struct Monitor {
primary: bool,
rect: Rect,
work_rect: Rect,
}
impl Monitor {
#[allow(dead_code)]
pub(crate) fn new(primary: bool, rect: Rect, work_rect: Rect) -> Self {
Monitor {
primary,
rect,
work_rect,
}
}
pub fn is_primary(&self) -> bool {
self.primary
}
pub fn virtual_rect(&self) -> Rect {
self.rect
}
pub fn virtual_work_rect(&self) -> Rect {
self.work_rect
}
}
impl Display for Monitor {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
if self.primary {
write!(f, "Primary ")?;
} else {
write!(f, "Secondary ")?;
}
write!(
f,
"({}, {})({}, {})",
self.rect.x0, self.rect.x1, self.rect.y0, self.rect.y1
)?;
Ok(())
}
}
pub struct Screen {}
impl Screen {
pub fn get_monitors() -> Vec<Monitor> {
backend::screen::get_monitors()
}
pub fn get_display_rect() -> Rect {
Self::get_monitors()
.iter()
.map(|x| x.virtual_rect())
.fold(Rect::ZERO, |a, b| a.union(b))
}
}