private void ActivateGazeTargetItem(GazeTargetItem target)
        {
            if (_activeHitTargetTimes.IndexOf(target) == -1)
            {
                _activeHitTargetTimes.Add(target);

                // calculate the time that the first DwellRepeat needs to be fired after. this will be updated every time a DwellRepeat is
                // fired to keep track of when the next one is to be fired after that.
                var nextStateTime = GetElementStateDelay(target.TargetElement, PointerState.Enter);

                target.Reset(nextStateTime);
            }
        }
Пример #2
0
        private GazeTargetItem TryCreateElementToTargetItem(UIElement element)
        {
            GazeTargetItem item = default;

            using (var enumerator = _elementToTargetItemFactories.GetEnumerator())
            {
                while (item == null && enumerator.MoveNext())
                {
                    var factory = enumerator.Current;
                    item = factory(element);
                }
            }

            return(item);
        }
        /*
         * private const string[] pointerStates =
         * {
         *  "Exit",
         *  "PreEnter",
         *  "Enter",
         *  "Fixation",
         *  "Dwel",
         *  "DwellRepeat"
         * };
         */

        private void RaiseGazePointerEvent(GazeTargetItem target, PointerState state, TimeSpan elapsedTime)
        {
            var control = target?.TargetElement;

            // assert(target != _rootElement);
            var gpea = new StateChangedEventArgs(control, state, elapsedTime);

            /*
             * if (control is Button buttonObj && buttonObj.Content != null)
             * {
             *     var buttonText = buttonObj.Content as string;
             *     Debug.WriteLine("GPE: {0} . {1}, {2}", buttonText, PointerStates[(int)state], elapsedTime);
             * }
             * else
             * {
             *     Debug.WriteLine("GPE: 0x%08x . %s, %d", target != null ? target.GetHashCode() : 0, PointerStates[(int)state], elapsedTime);
             * }
             */

            var gazeElement = target != null?GazeInput.GetGazeElement(control) : null;

            if (gazeElement != null)
            {
                gazeElement.RaiseStateChanged(control, gpea);
            }

            if (state == PointerState.Dwell)
            {
                var handled = false;

                if (gazeElement != null)
                {
                    var args = new DwellInvokedRoutedEventArgs();
                    gazeElement.RaiseInvoked(control, args);
                    handled = args.Handled;
                }

                if (!handled)
                {
                    target.Invoke();
                }
            }
        }
        private GazeTargetItem GetHitTarget(Point gazePoint)
        {
            GazeTargetItem invokable = null;

            if (!IsAlwaysActivated)
            {
                invokable = NonInvokeGazeTargetItem;
            }

            switch (Window.Current.CoreWindow.ActivationMode)
            {
            case CoreWindowActivationMode.ActivatedInForeground:
            case CoreWindowActivationMode.ActivatedNotForeground:
                var elements = VisualTreeHelper.FindElementsInHostCoordinates(gazePoint, null, false);
                var element  = elements.FirstOrDefault();

                invokable = null;

                if (element != null)
                {
                    invokable = GazeTargetItem.GetOrCreate(element);

                    while (element != null && !invokable.IsInvokable)
                    {
                        element = VisualTreeHelper.GetParent(element) as UIElement;

                        if (element != null)
                        {
                            invokable = GazeTargetItem.GetOrCreate(element);
                        }
                    }
                }

                if (element == null || !invokable.IsInvokable)
                {
                    invokable = NonInvokeGazeTargetItem;
                }
                else
                {
                    Interaction interaction;
                    do
                    {
                        interaction = GazeInput.GetInteraction(element);
                        if (interaction == Interaction.Inherited)
                        {
                            element = GetInheritenceParent(element);
                        }
                    }while (interaction == Interaction.Inherited && element != null);

                    if (interaction == Interaction.Inherited)
                    {
                        interaction = GazeInput.Interaction;
                    }

                    if (interaction != Interaction.Enabled)
                    {
                        invokable = NonInvokeGazeTargetItem;
                    }
                }

                break;
            }

            return(invokable);
        }
        /// <summary>
        /// Invoke the default action of the specified UIElement.
        /// </summary>
        public static void Invoke(UIElement element)
        {
            var item = GazeTargetItem.GetOrCreate(element);

            item.Invoke();
        }
Пример #6
0
 public void SetTarget(GazeTargetItem target)
 {
     Debug.Assert(_target == null);
     _target = target;
 }