diff --git a/src/Avalonia.Input/Raw/RawPointerEventArgs.cs b/src/Avalonia.Input/Raw/RawPointerEventArgs.cs
index 58ea076379..1faa20fbf1 100644
--- a/src/Avalonia.Input/Raw/RawPointerEventArgs.cs
+++ b/src/Avalonia.Input/Raw/RawPointerEventArgs.cs
@@ -87,6 +87,11 @@ namespace Avalonia.Input.Raw
InputModifiers = inputModifiers;
}
+ ///
+ /// Gets the raw pointer identifier.
+ ///
+ public long RawPointerId { get; set; }
+
///
/// Gets the pointer properties and position, in client DIPs.
///
diff --git a/src/Avalonia.Input/Raw/RawTouchEventArgs.cs b/src/Avalonia.Input/Raw/RawTouchEventArgs.cs
index 020b40e55b..6706a45f48 100644
--- a/src/Avalonia.Input/Raw/RawTouchEventArgs.cs
+++ b/src/Avalonia.Input/Raw/RawTouchEventArgs.cs
@@ -1,15 +1,26 @@
+using System;
+
namespace Avalonia.Input.Raw
{
public class RawTouchEventArgs : RawPointerEventArgs
{
public RawTouchEventArgs(IInputDevice device, ulong timestamp, IInputRoot root,
RawPointerEventType type, Point position, RawInputModifiers inputModifiers,
- long touchPointId)
+ long rawPointerId)
: base(device, timestamp, root, type, position, inputModifiers)
{
- TouchPointId = touchPointId;
+ RawPointerId = rawPointerId;
+ }
+
+ public RawTouchEventArgs(IInputDevice device, ulong timestamp, IInputRoot root,
+ RawPointerEventType type, RawPointerPoint point, RawInputModifiers inputModifiers,
+ long rawPointerId)
+ : base(device, timestamp, root, type, point, inputModifiers)
+ {
+ RawPointerId = rawPointerId;
}
- public long TouchPointId { get; set; }
+ [Obsolete("Use RawPointerId")]
+ public long TouchPointId { get => RawPointerId; set => RawPointerId = value; }
}
}
diff --git a/src/Avalonia.Input/TouchDevice.cs b/src/Avalonia.Input/TouchDevice.cs
index 54dcc4051e..e914d860fd 100644
--- a/src/Avalonia.Input/TouchDevice.cs
+++ b/src/Avalonia.Input/TouchDevice.cs
@@ -40,14 +40,14 @@ namespace Avalonia.Input
{
if (ev.Handled || _disposed)
return;
- var args = (RawTouchEventArgs)ev;
- if (!_pointers.TryGetValue(args.TouchPointId, out var pointer))
+ var args = (RawPointerEventArgs)ev;
+ if (!_pointers.TryGetValue(args.RawPointerId, out var pointer))
{
if (args.Type == RawPointerEventType.TouchEnd)
return;
var hit = args.InputHitTestResult;
- _pointers[args.TouchPointId] = pointer = new Pointer(Pointer.GetNextFreeId(),
+ _pointers[args.RawPointerId] = pointer = new Pointer(Pointer.GetNextFreeId(),
PointerType.Touch, _pointers.Count == 0);
pointer.Capture(hit);
}
@@ -88,7 +88,7 @@ namespace Avalonia.Input
if (args.Type == RawPointerEventType.TouchEnd)
{
- _pointers.Remove(args.TouchPointId);
+ _pointers.Remove(args.RawPointerId);
using (pointer)
{
target.RaiseEvent(new PointerReleasedEventArgs(target, pointer,
@@ -101,7 +101,7 @@ namespace Avalonia.Input
if (args.Type == RawPointerEventType.TouchCancel)
{
- _pointers.Remove(args.TouchPointId);
+ _pointers.Remove(args.RawPointerId);
using (pointer)
pointer.Capture(null);
_lastPointer = null;
@@ -129,8 +129,7 @@ namespace Avalonia.Input
public IPointer? TryGetPointer(RawPointerEventArgs ev)
{
- return ev is RawTouchEventArgs args
- && _pointers.TryGetValue(args.TouchPointId, out var pointer)
+ return _pointers.TryGetValue(ev.RawPointerId, out var pointer)
? pointer
: null;
}
diff --git a/src/Shared/RawEventGrouping.cs b/src/Shared/RawEventGrouping.cs
index 084593ffc6..966744888c 100644
--- a/src/Shared/RawEventGrouping.cs
+++ b/src/Shared/RawEventGrouping.cs
@@ -2,10 +2,8 @@
using System;
using System.Collections.Generic;
using Avalonia.Collections.Pooled;
-using Avalonia.Input;
using Avalonia.Input.Raw;
using Avalonia.Threading;
-using JetBrains.Annotations;
namespace Avalonia;
@@ -19,7 +17,7 @@ internal class RawEventGrouper : IDisposable
private readonly Action _eventCallback;
private readonly Queue _inputQueue = new();
private readonly Action _dispatchFromQueue;
- readonly Dictionary _lastTouchPoints = new();
+ readonly Dictionary _lastTouchPoints = new();
RawInputEventArgs? _lastEvent;
public RawEventGrouper(Action eventCallback)
@@ -49,7 +47,7 @@ internal class RawEventGrouper : IDisposable
_lastEvent = null;
if (ev is RawTouchEventArgs { Type: RawPointerEventType.TouchUpdate } touchUpdate)
- _lastTouchPoints.Remove(touchUpdate.TouchPointId);
+ _lastTouchPoints.Remove(touchUpdate.RawPointerId);
_eventCallback?.Invoke(ev);
@@ -88,11 +86,11 @@ internal class RawEventGrouper : IDisposable
{
if (args is RawTouchEventArgs touchEvent)
{
- if (_lastTouchPoints.TryGetValue(touchEvent.TouchPointId, out var lastTouchEvent))
+ if (_lastTouchPoints.TryGetValue(touchEvent.RawPointerId, out var lastTouchEvent))
MergeEvents(lastTouchEvent, touchEvent);
else
{
- _lastTouchPoints[touchEvent.TouchPointId] = touchEvent;
+ _lastTouchPoints[touchEvent.RawPointerId] = touchEvent;
AddToQueue(touchEvent);
}
}
@@ -105,7 +103,7 @@ internal class RawEventGrouper : IDisposable
{
_lastTouchPoints.Clear();
if (args is RawTouchEventArgs { Type: RawPointerEventType.TouchUpdate } touchEvent)
- _lastTouchPoints[touchEvent.TouchPointId] = touchEvent;
+ _lastTouchPoints[touchEvent.RawPointerId] = touchEvent;
}
AddToQueue(args);
}
diff --git a/tests/Avalonia.Input.UnitTests/TouchDeviceTests.cs b/tests/Avalonia.Input.UnitTests/TouchDeviceTests.cs
index 80c5a45c1a..7b7d547346 100644
--- a/tests/Avalonia.Input.UnitTests/TouchDeviceTests.cs
+++ b/tests/Avalonia.Input.UnitTests/TouchDeviceTests.cs
@@ -219,30 +219,36 @@ namespace Avalonia.Input.UnitTests
{
for (int i = 0; i < touchPointIds.Length; i++)
{
- inputManager.ProcessInput(new RawTouchEventArgs(device, 0,
+ inputManager.ProcessInput(new RawPointerEventArgs(device, 0,
root,
type,
new Point(0, 0),
- RawInputModifiers.None,
- touchPointIds[i]));
+ RawInputModifiers.None)
+ {
+ RawPointerId = touchPointIds[i]
+ });
}
}
private static void TapOnce(IInputManager inputManager, TouchDevice device, IInputRoot root, ulong timestamp = 0, long touchPointId = 0)
{
- inputManager.ProcessInput(new RawTouchEventArgs(device, timestamp,
+ inputManager.ProcessInput(new RawPointerEventArgs(device, timestamp,
root,
RawPointerEventType.TouchBegin,
new Point(0, 0),
- RawInputModifiers.None,
- touchPointId));
- inputManager.ProcessInput(new RawTouchEventArgs(device, timestamp,
+ RawInputModifiers.None)
+ {
+ RawPointerId = touchPointId
+ });
+ inputManager.ProcessInput(new RawPointerEventArgs(device, timestamp,
root,
RawPointerEventType.TouchEnd,
new Point(0, 0),
- RawInputModifiers.None,
- touchPointId));
+ RawInputModifiers.None)
+ {
+ RawPointerId = touchPointId
+ });
}
}
}