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)); }
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); }
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); }
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); }