public ExpressionSyntax GenerateSyntax(object value, Type type) { var c = (SRGBColour)value; // SRGBColour has implicit conversion to Color4 return(Color4ExpressionGenerator.GenerateSyntax(c)); }
public static ExpressionSyntax GenerateSyntax(ColourInfo c) { // SingleColour if (c.TopLeft.Equals(c.TopRight) && c.TopLeft.Equals(c.BottomRight) && c.TopLeft.Equals(c.BottomLeft)) { return(InvocationExpression( expression: IdentifierName($"{typeof(ColourInfo).FullName}.{nameof(ColourInfo.SingleColour)}"), argumentList: ArgumentList(SingletonSeparatedList <ArgumentSyntax>( Argument(Color4ExpressionGenerator.GenerateSyntax(c.TopLeft)) )) )); } // GradientHorizontal if (c.TopLeft.Equals(c.BottomLeft) && c.TopRight.Equals(c.BottomRight) && !c.TopLeft.Equals(c.TopRight)) { return(InvocationExpression( expression: IdentifierName($"{typeof(ColourInfo).FullName}.{nameof(ColourInfo.GradientHorizontal)}"), argumentList: ArgumentList(SeparatedList <ArgumentSyntax>(new[] { Argument(Color4ExpressionGenerator.GenerateSyntax(c.TopLeft)), Argument(Color4ExpressionGenerator.GenerateSyntax(c.TopRight)) })) )); } // GradientVertical if (c.TopLeft.Equals(c.TopRight) && c.BottomLeft.Equals(c.BottomRight) && !c.TopLeft.Equals(c.BottomLeft)) { return(InvocationExpression( expression: IdentifierName($"{typeof(ColourInfo).FullName}.{nameof(ColourInfo.GradientVertical)}"), argumentList: ArgumentList(SeparatedList <ArgumentSyntax>(new[] { Argument(Color4ExpressionGenerator.GenerateSyntax(c.TopLeft)), Argument(Color4ExpressionGenerator.GenerateSyntax(c.BottomLeft)) })) )); } // Full initialization return(ObjectCreationExpression( type: ParseTypeName(typeof(ColourInfo).FullName), argumentList: null, initializer: InitializerExpression( kind: SyntaxKind.ObjectInitializerExpression, expressions: SeparatedList(new ExpressionSyntax[] { AssignmentExpression( kind: SyntaxKind.SimpleAssignmentExpression, left: IdentifierName(nameof(ColourInfo.TopLeft)), right: Color4ExpressionGenerator.GenerateSyntax(c.TopLeft) ), AssignmentExpression( kind: SyntaxKind.SimpleAssignmentExpression, left: IdentifierName(nameof(ColourInfo.TopRight)), right: Color4ExpressionGenerator.GenerateSyntax(c.TopRight) ), AssignmentExpression( kind: SyntaxKind.SimpleAssignmentExpression, left: IdentifierName(nameof(ColourInfo.BottomRight)), right: Color4ExpressionGenerator.GenerateSyntax(c.BottomRight) ), AssignmentExpression( kind: SyntaxKind.SimpleAssignmentExpression, left: IdentifierName(nameof(ColourInfo.BottomLeft)), right: Color4ExpressionGenerator.GenerateSyntax(c.BottomLeft) ) }) ) )); }
public static ExpressionSyntax GenerateSyntax(EdgeEffectParameters p) { var list = new List <ExpressionSyntax>(); list.Add(AssignmentExpression( kind: SyntaxKind.SimpleAssignmentExpression, left: IdentifierName(nameof(EdgeEffectParameters.Type)), right: ParseTypeName($"{typeof(EdgeEffectType).FullName}.{p.Type}") )); list.Add(AssignmentExpression( kind: SyntaxKind.SimpleAssignmentExpression, left: IdentifierName(nameof(EdgeEffectParameters.Colour)), right: Color4ExpressionGenerator.GenerateSyntax(p.Colour) )); if (p.Radius != default) { list.Add(AssignmentExpression( kind: SyntaxKind.SimpleAssignmentExpression, left: IdentifierName(nameof(EdgeEffectParameters.Radius)), right: LiteralExpression( kind: SyntaxKind.NumericLiteralExpression, token: Literal(p.Radius) ) )); } if (p.Roundness != default) { list.Add(AssignmentExpression( kind: SyntaxKind.SimpleAssignmentExpression, left: IdentifierName(nameof(EdgeEffectParameters.Roundness)), right: LiteralExpression( kind: SyntaxKind.NumericLiteralExpression, token: Literal(p.Roundness) ) )); } if (p.Offset != default) { list.Add(AssignmentExpression( kind: SyntaxKind.SimpleAssignmentExpression, left: IdentifierName(nameof(EdgeEffectParameters.Offset)), right: Vector2ExpressionGenerator.GenerateSyntax(p.Offset) )); } if (p.Hollow) { list.Add(AssignmentExpression( kind: SyntaxKind.SimpleAssignmentExpression, left: IdentifierName(nameof(EdgeEffectParameters.Hollow)), right: LiteralExpression( kind: SyntaxKind.TrueLiteralExpression ) )); } return(ObjectCreationExpression( type: ParseTypeName(typeof(EdgeEffectParameters).FullName), argumentList: null, initializer: InitializerExpression( kind: SyntaxKind.ObjectInitializerExpression, expressions: SeparatedList(list) ) )); }