colorsys/hsl/
transform.rs

1use crate::{ColorTransform, SaturationInSpace};
2use crate::consts::{ALL_MIN, HUE_MAX};
3use crate::normalize::bound_hue;
4
5use super::Hsl;
6
7impl ColorTransform for Hsl {
8  fn lighten(&mut self, amt: f64) {
9    self.units.list[2].increase(amt);
10  }
11
12  fn saturate(&mut self, sat: SaturationInSpace) {
13    match sat {
14      SaturationInSpace::Hsl(s) => self.units.list[1].increase(s),
15      SaturationInSpace::Hsv(s) => {
16        unimplemented!("{}", s);
17      }
18    }
19  }
20
21  fn adjust_hue(&mut self, hue: f64) {
22    let h = bound_hue(self.units[0] + hue);
23    self.units.list[0].set(h);
24  }
25
26  fn grayscale_simple(&mut self) {
27    self.units.list[0].value = ALL_MIN;
28    self.units.list[1].value = ALL_MIN;
29  }
30  fn invert(&mut self) {
31    let h = (self.units[0] + HUE_MAX * 0.5) % HUE_MAX;
32    self.units.list[0].set(h);
33  }
34}