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); } }
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(); }
public void SetTarget(GazeTargetItem target) { Debug.Assert(_target == null); _target = target; }