static CSSImageValue GeneralLinearGradient(List <CSSValue> arguments, Boolean repeating) { if (arguments.Count > 1) { var direction = Angle.Zero; var angle = arguments[0].ToAngle(); var offset = 0; if (angle.HasValue) { direction = angle.Value; offset++; } var stops = new CSSImageValue.GradientStop[arguments.Count - offset]; if (stops.Length > 1) { var perStop = 100f / (arguments.Count - offset - 1); for (int i = offset, k = 0; i < arguments.Count; i++, k++) { CSSPrimitiveValue <Color> color = null; var location = CSSCalcValue.FromPercent(new Percent(perStop * k)); if (arguments[i] is CSSValueList) { var list = (CSSValueList)arguments[i]; if (list.Length != 2) { return(null); } color = list[0].AsColor(); location = list[1].AsCalc(); } else { color = arguments[i].AsColor(); } if (color == null || location == null) { return(null); } stops[k] = new CSSImageValue.GradientStop(color.Value, location); } return(CSSImageValue.FromLinearGradient(direction, repeating, stops)); } } return(null); }
public static CSSCalcValue AsCalc(this CSSValue value) { if (value is CSSPrimitiveValue <Percent> ) { return(CSSCalcValue.FromPercent(((CSSPrimitiveValue <Percent>)value).Value)); } else if (value is CSSPrimitiveValue <Length> ) { return(CSSCalcValue.FromLength(((CSSPrimitiveValue <Length>)value).Value)); } else if (value is CSSCalcValue) { return((CSSCalcValue)value); } else if (value is CSSPrimitiveValue <Number> && ((CSSPrimitiveValue <Number>)value).Value == Number.Zero) { return(CSSCalcValue.Zero); } return(null); }