mirror of
https://github.com/servo/servo.git
synced 2025-09-29 16:19:14 +01:00
Seperate freetype face and named instance indices (#39213)
In servo, each `LocalFontIdentifier` has an `fn index() -> u32`, which returns the index of the font within the font file in case it is a font collection (`.ttc` instead of `.ttf`). The way this index is obtained is platform-dependent. On systems using `fontconfig`, we get the index by querying `FC_INDEX`:d2c78db981/components/fonts/platform/freetype/font_list.rs (L109-L112)
There is a sneaky bug here: In addition to the aforementioned face index, the value for `FC_INDEX` contains the index of the named instance of the face in the upper 16 bits. This behaviour is completely undocumented, but FreeType uses the same format: https://freetype.org/freetype2/docs/reference/ft2-face_creation.html#ft_open_face. This wasn't a problem for the longest time, because the only consumer of the `index` value coming from fontconfig was FreeType. However, sometime after29e618dcf7
, we started also passing it to`read-fonts` . `read-fonts` expects only the face index, causing it to return errors as seen in https://github.com/servo/servo/issues/39209. The fix is to seperate the two indices when storing them in a `LocalFontDescriptor` and pass only the lower 16 bits to `read-fonts`. I'm unsure whether we should continue passing the named instance index to FreeType since we don't actually support variable fonts, but I've opted to keep the current behaviour for now. Fixes: https://github.com/servo/servo/issues/39209 Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
This commit is contained in:
parent
d2c78db981
commit
fcf4beeac0
6 changed files with 36 additions and 9 deletions
|
@ -186,7 +186,8 @@ mod font_context {
|
|||
|
||||
let local_font_identifier = LocalFontIdentifier {
|
||||
path: path.to_str().expect("Could not load test font").into(),
|
||||
variation_index: 0,
|
||||
face_index: 0,
|
||||
named_instance_index: 0,
|
||||
};
|
||||
let handle = PlatformFont::new_from_local_font_identifier(
|
||||
local_font_identifier.clone(),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue