row.setState(Box.DONE);
    private static RowBox layoutRow(Context c, TableRowContent tableRowContent, TableBox table, boolean fixed, int borderSpacingHorizontal, int borderSpacingVertical) {        // copy the extents        Rectangle oe = c.getExtents();        c.setExtents(new Rectangle(oe));        RowBox row = new RowBox();        CascadedStyle pushed = tableRowContent.getStyle();        if (pushed != null) {            c.pushStyle(pushed);        } else {            c.pushStyle(CascadedStyle.emptyCascadedStyle);        }        Border border = c.getCurrentStyle().getBorderWidth(c.getCtx());        //note: percentages here refer to width of containing block        Border margin = c.getCurrentStyle().getMarginWidth((float) oe.getWidth(), (float) oe.getWidth(), c.getCtx());        Border padding = c.getCurrentStyle().getPaddingWidth((float) oe.getWidth(), (float) oe.getWidth(), c.getCtx());        int tx = margin.left + border.left + padding.left;        int ty = margin.top + border.top + padding.top;        row.tx = tx;        row.ty = ty;        c.translate(tx, ty);        c.shrinkExtents(tx + margin.right + border.right + padding.right, ty + margin.bottom + border.bottom + padding.bottom);        List cells = tableRowContent.getChildContent(c);        checkColumns(table, cells.size());        layoutCells(cells, c, row, table, fixed, borderSpacingHorizontal, borderSpacingVertical);        c.unshrinkExtents();        c.translate(-tx, -ty);        // calculate the total outer width        row.width += borderSpacingHorizontal;        row.width = margin.left + border.left + padding.left + row.width + padding.right + border.right + margin.right;        row.height = margin.top + border.top + padding.top + row.height + padding.bottom + border.bottom + margin.bottom;        c.popStyle();        //restore the extents        c.setExtents(oe);        return row;    }