Beispiel #1
0
        private void HandleHandPointerGrip(HandPointer handPointer)
        {
            if (handPointer == null)
            {
                return;
            }

            if (this.capturedHandPointer != handPointer)
            {
                if (handPointer.Captured == null)
                {
                    // Only capture hand pointer if it isn't already captured
                    handPointer.Capture(this);
                }
                else
                {
                    // Some other control has capture, ignore grip
                    return;
                }
            }

            this.lastGripState     = GripState.Gripped;
            this.lastGripTimeStamp = handPointer.TimestampOfLastUpdate;
            this.scrollViewerInertiaScroller.Stop();
            this.gripPoint            = handPointer.GetPosition(this);
            this.startingScrollOffset = new Point(this.HorizontalOffset, this.VerticalOffset);
        }
        private void HandleHandPointerGrip(HandPointer handPointer)
        {
            if (handPointer == null)
            {
                return;
            }

            if (this.capturedHandPointer != handPointer)
            {
                if (handPointer.Captured == null)
                {
                    // Only capture hand pointer if it isn't already captured
                    handPointer.Capture(this);
                }
                else
                {
                    // Some other control has capture, ignore grip
                    return;
                }
            }

            this.lastGripState = GripState.Gripped;
            this.lastGripTimeStamp = handPointer.TimestampOfLastUpdate;
            this.scrollViewerInertiaScroller.Stop();
            this.gripPoint = handPointer.GetPosition(this);
            this.startingScrollOffset = new Point(this.HorizontalOffset, this.VerticalOffset);
        }
 /// <summary>
 /// Check the position of the hand on the Y-axis to determine what track it is over
 /// </summary>
 /// <param name="handPointer">A Kinect.Toolkit.Controls.HandPointer object</param>
 /// <returns>The track number</returns>
 public int CheckHandForTrack(HandPointer handPointer)
 {
     double y = handPointer.GetPosition(tracksUI).Y;
     int trackSelected = (int)y / 101;
     return trackSelected;
 }
 /// <summary>
 /// Check the position of the hand on the X-axis to determine what slot it is over
 /// </summary>
 /// <param name="hand">A Kinect.Toolkit.Controls.HandPointer object</param>
 /// <returns>The slot number</returns>
 public int CheckHandForSlot(HandPointer hand)
 {
     double x = hand.GetPosition(tracksUI).X;
     int slot = (int)x / 101;
     return slot;
 }
        private void HandleHandPointerChanges(
            HandPointer handPointer, bool pressedChanged, bool positionChanged, bool primaryHandOfPrimaryUserChanged, bool removed)
        {
            bool doPress = false;
            bool doRelease = false;
            bool doMove = false;
            bool doLostCapture = false;
            bool doGrip = false;
            bool doGripRelease = false;

            if (removed)
            {
                // Deny the existence of this hand pointer
                doRelease = handPointer.IsPressed;
                doLostCapture = handPointer.Captured != null;
            }
            else
            {
                if (pressedChanged)
                {
                    doPress = handPointer.IsPressed;
                    doRelease = !handPointer.IsPressed;
                }

                if (positionChanged)
                {
                    doMove = true;
                }

                doGrip = handPointer.HandEventType == HandEventType.Grip;
                doGripRelease = handPointer.HandEventType == HandEventType.GripRelease;
            }

            if (doLostCapture)
            {
                SwitchCapture(handPointer, handPointer.Captured, null);
            }

            var targetElement = handPointer.Captured;
            if (targetElement == null)
            {
                var position = handPointer.GetPosition(this.InteractionRootElement);
                targetElement = this.HitTest(position);
            }

            // Update internal enter/leave state
            HashSet<UIElement> oldIntersectingElements;
            this.UpdateIntersections(handPointer, removed ? null : targetElement, out oldIntersectingElements);

            // See if this hand pointer is participating in a grip-initiated
            // interaction.
            var newIsInGripInteraction = false;
            if (targetElement != null)
            {
                var args = new QueryInteractionStatusEventArgs(handPointer, this.InteractionRootElement);
                targetElement.RaiseEvent(args);

                if (args.Handled && args.IsInGripInteraction)
                {
                    newIsInGripInteraction = true;
                }
            }

            handPointer.IsInGripInteraction = newIsInGripInteraction;

            //// After this point there should be no more changes to the internal
            //// state of the handPointers.  We don't want event handlers calling us
            //// when our internal state is inconsistent.

            DoIntersectionNotifications(handPointer, primaryHandOfPrimaryUserChanged, oldIntersectingElements);

            if (targetElement == null)
            {
                return;
            }

            if (doGrip)
            {
                var args = CreateEventArgs(KinectRegion.HandPointerGripEvent, targetElement, handPointer);
                targetElement.RaiseEvent(args);
            }

            if (doGripRelease)
            {
                var args = CreateEventArgs(KinectRegion.HandPointerGripReleaseEvent, targetElement, handPointer);
                targetElement.RaiseEvent(args);
            }

            if (doPress)
            {
                var args = CreateEventArgs(KinectRegion.HandPointerPressEvent, targetElement, handPointer);
                targetElement.RaiseEvent(args);
            }

            if (doMove)
            {
                var args = CreateEventArgs(KinectRegion.HandPointerMoveEvent, targetElement, handPointer);
                targetElement.RaiseEvent(args);
            }

            if (doRelease)
            {
                var args = CreateEventArgs(KinectRegion.HandPointerPressReleaseEvent, targetElement, handPointer);
                targetElement.RaiseEvent(args);
            }
        }
Beispiel #6
0
        private void HandleHandPointerChanges(
            HandPointer handPointer, bool pressedChanged, bool positionChanged, bool primaryHandOfPrimaryUserChanged, bool removed)
        {
            bool doPress       = false;
            bool doRelease     = false;
            bool doMove        = false;
            bool doLostCapture = false;
            bool doGrip        = false;
            bool doGripRelease = false;

            // bool doSwipe = false;

            if (removed)
            {
                // Deny the existence of this hand pointer
                doRelease     = handPointer.IsPressed;
                doLostCapture = handPointer.Captured != null;
            }
            else
            {
                if (pressedChanged)
                {
                    doPress   = handPointer.IsPressed;
                    doRelease = !handPointer.IsPressed;
                }

                if (positionChanged)
                {
                    doMove = true;
                }

                doGrip        = handPointer.HandEventType == HandEventType.Grip;
                doGripRelease = handPointer.HandEventType == HandEventType.GripRelease;
            }

            if (doLostCapture)
            {
                SwitchCapture(handPointer, handPointer.Captured, null);
            }

            var targetElement = handPointer.Captured;

            if (targetElement == null)
            {
                var position = handPointer.GetPosition(this.InteractionRootElement);
                targetElement = this.HitTest(position);
            }

            // Update internal enter/leave state
            HashSet <UIElement> oldIntersectingElements;

            this.UpdateIntersections(handPointer, removed ? null : targetElement, out oldIntersectingElements);

            // See if this hand pointer is participating in a grip-initiated
            // interaction.
            var newIsInGripInteraction = false;

            if (targetElement != null)
            {
                var args = new QueryInteractionStatusEventArgs(handPointer, this.InteractionRootElement);
                targetElement.RaiseEvent(args);

                if (args.Handled && args.IsInGripInteraction)
                {
                    newIsInGripInteraction = true;
                }
            }

            handPointer.IsInGripInteraction = newIsInGripInteraction;

            //// After this point there should be no more changes to the internal
            //// state of the handPointers.  We don't want event handlers calling us
            //// when our internal state is inconsistent.

            DoIntersectionNotifications(handPointer, primaryHandOfPrimaryUserChanged, oldIntersectingElements);

            if (targetElement == null)
            {
                return;
            }

            if (doGrip)
            {
                var args = CreateEventArgs(KinectRegion.HandPointerGripEvent, targetElement, handPointer);
                targetElement.RaiseEvent(args);
            }

            if (doGripRelease)
            {
                var args = CreateEventArgs(KinectRegion.HandPointerGripReleaseEvent, targetElement, handPointer);
                targetElement.RaiseEvent(args);
            }

            if (doPress)
            {
                var args = CreateEventArgs(KinectRegion.HandPointerPressEvent, targetElement, handPointer);
                targetElement.RaiseEvent(args);
            }

            if (doMove)
            {
                var args = CreateEventArgs(KinectRegion.HandPointerMoveEvent, targetElement, handPointer);
                targetElement.RaiseEvent(args);
            }

            if (doRelease)
            {
                var args = CreateEventArgs(KinectRegion.HandPointerPressReleaseEvent, targetElement, handPointer);
                targetElement.RaiseEvent(args);
            }
        }
        private void HandleHandPointerGrip(HandPointer handPointer)
        {
            if (handPointer == null)
            {
                return;
            }

            if (this.capturedHandPointer != handPointer)
            {
                if (handPointer.Captured == null)
                {
                    handPointer.Capture(element);
                }
                else
                {
                    return;
                }
            }

            this.lastGripStatus = GripState.Gripped;
            this.gripPoint = handPointer.GetPosition(element);
        }