1 use crate::units::Units; 2 3 #[derive(Debug, PartialEq, Clone)] 4 pub struct CmykRatio { 5 pub(crate) units: Units, 6 } 7 8 impl CmykRatio { new(c: f64, m: f64, y: f64, k: f64, a: f64) -> Self9 pub fn new(c: f64, m: f64, y: f64, k: f64, a: f64) -> Self { 10 let mut u = Units::new_ratios(&[c, m, y, k]); 11 u.alpha.set(a); 12 CmykRatio::from_units(u) 13 } 14 cyan(&self) -> f6415 pub fn cyan(&self) -> f64 { self.units[0] } magenta(&self) -> f6416 pub fn magenta(&self) -> f64 { self.units[1] } yellow(&self) -> f6417 pub fn yellow(&self) -> f64 { self.units[2] } key(&self) -> f6418 pub fn key(&self) -> f64 { self.units[3] } 19 set_cyan(&mut self, c: f64)20 pub fn set_cyan(&mut self, c: f64) { self.units.list[0].set(c); } set_magenta(&mut self, m: f64)21 pub fn set_magenta(&mut self, m: f64) { self.units.list[1].set(m); } set_yellow(&mut self, y: f64)22 pub fn set_yellow(&mut self, y: f64) { self.units.list[2].set(y); } set_key(&mut self, k: f64)23 pub fn set_key(&mut self, k: f64) { self.units.list[3].set(k); } 24 from_units(u: Units) -> Self25 pub(crate) fn from_units(u: Units) -> Self { 26 CmykRatio { units: u } 27 } 28 } 29 30 31 impl AsRef<CmykRatio> for CmykRatio { as_ref(&self) -> &CmykRatio32 fn as_ref(&self) -> &CmykRatio { 33 &self 34 } 35 } 36 37 impl Default for CmykRatio { default() -> CmykRatio38 fn default() -> CmykRatio { 39 CmykRatio::new(0.0, 0.0, 0.0, 1.0, 1.0) 40 } 41 } 42 43 impl From<[f64; 4]> for CmykRatio { from(a: [f64; 4]) -> Self44 fn from(a: [f64; 4]) -> Self { CmykRatio::new(a[0], a[1], a[2], a[3], 1.0) } 45 } 46 47 impl<'a> From<&'a [f64; 4]> for CmykRatio { from(a: &[f64; 4]) -> Self48 fn from(a: &[f64; 4]) -> Self { CmykRatio::new(a[0], a[1], a[2], a[3], 1.0) } 49 } 50 51 impl Into<[f64; 4]> for CmykRatio { into(self: CmykRatio) -> [f64; 4]52 fn into(self: CmykRatio) -> [f64; 4] { self.units.into() } 53 } 54 impl<'a> Into<[f64; 4]> for &'a CmykRatio { into(self) -> [f64; 4]55 fn into(self) -> [f64; 4] { self.units.clone().into() } 56 } 57 58 #[cfg(test)] 59 mod test { 60 use crate::{Cmyk, Rgb}; 61 use crate::converters::cmyk_to_rgb; 62 63 #[test] cmyk_to_rbg_test()64 fn cmyk_to_rbg_test() { 65 let cmyk = Cmyk::new(30.0, 30.0, 30.0, 30.0, None); 66 let _rgb: Rgb = cmyk_to_rgb(&cmyk); 67 } 68 } 69