/**
  * Performs an arrangement with a fixed width and a range for the height.
  *
  * @param container the container.
  * @param g2 the graphics device.
  * @param constraint the constraint.
  * @return The container size after the arrangement.
  */
 protected Size2D arrangeFR(
     BlockContainer container, Graphics2D g2, RectangleConstraint constraint) {
   Size2D size1 = arrangeFN(container, g2, constraint.getWidth());
   if (constraint.getHeightRange().contains(size1.getHeight())) {
     return size1;
   } else {
     double h = constraint.getHeightRange().constrain(size1.getHeight());
     RectangleConstraint c2 = constraint.toFixedHeight(h);
     return arrange(container, g2, c2);
   }
 }
  /**
   * Arranges the blocks in the container with a fixed with and a range constraint on the height.
   *
   * @param container the container.
   * @param g2 the graphics device.
   * @param constraint the constraint.
   * @return The size following the arrangement.
   */
  protected Size2D arrangeFR(
      BlockContainer container, Graphics2D g2, RectangleConstraint constraint) {

    Size2D s = arrangeFN(container, g2, constraint);
    if (constraint.getHeightRange().contains(s.height)) {
      return s;
    } else {
      RectangleConstraint c =
          constraint.toFixedHeight(constraint.getHeightRange().constrain(s.getHeight()));
      return arrangeFF(container, g2, c);
    }
  }