Example #1
0
 private void OnQueryInteractionStatus(object sender, QueryInteractionStatusEventArgs queryInteractionStatusEventArgs)
 {
     if (this.Equals(queryInteractionStatusEventArgs.HandPointer.Captured))
     {
         queryInteractionStatusEventArgs.IsInGripInteraction = this.lastGripState == GripState.Gripped;
         queryInteractionStatusEventArgs.Handled             = true;
     }
 }
        private void OnQuery(object sender, QueryInteractionStatusEventArgs handPointerEventArgs)
        {

            //If a grip detected change the cursor image to grip
            if (handPointerEventArgs.HandPointer.HandEventType == HandEventType.Grip)
            {
                isGripinInteraction = true;
                handPointerEventArgs.IsInGripInteraction = true;
            }

           //If Grip Release detected change the cursor image to open
            else if (handPointerEventArgs.HandPointer.HandEventType == HandEventType.GripRelease)
            {
                isGripinInteraction = false;
                handPointerEventArgs.IsInGripInteraction = false;
            }

            //If no change in state do not change the cursor
            else if (handPointerEventArgs.HandPointer.HandEventType == HandEventType.None)
            {
                handPointerEventArgs.IsInGripInteraction = isGripinInteraction;
            }

            handPointerEventArgs.Handled = true;
        }
 private void OnQueryInteractionStatus(object sender, QueryInteractionStatusEventArgs queryInteractionStatusEventArgs)
 {
     if (this.Equals(queryInteractionStatusEventArgs.HandPointer.Captured))
     {
         queryInteractionStatusEventArgs.IsInGripInteraction = this.lastGripState == GripState.Gripped;
         queryInteractionStatusEventArgs.Handled = true;
     }
 }
        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);
            }
        }
Example #5
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 OnQuery(object sender, QueryInteractionStatusEventArgs e)
 {
     switch (e.HandPointer.HandEventType)
     {
         case HandEventType.Grip:
             _isInGripInteraction = true;
             e.IsInGripInteraction = true;
             break;
         case HandEventType.GripRelease:
             _isInGripInteraction = false;
             e.IsInGripInteraction = false;
             break;
         case HandEventType.None:
             e.IsInGripInteraction = _isInGripInteraction;
             break;
     }
     e.Handled = true;
 }