diff --git a/src/color/channel.rs b/src/color/channel.rs index b1b9eba..b6b2b8e 100644 --- a/src/color/channel.rs +++ b/src/color/channel.rs @@ -15,7 +15,7 @@ pub trait Channel: Num { pub fn from(chan: T) -> Self; - + pub fn to_channel(&self) -> T; pub fn to_channel_u8(&self) -> u8; pub fn to_channel_u16(&self) -> u16; pub fn to_channel_f32(&self) -> f32; @@ -24,7 +24,7 @@ pub trait Channel: Num { impl Channel for u8 { #[inline] pub fn from(chan: T) -> u8 { chan.to_channel_u8() } - + #[inlune] pub fn to_channel(&self) -> T { Channel::from(*self) } #[inline] pub fn to_channel_u8(&self) -> u8 { (*self) } #[inline] pub fn to_channel_u16(&self) -> u16 { (*self as u16 << 8) | (*self) as u16 } #[inline] pub fn to_channel_f32(&self) -> f32 { (*self as f32) / (0xFF as f32) } @@ -33,7 +33,7 @@ impl Channel for u8 { impl Channel for u16 { #[inline] pub fn from(chan: T) -> u16 { chan.to_channel_u16() } - + #[inlune] pub fn to_channel(&self) -> T { Channel::from(*self) } #[inline] pub fn to_channel_u8(&self) -> u8 { (*self >> 8) as u8 } #[inline] pub fn to_channel_u16(&self) -> u16 { (*self) } #[inline] pub fn to_channel_f32(&self) -> f32 { (*self) / 0xFFFF as f32 } @@ -42,8 +42,8 @@ impl Channel for u16 { impl Channel for f32 { #[inline] pub fn from(chan: T) -> f32 { chan.to_channel_f32() } - - #[inline] pub fn to_channel_u8(&self) -> u8 { (*self) * (0xFF_u8 as f32) as u8 } + #[inlune] pub fn to_channel(&self) -> T { Channel::from(*self) } + #[inline] pub fn to_channel_u8(&self) -> u8 { (*self) * (0xFF_u8 as f32) as u8 } #[inline] pub fn to_channel_u16(&self) -> u16 { (*self) * (0xFFFF_u16 as f32) as u16 } #[inline] pub fn to_channel_f32(&self) -> f32 { (*self) } #[inline] pub fn to_channel_f64(&self) -> f64 { (*self) as f64 } @@ -51,8 +51,8 @@ impl Channel for f32 { impl Channel for f64 { #[inline] pub fn from(chan: T) -> f64 { chan.to_channel_f64() } - - #[inline] pub fn to_channel_u8(&self) -> u8 { (*self) * (0xFF_u8 as f64) as u8 } + #[inlune] pub fn to_channel(&self) -> T { Channel::from(*self) } + #[inline] pub fn to_channel_u8(&self) -> u8 { (*self) * (0xFF_u8 as f64) as u8 } #[inline] pub fn to_channel_u16(&self) -> u16 { (*self) * (0xFFFF_u16 as f64) as u16 } #[inline] pub fn to_channel_f32(&self) -> f32 { (*self) as f32 } #[inline] pub fn to_channel_f64(&self) -> f64 { (*self) } @@ -118,9 +118,11 @@ mod tests { assert_eq!(0.75f32.to_channel_u16(), 0xBFFF); assert_eq!(1.00f32.to_channel_u16(), 0xFFFF); - // TODO: test to_channel_f32() + assert_eq!(0.00f32.to_channel_f32(), 0.00f32); + assert_eq!(1.00f32.to_channel_f32(), 1.00f32); - // TODO: test to_channel_f64() + assert_eq!(0.00f32.to_channel_f64(), 0.00f64); + assert_eq!(1.00f32.to_channel_f64(), 1.00f64); } #[test] @@ -137,8 +139,10 @@ mod tests { assert_eq!(0.75f64.to_channel_u16(), 0xBFFF); assert_eq!(1.00f64.to_channel_u16(), 0xFFFF); - // TODO: test to_channel_f32() + assert_eq!(0.00f64.to_channel_f32(), 0.00f32); + assert_eq!(1.00f64.to_channel_f32(), 1.00f32); - // TODO: test to_channel_f64() + assert_eq!(0.00f64.to_channel_f64(), 0.00f64); + assert_eq!(1.00f64.to_channel_f64(), 1.00f64); } } diff --git a/src/color/hsv.rs b/src/color/hsv.rs index ce8b570..6c4edc3 100644 --- a/src/color/hsv.rs +++ b/src/color/hsv.rs @@ -38,9 +38,9 @@ pub trait ToHSV { impl ToHSV for HSV { #[inline] pub fn to_hsv(&self) -> HSV { - HSV::new(Channel::from((*self).h.clone()), - Channel::from((*self).s.clone()), - Channel::from((*self).v.clone())) + HSV::new((*self).h.to_channel(), + (*self).s.to_channel(), + (*self).v.to_channel()) } } @@ -110,10 +110,7 @@ impl ToHSVA for (C, T) { pub fn to_hsva(&self) -> HSVA { match *self { (ref hsv, ref a) => { - HSVA::from_hsv_a( - hsv.to_hsv(), - Channel::from(a.clone()) - ) + HSVA::from_hsv_a(hsv.to_hsv(), a.to_channel()) } } } @@ -122,9 +119,6 @@ impl ToHSVA for (C, T) { impl ToRGBA for HSVA { #[inline] pub fn to_rgba(&self) -> RGBA { - RGBA::from_rgb_a( - self.hsv().to_rgb(), - Channel::from((*self).a.clone()) - ) + RGBA::from_rgb_a(self.hsv().to_rgb(), (*self).a.to_channel()) } } diff --git a/src/color/rgb.rs b/src/color/rgb.rs index 74b35ca..5359927 100644 --- a/src/color/rgb.rs +++ b/src/color/rgb.rs @@ -39,9 +39,9 @@ pub trait ToRGB { impl ToRGB for RGB { #[inline] pub fn to_rgb(&self) -> RGB { - RGB::new(Channel::from((*self).r.clone()), - Channel::from((*self).g.clone()), - Channel::from((*self).b.clone())) + RGB::new((*self).r.to_channel(), + (*self).g.to_channel(), + (*self).b.to_channel()) } } @@ -108,7 +108,7 @@ impl ToRGBA for (C, T) { pub fn to_rgba(&self) -> RGBA { match *self { (ref rgb, ref a) => { - RGBA::from_rgb_a(rgb.to_rgb(), Channel::from(a.clone())) + RGBA::from_rgb_a(rgb.to_rgb(), a.to_channel()) } } } @@ -117,10 +117,7 @@ impl ToRGBA for (C, T) { impl ToHSVA for RGBA { #[inline] pub fn to_hsva(&self) -> HSVA { - HSVA::from_hsv_a( - self.rgb().to_hsv(), - Channel::from((*self).a.clone()) - ) + HSVA::from_hsv_a(self.rgb().to_hsv(), (*self).a.to_channel()) } }