diff --git a/src/Avalonia.Base/Input/DragEventArgs.cs b/src/Avalonia.Base/Input/DragEventArgs.cs index 7a27c53023..403dd6f23e 100644 --- a/src/Avalonia.Base/Input/DragEventArgs.cs +++ b/src/Avalonia.Base/Input/DragEventArgs.cs @@ -1,5 +1,6 @@ using System; using Avalonia.Interactivity; +using Avalonia.Metadata; using Avalonia.VisualTree; namespace Avalonia.Input @@ -32,7 +33,9 @@ namespace Avalonia.Input return point; } - internal DragEventArgs(RoutedEvent routedEvent, IDataObject data, Interactive target, Point targetLocation, KeyModifiers keyModifiers) + [Unstable] + [Obsolete("This constructor might be removed in 12.0. For unit testing, consider using DragDrop.DoDragDrop or IHeadlessWindow.DragDrop.")] + public DragEventArgs(RoutedEvent routedEvent, IDataObject data, Interactive target, Point targetLocation, KeyModifiers keyModifiers) : base(routedEvent) { Data = data; diff --git a/src/Avalonia.Base/Input/GotFocusEventArgs.cs b/src/Avalonia.Base/Input/GotFocusEventArgs.cs index f3de55ebae..8d15c3f9ec 100644 --- a/src/Avalonia.Base/Input/GotFocusEventArgs.cs +++ b/src/Avalonia.Base/Input/GotFocusEventArgs.cs @@ -7,19 +7,18 @@ namespace Avalonia.Input /// public class GotFocusEventArgs : RoutedEventArgs { - internal GotFocusEventArgs() + public GotFocusEventArgs() : base(InputElement.GotFocusEvent) { - } /// /// Gets or sets a value indicating how the change in focus occurred. /// - public NavigationMethod NavigationMethod { get; set; } + public NavigationMethod NavigationMethod { get; init; } /// /// Gets or sets any key modifiers active at the time of focus. /// - public KeyModifiers KeyModifiers { get; set; } + public KeyModifiers KeyModifiers { get; init; } } } diff --git a/src/Avalonia.Base/Input/KeyEventArgs.cs b/src/Avalonia.Base/Input/KeyEventArgs.cs index 35fa549995..9fa097c4b1 100644 --- a/src/Avalonia.Base/Input/KeyEventArgs.cs +++ b/src/Avalonia.Base/Input/KeyEventArgs.cs @@ -5,15 +5,10 @@ namespace Avalonia.Input { public class KeyEventArgs : RoutedEventArgs { - public KeyEventArgs() - { + public IKeyboardDevice? Device { get; init; } - } + public Key Key { get; init; } - public IKeyboardDevice? Device { get; set; } - - public Key Key { get; set; } - - public KeyModifiers KeyModifiers { get; set; } + public KeyModifiers KeyModifiers { get; init; } } } diff --git a/src/Avalonia.Base/Input/KeyboardDevice.cs b/src/Avalonia.Base/Input/KeyboardDevice.cs index 26ff71a4e7..c46834fff4 100644 --- a/src/Avalonia.Base/Input/KeyboardDevice.cs +++ b/src/Avalonia.Base/Input/KeyboardDevice.cs @@ -156,7 +156,6 @@ namespace Avalonia.Input interactive?.RaiseEvent(new GotFocusEventArgs { - RoutedEvent = InputElement.GotFocusEvent, NavigationMethod = method, KeyModifiers = keyModifiers, }); diff --git a/src/Avalonia.Base/Input/PointerDeltaEventArgs.cs b/src/Avalonia.Base/Input/PointerDeltaEventArgs.cs index af0fa83382..c405cdfacd 100644 --- a/src/Avalonia.Base/Input/PointerDeltaEventArgs.cs +++ b/src/Avalonia.Base/Input/PointerDeltaEventArgs.cs @@ -1,13 +1,17 @@ +using System; using Avalonia.Interactivity; +using Avalonia.Metadata; using Avalonia.VisualTree; namespace Avalonia.Input { public class PointerDeltaEventArgs : PointerEventArgs { - public Vector Delta { get; set; } + public Vector Delta { get; } - internal PointerDeltaEventArgs(RoutedEvent routedEvent, object? source, + [Unstable] + [Obsolete("This constructor might be removed in 12.0.")] + public PointerDeltaEventArgs(RoutedEvent routedEvent, object? source, IPointer pointer, Visual rootVisual, Point rootVisualPosition, ulong timestamp, PointerPointProperties properties, KeyModifiers modifiers, Vector delta) : base(routedEvent, source, pointer, rootVisual, rootVisualPosition, diff --git a/src/Avalonia.Base/Input/PointerEventArgs.cs b/src/Avalonia.Base/Input/PointerEventArgs.cs index d736253728..502da52597 100644 --- a/src/Avalonia.Base/Input/PointerEventArgs.cs +++ b/src/Avalonia.Base/Input/PointerEventArgs.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using Avalonia.Input.Raw; using Avalonia.Interactivity; +using Avalonia.Metadata; using Avalonia.VisualTree; namespace Avalonia.Input @@ -13,7 +14,9 @@ namespace Avalonia.Input private readonly PointerPointProperties _properties; private readonly Lazy?>? _previousPoints; - internal PointerEventArgs(RoutedEvent routedEvent, + [Unstable] + [Obsolete("This constructor might be removed in 12.0. For unit testing, consider using IHeadlessWindow mouse methods.")] + public PointerEventArgs(RoutedEvent routedEvent, object? source, IPointer pointer, Visual? rootVisual, Point rootVisualPosition, diff --git a/src/Avalonia.Base/Input/PointerWheelEventArgs.cs b/src/Avalonia.Base/Input/PointerWheelEventArgs.cs index a3de0eaaea..903019d85d 100644 --- a/src/Avalonia.Base/Input/PointerWheelEventArgs.cs +++ b/src/Avalonia.Base/Input/PointerWheelEventArgs.cs @@ -1,13 +1,17 @@ +using System; using Avalonia.Interactivity; +using Avalonia.Metadata; using Avalonia.VisualTree; namespace Avalonia.Input { public class PointerWheelEventArgs : PointerEventArgs { - public Vector Delta { get; set; } + public Vector Delta { get; } - internal PointerWheelEventArgs(object source, IPointer pointer, Visual rootVisual, + [Unstable] + [Obsolete("This constructor might be removed in 12.0. For unit testing, consider using IHeadlessWindow.MouseWheel.")] + public PointerWheelEventArgs(object source, IPointer pointer, Visual rootVisual, Point rootVisualPosition, ulong timestamp, PointerPointProperties properties, KeyModifiers modifiers, Vector delta) : base(InputElement.PointerWheelChangedEvent, source, pointer, rootVisual, rootVisualPosition, diff --git a/src/Avalonia.Base/Input/Raw/RawTextInputEventArgs.cs b/src/Avalonia.Base/Input/Raw/RawTextInputEventArgs.cs index 48c882197f..cd1cf29bcf 100644 --- a/src/Avalonia.Base/Input/Raw/RawTextInputEventArgs.cs +++ b/src/Avalonia.Base/Input/Raw/RawTextInputEventArgs.cs @@ -12,6 +12,6 @@ namespace Avalonia.Input.Raw Text = text; } - public string Text { get; set; } + public string Text { get; } } } diff --git a/src/Avalonia.Base/Input/ScrollGestureEventArgs.cs b/src/Avalonia.Base/Input/ScrollGestureEventArgs.cs index 55aaadff71..dd78080708 100644 --- a/src/Avalonia.Base/Input/ScrollGestureEventArgs.cs +++ b/src/Avalonia.Base/Input/ScrollGestureEventArgs.cs @@ -14,7 +14,7 @@ namespace Avalonia.Input public static int GetNextFreeId() => _nextId++; - internal ScrollGestureEventArgs(int id, Vector delta) : base(Gestures.ScrollGestureEvent) + public ScrollGestureEventArgs(int id, Vector delta) : base(Gestures.ScrollGestureEvent) { Id = id; Delta = delta; @@ -25,7 +25,7 @@ namespace Avalonia.Input { public int Id { get; } - internal ScrollGestureEndedEventArgs(int id) : base(Gestures.ScrollGestureEndedEvent) + public ScrollGestureEndedEventArgs(int id) : base(Gestures.ScrollGestureEndedEvent) { Id = id; } diff --git a/src/Avalonia.Base/Input/TappedEventArgs.cs b/src/Avalonia.Base/Input/TappedEventArgs.cs index 3e15c4843a..663207a104 100644 --- a/src/Avalonia.Base/Input/TappedEventArgs.cs +++ b/src/Avalonia.Base/Input/TappedEventArgs.cs @@ -1,3 +1,4 @@ +using System; using Avalonia.Interactivity; using Avalonia.VisualTree; @@ -7,7 +8,7 @@ namespace Avalonia.Input { private readonly PointerEventArgs lastPointerEventArgs; - internal TappedEventArgs(RoutedEvent routedEvent, PointerEventArgs lastPointerEventArgs) + public TappedEventArgs(RoutedEvent routedEvent, PointerEventArgs lastPointerEventArgs) : base(routedEvent) { this.lastPointerEventArgs = lastPointerEventArgs; diff --git a/src/Avalonia.Base/Input/TextInputEventArgs.cs b/src/Avalonia.Base/Input/TextInputEventArgs.cs index a027bec0c6..cda0103749 100644 --- a/src/Avalonia.Base/Input/TextInputEventArgs.cs +++ b/src/Avalonia.Base/Input/TextInputEventArgs.cs @@ -4,10 +4,6 @@ namespace Avalonia.Input { public class TextInputEventArgs : RoutedEventArgs { - public TextInputEventArgs() - { - - } public IKeyboardDevice? Device { get; set; } public string? Text { get; set; } diff --git a/src/Avalonia.Base/Input/VectorEventArgs.cs b/src/Avalonia.Base/Input/VectorEventArgs.cs index 3e8098f904..2ce95cf35a 100644 --- a/src/Avalonia.Base/Input/VectorEventArgs.cs +++ b/src/Avalonia.Base/Input/VectorEventArgs.cs @@ -5,11 +5,6 @@ namespace Avalonia.Input { public class VectorEventArgs : RoutedEventArgs { - internal VectorEventArgs() - { - - } - - public Vector Vector { get; set; } + public Vector Vector { get; init; } } } diff --git a/src/Avalonia.Base/Layout/EffectiveViewportChangedEventArgs.cs b/src/Avalonia.Base/Layout/EffectiveViewportChangedEventArgs.cs index 749d2ecc2b..1cdc775b13 100644 --- a/src/Avalonia.Base/Layout/EffectiveViewportChangedEventArgs.cs +++ b/src/Avalonia.Base/Layout/EffectiveViewportChangedEventArgs.cs @@ -7,7 +7,7 @@ namespace Avalonia.Layout /// public class EffectiveViewportChangedEventArgs : EventArgs { - internal EffectiveViewportChangedEventArgs(Rect effectiveViewport) + public EffectiveViewportChangedEventArgs(Rect effectiveViewport) { EffectiveViewport = effectiveViewport; } diff --git a/src/Avalonia.Base/Rendering/SceneInvalidatedEventArgs.cs b/src/Avalonia.Base/Rendering/SceneInvalidatedEventArgs.cs index 73840376fe..cac4d1693a 100644 --- a/src/Avalonia.Base/Rendering/SceneInvalidatedEventArgs.cs +++ b/src/Avalonia.Base/Rendering/SceneInvalidatedEventArgs.cs @@ -12,7 +12,7 @@ namespace Avalonia.Rendering /// /// The render root that has been updated. /// The updated area. - internal SceneInvalidatedEventArgs( + public SceneInvalidatedEventArgs( IRenderRoot root, Rect dirtyRect) { diff --git a/src/Avalonia.Headless/HeadlessWindowImpl.cs b/src/Avalonia.Headless/HeadlessWindowImpl.cs index 195328cd65..2c19b2f85f 100644 --- a/src/Avalonia.Headless/HeadlessWindowImpl.cs +++ b/src/Avalonia.Headless/HeadlessWindowImpl.cs @@ -284,6 +284,18 @@ namespace Avalonia.Headless button == 1 ? RawPointerEventType.MiddleButtonUp : RawPointerEventType.RightButtonUp, point, modifiers)); } + + void IHeadlessWindow.MouseWheel(Point point, Vector delta, RawInputModifiers modifiers) + { + Input?.Invoke(new RawMouseWheelEventArgs(MouseDevice, Timestamp, InputRoot, + point, delta, modifiers)); + } + + void IHeadlessWindow.DragDrop(Point point, RawDragEventType type, IDataObject data, DragDropEffects effects, RawInputModifiers modifiers) + { + var device = AvaloniaLocator.Current.GetRequiredService(); + Input?.Invoke(new RawDragEvent(device, type, InputRoot, point, data, effects, modifiers)); + } void IWindowImpl.Move(PixelPoint point) { diff --git a/src/Avalonia.Headless/IHeadlessWindow.cs b/src/Avalonia.Headless/IHeadlessWindow.cs index 282662f98b..dfb3a4c433 100644 --- a/src/Avalonia.Headless/IHeadlessWindow.cs +++ b/src/Avalonia.Headless/IHeadlessWindow.cs @@ -1,4 +1,5 @@ using Avalonia.Input; +using Avalonia.Input.Raw; using Avalonia.Media.Imaging; using Avalonia.Platform; using Avalonia.Utilities; @@ -13,5 +14,7 @@ namespace Avalonia.Headless void MouseDown(Point point, int button, RawInputModifiers modifiers = RawInputModifiers.None); void MouseMove(Point point, RawInputModifiers modifiers = RawInputModifiers.None); void MouseUp(Point point, int button, RawInputModifiers modifiers = RawInputModifiers.None); + void MouseWheel(Point point, Vector delta, RawInputModifiers modifiers = RawInputModifiers.None); + void DragDrop(Point point, RawDragEventType type, IDataObject data, DragDropEffects effects, RawInputModifiers modifiers); } } diff --git a/tests/Avalonia.Controls.UnitTests/ListBoxTests_Multiple.cs b/tests/Avalonia.Controls.UnitTests/ListBoxTests_Multiple.cs index b358c98a62..942eb8bf5b 100644 --- a/tests/Avalonia.Controls.UnitTests/ListBoxTests_Multiple.cs +++ b/tests/Avalonia.Controls.UnitTests/ListBoxTests_Multiple.cs @@ -28,7 +28,6 @@ namespace Avalonia.Controls.UnitTests target.Presenter.Panel.Children[1].RaiseEvent(new GotFocusEventArgs { - RoutedEvent = InputElement.GotFocusEvent, NavigationMethod = NavigationMethod.Directional, KeyModifiers = KeyModifiers.Shift }); @@ -52,7 +51,6 @@ namespace Avalonia.Controls.UnitTests target.Presenter.Panel.Children[1].RaiseEvent(new GotFocusEventArgs { - RoutedEvent = InputElement.GotFocusEvent, NavigationMethod = NavigationMethod.Directional, KeyModifiers = KeyModifiers.Control }); @@ -77,7 +75,6 @@ namespace Avalonia.Controls.UnitTests target.Presenter.Panel.Children[0].RaiseEvent(new GotFocusEventArgs { - RoutedEvent = InputElement.GotFocusEvent, NavigationMethod = NavigationMethod.Directional, KeyModifiers = KeyModifiers.Control }); diff --git a/tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs b/tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs index cb4e81001f..131642fc4e 100644 --- a/tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs +++ b/tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs @@ -33,7 +33,6 @@ namespace Avalonia.Controls.UnitTests target.Presenter.Panel.Children[0].RaiseEvent(new GotFocusEventArgs { - RoutedEvent = InputElement.GotFocusEvent, NavigationMethod = NavigationMethod.Tab, }); @@ -53,7 +52,6 @@ namespace Avalonia.Controls.UnitTests target.Presenter.Panel.Children[0].RaiseEvent(new GotFocusEventArgs { - RoutedEvent = InputElement.GotFocusEvent, NavigationMethod = NavigationMethod.Directional, }); @@ -73,7 +71,6 @@ namespace Avalonia.Controls.UnitTests target.Presenter.Panel.Children[0].RaiseEvent(new GotFocusEventArgs { - RoutedEvent = InputElement.GotFocusEvent, NavigationMethod = NavigationMethod.Directional, KeyModifiers = KeyModifiers.Control }); @@ -96,7 +93,6 @@ namespace Avalonia.Controls.UnitTests target.Presenter.Panel.Children[0].RaiseEvent(new GotFocusEventArgs { - RoutedEvent = InputElement.GotFocusEvent, NavigationMethod = NavigationMethod.Directional, KeyModifiers = KeyModifiers.Control });