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