618 Commits

Author SHA1 Message Date
Qwerasd
b65ccd4598 test(coretext): add test for high plane padding sprite font behavior 2024-10-09 15:28:01 -04:00
Qwerasd
5730242596 coretext: don't emit 0 codepoints for special fonts 2024-10-08 23:47:35 -04: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
Qwerasd
06a37f32be font/sprite: use offset curve approximation for undercurl 2024-10-06 01:43:11 -04:00
Qwerasd
c454ef627b fix(font/sprite): avoid underflow
There's a degenerate case where height < line_pos
2024-10-05 22:12:59 -04:00
Qwerasd
fd49fb7338 font/sprite: improve double underline legibility with min 2px gap
At small thicknesses, the legibility of the double underline is not
great when it's a 1px line, a 1px gap, and another 1px line.
2024-10-05 22:08:17 -04:00
Qwerasd
156f735f8d font/sprite: fix undercurl rendering
- Limit max amplitude relative to cell width to avoid being too wavy
- Fix application of xiaolin-wu's for anti-aliasing too always be at
least 1px thick.
- Fix height calculation to avoid clipping bottom of wave at small
sizes.
2024-10-05 22:01:43 -04:00
Mitchell Hashimoto
be3ae56bc8 font: add stylistic variants for built-in font, fix naming convention
Fixes #2364

This adds the bold, italic, and bold italic variants of JB Mono so it is
built-in. This also fixes up the naming convention for the embedded font
files across tests and removes redundant embedded font files.
2024-10-02 15:17:18 -07:00
Mitchell Hashimoto
bbacee66d0 font/sprite: fix out of bounds right on curly underline
Fixes #2321
2024-09-29 09:39:32 -07:00
Mitchell Hashimoto
f67a647a12 font/sprite: bounds checking for pixel writes on Pixman 2024-09-29 09:38:38 -07:00
Qwerasd
a0f017d6fd freetype: update expected ul pos in tests to account for removed fudge factor 2024-09-25 12:11:04 -06:00
Qwerasd
003b100707 font: remove fudge factors in ul and st position calculations
These were present because of an incorrect calculation in the underline
sprite renderer, and are no longer necessary.
2024-09-25 12:01:24 -06:00
Qwerasd
9a87001fa6 font/sprite: correct underline placement calculation 2024-09-25 11:56:01 -06:00
Qwerasd
ac68686036 freetype: fix underline position calculation 2024-09-23 22:30:59 -06:00
Qwerasd
7a1d304fa9 font: further improve ul/st position calculations 2024-09-23 22:10:43 -06:00
Qwerasd
49a3008919 font/sprite: reduce uneven gaps in dotted underline 2024-09-23 20:08:57 -06:00
Qwerasd
c7d6227bef freetype: improve strikethrough position guess by using ex height 2024-09-23 19:18:44 -06:00
Qwerasd
3ec36e4d23 coretext: improve strikethrough position calculation 2024-09-23 19:01:15 -06:00
Qwerasd
b3a7901b79 font/sprite: rework underline rendering, adjust positioning 2024-09-23 18:22:11 -06:00
Qwerasd
6917bcacad font/sprite: fix 1px gap at right edge of dotted and dashed underlines 2024-09-23 18:13:46 -06:00
Mitchell Hashimoto
c9523a6ee0 font/sprite: avoid invalid glyph if unsupported codepoint is attempted 2024-09-05 20:22:51 -07:00
Mitchell Hashimoto
bdcc21942d config: font-synthetic-style to enable/disable synthetic styles
This adds a new configuration "font-synthetic-style" to enable or
disable synthetic styles. This is different from "font-style-*" which
specifies a named style or disables a style completely.

Instead, "font-synthetic-style" will disable only the creation of
synthetic styles in the case a font does not support a given style.
This is useful for users who want to obviously know when a font doesn't
support a given style or a user who wants to explicitly only use the
styles that were designed by the font designer.

The default value is to enable all synthetic styles.
2024-08-26 20:52:34 -07:00
Mitchell Hashimoto
c1e978e33d font/coretext: tweak synthetic bold amount to be slightly lighter 2024-08-26 09:37:01 -07:00
Mitchell Hashimoto
915ec029ee font/freetype: synthetic bold 2024-08-25 09:51:09 -07:00
Mitchell Hashimoto
5f0daa23b9 font/freetype: synthetic italic 2024-08-24 21:03:54 -07:00
Mitchell Hashimoto
def4abf6a9 font: support variations for coretext_freetype backend 2024-08-24 20:35:54 -07:00
Mitchell Hashimoto
ac3e2163f3 typos 2024-08-24 19:49:04 -07:00
Mitchell Hashimoto
ce6c5517af font: synthesize bold italic 2024-08-23 21:08:41 -07:00
Mitchell Hashimoto
d22551cd31 font/coretext: support synthetic bold 2024-08-23 20:53:22 -07:00
Mitchell Hashimoto
74291793db font: rename auto-italicize to synthetic italic 2024-08-23 20:34:37 -07:00
Mitchell Hashimoto
9941440f47 font: bold italic fallback has to avoid nested alias entry 2024-08-23 20:20:44 -07:00
Mitchell Hashimoto
963c843d1a font: if variation is set for a style and style isn't found, retry reg 2024-08-23 19:59:36 -07:00
Mitchell Hashimoto
ad22e068a2 font: use proper variation axes for non-default 2024-08-23 19:48:26 -07:00
Mitchell Hashimoto
47fb7f0115 font: Collection can't use segmentedlist prealloc 2024-08-23 19:18:21 -07:00
Mitchell Hashimoto
5befe75a1f font/harfbuzz: work with new collection API 2024-08-23 15:30:57 -07:00
Mitchell Hashimoto
874caf29da font: completeStyles 2024-08-23 15:21:26 -07:00
Mitchell Hashimoto
1f3ccb2d66 font: Collection uses SegmentedList for styles for pointer stability 2024-08-23 14:50:04 -07:00
Mitchell Hashimoto
c183e71a92 font: support aliased entries in the font collection style table 2024-08-23 14:31:29 -07:00
Mitchell Hashimoto
a3247366fb font/coretext: font-thicken renders with additional padding on context
At certain font sizes, this avoids clipping the text. This is due to a
limitation of the CoreText API, which does not provide a way to measure
the exact size of the text that will be rendered when antialiasing is
enabled.
2024-08-19 20:47:39 -07:00
Mitchell Hashimoto
318dc85c02 pkg/macos: yeet more usingns 2024-08-16 16:50:41 -07:00
Mitchell Hashimoto
ba29bf759b lots more yeeting 2024-08-16 14:35:10 -07:00
Mitchell Hashimoto
14e3f43db2 font: yeet usingns 2024-08-16 10:47:15 -07:00
Mitchell Hashimoto
59de7d8239 Merge pull request #2087 from qwerasd205/murica
spelling: normalize grey -> gray
2024-08-11 18:03:22 -07:00
Mitchell Hashimoto
ed49670d2f font: remove broken test (on purpose) due to improvements in shaping 2024-08-11 15:46:08 -07:00
Qwerasd
10b8ca3c69 spelling: normalize grey -> gray 2024-08-11 18:31:01 -04:00
Mitchell Hashimoto
e385e0f9d0 font/shaper: split text runs on common bad ligature pairs
Fixes #2081

Many fonts have a bad ligature for "fl", "fi", or "st". We previously
maintained a list of such fonts in quirks.zig. However, these are so
common that it was suggested we do something more systematic and this
commit is that.

This commit changes our text run splitting algorithm to always split on
`fl`, `fi`, and `st`. This will cause some more runs for well behaved
fonts but the combination of those characters is rare enough and our
caching algorithm is good enough that it should be minimal overhead.

This commit renders our existing quirks fonts obsolete but I kept that
logic around so we can add to it if/when we find other quirky font
behaviors.
2024-08-11 15:26:36 -07:00
Mitchell Hashimoto
de9ea2d735 font: add test for fl lig 2024-08-11 15:04:56 -07:00
Łukasz Niemier
f9be02a20f chore: clean up typos 2024-08-05 13:56:57 +02:00
Mitchell Hashimoto
77ee2f413c terminal: hasText no longer special cases kitty placeholders 2024-07-29 14:36:49 -07:00
Mitchell Hashimoto
4b5ad77b70 font: fontconfig always prefer monospace in pattern
Fixes #1984
2024-07-21 09:48:07 -07:00