private void TouchesMoved(MotionEvent e, bool update = true) { // something may have happened (clear) so start the stroke again if (currentPath == null) { TouchesBegan(e); } var hasMoved = false; for (var i = 0; i < e.HistorySize; i++) { float historicalX = e.GetHistoricalX(i); float historicalY = e.GetHistoricalY(i); if (HasMovedFarEnough(currentPath, historicalX, historicalY)) { // update the dirty rectangle UpdateBounds(historicalX, historicalY); hasMoved = true; // add it to the current path currentPath.Path.LineTo(historicalX, historicalY); } currentPath.GetPoints().Add(new InkPoint( new System.Drawing.PointF(historicalX, historicalY), e.GetHistoricalPressure(i), null, TimeSpan.FromMilliseconds(e.GetHistoricalEventTime(i)))); } float touchX = e.GetX(); float touchY = e.GetY(); if (HasMovedFarEnough(currentPath, touchX, touchY)) { // add it to the current path currentPath.Path.LineTo(touchX, touchY); // update the dirty rectangle UpdateBounds(touchX, touchY); hasMoved = true; } currentPath.GetPoints().Add(new InkPoint( new System.Drawing.PointF(touchX, touchY), e.Pressure, null, TimeSpan.FromMilliseconds(e.EventTime))); if (update && hasMoved) { Invalidate(DirtyRect); } }
bool OnTouchOrHoverEvent(MotionEvent e, bool isTouch) { MotionEventButtonState buttonState = e.ButtonState; MotionEventButtonState pressedButtons = buttonState & ~mOldButtonState; mOldButtonState = buttonState; if ((pressedButtons & MotionEventButtonState.Secondary) != 0) { // Advance color when the right mouse button or first stylus button // is pressed. AdvanceColor(); } PaintMode mode; if ((buttonState & MotionEventButtonState.Tertiary) != 0) { // Splat paint when the middle mouse button or second stylus button is pressed. mode = PaintMode.Splat; } else if (isTouch || (buttonState & MotionEventButtonState.Primary) != 0) { // Draw paint when touching or if the primary button is pressed. mode = PaintMode.Draw; } else { // Otherwise, do not paint anything. return(false); } MotionEventActions action = e.ActionMasked; if (action == MotionEventActions.Down || action == MotionEventActions.Move || action == MotionEventActions.HoverMove) { int N = e.HistorySize; int P = e.PointerCount; for (int i = 0; i < N; i++) { for (int j = 0; j < P; j++) { Paint(GetPaintModeForTool(e.GetToolType(j), mode), e.GetHistoricalX(j, i), e.GetHistoricalY(j, i), e.GetHistoricalPressure(j, i), e.GetHistoricalTouchMajor(j, i), e.GetHistoricalTouchMinor(j, i), e.GetHistoricalOrientation(j, i), e.GetHistoricalAxisValue(Axis.Distance, j, i), e.GetHistoricalAxisValue(Axis.Tilt, j, i)); } } for (int j = 0; j < P; j++) { Paint(GetPaintModeForTool(e.GetToolType(j), mode), e.GetX(j), e.GetY(j), e.GetPressure(j), e.GetTouchMajor(j), e.GetTouchMinor(j), e.GetOrientation(j), e.GetAxisValue(Axis.Distance, j), e.GetAxisValue(Axis.Tilt, j)); } mCurX = e.GetX(); mCurY = e.GetY(); } return(true); }