diff --git a/src/Graphics/src/Graphics/Color.cs b/src/Graphics/src/Graphics/Color.cs index 866d740377c2..db24b360b18d 100644 --- a/src/Graphics/src/Graphics/Color.cs +++ b/src/Graphics/src/Graphics/Color.cs @@ -14,7 +14,7 @@ namespace Microsoft.Maui.Graphics [DebuggerDisplay("Red={Red}, Green={Green}, Blue={Blue}, Alpha={Alpha}")] [TypeConverter(typeof(Converters.ColorTypeConverter))] [ImmutableObject(true)] - public record class Color + public class Color { /// /// The red component of the color, ranging from 0.0 to 1.0. @@ -116,18 +116,12 @@ public override string ToString() public override int GetHashCode() => ToInt(); - /// - /// Determines whether the specified is equal to the current color using byte-precision comparison. - /// - public virtual bool Equals(Color? other) + public override bool Equals(object? obj) { - if (other is null) - return false; - - if (EqualityContract != other.EqualityContract) - return false; + if (obj is Color other) + return ToInt() == other.ToInt(); - return ToInt() == other.ToInt(); + return base.Equals(obj); } [Obsolete("Use ToArgbHex instead.")] diff --git a/src/Graphics/src/Graphics/PublicAPI/net-android/PublicAPI.Unshipped.txt b/src/Graphics/src/Graphics/PublicAPI/net-android/PublicAPI.Unshipped.txt index 52af5b2eb3e6..5a8aabea827c 100644 --- a/src/Graphics/src/Graphics/PublicAPI/net-android/PublicAPI.Unshipped.txt +++ b/src/Graphics/src/Graphics/PublicAPI/net-android/PublicAPI.Unshipped.txt @@ -1,12 +1,5 @@ #nullable enable -Microsoft.Maui.Graphics.Color.Color(Microsoft.Maui.Graphics.Color! original) -> void override Microsoft.Maui.Graphics.Color.Equals(object? obj) -> bool -static Microsoft.Maui.Graphics.Color.operator !=(Microsoft.Maui.Graphics.Color? left, Microsoft.Maui.Graphics.Color? right) -> bool -static Microsoft.Maui.Graphics.Color.operator ==(Microsoft.Maui.Graphics.Color? left, Microsoft.Maui.Graphics.Color? right) -> bool -virtual Microsoft.Maui.Graphics.Color.$() -> Microsoft.Maui.Graphics.Color! -virtual Microsoft.Maui.Graphics.Color.EqualityContract.get -> System.Type! -virtual Microsoft.Maui.Graphics.Color.PrintMembers(System.Text.StringBuilder! builder) -> bool -virtual Microsoft.Maui.Graphics.Color.Equals(Microsoft.Maui.Graphics.Color? other) -> bool Microsoft.Maui.Graphics.Color.AddLuminosity(float delta) -> Microsoft.Maui.Graphics.Color! Microsoft.Maui.Graphics.Color.ToArgbHex(bool includeAlpha = false) -> string! Microsoft.Maui.Graphics.Color.ToRgbaHex(bool includeAlpha = false) -> string! diff --git a/src/Graphics/src/Graphics/PublicAPI/net-ios/PublicAPI.Unshipped.txt b/src/Graphics/src/Graphics/PublicAPI/net-ios/PublicAPI.Unshipped.txt index b40576003686..626f81d0f5b1 100644 --- a/src/Graphics/src/Graphics/PublicAPI/net-ios/PublicAPI.Unshipped.txt +++ b/src/Graphics/src/Graphics/PublicAPI/net-ios/PublicAPI.Unshipped.txt @@ -1,12 +1,5 @@ #nullable enable -Microsoft.Maui.Graphics.Color.Color(Microsoft.Maui.Graphics.Color! original) -> void override Microsoft.Maui.Graphics.Color.Equals(object? obj) -> bool -static Microsoft.Maui.Graphics.Color.operator !=(Microsoft.Maui.Graphics.Color? left, Microsoft.Maui.Graphics.Color? right) -> bool -static Microsoft.Maui.Graphics.Color.operator ==(Microsoft.Maui.Graphics.Color? left, Microsoft.Maui.Graphics.Color? right) -> bool -virtual Microsoft.Maui.Graphics.Color.$() -> Microsoft.Maui.Graphics.Color! -virtual Microsoft.Maui.Graphics.Color.EqualityContract.get -> System.Type! -virtual Microsoft.Maui.Graphics.Color.Equals(Microsoft.Maui.Graphics.Color? other) -> bool -virtual Microsoft.Maui.Graphics.Color.PrintMembers(System.Text.StringBuilder! builder) -> bool Microsoft.Maui.Graphics.Color.AsPaint() -> Microsoft.Maui.Graphics.Paint! Microsoft.Maui.Graphics.Color.MultiplyAlpha(float multiplyBy) -> Microsoft.Maui.Graphics.Color! Microsoft.Maui.Graphics.Color.WithAlpha(float alpha) -> Microsoft.Maui.Graphics.Color! diff --git a/src/Graphics/src/Graphics/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt b/src/Graphics/src/Graphics/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt index b40576003686..626f81d0f5b1 100644 --- a/src/Graphics/src/Graphics/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt +++ b/src/Graphics/src/Graphics/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt @@ -1,12 +1,5 @@ #nullable enable -Microsoft.Maui.Graphics.Color.Color(Microsoft.Maui.Graphics.Color! original) -> void override Microsoft.Maui.Graphics.Color.Equals(object? obj) -> bool -static Microsoft.Maui.Graphics.Color.operator !=(Microsoft.Maui.Graphics.Color? left, Microsoft.Maui.Graphics.Color? right) -> bool -static Microsoft.Maui.Graphics.Color.operator ==(Microsoft.Maui.Graphics.Color? left, Microsoft.Maui.Graphics.Color? right) -> bool -virtual Microsoft.Maui.Graphics.Color.$() -> Microsoft.Maui.Graphics.Color! -virtual Microsoft.Maui.Graphics.Color.EqualityContract.get -> System.Type! -virtual Microsoft.Maui.Graphics.Color.Equals(Microsoft.Maui.Graphics.Color? other) -> bool -virtual Microsoft.Maui.Graphics.Color.PrintMembers(System.Text.StringBuilder! builder) -> bool Microsoft.Maui.Graphics.Color.AsPaint() -> Microsoft.Maui.Graphics.Paint! Microsoft.Maui.Graphics.Color.MultiplyAlpha(float multiplyBy) -> Microsoft.Maui.Graphics.Color! Microsoft.Maui.Graphics.Color.WithAlpha(float alpha) -> Microsoft.Maui.Graphics.Color! diff --git a/src/Graphics/src/Graphics/PublicAPI/net-macos/PublicAPI.Unshipped.txt b/src/Graphics/src/Graphics/PublicAPI/net-macos/PublicAPI.Unshipped.txt index 55c756b6c1a4..b538bad568eb 100644 --- a/src/Graphics/src/Graphics/PublicAPI/net-macos/PublicAPI.Unshipped.txt +++ b/src/Graphics/src/Graphics/PublicAPI/net-macos/PublicAPI.Unshipped.txt @@ -1,12 +1,5 @@ #nullable enable -Microsoft.Maui.Graphics.Color.Color(Microsoft.Maui.Graphics.Color! original) -> void override Microsoft.Maui.Graphics.Color.Equals(object? obj) -> bool -static Microsoft.Maui.Graphics.Color.operator !=(Microsoft.Maui.Graphics.Color? left, Microsoft.Maui.Graphics.Color? right) -> bool -static Microsoft.Maui.Graphics.Color.operator ==(Microsoft.Maui.Graphics.Color? left, Microsoft.Maui.Graphics.Color? right) -> bool -virtual Microsoft.Maui.Graphics.Color.$() -> Microsoft.Maui.Graphics.Color! -virtual Microsoft.Maui.Graphics.Color.EqualityContract.get -> System.Type! -virtual Microsoft.Maui.Graphics.Color.PrintMembers(System.Text.StringBuilder! builder) -> bool -virtual Microsoft.Maui.Graphics.Color.Equals(Microsoft.Maui.Graphics.Color? other) -> bool Microsoft.Maui.Graphics.Color.AddLuminosity(float delta) -> Microsoft.Maui.Graphics.Color! Microsoft.Maui.Graphics.Color.GetComplementary() -> Microsoft.Maui.Graphics.Color! Microsoft.Maui.Graphics.Color.ToArgbHex(bool includeAlpha = false) -> string! diff --git a/src/Graphics/src/Graphics/PublicAPI/net-tizen/PublicAPI.Unshipped.txt b/src/Graphics/src/Graphics/PublicAPI/net-tizen/PublicAPI.Unshipped.txt index 55c756b6c1a4..b538bad568eb 100644 --- a/src/Graphics/src/Graphics/PublicAPI/net-tizen/PublicAPI.Unshipped.txt +++ b/src/Graphics/src/Graphics/PublicAPI/net-tizen/PublicAPI.Unshipped.txt @@ -1,12 +1,5 @@ #nullable enable -Microsoft.Maui.Graphics.Color.Color(Microsoft.Maui.Graphics.Color! original) -> void override Microsoft.Maui.Graphics.Color.Equals(object? obj) -> bool -static Microsoft.Maui.Graphics.Color.operator !=(Microsoft.Maui.Graphics.Color? left, Microsoft.Maui.Graphics.Color? right) -> bool -static Microsoft.Maui.Graphics.Color.operator ==(Microsoft.Maui.Graphics.Color? left, Microsoft.Maui.Graphics.Color? right) -> bool -virtual Microsoft.Maui.Graphics.Color.$() -> Microsoft.Maui.Graphics.Color! -virtual Microsoft.Maui.Graphics.Color.EqualityContract.get -> System.Type! -virtual Microsoft.Maui.Graphics.Color.PrintMembers(System.Text.StringBuilder! builder) -> bool -virtual Microsoft.Maui.Graphics.Color.Equals(Microsoft.Maui.Graphics.Color? other) -> bool Microsoft.Maui.Graphics.Color.AddLuminosity(float delta) -> Microsoft.Maui.Graphics.Color! Microsoft.Maui.Graphics.Color.GetComplementary() -> Microsoft.Maui.Graphics.Color! Microsoft.Maui.Graphics.Color.ToArgbHex(bool includeAlpha = false) -> string! diff --git a/src/Graphics/src/Graphics/PublicAPI/net-windows/PublicAPI.Unshipped.txt b/src/Graphics/src/Graphics/PublicAPI/net-windows/PublicAPI.Unshipped.txt index 55c756b6c1a4..b538bad568eb 100644 --- a/src/Graphics/src/Graphics/PublicAPI/net-windows/PublicAPI.Unshipped.txt +++ b/src/Graphics/src/Graphics/PublicAPI/net-windows/PublicAPI.Unshipped.txt @@ -1,12 +1,5 @@ #nullable enable -Microsoft.Maui.Graphics.Color.Color(Microsoft.Maui.Graphics.Color! original) -> void override Microsoft.Maui.Graphics.Color.Equals(object? obj) -> bool -static Microsoft.Maui.Graphics.Color.operator !=(Microsoft.Maui.Graphics.Color? left, Microsoft.Maui.Graphics.Color? right) -> bool -static Microsoft.Maui.Graphics.Color.operator ==(Microsoft.Maui.Graphics.Color? left, Microsoft.Maui.Graphics.Color? right) -> bool -virtual Microsoft.Maui.Graphics.Color.$() -> Microsoft.Maui.Graphics.Color! -virtual Microsoft.Maui.Graphics.Color.EqualityContract.get -> System.Type! -virtual Microsoft.Maui.Graphics.Color.PrintMembers(System.Text.StringBuilder! builder) -> bool -virtual Microsoft.Maui.Graphics.Color.Equals(Microsoft.Maui.Graphics.Color? other) -> bool Microsoft.Maui.Graphics.Color.AddLuminosity(float delta) -> Microsoft.Maui.Graphics.Color! Microsoft.Maui.Graphics.Color.GetComplementary() -> Microsoft.Maui.Graphics.Color! Microsoft.Maui.Graphics.Color.ToArgbHex(bool includeAlpha = false) -> string! diff --git a/src/Graphics/src/Graphics/PublicAPI/net/PublicAPI.Unshipped.txt b/src/Graphics/src/Graphics/PublicAPI/net/PublicAPI.Unshipped.txt index b40576003686..626f81d0f5b1 100644 --- a/src/Graphics/src/Graphics/PublicAPI/net/PublicAPI.Unshipped.txt +++ b/src/Graphics/src/Graphics/PublicAPI/net/PublicAPI.Unshipped.txt @@ -1,12 +1,5 @@ #nullable enable -Microsoft.Maui.Graphics.Color.Color(Microsoft.Maui.Graphics.Color! original) -> void override Microsoft.Maui.Graphics.Color.Equals(object? obj) -> bool -static Microsoft.Maui.Graphics.Color.operator !=(Microsoft.Maui.Graphics.Color? left, Microsoft.Maui.Graphics.Color? right) -> bool -static Microsoft.Maui.Graphics.Color.operator ==(Microsoft.Maui.Graphics.Color? left, Microsoft.Maui.Graphics.Color? right) -> bool -virtual Microsoft.Maui.Graphics.Color.$() -> Microsoft.Maui.Graphics.Color! -virtual Microsoft.Maui.Graphics.Color.EqualityContract.get -> System.Type! -virtual Microsoft.Maui.Graphics.Color.Equals(Microsoft.Maui.Graphics.Color? other) -> bool -virtual Microsoft.Maui.Graphics.Color.PrintMembers(System.Text.StringBuilder! builder) -> bool Microsoft.Maui.Graphics.Color.AsPaint() -> Microsoft.Maui.Graphics.Paint! Microsoft.Maui.Graphics.Color.MultiplyAlpha(float multiplyBy) -> Microsoft.Maui.Graphics.Color! Microsoft.Maui.Graphics.Color.WithAlpha(float alpha) -> Microsoft.Maui.Graphics.Color! diff --git a/src/Graphics/src/Graphics/PublicAPI/netstandard/PublicAPI.Unshipped.txt b/src/Graphics/src/Graphics/PublicAPI/netstandard/PublicAPI.Unshipped.txt index b40576003686..626f81d0f5b1 100644 --- a/src/Graphics/src/Graphics/PublicAPI/netstandard/PublicAPI.Unshipped.txt +++ b/src/Graphics/src/Graphics/PublicAPI/netstandard/PublicAPI.Unshipped.txt @@ -1,12 +1,5 @@ #nullable enable -Microsoft.Maui.Graphics.Color.Color(Microsoft.Maui.Graphics.Color! original) -> void override Microsoft.Maui.Graphics.Color.Equals(object? obj) -> bool -static Microsoft.Maui.Graphics.Color.operator !=(Microsoft.Maui.Graphics.Color? left, Microsoft.Maui.Graphics.Color? right) -> bool -static Microsoft.Maui.Graphics.Color.operator ==(Microsoft.Maui.Graphics.Color? left, Microsoft.Maui.Graphics.Color? right) -> bool -virtual Microsoft.Maui.Graphics.Color.$() -> Microsoft.Maui.Graphics.Color! -virtual Microsoft.Maui.Graphics.Color.EqualityContract.get -> System.Type! -virtual Microsoft.Maui.Graphics.Color.Equals(Microsoft.Maui.Graphics.Color? other) -> bool -virtual Microsoft.Maui.Graphics.Color.PrintMembers(System.Text.StringBuilder! builder) -> bool Microsoft.Maui.Graphics.Color.AsPaint() -> Microsoft.Maui.Graphics.Paint! Microsoft.Maui.Graphics.Color.MultiplyAlpha(float multiplyBy) -> Microsoft.Maui.Graphics.Color! Microsoft.Maui.Graphics.Color.WithAlpha(float alpha) -> Microsoft.Maui.Graphics.Color! diff --git a/src/Graphics/tests/Graphics.Tests/ColorUnitTests.cs b/src/Graphics/tests/Graphics.Tests/ColorUnitTests.cs index edaba8d32657..7644347bc167 100644 --- a/src/Graphics/tests/Graphics.Tests/ColorUnitTests.cs +++ b/src/Graphics/tests/Graphics.Tests/ColorUnitTests.cs @@ -9,6 +9,14 @@ namespace Microsoft.Maui.Graphics.Tests { public class ColorUnitTests { + sealed class DerivedColor : Color + { + public DerivedColor(float red, float green, float blue, float alpha) + : base(red, green, blue, alpha) + { + } + } + [Fact] public void TestHSLPostSetEquality() { @@ -138,6 +146,19 @@ public void TestHashCode() Assert.True(color1.GetHashCode() == color2.GetHashCode()); } + [Fact] + public void EqualsDerivedColorWithSameArgbValue() + { + Color baseColor = new Color(1f, 0f, 0f, 1f); + Color derivedColor = new DerivedColor(1f, 0f, 0f, 1f); + + Assert.Equal(baseColor.ToInt(), derivedColor.ToInt()); + Assert.True(baseColor.Equals(derivedColor)); + Assert.True(derivedColor.Equals(baseColor)); + Assert.True(EqualityComparer.Default.Equals(baseColor, derivedColor)); + Assert.Equal(baseColor.GetHashCode(), derivedColor.GetHashCode()); + } + [Fact] public void TestHashCodeNamedColors() {