Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

What is MeasureText #1551

Open
VisualMelon opened this issue May 8, 2020 · 3 comments
Open

What is MeasureText #1551

VisualMelon opened this issue May 8, 2020 · 3 comments

Comments

@VisualMelon
Copy link
Contributor

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).

@Jonarw
Copy link
Member

Jonarw commented May 10, 2020

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:

Height

  • Similar to what we do in 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.
  • A possible definition could be:
    [text-height] = (|[ascent]| + |[descent]| + [leading]) * [number-of-lines] - [leading]
    which would be equivalent to:
    [text-height] = [line-height] * [number-of-lines] - [leading]

Width

  • This should take into account text shaping, if applicable
  • A possible definition could be:
    [text-width] = MAX([line] => SUM([advancement]))

@VisualMelon
Copy link
Contributor Author

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.

@Jonarw
Copy link
Member

Jonarw commented May 10, 2020

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants