Files
ghostty/src
Mitchell Hashimoto fa72646e96 Unified font metrics (#2948)
This is a big one, I kind of over scoped a touch. I don't have it in me
to do a clean-up pass on this code before PR-ing it, so apologies for
any weirdness; I'll happily resolve any feedback, but trying to review
my own code right now is not something my brain wants to do.

#### Summary
- Font metric calculations reworked to be based primarily on data from
font tables, and now the majority of the logic is shared between
CoreText and FreeType, and we have more control over the specifics.
- Sprite font metrics for the position and thickness of underlines,
strikethroughs, and overlines are now separate, as well as box drawing
thickness, allowing for individual adjustments.
- Minimums are applied to font metrics to avoid *completely* broken
results from fonts with degenerate values in them.

### Unified Metrics Calculations
I added a solid foundation for parsing as many SFNT font tables as we
need, and added parsing for `head`, `hhea` (unused), `post`, and `OS/2`.
I didn't make a strong effort to account for variable fonts, so if a
variable font changes vertical metrics significantly it could cause
issues -- luckily, width, which is the most likely metric to change, is
not a problem, since we get the width by having our backends measure the
advances for us, which does account for variations correctly.

### Separated Sprite Metrics
I reworked the sprite renderer to just get a copy of the metrics that it
can use directly, instead of being given its own metrics (width, height,
thickness) -- so that the different thickness metrics can be used for
their intended purposes, and so that offsets for "unadjusted" characters
can be handled in the Box renderer itself.

### Minimums
Prevent degenerate fonts and bad `adjust` configs from creating, e.g.
zero-thickness underlines by applying a minimum to certain fields after
calculating metrics and after applying modifiers.

### Misc.
Fixed `init` for CoreText faces selecting the first predefined instance
of a variable font rather than the default.
2024-12-12 21:02:09 -08:00
..
2024-03-26 16:14:25 -07:00
2024-12-11 21:11:38 +11:00
2024-12-12 06:42:27 +00:00
2024-12-12 16:54:01 -07:00
2024-08-16 10:49:37 -07:00
2024-08-16 10:57:19 -07:00
2024-12-12 16:30:19 -08:00
2024-06-24 15:16:24 -07:00
2024-09-26 22:00:11 -07:00
2024-10-18 08:11:11 -07:00
2024-08-31 11:12:40 -07:00
2024-02-09 20:05:11 +01:00
2024-08-16 14:35:10 -07:00
2022-08-18 11:42:32 -07:00
2024-08-16 10:36:10 -07:00