palette/okhsv/
properties.rs

1use crate::hues::OklabHueIter;
2use crate::num::{Arithmetics, Real};
3
4use crate::stimulus::Stimulus;
5use crate::{ok_utils, OklabHue};
6
7use super::Okhsv;
8
9impl_is_within_bounds! {
10    Okhsv {
11        saturation => [Self::min_saturation(), Self::max_saturation()+ T::from_f64(ok_utils::MAX_SRGB_SATURATION_INACCURACY)],
12        value => [Self::min_value(), Self::max_value()+ T::from_f64(ok_utils::MAX_SRGB_SATURATION_INACCURACY)]
13    }
14    where T: Real+Arithmetics+Stimulus
15}
16
17impl_clamp! {
18    Okhsv {
19        saturation => [Self::min_saturation(), Self::max_saturation()+ T::from_f64(ok_utils::MAX_SRGB_SATURATION_INACCURACY)],
20        value => [Self::min_value(), Self::max_value()+ T::from_f64(ok_utils::MAX_SRGB_SATURATION_INACCURACY)]
21    }
22    other {hue}
23    where T: Real+Arithmetics+Stimulus
24}
25
26impl_mix_hue!(Okhsv { saturation, value });
27impl_lighten!(Okhsv increase {value => [Self::min_value(), Self::max_value()]} other {hue, saturation}  where T: Real+Stimulus);
28impl_saturate!(Okhsv increase {saturation => [Self::min_saturation(), Self::max_saturation()]} other {hue, value}  where T:Real+ Stimulus);
29impl_hue_ops!(Okhsv, OklabHue);
30
31impl_color_add!(Okhsv, [hue, saturation, value]);
32impl_color_sub!(Okhsv, [hue, saturation, value]);
33
34impl_array_casts!(Okhsv<T>, [T; 3]);
35impl_simd_array_conversion_hue!(Okhsv, [saturation, value]);
36impl_struct_of_array_traits_hue!(Okhsv, OklabHueIter, [saturation, value]);
37
38impl_eq_hue!(Okhsv, OklabHue, [hue, saturation, value]);