use super::{Margin, Position, Size};
#[derive(Default, Clone, Debug, PartialEq, Eq, Hash)]
pub struct Rect {
position: Position,
size: Size,
}
impl From<Size> for Rect {
fn from(value: Size) -> Self {
Rect::new(Position::default(), value)
}
}
impl Rect {
pub fn new(position: Position, size: Size) -> Self {
Self { position, size }
}
pub fn from_scratch(x: u16, y: u16, width: u16, height: u16) -> Self {
Self::new(Position::new(x, y), Size::new(width, height))
}
pub fn x(&self) -> u16 {
self.position.column
}
pub fn y(&self) -> u16 {
self.position.row
}
pub fn width(&self) -> u16 {
self.size.width()
}
pub fn height(&self) -> u16 {
self.size.height()
}
pub fn position(&self) -> Position {
self.position
}
pub fn size(&self) -> Size {
self.size
}
pub fn set_position(&mut self, position: Position) {
self.position = position;
}
pub fn set_size(&mut self, size: Size) {
self.size = size;
}
pub fn apply_margin(&self, margin: &Margin) -> Rect {
Rect::new(self.position, self.size.sub_margin(margin))
}
pub fn contains(&self, position: Position) -> bool {
position.column >= self.position.column
&& position.row >= self.position.row
&& position.column <= self.size.width() + self.position.column
&& position.column <= self.size.height() + self.position.row
}
}