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; }