From 689017845b252fda871d49876309a211c023bf42 Mon Sep 17 00:00:00 2001 From: "Michael S. Scherotter" Date: Mon, 30 Mar 2020 04:02:44 -0700 Subject: [PATCH] Added device type to touch events (touch, mouse, pen) (#1191) --- .../SKTouchHandler.cs | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Android/SKTouchHandler.cs b/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Android/SKTouchHandler.cs index fcfd4861b8..4fe9f18da5 100644 --- a/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Android/SKTouchHandler.cs +++ b/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Android/SKTouchHandler.cs @@ -47,12 +47,16 @@ private void OnTouch(object sender, View.TouchEventArgs e) var id = evt.GetPointerId(pointer); var coords = scalePixels(evt.GetX(pointer), evt.GetY(pointer)); + var toolType = evt.GetToolType(id); + var deviceType = GetDeviceType(toolType); + switch (evt.ActionMasked) { case MotionEventActions.Down: case MotionEventActions.PointerDown: { - var args = new SKTouchEventArgs(id, SKTouchAction.Pressed, coords, true); + var args = new SKTouchEventArgs(id, SKTouchAction.Pressed, SKMouseButton.Left, deviceType, coords, true); + onTouchAction(args); e.Handled = args.Handled; break; @@ -66,7 +70,7 @@ private void OnTouch(object sender, View.TouchEventArgs e) id = evt.GetPointerId(pointer); coords = scalePixels(evt.GetX(pointer), evt.GetY(pointer)); - var args = new SKTouchEventArgs(id, SKTouchAction.Moved, coords, true); + var args = new SKTouchEventArgs(id, SKTouchAction.Moved, SKMouseButton.Left, deviceType, coords, true); onTouchAction(args); e.Handled = e.Handled || args.Handled; } @@ -76,7 +80,7 @@ private void OnTouch(object sender, View.TouchEventArgs e) case MotionEventActions.Up: case MotionEventActions.PointerUp: { - var args = new SKTouchEventArgs(id, SKTouchAction.Released, coords, false); + var args = new SKTouchEventArgs(id, SKTouchAction.Released, SKMouseButton.Left, deviceType, coords, false); onTouchAction(args); e.Handled = args.Handled; break; @@ -84,12 +88,23 @@ private void OnTouch(object sender, View.TouchEventArgs e) case MotionEventActions.Cancel: { - var args = new SKTouchEventArgs(id, SKTouchAction.Cancelled, coords, false); + var args = new SKTouchEventArgs(id, SKTouchAction.Cancelled, SKMouseButton.Left, deviceType, coords, false); onTouchAction(args); e.Handled = args.Handled; break; } } } + + private static SKTouchDeviceType GetDeviceType(MotionEventToolType toolType) => + toolType switch + { + MotionEventToolType.Unknown => SKTouchDeviceType.Touch, + MotionEventToolType.Finger => SKTouchDeviceType.Touch, + MotionEventToolType.Stylus => SKTouchDeviceType.Pen, + MotionEventToolType.Eraser => SKTouchDeviceType.Pen, + MotionEventToolType.Mouse => SKTouchDeviceType.Mouse, + _ => SKTouchDeviceType.Touch, + }; } }