Exemple #1
0
        private static XCoreWetStrokeUpdateEventArgs CreateUpdateArgs(CoreWetStrokeUpdateEventArgs args)
        {
            var updateArgs = new XCoreWetStrokeUpdateEventArgs
            {
                PointerId    = args.PointerId,
                NewInkPoints = (from item in args.NewInkPoints
                                select new XInkPoint(new Xamarin.Forms.Point(item.Position.X, item.Position.Y), item.Pressure, item.TiltX, item.TiltY, item.Timestamp)).ToList()
            };

            switch (args.Disposition)
            {
            case CoreWetStrokeDisposition.Canceled:
                updateArgs.Disposition = XCoreWetStrokeDisposition.Canceled;
                break;

            case CoreWetStrokeDisposition.Completed:
                updateArgs.Disposition = XCoreWetStrokeDisposition.Completed;
                break;

            case CoreWetStrokeDisposition.Inking:
                updateArgs.Disposition = XCoreWetStrokeDisposition.Inking;
                break;
            }

            return(updateArgs);
        }
Exemple #2
0
        private static void UpdateEventArgs(CoreWetStrokeUpdateEventArgs args, XCoreWetStrokeUpdateEventArgs updateArgs)
        {
            switch (updateArgs.Disposition)
            {
            case XCoreWetStrokeDisposition.Canceled:
                args.Disposition = CoreWetStrokeDisposition.Canceled;
                break;

            case XCoreWetStrokeDisposition.Completed:
                args.Disposition = CoreWetStrokeDisposition.Completed;
                break;

            case XCoreWetStrokeDisposition.Inking:
                args.Disposition = CoreWetStrokeDisposition.Inking;
                break;
            }

            args.NewInkPoints.Clear();

            foreach (var item in updateArgs.NewInkPoints)
            {
                args.NewInkPoints.Add(new InkPoint(
                                          new Windows.Foundation.Point(item.Position.X, item.Position.Y),
                                          item.Pressure,
                                          item.TiltX,
                                          item.TiltY,
                                          item.Timestamp));
            }
        }
Exemple #3
0
        private bool FollowCircleTest(CoreWetStrokeUpdateEventArgs args)
        {
            var position           = args.NewInkPoints[0].Position;
            var distanceFromCenter = DistanceFromCenter(position);

            return(InCircleEdgeZone(distanceFromCenter));
        }
Exemple #4
0
        private void OnWetStrokeCanceled(CoreWetStrokeUpdateSource sender, CoreWetStrokeUpdateEventArgs args)
        {
            XCoreWetStrokeUpdateEventArgs updateArgs = CreateUpdateArgs(args);

            InvokeWetStrokeCanceled(updateArgs);

            UpdateEventArgs(args, updateArgs);
        }
Exemple #5
0
        private void OnWetStrokeStopping(CoreWetStrokeUpdateSource sender, CoreWetStrokeUpdateEventArgs args)
        {
            var updateArgs = CreateUpdateArgs(args);

            InvokeWetStrokeStopping(updateArgs);

            UpdateEventArgs(args, updateArgs);
        }
 private void CoreWetStrokeUpdateSource_WetStrokeContinuing(CoreWetStrokeUpdateSource sender, CoreWetStrokeUpdateEventArgs args)
 {
     if (followCircle)
     {
         HandleFollowCircleInput(args);
     }
     else
     {
         HandleRegularInput(args);
     }
 }
 private void CoreWetStrokeUpdateSource_WetStrokeStarting(CoreWetStrokeUpdateSource sender, CoreWetStrokeUpdateEventArgs args)
 {
     followCircle = disableFollowCircle ? false : FollowCircleTest(args);
     if (followCircle)
     {
         HandleFollowCircleInput(args);
     }
     else
     {
         disableFollowCircle = true;
         HandleRegularInput(args);
     }
 }
        void OnStrokeStarting(CoreWetStrokeUpdateSource sender, CoreWetStrokeUpdateEventArgs args)
        {
            // as the stroke is starting, reset our member variables which store
            // which X or Y point we want to snap to.
            this.snapX = this.snapY = null;

            // I am assuming that we do get a first ink point.
            InkPoint firstPoint = args.NewInkPoints.First();

            // now decide whether we need to set up a snap point for the X value or
            // one for the Y value.
            if (this.currentMode == Mode.SnapX)
            {
                this.snapX = this.NearestGridSizeMultiple(firstPoint.Position.X);
            }
            else if (this.currentMode == Mode.SnapY)
            {
                this.snapY = this.NearestGridSizeMultiple(firstPoint.Position.Y);
            }
            this.SnapPoints(args.NewInkPoints);
        }
Exemple #9
0
        private void HandleFollowCircleInput(CoreWetStrokeUpdateEventArgs args)
        {
            if (!discontinueStroke)
            {
                for (int i = 0; i < args.NewInkPoints.Count; i++)
                {
                    var position           = args.NewInkPoints[i].Position;
                    var distanceFromCenter = DistanceFromCenter(position);

                    if (InCircleEdgeZone(distanceFromCenter))
                    {
                        // Calculate position of new InkPoint so that it lies on the edge of the circle
                        var   radians     = Math.Atan2(position.Y - circleCenter.Y, position.X - circleCenter.X);
                        var   totalRadius = (radius + circleStrokeThickness / 2.0f + penSize / 2.0f);
                        Point newPoint    = new Point((Math.Cos(radians) * totalRadius) + circleCenter.X, (Math.Sin(radians) * totalRadius) + circleCenter.Y);

                        args.NewInkPoints[i] = new InkPoint(newPoint, 0.5f);
                    }
                    else
                    {
                        // InkPoint is not in the follow circle zone, add no more InkPoints to Stroke
                        discontinueStroke = true;

                        for (int j = args.NewInkPoints.Count - 1; j >= i; j--)
                        {
                            args.NewInkPoints.RemoveAt(j);
                        }
                        break;
                    }
                }
            }
            else
            {
                // Stroke has been discontinued, remove all InkPoints
                for (int j = args.NewInkPoints.Count - 1; j >= 0; j--)
                {
                    args.NewInkPoints.RemoveAt(j);
                }
            }
        }
Exemple #10
0
        private void HandleRegularInput(CoreWetStrokeUpdateEventArgs args)
        {
            for (int i = 0; i < args.NewInkPoints.Count; i++)
            {
                var position           = args.NewInkPoints[i].Position;
                var distanceFromCenter = DistanceFromCenter(position);

                if (distanceFromCenter < radius + circleStrokeThickness / 2 + penSize / 2)
                {
                    // Ink input entered the circle. Handle this by removing remaining InkPoints
                    // and completing the stroke.

                    for (int j = args.NewInkPoints.Count - 1; j >= i; j--)
                    {
                        args.NewInkPoints.RemoveAt(j);
                    }

                    args.Disposition = CoreWetStrokeDisposition.Completed;
                    break;
                }
            }
        }
 private void CoreWetStrokeUpdateSource_WetStrokeCanceled(CoreWetStrokeUpdateSource sender, CoreWetStrokeUpdateEventArgs args)
 {
     followCircle = false;
     discontinueStroke = false;
     disableFollowCircle = false;
 }
Exemple #12
0
 private void CoreWetStrokeUpdateSource_WetStrokeCanceled(CoreWetStrokeUpdateSource sender, CoreWetStrokeUpdateEventArgs args)
 {
     followCircle        = false;
     discontinueStroke   = false;
     disableFollowCircle = false;
 }
Exemple #13
0
        private void CoreWetStrokeUpdateSource_WetStrokeStopping(CoreWetStrokeUpdateSource sender, CoreWetStrokeUpdateEventArgs args)
        {
            if (followCircle)
            {
                HandleFollowCircleInput(args);
            }
            else
            {
                HandleRegularInput(args);
            }

            disableFollowCircle = false;
        }
Exemple #14
0
 private void CoreWetStrokeUpdateSource_WetStrokeContinuing(CoreWetStrokeUpdateSource sender, CoreWetStrokeUpdateEventArgs args)
 {
     if (followCircle)
     {
         HandleFollowCircleInput(args);
     }
     else
     {
         HandleRegularInput(args);
     }
 }
 void OnStrokeContinuing(CoreWetStrokeUpdateSource sender, CoreWetStrokeUpdateEventArgs args)
 {
     this.SnapPoints(args.NewInkPoints);
 }
        private void CoreWetStrokeUpdateSource_WetStrokeStopping(CoreWetStrokeUpdateSource sender, CoreWetStrokeUpdateEventArgs args)
        {
            if (followCircle)
            {
                HandleFollowCircleInput(args);
            }
            else
            {
                HandleRegularInput(args);
            }

            disableFollowCircle = false;
        }
        private void coreWetStrokeUpdateSource_StrokeStopping(CoreWetStrokeUpdateSource sender, CoreWetStrokeUpdateEventArgs args)
        {
            if (args.NewInkPoints.Count > 0)
            {
                InkPoint firstPoint = args.NewInkPoints.First();
                Point    p          = new Point()
                {
                    X = firstPoint.Position.X, Y = firstPoint.Position.Y
                };
                if (GeometryHelper.PointIsInPolygon(P1, P2, P3, p) == true)
                {
                    IsInkSpace       = false;
                    Snap             = false;
                    args.Disposition = CoreWetStrokeDisposition.Completed;
                }
            }

            if (Snap == true)
            {
                this.SnapPoints(args.NewInkPoints);
            }
            else if (IsInkSpace == false)
            {
                args.NewInkPoints.Clear();
            }
            SaveNecessity = true;
        }
        private void HandleRegularInput(CoreWetStrokeUpdateEventArgs args)
        {
            for (int i = 0; i < args.NewInkPoints.Count; i++)
            {
                var position = args.NewInkPoints[i].Position;
                var distanceFromCenter = DistanceFromCenter(position);

                if (distanceFromCenter < radius + circleStrokeThickness / 2 + penSize / 2)
                {
                    // Ink input entered the circle. Handle this by removing remaining InkPoints
                    // and completing the stroke.

                    for (int j = args.NewInkPoints.Count - 1; j >= i; j--)
                    {
                        args.NewInkPoints.RemoveAt(j);
                    }

                    args.Disposition = CoreWetStrokeDisposition.Completed;
                    break;
                }
            }
        }
        private void HandleFollowCircleInput(CoreWetStrokeUpdateEventArgs args)
        {
            if (!discontinueStroke)
            {
                for (int i = 0; i < args.NewInkPoints.Count; i++)
                {
                    var position = args.NewInkPoints[i].Position;
                    var distanceFromCenter = DistanceFromCenter(position);

                    if (InCircleEdgeZone(distanceFromCenter))
                    {
                        // Calculate position of new InkPoint so that it lies on the edge of the circle
                        var radians = Math.Atan2(position.Y - circleCenter.Y, position.X - circleCenter.X);
                        var totalRadius = (radius + circleStrokeThickness / 2.0f + penSize / 2.0f);
                        Point newPoint = new Point((Math.Cos(radians) * totalRadius) + circleCenter.X, (Math.Sin(radians) * totalRadius) + circleCenter.Y);

                        args.NewInkPoints[i] = new InkPoint(newPoint, 0.5f);
                    }
                    else
                    {
                        // InkPoint is not in the follow circle zone, add no more InkPoints to Stroke
                        discontinueStroke = true;

                        for (int j = args.NewInkPoints.Count - 1; j >= i; j--)
                        {
                            args.NewInkPoints.RemoveAt(j);
                        }
                        break;
                    }
                }
            }
            else
            {
                // Stroke has been discontinued, remove all InkPoints
                for (int j = args.NewInkPoints.Count - 1; j >= 0; j--)
                {
                    args.NewInkPoints.RemoveAt(j);
                }
            }
        }
        private bool FollowCircleTest(CoreWetStrokeUpdateEventArgs args)
        {
            var position = args.NewInkPoints[0].Position;
            var distanceFromCenter = DistanceFromCenter(position);

            return InCircleEdgeZone(distanceFromCenter);
        }
Exemple #21
0
 private void CoreWetStrokeUpdateSource_WetStrokeStarting(CoreWetStrokeUpdateSource sender, CoreWetStrokeUpdateEventArgs args)
 {
     followCircle = disableFollowCircle ? false : FollowCircleTest(args);
     if (followCircle)
     {
         HandleFollowCircleInput(args);
     }
     else
     {
         disableFollowCircle = true;
         HandleRegularInput(args);
     }
 }
        private void coreWetStrokeUpdateSource_StrokeStarting(CoreWetStrokeUpdateSource sender, CoreWetStrokeUpdateEventArgs args)
        {
            InkPoint firstPoint = args.NewInkPoints.First();
            Point    p          = new Point()
            {
                X = firstPoint.Position.X, Y = firstPoint.Position.Y
            };

            if (GeometryHelper.MinimalDistanceToGeodreieck(P1, P2, P3, p) <= 72)
            {
                Snap       = true;
                IsInkSpace = true;
                this.SnapPoints(args.NewInkPoints);
            }
            else if (GeometryHelper.PointIsInPolygon(P1, P2, P3, p) == true)
            {
                IsInkSpace = false;
                Snap       = false;
                args.NewInkPoints.Clear();
            }
            else
            {
                IsInkSpace = true;
                Snap       = false;
            }
            SaveNecessity = true;
        }