Browse Source

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`.
pull/10461/head
Steven Kirk 4 years ago
parent
commit
f745fe1788
  1. 23
      src/Avalonia.Controls/MenuItem.cs
  2. 4
      src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs
  3. 25
      tests/Avalonia.Controls.UnitTests/Platform/DefaultMenuInteractionHandlerTests.cs

23
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>

4
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);

25
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);

Loading…
Cancel
Save