double y = 0.0;
double maxWidth = 0.0;
final List itemsInColumn = new ArrayList();
for (int i = 0; i < blocks.size(); i++) {
final Block block = (Block) blocks.get(i);
final Size2D size = block.arrange(g2, RectangleConstraint.NONE);
if (y + size.height <= height) {
itemsInColumn.add(block);
block.setBounds(RectUtils.doubleRect(x, y, size.width,
size.height));
y = y + size.height + this.verticalGap;
maxWidth = Math.max(maxWidth, size.width);
} else {
if (itemsInColumn.isEmpty()) {
// place in this column (truncated) anyway
block.setBounds(RectUtils.doubleRect(x, y, size.width, Math
.min(size.height, height - y)));
y = 0.0;
x = x + size.width + this.horizontalGap;
} else {
// start new column
itemsInColumn.clear();
x = x + maxWidth + this.horizontalGap;
y = 0.0;
maxWidth = size.width;
block.setBounds(RectUtils.doubleRect(x, y, size.width, Math
.min(size.height, height)));
y = size.height + this.verticalGap;
itemsInColumn.add(block);
}
}
}
return new Size2D(x + maxWidth, constraint.getHeight());
}