/**
   * Calculates and sets the bounds of all the items in the specified container, subject to the
   * given constraint. The <code>Graphics2D</code> can be used by some items (particularly items
   * containing text) to calculate sizing parameters.
   *
   * @param container the container whose items are being arranged.
   * @param g2 the graphics device.
   * @param constraint the size constraint.
   * @return The size of the container after arrangement of the contents.
   */
  @Override
  public Size2D arrange(BlockContainer container, Graphics2D g2, RectangleConstraint constraint) {

    LengthConstraintType w = constraint.getWidthConstraintType();
    LengthConstraintType h = constraint.getHeightConstraintType();
    if (w == LengthConstraintType.NONE) {
      if (h == LengthConstraintType.NONE) {
        return arrangeNN(container, g2);
      } else if (h == LengthConstraintType.FIXED) {
        throw new RuntimeException("Not implemented.");
      } else if (h == LengthConstraintType.RANGE) {
        throw new RuntimeException("Not implemented.");
      }
    } else if (w == LengthConstraintType.FIXED) {
      if (h == LengthConstraintType.NONE) {
        return arrangeFN(container, g2, constraint);
      } else if (h == LengthConstraintType.FIXED) {
        throw new RuntimeException("Not implemented.");
      } else if (h == LengthConstraintType.RANGE) {
        throw new RuntimeException("Not implemented.");
      }
    } else if (w == LengthConstraintType.RANGE) {
      if (h == LengthConstraintType.NONE) {
        return arrangeRN(container, g2, constraint);
      } else if (h == LengthConstraintType.FIXED) {
        return arrangeRF(container, g2, constraint);
      } else if (h == LengthConstraintType.RANGE) {
        return arrangeRR(container, g2, constraint);
      }
    }
    throw new IllegalArgumentException("Unknown LengthConstraintType.");
  }
예제 #2
0
 /**
  * Returns a constraint for the content of this block that will result in the bounds of the block
  * matching the specified constraint.
  *
  * @param c the outer constraint (<code>null</code> not permitted).
  * @return The content constraint.
  */
 protected RectangleConstraint toContentConstraint(RectangleConstraint c) {
   ParamChecks.nullNotPermitted(c, "c");
   if (c.equals(RectangleConstraint.NONE)) {
     return c;
   }
   double w = c.getWidth();
   Range wr = c.getWidthRange();
   double h = c.getHeight();
   Range hr = c.getHeightRange();
   double ww = trimToContentWidth(w);
   double hh = trimToContentHeight(h);
   Range wwr = trimToContentWidth(wr);
   Range hhr = trimToContentHeight(hr);
   return new RectangleConstraint(
       ww, wwr, c.getWidthConstraintType(), hh, hhr, c.getHeightConstraintType());
 }
예제 #3
0
 /**
  * Arranges the items in the specified container, subject to the given constraint.
  *
  * @param container the container.
  * @param g2 the graphics device.
  * @param constraint the constraint.
  * @return The block size.
  */
 @Override
 public Size2D arrange(BlockContainer container, Graphics2D g2, RectangleConstraint constraint) {
   RectangleConstraint contentConstraint = container.toContentConstraint(constraint);
   Size2D contentSize = null;
   LengthConstraintType w = contentConstraint.getWidthConstraintType();
   LengthConstraintType h = contentConstraint.getHeightConstraintType();
   if (w == LengthConstraintType.NONE) {
     if (h == LengthConstraintType.NONE) {
       contentSize = arrangeNN(container, g2);
     } else if (h == LengthConstraintType.FIXED) {
       throw new RuntimeException("Not implemented.");
     } else if (h == LengthConstraintType.RANGE) {
       throw new RuntimeException("Not implemented.");
     }
   } else if (w == LengthConstraintType.FIXED) {
     if (h == LengthConstraintType.NONE) {
       contentSize = arrangeFN(container, g2, constraint.getWidth());
     } else if (h == LengthConstraintType.FIXED) {
       contentSize = arrangeFF(container, g2, constraint);
     } else if (h == LengthConstraintType.RANGE) {
       contentSize = arrangeFR(container, g2, constraint);
     }
   } else if (w == LengthConstraintType.RANGE) {
     if (h == LengthConstraintType.NONE) {
       throw new RuntimeException("Not implemented.");
     } else if (h == LengthConstraintType.FIXED) {
       throw new RuntimeException("Not implemented.");
     } else if (h == LengthConstraintType.RANGE) {
       contentSize =
           arrangeRR(container, constraint.getWidthRange(), constraint.getHeightRange(), g2);
     }
   }
   return new Size2D(
       container.calculateTotalWidth(contentSize.getWidth()),
       container.calculateTotalHeight(contentSize.getHeight()));
 }