Skip to content

Update bundled FreeType and HarfBuzz libraries#30938

Merged
QuLogic merged 3 commits intomatplotlib:text-overhaulfrom
QuLogic:ft214
Feb 6, 2026
Merged

Update bundled FreeType and HarfBuzz libraries#30938
QuLogic merged 3 commits intomatplotlib:text-overhaulfrom
QuLogic:ft214

Conversation

@QuLogic
Copy link
Copy Markdown
Member

@QuLogic QuLogic commented Jan 7, 2026

PR summary

These were released over the last couple of months but I didn't notice them. Note, I have included the new test images here, but this should not be merged until they are removed.

The main changes in HarfBuzz do appear to mostly be speedups and optimizations. Version 12 adds support for the new VARC table, but I don't think that's particularly widespread yet. There are various other bug fixes and rejections of invalid fonts in the smaller releases as well. The other useful change is that they've simplified the search for FreeType, so we can drop our patch for it.

The main change in FreeType is an improvement in the diacritics at small sizes. This is the cause of the mathtext test image changes.

Additionally, FreeType changed the way they use HarfBuzz (yes, there's a dependency loop there) that doesn't require the headers, which makes it possible to enable support. They do support dynamically loading HarfBuzz, but I don't want to run into issues loading the wrong library, so instead I've added a small patch that allows enabling support without explicitly linking HarfBuzz to FreeType. Then the ft2font extension library links to both and this resolves all symbols. Enabling HarfBuzz support improves auto-hinting in OpenType fonts. This causes the change in the Last Resort test image since that is an OpenType font.

To compare the test images on this PR with the current state of the text-overhaul branch, you can use this link https://github.com/QuLogic/matplotlib/compare/text-overhaul-figures..ft214 but unfortunately it also shows all the other images, so you need to look at the few images from this PR specifically.

PR checklist

@QuLogic QuLogic added this to the v3.11.0 milestone Jan 7, 2026
@github-project-automation github-project-automation bot moved this to Waiting for other PR in Font and text overhaul Jan 7, 2026
@QuLogic QuLogic moved this from Waiting for other PR to In Progress in Font and text overhaul Jan 7, 2026
@QuLogic QuLogic moved this from In Progress to Done in Font and text overhaul Jan 7, 2026
@QuLogic QuLogic moved this from Done to Ready for Review in Font and text overhaul Jan 7, 2026
@QuLogic
Copy link
Copy Markdown
Member Author

QuLogic commented Jan 30, 2026

Not actually waiting for any other PR; just need to drop the image update after approvals.

@QuLogic QuLogic force-pushed the ft214 branch 2 times, most recently from e7e31a7 to 0b4fb2c Compare February 3, 2026 09:11
Copy link
Copy Markdown
Member

@ksunden ksunden left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I leave to @QuLogic to merge into the text-overhaul branch

Due to the circular dependency between FreeType and HarfBuzz, this
requires a small patch to make FreeType not look for HarfBuzz, allowing
it to come from the superproject linkage. While FreeType does support
dynamically loading HarfBuzz, this should be a bit safer at avoiding any
chance of mixing system with bundled libraries.
@QuLogic QuLogic merged commit d57abf4 into matplotlib:text-overhaul Feb 6, 2026
32 of 36 checks passed
@github-project-automation github-project-automation bot moved this from Ready for Review to Done in Font and text overhaul Feb 6, 2026
@QuLogic QuLogic deleted the ft214 branch February 6, 2026 02:25
wavebyrd pushed a commit to wavebyrd/matplotlib that referenced this pull request Mar 13, 2026
Update bundled FreeType and HarfBuzz libraries
QuLogic added a commit to QuLogic/matplotlib that referenced this pull request Apr 10, 2026
This includes images changes for the following pull requests / commits:

* [Fix center of rotation with
  rotation_mode='anchor'](matplotlib#29199)
  (c44db77)
* [Remove ttconv backwards-compatibility
  code](matplotlib#30145)
  (8caff88)
* [Remove kerning_factor from
  tests](matplotlib#29816)
  (7b4d725)
* [Set text hinting to
  defaults](matplotlib#29816)
  (8255ae2)
* [Update FreeType to
  2.13.3](matplotlib#29816)
  (89c054d)
* [Implement text shaping with
  libraqm](matplotlib#30000)
  (b0ded3a,
  9813523)
* [Add language parameter to Text
  objects](matplotlib#29794)
  (7ce8eae)
* [Fix auto-sized glyphs with BaKoMa
  fonts](matplotlib#29936)
  (3ba2c13)
* [pdf: Improve text with characters outside embedded font
  limits](matplotlib#30512)
  (b70fb88,
  6cedcf7)
* [Prepare `CharacterTracker` for advanced font
  features](matplotlib#30608)
  (8274e17,
  70dc388,
  df670cf,
  ed5e074)
* [Add font feature API to
  Text](matplotlib#29695)
  (972a688)
* [Fix spacing in r"$\max
  f$"](matplotlib#30715)
  (4a99a83)
* [Implement libraqm for vector
  outputs](matplotlib#30607)
  (bd17cd4)
* [Drop the FT2Font intermediate
  buffer](matplotlib#30059)
  (9d7d7b4)
* [Rasterize dvi files without
  dvipng](matplotlib#30039)
  (7627118)
* [Update bundled FreeType and HarfBuzz
  libraries](matplotlib#30938)
  (a161658,
  9619bcc)
* [Fix positioning of wide mathtext
  accents](matplotlib#31069)
  (c2fa7ba)
* [Refactor RendererAgg.draw_{mathtext,text,tex} to use same base
  algorithm](matplotlib#31085)
  (931bcf3)
* [Implement TeX's fraction and script
  alignment](matplotlib#31046)
  (94ff452,
  4bfa0f9,
  1cd8510)
* [Fix confusion between text height and ascent in metrics
  calculations](matplotlib#31107)
  (60f2310)
* [mathtext: Fetch quad width & axis height from font
  metrics](matplotlib#31110)
  (692df3f,
  383028b)
* [mathtext: add mathnormal and distinguish between normal and italic
  family](matplotlib#31121)
  (a6913f3)
* [ENH: Ignore empty text for
  tightbbox](matplotlib#31285)
  (d772043)
* [Drop axis_artist tickdir image compat, due to text-overhaul
  merge](matplotlib#31281)
  (2057583)
* [text: Use font metrics to determine line
  heights](matplotlib#31291)
  (3ab6a27,
  d961462,
  97f4943)
* [ps/pdf: Override font height metrics to support AFM
  files](matplotlib#31371)
  (e0913d4)
* [TST: Cleanup back-compat code in tests touched by text
  overhaul](matplotlib#31295)
  (7c33379)
* [TST: Set tests touched by text overhaul to mpl20
  style](matplotlib#31300)
  (41c4d8d)
@QuLogic QuLogic mentioned this pull request Apr 10, 2026
4 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants