Add normalize_channel method
This commit is contained in:
parent
659226b15e
commit
fd9fcd2075
3 changed files with 18 additions and 15 deletions
|
@ -71,18 +71,21 @@ impl Channel for f64 {
|
|||
}
|
||||
|
||||
pub trait FloatChannel: Float + Channel {
|
||||
pub fn invert_degrees(&self) -> Self;
|
||||
pub fn normalize_channel(&self) -> Self;
|
||||
pub fn normalize_degrees(&self) -> Self;
|
||||
pub fn invert_degrees(&self) -> Self;
|
||||
}
|
||||
|
||||
impl FloatChannel for f32 {
|
||||
#[inline] pub fn invert_degrees(&self) -> f32 { ((*self) + 180.0).normalize_degrees() }
|
||||
#[inline] pub fn normalize_channel(&self) -> f32 { self.clamp(&0.0, &1.0) }
|
||||
#[inline] pub fn normalize_degrees(&self) -> f32 { (*self) % 360.0 }
|
||||
#[inline] pub fn invert_degrees(&self) -> f32 { ((*self) + 180.0).normalize_degrees() }
|
||||
}
|
||||
|
||||
impl FloatChannel for f64 {
|
||||
#[inline] pub fn invert_degrees(&self) -> f64 { ((*self) + 180.0).normalize_degrees() }
|
||||
#[inline] pub fn normalize_channel(&self) -> f64 { self.clamp(&0.0, &1.0) }
|
||||
#[inline] pub fn normalize_degrees(&self) -> f64 { (*self) % 360.0 }
|
||||
#[inline] pub fn invert_degrees(&self) -> f64 { ((*self) + 180.0).normalize_degrees() }
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
|
|
@ -56,8 +56,8 @@ impl<T:FloatChannel> FloatColor<T> for HSV<T> {
|
|||
#[inline]
|
||||
pub fn normalize(&self) -> HSV<T> {
|
||||
HSV::new((*self).h.normalize_degrees(),
|
||||
(*self).s.clamp(&zero!(T), &one!(T)),
|
||||
(*self).v.clamp(&zero!(T), &one!(T)))
|
||||
(*self).s.normalize_channel(),
|
||||
(*self).v.normalize_channel())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -171,9 +171,9 @@ impl<T:FloatChannel> FloatColor<T> for HSVA<T> {
|
|||
#[inline]
|
||||
pub fn normalize(&self) -> HSVA<T> {
|
||||
HSVA::new((*self).h.normalize_degrees(),
|
||||
(*self).s.clamp(&zero!(T), &one!(T)),
|
||||
(*self).v.clamp(&zero!(T), &one!(T)),
|
||||
(*self).a.clamp(&zero!(T), &one!(T)))
|
||||
(*self).s.normalize_channel(),
|
||||
(*self).v.normalize_channel(),
|
||||
(*self).a.normalize_channel())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -55,9 +55,9 @@ impl<T:FloatChannel> FloatColor<T> for RGB<T> {
|
|||
/// Normalizes the components of the color by clamping them to the range `(0,1)`.
|
||||
#[inline]
|
||||
pub fn normalize(&self) -> RGB<T> {
|
||||
RGB::new((*self).r.clamp(&zero!(T), &one!(T)),
|
||||
(*self).g.clamp(&zero!(T), &one!(T)),
|
||||
(*self).b.clamp(&zero!(T), &one!(T)))
|
||||
RGB::new((*self).r.normalize_channel(),
|
||||
(*self).g.normalize_channel(),
|
||||
(*self).b.normalize_channel())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -166,10 +166,10 @@ impl<T:FloatChannel> FloatColor<T> for RGBA<T> {
|
|||
/// Normalizes the components of the color by clamping them to the range `(0,1)`.
|
||||
#[inline]
|
||||
pub fn normalize(&self) -> RGBA<T> {
|
||||
RGBA::new((*self).r.clamp(&zero!(T), &one!(T)),
|
||||
(*self).g.clamp(&zero!(T), &one!(T)),
|
||||
(*self).b.clamp(&zero!(T), &one!(T)),
|
||||
(*self).a.clamp(&zero!(T), &one!(T)))
|
||||
RGBA::new((*self).r.normalize_channel(),
|
||||
(*self).g.normalize_channel(),
|
||||
(*self).b.normalize_channel(),
|
||||
(*self).a.normalize_channel())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue