Пример #1
0
 void HandleDifferentTarget(FrameworkElement hitTarget)
 {
     Debug.Assert(hitTarget != null);
     _gazeMouseState = GazeMouseState.MouseEnter;
     //_trace.TraceInformation("ENTER hit target: {0}", hitTarget);
     if (_hitTarget != _offScreenElement)
     {
         GoToState(_hitTarget, ButtonState.Inactive, false);
     }
 }
Пример #2
0
        bool HandleSameTarget(GazeEventArgs e, FrameworkElement hitTarget, long elapsed)
        {
            bool invokeTarget = false;

            Debug.Assert(hitTarget != null);

            GazeClickParameters clickParams;

            if (hitTarget == _offScreenElement)
            {
                clickParams = _offScreenElementClickParams;
            }
            else if (_getGazeClickParams != null)
            {
                clickParams = _getGazeClickParams(hitTarget);
            }
            else
            {
                clickParams = _defaultClickParams;
            }

            //_trace.TraceInformation("ClickParameters: {0}, Elapsed: {1}", clickParams, elapsed);

            AdjustHistorySampleTime(clickParams);

            GazeMouseState oldState = _gazeMouseState;

            switch (_gazeMouseState)
            {
            case GazeMouseState.MouseEnter:
                if (elapsed >= clickParams.MouseDownDelay)
                {
                    _gazeMouseState = GazeMouseState.MouseDown;
                    GoToStateNearClick(hitTarget, elapsed, clickParams.MouseDownDelay, clickParams.MouseUpDelay);
                }
                break;

            case GazeMouseState.MouseDown:
                if (elapsed >= clickParams.MouseUpDelay)
                {
                    GoToState(hitTarget, ButtonState.Active, true);
                    _gazeMouseState = GazeMouseState.MouseUp;
                    invokeTarget    = true;
                }
                else
                {
                    GoToStateNearClick(hitTarget, elapsed, clickParams.MouseDownDelay, clickParams.MouseUpDelay);
                }
                break;

            case GazeMouseState.MouseUp:
                if (elapsed >= clickParams.RepeatMouseDownDelay)
                {
                    _gazeMouseState = GazeMouseState.RepeatMouseUp;
                    // The history needs to be reset to ensure proper handling of
                    // mousedown/mouseup logic after the RepeatMouseDownDelay
                    ResetHistory();
                }
                break;

            case GazeMouseState.RepeatMouseUp:
                if (elapsed >= clickParams.MouseDownDelay)
                {
                    _gazeMouseState = GazeMouseState.RepeatMouseDown;
                    GoToStateNearClick(hitTarget, elapsed, clickParams.MouseDownDelay, clickParams.MouseUpDelay);
                }
                break;

            case GazeMouseState.RepeatMouseDown:
                if (elapsed >= clickParams.MouseUpDelay)
                {
                    GoToState(hitTarget, ButtonState.Active, true);
                    _gazeMouseState = GazeMouseState.RepeatMouseUp;
                    invokeTarget    = true;
                    ResetHistory();
                }
                else
                {
                    GoToStateNearClick(hitTarget, elapsed, clickParams.MouseDownDelay, clickParams.MouseUpDelay);
                }
                break;

            default:
                Debug.Assert(false);
                break;
            }

            //_trace.TraceInformation("GazeMouseState: Old={0}, New={1}, hitTarget={2}", oldState, _gazeMouseState, hitTarget);
            return(invokeTarget);
        }