The font ascent and descent is currently rounded down, which results in vertically truncated lines if the values aren't integers. To fix this, round the values up.
This doesn't change anything on screen, probably because the screen resolution is set up on pixels, but this fixes drawing on e.g. a scaled print surface.
On a technical point of view, I'm not sure why simply making
SurfaceImpl::Descent() properly internally work on
XYPOSITIONs (which IIUC are floats) doesn't fix the issue, but I guess that some code uses their return values as integers or something.