macro_rules! colour {
($(#[$attr:meta] $name:ident, $val:expr;)*) => {
impl Colour {
$(
#[$attr]
pub fn $name() -> Colour {
Colour::new($val)
}
)*
}
}
}
#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)]
pub struct Colour(pub u32);
impl Colour {
#[inline]
pub fn new(value: u32) -> Colour {
Colour(value)
}
pub fn from_rgb(r: u8, g: u8, b: u8) -> Colour {
let mut uint = r as u32;
uint = (uint << 8) | (g as u32);
uint = (uint << 8) | (b as u32);
Colour(uint)
}
pub fn r(&self) -> u8 {
((self.0 >> 16) & 255) as u8
}
pub fn g(&self) -> u8 {
((self.0 >> 8) & 255) as u8
}
pub fn b(&self) -> u8 {
(self.0 & 255) as u8
}
pub fn tuple(&self) -> (u8, u8, u8) {
(self.r(), self.g(), self.b())
}
#[deprecated(since="0.1.5", note="Use `r` instead.")]
#[inline]
pub fn get_r(&self) -> u8 {
self.r()
}
#[deprecated(since="0.1.5", note="Use `g` instead.")]
#[inline]
pub fn get_g(&self) -> u8 {
self.g()
}
#[deprecated(since="0.1.5", note="Use `b` instead.")]
#[inline]
pub fn get_b(&self) -> u8 {
self.b()
}
#[deprecated(since="0.1.5", note="Use `tuple` instead.")]
#[inline]
pub fn get_tuple(&self) -> (u8, u8, u8) {
self.tuple()
}
}
impl From<i32> for Colour {
fn from(value: i32) -> Colour {
Colour(value as u32)
}
}
impl From<u32> for Colour {
fn from(value: u32) -> Colour {
Colour(value)
}
}
impl From<u64> for Colour {
fn from(value: u64) -> Colour {
Colour(value as u32)
}
}
colour! {
blitz_blue, 0x6FC6E2;
blue, 0x3498DB;
blurple, 0x7289DA;
dark_blue, 0x206694;
dark_gold, 0xC27C0E;
dark_green, 0x1F8B4C;
dark_grey, 0x607D8B;
dark_magenta, 0xAD1457;
dark_orange, 0xA84300;
dark_purple, 0x71368A;
dark_red, 0x992D22;
dark_teal, 0x11806A;
darker_grey, 0x546E7A;
fabled_pink, 0xFAB1ED;
faded_purple, 0x8882C4;
fooyoo, 0x11CA80;
gold, 0xF1C40F;
kerbal, 0xBADA55;
light_grey, 0x979C9F;
lighter_grey, 0x95A5A6;
magenta, 0xE91E63;
meibe_pink, 0xE68397;
orange, 0xE67E22;
purple, 0x9B59B6;
red, 0xE74C3C;
rohrkatze_blue, 0x7596FF;
rosewater, 0xF6DBD8;
teal, 0x1ABC9C;
}
impl Default for Colour {
fn default() -> Colour {
Colour(0)
}
}