Commit Graph

3 Commits

Author SHA1 Message Date
Jon Leighton
3a1f74e266 servo: Merge #20021 - Lazy load fonts in a FontGroup (from jonleighton:lazy-font-group); r=mbrubeck,glennw
Lazy load fonts in a FontGroup

The first commit message explains this so I'll just copy it here:

---

This is a step towards fixing #17267. To fix that, we need to be able to
try various different fallback fonts in turn, which would become
unweildy with the prior eager-loading strategy.

Prior to this change, FontGroup loaded up all Font instances, including
the fallback font, before any of them were checked for the presence of
the glyphs we're trying to render.

So for the following CSS:

    font-family: Helvetica, Arial;

The FontGroup would contain a Font instance for Helvetica, and a Font
instance for Arial, and a Font instance for the fallback font.

It may be that Helvetica contains glyphs for every character in the
document, and therefore Arial and the fallback font are not needed at
all.

This change makes the strategy lazy, so that we'll only create a Font
for Arial if we cannot find a glyph within Helvetica. I've also
substantially refactored the existing code in the process and added
some documentation along the way.

---

I've added some tests in the second commit, but it required quite a bit of gymnastics to make it possible to write such a test. I'm not sure if the added complexity to the production code is worth it?

On the other hand, having this infrastructure in place may be useful for testing future changes in this area, and also possibly brings us a step closer to extracting a library as discussed in #4901. (What I mean by that is: it reduces coupling between `FontCacheThread` and `FontContext` -- the latter would have a place in such a library, the former wouldn't.)

Source-Repo: https://github.com/servo/servo
Source-Revision: f48dce120dddd8e3d585cfc8bc221faa2726bf6b
2018-02-22 10:49:52 -05:00
Jon Leighton
b5b1c581c2 servo: Merge #19928 - Fix FontTemplateDescriptor under FreeType (from jonleighton:issue-17321); r=jdm
Issue #17321. Under Linux, using "font-family: sans-serif" previously
caused Servo to select the "UltraLight" face (of DejaVu Sans). There were
two reasons for this:

1. Font weight was only retrieved from the OS/2 table for bold faces.
   This neglected to retrieve the weight information for "lighter than
   normal" weight faces. This meant that the UltraLight face appeared as
   normal weight, and was selected.

2. Retrieval of font stretch information from the OS/2 table was not
   implemented at all.

Source-Repo: https://github.com/servo/servo
Source-Revision: 1ed60100695ec21fe6a023f967258fd018c7dafd
2018-02-08 10:37:13 -05:00
Anthony Ramine
c04e3b7ed1 servo: Merge #19819 - Merge some test crates in their corresponding components (from servo:rm-test-crates); r=<try>
(Do not merge) Merge some test crates in their corresponding components

Source-Repo: https://github.com/servo/servo
Source-Revision: a4808a3649e6cb6e579e60b82d9979755643f711
2018-01-20 08:51:27 -06:00