Просмотр исходного кода

Use simpler event args type.

The `PointerEnteredItem` and `PointerExitedItem` were using an obsolete API to create the event args. We don't need a `PointerEventArgs` anyway, just use `RoutedEventArgs`.
Steven Kirk 2 лет назад
Родитель
Сommit
f745fe1788

+ 9 - 14
src/Avalonia.Controls/MenuItem.cs

@@ -13,6 +13,7 @@ using Avalonia.Data;
 using Avalonia.Input;
 using Avalonia.Interactivity;
 using Avalonia.LogicalTree;
+using Avalonia.Layout;
 
 namespace Avalonia.Controls
 {
@@ -85,16 +86,16 @@ namespace Avalonia.Controls
         /// <summary>
         /// Defines the <see cref="PointerEnteredItem"/> event.
         /// </summary>
-        public static readonly RoutedEvent<PointerEventArgs> PointerEnteredItemEvent =
-            RoutedEvent.Register<MenuItem, PointerEventArgs>(
+        public static readonly RoutedEvent<RoutedEventArgs> PointerEnteredItemEvent =
+            RoutedEvent.Register<MenuItem, RoutedEventArgs>(
                 nameof(PointerEnteredItem),
                 RoutingStrategies.Bubble);
 
         /// <summary>
         /// Defines the <see cref="PointerExitedItem"/> event.
         /// </summary>
-        public static readonly RoutedEvent<PointerEventArgs> PointerExitedItemEvent =
-            RoutedEvent.Register<MenuItem, PointerEventArgs>(
+        public static readonly RoutedEvent<RoutedEventArgs> PointerExitedItemEvent =
+            RoutedEvent.Register<MenuItem, RoutedEventArgs>(
                 nameof(PointerExitedItem),
                 RoutingStrategies.Bubble);
 
@@ -184,7 +185,7 @@ namespace Avalonia.Controls
         /// <remarks>
         /// A bubbling version of the <see cref="InputElement.PointerEntered"/> event for menu items.
         /// </remarks>
-        public event EventHandler<PointerEventArgs>? PointerEnteredItem
+        public event EventHandler<RoutedEventArgs>? PointerEnteredItem
         {
             add { AddHandler(PointerEnteredItemEvent, value); }
             remove { RemoveHandler(PointerEnteredItemEvent, value); }
@@ -196,7 +197,7 @@ namespace Avalonia.Controls
         /// <remarks>
         /// A bubbling version of the <see cref="InputElement.PointerExited"/> event for menu items.
         /// </remarks>
-        public event EventHandler<PointerEventArgs>? PointerExitedItem
+        public event EventHandler<RoutedEventArgs>? PointerExitedItem
         {
             add { AddHandler(PointerExitedItemEvent, value); }
             remove { RemoveHandler(PointerExitedItemEvent, value); }
@@ -442,20 +443,14 @@ namespace Avalonia.Controls
         protected override void OnPointerEntered(PointerEventArgs e)
         {
             base.OnPointerEntered(e);
-
-            var point = e.GetCurrentPoint(null);
-            RaiseEvent(new PointerEventArgs(PointerEnteredItemEvent, this, e.Pointer, (Visual?)VisualRoot, point.Position,
-                e.Timestamp, point.Properties, e.KeyModifiers));
+            RaiseEvent(new RoutedEventArgs(PointerEnteredItemEvent));
         }
 
         /// <inheritdoc/>
         protected override void OnPointerExited(PointerEventArgs e)
         {
             base.OnPointerExited(e);
-
-            var point = e.GetCurrentPoint(null);
-            RaiseEvent(new PointerEventArgs(PointerExitedItemEvent, this, e.Pointer, (Visual?)VisualRoot, point.Position,
-                e.Timestamp, point.Properties, e.KeyModifiers));
+            RaiseEvent(new RoutedEventArgs(PointerExitedItemEvent));
         }
 
         /// <summary>

+ 2 - 2
src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs

@@ -301,7 +301,7 @@ namespace Avalonia.Controls.Platform
             e.Handled = true;
         }
 
-        protected internal virtual void PointerEntered(object? sender, PointerEventArgs e)
+        protected internal virtual void PointerEntered(object? sender, RoutedEventArgs e)
         {
             var item = GetMenuItem(e.Source as Control);
 
@@ -368,7 +368,7 @@ namespace Avalonia.Controls.Platform
             }
         }
 
-        protected internal virtual void PointerExited(object? sender, PointerEventArgs e)
+        protected internal virtual void PointerExited(object? sender, RoutedEventArgs e)
         {
             var item = GetMenuItem(e.Source as Control);
 

+ 11 - 14
tests/Avalonia.Controls.UnitTests/Platform/DefaultMenuInteractionHandlerTests.cs

@@ -11,9 +11,6 @@ namespace Avalonia.Controls.UnitTests.Platform
 {
     public class DefaultMenuInteractionHandlerTests
     {
-        static PointerEventArgs CreateArgs(RoutedEvent ev, object source) 
-            => new PointerEventArgs(ev, source, new FakePointer(), (Visual)source, default, 0, PointerPointProperties.None, default);
-
         static PointerPressedEventArgs CreatePressed(object source) => new PointerPressedEventArgs(source,
             new FakePointer(), (Visual)source, default,0, new PointerPointProperties (RawInputModifiers.None, PointerUpdateKind.LeftButtonPressed),
             default);
@@ -171,7 +168,7 @@ namespace Avalonia.Controls.UnitTests.Platform
                 var menu = new Mock<IMenu>();
                 var item = CreateMockMenuItem(isTopLevel: true, hasSubMenu: true, isSubMenuOpen: true, parent: menu.Object);
                 var nextItem = CreateMockMenuItem(isTopLevel: true, hasSubMenu: true, parent: menu.Object);
-                var e = CreateArgs(MenuItem.PointerEnteredItemEvent, nextItem.Object);
+                var e = new RoutedEventArgs(MenuItem.PointerEnteredItemEvent, nextItem.Object);
 
                 menu.SetupGet(x => x.SelectedItem).Returns(item.Object);
 
@@ -191,7 +188,7 @@ namespace Avalonia.Controls.UnitTests.Platform
                 var target = new DefaultMenuInteractionHandler(false);
                 var menu = new Mock<IMenu>();
                 var item = CreateMockMenuItem(isTopLevel: true, parent: menu.Object);
-                var e = CreateArgs(MenuItem.PointerExitedItemEvent, item.Object);
+                var e = new RoutedEventArgs(MenuItem.PointerExitedItemEvent, item.Object);
 
                 menu.SetupGet(x => x.SelectedItem).Returns(item.Object);
                 target.PointerExited(item, e);
@@ -206,7 +203,7 @@ namespace Avalonia.Controls.UnitTests.Platform
                 var target = new DefaultMenuInteractionHandler(false);
                 var menu = new Mock<IMenu>();
                 var item = CreateMockMenuItem(isTopLevel: true, parent: menu.Object);
-                var e = CreateArgs(MenuItem.PointerExitedItemEvent, item.Object);
+                var e = new RoutedEventArgs(MenuItem.PointerExitedItemEvent, item.Object);
 
                 menu.SetupGet(x => x.IsOpen).Returns(true);
                 menu.SetupGet(x => x.SelectedItem).Returns(item.Object);
@@ -365,7 +362,7 @@ namespace Avalonia.Controls.UnitTests.Platform
                 var menu = Mock.Of<IMenu>();
                 var parentItem = CreateMockMenuItem(isTopLevel: true, hasSubMenu: true, parent: menu);
                 var item = CreateMockMenuItem(parent: parentItem.Object);
-                var e = CreateArgs(MenuItem.PointerEnteredItemEvent, item.Object);
+                var e = new RoutedEventArgs(MenuItem.PointerEnteredItemEvent, item.Object);
 
                 target.PointerEntered(item.Object, e);
 
@@ -381,7 +378,7 @@ namespace Avalonia.Controls.UnitTests.Platform
                 var menu = Mock.Of<IMenu>();
                 var parentItem = CreateMockMenuItem(isTopLevel: true, hasSubMenu: true, parent: menu);
                 var item = CreateMockMenuItem(hasSubMenu: true, parent: parentItem.Object);
-                var e = CreateArgs(MenuItem.PointerEnteredItemEvent, item.Object);
+                var e = new RoutedEventArgs(MenuItem.PointerEnteredItemEvent, item.Object);
 
                 target.PointerEntered(item.Object, e);
                 item.Verify(x => x.Open(), Times.Never);
@@ -401,7 +398,7 @@ namespace Avalonia.Controls.UnitTests.Platform
                 var parentItem = CreateMockMenuItem(isTopLevel: true, hasSubMenu: true, parent: menu);
                 var item = CreateMockMenuItem(parent: parentItem.Object);
                 var sibling = CreateMockMenuItem(hasSubMenu: true, isSubMenuOpen: true, parent: parentItem.Object);
-                var e = CreateArgs(MenuItem.PointerEnteredItemEvent, item.Object);
+                var e = new RoutedEventArgs(MenuItem.PointerEnteredItemEvent, item.Object);
 
                 parentItem.SetupGet(x => x.SubItems).Returns(new[] { item.Object, sibling.Object });
 
@@ -421,7 +418,7 @@ namespace Avalonia.Controls.UnitTests.Platform
                 var menu = Mock.Of<IMenu>();
                 var parentItem = CreateMockMenuItem(isTopLevel: true, hasSubMenu: true, parent: menu);
                 var item = CreateMockMenuItem(parent: parentItem.Object);
-                var e = CreateArgs(MenuItem.PointerExitedItemEvent, item.Object);
+                var e = new RoutedEventArgs(MenuItem.PointerExitedItemEvent, item.Object);
 
                 parentItem.SetupGet(x => x.SelectedItem).Returns(item.Object);
                 target.PointerExited(item, e);
@@ -438,7 +435,7 @@ namespace Avalonia.Controls.UnitTests.Platform
                 var parentItem = CreateMockMenuItem(isTopLevel: true, hasSubMenu: true, parent: menu);
                 var item = CreateMockMenuItem(parent: parentItem.Object);
                 var sibling = CreateMockMenuItem(parent: parentItem.Object);
-                var e = CreateArgs(MenuItem.PointerExitedItemEvent, item.Object);
+                var e = new RoutedEventArgs(MenuItem.PointerExitedItemEvent, item.Object);
 
                 parentItem.SetupGet(x => x.SelectedItem).Returns(sibling.Object);
                 target.PointerExited(item, e);
@@ -454,7 +451,7 @@ namespace Avalonia.Controls.UnitTests.Platform
                 var menu = Mock.Of<IMenu>();
                 var parentItem = CreateMockMenuItem(isTopLevel: true, hasSubMenu: true, parent: menu);
                 var item = CreateMockMenuItem(hasSubMenu: true, parent: parentItem.Object);
-                var e = CreateArgs(MenuItem.PointerExitedItemEvent, item.Object);
+                var e = new RoutedEventArgs(MenuItem.PointerExitedItemEvent, item.Object);
 
                 item.Setup(x => x.IsPointerOverSubMenu).Returns(true);
                 target.PointerExited(item, e);
@@ -488,8 +485,8 @@ namespace Avalonia.Controls.UnitTests.Platform
                 var parentItem = CreateMockMenuItem(isTopLevel: true, hasSubMenu: true, parent: menu);
                 var item = CreateMockMenuItem(hasSubMenu: true, parent: parentItem.Object);
                 var childItem = CreateMockMenuItem(parent: item.Object);
-                var enter = CreateArgs(MenuItem.PointerEnteredItemEvent, item.Object);
-                var leave = CreateArgs(MenuItem.PointerExitedItemEvent, item.Object);
+                var enter = new RoutedEventArgs(MenuItem.PointerEnteredItemEvent, item.Object);
+                var leave = new RoutedEventArgs(MenuItem.PointerExitedItemEvent, item.Object);
 
                 // Pointer enters item; item is selected.
                 target.PointerEntered(item, enter);