예제 #1
0
        void GazeDataHandler(GazeEventArgs gazeEventArgs)
        {
            FrameworkElement hitTarget = null;
            long             elapsedTime;

            _idleDetector.Tick();

            if (!VerifyWindowContext())
            {
                return;
            }

            // if logging is turned on, log the original data, not the filtered data
            if ((_sensorSettings.Sensor != Sensors.Sensors.LogPlayback) && (_loggingSettings.LogGazeData))
            {
                _logFilter.Update(gazeEventArgs);
            }

            GazeEventArgs ev = _xyFilter.Update(gazeEventArgs);

            UpdateCursorPosition(ev.Screen);

            if ((hitTarget = GetHitTargetWithMaxTime(ev, out elapsedTime)) == null)
            {
                return;
            }

            bool invokeTarget = false;

            if (hitTarget == _hitTarget)
            {
                invokeTarget = HandleSameTarget(ev, hitTarget, elapsedTime);
            }
            else
            {
                HandleDifferentTarget(hitTarget);
            }

            if (invokeTarget)
            {
                InvokeTarget(hitTarget);
            }

            _hitTarget = hitTarget;

            if (_hitTarget != _offScreenElement)
            {
                FireEyesOn();
            }
        }