194 Commits

Author SHA1 Message Date
Mitchell Hashimoto
e665fc6741 renderer/metal: first pass at an image shader 2023-08-22 09:20:30 -07:00
Mitchell Hashimoto
5229cb93d2 renderer/metal: extract helpers for shaders/buffers 2023-08-22 08:49:34 -07:00
Mitchell Hashimoto
da4ead8f60 renderer/metal: deallocate unused image textures 2023-08-21 22:11:58 -07:00
Mitchell Hashimoto
20257c7a87 renderer/metal: images required by placements become textures 2023-08-21 21:40:57 -07:00
Mitchell Hashimoto
7ccf86b175 remove imgui and devmode
imgui has been a source of compilation challenges (our fault not theirs)
and devmode hasn't worked in awhile, so drop it.
2023-08-20 08:50:24 -07:00
Mitchell Hashimoto
951aa00c63 terminal: move to new modes struct 2023-08-15 11:30:33 -07:00
Mitchell Hashimoto
55778a049b apprt/gtk, opengl: render preedit 2023-08-11 12:37:27 -07:00
Mitchell Hashimoto
d62161e2c3 support preedit text rendering in core and metal 2023-08-11 12:20:48 -07:00
cryptocode
6045088afc Don't show hollow cursor in inactive windows when cursor is hidden.
This is the behavior of the other terminals I have, such as iTerm, allcritty, WezTerm, and Kitty. The hollow cursor is especially noticable when running in two panes,
one of them inactive with animations (such as a progress bar)
2023-08-11 17:20:03 +02:00
Mitchell Hashimoto
85e32f9a15 renderer: hide cursor is state explicit asks for invisible cursor
This was a regression. The previous logic would always show the cursor
if we were using a non-blinking cursor. But, if the terminal state is
explicitly requesting an invisible cursor (mode 25) then we need to hide
the cursor.
2023-08-06 09:55:13 -07:00
Mitchell Hashimoto
4b062dc45c font/shaper: text runs should split around block cursors
Fixes #206
2023-07-18 16:20:30 -07:00
Mitchell Hashimoto
3d48432daf renderer: change padding to integers
Screen size is always an integer, it makes sense for padding to also be
rounded to some integer.
2023-07-18 10:44:33 -07:00
Mitchell Hashimoto
ea268bae5e renderer: do not blink explicit steady cursor styles 2023-07-10 11:27:37 -07:00
Mitchell Hashimoto
13315471d7 renderer: double line widths for sprite fonts when font-thicken is true
Fixes #193
2023-07-07 09:08:46 -07:00
Mitchell Hashimoto
45ac9b5d4c font-feature config to enable/disable OpenType Font Features 2023-07-05 13:12:30 -07:00
Mitchell Hashimoto
329385e353 metal: apply background opacity 2023-07-03 19:38:33 -07:00
Mitchell Hashimoto
017da411f8 metal: start setting up background transparency 2023-07-03 17:59:50 -07:00
Mitchell Hashimoto
0faf6097d0 Change font metrics to all be integers, not floats.
Font metrics realistically should be integral. Cell widths, cell
heights, etc. do not make sense to be floats, since our grid is
integral. There is no such thing as a "half cell" (or any point).

The reason we historically had these all as f32 is simplicity mixed
with history. OpenGL APIs and shaders all use f32 for their values, we
originally only supported OpenGL, and all the font rendering used to be
directly in the renderer code (like... a year+ ago).

When we refactored the font metrics calculation to its own system and
also added additional renderers like Metal (which use f64, not f32), we
never updated anything. We just kept metrics as f32 and casted
everywhere.

With CoreText and #177 this finally reared its ugly head. By forgetting
a simple rounding on cell metric calculation, our integral renderers
(sprite fonts) were off by 1 pixel compared to the GPU renderers.
Insidious.

Let's represent font metrics with the types that actually make sense: a
cell width/height, etc. is _integral_. When we get to the GPU, we now
cast to floats. We also cast to floats whenever we're doing more precise
math (i.e. mouse offset calculation). In this case, we're only
converting to floats from a integral type which is going to be much
safer and less prone to uncertain rounding than converting to an int
from a float type.

Fixes #177
2023-07-03 11:23:20 -07:00
Mitchell Hashimoto
ce77002198 remove metal workaround completely 2023-07-01 15:19:13 -07:00
Mitchell Hashimoto
f537d7aab1 renderer: remove metal workaround, this caused crashes on x86_64
And it now works.
2023-07-01 15:14:24 -07:00
Mitchell Hashimoto
0bb2d22052 renderer: hook up font thickening setting 2023-07-01 10:01:40 -07:00
Mitchell Hashimoto
3795cd6c2d font: turn rasterization options into a struct, add thicken 2023-07-01 09:55:19 -07:00
Mitchell Hashimoto
314f9287b1 Update Zig (#164)
* update zig

* pkg/fontconfig: clean up @as

* pkg/freetype,harfbuzz: clean up @as

* pkg/imgui: clean up @as

* pkg/macos: clean up @as

* pkg/pixman,utf8proc: clean up @as

* clean up @as

* lots more @as cleanup

* undo flatpak changes

* clean up @as
2023-06-30 12:15:31 -07:00
Mitchell Hashimoto
56f8e39e5b Update zig, mach, fmt 2023-06-25 11:08:20 -07:00
Mitchell Hashimoto
c6356930cc renderer: support invisible attribute 2023-06-25 09:31:33 -07:00
Mitchell Hashimoto
1c2451b532 renderer: render underline color if set 2023-06-20 09:39:52 -07:00
Mitchell Hashimoto
1d14b121c0 renderer: do not draw cursor cell inversion if we don't draw the cursor
We previously used the "screen.viewportIsBottom" check but this is
always true since awhile back since we copy only the viewport now. A
cleaner check really is that we only track the cursor cell if we're even
drawing the cursor.
2023-05-25 21:41:43 -07:00
Mitchell Hashimoto
97d9157d22 update zig version 2023-05-07 20:50:51 -07:00
Mitchell Hashimoto
4af1a7f163 renderer/Metal: split runs on selection 2023-03-23 10:25:48 -07:00
Mitchell Hashimoto
7ae200a1dc renderer/metal: fix color bug on macOS 13 Intel.
See the associated test.
2023-03-22 14:22:12 -07:00
Mitchell Hashimoto
dfb40426a0 move selection to screen 2023-03-21 10:43:50 -07:00
Mitchell Hashimoto
b0b3b0af2d update config messages use pointers now to make messages small again 2023-03-19 10:48:42 -07:00
Mitchell Hashimoto
7eda21d544 surface propagates new config to renderer 2023-03-19 09:50:55 -07:00
Mitchell Hashimoto
f34da17a11 renderer: use a DerivedConfig to avoid the main Config pointer 2023-03-19 09:50:54 -07:00
Mitchell Hashimoto
b1a7baf394 metal: do not use setPurgeableState on MTLTexture/Buffer
The Metal system automatically will free hardware resources when no
other references exist (I believe) and this causes a crash if you close
a window while a render is in-flight.
2023-03-05 10:00:05 -08:00
Mitchell Hashimoto
cf519bcd75 Use procedurally generated sprites for cursors rather than shaders 2023-03-04 15:14:10 -08:00
Mitchell Hashimoto
4e31f14f7b renderer: reset font shaper buffer size on font size change 2023-03-03 14:35:26 -08:00
Mitchell Hashimoto
7962bd061b metal: use the screen size reported in the callback to resize
We were previously using the bounds which might be updated later if the
view is in the middle of an animation. Just use the size that represents
our target state.
2023-02-26 17:44:14 -08:00
Mitchell Hashimoto
8a4c8a06fe Merge pull request #75 from mitchellh/gtk
Rearchitect "app runtime" abstraction, minimal GTK implementation
2023-02-24 13:35:14 -08:00
Mitchell Hashimoto
60b2603304 metal: premult alpha for fg color 2023-02-24 08:39:55 -08:00
Mitchell Hashimoto
053748481a more crap 2023-02-24 07:58:29 -08:00
Mitchell Hashimoto
074664398a macos: correct scale factor propagated 2023-02-19 10:44:56 -08:00
Mitchell Hashimoto
cd77408efc it draws! 2023-02-19 10:44:56 -08:00
Mitchell Hashimoto
ff9af8a07b lots of progress running a surface but still crashes 2023-02-19 10:44:56 -08:00
Mitchell Hashimoto
085d462a68 lots of stubbing so window will kind of compile for embedded 2023-02-19 10:44:55 -08:00
Mitchell Hashimoto
41399b6871 renderer: make Metal apprt-aware 2022-12-29 15:14:59 -08:00
Mitchell Hashimoto
dd71456f35 font: shapers init with allocator since web canvas needs to init buffer 2022-12-06 13:44:55 -08:00
Mitchell Hashimoto
760f0c057c renderer: use new shaper structs 2022-12-06 13:25:52 -08:00
Mitchell Hashimoto
f871630fa4 move Atlas to font 2022-11-28 10:35:46 -08:00
Mitchell Hashimoto
379072566f remove underline support from shaders since we now use sprites 2022-11-27 16:18:00 -08:00