Do we need to use Math.max here, as for fieldRows in getOptimalTileHeight?  Or can the result only ever be >1?