diff --git a/.editorconfig b/.editorconfig
index a303b1fe982b..b864e8f4f202 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -27,6 +27,7 @@ dotnet_diagnostic.IL2050.severity = none
# Code analyzers
dotnet_diagnostic.CA1307.severity = error
dotnet_diagnostic.CA1309.severity = error
+dotnet_diagnostic.CA1815.severity = error
# Modifier preferences
dotnet_style_require_accessibility_modifiers = never:suggestion
diff --git a/src/Compatibility/ControlGallery/src/Issues.Shared/Issue8958.xaml.cs b/src/Compatibility/ControlGallery/src/Issues.Shared/Issue8958.xaml.cs
index c49926c06f19..a2cd08fa0b16 100644
--- a/src/Compatibility/ControlGallery/src/Issues.Shared/Issue8958.xaml.cs
+++ b/src/Compatibility/ControlGallery/src/Issues.Shared/Issue8958.xaml.cs
@@ -49,7 +49,9 @@ protected override void Init()
}
[Preserve(AllMembers = true)]
+#pragma warning disable CA1815 // Override equals and operator equals on value types
public struct Issue8958Model
+#pragma warning restore CA1815 // Override equals and operator equals on value types
{
public string Title { get; set; }
}
diff --git a/src/Compatibility/ControlGallery/src/Issues.Shared/TransparentOverlayTests.cs b/src/Compatibility/ControlGallery/src/Issues.Shared/TransparentOverlayTests.cs
index 11b5c5639386..1c63c511be31 100644
--- a/src/Compatibility/ControlGallery/src/Issues.Shared/TransparentOverlayTests.cs
+++ b/src/Compatibility/ControlGallery/src/Issues.Shared/TransparentOverlayTests.cs
@@ -65,7 +65,9 @@ Button MenuButton(TestPoint test)
}
[Preserve(AllMembers = true)]
+#pragma warning disable CA1815 // Override equals and operator equals on value types
public struct TestPoint
+#pragma warning restore CA1815 // Override equals and operator equals on value types
{
public TestPoint(int i) : this()
{
diff --git a/src/Compatibility/Core/src/Android/AppCompat/FormsAppCompatActivity.cs b/src/Compatibility/Core/src/Android/AppCompat/FormsAppCompatActivity.cs
index 5cdce59371da..7a433c74536b 100644
--- a/src/Compatibility/Core/src/Android/AppCompat/FormsAppCompatActivity.cs
+++ b/src/Compatibility/Core/src/Android/AppCompat/FormsAppCompatActivity.cs
@@ -26,7 +26,9 @@ public enum ActivationFlags : long
DisableSetStatusBarColor = 1 << 0,
}
+#pragma warning disable CA1815 // Override equals and operator equals on value types
public struct ActivationOptions
+#pragma warning restore CA1815 // Override equals and operator equals on value types
{
public ActivationOptions(Bundle bundle)
{
diff --git a/src/Compatibility/Core/src/Android/Forms.cs b/src/Compatibility/Core/src/Android/Forms.cs
index 1d9e8ad73840..22821331f35f 100644
--- a/src/Compatibility/Core/src/Android/Forms.cs
+++ b/src/Compatibility/Core/src/Android/Forms.cs
@@ -29,9 +29,11 @@
namespace Microsoft.Maui.Controls.Compatibility
{
[Obsolete]
+#pragma warning disable CA1815 // Override equals and operator equals on value types
public struct InitializationOptions
{
public struct EffectScope
+#pragma warning restore CA1815 // Override equals and operator equals on value types
{
public string Name;
public ExportEffectAttribute[] Effects;
diff --git a/src/Compatibility/Core/src/Tizen/Forms.cs b/src/Compatibility/Core/src/Tizen/Forms.cs
index 771835ff281a..be2a65eeff8a 100644
--- a/src/Compatibility/Core/src/Tizen/Forms.cs
+++ b/src/Compatibility/Core/src/Tizen/Forms.cs
@@ -28,6 +28,7 @@ public enum PlatformType
}
[Obsolete]
+#pragma warning disable CA1815 // Override equals and operator equals on value types
public class InitializationOptions
{
public CoreApplication Context { get; set; }
@@ -47,6 +48,7 @@ public class InitializationOptions
public DisplayResolutionUnit DisplayResolutionUnit { get; set; }
public struct EffectScope
+#pragma warning restore CA1815 // Override equals and operator equals on value types
{
public string Name;
public ExportEffectAttribute[] Effects;
diff --git a/src/Compatibility/Core/src/Windows/Forms.cs b/src/Compatibility/Core/src/Windows/Forms.cs
index 03f2af910ed0..b9d42d490fd5 100644
--- a/src/Compatibility/Core/src/Windows/Forms.cs
+++ b/src/Compatibility/Core/src/Windows/Forms.cs
@@ -13,7 +13,9 @@
namespace Microsoft.Maui.Controls.Compatibility
{
[Obsolete]
+#pragma warning disable CA1815 // Override equals and operator equals on value types
public struct InitializationOptions
+#pragma warning restore CA1815 // Override equals and operator equals on value types
{
public InitializationOptions(UI.Xaml.LaunchActivatedEventArgs args)
{
diff --git a/src/Compatibility/Core/src/iOS/Forms.cs b/src/Compatibility/Core/src/iOS/Forms.cs
index ca1031f43363..ab1b97cec3b4 100644
--- a/src/Compatibility/Core/src/iOS/Forms.cs
+++ b/src/Compatibility/Core/src/iOS/Forms.cs
@@ -33,7 +33,9 @@
namespace Microsoft.Maui.Controls.Compatibility
{
[Obsolete]
+#pragma warning disable CA1815 // Override equals and operator equals on value types
public struct InitializationOptions
+#pragma warning restore CA1815 // Override equals and operator equals on value types
{
public InitializationFlags Flags;
}
diff --git a/src/Controls/src/Core/LayoutOptions.cs b/src/Controls/src/Core/LayoutOptions.cs
index a97609812541..22da2521f1c4 100644
--- a/src/Controls/src/Core/LayoutOptions.cs
+++ b/src/Controls/src/Core/LayoutOptions.cs
@@ -5,7 +5,7 @@ namespace Microsoft.Maui.Controls
{
///
[System.ComponentModel.TypeConverter(typeof(LayoutOptionsConverter))]
- public struct LayoutOptions
+ public struct LayoutOptions : IEquatable
{
int _flags;
@@ -73,5 +73,15 @@ internal Primitives.LayoutAlignment ToCore()
return Primitives.LayoutAlignment.Start;
}
+
+ public bool Equals(LayoutOptions other) => _flags == other._flags;
+
+ public override bool Equals(object obj) => obj is LayoutOptions other && Equals(other);
+
+ public override int GetHashCode() => _flags.GetHashCode();
+
+ public static bool operator ==(LayoutOptions left, LayoutOptions right) => left.Equals(right);
+
+ public static bool operator !=(LayoutOptions left, LayoutOptions right) => !(left == right);
}
}
\ No newline at end of file
diff --git a/src/Controls/src/Core/Profiler.cs b/src/Controls/src/Core/Profiler.cs
index 95c1d11bd58f..ec4312814d60 100644
--- a/src/Controls/src/Core/Profiler.cs
+++ b/src/Controls/src/Core/Profiler.cs
@@ -9,12 +9,14 @@ namespace Microsoft.Maui.Controls.Internals
{
///
[EditorBrowsable(EditorBrowsableState.Never)]
+#pragma warning disable CA1815 // Override equals and operator equals on value types
public struct Profile : IDisposable
{
const int Capacity = 1000;
[DebuggerDisplay("{Name,nq} {Id} {Ticks}")]
public struct Datum
+#pragma warning restore CA1815 // Override equals and operator equals on value types
{
public string Name;
public string Id;
diff --git a/src/Controls/src/Core/PublicAPI/net-android/PublicAPI.Unshipped.txt b/src/Controls/src/Core/PublicAPI/net-android/PublicAPI.Unshipped.txt
index 218837ca2448..6d2c8b39a842 100644
--- a/src/Controls/src/Core/PublicAPI/net-android/PublicAPI.Unshipped.txt
+++ b/src/Controls/src/Core/PublicAPI/net-android/PublicAPI.Unshipped.txt
@@ -2,7 +2,19 @@
*REMOVED*override Microsoft.Maui.Controls.RefreshView.MeasureOverride(double widthConstraint, double heightConstraint) -> Microsoft.Maui.Graphics.Size
Microsoft.Maui.Controls.Handlers.Compatibility.FrameRenderer.FrameRenderer(Android.Content.Context! context, Microsoft.Maui.IPropertyMapper! mapper) -> void
Microsoft.Maui.Controls.Handlers.Compatibility.FrameRenderer.FrameRenderer(Android.Content.Context! context, Microsoft.Maui.IPropertyMapper! mapper, Microsoft.Maui.CommandMapper! commandMapper) -> void
+Microsoft.Maui.Controls.LayoutOptions.Equals(Microsoft.Maui.Controls.LayoutOptions other) -> bool
+Microsoft.Maui.Controls.Region.Equals(Microsoft.Maui.Controls.Region other) -> bool
+Microsoft.Maui.Controls.Shapes.Matrix.Equals(Microsoft.Maui.Controls.Shapes.Matrix other) -> bool
+override Microsoft.Maui.Controls.LayoutOptions.GetHashCode() -> int
+override Microsoft.Maui.Controls.Region.GetHashCode() -> int
+override Microsoft.Maui.Controls.Shapes.Matrix.GetHashCode() -> int
override Microsoft.Maui.Controls.View.ChangeVisualState() -> void
+static Microsoft.Maui.Controls.LayoutOptions.operator !=(Microsoft.Maui.Controls.LayoutOptions left, Microsoft.Maui.Controls.LayoutOptions right) -> bool
+static Microsoft.Maui.Controls.LayoutOptions.operator ==(Microsoft.Maui.Controls.LayoutOptions left, Microsoft.Maui.Controls.LayoutOptions right) -> bool
+static Microsoft.Maui.Controls.Region.operator !=(Microsoft.Maui.Controls.Region left, Microsoft.Maui.Controls.Region right) -> bool
+static Microsoft.Maui.Controls.Region.operator ==(Microsoft.Maui.Controls.Region left, Microsoft.Maui.Controls.Region right) -> bool
+static Microsoft.Maui.Controls.Shapes.Matrix.operator !=(Microsoft.Maui.Controls.Shapes.Matrix left, Microsoft.Maui.Controls.Shapes.Matrix right) -> bool
+static Microsoft.Maui.Controls.Shapes.Matrix.operator ==(Microsoft.Maui.Controls.Shapes.Matrix left, Microsoft.Maui.Controls.Shapes.Matrix right) -> bool
virtual Microsoft.Maui.Controls.VisualElement.IsEnabledCore.get -> bool
Microsoft.Maui.Controls.VisualElement.RefreshIsEnabledProperty() -> void
override Microsoft.Maui.Controls.Button.IsEnabledCore.get -> bool
@@ -10,6 +22,9 @@ override Microsoft.Maui.Controls.ImageButton.IsEnabledCore.get -> bool
override Microsoft.Maui.Controls.SearchBar.IsEnabledCore.get -> bool
~Microsoft.Maui.Controls.WebView.UserAgent.get -> string
~Microsoft.Maui.Controls.WebView.UserAgent.set -> void
+~override Microsoft.Maui.Controls.LayoutOptions.Equals(object obj) -> bool
+~override Microsoft.Maui.Controls.Region.Equals(object obj) -> bool
+~override Microsoft.Maui.Controls.Shapes.Matrix.Equals(object obj) -> bool
~static readonly Microsoft.Maui.Controls.WebView.UserAgentProperty -> Microsoft.Maui.Controls.BindableProperty
*REMOVED*~Microsoft.Maui.Controls.IMessagingCenter.Send(TSender sender, string message, TArgs args) -> void
*REMOVED*~Microsoft.Maui.Controls.IMessagingCenter.Send(TSender sender, string message) -> void
diff --git a/src/Controls/src/Core/PublicAPI/net-ios/PublicAPI.Unshipped.txt b/src/Controls/src/Core/PublicAPI/net-ios/PublicAPI.Unshipped.txt
index bfe73ebeb904..4efc359ff412 100644
--- a/src/Controls/src/Core/PublicAPI/net-ios/PublicAPI.Unshipped.txt
+++ b/src/Controls/src/Core/PublicAPI/net-ios/PublicAPI.Unshipped.txt
@@ -1,9 +1,22 @@
#nullable enable
*REMOVED*override Microsoft.Maui.Controls.RefreshView.MeasureOverride(double widthConstraint, double heightConstraint) -> Microsoft.Maui.Graphics.Size
+Microsoft.Maui.Controls.LayoutOptions.Equals(Microsoft.Maui.Controls.LayoutOptions other) -> bool
+Microsoft.Maui.Controls.Region.Equals(Microsoft.Maui.Controls.Region other) -> bool
+Microsoft.Maui.Controls.Shapes.Matrix.Equals(Microsoft.Maui.Controls.Shapes.Matrix other) -> bool
+override Microsoft.Maui.Controls.LayoutOptions.GetHashCode() -> int
override Microsoft.Maui.Controls.Platform.Compatibility.ShellPageRendererTracker.TitleViewContainer.LayoutSubviews() -> void
+override Microsoft.Maui.Controls.Region.GetHashCode() -> int
+override Microsoft.Maui.Controls.Shapes.Matrix.GetHashCode() -> int
+static Microsoft.Maui.Controls.LayoutOptions.operator !=(Microsoft.Maui.Controls.LayoutOptions left, Microsoft.Maui.Controls.LayoutOptions right) -> bool
+static Microsoft.Maui.Controls.LayoutOptions.operator ==(Microsoft.Maui.Controls.LayoutOptions left, Microsoft.Maui.Controls.LayoutOptions right) -> bool
+static Microsoft.Maui.Controls.Region.operator !=(Microsoft.Maui.Controls.Region left, Microsoft.Maui.Controls.Region right) -> bool
+static Microsoft.Maui.Controls.Region.operator ==(Microsoft.Maui.Controls.Region left, Microsoft.Maui.Controls.Region right) -> bool
+static Microsoft.Maui.Controls.Shapes.Matrix.operator !=(Microsoft.Maui.Controls.Shapes.Matrix left, Microsoft.Maui.Controls.Shapes.Matrix right) -> bool
+static Microsoft.Maui.Controls.Shapes.Matrix.operator ==(Microsoft.Maui.Controls.Shapes.Matrix left, Microsoft.Maui.Controls.Shapes.Matrix right) -> bool
~Microsoft.Maui.Controls.Handlers.Compatibility.FrameRenderer.FrameRenderer(Microsoft.Maui.IPropertyMapper mapper) -> void
~Microsoft.Maui.Controls.Handlers.Compatibility.FrameRenderer.FrameRenderer(Microsoft.Maui.IPropertyMapper mapper, Microsoft.Maui.CommandMapper commandMapper) -> void
override Microsoft.Maui.Controls.View.ChangeVisualState() -> void
+~override Microsoft.Maui.Controls.LayoutOptions.Equals(object obj) -> bool
~override Microsoft.Maui.Controls.Platform.Compatibility.UIContainerView.AddSubview(UIKit.UIView view) -> void
~override Microsoft.Maui.Controls.Platform.Compatibility.UIContainerView.WillRemoveSubview(UIKit.UIView uiview) -> void
*REMOVED*~Microsoft.Maui.Controls.IMessagingCenter.Send(TSender sender, string message, TArgs args) -> void
@@ -21,6 +34,8 @@ override Microsoft.Maui.Controls.ImageButton.IsEnabledCore.get -> bool
override Microsoft.Maui.Controls.SearchBar.IsEnabledCore.get -> bool
~Microsoft.Maui.Controls.WebView.UserAgent.get -> string
~Microsoft.Maui.Controls.WebView.UserAgent.set -> void
+~override Microsoft.Maui.Controls.Region.Equals(object obj) -> bool
+~override Microsoft.Maui.Controls.Shapes.Matrix.Equals(object obj) -> bool
~static readonly Microsoft.Maui.Controls.WebView.UserAgentProperty -> Microsoft.Maui.Controls.BindableProperty
*REMOVED*~static Microsoft.Maui.Controls.MessagingCenter.Send(TSender sender, string message, TArgs args) -> void
*REMOVED*~static Microsoft.Maui.Controls.MessagingCenter.Send(TSender sender, string message) -> void
diff --git a/src/Controls/src/Core/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt b/src/Controls/src/Core/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt
index bfe73ebeb904..4efc359ff412 100644
--- a/src/Controls/src/Core/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt
+++ b/src/Controls/src/Core/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt
@@ -1,9 +1,22 @@
#nullable enable
*REMOVED*override Microsoft.Maui.Controls.RefreshView.MeasureOverride(double widthConstraint, double heightConstraint) -> Microsoft.Maui.Graphics.Size
+Microsoft.Maui.Controls.LayoutOptions.Equals(Microsoft.Maui.Controls.LayoutOptions other) -> bool
+Microsoft.Maui.Controls.Region.Equals(Microsoft.Maui.Controls.Region other) -> bool
+Microsoft.Maui.Controls.Shapes.Matrix.Equals(Microsoft.Maui.Controls.Shapes.Matrix other) -> bool
+override Microsoft.Maui.Controls.LayoutOptions.GetHashCode() -> int
override Microsoft.Maui.Controls.Platform.Compatibility.ShellPageRendererTracker.TitleViewContainer.LayoutSubviews() -> void
+override Microsoft.Maui.Controls.Region.GetHashCode() -> int
+override Microsoft.Maui.Controls.Shapes.Matrix.GetHashCode() -> int
+static Microsoft.Maui.Controls.LayoutOptions.operator !=(Microsoft.Maui.Controls.LayoutOptions left, Microsoft.Maui.Controls.LayoutOptions right) -> bool
+static Microsoft.Maui.Controls.LayoutOptions.operator ==(Microsoft.Maui.Controls.LayoutOptions left, Microsoft.Maui.Controls.LayoutOptions right) -> bool
+static Microsoft.Maui.Controls.Region.operator !=(Microsoft.Maui.Controls.Region left, Microsoft.Maui.Controls.Region right) -> bool
+static Microsoft.Maui.Controls.Region.operator ==(Microsoft.Maui.Controls.Region left, Microsoft.Maui.Controls.Region right) -> bool
+static Microsoft.Maui.Controls.Shapes.Matrix.operator !=(Microsoft.Maui.Controls.Shapes.Matrix left, Microsoft.Maui.Controls.Shapes.Matrix right) -> bool
+static Microsoft.Maui.Controls.Shapes.Matrix.operator ==(Microsoft.Maui.Controls.Shapes.Matrix left, Microsoft.Maui.Controls.Shapes.Matrix right) -> bool
~Microsoft.Maui.Controls.Handlers.Compatibility.FrameRenderer.FrameRenderer(Microsoft.Maui.IPropertyMapper mapper) -> void
~Microsoft.Maui.Controls.Handlers.Compatibility.FrameRenderer.FrameRenderer(Microsoft.Maui.IPropertyMapper mapper, Microsoft.Maui.CommandMapper commandMapper) -> void
override Microsoft.Maui.Controls.View.ChangeVisualState() -> void
+~override Microsoft.Maui.Controls.LayoutOptions.Equals(object obj) -> bool
~override Microsoft.Maui.Controls.Platform.Compatibility.UIContainerView.AddSubview(UIKit.UIView view) -> void
~override Microsoft.Maui.Controls.Platform.Compatibility.UIContainerView.WillRemoveSubview(UIKit.UIView uiview) -> void
*REMOVED*~Microsoft.Maui.Controls.IMessagingCenter.Send(TSender sender, string message, TArgs args) -> void
@@ -21,6 +34,8 @@ override Microsoft.Maui.Controls.ImageButton.IsEnabledCore.get -> bool
override Microsoft.Maui.Controls.SearchBar.IsEnabledCore.get -> bool
~Microsoft.Maui.Controls.WebView.UserAgent.get -> string
~Microsoft.Maui.Controls.WebView.UserAgent.set -> void
+~override Microsoft.Maui.Controls.Region.Equals(object obj) -> bool
+~override Microsoft.Maui.Controls.Shapes.Matrix.Equals(object obj) -> bool
~static readonly Microsoft.Maui.Controls.WebView.UserAgentProperty -> Microsoft.Maui.Controls.BindableProperty
*REMOVED*~static Microsoft.Maui.Controls.MessagingCenter.Send(TSender sender, string message, TArgs args) -> void
*REMOVED*~static Microsoft.Maui.Controls.MessagingCenter.Send(TSender sender, string message) -> void
diff --git a/src/Controls/src/Core/PublicAPI/net-tizen/PublicAPI.Unshipped.txt b/src/Controls/src/Core/PublicAPI/net-tizen/PublicAPI.Unshipped.txt
index 7fc7bdb374db..80379269e4b8 100644
--- a/src/Controls/src/Core/PublicAPI/net-tizen/PublicAPI.Unshipped.txt
+++ b/src/Controls/src/Core/PublicAPI/net-tizen/PublicAPI.Unshipped.txt
@@ -1,4 +1,19 @@
#nullable enable
+Microsoft.Maui.Controls.LayoutOptions.Equals(Microsoft.Maui.Controls.LayoutOptions other) -> bool
+Microsoft.Maui.Controls.Region.Equals(Microsoft.Maui.Controls.Region other) -> bool
+Microsoft.Maui.Controls.Shapes.Matrix.Equals(Microsoft.Maui.Controls.Shapes.Matrix other) -> bool
+override Microsoft.Maui.Controls.LayoutOptions.GetHashCode() -> int
+override Microsoft.Maui.Controls.Region.GetHashCode() -> int
+override Microsoft.Maui.Controls.Shapes.Matrix.GetHashCode() -> int
+static Microsoft.Maui.Controls.LayoutOptions.operator !=(Microsoft.Maui.Controls.LayoutOptions left, Microsoft.Maui.Controls.LayoutOptions right) -> bool
+static Microsoft.Maui.Controls.LayoutOptions.operator ==(Microsoft.Maui.Controls.LayoutOptions left, Microsoft.Maui.Controls.LayoutOptions right) -> bool
+static Microsoft.Maui.Controls.Region.operator !=(Microsoft.Maui.Controls.Region left, Microsoft.Maui.Controls.Region right) -> bool
+static Microsoft.Maui.Controls.Region.operator ==(Microsoft.Maui.Controls.Region left, Microsoft.Maui.Controls.Region right) -> bool
+static Microsoft.Maui.Controls.Shapes.Matrix.operator !=(Microsoft.Maui.Controls.Shapes.Matrix left, Microsoft.Maui.Controls.Shapes.Matrix right) -> bool
+static Microsoft.Maui.Controls.Shapes.Matrix.operator ==(Microsoft.Maui.Controls.Shapes.Matrix left, Microsoft.Maui.Controls.Shapes.Matrix right) -> bool
+~override Microsoft.Maui.Controls.LayoutOptions.Equals(object obj) -> bool
+~override Microsoft.Maui.Controls.Region.Equals(object obj) -> bool
+~override Microsoft.Maui.Controls.Shapes.Matrix.Equals(object obj) -> bool
~static Microsoft.Maui.Controls.Platform.FormattedStringExtensions.ToFormattedString(this Microsoft.Maui.Controls.Label label) -> Tizen.UIExtensions.Common.FormattedString
Microsoft.Maui.Controls.Platform.FormattedStringExtensions
*REMOVED*Microsoft.Maui.Controls.Platform.ShellView.DefaultBackgroundCorlor -> Tizen.NUI.Color!
diff --git a/src/Controls/src/Core/PublicAPI/net-windows/PublicAPI.Unshipped.txt b/src/Controls/src/Core/PublicAPI/net-windows/PublicAPI.Unshipped.txt
index 1e2360ee9067..dc2503cc6946 100644
--- a/src/Controls/src/Core/PublicAPI/net-windows/PublicAPI.Unshipped.txt
+++ b/src/Controls/src/Core/PublicAPI/net-windows/PublicAPI.Unshipped.txt
@@ -1,5 +1,17 @@
#nullable enable
*REMOVED*override Microsoft.Maui.Controls.RefreshView.MeasureOverride(double widthConstraint, double heightConstraint) -> Microsoft.Maui.Graphics.Size
+Microsoft.Maui.Controls.LayoutOptions.Equals(Microsoft.Maui.Controls.LayoutOptions other) -> bool
+Microsoft.Maui.Controls.Region.Equals(Microsoft.Maui.Controls.Region other) -> bool
+Microsoft.Maui.Controls.Shapes.Matrix.Equals(Microsoft.Maui.Controls.Shapes.Matrix other) -> bool
+override Microsoft.Maui.Controls.LayoutOptions.GetHashCode() -> int
+override Microsoft.Maui.Controls.Region.GetHashCode() -> int
+override Microsoft.Maui.Controls.Shapes.Matrix.GetHashCode() -> int
+static Microsoft.Maui.Controls.LayoutOptions.operator !=(Microsoft.Maui.Controls.LayoutOptions left, Microsoft.Maui.Controls.LayoutOptions right) -> bool
+static Microsoft.Maui.Controls.LayoutOptions.operator ==(Microsoft.Maui.Controls.LayoutOptions left, Microsoft.Maui.Controls.LayoutOptions right) -> bool
+static Microsoft.Maui.Controls.Region.operator !=(Microsoft.Maui.Controls.Region left, Microsoft.Maui.Controls.Region right) -> bool
+static Microsoft.Maui.Controls.Region.operator ==(Microsoft.Maui.Controls.Region left, Microsoft.Maui.Controls.Region right) -> bool
+static Microsoft.Maui.Controls.Shapes.Matrix.operator !=(Microsoft.Maui.Controls.Shapes.Matrix left, Microsoft.Maui.Controls.Shapes.Matrix right) -> bool
+static Microsoft.Maui.Controls.Shapes.Matrix.operator ==(Microsoft.Maui.Controls.Shapes.Matrix left, Microsoft.Maui.Controls.Shapes.Matrix right) -> bool
~Microsoft.Maui.Controls.Handlers.Compatibility.FrameRenderer.FrameRenderer(Microsoft.Maui.IPropertyMapper mapper) -> void
~Microsoft.Maui.Controls.Handlers.Compatibility.FrameRenderer.FrameRenderer(Microsoft.Maui.IPropertyMapper mapper, Microsoft.Maui.CommandMapper commandMapper) -> void
override Microsoft.Maui.Controls.View.ChangeVisualState() -> void
@@ -18,6 +30,9 @@ override Microsoft.Maui.Controls.ImageButton.IsEnabledCore.get -> bool
override Microsoft.Maui.Controls.SearchBar.IsEnabledCore.get -> bool
~Microsoft.Maui.Controls.WebView.UserAgent.get -> string
~Microsoft.Maui.Controls.WebView.UserAgent.set -> void
+~override Microsoft.Maui.Controls.LayoutOptions.Equals(object obj) -> bool
+~override Microsoft.Maui.Controls.Region.Equals(object obj) -> bool
+~override Microsoft.Maui.Controls.Shapes.Matrix.Equals(object obj) -> bool
~static readonly Microsoft.Maui.Controls.WebView.UserAgentProperty -> Microsoft.Maui.Controls.BindableProperty
*REMOVED*~static Microsoft.Maui.Controls.MessagingCenter.Send(TSender sender, string message, TArgs args) -> void
*REMOVED*~static Microsoft.Maui.Controls.MessagingCenter.Send(TSender sender, string message) -> void
diff --git a/src/Controls/src/Core/PublicAPI/net/PublicAPI.Unshipped.txt b/src/Controls/src/Core/PublicAPI/net/PublicAPI.Unshipped.txt
index b615d03eee31..295a076b6fa5 100644
--- a/src/Controls/src/Core/PublicAPI/net/PublicAPI.Unshipped.txt
+++ b/src/Controls/src/Core/PublicAPI/net/PublicAPI.Unshipped.txt
@@ -1,6 +1,18 @@
#nullable enable
*REMOVED*override Microsoft.Maui.Controls.RefreshView.MeasureOverride(double widthConstraint, double heightConstraint) -> Microsoft.Maui.Graphics.Size
+Microsoft.Maui.Controls.LayoutOptions.Equals(Microsoft.Maui.Controls.LayoutOptions other) -> bool
+Microsoft.Maui.Controls.Region.Equals(Microsoft.Maui.Controls.Region other) -> bool
+Microsoft.Maui.Controls.Shapes.Matrix.Equals(Microsoft.Maui.Controls.Shapes.Matrix other) -> bool
+override Microsoft.Maui.Controls.LayoutOptions.GetHashCode() -> int
+override Microsoft.Maui.Controls.Region.GetHashCode() -> int
+override Microsoft.Maui.Controls.Shapes.Matrix.GetHashCode() -> int
override Microsoft.Maui.Controls.View.ChangeVisualState() -> void
+static Microsoft.Maui.Controls.LayoutOptions.operator !=(Microsoft.Maui.Controls.LayoutOptions left, Microsoft.Maui.Controls.LayoutOptions right) -> bool
+static Microsoft.Maui.Controls.LayoutOptions.operator ==(Microsoft.Maui.Controls.LayoutOptions left, Microsoft.Maui.Controls.LayoutOptions right) -> bool
+static Microsoft.Maui.Controls.Region.operator !=(Microsoft.Maui.Controls.Region left, Microsoft.Maui.Controls.Region right) -> bool
+static Microsoft.Maui.Controls.Region.operator ==(Microsoft.Maui.Controls.Region left, Microsoft.Maui.Controls.Region right) -> bool
+static Microsoft.Maui.Controls.Shapes.Matrix.operator !=(Microsoft.Maui.Controls.Shapes.Matrix left, Microsoft.Maui.Controls.Shapes.Matrix right) -> bool
+static Microsoft.Maui.Controls.Shapes.Matrix.operator ==(Microsoft.Maui.Controls.Shapes.Matrix left, Microsoft.Maui.Controls.Shapes.Matrix right) -> bool
virtual Microsoft.Maui.Controls.VisualElement.IsEnabledCore.get -> bool
Microsoft.Maui.Controls.VisualElement.RefreshIsEnabledProperty() -> void
override Microsoft.Maui.Controls.Button.IsEnabledCore.get -> bool
@@ -8,6 +20,9 @@ override Microsoft.Maui.Controls.ImageButton.IsEnabledCore.get -> bool
override Microsoft.Maui.Controls.SearchBar.IsEnabledCore.get -> bool
~Microsoft.Maui.Controls.WebView.UserAgent.get -> string
~Microsoft.Maui.Controls.WebView.UserAgent.set -> void
+~override Microsoft.Maui.Controls.LayoutOptions.Equals(object obj) -> bool
+~override Microsoft.Maui.Controls.Region.Equals(object obj) -> bool
+~override Microsoft.Maui.Controls.Shapes.Matrix.Equals(object obj) -> bool
~static readonly Microsoft.Maui.Controls.WebView.UserAgentProperty -> Microsoft.Maui.Controls.BindableProperty
*REMOVED*~Microsoft.Maui.Controls.IMessagingCenter.Send(TSender sender, string message, TArgs args) -> void
*REMOVED*~Microsoft.Maui.Controls.IMessagingCenter.Send(TSender sender, string message) -> void
diff --git a/src/Controls/src/Core/PublicAPI/netstandard/PublicAPI.Unshipped.txt b/src/Controls/src/Core/PublicAPI/netstandard/PublicAPI.Unshipped.txt
index 286aa4b17784..9f6b002fcf26 100644
--- a/src/Controls/src/Core/PublicAPI/netstandard/PublicAPI.Unshipped.txt
+++ b/src/Controls/src/Core/PublicAPI/netstandard/PublicAPI.Unshipped.txt
@@ -1,5 +1,11 @@
#nullable enable
*REMOVED*override Microsoft.Maui.Controls.RefreshView.MeasureOverride(double widthConstraint, double heightConstraint) -> Microsoft.Maui.Graphics.Size
+Microsoft.Maui.Controls.LayoutOptions.Equals(Microsoft.Maui.Controls.LayoutOptions other) -> bool
+Microsoft.Maui.Controls.Region.Equals(Microsoft.Maui.Controls.Region other) -> bool
+Microsoft.Maui.Controls.Shapes.Matrix.Equals(Microsoft.Maui.Controls.Shapes.Matrix other) -> bool
+override Microsoft.Maui.Controls.LayoutOptions.GetHashCode() -> int
+override Microsoft.Maui.Controls.Region.GetHashCode() -> int
+override Microsoft.Maui.Controls.Shapes.Matrix.GetHashCode() -> int
override Microsoft.Maui.Controls.View.ChangeVisualState() -> void
*REMOVED*~Microsoft.Maui.Controls.IMessagingCenter.Send(TSender sender, string message, TArgs args) -> void
*REMOVED*~Microsoft.Maui.Controls.IMessagingCenter.Send(TSender sender, string message) -> void
@@ -9,6 +15,12 @@ override Microsoft.Maui.Controls.View.ChangeVisualState() -> void
*REMOVED*~Microsoft.Maui.Controls.IMessagingCenter.Unsubscribe(object subscriber, string message) -> void
*REMOVED*~static Microsoft.Maui.Controls.MessagingCenter.Instance.get -> Microsoft.Maui.Controls.IMessagingCenter
*REMOVED*Microsoft.Maui.Controls.IMessagingCenter
+static Microsoft.Maui.Controls.LayoutOptions.operator !=(Microsoft.Maui.Controls.LayoutOptions left, Microsoft.Maui.Controls.LayoutOptions right) -> bool
+static Microsoft.Maui.Controls.LayoutOptions.operator ==(Microsoft.Maui.Controls.LayoutOptions left, Microsoft.Maui.Controls.LayoutOptions right) -> bool
+static Microsoft.Maui.Controls.Region.operator !=(Microsoft.Maui.Controls.Region left, Microsoft.Maui.Controls.Region right) -> bool
+static Microsoft.Maui.Controls.Region.operator ==(Microsoft.Maui.Controls.Region left, Microsoft.Maui.Controls.Region right) -> bool
+static Microsoft.Maui.Controls.Shapes.Matrix.operator !=(Microsoft.Maui.Controls.Shapes.Matrix left, Microsoft.Maui.Controls.Shapes.Matrix right) -> bool
+static Microsoft.Maui.Controls.Shapes.Matrix.operator ==(Microsoft.Maui.Controls.Shapes.Matrix left, Microsoft.Maui.Controls.Shapes.Matrix right) -> bool
virtual Microsoft.Maui.Controls.VisualElement.IsEnabledCore.get -> bool
Microsoft.Maui.Controls.VisualElement.RefreshIsEnabledProperty() -> void
override Microsoft.Maui.Controls.Button.IsEnabledCore.get -> bool
@@ -16,6 +28,9 @@ override Microsoft.Maui.Controls.ImageButton.IsEnabledCore.get -> bool
override Microsoft.Maui.Controls.SearchBar.IsEnabledCore.get -> bool
~Microsoft.Maui.Controls.WebView.UserAgent.get -> string
~Microsoft.Maui.Controls.WebView.UserAgent.set -> void
+~override Microsoft.Maui.Controls.LayoutOptions.Equals(object obj) -> bool
+~override Microsoft.Maui.Controls.Region.Equals(object obj) -> bool
+~override Microsoft.Maui.Controls.Shapes.Matrix.Equals(object obj) -> bool
~static readonly Microsoft.Maui.Controls.WebView.UserAgentProperty -> Microsoft.Maui.Controls.BindableProperty
*REMOVED*~static Microsoft.Maui.Controls.MessagingCenter.Send(TSender sender, string message, TArgs args) -> void
*REMOVED*~static Microsoft.Maui.Controls.MessagingCenter.Send(TSender sender, string message) -> void
diff --git a/src/Controls/src/Core/Region.cs b/src/Controls/src/Core/Region.cs
index 7566d9aa78ef..a8191950c482 100644
--- a/src/Controls/src/Core/Region.cs
+++ b/src/Controls/src/Core/Region.cs
@@ -1,4 +1,5 @@
#nullable disable
+using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Microsoft.Maui.Graphics;
@@ -6,7 +7,7 @@
namespace Microsoft.Maui.Controls
{
///
- public struct Region
+ public struct Region : IEquatable
{
// While Regions are currently rectangular, they could in the future be transformed into any shape.
// As such the internals of how it keeps shapes is hidden, so that future internal changes can occur to support shapes
@@ -116,5 +117,16 @@ public Region Inflate(double left, double top, double right, double bottom)
return new Region(rectangles, inflation);
}
+
+ public bool Equals(Region other) =>
+ Regions == other.Regions && _inflation == other._inflation;
+
+ public override bool Equals(object obj) => obj is Region other && Equals(other);
+
+ public override int GetHashCode() => Regions.GetHashCode() ^ _inflation?.GetHashCode() ?? 0;
+
+ public static bool operator ==(Region left, Region right) => left.Equals(right);
+
+ public static bool operator !=(Region left, Region right) => !(left == right);
}
}
\ No newline at end of file
diff --git a/src/Controls/src/Core/Shapes/Matrix.cs b/src/Controls/src/Core/Shapes/Matrix.cs
index 716eacae16c6..95d1949dc1f9 100644
--- a/src/Controls/src/Core/Shapes/Matrix.cs
+++ b/src/Controls/src/Core/Shapes/Matrix.cs
@@ -14,7 +14,7 @@ internal enum MatrixTypes
///
[System.ComponentModel.TypeConverter(typeof(MatrixTypeConverter))]
- public struct Matrix
+ public struct Matrix : IEquatable
{
internal double _m11;
internal double _m12;
@@ -671,6 +671,20 @@ void DeriveMatrixType()
}
return;
}
+
+ public bool Equals(Matrix other) =>
+ _m11 == other._m11 && _m12 == other._m12 && _m21 == other._m21 && _m22 == other._m22 &&
+ _offsetX == other._offsetX && _offsetY == other._offsetY && _type == other._type && _padding == other._padding;
+
+ public override bool Equals(object obj) => obj is Matrix other && Equals(other);
+
+ public override int GetHashCode() =>
+ _m11.GetHashCode() ^ _m12.GetHashCode() ^ _m21.GetHashCode() ^ _m22.GetHashCode() ^
+ _offsetX.GetHashCode() ^ _offsetY.GetHashCode() ^ _type.GetHashCode() ^ _padding.GetHashCode();
+
+ public static bool operator ==(Matrix left, Matrix right) => left.Equals(right);
+
+ public static bool operator !=(Matrix left, Matrix right) => !(left == right);
}
internal static class MatrixUtil
diff --git a/src/Controls/tests/Core.UnitTests/AcceleratorUnitTests.cs b/src/Controls/tests/Core.UnitTests/AcceleratorUnitTests.cs
index 871d5199a216..5b55e5f6e376 100644
--- a/src/Controls/tests/Core.UnitTests/AcceleratorUnitTests.cs
+++ b/src/Controls/tests/Core.UnitTests/AcceleratorUnitTests.cs
@@ -73,7 +73,9 @@ public void AcceleratorFromLetterAnd2Modifier()
[Preserve(AllMembers = true)]
+#pragma warning disable CA1815 // Override equals and operator equals on value types
public struct TestShortcut
+#pragma warning restore CA1815 // Override equals and operator equals on value types
{
internal TestShortcut(string modifier)
{
diff --git a/src/Core/src/Fonts/FontSize.Android.cs b/src/Core/src/Fonts/FontSize.Android.cs
index 4c6c9c8b59f0..d235932d6575 100644
--- a/src/Core/src/Fonts/FontSize.Android.cs
+++ b/src/Core/src/Fonts/FontSize.Android.cs
@@ -1,11 +1,12 @@
-using Android.Util;
+using System;
+using Android.Util;
namespace Microsoft.Maui
{
///
/// Represents the size of a font on Android.
///
- public readonly struct FontSize
+ public readonly struct FontSize : IEquatable
{
///
/// Creates a new instance.
@@ -27,5 +28,15 @@ public FontSize(float value, ComplexUnitType unit)
/// The unit in which the font size is expressed.
///
public ComplexUnitType Unit { get; }
+
+ public bool Equals(FontSize other) => Value == other.Value && Unit == other.Unit;
+
+ public override bool Equals(object? obj) => obj is FontSize other && Equals(other);
+
+ public override int GetHashCode() => Value.GetHashCode() ^ Unit.GetHashCode();
+
+ public static bool operator ==(FontSize left, FontSize right) => left.Equals(right);
+
+ public static bool operator !=(FontSize left, FontSize right) => !(left == right);
}
}
diff --git a/src/Core/src/Layouts/FlexEnums.cs b/src/Core/src/Layouts/FlexEnums.cs
index fde15f7664df..0e901377e0cc 100644
--- a/src/Core/src/Layouts/FlexEnums.cs
+++ b/src/Core/src/Layouts/FlexEnums.cs
@@ -71,7 +71,7 @@ public enum FlexWrap
}
[TypeConverter(typeof(Converters.FlexBasisTypeConverter))]
- public struct FlexBasis
+ public struct FlexBasis : IEquatable
{
bool _isLength;
bool _isRelative;
@@ -94,5 +94,15 @@ public FlexBasis(float length, bool isRelative = false)
public static implicit operator FlexBasis(float length)
=> new FlexBasis(length);
+
+ public bool Equals(FlexBasis other) => _isLength == other._isLength && _isRelative == other._isRelative && Length == other.Length;
+
+ public override bool Equals(object? obj) => obj is FlexBasis other && Equals(other);
+
+ public override int GetHashCode() => _isRelative.GetHashCode() ^ Length.GetHashCode();
+
+ public static bool operator ==(FlexBasis left, FlexBasis right) => left.Equals(right);
+
+ public static bool operator !=(FlexBasis left, FlexBasis right) => !(left == right);
}
}
\ No newline at end of file
diff --git a/src/Core/src/Primitives/GridLength.cs b/src/Core/src/Primitives/GridLength.cs
index ad7ef1374fef..cb3d30be3d25 100644
--- a/src/Core/src/Primitives/GridLength.cs
+++ b/src/Core/src/Primitives/GridLength.cs
@@ -82,5 +82,9 @@ public override string ToString()
{
return string.Format("{0}.{1}", Value, GridUnitType);
}
+
+ public static bool operator ==(GridLength left, GridLength right) => left.Equals(right);
+
+ public static bool operator !=(GridLength left, GridLength right) => !(left == right);
}
}
\ No newline at end of file
diff --git a/src/Core/src/Primitives/SizeRequest.cs b/src/Core/src/Primitives/SizeRequest.cs
index 50050ba87082..0b0264eb0b71 100644
--- a/src/Core/src/Primitives/SizeRequest.cs
+++ b/src/Core/src/Primitives/SizeRequest.cs
@@ -1,3 +1,4 @@
+using System;
using System.Diagnostics;
using Microsoft.Maui.Graphics;
@@ -5,7 +6,7 @@ namespace Microsoft.Maui
{
///
[DebuggerDisplay("Request={Request.Width}x{Request.Height}, Minimum={Minimum.Width}x{Minimum.Height}")]
- public struct SizeRequest
+ public struct SizeRequest : IEquatable
{
///
public Size Request { get; set; }
@@ -33,8 +34,18 @@ public override string ToString()
return string.Format("{{Request={0} Minimum={1}}}", Request, Minimum);
}
+ public bool Equals(SizeRequest other) => Request.Equals(other.Request) && Minimum.Equals(other.Minimum);
+
public static implicit operator SizeRequest(Size size) => new SizeRequest(size);
public static implicit operator Size(SizeRequest size) => size.Request;
+
+ public override bool Equals(object? obj) => obj is SizeRequest other && Equals(other);
+
+ public override int GetHashCode() => Request.GetHashCode() ^ Minimum.GetHashCode();
+
+ public static bool operator ==(SizeRequest left, SizeRequest right) => left.Equals(right);
+
+ public static bool operator !=(SizeRequest left, SizeRequest right) => !(left == right);
}
}
\ No newline at end of file
diff --git a/src/Core/src/PublicAPI/net-android/PublicAPI.Unshipped.txt b/src/Core/src/PublicAPI/net-android/PublicAPI.Unshipped.txt
index 4881e4b8b0c4..caa05788000a 100644
--- a/src/Core/src/PublicAPI/net-android/PublicAPI.Unshipped.txt
+++ b/src/Core/src/PublicAPI/net-android/PublicAPI.Unshipped.txt
@@ -1,6 +1,21 @@
#nullable enable
+Microsoft.Maui.FontSize.Equals(Microsoft.Maui.FontSize other) -> bool
+Microsoft.Maui.Layouts.FlexBasis.Equals(Microsoft.Maui.Layouts.FlexBasis other) -> bool
+Microsoft.Maui.SizeRequest.Equals(Microsoft.Maui.SizeRequest other) -> bool
+override Microsoft.Maui.FontSize.Equals(object? obj) -> bool
+override Microsoft.Maui.FontSize.GetHashCode() -> int
override Microsoft.Maui.Handlers.EditorHandler.PlatformArrange(Microsoft.Maui.Graphics.Rect frame) -> void
+override Microsoft.Maui.Layouts.FlexBasis.Equals(object? obj) -> bool
+override Microsoft.Maui.Layouts.FlexBasis.GetHashCode() -> int
+override Microsoft.Maui.SizeRequest.Equals(object? obj) -> bool
+override Microsoft.Maui.SizeRequest.GetHashCode() -> int
+static Microsoft.Maui.FontSize.operator !=(Microsoft.Maui.FontSize left, Microsoft.Maui.FontSize right) -> bool
+static Microsoft.Maui.FontSize.operator ==(Microsoft.Maui.FontSize left, Microsoft.Maui.FontSize right) -> bool
+static Microsoft.Maui.GridLength.operator !=(Microsoft.Maui.GridLength left, Microsoft.Maui.GridLength right) -> bool
+static Microsoft.Maui.GridLength.operator ==(Microsoft.Maui.GridLength left, Microsoft.Maui.GridLength right) -> bool
static Microsoft.Maui.Handlers.StepperHandler.MapIsEnabled(Microsoft.Maui.Handlers.IStepperHandler! handler, Microsoft.Maui.IStepper! stepper) -> void
+static Microsoft.Maui.Layouts.FlexBasis.operator !=(Microsoft.Maui.Layouts.FlexBasis left, Microsoft.Maui.Layouts.FlexBasis right) -> bool
+static Microsoft.Maui.Layouts.FlexBasis.operator ==(Microsoft.Maui.Layouts.FlexBasis left, Microsoft.Maui.Layouts.FlexBasis right) -> bool
static Microsoft.Maui.Layouts.LayoutExtensions.ArrangeContentUnbounded(this Microsoft.Maui.IContentView! contentView, Microsoft.Maui.Graphics.Rect bounds) -> Microsoft.Maui.Graphics.Size
Microsoft.Maui.IWebView.UserAgent.get -> string?
Microsoft.Maui.IWebView.UserAgent.set -> void
@@ -8,3 +23,5 @@ static Microsoft.Maui.Handlers.WebViewHandler.MapUserAgent(Microsoft.Maui.Handle
static Microsoft.Maui.Platform.WebViewExtensions.UpdateUserAgent(this Android.Webkit.WebView! platformWebView, Microsoft.Maui.IWebView! webView) -> void
*REMOVED*Microsoft.Maui.WeakEventManager.HandleEvent(object! sender, object! args, string! eventName) -> void
Microsoft.Maui.WeakEventManager.HandleEvent(object? sender, object? args, string! eventName) -> void
+static Microsoft.Maui.SizeRequest.operator !=(Microsoft.Maui.SizeRequest left, Microsoft.Maui.SizeRequest right) -> bool
+static Microsoft.Maui.SizeRequest.operator ==(Microsoft.Maui.SizeRequest left, Microsoft.Maui.SizeRequest right) -> bool
diff --git a/src/Core/src/PublicAPI/net-ios/PublicAPI.Unshipped.txt b/src/Core/src/PublicAPI/net-ios/PublicAPI.Unshipped.txt
index 553fb250f44a..f1e88e5f732b 100644
--- a/src/Core/src/PublicAPI/net-ios/PublicAPI.Unshipped.txt
+++ b/src/Core/src/PublicAPI/net-ios/PublicAPI.Unshipped.txt
@@ -2,13 +2,23 @@
Microsoft.Maui.Handlers.SwipeItemButton
Microsoft.Maui.Handlers.SwipeItemButton.FrameChanged -> System.EventHandler?
Microsoft.Maui.Handlers.SwipeItemButton.SwipeItemButton() -> void
+Microsoft.Maui.Layouts.FlexBasis.Equals(Microsoft.Maui.Layouts.FlexBasis other) -> bool
+Microsoft.Maui.SizeRequest.Equals(Microsoft.Maui.SizeRequest other) -> bool
override Microsoft.Maui.Handlers.SwipeItemButton.Frame.get -> CoreGraphics.CGRect
override Microsoft.Maui.Handlers.SwipeItemButton.Frame.set -> void
override Microsoft.Maui.Handlers.SwipeItemMenuItemHandler.ConnectHandler(UIKit.UIButton! platformView) -> void
override Microsoft.Maui.Handlers.SwipeItemMenuItemHandler.DisconnectHandler(UIKit.UIButton! platformView) -> void
override Microsoft.Maui.Handlers.SwitchHandler.NeedsContainer.get -> bool
+override Microsoft.Maui.Layouts.FlexBasis.Equals(object? obj) -> bool
+override Microsoft.Maui.Layouts.FlexBasis.GetHashCode() -> int
override Microsoft.Maui.Platform.MauiTextView.Font.get -> UIKit.UIFont?
override Microsoft.Maui.Platform.MauiTextView.Font.set -> void
+override Microsoft.Maui.SizeRequest.Equals(object? obj) -> bool
+override Microsoft.Maui.SizeRequest.GetHashCode() -> int
+static Microsoft.Maui.GridLength.operator !=(Microsoft.Maui.GridLength left, Microsoft.Maui.GridLength right) -> bool
+static Microsoft.Maui.GridLength.operator ==(Microsoft.Maui.GridLength left, Microsoft.Maui.GridLength right) -> bool
+static Microsoft.Maui.Layouts.FlexBasis.operator !=(Microsoft.Maui.Layouts.FlexBasis left, Microsoft.Maui.Layouts.FlexBasis right) -> bool
+static Microsoft.Maui.Layouts.FlexBasis.operator ==(Microsoft.Maui.Layouts.FlexBasis left, Microsoft.Maui.Layouts.FlexBasis right) -> bool
static Microsoft.Maui.Layouts.LayoutExtensions.ArrangeContentUnbounded(this Microsoft.Maui.IContentView! contentView, Microsoft.Maui.Graphics.Rect bounds) -> Microsoft.Maui.Graphics.Size
override Microsoft.Maui.Platform.MauiTextField.WillMoveToWindow(UIKit.UIWindow? window) -> void
override Microsoft.Maui.Platform.MauiTextView.WillMoveToWindow(UIKit.UIWindow? window) -> void
@@ -20,3 +30,5 @@ static Microsoft.Maui.Handlers.WebViewHandler.MapUserAgent(Microsoft.Maui.Handle
static Microsoft.Maui.Platform.WebViewExtensions.UpdateUserAgent(this WebKit.WKWebView! platformWebView, Microsoft.Maui.IWebView! webView) -> void
*REMOVED*Microsoft.Maui.WeakEventManager.HandleEvent(object! sender, object! args, string! eventName) -> void
Microsoft.Maui.WeakEventManager.HandleEvent(object? sender, object? args, string! eventName) -> void
+static Microsoft.Maui.SizeRequest.operator !=(Microsoft.Maui.SizeRequest left, Microsoft.Maui.SizeRequest right) -> bool
+static Microsoft.Maui.SizeRequest.operator ==(Microsoft.Maui.SizeRequest left, Microsoft.Maui.SizeRequest right) -> bool
diff --git a/src/Core/src/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt b/src/Core/src/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt
index 553fb250f44a..f1e88e5f732b 100644
--- a/src/Core/src/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt
+++ b/src/Core/src/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt
@@ -2,13 +2,23 @@
Microsoft.Maui.Handlers.SwipeItemButton
Microsoft.Maui.Handlers.SwipeItemButton.FrameChanged -> System.EventHandler?
Microsoft.Maui.Handlers.SwipeItemButton.SwipeItemButton() -> void
+Microsoft.Maui.Layouts.FlexBasis.Equals(Microsoft.Maui.Layouts.FlexBasis other) -> bool
+Microsoft.Maui.SizeRequest.Equals(Microsoft.Maui.SizeRequest other) -> bool
override Microsoft.Maui.Handlers.SwipeItemButton.Frame.get -> CoreGraphics.CGRect
override Microsoft.Maui.Handlers.SwipeItemButton.Frame.set -> void
override Microsoft.Maui.Handlers.SwipeItemMenuItemHandler.ConnectHandler(UIKit.UIButton! platformView) -> void
override Microsoft.Maui.Handlers.SwipeItemMenuItemHandler.DisconnectHandler(UIKit.UIButton! platformView) -> void
override Microsoft.Maui.Handlers.SwitchHandler.NeedsContainer.get -> bool
+override Microsoft.Maui.Layouts.FlexBasis.Equals(object? obj) -> bool
+override Microsoft.Maui.Layouts.FlexBasis.GetHashCode() -> int
override Microsoft.Maui.Platform.MauiTextView.Font.get -> UIKit.UIFont?
override Microsoft.Maui.Platform.MauiTextView.Font.set -> void
+override Microsoft.Maui.SizeRequest.Equals(object? obj) -> bool
+override Microsoft.Maui.SizeRequest.GetHashCode() -> int
+static Microsoft.Maui.GridLength.operator !=(Microsoft.Maui.GridLength left, Microsoft.Maui.GridLength right) -> bool
+static Microsoft.Maui.GridLength.operator ==(Microsoft.Maui.GridLength left, Microsoft.Maui.GridLength right) -> bool
+static Microsoft.Maui.Layouts.FlexBasis.operator !=(Microsoft.Maui.Layouts.FlexBasis left, Microsoft.Maui.Layouts.FlexBasis right) -> bool
+static Microsoft.Maui.Layouts.FlexBasis.operator ==(Microsoft.Maui.Layouts.FlexBasis left, Microsoft.Maui.Layouts.FlexBasis right) -> bool
static Microsoft.Maui.Layouts.LayoutExtensions.ArrangeContentUnbounded(this Microsoft.Maui.IContentView! contentView, Microsoft.Maui.Graphics.Rect bounds) -> Microsoft.Maui.Graphics.Size
override Microsoft.Maui.Platform.MauiTextField.WillMoveToWindow(UIKit.UIWindow? window) -> void
override Microsoft.Maui.Platform.MauiTextView.WillMoveToWindow(UIKit.UIWindow? window) -> void
@@ -20,3 +30,5 @@ static Microsoft.Maui.Handlers.WebViewHandler.MapUserAgent(Microsoft.Maui.Handle
static Microsoft.Maui.Platform.WebViewExtensions.UpdateUserAgent(this WebKit.WKWebView! platformWebView, Microsoft.Maui.IWebView! webView) -> void
*REMOVED*Microsoft.Maui.WeakEventManager.HandleEvent(object! sender, object! args, string! eventName) -> void
Microsoft.Maui.WeakEventManager.HandleEvent(object? sender, object? args, string! eventName) -> void
+static Microsoft.Maui.SizeRequest.operator !=(Microsoft.Maui.SizeRequest left, Microsoft.Maui.SizeRequest right) -> bool
+static Microsoft.Maui.SizeRequest.operator ==(Microsoft.Maui.SizeRequest left, Microsoft.Maui.SizeRequest right) -> bool
diff --git a/src/Core/src/PublicAPI/net-tizen/PublicAPI.Unshipped.txt b/src/Core/src/PublicAPI/net-tizen/PublicAPI.Unshipped.txt
index fdf8f63ecc72..a01d3859a209 100644
--- a/src/Core/src/PublicAPI/net-tizen/PublicAPI.Unshipped.txt
+++ b/src/Core/src/PublicAPI/net-tizen/PublicAPI.Unshipped.txt
@@ -1,8 +1,20 @@
#nullable enable
+Microsoft.Maui.Layouts.FlexBasis.Equals(Microsoft.Maui.Layouts.FlexBasis other) -> bool
+Microsoft.Maui.SizeRequest.Equals(Microsoft.Maui.SizeRequest other) -> bool
+override Microsoft.Maui.Layouts.FlexBasis.Equals(object? obj) -> bool
+override Microsoft.Maui.Layouts.FlexBasis.GetHashCode() -> int
+override Microsoft.Maui.SizeRequest.Equals(object? obj) -> bool
+override Microsoft.Maui.SizeRequest.GetHashCode() -> int
+static Microsoft.Maui.GridLength.operator !=(Microsoft.Maui.GridLength left, Microsoft.Maui.GridLength right) -> bool
+static Microsoft.Maui.GridLength.operator ==(Microsoft.Maui.GridLength left, Microsoft.Maui.GridLength right) -> bool
+static Microsoft.Maui.Layouts.FlexBasis.operator !=(Microsoft.Maui.Layouts.FlexBasis left, Microsoft.Maui.Layouts.FlexBasis right) -> bool
+static Microsoft.Maui.Layouts.FlexBasis.operator ==(Microsoft.Maui.Layouts.FlexBasis left, Microsoft.Maui.Layouts.FlexBasis right) -> bool
Microsoft.Maui.IWebView.UserAgent.get -> string?
Microsoft.Maui.IWebView.UserAgent.set -> void
static Microsoft.Maui.Handlers.WebViewHandler.MapUserAgent(Microsoft.Maui.Handlers.IWebViewHandler! handler, Microsoft.Maui.IWebView! webView) -> void
static Microsoft.Maui.Platform.WebViewExtensions.UpdateUserAgent(this Microsoft.Maui.Platform.MauiWebView! platformWebView, Microsoft.Maui.IWebView! webView) -> void
static Microsoft.Maui.Layouts.LayoutExtensions.ArrangeContentUnbounded(this Microsoft.Maui.IContentView! contentView, Microsoft.Maui.Graphics.Rect bounds) -> Microsoft.Maui.Graphics.Size
*REMOVED*Microsoft.Maui.WeakEventManager.HandleEvent(object! sender, object! args, string! eventName) -> void
-Microsoft.Maui.WeakEventManager.HandleEvent(object? sender, object? args, string! eventName) -> void
\ No newline at end of file
+Microsoft.Maui.WeakEventManager.HandleEvent(object? sender, object? args, string! eventName) -> void
+static Microsoft.Maui.SizeRequest.operator !=(Microsoft.Maui.SizeRequest left, Microsoft.Maui.SizeRequest right) -> bool
+static Microsoft.Maui.SizeRequest.operator ==(Microsoft.Maui.SizeRequest left, Microsoft.Maui.SizeRequest right) -> bool
\ No newline at end of file
diff --git a/src/Core/src/PublicAPI/net-windows/PublicAPI.Unshipped.txt b/src/Core/src/PublicAPI/net-windows/PublicAPI.Unshipped.txt
index f4022c8458a6..85e68fad99dc 100644
--- a/src/Core/src/PublicAPI/net-windows/PublicAPI.Unshipped.txt
+++ b/src/Core/src/PublicAPI/net-windows/PublicAPI.Unshipped.txt
@@ -1,4 +1,14 @@
#nullable enable
+Microsoft.Maui.Layouts.FlexBasis.Equals(Microsoft.Maui.Layouts.FlexBasis other) -> bool
+Microsoft.Maui.SizeRequest.Equals(Microsoft.Maui.SizeRequest other) -> bool
+override Microsoft.Maui.Layouts.FlexBasis.Equals(object? obj) -> bool
+override Microsoft.Maui.Layouts.FlexBasis.GetHashCode() -> int
+override Microsoft.Maui.SizeRequest.Equals(object? obj) -> bool
+override Microsoft.Maui.SizeRequest.GetHashCode() -> int
+static Microsoft.Maui.GridLength.operator !=(Microsoft.Maui.GridLength left, Microsoft.Maui.GridLength right) -> bool
+static Microsoft.Maui.GridLength.operator ==(Microsoft.Maui.GridLength left, Microsoft.Maui.GridLength right) -> bool
+static Microsoft.Maui.Layouts.FlexBasis.operator !=(Microsoft.Maui.Layouts.FlexBasis left, Microsoft.Maui.Layouts.FlexBasis right) -> bool
+static Microsoft.Maui.Layouts.FlexBasis.operator ==(Microsoft.Maui.Layouts.FlexBasis left, Microsoft.Maui.Layouts.FlexBasis right) -> bool
static Microsoft.Maui.Layouts.LayoutExtensions.ArrangeContentUnbounded(this Microsoft.Maui.IContentView! contentView, Microsoft.Maui.Graphics.Rect bounds) -> Microsoft.Maui.Graphics.Size
Microsoft.Maui.IWebView.UserAgent.get -> string?
Microsoft.Maui.IWebView.UserAgent.set -> void
@@ -6,3 +16,5 @@ static Microsoft.Maui.Handlers.WebViewHandler.MapUserAgent(Microsoft.Maui.Handle
static Microsoft.Maui.Platform.WebViewExtensions.UpdateUserAgent(this Microsoft.UI.Xaml.Controls.WebView2! platformWebView, Microsoft.Maui.IWebView! webView) -> void
*REMOVED*Microsoft.Maui.WeakEventManager.HandleEvent(object! sender, object! args, string! eventName) -> void
Microsoft.Maui.WeakEventManager.HandleEvent(object? sender, object? args, string! eventName) -> void
+static Microsoft.Maui.SizeRequest.operator !=(Microsoft.Maui.SizeRequest left, Microsoft.Maui.SizeRequest right) -> bool
+static Microsoft.Maui.SizeRequest.operator ==(Microsoft.Maui.SizeRequest left, Microsoft.Maui.SizeRequest right) -> bool
diff --git a/src/Core/src/PublicAPI/net/PublicAPI.Unshipped.txt b/src/Core/src/PublicAPI/net/PublicAPI.Unshipped.txt
index d99ebf720caf..755e083e6555 100644
--- a/src/Core/src/PublicAPI/net/PublicAPI.Unshipped.txt
+++ b/src/Core/src/PublicAPI/net/PublicAPI.Unshipped.txt
@@ -1,7 +1,19 @@
#nullable enable
+Microsoft.Maui.Layouts.FlexBasis.Equals(Microsoft.Maui.Layouts.FlexBasis other) -> bool
+Microsoft.Maui.SizeRequest.Equals(Microsoft.Maui.SizeRequest other) -> bool
+override Microsoft.Maui.Layouts.FlexBasis.Equals(object? obj) -> bool
+override Microsoft.Maui.Layouts.FlexBasis.GetHashCode() -> int
+override Microsoft.Maui.SizeRequest.Equals(object? obj) -> bool
+override Microsoft.Maui.SizeRequest.GetHashCode() -> int
+static Microsoft.Maui.GridLength.operator !=(Microsoft.Maui.GridLength left, Microsoft.Maui.GridLength right) -> bool
+static Microsoft.Maui.GridLength.operator ==(Microsoft.Maui.GridLength left, Microsoft.Maui.GridLength right) -> bool
+static Microsoft.Maui.Layouts.FlexBasis.operator !=(Microsoft.Maui.Layouts.FlexBasis left, Microsoft.Maui.Layouts.FlexBasis right) -> bool
+static Microsoft.Maui.Layouts.FlexBasis.operator ==(Microsoft.Maui.Layouts.FlexBasis left, Microsoft.Maui.Layouts.FlexBasis right) -> bool
static Microsoft.Maui.Layouts.LayoutExtensions.ArrangeContentUnbounded(this Microsoft.Maui.IContentView! contentView, Microsoft.Maui.Graphics.Rect bounds) -> Microsoft.Maui.Graphics.Size
Microsoft.Maui.IWebView.UserAgent.get -> string?
Microsoft.Maui.IWebView.UserAgent.set -> void
static Microsoft.Maui.Handlers.WebViewHandler.MapUserAgent(Microsoft.Maui.Handlers.IWebViewHandler! handler, Microsoft.Maui.IWebView! webView) -> void
*REMOVED*Microsoft.Maui.WeakEventManager.HandleEvent(object! sender, object! args, string! eventName) -> void
-Microsoft.Maui.WeakEventManager.HandleEvent(object? sender, object? args, string! eventName) -> void
\ No newline at end of file
+Microsoft.Maui.WeakEventManager.HandleEvent(object? sender, object? args, string! eventName) -> void
+static Microsoft.Maui.SizeRequest.operator !=(Microsoft.Maui.SizeRequest left, Microsoft.Maui.SizeRequest right) -> bool
+static Microsoft.Maui.SizeRequest.operator ==(Microsoft.Maui.SizeRequest left, Microsoft.Maui.SizeRequest right) -> bool
\ No newline at end of file
diff --git a/src/Core/src/PublicAPI/netstandard/PublicAPI.Unshipped.txt b/src/Core/src/PublicAPI/netstandard/PublicAPI.Unshipped.txt
index bf8ac7da1adc..bcf50f1419c7 100644
--- a/src/Core/src/PublicAPI/netstandard/PublicAPI.Unshipped.txt
+++ b/src/Core/src/PublicAPI/netstandard/PublicAPI.Unshipped.txt
@@ -1,7 +1,19 @@
#nullable enable
+Microsoft.Maui.Layouts.FlexBasis.Equals(Microsoft.Maui.Layouts.FlexBasis other) -> bool
+Microsoft.Maui.SizeRequest.Equals(Microsoft.Maui.SizeRequest other) -> bool
+override Microsoft.Maui.Layouts.FlexBasis.Equals(object? obj) -> bool
+override Microsoft.Maui.Layouts.FlexBasis.GetHashCode() -> int
+override Microsoft.Maui.SizeRequest.Equals(object? obj) -> bool
+override Microsoft.Maui.SizeRequest.GetHashCode() -> int
+static Microsoft.Maui.GridLength.operator !=(Microsoft.Maui.GridLength left, Microsoft.Maui.GridLength right) -> bool
+static Microsoft.Maui.GridLength.operator ==(Microsoft.Maui.GridLength left, Microsoft.Maui.GridLength right) -> bool
+static Microsoft.Maui.Layouts.FlexBasis.operator !=(Microsoft.Maui.Layouts.FlexBasis left, Microsoft.Maui.Layouts.FlexBasis right) -> bool
+static Microsoft.Maui.Layouts.FlexBasis.operator ==(Microsoft.Maui.Layouts.FlexBasis left, Microsoft.Maui.Layouts.FlexBasis right) -> bool
static Microsoft.Maui.Layouts.LayoutExtensions.ArrangeContentUnbounded(this Microsoft.Maui.IContentView! contentView, Microsoft.Maui.Graphics.Rect bounds) -> Microsoft.Maui.Graphics.Size
Microsoft.Maui.IWebView.UserAgent.get -> string?
Microsoft.Maui.IWebView.UserAgent.set -> void
static Microsoft.Maui.Handlers.WebViewHandler.MapUserAgent(Microsoft.Maui.Handlers.IWebViewHandler! handler, Microsoft.Maui.IWebView! webView) -> void
*REMOVED*Microsoft.Maui.WeakEventManager.HandleEvent(object! sender, object! args, string! eventName) -> void
Microsoft.Maui.WeakEventManager.HandleEvent(object? sender, object? args, string! eventName) -> void
+static Microsoft.Maui.SizeRequest.operator !=(Microsoft.Maui.SizeRequest left, Microsoft.Maui.SizeRequest right) -> bool
+static Microsoft.Maui.SizeRequest.operator ==(Microsoft.Maui.SizeRequest left, Microsoft.Maui.SizeRequest right) -> bool
diff --git a/src/Core/src/PublicAPI/netstandard2.0/PublicAPI.Unshipped.txt b/src/Core/src/PublicAPI/netstandard2.0/PublicAPI.Unshipped.txt
index bf8ac7da1adc..bcf50f1419c7 100644
--- a/src/Core/src/PublicAPI/netstandard2.0/PublicAPI.Unshipped.txt
+++ b/src/Core/src/PublicAPI/netstandard2.0/PublicAPI.Unshipped.txt
@@ -1,7 +1,19 @@
#nullable enable
+Microsoft.Maui.Layouts.FlexBasis.Equals(Microsoft.Maui.Layouts.FlexBasis other) -> bool
+Microsoft.Maui.SizeRequest.Equals(Microsoft.Maui.SizeRequest other) -> bool
+override Microsoft.Maui.Layouts.FlexBasis.Equals(object? obj) -> bool
+override Microsoft.Maui.Layouts.FlexBasis.GetHashCode() -> int
+override Microsoft.Maui.SizeRequest.Equals(object? obj) -> bool
+override Microsoft.Maui.SizeRequest.GetHashCode() -> int
+static Microsoft.Maui.GridLength.operator !=(Microsoft.Maui.GridLength left, Microsoft.Maui.GridLength right) -> bool
+static Microsoft.Maui.GridLength.operator ==(Microsoft.Maui.GridLength left, Microsoft.Maui.GridLength right) -> bool
+static Microsoft.Maui.Layouts.FlexBasis.operator !=(Microsoft.Maui.Layouts.FlexBasis left, Microsoft.Maui.Layouts.FlexBasis right) -> bool
+static Microsoft.Maui.Layouts.FlexBasis.operator ==(Microsoft.Maui.Layouts.FlexBasis left, Microsoft.Maui.Layouts.FlexBasis right) -> bool
static Microsoft.Maui.Layouts.LayoutExtensions.ArrangeContentUnbounded(this Microsoft.Maui.IContentView! contentView, Microsoft.Maui.Graphics.Rect bounds) -> Microsoft.Maui.Graphics.Size
Microsoft.Maui.IWebView.UserAgent.get -> string?
Microsoft.Maui.IWebView.UserAgent.set -> void
static Microsoft.Maui.Handlers.WebViewHandler.MapUserAgent(Microsoft.Maui.Handlers.IWebViewHandler! handler, Microsoft.Maui.IWebView! webView) -> void
*REMOVED*Microsoft.Maui.WeakEventManager.HandleEvent(object! sender, object! args, string! eventName) -> void
Microsoft.Maui.WeakEventManager.HandleEvent(object? sender, object? args, string! eventName) -> void
+static Microsoft.Maui.SizeRequest.operator !=(Microsoft.Maui.SizeRequest left, Microsoft.Maui.SizeRequest right) -> bool
+static Microsoft.Maui.SizeRequest.operator ==(Microsoft.Maui.SizeRequest left, Microsoft.Maui.SizeRequest right) -> bool
diff --git a/src/Core/src/WeakEventManager.cs b/src/Core/src/WeakEventManager.cs
index 36eca89f2e2c..4e51c3801ec1 100644
--- a/src/Core/src/WeakEventManager.cs
+++ b/src/Core/src/WeakEventManager.cs
@@ -137,7 +137,7 @@ void RemoveEventHandler(string eventName, object? handlerTarget, MemberInfo meth
}
}
- struct Subscription
+ readonly struct Subscription : IEquatable
{
///
public Subscription(WeakReference? subscriber, MethodInfo handler)
@@ -148,6 +148,12 @@ public Subscription(WeakReference? subscriber, MethodInfo handler)
public readonly WeakReference? Subscriber;
public readonly MethodInfo Handler;
+
+ public bool Equals(Subscription other) => Subscriber == other.Subscriber && Handler == other.Handler;
+
+ public override bool Equals(object? obj) => obj is Subscription other && Equals(other);
+
+ public override int GetHashCode() => Subscriber?.GetHashCode() ?? 0 ^ Handler.GetHashCode();
}
}
}
diff --git a/src/Graphics/src/Graphics/Font.cs b/src/Graphics/src/Graphics/Font.cs
index 27e375c7c92a..9a31558bf6a0 100644
--- a/src/Graphics/src/Graphics/Font.cs
+++ b/src/Graphics/src/Graphics/Font.cs
@@ -55,5 +55,9 @@ public override int GetHashCode()
public bool IsDefault
=> string.IsNullOrEmpty(Name);
+
+ public static bool operator ==(Font left, Font right) => left.Equals(right);
+
+ public static bool operator !=(Font left, Font right) => !(left == right);
}
}
diff --git a/src/Graphics/src/Graphics/FontSource.cs b/src/Graphics/src/Graphics/FontSource.cs
index a7127e2d044a..912d25484394 100644
--- a/src/Graphics/src/Graphics/FontSource.cs
+++ b/src/Graphics/src/Graphics/FontSource.cs
@@ -23,5 +23,11 @@ public bool Equals(FontSource other)
public override int GetHashCode()
=> Name.GetHashCode() ^ Weight.GetHashCode() ^ FontStyleType.GetHashCode();
+
+ public override bool Equals(object? obj) => obj is FontSource other && Equals(other);
+
+ public static bool operator ==(FontSource left, FontSource right) => left.Equals(right);
+
+ public static bool operator !=(FontSource left, FontSource right) => !(left == right);
}
}
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 d7ee0ca3d13c..a36f2dd26086 100644
--- a/src/Graphics/src/Graphics/PublicAPI/net-android/PublicAPI.Unshipped.txt
+++ b/src/Graphics/src/Graphics/PublicAPI/net-android/PublicAPI.Unshipped.txt
@@ -763,6 +763,7 @@ Microsoft.Maui.Graphics.WindingMode.NonZero = 0 -> Microsoft.Maui.Graphics.Windi
Microsoft.Maui.Graphics.XmlnsPrefixAttribute
override Microsoft.Maui.Graphics.Color.GetHashCode() -> int
override Microsoft.Maui.Graphics.Font.GetHashCode() -> int
+override Microsoft.Maui.Graphics.FontSource.Equals(object? obj) -> bool
override Microsoft.Maui.Graphics.FontSource.GetHashCode() -> int
override Microsoft.Maui.Graphics.GradientPaint.IsTransparent.get -> bool
override Microsoft.Maui.Graphics.ImagePaint.IsTransparent.get -> bool
@@ -819,6 +820,10 @@ readonly Microsoft.Maui.Graphics.FontSource.Weight -> int
static Microsoft.Maui.Graphics.CanvasState.GetLengthScale(System.Numerics.Matrix3x2 matrix) -> float
static Microsoft.Maui.Graphics.Font.Default.get -> Microsoft.Maui.Graphics.Font
static Microsoft.Maui.Graphics.Font.DefaultBold.get -> Microsoft.Maui.Graphics.Font
+static Microsoft.Maui.Graphics.Font.operator !=(Microsoft.Maui.Graphics.Font left, Microsoft.Maui.Graphics.Font right) -> bool
+static Microsoft.Maui.Graphics.Font.operator ==(Microsoft.Maui.Graphics.Font left, Microsoft.Maui.Graphics.Font right) -> bool
+static Microsoft.Maui.Graphics.FontSource.operator !=(Microsoft.Maui.Graphics.FontSource left, Microsoft.Maui.Graphics.FontSource right) -> bool
+static Microsoft.Maui.Graphics.FontSource.operator ==(Microsoft.Maui.Graphics.FontSource left, Microsoft.Maui.Graphics.FontSource right) -> bool
static Microsoft.Maui.Graphics.GeometryUtil.DegreesToRadians(double angle) -> double
static Microsoft.Maui.Graphics.GeometryUtil.DegreesToRadians(float angle) -> float
static Microsoft.Maui.Graphics.GeometryUtil.EllipseAngleToPoint(float x, float y, float width, float height, float angleInDegrees) -> Microsoft.Maui.Graphics.PointF
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 0463e087ec0c..b0da109bd6bf 100644
--- a/src/Graphics/src/Graphics/PublicAPI/net-ios/PublicAPI.Unshipped.txt
+++ b/src/Graphics/src/Graphics/PublicAPI/net-ios/PublicAPI.Unshipped.txt
@@ -767,6 +767,7 @@ Microsoft.Maui.Graphics.WindingMode.NonZero = 0 -> Microsoft.Maui.Graphics.Windi
Microsoft.Maui.Graphics.XmlnsPrefixAttribute
override Microsoft.Maui.Graphics.Color.GetHashCode() -> int
override Microsoft.Maui.Graphics.Font.GetHashCode() -> int
+override Microsoft.Maui.Graphics.FontSource.Equals(object? obj) -> bool
override Microsoft.Maui.Graphics.FontSource.GetHashCode() -> int
override Microsoft.Maui.Graphics.GradientPaint.IsTransparent.get -> bool
override Microsoft.Maui.Graphics.ImagePaint.IsTransparent.get -> bool
@@ -823,6 +824,10 @@ readonly Microsoft.Maui.Graphics.FontSource.Weight -> int
static Microsoft.Maui.Graphics.CanvasState.GetLengthScale(System.Numerics.Matrix3x2 matrix) -> float
static Microsoft.Maui.Graphics.Font.Default.get -> Microsoft.Maui.Graphics.Font
static Microsoft.Maui.Graphics.Font.DefaultBold.get -> Microsoft.Maui.Graphics.Font
+static Microsoft.Maui.Graphics.Font.operator !=(Microsoft.Maui.Graphics.Font left, Microsoft.Maui.Graphics.Font right) -> bool
+static Microsoft.Maui.Graphics.Font.operator ==(Microsoft.Maui.Graphics.Font left, Microsoft.Maui.Graphics.Font right) -> bool
+static Microsoft.Maui.Graphics.FontSource.operator !=(Microsoft.Maui.Graphics.FontSource left, Microsoft.Maui.Graphics.FontSource right) -> bool
+static Microsoft.Maui.Graphics.FontSource.operator ==(Microsoft.Maui.Graphics.FontSource left, Microsoft.Maui.Graphics.FontSource right) -> bool
static Microsoft.Maui.Graphics.GeometryUtil.DegreesToRadians(double angle) -> double
static Microsoft.Maui.Graphics.GeometryUtil.DegreesToRadians(float angle) -> float
static Microsoft.Maui.Graphics.GeometryUtil.EllipseAngleToPoint(float x, float y, float width, float height, float angleInDegrees) -> Microsoft.Maui.Graphics.PointF
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 0463e087ec0c..b0da109bd6bf 100644
--- a/src/Graphics/src/Graphics/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt
+++ b/src/Graphics/src/Graphics/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt
@@ -767,6 +767,7 @@ Microsoft.Maui.Graphics.WindingMode.NonZero = 0 -> Microsoft.Maui.Graphics.Windi
Microsoft.Maui.Graphics.XmlnsPrefixAttribute
override Microsoft.Maui.Graphics.Color.GetHashCode() -> int
override Microsoft.Maui.Graphics.Font.GetHashCode() -> int
+override Microsoft.Maui.Graphics.FontSource.Equals(object? obj) -> bool
override Microsoft.Maui.Graphics.FontSource.GetHashCode() -> int
override Microsoft.Maui.Graphics.GradientPaint.IsTransparent.get -> bool
override Microsoft.Maui.Graphics.ImagePaint.IsTransparent.get -> bool
@@ -823,6 +824,10 @@ readonly Microsoft.Maui.Graphics.FontSource.Weight -> int
static Microsoft.Maui.Graphics.CanvasState.GetLengthScale(System.Numerics.Matrix3x2 matrix) -> float
static Microsoft.Maui.Graphics.Font.Default.get -> Microsoft.Maui.Graphics.Font
static Microsoft.Maui.Graphics.Font.DefaultBold.get -> Microsoft.Maui.Graphics.Font
+static Microsoft.Maui.Graphics.Font.operator !=(Microsoft.Maui.Graphics.Font left, Microsoft.Maui.Graphics.Font right) -> bool
+static Microsoft.Maui.Graphics.Font.operator ==(Microsoft.Maui.Graphics.Font left, Microsoft.Maui.Graphics.Font right) -> bool
+static Microsoft.Maui.Graphics.FontSource.operator !=(Microsoft.Maui.Graphics.FontSource left, Microsoft.Maui.Graphics.FontSource right) -> bool
+static Microsoft.Maui.Graphics.FontSource.operator ==(Microsoft.Maui.Graphics.FontSource left, Microsoft.Maui.Graphics.FontSource right) -> bool
static Microsoft.Maui.Graphics.GeometryUtil.DegreesToRadians(double angle) -> double
static Microsoft.Maui.Graphics.GeometryUtil.DegreesToRadians(float angle) -> float
static Microsoft.Maui.Graphics.GeometryUtil.EllipseAngleToPoint(float x, float y, float width, float height, float angleInDegrees) -> Microsoft.Maui.Graphics.PointF
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 eec3fedad594..0c6e1b80c93a 100644
--- a/src/Graphics/src/Graphics/PublicAPI/net-macos/PublicAPI.Unshipped.txt
+++ b/src/Graphics/src/Graphics/PublicAPI/net-macos/PublicAPI.Unshipped.txt
@@ -767,6 +767,7 @@ Microsoft.Maui.Graphics.WindingMode.NonZero = 0 -> Microsoft.Maui.Graphics.Windi
Microsoft.Maui.Graphics.XmlnsPrefixAttribute
override Microsoft.Maui.Graphics.Color.GetHashCode() -> int
override Microsoft.Maui.Graphics.Font.GetHashCode() -> int
+override Microsoft.Maui.Graphics.FontSource.Equals(object? obj) -> bool
override Microsoft.Maui.Graphics.FontSource.GetHashCode() -> int
override Microsoft.Maui.Graphics.GradientPaint.IsTransparent.get -> bool
override Microsoft.Maui.Graphics.ImagePaint.IsTransparent.get -> bool
@@ -823,6 +824,10 @@ readonly Microsoft.Maui.Graphics.FontSource.Weight -> int
static Microsoft.Maui.Graphics.CanvasState.GetLengthScale(System.Numerics.Matrix3x2 matrix) -> float
static Microsoft.Maui.Graphics.Font.Default.get -> Microsoft.Maui.Graphics.Font
static Microsoft.Maui.Graphics.Font.DefaultBold.get -> Microsoft.Maui.Graphics.Font
+static Microsoft.Maui.Graphics.Font.operator !=(Microsoft.Maui.Graphics.Font left, Microsoft.Maui.Graphics.Font right) -> bool
+static Microsoft.Maui.Graphics.Font.operator ==(Microsoft.Maui.Graphics.Font left, Microsoft.Maui.Graphics.Font right) -> bool
+static Microsoft.Maui.Graphics.FontSource.operator !=(Microsoft.Maui.Graphics.FontSource left, Microsoft.Maui.Graphics.FontSource right) -> bool
+static Microsoft.Maui.Graphics.FontSource.operator ==(Microsoft.Maui.Graphics.FontSource left, Microsoft.Maui.Graphics.FontSource right) -> bool
static Microsoft.Maui.Graphics.GeometryUtil.DegreesToRadians(double angle) -> double
static Microsoft.Maui.Graphics.GeometryUtil.DegreesToRadians(float angle) -> float
static Microsoft.Maui.Graphics.GeometryUtil.EllipseAngleToPoint(float x, float y, float width, float height, float angleInDegrees) -> Microsoft.Maui.Graphics.PointF
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 915b0298a283..3f8260e664ad 100644
--- a/src/Graphics/src/Graphics/PublicAPI/net-tizen/PublicAPI.Unshipped.txt
+++ b/src/Graphics/src/Graphics/PublicAPI/net-tizen/PublicAPI.Unshipped.txt
@@ -725,6 +725,7 @@ Microsoft.Maui.Graphics.WindingMode.NonZero = 0 -> Microsoft.Maui.Graphics.Windi
Microsoft.Maui.Graphics.XmlnsPrefixAttribute
override Microsoft.Maui.Graphics.Color.GetHashCode() -> int
override Microsoft.Maui.Graphics.Font.GetHashCode() -> int
+override Microsoft.Maui.Graphics.FontSource.Equals(object? obj) -> bool
override Microsoft.Maui.Graphics.FontSource.GetHashCode() -> int
override Microsoft.Maui.Graphics.GradientPaint.IsTransparent.get -> bool
override Microsoft.Maui.Graphics.ImagePaint.IsTransparent.get -> bool
@@ -750,6 +751,10 @@ readonly Microsoft.Maui.Graphics.FontSource.Weight -> int
static Microsoft.Maui.Graphics.CanvasState.GetLengthScale(System.Numerics.Matrix3x2 matrix) -> float
static Microsoft.Maui.Graphics.Font.Default.get -> Microsoft.Maui.Graphics.Font
static Microsoft.Maui.Graphics.Font.DefaultBold.get -> Microsoft.Maui.Graphics.Font
+static Microsoft.Maui.Graphics.Font.operator !=(Microsoft.Maui.Graphics.Font left, Microsoft.Maui.Graphics.Font right) -> bool
+static Microsoft.Maui.Graphics.Font.operator ==(Microsoft.Maui.Graphics.Font left, Microsoft.Maui.Graphics.Font right) -> bool
+static Microsoft.Maui.Graphics.FontSource.operator !=(Microsoft.Maui.Graphics.FontSource left, Microsoft.Maui.Graphics.FontSource right) -> bool
+static Microsoft.Maui.Graphics.FontSource.operator ==(Microsoft.Maui.Graphics.FontSource left, Microsoft.Maui.Graphics.FontSource right) -> bool
static Microsoft.Maui.Graphics.GeometryUtil.DegreesToRadians(double angle) -> double
static Microsoft.Maui.Graphics.GeometryUtil.DegreesToRadians(float angle) -> float
static Microsoft.Maui.Graphics.GeometryUtil.EllipseAngleToPoint(float x, float y, float width, float height, float angleInDegrees) -> Microsoft.Maui.Graphics.PointF
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 9136ed03ed57..92b69f39ee7f 100644
--- a/src/Graphics/src/Graphics/PublicAPI/net-windows/PublicAPI.Unshipped.txt
+++ b/src/Graphics/src/Graphics/PublicAPI/net-windows/PublicAPI.Unshipped.txt
@@ -721,6 +721,7 @@ Microsoft.Maui.Graphics.WindingMode.NonZero = 0 -> Microsoft.Maui.Graphics.Windi
Microsoft.Maui.Graphics.XmlnsPrefixAttribute
override Microsoft.Maui.Graphics.Color.GetHashCode() -> int
override Microsoft.Maui.Graphics.Font.GetHashCode() -> int
+override Microsoft.Maui.Graphics.FontSource.Equals(object? obj) -> bool
override Microsoft.Maui.Graphics.FontSource.GetHashCode() -> int
override Microsoft.Maui.Graphics.GradientPaint.IsTransparent.get -> bool
override Microsoft.Maui.Graphics.ImagePaint.IsTransparent.get -> bool
@@ -746,6 +747,10 @@ readonly Microsoft.Maui.Graphics.FontSource.Weight -> int
static Microsoft.Maui.Graphics.CanvasState.GetLengthScale(System.Numerics.Matrix3x2 matrix) -> float
static Microsoft.Maui.Graphics.Font.Default.get -> Microsoft.Maui.Graphics.Font
static Microsoft.Maui.Graphics.Font.DefaultBold.get -> Microsoft.Maui.Graphics.Font
+static Microsoft.Maui.Graphics.Font.operator !=(Microsoft.Maui.Graphics.Font left, Microsoft.Maui.Graphics.Font right) -> bool
+static Microsoft.Maui.Graphics.Font.operator ==(Microsoft.Maui.Graphics.Font left, Microsoft.Maui.Graphics.Font right) -> bool
+static Microsoft.Maui.Graphics.FontSource.operator !=(Microsoft.Maui.Graphics.FontSource left, Microsoft.Maui.Graphics.FontSource right) -> bool
+static Microsoft.Maui.Graphics.FontSource.operator ==(Microsoft.Maui.Graphics.FontSource left, Microsoft.Maui.Graphics.FontSource right) -> bool
static Microsoft.Maui.Graphics.GeometryUtil.DegreesToRadians(double angle) -> double
static Microsoft.Maui.Graphics.GeometryUtil.DegreesToRadians(float angle) -> float
static Microsoft.Maui.Graphics.GeometryUtil.EllipseAngleToPoint(float x, float y, float width, float height, float angleInDegrees) -> Microsoft.Maui.Graphics.PointF
diff --git a/src/Graphics/src/Graphics/PublicAPI/net/PublicAPI.Unshipped.txt b/src/Graphics/src/Graphics/PublicAPI/net/PublicAPI.Unshipped.txt
index 915b0298a283..3f8260e664ad 100644
--- a/src/Graphics/src/Graphics/PublicAPI/net/PublicAPI.Unshipped.txt
+++ b/src/Graphics/src/Graphics/PublicAPI/net/PublicAPI.Unshipped.txt
@@ -725,6 +725,7 @@ Microsoft.Maui.Graphics.WindingMode.NonZero = 0 -> Microsoft.Maui.Graphics.Windi
Microsoft.Maui.Graphics.XmlnsPrefixAttribute
override Microsoft.Maui.Graphics.Color.GetHashCode() -> int
override Microsoft.Maui.Graphics.Font.GetHashCode() -> int
+override Microsoft.Maui.Graphics.FontSource.Equals(object? obj) -> bool
override Microsoft.Maui.Graphics.FontSource.GetHashCode() -> int
override Microsoft.Maui.Graphics.GradientPaint.IsTransparent.get -> bool
override Microsoft.Maui.Graphics.ImagePaint.IsTransparent.get -> bool
@@ -750,6 +751,10 @@ readonly Microsoft.Maui.Graphics.FontSource.Weight -> int
static Microsoft.Maui.Graphics.CanvasState.GetLengthScale(System.Numerics.Matrix3x2 matrix) -> float
static Microsoft.Maui.Graphics.Font.Default.get -> Microsoft.Maui.Graphics.Font
static Microsoft.Maui.Graphics.Font.DefaultBold.get -> Microsoft.Maui.Graphics.Font
+static Microsoft.Maui.Graphics.Font.operator !=(Microsoft.Maui.Graphics.Font left, Microsoft.Maui.Graphics.Font right) -> bool
+static Microsoft.Maui.Graphics.Font.operator ==(Microsoft.Maui.Graphics.Font left, Microsoft.Maui.Graphics.Font right) -> bool
+static Microsoft.Maui.Graphics.FontSource.operator !=(Microsoft.Maui.Graphics.FontSource left, Microsoft.Maui.Graphics.FontSource right) -> bool
+static Microsoft.Maui.Graphics.FontSource.operator ==(Microsoft.Maui.Graphics.FontSource left, Microsoft.Maui.Graphics.FontSource right) -> bool
static Microsoft.Maui.Graphics.GeometryUtil.DegreesToRadians(double angle) -> double
static Microsoft.Maui.Graphics.GeometryUtil.DegreesToRadians(float angle) -> float
static Microsoft.Maui.Graphics.GeometryUtil.EllipseAngleToPoint(float x, float y, float width, float height, float angleInDegrees) -> Microsoft.Maui.Graphics.PointF
diff --git a/src/Graphics/src/Graphics/PublicAPI/netstandard/PublicAPI.Unshipped.txt b/src/Graphics/src/Graphics/PublicAPI/netstandard/PublicAPI.Unshipped.txt
index 915b0298a283..3f8260e664ad 100644
--- a/src/Graphics/src/Graphics/PublicAPI/netstandard/PublicAPI.Unshipped.txt
+++ b/src/Graphics/src/Graphics/PublicAPI/netstandard/PublicAPI.Unshipped.txt
@@ -725,6 +725,7 @@ Microsoft.Maui.Graphics.WindingMode.NonZero = 0 -> Microsoft.Maui.Graphics.Windi
Microsoft.Maui.Graphics.XmlnsPrefixAttribute
override Microsoft.Maui.Graphics.Color.GetHashCode() -> int
override Microsoft.Maui.Graphics.Font.GetHashCode() -> int
+override Microsoft.Maui.Graphics.FontSource.Equals(object? obj) -> bool
override Microsoft.Maui.Graphics.FontSource.GetHashCode() -> int
override Microsoft.Maui.Graphics.GradientPaint.IsTransparent.get -> bool
override Microsoft.Maui.Graphics.ImagePaint.IsTransparent.get -> bool
@@ -750,6 +751,10 @@ readonly Microsoft.Maui.Graphics.FontSource.Weight -> int
static Microsoft.Maui.Graphics.CanvasState.GetLengthScale(System.Numerics.Matrix3x2 matrix) -> float
static Microsoft.Maui.Graphics.Font.Default.get -> Microsoft.Maui.Graphics.Font
static Microsoft.Maui.Graphics.Font.DefaultBold.get -> Microsoft.Maui.Graphics.Font
+static Microsoft.Maui.Graphics.Font.operator !=(Microsoft.Maui.Graphics.Font left, Microsoft.Maui.Graphics.Font right) -> bool
+static Microsoft.Maui.Graphics.Font.operator ==(Microsoft.Maui.Graphics.Font left, Microsoft.Maui.Graphics.Font right) -> bool
+static Microsoft.Maui.Graphics.FontSource.operator !=(Microsoft.Maui.Graphics.FontSource left, Microsoft.Maui.Graphics.FontSource right) -> bool
+static Microsoft.Maui.Graphics.FontSource.operator ==(Microsoft.Maui.Graphics.FontSource left, Microsoft.Maui.Graphics.FontSource right) -> bool
static Microsoft.Maui.Graphics.GeometryUtil.DegreesToRadians(double angle) -> double
static Microsoft.Maui.Graphics.GeometryUtil.DegreesToRadians(float angle) -> float
static Microsoft.Maui.Graphics.GeometryUtil.EllipseAngleToPoint(float x, float y, float width, float height, float angleInDegrees) -> Microsoft.Maui.Graphics.PointF