633 Commits

Author SHA1 Message Date
Qwerasd
37144fd5b8 font/sprite: fix light arc character for odd thicknesses
+ update Box.ppm ground truth image
2024-10-14 20:47:04 -04:00
Qwerasd
c0315a04b4 test(font/sprite): add second size to box regression test
Smaller, odd cell size, odd (1) thickness, catches more edge cases with
rounding etc.
2024-10-14 20:31:01 -04:00
Qwerasd
bb5b7b0274 font/sprite(Box): refactor smooth mosaic rendering
+ un-`comptime` the line spec and make it a packed struct, to reduce
codegen size.
2024-10-14 17:50:49 -04:00
Qwerasd
d38d0f30c4 font/sprite: replace pixman with z2d, extend Box coverage
More complete coverage of the Symbols For Legacy Computing block,
including characters from Unicode 16.0.

Pixman and the web canvas impl for Canvas have been removed in favor of
z2d for drawing, since it has a nicer API with more powerful methods,
and is in Zig with no specific platform optimizations so should compile
to wasm no problem.
2024-10-14 17:50:49 -04:00
Qwerasd
c86b5f44ce font/sprite: refactor box drawing quads/sextants
Move away from C-style bit sets, calculate sextants procedurally rather
than hard coding.
2024-10-14 17:50:49 -04:00
Qwerasd
d63cf6eaec test(font/sprite): generate diff image on failed regression check 2024-10-14 17:50:49 -04:00
Qwerasd
ced4247e55 font/sprite: refactor lines and fractional blocks, add ground truth for regression test
Use a single unified function for intersection-style line drawing chars,
and one for fractional block characters. Add a ground truth image based
on this commit for the regression test (differences from before changes
validated visually, 1 incorrect rendering actually fixed)
2024-10-14 17:50:49 -04:00
Qwerasd
f3e74384bb test(font/sprite): add regression test for box drawing sprites 2024-10-14 17:50:49 -04:00
Qwerasd
74750fbd49 font/Atlas: add dump method to dump to ppm 2024-10-14 17:50:49 -04:00
Qwerasd
2462921681 font/sprite(underline): make undercurl segment symmetrical
Previously was biased half a pixel to one side.
2024-10-14 14:53:09 -04:00
Qwerasd
63f82119cd font/sprite(underline): add thickness correction to undercurl 2024-10-14 14:46:43 -04:00
Qwerasd
e4f4b708c9 font/shaper: explicitly skip invisible cells while shaping
Fixes a bug caused by the renderer logic assuming this behavior and not
advancing the run iterator when skipping foreground elements in cells
with the invisible flag set.
2024-10-11 13:50:16 -04:00
Mitchell Hashimoto
97abf3c370 font/noop: conform to new run struct type 2024-10-10 17:24:44 -07:00
Qwerasd
ca59367164 harfbuzz: fix tests to account for removal of null cells 2024-10-09 16:05:09 -04:00
Qwerasd
7de7bfa20e coretext: fix tests to account for removal of null cells 2024-10-09 16:00:57 -04:00
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