Пример #1
0
        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);
            }
        }
Пример #2
0
            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);
            }