From c99e1743ba712ebfc34ff8479e9df0de61878568 Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Tue, 7 Feb 2023 17:35:14 +0100 Subject: [PATCH] Nullability fixes for Avalonia.Diagnostics --- .../Primitives/OverlayPopupHost.cs | 34 ++++++++++++------- src/Avalonia.Controls/TopLevel.cs | 2 +- .../Diagnostics/KeyGestureExtesions.cs | 3 +- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/Avalonia.Controls/Primitives/OverlayPopupHost.cs b/src/Avalonia.Controls/Primitives/OverlayPopupHost.cs index d466edeb33..e16633483b 100644 --- a/src/Avalonia.Controls/Primitives/OverlayPopupHost.cs +++ b/src/Avalonia.Controls/Primitives/OverlayPopupHost.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using Avalonia.Reactive; using Avalonia.Controls.Primitives.PopupPositioning; using Avalonia.Interactivity; using Avalonia.Media; @@ -18,8 +17,8 @@ namespace Avalonia.Controls.Primitives PopupRoot.TransformProperty.AddOwner(); private readonly OverlayLayer _overlayLayer; - private PopupPositionerParameters _positionerParameters = new PopupPositionerParameters(); - private ManagedPopupPositioner _positioner; + private readonly ManagedPopupPositioner _positioner; + private PopupPositionerParameters _positionerParameters; private Point _lastRequestedPosition; private bool _shown; @@ -29,13 +28,16 @@ namespace Avalonia.Controls.Primitives _positioner = new ManagedPopupPositioner(this); } + /// public void SetChild(Control? control) { Content = control; } + /// public Visual? HostedVisualTreeRoot => null; + /// public Transform? Transform { get => GetValue(TransformProperty); @@ -48,23 +50,27 @@ namespace Avalonia.Controls.Primitives set { /* Not currently supported in overlay popups */ } } + /// protected internal override Interactive? InteractiveParent => (Interactive?)VisualParent; + /// public void Dispose() => Hide(); - + /// public void Show() { _overlayLayer.Children.Add(this); _shown = true; } + /// public void Hide() { _overlayLayer.Children.Remove(this); _shown = false; } + /// public void ConfigurePosition(Visual target, PlacementMode placement, Point offset, PopupAnchor anchor = PopupAnchor.None, PopupGravity gravity = PopupGravity.None, PopupPositionerConstraintAdjustment constraintAdjustment = PopupPositionerConstraintAdjustment.All, @@ -75,6 +81,7 @@ namespace Avalonia.Controls.Primitives UpdatePosition(); } + /// protected override Size ArrangeOverride(Size finalSize) { if (_positionerParameters.Size != finalSize) @@ -123,17 +130,18 @@ namespace Avalonia.Controls.Primitives public static IPopupHost CreatePopupHost(Visual target, IAvaloniaDependencyResolver? dependencyResolver) { - var platform = TopLevel.GetTopLevel(target)?.PlatformImpl?.CreatePopup(); - if (platform != null) - return new PopupRoot((TopLevel)target.GetVisualRoot()!, platform, dependencyResolver); - - var overlayLayer = OverlayLayer.GetOverlayLayer(target); - if (overlayLayer == null) - throw new InvalidOperationException( - "Unable to create IPopupImpl and no overlay layer is found for the target control"); + if (TopLevel.GetTopLevel(target) is { } topLevel && topLevel.PlatformImpl?.CreatePopup() is { } popupImpl) + { + return new PopupRoot(topLevel, popupImpl, dependencyResolver); + } + if (OverlayLayer.GetOverlayLayer(target) is { } overlayLayer) + { + return new OverlayPopupHost(overlayLayer); + } - return new OverlayPopupHost(overlayLayer); + throw new InvalidOperationException( + "Unable to create IPopupImpl and no overlay layer is found for the target control"); } } } diff --git a/src/Avalonia.Controls/TopLevel.cs b/src/Avalonia.Controls/TopLevel.cs index 4db71abfa8..f956fb8724 100644 --- a/src/Avalonia.Controls/TopLevel.cs +++ b/src/Avalonia.Controls/TopLevel.cs @@ -402,7 +402,7 @@ namespace Avalonia.Controls /// The TopLevel public static TopLevel? GetTopLevel(Visual? visual) { - return visual == null ? null : visual.VisualRoot as TopLevel; + return visual?.VisualRoot as TopLevel; } protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) diff --git a/src/Avalonia.Diagnostics/Diagnostics/KeyGestureExtesions.cs b/src/Avalonia.Diagnostics/Diagnostics/KeyGestureExtesions.cs index bb3ebc4708..5929ff18fa 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/KeyGestureExtesions.cs +++ b/src/Avalonia.Diagnostics/Diagnostics/KeyGestureExtesions.cs @@ -3,10 +3,9 @@ using Avalonia.Input.Raw; namespace Avalonia.Diagnostics { - static class KeyGestureExtesions + internal static class KeyGestureExtesions { public static bool Matches(this KeyGesture gesture, RawKeyEventArgs keyEvent) => - keyEvent != null && (KeyModifiers)(keyEvent.Modifiers & RawInputModifiers.KeyboardMask) == gesture.KeyModifiers && ResolveNumPadOperationKey(keyEvent.Key) == ResolveNumPadOperationKey(gesture.Key);