Hey Paul, I hadn't seen your MR - thanks for bringing that to my attention. I'm now thinking my approach is the wrong way to go and your approach is better. I think mine works because the metrics of the bitmap strike being used just happen to be smaller than the space provided by the application I was fixing. But it results in a different render output, when all I really want to do is fix the metrics (as I believe you have done).
The test in gdi32 only tests the one character too (the letter 'a') - so I might have passed that test just by luck. Maybe I should update the test to test 'a-z' and 'A-Z'.
With your MR, the text is still truncated in the application I'm trying to fix, but that could be due to the truncation algorithm - as with your MR it only misses by a single pixel (with master it is 8). I know Wine's truncation algorithm is more aggressive than Windows, so I'll turn my focus to that.