Struct cosmic::cosmic_theme::palette::Oklab
source · #[repr(C)]pub struct Oklab<T = f32> {
pub l: T,
pub a: T,
pub b: T,
}
Expand description
The Oklab color space.
§Characteristics
Oklab
is a perceptual color space. It does not relate to an output
device (a monitor or printer) but instead relates to the CIE standard
observer
– an averaging of the results of color matching experiments under
laboratory conditions.
Oklab
is a uniform color space (Compare to the HSV color
space). It
is useful for things like:
- Turning an image grayscale, while keeping the perceived lightness the same
- Increasing the saturation of colors, while maintaining perceived hue and lightness
- Creating smooth and uniform looking transitions between colors
Oklab
’s structure is similar to L*a*b*. It is based on
the opponent color model of human
vision, where red and green
form an opponent pair, and blue and yellow form an opponent pair.
Oklab
uses D65’s
whitepoint – daylight illumination, which is also used by sRGB, rec2020 and
Display P3 color spaces – and assumes normal well-lit viewing conditions,
to which the eye is adapted. Thus Oklab
s lightness l
technically is a
measure of relative brightness – a subjective measure – not relative
luminance. The lightness is scale/exposure-independend, i.e. independent of
the actual luminance of the color, as displayed by some medium, and even for
blindingly bright colors or very bright or dark viewing conditions assumes,
that the eye is adapted to the color’s luminance and the hue and chroma are
perceived linearly.
Oklab
’s chroma is unlimited. Thus it can represent colors of any color
space (including HDR). l
is in the range 0.0 .. 1.0
and a
and b
are
unbounded.
§Conversions
Oklch
is a cylindrical form of Oklab
.
Oklab
colors converted from valid (i.e. clamped) sRGB
will be in the
sRGB
gamut.
Okhsv
, Okhwb
and Okhsl
reference the sRGB
gamut.
The transformation from Oklab
to one of them is based on the assumption,
that the transformed Oklab
value is within sRGB
.
Okhsv
, Okhwb
and Okhsl
are not applicable to HDR, which also come with
color spaces with wider gamuts. They require additional
research.
When a Oklab
color is converted from Srgb
or a
equivalent color space, e.g. Hsv
, Okhsv
,
Hsl
, Okhsl
, Hwb
,
Okhwb
, it’s lightness will be relative to the (user
controlled) maximum contrast and luminance of the display device, to which
the eye is assumed to be adapted.
§Clamping
Clamp
ing will only clamp l
. Clamping does not guarantee
the color to be inside the perceptible or any display-dependent color space
(like sRGB).
To ensure a color is within the sRGB gamut, it can first be converted to
Okhsv
, clamped there and converted it back to Oklab
.
// Display P3 yellow according to https://colorjs.io/apps/convert/?color=color(display-p3%201%201%200)&precision=17
let oklab = Oklab::from_color_unclamped(LinSrgb::new(1.0, 1.0, -0.098273600140966));
let okhsv: Okhsv<f64> = Okhsv::from_color_unclamped(oklab);
assert!(!okhsv.is_within_bounds());
let clamped_okhsv = okhsv.clamp();
assert!(clamped_okhsv.is_within_bounds());
let linsrgb = LinSrgb::from_color_unclamped(clamped_okhsv);
let expected = LinSrgb::new(1.0, 0.9876530763223166, 0.0);
assert_abs_diff_eq!(expected, linsrgb, epsilon = 0.02);
Since the conversion contains a gamut mapping, it will map the color to one
of the perceptually closest locations in the sRGB
gamut. Gamut mapping –
unlike clamping – is an expensive operation. To get computationally cheaper
(and perceptually much worse) results, convert directly to Srgb
and
clamp there.
§Lightening / Darkening
Lighten
ing and Darken
ing will change
l
, as expected. However, either operation may leave an implicit color
space (the percetible or a display dependent color space like sRGB).
To ensure a color is within the sRGB gamut, first convert it to Okhsl
,
lighten/darken it there and convert it back to Oklab
.
Fields§
§l: T
l
is the lightness of the color. 0
gives absolute black and 1
gives the
full white point luminance of the display medium.
D65
(normalized with Y=1, i.e. white according to the adaption of the
eye) transforms to
L=1,a=0,b=0.
However intermediate values differ from those of CIELab non-linearly.
a: T
a
changes the hue from reddish to greenish, when moving from positive
to negative values and becomes more intense with larger absolute values.
The exact orientation is determined by b
b: T
b
changes the hue from yellowish to blueish, when moving from positive
to negative values and becomes more intense with larger absolute values.
Implementations§
source§impl<T> Oklab<T>
impl<T> Oklab<T>
sourcepub fn into_components(self) -> (T, T, T)
pub fn into_components(self) -> (T, T, T)
Convert to a (L, a, b)
tuple.
sourcepub fn from_components(_: (T, T, T)) -> Oklab<T>
pub fn from_components(_: (T, T, T)) -> Oklab<T>
Convert from a (L, a, b)
tuple.
source§impl<C> Oklab<C>
impl<C> Oklab<C>
sourcepub fn iter<'a>(&'a self) -> <&'a Oklab<C> as IntoIterator>::IntoIterwhere
&'a Oklab<C>: IntoIterator,
pub fn iter<'a>(&'a self) -> <&'a Oklab<C> as IntoIterator>::IntoIterwhere
&'a Oklab<C>: IntoIterator,
Return an iterator over the colors in the wrapped collections.
sourcepub fn iter_mut<'a>(
&'a mut self,
) -> <&'a mut Oklab<C> as IntoIterator>::IntoIterwhere
&'a mut Oklab<C>: IntoIterator,
pub fn iter_mut<'a>(
&'a mut self,
) -> <&'a mut Oklab<C> as IntoIterator>::IntoIterwhere
&'a mut Oklab<C>: IntoIterator,
Return an iterator that allows modifying the colors in the wrapped collections.
sourcepub fn get<'a, I, T>(
&'a self,
index: I,
) -> Option<Oklab<&'a <I as SliceIndex<[T]>>::Output>>
pub fn get<'a, I, T>( &'a self, index: I, ) -> Option<Oklab<&'a <I as SliceIndex<[T]>>::Output>>
Get a color, or slice of colors, with references to the components at index
. See slice::get
for details.
sourcepub fn get_mut<'a, I, T>(
&'a mut self,
index: I,
) -> Option<Oklab<&'a mut <I as SliceIndex<[T]>>::Output>>
pub fn get_mut<'a, I, T>( &'a mut self, index: I, ) -> Option<Oklab<&'a mut <I as SliceIndex<[T]>>::Output>>
Get a color, or slice of colors, that allows modifying the components at index
. See slice::get_mut
for details.
source§impl<T> Oklab<Vec<T>>
impl<T> Oklab<Vec<T>>
sourcepub fn with_capacity(capacity: usize) -> Oklab<Vec<T>>
pub fn with_capacity(capacity: usize) -> Oklab<Vec<T>>
Create a struct of vectors with a minimum capacity. See Vec::with_capacity
for details.
sourcepub fn push(&mut self, value: Oklab<T>)
pub fn push(&mut self, value: Oklab<T>)
Push an additional color’s components onto the component vectors. See Vec::push
for details.
sourcepub fn pop(&mut self) -> Option<Oklab<T>>
pub fn pop(&mut self) -> Option<Oklab<T>>
Pop a color’s components from the component vectors. See Vec::pop
for details.
sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Clear the component vectors. See Vec::clear
for details.
Trait Implementations§
source§impl<T> AbsDiffEq for Oklab<T>
impl<T> AbsDiffEq for Oklab<T>
source§fn default_epsilon() -> <Oklab<T> as AbsDiffEq>::Epsilon
fn default_epsilon() -> <Oklab<T> as AbsDiffEq>::Epsilon
source§fn abs_diff_eq(
&self,
other: &Oklab<T>,
epsilon: <T as AbsDiffEq>::Epsilon,
) -> bool
fn abs_diff_eq( &self, other: &Oklab<T>, epsilon: <T as AbsDiffEq>::Epsilon, ) -> bool
source§fn abs_diff_ne(
&self,
other: &Oklab<T>,
epsilon: <T as AbsDiffEq>::Epsilon,
) -> bool
fn abs_diff_ne( &self, other: &Oklab<T>, epsilon: <T as AbsDiffEq>::Epsilon, ) -> bool
AbsDiffEq::abs_diff_eq
.source§impl<T> AddAssign<T> for Oklab<T>
impl<T> AddAssign<T> for Oklab<T>
source§fn add_assign(&mut self, c: T)
fn add_assign(&mut self, c: T)
+=
operation. Read moresource§impl<T> AddAssign for Oklab<T>where
T: AddAssign,
impl<T> AddAssign for Oklab<T>where
T: AddAssign,
source§fn add_assign(&mut self, other: Oklab<T>)
fn add_assign(&mut self, other: Oklab<T>)
+=
operation. Read moresource§impl<T> ClampAssign for Oklab<T>
impl<T> ClampAssign for Oklab<T>
source§fn clamp_assign(&mut self)
fn clamp_assign(&mut self)
source§impl<T> Complementary for Oklab<T>where
T: Neg<Output = T>,
impl<T> Complementary for Oklab<T>where
T: Neg<Output = T>,
source§fn complementary(self) -> Oklab<T>
fn complementary(self) -> Oklab<T>
self
. Read moresource§impl<'de, T> Deserialize<'de> for Oklab<T>where
T: Deserialize<'de>,
impl<'de, T> Deserialize<'de> for Oklab<T>where
T: Deserialize<'de>,
source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<Oklab<T>, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<Oklab<T>, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
source§impl<T> DivAssign<T> for Oklab<T>
impl<T> DivAssign<T> for Oklab<T>
source§fn div_assign(&mut self, c: T)
fn div_assign(&mut self, c: T)
/=
operation. Read moresource§impl<T> DivAssign for Oklab<T>where
T: DivAssign,
impl<T> DivAssign for Oklab<T>where
T: DivAssign,
source§fn div_assign(&mut self, other: Oklab<T>)
fn div_assign(&mut self, other: Oklab<T>)
/=
operation. Read moresource§impl<T> EuclideanDistance for Oklab<T>
impl<T> EuclideanDistance for Oklab<T>
source§impl<T, C> Extend<Oklab<T>> for Oklab<C>where
C: Extend<T>,
impl<T, C> Extend<Oklab<T>> for Oklab<C>where
C: Extend<T>,
source§fn extend<I>(&mut self, iter: I)where
I: IntoIterator<Item = Oklab<T>>,
fn extend<I>(&mut self, iter: I)where
I: IntoIterator<Item = Oklab<T>>,
source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)source§impl<T, _C, _A> FromColorUnclamped<Alpha<_C, _A>> for Oklab<T>where
_C: IntoColorUnclamped<Oklab<T>>,
impl<T, _C, _A> FromColorUnclamped<Alpha<_C, _A>> for Oklab<T>where
_C: IntoColorUnclamped<Oklab<T>>,
source§impl<T, _S> FromColorUnclamped<Hsl<_S, T>> for Oklab<T>where
_S: RgbStandard,
<_S as RgbStandard>::Space: RgbSpace<WhitePoint = D65>,
D65: WhitePoint<T>,
Rgb<_S, T>: FromColorUnclamped<Hsl<_S, T>> + IntoColorUnclamped<Oklab<T>>,
impl<T, _S> FromColorUnclamped<Hsl<_S, T>> for Oklab<T>where
_S: RgbStandard,
<_S as RgbStandard>::Space: RgbSpace<WhitePoint = D65>,
D65: WhitePoint<T>,
Rgb<_S, T>: FromColorUnclamped<Hsl<_S, T>> + IntoColorUnclamped<Oklab<T>>,
source§impl<T> FromColorUnclamped<Hsluv<D65, T>> for Oklab<T>where
D65: WhitePoint<T>,
Xyz<D65, T>: FromColorUnclamped<Hsluv<D65, T>> + IntoColorUnclamped<Oklab<T>>,
impl<T> FromColorUnclamped<Hsluv<D65, T>> for Oklab<T>where
D65: WhitePoint<T>,
Xyz<D65, T>: FromColorUnclamped<Hsluv<D65, T>> + IntoColorUnclamped<Oklab<T>>,
source§impl<T, _S> FromColorUnclamped<Hsv<_S, T>> for Oklab<T>where
_S: RgbStandard,
<_S as RgbStandard>::Space: RgbSpace<WhitePoint = D65>,
D65: WhitePoint<T>,
Rgb<_S, T>: FromColorUnclamped<Hsv<_S, T>> + IntoColorUnclamped<Oklab<T>>,
impl<T, _S> FromColorUnclamped<Hsv<_S, T>> for Oklab<T>where
_S: RgbStandard,
<_S as RgbStandard>::Space: RgbSpace<WhitePoint = D65>,
D65: WhitePoint<T>,
Rgb<_S, T>: FromColorUnclamped<Hsv<_S, T>> + IntoColorUnclamped<Oklab<T>>,
source§impl<T, _S> FromColorUnclamped<Hwb<_S, T>> for Oklab<T>where
_S: RgbStandard,
<_S as RgbStandard>::Space: RgbSpace<WhitePoint = D65>,
D65: WhitePoint<T>,
Rgb<_S, T>: FromColorUnclamped<Hwb<_S, T>> + IntoColorUnclamped<Oklab<T>>,
impl<T, _S> FromColorUnclamped<Hwb<_S, T>> for Oklab<T>where
_S: RgbStandard,
<_S as RgbStandard>::Space: RgbSpace<WhitePoint = D65>,
D65: WhitePoint<T>,
Rgb<_S, T>: FromColorUnclamped<Hwb<_S, T>> + IntoColorUnclamped<Oklab<T>>,
source§impl<T> FromColorUnclamped<Lab<D65, T>> for Oklab<T>where
D65: WhitePoint<T>,
Xyz<D65, T>: FromColorUnclamped<Lab<D65, T>> + IntoColorUnclamped<Oklab<T>>,
impl<T> FromColorUnclamped<Lab<D65, T>> for Oklab<T>where
D65: WhitePoint<T>,
Xyz<D65, T>: FromColorUnclamped<Lab<D65, T>> + IntoColorUnclamped<Oklab<T>>,
source§impl<T> FromColorUnclamped<Lch<D65, T>> for Oklab<T>where
D65: WhitePoint<T>,
Xyz<D65, T>: FromColorUnclamped<Lch<D65, T>> + IntoColorUnclamped<Oklab<T>>,
impl<T> FromColorUnclamped<Lch<D65, T>> for Oklab<T>where
D65: WhitePoint<T>,
Xyz<D65, T>: FromColorUnclamped<Lch<D65, T>> + IntoColorUnclamped<Oklab<T>>,
source§impl<T> FromColorUnclamped<Lchuv<D65, T>> for Oklab<T>where
D65: WhitePoint<T>,
Xyz<D65, T>: FromColorUnclamped<Lchuv<D65, T>> + IntoColorUnclamped<Oklab<T>>,
impl<T> FromColorUnclamped<Lchuv<D65, T>> for Oklab<T>where
D65: WhitePoint<T>,
Xyz<D65, T>: FromColorUnclamped<Lchuv<D65, T>> + IntoColorUnclamped<Oklab<T>>,
source§impl<T, _S> FromColorUnclamped<Luma<_S, T>> for Oklab<T>where
_S: LumaStandard<WhitePoint = D65>,
D65: WhitePoint<T>,
Xyz<D65, T>: FromColorUnclamped<Luma<_S, T>> + IntoColorUnclamped<Oklab<T>>,
impl<T, _S> FromColorUnclamped<Luma<_S, T>> for Oklab<T>where
_S: LumaStandard<WhitePoint = D65>,
D65: WhitePoint<T>,
Xyz<D65, T>: FromColorUnclamped<Luma<_S, T>> + IntoColorUnclamped<Oklab<T>>,
source§impl<T> FromColorUnclamped<Luv<D65, T>> for Oklab<T>where
D65: WhitePoint<T>,
Xyz<D65, T>: FromColorUnclamped<Luv<D65, T>> + IntoColorUnclamped<Oklab<T>>,
impl<T> FromColorUnclamped<Luv<D65, T>> for Oklab<T>where
D65: WhitePoint<T>,
Xyz<D65, T>: FromColorUnclamped<Luv<D65, T>> + IntoColorUnclamped<Oklab<T>>,
source§impl<T> FromColorUnclamped<Okhsl<T>> for Oklab<T>where
T: RealAngle + One + Zero + Arithmetics + Sqrt + MinMax + PartialOrd + HasBoolMask<Mask = bool> + Powi + Cbrt + Trigonometry + Clone,
Oklab<T>: IntoColorUnclamped<Rgb<Linear<Srgb>, T>>,
impl<T> FromColorUnclamped<Okhsl<T>> for Oklab<T>where
T: RealAngle + One + Zero + Arithmetics + Sqrt + MinMax + PartialOrd + HasBoolMask<Mask = bool> + Powi + Cbrt + Trigonometry + Clone,
Oklab<T>: IntoColorUnclamped<Rgb<Linear<Srgb>, T>>,
§See
See okhsl_to_srgb
source§impl<T> FromColorUnclamped<Okhsv<T>> for Oklab<T>where
T: RealAngle + PartialOrd + HasBoolMask<Mask = bool> + MinMax + Powi + Arithmetics + Clone + One + Zero + Cbrt + Trigonometry,
Oklab<T>: IntoColorUnclamped<Rgb<Linear<Srgb>, T>>,
impl<T> FromColorUnclamped<Okhsv<T>> for Oklab<T>where
T: RealAngle + PartialOrd + HasBoolMask<Mask = bool> + MinMax + Powi + Arithmetics + Clone + One + Zero + Cbrt + Trigonometry,
Oklab<T>: IntoColorUnclamped<Rgb<Linear<Srgb>, T>>,
source§impl<T> FromColorUnclamped<Okhwb<T>> for Oklab<T>
impl<T> FromColorUnclamped<Okhwb<T>> for Oklab<T>
source§impl<S, T> FromColorUnclamped<Oklab<T>> for Hsl<S, T>
impl<S, T> FromColorUnclamped<Oklab<T>> for Hsl<S, T>
source§impl<Wp, T> FromColorUnclamped<Oklab<T>> for Hsluv<Wp, T>where
Wp: WhitePoint<T>,
Lchuv<Wp, T>: FromColorUnclamped<Oklab<T>> + IntoColorUnclamped<Hsluv<Wp, T>>,
impl<Wp, T> FromColorUnclamped<Oklab<T>> for Hsluv<Wp, T>where
Wp: WhitePoint<T>,
Lchuv<Wp, T>: FromColorUnclamped<Oklab<T>> + IntoColorUnclamped<Hsluv<Wp, T>>,
source§impl<S, T> FromColorUnclamped<Oklab<T>> for Hsv<S, T>
impl<S, T> FromColorUnclamped<Oklab<T>> for Hsv<S, T>
source§impl<S, T> FromColorUnclamped<Oklab<T>> for Hwb<S, T>
impl<S, T> FromColorUnclamped<Oklab<T>> for Hwb<S, T>
source§impl<Wp, T> FromColorUnclamped<Oklab<T>> for Lab<Wp, T>
impl<Wp, T> FromColorUnclamped<Oklab<T>> for Lab<Wp, T>
source§impl<Wp, T> FromColorUnclamped<Oklab<T>> for Lch<Wp, T>
impl<Wp, T> FromColorUnclamped<Oklab<T>> for Lch<Wp, T>
source§impl<Wp, T> FromColorUnclamped<Oklab<T>> for Lchuv<Wp, T>where
Wp: WhitePoint<T>,
Luv<Wp, T>: FromColorUnclamped<Oklab<T>> + IntoColorUnclamped<Lchuv<Wp, T>>,
impl<Wp, T> FromColorUnclamped<Oklab<T>> for Lchuv<Wp, T>where
Wp: WhitePoint<T>,
Luv<Wp, T>: FromColorUnclamped<Oklab<T>> + IntoColorUnclamped<Lchuv<Wp, T>>,
source§impl<S, T> FromColorUnclamped<Oklab<T>> for Luma<S, T>where
S: LumaStandard,
Xyz<<S as LumaStandard>::WhitePoint, T>: FromColorUnclamped<Oklab<T>> + IntoColorUnclamped<Luma<S, T>>,
impl<S, T> FromColorUnclamped<Oklab<T>> for Luma<S, T>where
S: LumaStandard,
Xyz<<S as LumaStandard>::WhitePoint, T>: FromColorUnclamped<Oklab<T>> + IntoColorUnclamped<Luma<S, T>>,
source§impl<Wp, T> FromColorUnclamped<Oklab<T>> for Luv<Wp, T>
impl<Wp, T> FromColorUnclamped<Oklab<T>> for Luv<Wp, T>
source§impl<T> FromColorUnclamped<Oklab<T>> for Okhsl<T>where
T: Zero + Arithmetics + Powi + Sqrt + Hypot + MinMax + Cbrt + IsValidDivisor<Mask = bool, Mask = bool> + HasBoolMask + Real + PartialOrd + Clone + One,
Oklab<T>: GetHue<Hue = OklabHue<T>> + IntoColorUnclamped<Rgb<Linear<Srgb>, T>>,
impl<T> FromColorUnclamped<Oklab<T>> for Okhsl<T>where
T: Zero + Arithmetics + Powi + Sqrt + Hypot + MinMax + Cbrt + IsValidDivisor<Mask = bool, Mask = bool> + HasBoolMask + Real + PartialOrd + Clone + One,
Oklab<T>: GetHue<Hue = OklabHue<T>> + IntoColorUnclamped<Rgb<Linear<Srgb>, T>>,
§See
See srgb_to_okhsl
source§impl<T> FromColorUnclamped<Oklab<T>> for Okhsv<T>where
T: Clone + Powi + Sqrt + Cbrt + Arithmetics + Trigonometry + Zero + Hypot + One + IsValidDivisor<Mask = bool, Mask = bool> + HasBoolMask + Real + PartialOrd + MinMax,
Oklab<T>: GetHue<Hue = OklabHue<T>> + IntoColorUnclamped<Rgb<Linear<Srgb>, T>>,
impl<T> FromColorUnclamped<Oklab<T>> for Okhsv<T>where
T: Clone + Powi + Sqrt + Cbrt + Arithmetics + Trigonometry + Zero + Hypot + One + IsValidDivisor<Mask = bool, Mask = bool> + HasBoolMask + Real + PartialOrd + MinMax,
Oklab<T>: GetHue<Hue = OklabHue<T>> + IntoColorUnclamped<Rgb<Linear<Srgb>, T>>,
Converts lab
to Okhsv
in the bounds of sRGB.
§See
See srgb_to_okhsv
.
This implementation differs from srgb_to_okhsv in that it starts with the lab
value and produces hues in degrees, whereas srgb_to_okhsv
produces degree/360.
source§impl<T> FromColorUnclamped<Oklab<T>> for Okhwb<T>
impl<T> FromColorUnclamped<Oklab<T>> for Okhwb<T>
source§impl<T> FromColorUnclamped<Oklab<T>> for Oklab<T>
impl<T> FromColorUnclamped<Oklab<T>> for Oklab<T>
source§impl<T> FromColorUnclamped<Oklab<T>> for Oklch<T>
impl<T> FromColorUnclamped<Oklab<T>> for Oklch<T>
source§impl<S, T> FromColorUnclamped<Oklab<T>> for Rgb<S, T>where
T: Real + Arithmetics + Copy,
S: RgbStandard,
<S as RgbStandard>::TransferFn: FromLinear<T, T>,
<S as RgbStandard>::Space: RgbSpace<WhitePoint = D65> + 'static,
Rgb<Linear<Srgb>, T>: IntoColorUnclamped<Rgb<S, T>>,
Xyz<D65, T>: FromColorUnclamped<Oklab<T>> + IntoColorUnclamped<Rgb<S, T>>,
impl<S, T> FromColorUnclamped<Oklab<T>> for Rgb<S, T>where
T: Real + Arithmetics + Copy,
S: RgbStandard,
<S as RgbStandard>::TransferFn: FromLinear<T, T>,
<S as RgbStandard>::Space: RgbSpace<WhitePoint = D65> + 'static,
Rgb<Linear<Srgb>, T>: IntoColorUnclamped<Rgb<S, T>>,
Xyz<D65, T>: FromColorUnclamped<Oklab<T>> + IntoColorUnclamped<Rgb<S, T>>,
source§impl<Wp, T> FromColorUnclamped<Oklab<T>> for Yxy<Wp, T>
impl<Wp, T> FromColorUnclamped<Oklab<T>> for Yxy<Wp, T>
source§impl<T> FromColorUnclamped<Oklch<T>> for Oklab<T>
impl<T> FromColorUnclamped<Oklch<T>> for Oklab<T>
source§impl<S, T> FromColorUnclamped<Rgb<S, T>> for Oklab<T>where
T: Real + Cbrt + Arithmetics + Copy,
S: RgbStandard,
<S as RgbStandard>::TransferFn: IntoLinear<T, T>,
<S as RgbStandard>::Space: RgbSpace<WhitePoint = D65> + 'static,
Xyz<D65, T>: FromColorUnclamped<Rgb<S, T>>,
impl<S, T> FromColorUnclamped<Rgb<S, T>> for Oklab<T>where
T: Real + Cbrt + Arithmetics + Copy,
S: RgbStandard,
<S as RgbStandard>::TransferFn: IntoLinear<T, T>,
<S as RgbStandard>::Space: RgbSpace<WhitePoint = D65> + 'static,
Xyz<D65, T>: FromColorUnclamped<Rgb<S, T>>,
source§impl<T> FromColorUnclamped<Yxy<D65, T>> for Oklab<T>where
D65: WhitePoint<T>,
Xyz<D65, T>: FromColorUnclamped<Yxy<D65, T>> + IntoColorUnclamped<Oklab<T>>,
impl<T> FromColorUnclamped<Yxy<D65, T>> for Oklab<T>where
D65: WhitePoint<T>,
Xyz<D65, T>: FromColorUnclamped<Yxy<D65, T>> + IntoColorUnclamped<Oklab<T>>,
source§impl<T, C> FromIterator<Oklab<T>> for Oklab<C>
impl<T, C> FromIterator<Oklab<T>> for Oklab<C>
source§impl<T> HasBoolMask for Oklab<T>where
T: HasBoolMask,
impl<T> HasBoolMask for Oklab<T>where
T: HasBoolMask,
source§type Mask = <T as HasBoolMask>::Mask
type Mask = <T as HasBoolMask>::Mask
Self
values.source§impl<'a, 'b, T> IntoIterator for &'a Oklab<&'b [T]>
impl<'a, 'b, T> IntoIterator for &'a Oklab<&'b [T]>
source§impl<'a, 'b, T> IntoIterator for &'a Oklab<&'b mut [T]>
impl<'a, 'b, T> IntoIterator for &'a Oklab<&'b mut [T]>
source§impl<'a, T> IntoIterator for &'a Oklab<Vec<T>>
impl<'a, T> IntoIterator for &'a Oklab<Vec<T>>
source§impl<'a, 'b, T> IntoIterator for &'a mut Oklab<&'b mut [T]>
impl<'a, 'b, T> IntoIterator for &'a mut Oklab<&'b mut [T]>
source§impl<'a, T> IntoIterator for &'a mut Oklab<Vec<T>>
impl<'a, T> IntoIterator for &'a mut Oklab<Vec<T>>
source§impl<'a, T> IntoIterator for Oklab<&'a [T]>
impl<'a, T> IntoIterator for Oklab<&'a [T]>
source§impl<'a, T> IntoIterator for Oklab<&'a mut [T]>
impl<'a, T> IntoIterator for Oklab<&'a mut [T]>
source§impl<T> IntoIterator for Oklab<Vec<T>>
impl<T> IntoIterator for Oklab<Vec<T>>
source§impl<T> IsWithinBounds for Oklab<T>where
T: PartialCmp + Zero + One,
<T as HasBoolMask>::Mask: BitAnd<Output = <T as HasBoolMask>::Mask>,
impl<T> IsWithinBounds for Oklab<T>where
T: PartialCmp + Zero + One,
<T as HasBoolMask>::Mask: BitAnd<Output = <T as HasBoolMask>::Mask>,
source§fn is_within_bounds(&self) -> <T as HasBoolMask>::Mask
fn is_within_bounds(&self) -> <T as HasBoolMask>::Mask
source§impl<T> Lighten for Oklab<T>where
T: Real + Zero + MinMax + Clamp + Arithmetics + PartialCmp + Clone + One,
<T as HasBoolMask>::Mask: LazySelect<T>,
impl<T> Lighten for Oklab<T>where
T: Real + Zero + MinMax + Clamp + Arithmetics + PartialCmp + Clone + One,
<T as HasBoolMask>::Mask: LazySelect<T>,
source§impl<T> LightenAssign for Oklab<T>where
T: Real + Zero + MinMax + ClampAssign + AddAssign + Arithmetics + PartialCmp + Clone + One,
<T as HasBoolMask>::Mask: LazySelect<T>,
impl<T> LightenAssign for Oklab<T>where
T: Real + Zero + MinMax + ClampAssign + AddAssign + Arithmetics + PartialCmp + Clone + One,
<T as HasBoolMask>::Mask: LazySelect<T>,
source§fn lighten_assign(&mut self, factor: T)
fn lighten_assign(&mut self, factor: T)
source§fn lighten_fixed_assign(&mut self, amount: T)
fn lighten_fixed_assign(&mut self, amount: T)
source§impl<T> MulAssign<T> for Oklab<T>
impl<T> MulAssign<T> for Oklab<T>
source§fn mul_assign(&mut self, c: T)
fn mul_assign(&mut self, c: T)
*=
operation. Read moresource§impl<T> MulAssign for Oklab<T>where
T: MulAssign,
impl<T> MulAssign for Oklab<T>where
T: MulAssign,
source§fn mul_assign(&mut self, other: Oklab<T>)
fn mul_assign(&mut self, other: Oklab<T>)
*=
operation. Read moresource§impl<T> Premultiply for Oklab<T>where
T: Stimulus + Zero + IsValidDivisor + Mul<Output = T> + Div<Output = T> + Real + Clone,
<T as HasBoolMask>::Mask: LazySelect<T> + Clone,
impl<T> Premultiply for Oklab<T>where
T: Stimulus + Zero + IsValidDivisor + Mul<Output = T> + Div<Output = T> + Real + Clone,
<T as HasBoolMask>::Mask: LazySelect<T> + Clone,
source§impl<T> RelativeContrast for Oklab<T>where
T: Real + Arithmetics + PartialCmp,
<T as HasBoolMask>::Mask: LazySelect<T>,
Xyz<D65, T>: FromColor<Oklab<T>>,
impl<T> RelativeContrast for Oklab<T>where
T: Real + Arithmetics + PartialCmp,
<T as HasBoolMask>::Mask: LazySelect<T>,
Xyz<D65, T>: FromColor<Oklab<T>>,
source§type Scalar = T
type Scalar = T
palette::color_difference::Wcag21RelativeContrast
source§fn get_contrast_ratio(self, other: Oklab<T>) -> T
fn get_contrast_ratio(self, other: Oklab<T>) -> T
palette::color_difference::Wcag21RelativeContrast
source§fn has_min_contrast_text(
self,
other: Self,
) -> <Self::Scalar as HasBoolMask>::Mask
fn has_min_contrast_text( self, other: Self, ) -> <Self::Scalar as HasBoolMask>::Mask
palette::color_difference::Wcag21RelativeContrast
source§fn has_min_contrast_large_text(
self,
other: Self,
) -> <Self::Scalar as HasBoolMask>::Mask
fn has_min_contrast_large_text( self, other: Self, ) -> <Self::Scalar as HasBoolMask>::Mask
palette::color_difference::Wcag21RelativeContrast
source§fn has_enhanced_contrast_text(
self,
other: Self,
) -> <Self::Scalar as HasBoolMask>::Mask
fn has_enhanced_contrast_text( self, other: Self, ) -> <Self::Scalar as HasBoolMask>::Mask
palette::color_difference::Wcag21RelativeContrast
source§fn has_enhanced_contrast_large_text(
self,
other: Self,
) -> <Self::Scalar as HasBoolMask>::Mask
fn has_enhanced_contrast_large_text( self, other: Self, ) -> <Self::Scalar as HasBoolMask>::Mask
palette::color_difference::Wcag21RelativeContrast
source§fn has_min_contrast_graphics(
self,
other: Self,
) -> <Self::Scalar as HasBoolMask>::Mask
fn has_min_contrast_graphics( self, other: Self, ) -> <Self::Scalar as HasBoolMask>::Mask
palette::color_difference::Wcag21RelativeContrast
source§impl<T> RelativeEq for Oklab<T>
impl<T> RelativeEq for Oklab<T>
source§fn default_max_relative() -> <T as AbsDiffEq>::Epsilon
fn default_max_relative() -> <T as AbsDiffEq>::Epsilon
source§fn relative_eq(
&self,
other: &Oklab<T>,
epsilon: <T as AbsDiffEq>::Epsilon,
max_relative: <T as AbsDiffEq>::Epsilon,
) -> bool
fn relative_eq( &self, other: &Oklab<T>, epsilon: <T as AbsDiffEq>::Epsilon, max_relative: <T as AbsDiffEq>::Epsilon, ) -> bool
source§fn relative_ne(
&self,
other: &Oklab<T>,
epsilon: <T as AbsDiffEq>::Epsilon,
max_relative: <T as AbsDiffEq>::Epsilon,
) -> bool
fn relative_ne( &self, other: &Oklab<T>, epsilon: <T as AbsDiffEq>::Epsilon, max_relative: <T as AbsDiffEq>::Epsilon, ) -> bool
RelativeEq::relative_eq
.source§impl<T> SaturatingAdd<T> for Oklab<T>where
T: SaturatingAdd<Output = T> + Clone,
impl<T> SaturatingAdd<T> for Oklab<T>where
T: SaturatingAdd<Output = T> + Clone,
source§fn saturating_add(self, c: T) -> <Oklab<T> as SaturatingAdd<T>>::Output
fn saturating_add(self, c: T) -> <Oklab<T> as SaturatingAdd<T>>::Output
self
and other
, but saturates instead of overflowing.source§impl<T> SaturatingAdd for Oklab<T>where
T: SaturatingAdd<Output = T>,
impl<T> SaturatingAdd for Oklab<T>where
T: SaturatingAdd<Output = T>,
source§impl<T> SaturatingSub<T> for Oklab<T>where
T: SaturatingSub<Output = T> + Clone,
impl<T> SaturatingSub<T> for Oklab<T>where
T: SaturatingSub<Output = T> + Clone,
source§fn saturating_sub(self, c: T) -> <Oklab<T> as SaturatingSub<T>>::Output
fn saturating_sub(self, c: T) -> <Oklab<T> as SaturatingSub<T>>::Output
self
and other
, but saturates instead of overflowing.source§impl<T> SaturatingSub for Oklab<T>where
T: SaturatingSub<Output = T>,
impl<T> SaturatingSub for Oklab<T>where
T: SaturatingSub<Output = T>,
source§impl<T> Serialize for Oklab<T>where
T: Serialize,
impl<T> Serialize for Oklab<T>where
T: Serialize,
source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
source§impl<T> SubAssign<T> for Oklab<T>
impl<T> SubAssign<T> for Oklab<T>
source§fn sub_assign(&mut self, c: T)
fn sub_assign(&mut self, c: T)
-=
operation. Read moresource§impl<T> SubAssign for Oklab<T>where
T: SubAssign,
impl<T> SubAssign for Oklab<T>where
T: SubAssign,
source§fn sub_assign(&mut self, other: Oklab<T>)
fn sub_assign(&mut self, other: Oklab<T>)
-=
operation. Read moresource§impl<T> UlpsEq for Oklab<T>
impl<T> UlpsEq for Oklab<T>
source§fn default_max_ulps() -> u32
fn default_max_ulps() -> u32
source§impl<T, _A> WithAlpha<_A> for Oklab<T>where
_A: Stimulus,
impl<T, _A> WithAlpha<_A> for Oklab<T>where
_A: Stimulus,
source§fn with_alpha(self, alpha: _A) -> <Oklab<T> as WithAlpha<_A>>::WithAlpha
fn with_alpha(self, alpha: _A) -> <Oklab<T> as WithAlpha<_A>>::WithAlpha
Self
already has a transparency, it is
overwritten. Read moresource§fn without_alpha(self) -> <Oklab<T> as WithAlpha<_A>>::Color
fn without_alpha(self) -> <Oklab<T> as WithAlpha<_A>>::Color
Self::Color
has
an internal transparency field, that field will be set to
A::max_intensity()
to make it opaque. Read moresource§fn split(self) -> (<Oklab<T> as WithAlpha<_A>>::Color, _A)
fn split(self) -> (<Oklab<T> as WithAlpha<_A>>::Color, _A)
impl<T> Copy for Oklab<T>where
T: Copy,
impl<T> Eq for Oklab<T>where
T: Eq,
Auto Trait Implementations§
impl<T> Freeze for Oklab<T>where
T: Freeze,
impl<T> RefUnwindSafe for Oklab<T>where
T: RefUnwindSafe,
impl<T> Send for Oklab<T>where
T: Send,
impl<T> Sync for Oklab<T>where
T: Sync,
impl<T> Unpin for Oklab<T>where
T: Unpin,
impl<T> UnwindSafe for Oklab<T>where
T: UnwindSafe,
Blanket Implementations§
source§impl<S, D, Swp, Dwp, T> AdaptFrom<S, Swp, Dwp, T> for Dwhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
S: IntoColorUnclamped<Xyz<Swp, T>>,
D: FromColorUnclamped<Xyz<Dwp, T>>,
impl<S, D, Swp, Dwp, T> AdaptFrom<S, Swp, Dwp, T> for Dwhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
S: IntoColorUnclamped<Xyz<Swp, T>>,
D: FromColorUnclamped<Xyz<Dwp, T>>,
source§fn adapt_from_using<M>(color: S, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_from_using<M>(color: S, method: M) -> Dwhere
M: TransformMatrix<T>,
source§fn adapt_from(color: S) -> Self
fn adapt_from(color: S) -> Self
source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
source§impl<T, Res> Apply<Res> for Twhere
T: ?Sized,
impl<T, Res> Apply<Res> for Twhere
T: ?Sized,
source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
source§impl<C> BlendWith for C
impl<C> BlendWith for C
source§fn blend_with<F>(self, other: C, blend_function: F) -> C
fn blend_with<F>(self, other: C, blend_function: F) -> C
destination
, using
blend_function
. Anything that implements BlendFunction
is
acceptable, including functions and closures. Read moresource§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters
when converting.source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
source§impl<C> Compose for C
impl<C> Compose for C
source§fn over(self, other: C) -> C
fn over(self, other: C) -> C
self
over other
. This is the good old common alpha composition
equation.source§fn inside(self, other: C) -> C
fn inside(self, other: C) -> C
self
that overlaps the visible parts of
other
.source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle
.source§impl<T, U> FromColor<T> for Uwhere
U: FromColorUnclamped<T> + Clamp,
impl<T, U> FromColor<T> for Uwhere
U: FromColorUnclamped<T> + Clamp,
source§fn from_color(t: T) -> U
fn from_color(t: T) -> U
source§impl<T, U> FromColorMut<U> for T
impl<T, U> FromColorMut<U> for T
source§fn from_color_mut(color: &mut U) -> FromColorMutGuard<'_, T, U>
fn from_color_mut(color: &mut U) -> FromColorMutGuard<'_, T, U>
source§impl<T, U> FromColorUnclampedMut<U> for Twhere
T: FromColorUnclamped<U> + ArrayCast + Clone,
U: FromColorUnclamped<T> + ArrayCast<Array = <T as ArrayCast>::Array> + Clone,
impl<T, U> FromColorUnclampedMut<U> for Twhere
T: FromColorUnclamped<U> + ArrayCast + Clone,
U: FromColorUnclamped<T> + ArrayCast<Array = <T as ArrayCast>::Array> + Clone,
source§fn from_color_unclamped_mut(
color: &mut U,
) -> FromColorUnclampedMutGuard<'_, T, U>
fn from_color_unclamped_mut( color: &mut U, ) -> FromColorUnclampedMutGuard<'_, T, U>
source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other
into Self
, while performing the appropriate scaling,
rounding and clamping.source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
source§fn into_angle(self) -> U
fn into_angle(self) -> U
T
.source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters
when converting.source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
source§fn into_color(self) -> U
fn into_color(self) -> U
source§impl<T, U> IntoColorMut<T> for U
impl<T, U> IntoColorMut<T> for U
source§fn into_color_mut(&mut self) -> FromColorMutGuard<'_, T, U>
fn into_color_mut(&mut self) -> FromColorMutGuard<'_, T, U>
source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
source§impl<T, U> IntoColorUnclampedMut<T> for U
impl<T, U> IntoColorUnclampedMut<T> for U
source§fn into_color_unclamped_mut(&mut self) -> FromColorUnclampedMutGuard<'_, T, U>
fn into_color_unclamped_mut(&mut self) -> FromColorUnclampedMutGuard<'_, T, U>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self
into T
, while performing the appropriate scaling,
rounding and clamping.source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian()
.source§impl<T> ToHex for T
impl<T> ToHex for T
source§fn encode_hex<U>(&self) -> Uwhere
U: FromIterator<char>,
fn encode_hex<U>(&self) -> Uwhere
U: FromIterator<char>,
self
into the result. Lower case
letters are used (e.g. f9b4ca
)source§fn encode_hex_upper<U>(&self) -> Uwhere
U: FromIterator<char>,
fn encode_hex_upper<U>(&self) -> Uwhere
U: FromIterator<char>,
self
into the result. Upper case
letters are used (e.g. F9B4CA
)source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors
fails to cast.source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
source§impl<T, U> TryFromColor<T> for U
impl<T, U> TryFromColor<T> for U
source§fn try_from_color(t: T) -> Result<U, OutOfBounds<U>>
fn try_from_color(t: T) -> Result<U, OutOfBounds<U>>
OutOfBounds
error is returned which contains
the unclamped color. Read moresource§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds
error is returned which contains
the unclamped color. Read more