public boolean run() {
    if (!smooth) {
      robot.mouseMove((int) endPoint.getX(), (int) endPoint.getY());
    } else {
      Point currentMousePosition = MouseInfo.getPointerInfo().getLocation();

      int startX = (int) currentMousePosition.getX();
      int startY = (int) currentMousePosition.getY();
      int endX = (int) endPoint.getX();
      int endY = (int) endPoint.getY();

      if (startX > endX) {
        startX = (int) endPoint.getX();
        endX = (int) currentMousePosition.getX();
      }

      if (startY > endY) {
        startY = (int) endPoint.getY();
        endY = (int) currentMousePosition.getY();
      }

      // int gcd = calculateTheGCD( (endX - startX), (endY - startY) );
      // int gcdX =(endX - startX)/gcd;
      // int gcdY =(endY - startY)/gcd;

      // if( (endX - startX) == 0 || (endY - startY) == 0) {
      // return true;
      // }

      // System.out.println(gcd + " " + startX+ " " + startY );
      while (startX < endX || startY < endY) {
        if (startX < endX) {
          startX++;
        }

        if (startY < endY) {
          startY++;
        }

        robot.delay(5);
        robot.mouseMove(startX, startY);
      }
    }
    return true;
  }