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

Gather font metrics for FreeType fonts #76

Closed
burg opened this issue Sep 17, 2012 · 4 comments · Fixed by #1352
Closed

Gather font metrics for FreeType fonts #76

burg opened this issue Sep 17, 2012 · 4 comments · Fixed by #1352
Labels
P-linux Any Linux OS capable of running Servo

Comments

@burg
Copy link

burg commented Sep 17, 2012

In order to do line-height and baseline calculations properly, inline layout needs access to font metrics. I have implemented basic metrics gathering for Mac (through the CoreText CTFont* APIs). The same needs to be done for FreeType. I've stubbed out the implementation for now to return zero metrics.

@burg
Copy link
Author

burg commented Oct 29, 2012

Most of the metrics are there, but x-height and leading are still missing.

@metajack
Copy link
Contributor

Is this what is causing the issues shown here?

Screen Shot 2013-04-18 at 10 36 14 AM

Note the "mb" spacing in numbers and "me" and "mi" and "re" in several places.

@burg
Copy link
Author

burg commented Apr 18, 2013

This looks like missing/wrong kerning or glyph advance information. Can you show a screenshot of firefox rendering the same page with the same font?

@burg
Copy link
Author

burg commented Apr 18, 2013

Also, it should be finding an italicized font face for this test. Might be a separate bug.

dhedlund added a commit to dhedlund/servo that referenced this issue Dec 8, 2013
bors-servo pushed a commit that referenced this issue Dec 9, 2013
Fixes #76.

Implemented the only font metric remaining to resolve issue #76 for the Linux platform.

There are still some variations between Linux and OS X font metrics.  Looking at values for the "Times New Roman" font, the following metrics differed by over 10%:  `leading`, `x_height` and `max_advance`.  It was not obvious if this would create any major difference in rendering, or whether the discrepancies would be handled in platform specific ways during the rendering process.  Only `x_height` is being used by existing code.  The `leading` property under Linux is still an order of magnitude off from the OS X version, but they are computed with similar calculations.  Issue #1355 has been opened to further investigate the discrepancies.

#### Platform comparison of font metrics for "Times New Roman" between Linux and OS X:
**Au** is the raw metric values stored in the `FontMetrics` struct.  **% of em** is how large that value is relative to the raw `em_size` of the font as a percentage.  Linux reports the pt size differently than OS X, but this is probably because the linux platform uses hard-coded points-per-inch value (hard-coded in `src/components/util/geometry.rs`), whereas OS X uses the points-per-inch value provided by the font library.

    +-----------------------------------+  +-----------------------------------+
    | Linux (@14.25pt, 1.33em)          |  | OS X (@19.35pt, 1.0em)            |
    +------------------+------+---------+  +------------------+------+---------+
    | property         |   Au | % of em |  | property         |   Au | % of em |
    +------------------+------+---------+  +------------------+------+---------+
    | underline_size   |   55 |    4.82 |  | underline_size   |   60 |    5.17 |
    | underline_offset | -151 |  -13.25 |  | underline_offset | -120 |  -10.34 |
    | strikeout_size   |   56 |    4.91 |  | strikeout_size   |    0 |    0.00 |
    | strikeout_offset |  295 |   25.88 |  | strikeout_offset |    0 |    0.00 |
    | leading          |  541 |   47.45 |  | leading          |   60 |    5.17 |
    | x_height         | 1015 |   89.04 |  | x_height         |  660 |   56.85 |
    | em_size          | 1140 |  100.00 |  | em_size          | 1161 |  100.00 |
    | ascent           | 1015 |   89.04 |  | ascent           |  893 |   76.92 |
    | descent          |  246 |   21.58 |  | descent          |  203 |   17.48 |
    | max_advance      | 1199 |  105.18 |  | max_advance      | 2820 |  242.89 |
    +------------------+------+---------+  +------------------+------+---------+

    +-----------------------------------+  +-----------------------------------+
    | Linux (@24pt, 1.33em)             |  | OS X (@32.683333pt, 1.0em)        |
    +------------------+------+---------+  +------------------+------+---------+
    | property         |   Au | % of em |  | property         |   Au | % of em |
    +------------------+------+---------+  +------------------+------+---------+
    | underline_size   |   93 |    4.84 |  | underline_size   |  120 |    6.12 |
    | underline_offset | -255 |  -13.28 |  | underline_offset | -240 |  -12.24 |
    | strikeout_size   |   95 |    4.95 |  | strikeout_size   |    0 |    0.00 |
    | strikeout_offset |  496 |   25.83 |  | strikeout_offset |    0 |    0.00 |
    | leading          |  912 |   47.50 |  | leading          |   60 |    3.06 |
    | x_height         | 1710 |   89.06 |  | x_height         | 1080 |   55.10 |
    | em_size          | 1920 |  100.00 |  | em_size          | 1960 |  100.00 |
    | ascent           | 1710 |   89.06 |  | ascent           | 1544 |   78.77 |
    | descent          |  415 |   21.61 |  | descent          |  365 |   18.62 |
    | max_advance      | 2020 |  105.21 |  | max_advance      | 4740 |  241.84 |
    +------------------+------+---------+  +------------------+------+---------+

    +-----------------------------------+  +-----------------------------------+
    | Linux (@45pt, 1.33em)             |  | OS X (@60.833333pt, 1.0em)        |
    +------------------+------+---------+  +------------------+------+---------+
    | property         |   Au | % of em |  | property         |   Au | % of em |
    +------------------+------+---------+  +------------------+------+---------+
    | underline_size   |  175 |    4.86 |  | underline_size   |  180 |    4.93 |
    | underline_offset | -479 |  -13.31 |  | underline_offset | -480 |  -13.15 |
    | strikeout_size   |  179 |    4.97 |  | strikeout_size   |    0 |    0.00 |
    | strikeout_offset |  931 |   25.86 |  | strikeout_offset |    0 |    0.00 |
    | leading          | 1709 |   47.47 |  | leading          |  180 |    4.93 |
    | x_height         | 3208 |   89.11 |  | x_height         | 2040 |   55.89 |
    | em_size          | 3600 |  100.00 |  | em_size          | 3650 |  100.00 |
    | ascent           | 3208 |   89.11 |  | ascent           | 2925 |   80.14 |
    | descent          |  778 |   21.61 |  | descent          |  690 |   18.90 |
    | max_advance      | 3788 |  105.22 |  | max_advance      | 8880 |  243.29 |
    +------------------+------+---------+  +------------------+------+---------+

    +-----------------------------------+  +-----------------------------------+
    | Linux (@30.75pt, 1.33em)          |  | OS X (@41.9pt, 1.0em)             |
    +------------------+------+---------+  +------------------+------+---------+
    | property         |   Au | % of em |  | property         |   Au | % of em |
    +------------------+------+---------+  +------------------+------+---------+
    | underline_size   |  120 |    4.88 |  | underline_size   |  120 |    4.77 |
    | underline_offset | -327 |  -13.29 |  | underline_offset | -360 |  -14.32 |
    | strikeout_size   |  122 |    4.95 |  | strikeout_size   |    0 |    0.00 |
    | strikeout_offset |  636 |   25.85 |  | strikeout_offset |    0 |    0.00 |
    | leading          | 1168 |   47.47 |  | leading          |  120 |    4.77 |
    | x_height         | 2192 |   89.11 |  | x_height         | 1440 |   57.27 |
    | em_size          | 2460 |  100.00 |  | em_size          | 2514 |  100.00 |
    | ascent           | 2192 |   89.11 |  | ascent           | 1991 |   79.20 |
    | descent          |  532 |   21.63 |  | descent          |  487 |   19.37 |
    | max_advance      | 2588 |  105.20 |  | max_advance      | 6120 |  243.44 |
    +------------------+------+---------+  +------------------+------+---------+
therealglazou pushed a commit to therealglazou/servo that referenced this issue Feb 20, 2014
glennw added a commit to glennw/servo that referenced this issue Jan 16, 2017
 	Unify clip rects and clip regions into a single "combined clip region" structure, and clip inset box shadows to rounded rectangle corners.
jdm pushed a commit to jdm/servo that referenced this issue Mar 6, 2021
Increase default JS heap size (from 8MB -> 32 MB) for testing large pages.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
P-linux Any Linux OS capable of running Servo
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants