This repository was archived by the owner on Feb 25, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Expand file tree
/
Copy pathColorNode.cs
More file actions
138 lines (124 loc) · 4.9 KB
/
ColorNode.cs
File metadata and controls
138 lines (124 loc) · 4.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using Windows.UI;
using Windows.UI.Composition;
namespace Microsoft.Toolkit.Uwp.UI.Animations.Expressions
{
// Ignore warning: 'ColorNode' defines operator == or operator != but does not override Object.Equals(object o) && Object.GetHashCode()
#pragma warning disable CS0660, CS0661
/// <summary>
/// Class ColorNode. This class cannot be inherited.
/// </summary>
/// <seealso cref="Microsoft.Toolkit.Uwp.UI.Animations.Expressions.ExpressionNode" />
public sealed class ColorNode : ExpressionNode
{
/// <summary>
/// Initializes a new instance of the <see cref="ColorNode"/> class.
/// </summary>
internal ColorNode()
{
}
/// <summary>
/// Initializes a new instance of the <see cref="ColorNode"/> class.
/// </summary>
/// <param name="value">The value.</param>
internal ColorNode(Color value)
{
_value = value;
NodeType = ExpressionNodeType.ConstantValue;
}
/// <summary>
/// Initializes a new instance of the <see cref="ColorNode"/> class.
/// </summary>
/// <param name="paramName">Name of the parameter.</param>
internal ColorNode(string paramName)
{
ParamName = paramName;
NodeType = ExpressionNodeType.ConstantParameter;
}
/// <summary>
/// Initializes a new instance of the <see cref="ColorNode"/> class.
/// </summary>
/// <param name="paramName">Name of the parameter.</param>
/// <param name="value">The value.</param>
internal ColorNode(string paramName, Color value)
{
ParamName = paramName;
_value = value;
NodeType = ExpressionNodeType.ConstantParameter;
SetColorParameter(paramName, value);
}
/// <summary>
/// Performs an implicit conversion from <see cref="T:Color"/> to <see cref="ColorNode"/>.
/// </summary>
/// <param name="value">The value.</param>
/// <returns>The result of the conversion.</returns>
public static implicit operator ColorNode(Color value)
{
return new ColorNode(value);
}
/// <summary>
/// Implements the == operator.
/// </summary>
/// <param name="left">The left.</param>
/// <param name="right">The right.</param>
/// <returns>The result of the operator.</returns>
public static BooleanNode operator ==(ColorNode left, ColorNode right)
{
return ExpressionFunctions.Function<BooleanNode>(ExpressionNodeType.Equals, left, right);
}
/// <summary>
/// Implements the != operator.
/// </summary>
/// <param name="left">The left.</param>
/// <param name="right">The right.</param>
/// <returns>The result of the operator.</returns>
public static BooleanNode operator !=(ColorNode left, ColorNode right)
{
return ExpressionFunctions.Function<BooleanNode>(ExpressionNodeType.NotEquals, left, right);
}
/// <summary>
/// Gets the value.
/// </summary>
/// <returns>System.String.</returns>
protected internal override string GetValue()
{
return $"ColorRgb({_value.A},{_value.R},{_value.G},{_value.B})";
}
private Color _value;
/// <summary>
/// Evaluates the current value of the expression
/// </summary>
/// <returns>The current value of the expression</returns>
public Color Evaluate()
{
switch (NodeType)
{
case ExpressionNodeType.ConstantValue:
return _value;
case ExpressionNodeType.ReferenceProperty:
var reference = (Children[0] as ReferenceNode).Reference;
return PropertyName switch
{
nameof(CompositionColorBrush.Color) => (reference as CompositionColorBrush).Color,
_ => GetProperty()
};
Color GetProperty()
{
reference.Properties.TryGetColor(PropertyName, out var value);
return value;
}
case ExpressionNodeType.Conditional:
return
(Children[0] as BooleanNode).Evaluate() ?
(Children[1] as ColorNode).Evaluate() :
(Children[2] as ColorNode).Evaluate();
default:
throw new NotImplementedException();
}
}
}
#pragma warning restore CS0660, CS0661
}