Colour.fromHSV constructor

Colour.fromHSV({
  1. double a = 1.0,
  2. required double h,
  3. required double s,
  4. required double v,
})

Implementation

factory Colour.fromHSV({
  double a = 1.0,
  required double h,
  required double s,
  required double v,
}) {
  double red, green, blue;

  if (s == 0) {
    red = green = blue = v;
  } else {
    final double sector = h / 60;
    final int i = sector.floor();
    final double f = sector - i;
    final double p = v * (1 - s);
    final double q = v * (1 - s * f);
    final double t = v * (1 - s * (1 - f));

    switch (i % 6) {
      case 0:
        red = v;
        green = t;
        blue = p;
        break;
      case 1:
        red = q;
        green = v;
        blue = p;
        break;
      case 2:
        red = p;
        green = v;
        blue = t;
        break;
      case 3:
        red = p;
        green = q;
        blue = v;
        break;
      case 4:
        red = t;
        green = p;
        blue = v;
        break;
      case 5:
        red = v;
        green = p;
        blue = q;
        break;
      default:
        red = green = blue = 0;
    }
  }

  return Colour(
    alpha: (a * 255).round(),
    red: (red * 255).round(),
    green: (green * 255).round(),
    blue: (blue * 255).round(),
  );
}