Open VisualMelon opened 4 years ago
There appear to be some different nomenclatures around this topic. To be sure we are talking about the same thing, I will use the same nomenclature as in this blog post: http://www.cyrilchandelier.com/understanding-fonts-and-uifont
Some thoughts:
OxyPlot.SkiaSharp
and OxyPlot.ImageSharp
for vertical text alignment, I would argue that the vertical text measurement should not actually be dependent on the content. I think it is more important that the baselines of multiple text runs are guaranteed to be aligned regardless of content.[text-height] = (|[ascent]| + |[descent]| + [leading]) * [number-of-lines] - [leading]
which would be equivalent to:
[text-height] = [line-height] * [number-of-lines] - [leading]
[text-width] = MAX([line] => SUM([advancement]))
Thanks for putting that so clearly.
It's not immediately obvious how to implement the width computing manually in some APIs, but in practice the width doesn't seem to be much of an issue.
Yes, probably most of the APIs do exactly this computation under the hood, and if there is no issue there would be no need to change anything. The definition should only serve as a reference in case of doubts / inconsistencies.
The
IRenderContext.MeasureText
method doesn't have a formal specification, and is implemented in different ways all over the place.We should consider formalising its behaviour so that we can make everything consistent before attempting to address inconsistencies in multi-line text rendering between platforms (see Issue #1538 and discussion in PR #1549).