/// <summary> /// /// </summary> public SettingsWindow() { var onlyMouseUpDelay = (AppSettings.Instance.Keyboard.GazeClickDelay - GazeMouse.DefaultMouseDownDelay); var clickDelay = (uint)AppSettings.Instance.Keyboard.GazeClickDelay; var repeatMouseDownDelay = (uint)(clickDelay + onlyMouseUpDelay); defaultClickParams = new GazeClickParameters() { MouseDownDelay = GazeMouse.DefaultMouseDownDelay, MouseUpDelay = clickDelay, RepeatMouseDownDelay = repeatMouseDownDelay }; calibrateClickParams = new GazeClickParameters { MouseDownDelay = GazeMouse.DefaultMouseDownDelay, MouseUpDelay = clickDelay, RepeatMouseDownDelay = uint.MaxValue }; exitClickParams = new GazeClickParameters { MouseDownDelay = GazeMouse.DefaultMouseDownDelay, MouseUpDelay = uint.MaxValue, RepeatMouseDownDelay = uint.MaxValue }; ResetSettingsCommand = new RelayCommand((p) => { AppSettings.Store.Reset(); }); CloseSettingsCommand = new RelayCommand((p) => { AppSettings.Store.Save(); Close(); }); InitializeComponent(); Loaded += SettingsWindow_Loaded; Unloaded += (s, e) => Owner.IsEnabled = true; }
GazeClickParameters GetGazeClickParameters(FrameworkElement element) { var clickParams = new GazeClickParameters { MouseDownDelay = GazeMouse.DefaultMouseDownDelay }; // Look for an ancestor that implements IGazeTarget. var walker = element; var target = element as IGazeTarget; while (target == null && walker != null) { walker = VisualTreeHelper.GetParent(walker) as FrameworkElement; target = walker as IGazeTarget; } // If we don't have a IGazeTarget ancestor... if (target == null) { // ...use the default delays multiplied by attached properties (defaults are 1 and 0). var multiplier = Controls.HandsFree.GetMultiplier(element); var repeatMultiplier = Controls.HandsFree.GetRepeatMultiplier(element); clickParams.MouseUpDelay = (uint)(clickParams.MouseDownDelay + Math.Round(multiplier * (AppSettings.Instance.Keyboard.GazeClickDelay - GazeMouse.DefaultMouseDownDelay))); clickParams.RepeatMouseDownDelay = double.IsNaN(repeatMultiplier) ? uint.MaxValue : (uint)(repeatMultiplier * (AppSettings.Instance.Keyboard.GazeClickDelay - GazeMouse.DefaultMouseDownDelay)); } else { // Get the keystrokes we're likely to send. var sendKeys = NormalizedSendKeys(target.SendKeys); // If we have keystrokes and they're known from the the predictor... double probability; if (sendKeys != null && _sendKeysProbabilities.TryGetValue(sendKeys, out probability)) { // ...use the probability to select the delay... var delay = GetMouseUpDelayFromProbability(probability); clickParams.MouseUpDelay = (uint)(clickParams.MouseDownDelay + Math.Round(target.Multiplier * delay)); clickParams.RepeatMouseDownDelay = AppSettings.Instance.Keyboard.IsNoAlphaAutorepeat ? uint.MaxValue : (uint)(clickParams.MouseUpDelay + (AppSettings.Instance.Keyboard.GazeClickDelay - GazeMouse.DefaultMouseDownDelay)); } else { // ...otherwise use the default delay. var delay = AppSettings.Instance.Keyboard.GazeClickDelay - GazeMouse.DefaultMouseDownDelay; clickParams.MouseUpDelay = (uint)(clickParams.MouseDownDelay + Math.Round(target.Multiplier * delay)); clickParams.RepeatMouseDownDelay = double.IsNaN(target.RepeatMultiplier) ? uint.MaxValue : (uint)(clickParams.MouseUpDelay + target.RepeatMultiplier * (AppSettings.Instance.Keyboard.GazeClickDelay - GazeMouse.DefaultMouseDownDelay)); } } return(clickParams); }
public MainWindow() { InitializeComponent(); Loaded += MainWindow_Loaded; Closed += MainWindow_Closed; Activated += MainWindow_Activated; Deactivated += MainWindow_Deactivated; SystemEvents.SessionSwitch += (s, e) => { _trace.TraceEvent(TraceEventType.Information, 0, "Session switching occuring"); MainWindow_Deactivated(s, e); }; _eyesOffStopTimer = new DispatcherTimer( TimeSpan.FromMilliseconds(250), DispatcherPriority.Normal, (sender, args) => { _trace.TraceEvent(TraceEventType.Information, 0, "Eyes Off, stopped"); Stop(); _eyesOffStopTimer.Stop(); }, Dispatcher); _quickClickParams = new GazeClickParameters { MouseDownDelay = 99, MouseUpDelay = 100, RepeatMouseDownDelay = uint.MaxValue }; _delayedClickParams = new GazeClickParameters { MouseDownDelay = 100, MouseUpDelay = 1000, RepeatMouseDownDelay = uint.MaxValue }; VisualStateManager.GoToElementState(Canvas, DriveStates.Stopped.ToString(), true); }