diff --git a/src/Avalonia.Visuals/Media/Color.cs b/src/Avalonia.Visuals/Media/Color.cs
index c7439b5bf6..3eb4f575c7 100644
--- a/src/Avalonia.Visuals/Media/Color.cs
+++ b/src/Avalonia.Visuals/Media/Color.cs
@@ -3,7 +3,6 @@
using System;
using System.Globalization;
-using Avalonia.Animation;
using Avalonia.Animation.Animators;
namespace Avalonia.Media
@@ -11,7 +10,7 @@ namespace Avalonia.Media
///
/// An ARGB color.
///
- public readonly struct Color
+ public readonly struct Color : IEquatable
{
static Color()
{
@@ -144,5 +143,40 @@ namespace Avalonia.Media
{
return ((uint)A << 24) | ((uint)R << 16) | ((uint)G << 8) | (uint)B;
}
+
+ ///
+ /// Check if two colors are equal.
+ ///
+ public bool Equals(Color other)
+ {
+ return A == other.A && R == other.R && G == other.G && B == other.B;
+ }
+
+ public override bool Equals(object obj)
+ {
+ return obj is Color other && Equals(other);
+ }
+
+ public override int GetHashCode()
+ {
+ unchecked
+ {
+ int hashCode = A.GetHashCode();
+ hashCode = (hashCode * 397) ^ R.GetHashCode();
+ hashCode = (hashCode * 397) ^ G.GetHashCode();
+ hashCode = (hashCode * 397) ^ B.GetHashCode();
+ return hashCode;
+ }
+ }
+
+ public static bool operator ==(Color left, Color right)
+ {
+ return left.Equals(right);
+ }
+
+ public static bool operator !=(Color left, Color right)
+ {
+ return !left.Equals(right);
+ }
}
}