// Line smoothing
        private void LineSmoothingUpdate(object sender, ElapsedEventArgs e)
        {
            Point guidePos = position;

            if (lastPosition == guidePos)
            {
                mouseMoving = false;
            }
            else
            {
                mouseMoving = true;
            }
            lastPosition = guidePos;

            try {
                // Begin smoothing only if we have points to work with and if drawing
                if (smoothPoints.Count > 0 && isDrawing)
                {
                    if (config.disableCatchUp)
                    {
                        if (mouseMoving)
                        {
                            MouseHook.SetCursorPos(smoothPoints[0].X, smoothPoints[0].Y);
                            smoothPoints.RemoveAt(0);
                        }
                    }
                    else
                    {
                        MouseHook.SetCursorPos(smoothPoints[0].X, smoothPoints[0].Y);
                        smoothPoints.RemoveAt(0);
                    }
                }
            }
            catch {
                // Fail smoothing gracefully
            }

            if (!isDrawing)
            {
                smoothPoints.Clear();
                lineSmoothingTimer.Stop();
                if (!config.snapToCursor)
                {
                    MouseHook.SetCursorPos(guidePos.X, guidePos.Y);
                }
                MouseHook.moveEnabled = true;
                MouseHook.downEnabled = true;
            }
        }
 private void MouseUpHandler(object sender, EventArgs e)
 {
     if (smoothingOn)
     {
         if (config.smoothOnDraw && isDrawing)
         {
             MouseHook.downEnabled = false;
             isDrawing             = false;
             lineProcessingTimer.Stop();
             linePoints.Clear();
             if (!config.snapToCursor)
             {
                 Point guidePos = overlay.cursorPos;
                 MouseHook.SetCursorPos(guidePos.X, guidePos.Y);
             }
             else
             {
                 overlay.cursorPos = MouseHook.GetCursorPosition();
             }
         }
     }
 }