grass/src/color/mod.rs

45 lines
1.2 KiB
Rust
Raw Normal View History

2020-02-03 16:44:07 -05:00
use std::fmt::{self, Display};
use name::ColorName;
mod name;
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub(crate) struct Color {
red: u16,
green: u16,
blue: u16,
alpha: u16,
repr: ColorRepr,
}
impl Display for Color {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self.repr {
ColorRepr::Name(n) => write!(f, "{}", n),
ColorRepr::Hex3 => todo!(), //write!(f, "#{}{}{}", self.red, self.green, self.blue),
ColorRepr::Hex6 => write!(f, "#{:X}{:X}{:X}", self.red, self.green, self.blue),
ColorRepr::Hex8 => write!(
f,
"#{:X}{:X}{:X}{:X}",
self.red, self.green, self.blue, self.alpha
),
ColorRepr::Function if self.alpha < 1 => write!(
f,
"rgba({}, {}, {}, {})",
self.red, self.green, self.blue, self.alpha
),
ColorRepr::Function => write!(f, "#{:X}{:X}{:X}", self.red, self.green, self.blue),
}
}
}
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
enum ColorRepr {
Name(ColorName),
Hex3,
Hex6,
Hex8,
Function,
}