From e452c7aad2e30a3b8d022ff70aa22cf80e3bd2e6 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Thu, 9 Feb 2023 10:48:08 -0600 Subject: [PATCH] [core] `WeakEventManager+Subscription` needs `IEquatable` Context: https://github.com/Vroomer/MAUI-master-detail-memory-leak Context: https://github.com/dotnet/maui/issues/12039 Using the Visual Studio's `.NET Object Allocation Tracking` profiler on the sample above I noticed after app launch: Microsoft.Maui.WeakEventManager+Subscription Allocations: 686,114 Bytes: 21,955,648 After spitting out my coffee, I drilled in a bit to see where these are being created: System.Collections.Generic.ObjectEqualityComparer.IndexOf It turns out this `struct` doesn't implement `IEquatable`: https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1815 To solve this: * `Subscription` is private, so we can make it a `readonly struct`. * `dotnet_diagnostic.CA1815.severity = error` across the entire repo. * Implement `IEquatable` for all `struct` types. After these changes, I can't find `Microsoft.Maui.WeakEventManager+Subscription` in the memory report at all. Which assuming means, I saved ~21 MB of allocations in this app. Note that this doesn't actually solve #12039, as I'm still investigating the leak. Maybe this partially closes the floodgate? * Fix `struct`s in Controls.Core Note that I did not update these, as they are some "internal" parts from Xamarin.Forms: * `Profile` * `Datum` We might actually just consider removing these in the future. * Suppress warnings in Compatibility I assume these structs aren't nearly as important, so ignoring a few. They appear to be called once at startup in most cases. * Disable `CA1815` in tests. --- .editorconfig | 1 + .../src/Issues.Shared/Issue8958.xaml.cs | 2 ++ .../Issues.Shared/TransparentOverlayTests.cs | 2 ++ .../Android/AppCompat/FormsAppCompatActivity.cs | 2 ++ src/Compatibility/Core/src/Android/Forms.cs | 2 ++ src/Compatibility/Core/src/Tizen/Forms.cs | 2 ++ src/Compatibility/Core/src/Windows/Forms.cs | 2 ++ src/Compatibility/Core/src/iOS/Forms.cs | 2 ++ src/Controls/src/Core/LayoutOptions.cs | 12 +++++++++++- src/Controls/src/Core/Profiler.cs | 2 ++ .../net-android/PublicAPI.Unshipped.txt | 15 +++++++++++++++ .../PublicAPI/net-ios/PublicAPI.Unshipped.txt | 15 +++++++++++++++ .../net-maccatalyst/PublicAPI.Unshipped.txt | 15 +++++++++++++++ .../PublicAPI/net-tizen/PublicAPI.Unshipped.txt | 15 +++++++++++++++ .../net-windows/PublicAPI.Unshipped.txt | 15 +++++++++++++++ .../Core/PublicAPI/net/PublicAPI.Unshipped.txt | 15 +++++++++++++++ .../netstandard/PublicAPI.Unshipped.txt | 15 +++++++++++++++ src/Controls/src/Core/Region.cs | 14 +++++++++++++- src/Controls/src/Core/Shapes/Matrix.cs | 16 +++++++++++++++- .../Core.UnitTests/AcceleratorUnitTests.cs | 2 ++ src/Core/src/Fonts/FontSize.Android.cs | 15 +++++++++++++-- src/Core/src/Layouts/FlexEnums.cs | 12 +++++++++++- src/Core/src/Primitives/GridLength.cs | 4 ++++ src/Core/src/Primitives/SizeRequest.cs | 13 ++++++++++++- .../net-android/PublicAPI.Unshipped.txt | 17 +++++++++++++++++ .../PublicAPI/net-ios/PublicAPI.Unshipped.txt | 12 ++++++++++++ .../net-maccatalyst/PublicAPI.Unshipped.txt | 12 ++++++++++++ .../PublicAPI/net-tizen/PublicAPI.Unshipped.txt | 14 +++++++++++++- .../net-windows/PublicAPI.Unshipped.txt | 12 ++++++++++++ .../src/PublicAPI/net/PublicAPI.Unshipped.txt | 14 +++++++++++++- .../netstandard/PublicAPI.Unshipped.txt | 12 ++++++++++++ .../netstandard2.0/PublicAPI.Unshipped.txt | 12 ++++++++++++ src/Core/src/WeakEventManager.cs | 8 +++++++- src/Graphics/src/Graphics/Font.cs | 4 ++++ src/Graphics/src/Graphics/FontSource.cs | 6 ++++++ .../net-android/PublicAPI.Unshipped.txt | 5 +++++ .../PublicAPI/net-ios/PublicAPI.Unshipped.txt | 5 +++++ .../net-maccatalyst/PublicAPI.Unshipped.txt | 5 +++++ .../PublicAPI/net-macos/PublicAPI.Unshipped.txt | 5 +++++ .../PublicAPI/net-tizen/PublicAPI.Unshipped.txt | 5 +++++ .../net-windows/PublicAPI.Unshipped.txt | 5 +++++ .../PublicAPI/net/PublicAPI.Unshipped.txt | 5 +++++ .../netstandard/PublicAPI.Unshipped.txt | 5 +++++ 43 files changed, 363 insertions(+), 10 deletions(-) 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