using Avalonia.Controls; using Avalonia.Input; using Avalonia.Interactivity; using Toolkit.Foundation; namespace Toolkit.Avalonia; public class UserInteraction(ITopLevelProvider topLevelProvider) : IUserInteraction { public event EventHandler? UserInteracted; private void OnPointerMoved(object? sender, PointerEventArgs args) { UserInteracted?.Invoke(this, new UserInteractedEventArgs()); } private void OnKeyDown(object? sender, KeyEventArgs args) { UserInteracted?.Invoke(this, new UserInteractedEventArgs()); } private void OnKeyUp(object? sender, KeyEventArgs args) { UserInteracted?.Invoke(this, new UserInteractedEventArgs()); } public void Stop() { if (topLevelProvider.Get() is TopLevel topLevel) { topLevel.RemoveHandler(InputElement.PointerMovedEvent, OnPointerMoved); topLevel.RemoveHandler(InputElement.KeyDownEvent, OnKeyDown); topLevel.RemoveHandler(InputElement.KeyUpEvent, OnKeyUp); } } public void Start() { if (topLevelProvider.Get() is TopLevel topLevel) { topLevel.AddHandler(InputElement.PointerMovedEvent, OnPointerMoved, RoutingStrategies.Tunnel); topLevel.AddHandler(InputElement.KeyDownEvent, OnKeyDown, RoutingStrategies.Tunnel); topLevel.AddHandler(InputElement.KeyUpEvent, OnKeyUp, RoutingStrategies.Tunnel); } } }