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]);