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); } }
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); }