#[derive(Clone, Copy)]
#[expect(
clippy::exhaustive_structs,
reason = "Colors will only ever consist of red, green blue and alpha"
)]
pub struct Color {
pub r: u8,
pub g: u8,
pub b: u8,
pub a: u8,
}
impl Color {
pub const BLACK: Color = Color {
r: 0,
g: 0,
b: 0,
a: 255,
};
#[inline]
#[must_use]
pub const fn rgba(r: u8, g: u8, b: u8, a: u8) -> Color {
Color { r, g, b, a }
}
#[inline]
#[must_use]
pub const fn rgb(r: u8, g: u8, b: u8) -> Color {
Color::rgba(r, g, b, 255)
}
#[inline]
#[must_use]
pub const fn new() -> Color {
Color::rgba(0, 0, 0, 255)
}
#[inline]
#[must_use]
pub fn gl(&self) -> (f32, f32, f32, f32) {
(
f32::from(self.r) / 255.0,
f32::from(self.g) / 255.0,
f32::from(self.b) / 255.0,
f32::from(self.a) / 255.0,
)
}
}
impl Default for Color {
#[inline]
fn default() -> Self {
Color::rgba(0, 0, 0, 255)
}
}