protected Size calculateRectangleSize(MouseEvent e, Point fixedPoint, Rectangle rectangle) {
    Point mouseLoc = transformPoint(viewToWorld(), new Point(e.getX(), e.getY()));

    // the size of the rectangle is the difference between the X's and Y's
    return new Size(
        abs(fixedPoint.getCoordinate(X) - mouseLoc.getCoordinate(X)),
        abs(fixedPoint.getCoordinate(Y) - mouseLoc.getCoordinate(Y)));
  }
  protected Point calculateRectangleLocation(MouseEvent e, Point fixedPoint, Rectangle rectangle) {
    Point mouseLoc = transformPoint(viewToWorld(), new Point(e.getX(), e.getY()));

    // get the difference between the new point and the fixed point
    Size diff =
        new Size(
            mouseLoc.getCoordinate(X) - fixedPoint.getCoordinate(X),
            mouseLoc.getCoordinate(Y) - fixedPoint.getCoordinate(Y));

    // the center of the rectangle is located at the fixed point plus half the
    // difference to the new point

    return new Point(
        fixedPoint.getCoordinate(X) + diff.getLength(WIDTH) / 2,
        fixedPoint.getCoordinate(Y) + diff.getLength(HEIGHT) / 2);
  }