Tidy up highlight calculation.

Use the bounds from the logical highlight shape, rather than
calculating everything from scratch using the text metrics.

Issue #66