| use num_traits::Float; |
| |
| use palette::encoding::Linear; |
| use palette::luma::{Luma, LumaStandard}; |
| use palette::rgb::RgbStandard; |
| use palette::rgb::{Rgb, RgbSpace}; |
| use palette::white_point::D65; |
| use palette::{Alpha, Component, Hsl, Hsv, Hwb, Lab, Lch, LinSrgb, Xyz, Yxy}; |
| |
| use super::color::Color; |
| |
| impl<S: RgbStandard, T: Component> Color for Rgb<S, T> { |
| fn rgb(&self) -> (u8, u8, u8) { |
| self.into_format::<u8>().into_components() |
| } |
| |
| #[inline] |
| fn alpha(&self) -> f64 { |
| 1.0 |
| } |
| } |
| |
| impl<S: LumaStandard, T: Component> Color for Luma<S, T> { |
| fn rgb(&self) -> (u8, u8, u8) { |
| let (luma,) = self.into_format::<u8>().into_components(); |
| (luma, luma, luma) |
| } |
| |
| #[inline] |
| fn alpha(&self) -> f64 { |
| 1.0 |
| } |
| } |
| |
| impl<S: RgbSpace, T: Component + Float> Color for Hsl<S, T> { |
| fn rgb(&self) -> (u8, u8, u8) { |
| Rgb::<Linear<S>, T>::from(*self) |
| .into_format::<u8>() |
| .into_components() |
| } |
| |
| #[inline] |
| fn alpha(&self) -> f64 { |
| 1.0 |
| } |
| } |
| |
| impl<S: RgbSpace, T: Component + Float> Color for Hsv<S, T> { |
| fn rgb(&self) -> (u8, u8, u8) { |
| Rgb::<Linear<S>, T>::from(*self) |
| .into_format::<u8>() |
| .into_components() |
| } |
| |
| #[inline] |
| fn alpha(&self) -> f64 { |
| 1.0 |
| } |
| } |
| |
| impl<S: RgbSpace, T: Component + Float> Color for Hwb<S, T> { |
| fn rgb(&self) -> (u8, u8, u8) { |
| Rgb::<Linear<S>, T>::from(*self) |
| .into_format::<u8>() |
| .into_components() |
| } |
| |
| #[inline] |
| fn alpha(&self) -> f64 { |
| 1.0 |
| } |
| } |
| |
| impl<T: Component + Float> Color for Lab<D65, T> { |
| fn rgb(&self) -> (u8, u8, u8) { |
| LinSrgb::<T>::from(*self) |
| .into_format::<u8>() |
| .into_components() |
| } |
| |
| #[inline] |
| fn alpha(&self) -> f64 { |
| 1.0 |
| } |
| } |
| |
| impl<T: Component + Float> Color for Lch<D65, T> { |
| fn rgb(&self) -> (u8, u8, u8) { |
| LinSrgb::<T>::from(*self) |
| .into_format::<u8>() |
| .into_components() |
| } |
| |
| #[inline] |
| fn alpha(&self) -> f64 { |
| 1.0 |
| } |
| } |
| |
| impl<T: Component + Float> Color for Xyz<D65, T> { |
| fn rgb(&self) -> (u8, u8, u8) { |
| LinSrgb::<T>::from(*self) |
| .into_format::<u8>() |
| .into_components() |
| } |
| |
| #[inline] |
| fn alpha(&self) -> f64 { |
| 1.0 |
| } |
| } |
| |
| impl<T: Component + Float> Color for Yxy<D65, T> { |
| fn rgb(&self) -> (u8, u8, u8) { |
| LinSrgb::<T>::from(*self) |
| .into_format::<u8>() |
| .into_components() |
| } |
| |
| #[inline] |
| fn alpha(&self) -> f64 { |
| 1.0 |
| } |
| } |
| |
| impl<C: Color, T: Component> Color for Alpha<C, T> { |
| #[inline] |
| fn rgb(&self) -> (u8, u8, u8) { |
| self.color.rgb() |
| } |
| |
| #[inline] |
| fn alpha(&self) -> f64 { |
| self.alpha.convert() |
| } |
| } |