Mitchell Hashimoto
a3d9dad726
fix tests so they pass on mac
2022-09-30 13:24:54 -07:00
Mitchell Hashimoto
68786814f8
-Dtest-exe flag to build and install test executables
...
This will be used to copy tests to other platforms.
2022-09-30 13:05:23 -07:00
Mitchell Hashimoto
42210e18da
update TODO
2022-09-29 15:07:32 -07:00
Mitchell Hashimoto
bf40e05a13
Font discovery on Linux via fontconfig
...
This adds the `--font-family` set of configuration flags to choose a font that is installed on the system rather than the embedded font in the binary. This uses fontconfig on Linux and only supports Linux at the moment.
Fontconfig is an optional dependency, building with `-Dfontconfig=false` will disable fontconfig and font discovery on all platforms. Fontconfig is only enabled by default on Linux.
2022-09-29 15:01:22 -07:00
Mitchell Hashimoto
53aab0a163
--font-family CLI config
2022-09-29 14:51:31 -07:00
Mitchell Hashimoto
7eac0afff2
cli args can parse null-terminated strings
2022-09-29 14:45:37 -07:00
Mitchell Hashimoto
5567564dd0
cli args fix stage1 miscompilation, add font families
2022-09-29 13:14:20 -07:00
Mitchell Hashimoto
7f45916b89
only discover if it is enabled
2022-09-29 11:58:00 -07:00
Mitchell Hashimoto
b6a4fff6d8
search for fonts on startup
2022-09-29 11:57:29 -07:00
Mitchell Hashimoto
fdbf40d3ee
pkg/freetype: disable ubsan
2022-09-29 11:39:09 -07:00
Mitchell Hashimoto
30a5041a38
font Group has Lib, loads deferred faces when needed
2022-09-29 10:30:45 -07:00
Mitchell Hashimoto
f9b78ad2ba
update flake
2022-09-25 14:04:09 -07:00
Mitchell Hashimoto
b11ed06fc2
font: test loading deferred face for fontconfig
2022-09-24 13:34:56 -07:00
Mitchell Hashimoto
88a4cb65f3
src/font: working on initiaizing deferred fonts from fc
2022-09-23 14:12:38 -07:00
Mitchell Hashimoto
bc9a0a36a8
store requested size alongside deferred font for loading
2022-09-23 14:12:38 -07:00
Mitchell Hashimoto
92251ed913
font group works with deferred faces exclusively
2022-09-23 14:12:38 -07:00
Mitchell Hashimoto
ac26c20e94
font discovery builds up a set of deferred faces
2022-09-23 14:12:38 -07:00
Mitchell Hashimoto
1c1da63c7e
deferred face hasCodepoint
2022-09-23 14:12:38 -07:00
Mitchell Hashimoto
141182aa13
start adding fontconfig conditional compilation
2022-09-23 14:12:38 -07:00
Mitchell Hashimoto
51d70fc74e
reproduced issue for upgrade comment
2022-09-23 13:37:20 -07:00
Mitchell Hashimoto
53f5739eca
use meta.FnPtr to prep for stage2
2022-09-23 13:20:43 -07:00
Mitchell Hashimoto
3bd9ed5952
Fix invalid c types with fontconfig
2022-09-23 13:14:08 -07:00
Mitchell Hashimoto
1a2b684b0e
RGB should not be packed, so that it has align = 1
2022-09-23 13:10:51 -07:00
Mitchell Hashimoto
a1d238e385
Fix a couple bugs in memory access (tests only)
2022-09-23 12:51:50 -07:00
Mitchell Hashimoto
72105fc6cd
update to the latest stage2 compiler we can
2022-09-23 12:08:06 -07:00
Mitchell Hashimoto
57a82a26e7
pkg/fontconfig: const pointers
2022-09-17 09:19:00 -07:00
Mitchell Hashimoto
9750ac87fd
pkg/fontconfig: pattern get
2022-09-17 09:04:40 -07:00
Mitchell Hashimoto
86f7d0e04e
pkg/fontconfig: add some error handling
2022-09-17 08:58:42 -07:00
Mitchell Hashimoto
0d80225977
fontconfig: charset and langset apis
2022-09-16 15:12:02 -07:00
Mitchell Hashimoto
d69f8397f3
pkg/fontconfig: add weights/slants enum
2022-09-16 10:08:49 -07:00
Mitchell Hashimoto
5b215409c6
pkg/fontconfig: pattern.add
2022-09-16 09:55:45 -07:00
Mitchell Hashimoto
c68c487e14
Make selection part of the cache key for GPU cells
...
If the selection state changes for a given row, the row must be
invalidated.
2022-09-14 19:58:36 -07:00
Mitchell Hashimoto
77851b30a2
Revert "update to latest Zig nightly"
...
This reverts commit f3f2c3df268db905b6af6588e5e5008da0f48b60.
2022-09-14 19:39:10 -07:00
Mitchell Hashimoto
f3f2c3df26
update to latest Zig nightly
2022-09-14 19:34:19 -07:00
Mitchell Hashimoto
f5319f1ca6
Merge pull request #14 from mitchellh/fontconfig
...
Fontconfig (bindings only)
2022-09-14 14:33:00 -07:00
Mitchell Hashimoto
e4ea27ec37
fontconfig: more APIs
2022-09-14 14:30:18 -07:00
Mitchell Hashimoto
aca36ba79b
fontconfig: fc-match
2022-09-14 14:26:42 -07:00
Mitchell Hashimoto
03ab1bedd4
fontconfig: fc-match
2022-09-14 12:49:43 -07:00
Mitchell Hashimoto
eb2ce495b3
fontconfig: font list
2022-09-14 10:14:09 -07:00
Mitchell Hashimoto
ce899dca11
fontconfig: font sets
2022-09-14 10:05:09 -07:00
Mitchell Hashimoto
382f569d65
fontconfig: object sets and patterns
2022-09-14 09:54:48 -07:00
Mitchell Hashimoto
b4d571e018
pkg/fontconfig: disable ubsan (reported upstream)
2022-09-14 09:23:02 -07:00
Mitchell Hashimoto
4ca71eef7c
don't build fontconfig on mac
2022-09-13 14:46:33 -07:00
Mitchell Hashimoto
59191b05cd
build fontconfig
2022-09-13 14:34:40 -07:00
Mitchell Hashimoto
d422d1ee78
pkg/fontconfig: starting, not working
2022-09-13 13:53:20 -07:00
Mitchell Hashimoto
d5ee4f8b21
Cell GPU cache must also key by screen type (primary/alternate)
2022-09-13 10:43:03 -07:00
Mitchell Hashimoto
7bde20a43d
a cell is empty only if it also has no styling
...
Previously we only checked if it had no character. With text shaping,
this was causing runs of only empty backgrounds to not render.
2022-09-13 10:12:44 -07:00
Mitchell Hashimoto
b5f9e8abf0
fix potential crash
2022-09-13 10:12:29 -07:00
Mitchell Hashimoto
0801786d51
Cache text shaping results per row
...
This uses an LRU to cache text shaping results per row. Rows are marked "dirty" and the cache invalidated whenever any cell on a row changes. Rows are identified by an ID in the screen circular buffer and not by y-value so even as the screen scrolls, the row cache remains valid. Benchmarks via tracing:
* Heavy output (`cat <big>.txt`) - ~2% slower due to overhead of low hit rate on cache
* Mostly static screen with only text - ~10% faster, high cache hit rate
* Mostly static screen with a mix of ligatures, emoji, text - ~40% faster, high cache hit rate
Terminals are "mostly static". Usually we sit with our prompt sitting there flashing, just re-rendering the history that already exists. We might scroll back a bit to see some recent results. Ultimately, `cat <big>.txt` is not that common so I think trading 2% slowdown on that for 10-40% speedup on the common case is worth it.
These percentages can eventually be thought of as direct FPS improvements (40% more FPS) once I split tty stream processing and rendering into separate threads and remove the FPS limiter that exists today.
2022-09-12 12:01:26 -07:00
Mitchell Hashimoto
b694afa425
update TODO
2022-09-12 11:39:20 -07:00