int tx = border.left; int ty = border.top;
int tx = (int)border.left(); int ty = (int)border.top();
    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);        }        row.setStyle(new Style(c.getCurrentStyle(), (float) oe.getWidth(), c.getCtx()));        Border border = c.getCurrentStyle().getBorderWidth(c.getCtx());        //rows have no margin or padding        row.leftPadding = border.left;        row.rightPadding = border.right;        //TODO: check how borders should interact with cell borders        int tx = border.left;        int ty = border.top;        row.tx = tx;        row.ty = ty;        c.translate(tx, ty);        c.shrinkExtents(tx + border.right, ty + border.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.contentWidth += borderSpacingHorizontal;        row.height = border.top + row.height + border.bottom;        c.popStyle();        //restore the extents        c.setExtents(oe);        row.setState(Box.DONE);        return row;    }