internal bool RaiseProgressFeedback(object sender, DwellProgressState state, TimeSpan elapsedTime, TimeSpan triggerTime) { var args = new DwellProgressEventArgs(state, elapsedTime, triggerTime); DwellProgressFeedback?.Invoke(sender, args); return(args.Handled); }
internal void SetState(DwellProgressState state, double feedbackProgress) { switch (state) { case DwellProgressState.Fixating: TheBorder.Margin = new Thickness(0); TheBorder.BorderBrush = null; break; case DwellProgressState.Progressing: var rangedProgress = Math.Max(0, Math.Min(1, feedbackProgress)) / 2.0; var horizontalMargin = rangedProgress * TheGrid.ActualWidth; var verticalMargin = rangedProgress * TheGrid.ActualHeight; TheBorder.Margin = new Thickness(horizontalMargin, verticalMargin, horizontalMargin, verticalMargin); TheBorder.BorderBrush = _brushProgressing; break; case DwellProgressState.Complete: TheBorder.Margin = new Thickness(0); TheBorder.BorderBrush = _brushComplete; break; case DwellProgressState.Idle: Debug.Fail("Higher authority shold deal with idle"); break; } }
internal void RaiseProgressEvent(DwellProgressState state) { if (_notifiedProgressState != state || state == DwellProgressState.Progressing) { var feedbackProgress = state == DwellProgressState.Progressing ? ((double)(ElapsedTime - _prevStateTime).Ticks) / (_nextStateTime - _prevStateTime).Ticks : 0.0; ShowFeedback(state, feedbackProgress); } _notifiedProgressState = state; }
protected override void ShowFeedback(DwellProgressState state, double progress) { if (state != DwellProgressState.Idle) { if (_feedbackPopup == null) { _feedbackPopup = GetFeedbackControl(); } _feedbackPopup.SetState(state, progress); } else { if (_feedbackPopup != null) { GazeInput.GazeFeedbackPopupFactory.Return(_feedbackPopup); _feedbackPopup = null; } } }
protected override void ShowFeedback(DwellProgressState state, double progress) { }
private void RaiseProgressEvent(DwellProgressState state) { // TODO: We should eliminate non-invokable controls before we arrive here! if (TargetElement is Page) { return; } if (_notifiedProgressState != state || state == DwellProgressState.Progressing) { var handled = false; var gazeElement = GazeInput.GetGazeElement(TargetElement); if (gazeElement != null) { handled = gazeElement.RaiseProgressFeedback(TargetElement, state, ElapsedTime - _prevStateTime, _nextStateTime - _prevStateTime); } if (!handled && state != DwellProgressState.Idle) { if (_feedbackPopup == null) { _feedbackPopup = GazePointer.Instance.GazeFeedbackPopupFactory.Get(); } var control = TargetElement as FrameworkElement; var transform = control.TransformToVisual(_feedbackPopup); var bounds = transform.TransformBounds(new Rect( new Point(0, 0), new Size((float)control.ActualWidth, (float)control.ActualHeight))); var rectangle = (Windows.UI.Xaml.Shapes.Rectangle)_feedbackPopup.Child; if (state == DwellProgressState.Progressing) { var progress = ((double)(ElapsedTime - _prevStateTime).Ticks) / (_nextStateTime - _prevStateTime).Ticks; if (progress >= 0 && progress < 1) { rectangle.Stroke = GazeInput.DwellFeedbackProgressBrush; rectangle.Width = (1 - progress) * bounds.Width; rectangle.Height = (1 - progress) * bounds.Height; _feedbackPopup.HorizontalOffset = bounds.Left + (progress * bounds.Width / 2); _feedbackPopup.VerticalOffset = bounds.Top + (progress * bounds.Height / 2); } } else { rectangle.Stroke = state == DwellProgressState.Fixating ? GazeInput.DwellFeedbackEnterBrush : GazeInput.DwellFeedbackCompleteBrush; rectangle.Width = bounds.Width; rectangle.Height = bounds.Height; _feedbackPopup.HorizontalOffset = bounds.Left; _feedbackPopup.VerticalOffset = bounds.Top; } _feedbackPopup.IsOpen = true; } else { if (_feedbackPopup != null) { GazePointer.Instance.GazeFeedbackPopupFactory.Return(_feedbackPopup); _feedbackPopup = null; } } } _notifiedProgressState = state; }
protected abstract void ShowFeedback(DwellProgressState state, double progress);
internal DwellProgressEventArgs(DwellProgressState state, TimeSpan elapsedDuration, TimeSpan triggerDuration) { State = state; Progress = ((double)elapsedDuration.Ticks) / triggerDuration.Ticks; }