palette/okhwb/
properties.rs

1use crate::hues::OklabHueIter;
2use crate::num::{Arithmetics, PartialCmp, Real};
3use crate::stimulus::Stimulus;
4use crate::white_point::D65;
5use crate::{
6    bool_mask::{LazySelect, Select},
7    FromColor, OklabHue, Xyz,
8};
9
10use super::Okhwb;
11
12impl_is_within_bounds_hwb!(Okhwb where T: Stimulus);
13impl_clamp_hwb!(Okhwb where T: Stimulus);
14
15impl_mix_hue!(Okhwb {
16    whiteness,
17    blackness
18});
19impl_lighten_hwb!(Okhwb where T: Stimulus);
20impl_hue_ops!(Okhwb, OklabHue);
21
22impl_color_add!(Okhwb, [hue, whiteness, blackness]);
23impl_color_sub!(Okhwb, [hue, whiteness, blackness]);
24
25impl_array_casts!(Okhwb<T>, [T; 3]);
26impl_simd_array_conversion_hue!(Okhwb, [whiteness, blackness]);
27impl_struct_of_array_traits_hue!(Okhwb, OklabHueIter, [whiteness, blackness]);
28
29#[allow(deprecated)]
30impl<T> crate::RelativeContrast for Okhwb<T>
31where
32    T: Real + Arithmetics + PartialCmp,
33    T::Mask: LazySelect<T>,
34    Xyz<D65, T>: FromColor<Self>,
35{
36    type Scalar = T;
37
38    #[inline]
39    fn get_contrast_ratio(self, other: Self) -> T {
40        let xyz1 = Xyz::from_color(self);
41        let xyz2 = Xyz::from_color(other);
42
43        crate::contrast_ratio(xyz1.y, xyz2.y)
44    }
45}
46
47impl_eq_hue!(Okhwb, OklabHue, [hue, whiteness, blackness]);