#[derive(Clone, Copy, Debug, PartialEq)]
pub struct Color {
r: f32,
g: f32,
b: f32,
a: f32,
}
impl Color {
pub const fn r(&self) -> f32 {
self.r
}
pub const fn g(&self) -> f32 {
self.g
}
pub const fn b(&self) -> f32 {
self.b
}
pub const fn a(&self) -> f32 {
self.a
}
}
impl Color {
pub const fn rgb(r: u8, g: u8, b: u8) -> Self {
Self::rgba(r, g, b, 255)
}
pub const fn rgba(r: u8, g: u8, b: u8, a: u8) -> Self {
Self {
r: r as f32 / 255.0,
g: g as f32 / 255.0,
b: b as f32 / 255.0,
a: a as f32 / 255.0,
}
}
pub const fn rgb_f32(r: f32, g: f32, b: f32) -> Self {
Self::rgba_f32(r, g, b, 1.0)
}
pub const fn rgba_f32(r: f32, g: f32, b: f32, a: f32) -> Self {
Self { r, g, b, a }
}
pub const fn to_f32_array(self) -> [f32; 4] {
[self.r(), self.g(), self.b(), self.a()]
}
pub const fn with_alpha(self, alpha: u8) -> Self {
Self {
r: self.r,
g: self.g,
b: self.b,
a: alpha as f32 / 255.0,
}
}
pub const fn with_alpha_f32(self, alpha: f32) -> Self {
Self {
r: self.r,
g: self.g,
b: self.b,
a: alpha,
}
}
pub const TRANSPARENT: Self = Self::rgba(0, 0, 0, 0);
pub const BLACK: Self = Self::rgb(0, 0, 0);
pub const WHITE: Self = Self::rgb(255, 255, 255);
pub const RED: Self = Self::rgb(255, 0, 0);
pub const GREEN: Self = Self::rgb(0, 255, 0);
pub const BLUE: Self = Self::rgb(0, 0, 255);
pub const YELLOW: Self = Self::rgb(255, 255, 0);
pub const CYAN: Self = Self::rgb(0, 255, 255);
pub const MAGENTA: Self = Self::rgb(255, 0, 255);
pub const ORANGE: Self = Self::rgb(255, 165, 0);
pub const PURPLE: Self = Self::rgb(128, 0, 128);
pub const PINK: Self = Self::rgb(255, 192, 203);
pub const TEAL: Self = Self::rgb(0, 128, 128);
pub const BROWN: Self = Self::rgb(165, 42, 42);
pub const GRAY: Self = Self::rgb(128, 128, 128);
pub const LIGHT_GRAY: Self = Self::rgb(211, 211, 211);
pub const DARK_GRAY: Self = Self::rgb(64, 64, 64);
}