termrs_core 0.3.0

The core library of termrs
Documentation
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
    }
}