Browse Source

fix touch issues

Stylus
Sergey Mikolaytis 5 years ago
parent
commit
5127006d1b
  1. 2
      src/Avalonia.Input/GestureRecognizers/ScrollGestureRecognizer.cs
  2. 2
      src/Avalonia.Input/PointerPoint.cs
  3. 7
      src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs

2
src/Avalonia.Input/GestureRecognizers/ScrollGestureRecognizer.cs

@ -101,7 +101,7 @@ namespace Avalonia.Input.GestureRecognizers
if (_scrolling) if (_scrolling)
{ {
var vector = _trackedRootPoint - rootPoint; var vector = _trackedRootPoint - rootPoint;
var elapsed = _lastMoveTimestamp.HasValue ? var elapsed = _lastMoveTimestamp.HasValue && _lastMoveTimestamp < e.Timestamp ?
TimeSpan.FromMilliseconds(e.Timestamp - _lastMoveTimestamp.Value) : TimeSpan.FromMilliseconds(e.Timestamp - _lastMoveTimestamp.Value) :
TimeSpan.Zero; TimeSpan.Zero;

2
src/Avalonia.Input/PointerPoint.cs

@ -45,8 +45,6 @@ namespace Avalonia.Input
IsRightButtonPressed = modifiers.HasAllFlags(RawInputModifiers.RightMouseButton); IsRightButtonPressed = modifiers.HasAllFlags(RawInputModifiers.RightMouseButton);
IsXButton1Pressed = modifiers.HasAllFlags(RawInputModifiers.XButton1MouseButton); IsXButton1Pressed = modifiers.HasAllFlags(RawInputModifiers.XButton1MouseButton);
IsXButton2Pressed = modifiers.HasAllFlags(RawInputModifiers.XButton2MouseButton); IsXButton2Pressed = modifiers.HasAllFlags(RawInputModifiers.XButton2MouseButton);
IsBarrelButtonPressed = modifiers.HasAllFlags(RawInputModifiers.BarrelPenButton);
IsEraser = modifiers.HasAllFlags(RawInputModifiers.PenEraser);
// The underlying input source might be reporting the previous state, // The underlying input source might be reporting the previous state,
// so make sure that we reflect the current state // so make sure that we reflect the current state

7
src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs

@ -488,6 +488,10 @@ namespace Avalonia.Win32
case WindowsMessage.WM_POINTERLEAVE: case WindowsMessage.WM_POINTERLEAVE:
{ {
GetDevicePointerInfo(wParam, out var device, out var info, ref timestamp); GetDevicePointerInfo(wParam, out var device, out var info, ref timestamp);
if (device is TouchDevice)
{
break;
}
var point = PointToClient(new PixelPoint(info.ptPixelLocationX, info.ptPixelLocationY)); var point = PointToClient(new PixelPoint(info.ptPixelLocationX, info.ptPixelLocationY));
var modifiers = GetInputModifiers(info.dwKeyStates); var modifiers = GetInputModifiers(info.dwKeyStates);
@ -798,8 +802,7 @@ namespace Avalonia.Win32
case PointerInputType.PT_PEN: case PointerInputType.PT_PEN:
return ToEventType(info.ButtonChangeType); return ToEventType(info.ButtonChangeType);
case PointerInputType.PT_TOUCH: case PointerInputType.PT_TOUCH:
if (info.pointerFlags.HasFlag(PointerFlags.POINTER_FLAG_CANCELED) || if (info.pointerFlags.HasFlag(PointerFlags.POINTER_FLAG_CANCELED))
!info.pointerFlags.HasFlag(PointerFlags.POINTER_FLAG_CONFIDENCE))
{ {
return RawPointerEventType.TouchCancel; return RawPointerEventType.TouchCancel;
} }

Loading…
Cancel
Save