Example #1
0
        void MoveUpdater_Tick(object sender, EventArgs e)
        {
            if (gazeArg != null && gazeArg.IsAvailable)
            {
                var scr      = gazeArg.ScreenProperties.PixelSize;
                var wndPos   = Window.GetActualPosition();
                var x        = (wndPos.X - Mag.Magnifier.Left) / Mag.Magnifier.Width;
                var y        = (wndPos.Y - Mag.Magnifier.Top) / Mag.Magnifier.Height;
                var trackedX = gazeArg.Position.X / scr.Width;
                var trackedY = gazeArg.Position.Y / scr.Height;

                var xPow  = trackedX - x;
                var yPow  = trackedY - y;
                var power = 1 - Drop(Math.Pow(Math.Sqrt(xPow * xPow + yPow * yPow), 2) / ZoomSmooth, 0.1);
                if (!UseDynamicZoom)
                {
                    power = 1;
                }
                power = mean.Smooth(power);
                power = kalman.Calculate(power);
                if (double.IsNaN(power))
                {
                    throw new ArgumentException();
                }
                xPow = Clamp(Drop(xPow * Mag.Magnifier.Width / MoveSmooth, MoveMinimum), MoveMaximum);
                yPow = Clamp(Drop(yPow * Mag.Magnifier.Height / MoveSmooth, MoveMinimum), MoveMaximum);

                var smt = pointSmoother.Smooth(new Vision.Point(wndPos.X + xPow, wndPos.Y + yPow));

                if (Settings.Current.AllowControl && Logger.Stopwatch.ElapsedMilliseconds - lastMs > 33)
                {
                    MouseEvent.MoveAt(new System.Windows.Point(smt.X, smt.Y));
                    lastMs = Logger.Stopwatch.ElapsedMilliseconds;
                }

                Window.SetActualPosition(smt.X, smt.Y);
                Mag.Magnifier.CenterX       = (int)(smt.X);
                Mag.Magnifier.CenterY       = (int)(smt.Y);
                Mag.Magnifier.Magnification = Math.Max(1, Mag.Magnification * power);
            }
            Mag.Magnifier.UpdateMaginifier();
        }