hsla method

Color hsla(
  1. dynamic h,
  2. [dynamic s,
  3. dynamic l,
  4. dynamic a]
)

Creates a transparent color object from hue, saturation, lightness and alpha (HSLA) values.

Parameters: hue: An integer 0-360 representing degrees. saturation: A percentage 0-100% or number 0-1. lightness: A percentage 0-100% or number 0-1. alpha: A percentage 0-100% or number 0-1. Returns: color Example: hsl(90, 100%, 50%, 0.5) Output: rgba(128, 255, 0, 0.5)

Implementation

Color hsla(dynamic h, [dynamic s, dynamic l, dynamic a]) {
  try {
    if (h is Color) {
      final alpha = s != null ? number(s) : h.alpha;
      return Color.fromList(h.rgb, alpha, 'hsla');
    }

    final dynamic _h = (number(h) % 360) / 360;
    final dynamic _s = clamp(number(s));
    final dynamic _l = clamp(number(l));
    final dynamic _a = clamp(number(a));

    final double m2 = (_l <= 0.5) ? _l * (_s + 1) : _l + _s - _l * _s;
    final double m1 = _l * 2 - m2;

    double hue(num h) {
      final _h = h < 0 ? h + 1 : (h > 1 ? h - 1 : h);
      if (_h * 6 < 1) {
        return m1 + (m2 - m1) * _h * 6;
      } else if (_h * 2 < 1) {
        return m2;
      } else if (_h * 3 < 2) {
        return m1 + (m2 - m1) * (2 / 3 - _h) * 6;
      } else {
        return m1;
      }
    }

    final rgb = <num>[
      hue(_h + 1 / 3) * 255,
      hue(_h) * 255,
      hue(_h - 1 / 3) * 255
    ];
    return Color.fromList(rgb, _a, 'hsla');
  } catch (e) {
    return null;
  }

// 3.8.0 20180729
//  hsla: function (h, s, l, a) {
//      try {
//          if (h instanceof Color) {
//              if (s) {
//                  a = number(s);
//              } else {
//                  a = h.alpha;
//              }
//              return new Color(h.rgb, a, 'hsla');
//          }
//
//          var m1, m2;
//
//          function hue(h) {
//              h = h < 0 ? h + 1 : (h > 1 ? h - 1 : h);
//              if (h * 6 < 1) {
//                  return m1 + (m2 - m1) * h * 6;
//              }
//              else if (h * 2 < 1) {
//                  return m2;
//              }
//              else if (h * 3 < 2) {
//                  return m1 + (m2 - m1) * (2 / 3 - h) * 6;
//              }
//              else {
//                  return m1;
//              }
//          }
//
//          h = (number(h) % 360) / 360;
//          s = clamp(number(s)); l = clamp(number(l)); a = clamp(number(a));
//
//          m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;
//          m1 = l * 2 - m2;
//
//          var rgb = [
//              hue(h + 1 / 3) * 255,
//              hue(h)       * 255,
//              hue(h - 1 / 3) * 255
//          ];
//          a = number(a);
//          return new Color(rgb, a, 'hsla');
//      }
//      catch (e) {}
//  },

//    hsla: function (h, s, l, a) {
//        function hue(h) {
//            h = h < 0 ? h + 1 : (h > 1 ? h - 1 : h);
//            if      (h * 6 < 1) { return m1 + (m2 - m1) * h * 6; }
//            else if (h * 2 < 1) { return m2; }
//            else if (h * 3 < 2) { return m1 + (m2 - m1) * (2/3 - h) * 6; }
//            else                { return m1; }
//        }
//
//        h = (number(h) % 360) / 360;
//        s = clamp(number(s)); l = clamp(number(l)); a = clamp(number(a));
//
//        var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;
//        var m1 = l * 2 - m2;
//
//        return colorFunctions.rgba(hue(h + 1/3) * 255,
//            hue(h)       * 255,
//            hue(h - 1/3) * 255,
//            a);
//    }
}