grass/src/color/mod.rs

65 lines
1.3 KiB
Rust
Raw Normal View History

2020-02-03 16:44:07 -05:00
use std::fmt::{self, Display};
2020-02-07 00:10:43 -05:00
pub(crate) use name::ColorName;
use crate::value::{Number, Value};
2020-02-03 16:44:07 -05:00
mod name;
2020-02-08 08:48:31 -05:00
#[derive(Debug, Clone, Eq, PartialEq)]
2020-02-03 16:44:07 -05:00
pub(crate) struct Color {
red: u16,
green: u16,
blue: u16,
alpha: Number,
2020-02-08 08:48:31 -05:00
repr: String,
2020-02-03 16:44:07 -05:00
}
2020-02-07 00:10:43 -05:00
impl Color {
pub fn new(red: u16, green: u16, blue: u16, alpha: u16, repr: String) -> Self {
2020-02-08 08:48:31 -05:00
Color {
red,
green,
blue,
alpha: alpha.into(),
2020-02-08 08:48:31 -05:00
repr,
}
2020-02-07 00:10:43 -05:00
}
2020-02-08 13:16:53 -05:00
pub const fn red(&self) -> u16 {
self.red
}
pub const fn blue(&self) -> u16 {
self.blue
}
pub const fn green(&self) -> u16 {
self.green
}
pub fn alpha(&self) -> Number {
self.alpha.clone()
}
pub fn from_values(red: u16, green: u16, blue: u16, alpha: Number) -> Self {
let repr = if alpha >= Number::from(1) {
format!("#{:0>2x}{:0>2x}{:0>2x}", red, green, blue)
2020-02-08 08:48:31 -05:00
} else {
format!("rgba({}, {}, {}, {})", red, green, blue, alpha)
2020-02-08 08:48:31 -05:00
};
Color {
red,
green,
blue,
alpha,
repr,
2020-02-03 16:44:07 -05:00
}
}
}
2020-02-08 08:48:31 -05:00
impl Display for Color {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.repr)
}
2020-02-03 16:44:07 -05:00
}