#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct Point {
pub x: i32,
pub y: i32,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct Rect {
pub x: i32,
pub y: i32,
pub w: u16,
pub h: u16,
}
impl Rect {
pub fn intersect(&self, other: &Rect) -> Option<Rect> {
let x1 = self.x.max(other.x);
let y1 = self.y.max(other.y);
let x2 = (self.x + self.w as i32).min(other.x + other.w as i32);
let y2 = (self.y + self.h as i32).min(other.y + other.h as i32);
if x1 < x2 && y1 < y2 {
Some(Rect {
x: x1,
y: y1,
w: (x2 - x1) as u16,
h: (y2 - y1) as u16,
})
} else {
None
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct Color {
pub r: u8,
pub g: u8,
pub b: u8,
pub a: u8,
}
impl Color {
pub const fn rgba(r: u8, g: u8, b: u8, a: u8) -> Self {
Self { r, g, b, a }
}
pub const fn rgb(r: u8, g: u8, b: u8) -> Self {
Self { r, g, b, a: 255 }
}
}
pub type Opa = u8;