548 Commits

Author SHA1 Message Date
Mitchell Hashimoto
f0f53bd8b1 font/shaper: fix CoreText shaper to compile with latest terminal changes 2024-04-03 10:14:17 -07:00
Mitchell Hashimoto
555f6e159f font/sprite: remove comptime arg for box drawing 2024-04-02 08:38:36 -07:00
Qwerasd
5abc63193e font/sprite: improve rendering of dashed lines
Previous implementation would draw dashes to the edge of the character
cell, which would result in double-wide dashes at the point where they
tiled. This fixes that, and also generally implements it in a cleaner
way than before.
2024-04-01 18:35:34 -04:00
Mitchell Hashimoto
552c97eea4 font/freetype: avoid overflows with u8 font size 2024-03-27 20:45:55 -07:00
Mitchell Hashimoto
461b16ce34 font sizes are limited to u8 (max size = 255 points)
Fixes #1618

Font sizes in configuration were always a u8, but the keybinding and
internal state was a u16 so it allowed for an ever-growing font size. At
a certain point, there is an integer overflow which causes it to wrap
around. This is all silly, 255 should be large enough for anyone[1]

[1]: Ready to be super wrong about this
2024-03-27 20:36:59 -07:00
Mitchell Hashimoto
cf885b8998 font/shaper: fix style for runs 2024-03-22 20:27:52 -07:00
Mitchell Hashimoto
9b4ab0e209 zig build test with renamed terminal package 2024-03-22 20:27:44 -07:00
Mitchell Hashimoto
05470bb36a font/shaper: new API 2024-03-22 20:27:41 -07:00
Mitchell Hashimoto
efe037bb9f font/shaper: test with bg only cells 2024-03-22 20:27:41 -07:00
Mitchell Hashimoto
34200a3e83 font/shaper: more tests passing 2024-03-22 20:27:41 -07:00
Mitchell Hashimoto
e3230cf1e6 font/shaper: start converting run to new terminal 2024-03-22 20:27:41 -07:00
Mitchell Hashimoto
796d1312ff font/sprite: rect must be smaller than canvas dims 2024-02-24 13:19:49 -08:00
Mitchell Hashimoto
759c8cddb4 font/sprite: test for thick underline, assertion on x/y for rect 2024-02-24 09:30:04 -08:00
em-dash
0f19251aa6 fix crash in underline drawing math 2024-02-24 20:49:51 +11:00
Mitchell Hashimoto
61b964b958 font/freetype: enable bitmap loading for colored faces 2024-02-01 08:40:18 -08:00
Mitchell Hashimoto
e4515d44c5 font/freetype: disallow bitmap strikes in scalable fonts
Fixes #1421
2024-02-01 08:28:33 -08:00
Mitchell Hashimoto
daf297cee2 config: union type formatters 2024-01-20 15:35:16 -08:00
Mitchell Hashimoto
adb7958f61 remove tracy usage from all files 2024-01-13 15:06:08 -08:00
Mitchell Hashimoto
ab606c6cfd font: autoitalic should only apply to text presentation
Fixes #1256
2024-01-08 07:57:42 -08:00
Mitchell Hashimoto
2082751a65 font/shaper: prevent underflow in multi-cell lig detection
Fixes #1251

See the comment for details.
2024-01-07 22:16:11 -08:00
Krzysztof Wolicki
f917be968d Merge branch 'mitchellh:main' into main 2024-01-07 19:13:06 +01: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
Krzysztof Wolicki
1913243c35 WIP: Update to new build module API after Zig PR #18160
Temporarily change dependency sources to forks until they update
2024-01-03 21:50:32 +01:00
Gregory Anders
060bdff117 terminal: track palette color in cell state
Rather than immediately converting a color palette index into an RGB
value for a cell color, when a palette color is used track the palette
color directly in the cell state and convert to an RGB value in the
renderer.

This causes palette color changes to take effect immediately instead of
only for newly drawn cells.
2024-01-02 22:34:06 -06:00
Chris Marchesi
dfefe953fc Powerline: add trapezoid rendering
This adds Powerline rendering for the trapezoid characters (E0D2 and
E0D4).

This is the last of the Powerline additions for now. These are the
shapes that 1) render the most egregiously with stock fonts (off-center,
bleeding background, visible gaps), and 2) are simple enough to be
rendered without resorting to more complex measures like embedding SVG.
2023-12-19 11:36:05 -08:00
Mitchell Hashimoto
481529393b font: center text when adjust-cell-width is used
Fixes #1086
2023-12-16 20:56:57 -08:00
Kyaw
22d631942c font/coretext: use CTFontCopyFamilyName
Use `CTFontCopyFamilyName` instead of `CTFontCopyDisplayName` to get
the font name to match the behavior of how it's done on freetype
backend.
2023-12-15 02:26:47 +06:30
Mitchell Hashimoto
85b40874cf font/sprite: manually determine which box codepoints are unadjusted
Some box codepoints (the cursor) want to use the original font metrics
height but others (corners) want to use the full grid height. I can't
see a better way to do this than manually maintaining a switch here. We
can add codepoints as needed.
2023-12-13 10:32:16 -08:00
Mitchell Hashimoto
8fc0cdb220 font: cursor size remains original cell height if height adjusted
Fixes #1067
2023-12-12 20:43:11 -08:00
Mitchell Hashimoto
dafc02e29c font: adjust cell baseline to center after modification, fix styles
Fixes #1064
Fixes #1066
2023-12-12 20:14:02 -08:00
Mitchell Hashimoto
6403ef1198 font/coretext: ceil the cell height and ascent metrics
Fixes #1068
2023-12-12 19:58:57 -08:00
Chris Marchesi
c03ae47a27 Powerline: add references for the ellipse algorithm
Further to the additional comments in #1055, this adds some references
to the comments in the ellipse algorithm (including the original
reference for the circle algorithm).
2023-12-12 00:10:40 -08:00
Mitchell Hashimoto
e5acb082c1 Merge pull request #1056 from mitchellh/ct-shaping
CoreText font shaper, fix glyph offset handling (in Harfbuzz, too)
2023-12-11 22:17:27 -08:00
Mitchell Hashimoto
24d4981996 font: note why shaper is not enabled 2023-12-11 21:58:49 -08:00
Mitchell Hashimoto
34cdb871f5 font/coretext: clarify buggy coretext shaper 2023-12-11 21:42:49 -08:00
Mitchell Hashimoto
489ed57e2f font/harfbuzz: track x/y offsets 2023-12-11 21:41:13 -08:00
Mitchell Hashimoto
114723af9e font/coretext: shaper applies x/y offsets 2023-12-11 21:22:30 -08:00
Chris Marchesi
4aa56ab8dd Powerline: Change half-circle algorithm to ellipse
This changes the half-circle drawing algorithm for glyphs E0B4 and E0B6
to an ellipse algorithm.

This fixes a shortcoming in the circle approach - how do you handle
drawing for a box that is not a typical 2:1 H*W? We were trying to
anticipate this by taking the smaller of the two axes and using that for
the radius. This works when there's some error in the zoom and the x
radius somehow becomes larger than the y radius (in observation, this
happens occasionally in some zoom steps, but only slightly).

However, turns out a more realistic anticipation is for fonts that have
a much *larger* height-to-width ratio. Iosevka, for example, has an
approx. 2.6:1 ratio (observed in the inspector). In this instance, this
approach does nothing except lock the circle to an extremely small
radius. For this instance, we need an ellipse, which will handle all
cases in an expected fashion.

Fixes #1050.
2023-12-11 21:01:11 -08:00
Mitchell Hashimoto
fcd9de0311 font/coretext: coretext shaper is cleaner 2023-12-11 12:56:30 -08:00
Mitchell Hashimoto
62a5fe0236 font/shape: add coretext shaper 2023-12-11 11:13:49 -08:00
Mitchell Hashimoto
22a0869525 font/shaper: if char is 0, should send space to shaper 2023-12-11 11:12:29 -08:00
Mitchell Hashimoto
3fdb6a496d font/coretext: calculate advance_x properly 2023-12-10 17:08:20 -08:00
Mitchell Hashimoto
2061acddc9 Merge pull request #1001 from vancluever/vancluever-powerline-half-circles
Powerline: Add half-circle rendering
2023-12-08 08:16:55 -08:00
Chris Marchesi
d34b5571d8 Powerline: Add half-circle rendering
This adds in-terminal rendering for the powerline glyphs E0B4 and E0B6,
similar to how we are rendering the triangle shapes currently.

The circle glyphs use a much more complex rendering due to the nuances
of drawing them: we use a midpoint algorithm for drawing on a 4x
supersampled matrix, fill, and then downsample. We use the same
downsampling approach as is done in the arc box drawing code.

The midpoint variant we're using here is described by Dennis Yurichev:
https://yurichev.com/news/20220322_circle/, although there are similar
variants elsewhere (some cited at the bottom of his article).
2023-12-07 22:29:59 -08:00
Mitchell Hashimoto
fe3b12c1b4 font: use nerd font patched jetbrains font
Fixes #996
2023-12-06 11:20:07 -08:00
Carlos Alexandro Becker
25856d62aa Remove FiraCode leftovers
from #993

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
2023-12-06 13:36:05 -03:00
Mitchell Hashimoto
55ba15fe66 change default embedded font to JetBrains Mono
Fixes #991

This changes the default embedded font from Fira to JetBrains Mono. This
only affects users who don't specify or font AND Ghostty can't find
another default font to use on their system.

This is one part an aesthetic choice: I've grown to personally like
JetBrains Mono more than Fira, and I think I have the right to change
the defaults ;)

But this is also partly because of #991: FiraCode contains glyphs for
symbolic ranges. This may not be Fira official... I think I may have
used a Nerd font patched one and that may be the issue. So I don't want
to blame the Fira font project. BUT, we have to replace the ttf in our
project and since I've been meaning to switch to JB Mono I just did that
now.
2023-12-06 08:08:14 -08:00
Mitchell Hashimoto
7f40881747 font: faces use primary grid metrics to better line up glyphs
Fixes #895

Every loaded font face calculates metrics for itself. One of the
important metrics is the baseline to "sit" the glyph on top of. Prior to
this commit, each rasterized glyph would sit on its own calculated
baseline. However, this leads to off-center rendering when the font
being rasterized isn't the font that defines the terminal grid.

This commit passes in the font metrics for the font defining the
terminal grid to all font rasterization requests. This can then be used
by non-primary fonts to sit the glyph according to the primary grid.
2023-12-02 09:51:15 -08:00
Krzysztof Wolicki
0750698b62 Update to latest master,
update libxev dependency,
change mach_glfw to an updated fork until upstream updates
2023-11-30 21:41:33 +01:00
Chris Marchesi
e0d458004f font/sprite: add Powerline face
This adds the Powerline face to our set of built-in faces, which
represents glyphs that are used to draw Powerline-style shell prompts
and status lines.

Since these are used similar to box-drawing characters, alignment is
important, and this gives us the most control in preventing related
artifacts.

This initial commit is scaffolding and support for the various solid
triangles - additional glyphs will come in other commits.

Fixes #675.
2023-11-23 01:29:12 -08:00