コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }