use super::{clamp, Rational};
use num_traits::{one, zero};
#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
pub struct Hwba {
hue: Rational,
w: Rational,
b: Rational,
alpha: Rational,
}
impl Hwba {
pub fn new(
hue: Rational,
w: Rational,
b: Rational,
alpha: Rational,
) -> Hwba {
let mut w = clamp(w, zero(), one());
let mut b = clamp(b, zero(), one());
let wbsum = w + b;
if w + b > one() {
w /= wbsum;
b /= wbsum;
}
Hwba {
hue,
w,
b,
alpha: clamp(alpha, zero(), one()),
}
}
pub fn hue(&self) -> Rational {
self.hue
}
pub fn whiteness(&self) -> Rational {
self.w
}
pub fn blackness(&self) -> Rational {
self.b
}
pub fn alpha(&self) -> Rational {
self.alpha
}
pub fn set_alpha(&mut self, alpha: Rational) {
self.alpha = clamp(alpha, zero(), one())
}
}