159 Commits

Author SHA1 Message Date
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
8ca9e14d89 adjust mouse selection calculation for window-padding settings
Fixes #170
2023-07-02 12:45:06 -07:00
Thorsten Ball
8e464db049 Toggle fullscreen on super/ctrl+return, only macOS for now
This fixes or at least is the first step towards #171:

- it adds `cmd/super + return` as the default keybinding to toggle
  fullscreen for currently focused window.
- it adds a keybinding handler to the embedded apprt and then changes
  the macOS app to handle the keybinding by toggling currently focused
  window.
2023-07-02 20:23:49 +02:00
Mitchell Hashimoto
a3401d9690 log if a configured font is not found 2023-07-01 09:23:39 -07:00
Evan Phoenix
4d46229652 Use the precision calculation to determine when to send mouse events 2023-07-01 15:22:03 +02: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
de5468e214 scale x, speed up scrolling 2023-06-29 11:47:28 -07:00
Mitchell Hashimoto
32031701b8 core: do high precision scrolling Y calculations 2023-06-29 11:42:43 -07:00
Mitchell Hashimoto
9a40dc4630 macos: build scroll mods value 2023-06-29 11:06:34 -07:00
Mitchell Hashimoto
68631a1ccd apprt: plumb through scroll mods to core, don't handle them yet 2023-06-29 10:41:42 -07:00
Mitchell Hashimoto
481107b41d mouse button codes for right/middle were swapped! 2023-06-25 16:34:06 -07:00
Mitchell Hashimoto
7012ee36eb shift+click to override "grabbed" mouse events and select 2023-06-25 16:03:57 -07:00
Mitchell Hashimoto
1607cccf73 mouse shift-click only continues previous event if selection is active 2023-06-25 15:53:05 -07:00
Mitchell Hashimoto
56f8e39e5b Update zig, mach, fmt 2023-06-25 11:08:20 -07:00
Mitchell Hashimoto
ce47bdb874 log emoji font as info, log that fonts are using default 2023-06-23 13:18:29 -07:00
Mitchell Hashimoto
553e09eff9 apprt/embedded: new surfaces inherit last focused 2023-05-31 19:12:01 -07:00
Mitchell Hashimoto
a158813a3d app keeps track of last focused surface 2023-05-31 18:59:40 -07:00
Thorsten Ball
1d772d1717 Handle non-printable characters when ctrl is pressed
This extends the list of characters we convert to non-printable
characters when control is pressed by adding `backslash`,
`left_bracket`, `right_bracket` to the list.

This is based on the "Legacy `ctrl` mapping of ASCII keys" section in
the Kitty documentation [0]. That page also links to the VT100
documentation [1] that contains Table 3-5, which shows the same mappings
at the Kitty documentation.

I started out wanting to add only `left_bracket` because I very often
use ctrl+[ to escape insert mode in Vim (it maps to escape), but then
added `backslash`, `right_bracket` too because they're next in the list
and having `ctrl+right_bracket` mapped also makes it work in Vim as the
default go-to-def combination.

Why not complete the whole table? Some keys aren't yet handled in
`input.zig`, such as `circumflex` (not defined), and mitchellh said that
it'd require more elaborate handling of different keyboard layouts. So
instead of adding something that might be wrong, I tried to add what I
knew (and tested) to work.

[0]: https://sw.kovidgoyal.net/kitty/keyboard-protocol/#legacy-ctrl-mapping-of-ascii-keys
[1]: https://vt100.net/docs/vt100-ug/chapter3.html
2023-05-31 06:24:19 +02:00
Mitchell Hashimoto
7b651627d5 core: surface confirm close logic updated to handle semantic prompts 2023-05-27 16:00:35 -07:00
Jack Pearkes
3c49ece069 pass through confirm close config in surface 2023-04-05 13:15:34 -07:00
Mitchell Hashimoto
4d41b3ff54 Merge pull request #134 from mitchellh/gtk-confirm
gtk, macos: show confirmation dialog on surface close with active child process
2023-03-26 10:59:09 -07:00
Mitchell Hashimoto
3689f1fe39 apprt/gtk: only show exit confirmation if process is alive 2023-03-25 16:36:12 -07:00
Mitchell Hashimoto
67d3507f9a apprt/glfw: new keycallback for unmapped 2023-03-25 15:40:49 -07:00
Mitchell Hashimoto
5f5700259f shift-click extends selection 2023-03-21 21:12:15 -07:00
Mitchell Hashimoto
35fe74e599 core: scroll the surface when mouse is pulled above or below surface 2023-03-21 21:02:25 -07:00
Mitchell Hashimoto
dfb40426a0 move selection to screen 2023-03-21 10:43:50 -07:00
Mitchell Hashimoto
d9f41b4fa6 scroll viewport to bottom on certain character write events
Fixes #120
2023-03-20 20:58:00 -07:00
Mitchell Hashimoto
b1af02941a terminal: implement focus event mode 1004
https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-FocusIn_FocusOut
2023-03-20 15:20:14 -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
e84fb55e2c surface mouse_interval is dynamically update-able 2023-03-19 10:14:28 -07:00
Mitchell Hashimoto
8f0be3ad9e termio: use DerivedConfig 2023-03-19 10:09:17 -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
f5c1dfa374 reload_config keybinding (defaults to ctrl+alt+super+space) 2023-03-19 09:50:53 -07:00
Mitchell Hashimoto
3e1f975551 move config loading into apprt to prep for reloading 2023-03-19 09:50:17 -07:00
Mitchell Hashimoto
9b10b5d716 surface doesn't store a pointer to Config anymore 2023-03-19 09:49:44 -07:00
Mitchell Hashimoto
91c9655475 remove unused function, make apprt surface close mandatory 2023-03-18 19:33:08 -07:00
Mitchell Hashimoto
00c837e0d2 apprt: all implement close surface 2023-03-18 19:25:54 -07:00
Mitchell Hashimoto
d83bf5aeb4 termio: close surface on process exit 2023-03-18 19:21:28 -07:00
Mitchell Hashimoto
f02dc2f32f handle horizontal scrolling for mouse reports 2023-03-17 19:24:18 -07:00
Mitchell Hashimoto
1b88f7e9ab support mouse alt scroll (mode 1007)
This enables less and other older legacy programs to get mouse scroll
events
2023-03-17 19:10:08 -07:00
Mitchell Hashimoto
04c38ef3b0 macos: change focus callback to use an enum so we can get other dirs 2023-03-11 17:44:00 -08:00
Mitchell Hashimoto
b582691185 macos: hook up all the bindings so we're ready to handle focus event 2023-03-11 16:22:04 -08:00
Mitchell Hashimoto
dc6e5e1437 macos: fix bug where like... 5 terminals were being launched in the
background
2023-03-09 11:40:47 -08:00
Mitchell Hashimoto
6c857877e8 apprt/embedded: close surface callback 2023-03-08 15:05:15 -08:00
Mitchell Hashimoto
8ce6f349f8 input: new_split binding, can parse enums 2023-03-08 08:57:38 -08:00
Mitchell Hashimoto
e882c21c04 disable double/tripclick highlighting if mouse reporting is enabled 2023-03-04 14:24:40 -08:00
Mitchell Hashimoto
d309007ec0 fix mouse position recording for x10 format
I don't know when this broke since I swear this was working before...
2023-03-04 14:17:12 -08:00
Mitchell Hashimoto
89d07fcd83 clear_history binding, default Cmd+K 2023-03-03 09:27:47 -08:00
Mitchell Hashimoto
ce86c64b42 update zig, src for loops 2023-02-27 21:46:42 -08:00