Commit Graph

21 Commits (199119967b3070b50150b59805341bfdbdc7b2b2)

Author SHA1 Message Date
Mitchell Hashimoto dbfc3eb679
Remove unused imports 2025-11-27 13:37:53 -08:00
Mitchell Hashimoto 3d56a3a02b
font/shaper: remove old pre-renderstate logic 2025-11-20 22:00:44 -08:00
Mitchell Hashimoto 2d94cd6bbd
font: update shaper to support new renderstate 2025-11-20 22:00:43 -08:00
Qwerasd 31e54ff44a comment + style changes 2025-09-08 10:40:56 -06:00
Mitchell Hashimoto 73ff4b8f74
move runIterator options to dedicated struct 2025-06-30 09:05:09 -07:00
Qwerasd 2d174f9bff font: allow non-boolean font feature settings
+ much more flexible syntax and lenient parser
+ allows comma-separated list as a single config value

This allows, e.g. `cv01 = 2` to select the second variant of `cv01`.
2024-12-30 21:15:25 -05:00
Qwerasd 7686cacde6 renderer, shaper: don't use null cells, handle bg and decorations separately
Significant rework that also removes a lot of unnecessarily duplicated
work while rebuilding cells in both renderers. Fixes multiple issues
with decorations and bg colors on wide chars and ligatures, while
reducing the amount of special case handling required.
2024-10-08 23:10:43 -04:00
Mitchell Hashimoto 14e3f43db2
font: yeet usingns 2024-08-16 10:47:15 -07:00
Mitchell Hashimoto 851b1fe2ac
font: noop shaper 2024-05-01 20:31:50 -07:00
Mitchell Hashimoto 0a69615670
font/shaper: add Cache 2024-05-01 18:55:22 -07:00
Mitchell Hashimoto 1072354747
build: add -Dfont-backend=coretext_harfbuzz to force Harfbuzz w/ CT 2024-04-30 14:03:38 -07:00
Mitchell Hashimoto 1b8bae5f0a
Update src/font/shape.zig
Co-authored-by: Jon Parise <jon@indelible.org>
2024-04-04 13:25:27 -07:00
Mitchell Hashimoto e41e45e1ad
font/coretext: face doesn't need harfbuzz font if we're not using it 2024-04-04 12:18:28 -07:00
Mitchell Hashimoto f0b2e21548
font: enable the coretext shaper by default for CoreText faces 2024-04-04 11:33:55 -07:00
Mitchell Hashimoto f447e6f9df
font: insert blank cells for multi-cell ligatures for styling
Up to this point, every font I've experienced with ligatures has
replaced the codepoints that were replaced for combining with a space.
For example, if a font has a ligature for "!=" to turn it into a glyph,
it'd shape to `[not equal glyph, space]`, so it'd still take up two
cells, allowing us to style both.

Monaspace, however, does not do this. It turns "!=" into `[not equal
glyph]` so styles like backgrounds, underlines, etc. were not extending.

This commit detects multi-cell glyphs and inserts synthetic blank cells
so that styling returns. I decided to do this via synthetic blank cells
instead of introducing a `cell_width` to the shaper result because this
simplifies the renderers to assume each shaper cell is one cell. We can
change this later if we need to.

Annoyingly, this does make the shaper slightly slower for EVERYONE to
accomodate one known font that behaves this way. I haven't benchmarked
it but my belief is that the performance impact will be negligible
because to figure out cell width we're only accessing subsequent cells
so they're likely to be in the CPU cache and also 99% of cells are going
to be width 1.
2024-01-06 19:22:25 -08:00
Mitchell Hashimoto 24d4981996
font: note why shaper is not enabled 2023-12-11 21:58:49 -08:00
Mitchell Hashimoto 114723af9e
font/coretext: shaper applies x/y offsets 2023-12-11 21:22:30 -08:00
Mitchell Hashimoto 5c1fbd09cd
font: shaper dynamically allocates cell buffer
Pathlogical grapheme clusters can use a LOT of memory, so we need to be
able to grow.
2023-09-26 17:59:16 -07:00
Mitchell Hashimoto 45ac9b5d4c
font-feature config to enable/disable OpenType Font Features 2023-07-05 13:12:30 -07:00
Mitchell Hashimoto f0b7fbecee
font: extract common shaper elements out 2022-12-06 13:23:53 -08:00
Mitchell Hashimoto e3c18f3f51
font: move shaper into comptime interface 2022-12-06 11:20:37 -08:00