private (bool, Size) GeRadius(CssReader reader, RadialGradientShape shape, ref RadialGradientFlags flags)
        {
            if (reader.CanRead)
            {
                var size = Dimensions.Zero;

                if (shape == RadialGradientShape.Circle)
                {
                    var radiusToken = reader.Read();
                    var isRadius    = OffsetConverter.TryExtractOffset(radiusToken, out var radius);

                    if (isRadius)
                    {
                        size = new Dimensions(radius, radius);
                        reader.MoveNext();
                    }
                }

                if (shape == RadialGradientShape.Ellipse)
                {
                    var radiusHToken = reader.Read();
                    var radiusVToken = reader.ReadNext();

                    var isRadiusH = OffsetConverter.TryExtractOffset(radiusHToken, out var radiusH);
                    var isRadiusV = OffsetConverter.TryExtractOffset(radiusVToken, out var radiusV);

                    if (isRadiusH && isRadiusV)
                    {
                        size = new Dimensions(radiusH, radiusV);
                        reader.MoveNext();
                    }
                    else
                    {
                        // Revert radiusVToken
                        reader.Rollback();
                    }
                }

                if (size != Dimensions.Zero)
                {
                    if (size.Width.Type == OffsetType.Proportional)
                    {
                        FlagsHelper.Set(ref flags, WidthProportional);
                    }

                    if (size.Height.Type == OffsetType.Proportional)
                    {
                        FlagsHelper.Set(ref flags, HeightProportional);
                    }

                    return(true, new Size(size.Width.Value, size.Height.Value));
                }
            }

            // Value -1 means undefined for RadialGradientShader
            return(false, new Size(-1, -1));
        }
Example #2
0
        public GradientBuilder AddRadialGradient(Point center, RadialGradientShape shape, RadialGradientSize size,
                                                 RadialGradientFlags flags = RadialGradientFlags.PositionProportional, bool isRepeating = false)
        {
            _lastGradient = new RadialGradient
            {
                Center      = center,
                Shape       = shape,
                Size        = size,
                Flags       = flags,
                IsRepeating = isRepeating,
                Stops       = new List <GradientStop>()
            };

            _gradients.Add(_lastGradient);

            return(this);
        }
Example #3
0
        private (bool, Dimensions) GeRadius(CssReader reader, RadialGradientShape shape)
        {
            if (reader.CanRead)
            {
                var size = Dimensions.Zero;

                if (shape == RadialGradientShape.Circle)
                {
                    var radiusToken = reader.Read();
                    var isRadius    = Offset.TryParseWithUnit(radiusToken, out var radius);

                    if (isRadius)
                    {
                        size = new Dimensions(radius, radius);
                        reader.MoveNext();
                    }
                }

                if (shape == RadialGradientShape.Ellipse)
                {
                    var radiusHToken = reader.Read();
                    var radiusVToken = reader.ReadNext();

                    var isRadiusH = Offset.TryParseWithUnit(radiusHToken, out var radiusH);
                    var isRadiusV = Offset.TryParseWithUnit(radiusVToken, out var radiusV);

                    if (isRadiusH && isRadiusV)
                    {
                        size = new Dimensions(radiusH, radiusV);
                        reader.MoveNext();
                    }
                    else
                    {
                        // Revert radiusVToken
                        reader.Rollback();
                    }
                }

                if (size != Dimensions.Zero)
                {
                    return(true, size);
                }
            }

            return(false, Dimensions.Zero);
        }
Example #4
0
        public RadialGradientBuilder AddRadialGradient(
            Point center,
            RadialGradientShape shape,
            RadialGradientSize size,
            RadialGradientFlags flags = RadialGradientFlags.PositionProportional,
            bool isRepeating          = false)
        {
            var builder = new RadialGradientBuilder
            {
                Center      = center,
                Shape       = shape,
                Size        = size,
                Flags       = flags,
                IsRepeating = isRepeating
            };

            UseBuilder(builder);
            return(builder);
        }
        public GradientBuilder AddRadialGradient(
            Point center,
            RadialGradientShape shape,
            RadialGradientSize size,
            RadialGradientFlags flags = RadialGradientFlags.PositionProportional,
            bool isRepeating          = false)
        {
            AddCachedStopsToLast();

            var radialGradient = new RadialGradient
            {
                Center      = center,
                Shape       = shape,
                Size        = size,
                Flags       = flags,
                IsRepeating = isRepeating
            };

            _gradients.Add(radialGradient);

            return(this);
        }