use crate::{Point, Rect, Size};
#[derive(Debug, Clone, PartialEq)]
pub struct Monitor {
region: Rect,
client: Rect,
dpi: Size,
}
impl Monitor {
pub fn new(region: Rect, client: Rect, dpi: Size) -> Self {
Self {
region,
client,
dpi,
}
}
pub fn region(&self) -> Rect {
self.region
}
pub fn client(&self) -> Rect {
self.client
}
pub fn dpi(&self) -> Size {
self.dpi
}
pub fn region_scaled(&self) -> Rect {
div_rect(self.region, self.dpi)
}
pub fn client_scaled(&self) -> Rect {
div_rect(self.client, self.dpi)
}
}
#[inline]
fn div_rect(r: Rect, s: Size) -> Rect {
Rect::new(div_point(r.origin, s), div_size(r.size, s))
}
#[inline]
fn div_point(p: Point, s: Size) -> Point {
Point::new(p.x / s.width, p.y / s.height)
}
#[inline]
fn div_size(s1: Size, s2: Size) -> Size {
Size::new(s1.width / s2.width, s1.height / s2.height)
}