float left, float top, float width, float height) {
Style.HAlign halign = resolveStyle(elems, Style.HALIGN);
Metrics m = computeMetrics(elems, width, height);
float y = top + resolveStyle(elems, Style.VALIGN).offset(m.size.height, height);
for (int elemIdx = 0, row = 0, size = m.rowBreaks.size(); row < size; ++row) {
Dimension rowSize = m.rows.get(row);
float x = left + halign.offset(rowSize.width, width);
for (; elemIdx < m.rowBreaks.get(row).intValue(); ++elemIdx) {
Element<?> elem = elems.childAt(elemIdx);
if (!elem.isVisible()) continue;
IDimension esize = preferredSize(elem, width, height);
if (_valign == null) {
setBounds(elem, x, y, esize.width(), rowSize.height());
} else {
setBounds(elem, x, y + _valign.offset(esize.height(), rowSize.height()),
esize.width(), esize.height());
}
x += esize.width() + _hgap;
}
y += _vgap + rowSize.height;