Trait cosmic::cosmic_theme::palette::FromColor
source · pub trait FromColor<T>: Sized {
// Required method
fn from_color(t: T) -> Self;
}
Expand description
A trait for converting one color from another, in a possibly lossy way.
U: FromColor<T>
is implemented for every type U: FromColorUnclamped<T> + Clamp
, as well as for Vec<T>
and Box<[T]>
where T
and U
have the
same memory layout.
See FromColorUnclamped
for a
lossless version of this trait. See
TryFromColor
for a trait that gives an
error when the result is out of bounds.
§The Difference Between FromColor and From
The conversion traits, including FromColor
, were added to gain even more
flexibility than what From
and the other standard library traits can give.
There are a few subtle, but important, differences in their semantics:
FromColor
andIntoColor
are allowed to be lossy, meaning convertingA -> B -> A
may result in a different value than the original. This applies toA -> A
as well.From<Self>
andInto<Self>
are blanket implemented, whileFromColor<Self>
andIntoColor<Self>
have to be manually implemented. This allows additional flexibility, such as allowing implementingFromColor<Rgb<S2, T>> for Rgb<S1, T>
.- Implementing
FromColorUnclamped
,IsWithinBounds
andClamp
is enough to get all the other conversion traits, whileFrom
andInto
would not be possible to blanket implement in the same way. This also reduces the work that needs to be done by macros.
See the convert
module for how to implement
FromColorUnclamped
for custom colors.
Required Methods§
sourcefn from_color(t: T) -> Self
fn from_color(t: T) -> Self
Convert from T with values clamped to the color defined bounds.
use palette::{IsWithinBounds, FromColor, Lch, Srgb};
let rgb = Srgb::from_color(Lch::new(50.0f32, 100.0, -175.0));
assert!(rgb.is_within_bounds());
Object Safety§
Implementations on Foreign Types§
source§impl<T, U> FromColor<Box<[T]>> for Box<[U]>
impl<T, U> FromColor<Box<[T]>> for Box<[U]>
source§fn from_color(color: Box<[T]>) -> Box<[U]>
fn from_color(color: Box<[T]>) -> Box<[U]>
Convert all colors in place, without reallocating.
use palette::{convert::FromColor, SaturateAssign, Srgb, Lch};
let srgb = vec![Srgb::new(0.8f32, 1.0, 0.2), Srgb::new(0.9, 0.1, 0.3)].into_boxed_slice();
let mut lch = Box::<[Lch]>::from_color(srgb);
lch.saturate_assign(0.1);
let srgb = Box::<[Srgb]>::from_color(lch);
source§impl<T, U> FromColor<Vec<T>> for Vec<U>
impl<T, U> FromColor<Vec<T>> for Vec<U>
source§fn from_color(color: Vec<T>) -> Vec<U>
fn from_color(color: Vec<T>) -> Vec<U>
Convert all colors in place, without reallocating.
use palette::{convert::FromColor, SaturateAssign, Srgb, Lch};
let srgb = vec![Srgb::new(0.8f32, 1.0, 0.2), Srgb::new(0.9, 0.1, 0.3)];
let mut lch = Vec::<Lch>::from_color(srgb);
lch.saturate_assign(0.1);
let srgb = Vec::<Srgb>::from_color(lch);