static bool parseHSLParameters(CSSParserTokenRange& range, RGBA32& result, bool parseAlpha) { ASSERT(range.peek().functionId() == CSSValueHsl || range.peek().functionId() == CSSValueHsla); CSSParserTokenRange args = consumeFunction(range); CSSPrimitiveValue* hslValue = consumeNumber(args, ValueRangeAll); if (!hslValue) return false; double colorArray[3]; colorArray[0] = (((hslValue->getIntValue() % 360) + 360) % 360) / 360.0; for (int i = 1; i < 3; i++) { if (!consumeCommaIncludingWhitespace(args)) return false; hslValue = consumePercent(args, ValueRangeAll); if (!hslValue) return false; double doubleValue = hslValue->getDoubleValue(); colorArray[i] = clampTo<double>(doubleValue, 0.0, 100.0) / 100.0; // Needs to be value between 0 and 1.0. } double alpha = 1.0; if (parseAlpha) { if (!consumeCommaIncludingWhitespace(args)) return false; if (!consumeNumberRaw(args, alpha)) return false; alpha = clampTo<double>(alpha, 0.0, 1.0); } result = makeRGBAFromHSLA(colorArray[0], colorArray[1], colorArray[2], alpha); return args.atEnd(); }
static SkColor brightenColor(double h, double s, double l, float brightenAmount) { l += brightenAmount; if (l > 1.0) l = 1.0; if (l < 0.0) l = 0.0; return makeRGBAFromHSLA(h, s, l, 1.0); }