more consistent surface generation, no need to check text or sprite