4468 Commits

Author SHA1 Message Date
Mitchell Hashimoto
738c4dff4c clear_screen keybinding works even when not at shell prompt
Instead of sending formfeed (0x0C), clear_screen actually does a
terminal emulator level clear instead. This MOSTLY matches the behavior
of iTerm and Terminal.app, with some differences:

  1. I do not clear _below_ the cursor. I feel like the use case for
     this feature is primarily to clear above the cursor. Happy to be
     wrong here but I want it proven to me!

  2. I do not clear in alternate screen mode. Clearing alt screens
     breaks rendering in Vim, less, etc. and it feels like the wrong
     behavior.
2023-07-05 14:01:01 -07:00
Mitchell Hashimoto
45ac9b5d4c font-feature config to enable/disable OpenType Font Features 2023-07-05 13:12:30 -07:00
Mitchell Hashimoto
853f15ef19 bar cursor was short by a couple pixels 2023-07-04 13:12:21 -07:00
Mitchell Hashimoto
9a079bb5b9 background-blur-radius for macOS 2023-07-03 20:43:53 -07:00
Mitchell Hashimoto
d25568ffdb apprt/gtk: honor background opacity 2023-07-03 20:21:16 -07:00
Mitchell Hashimoto
55313fcbd5 opengl: support background opacity 2023-07-03 19:51:11 -07:00
Mitchell Hashimoto
7896f99f2f config: clarify reload 2023-07-03 19:45:36 -07:00
Mitchell Hashimoto
338f89679d apprt: add C API for detecting background transparency per surface 2023-07-03 19:44:06 -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
8756090266 config: add background-opacity and float parsing for config 2023-07-03 17:50:45 -07:00
Mitchell Hashimoto
8113ad1393 font: share skew matrix for core text 2023-07-03 15:58:52 -07:00
Mitchell Hashimoto
c90a52ee50 font: don't fallback styles when searching for a codepoint
see comment
2023-07-03 15:55:01 -07:00
Mitchell Hashimoto
4bf8a0d149 font: support skew transform for auto-italics 2023-07-03 15:54:50 -07:00
Mitchell Hashimoto
369a7dda4c coretext: use alternate approach to calcaulate cell height and ascent
Fixes #174
2023-07-03 14:26:06 -07:00
Mitchell Hashimoto
0e802b6118 coretext: switch up positive/negative y axis values
No functional change, just swapping the math around to match freetype.
2023-07-03 14:04:35 -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
Thorsten Ball
567ba5a25e gtk: handle ctrl+return to toggle fullscreen
This is a follow-up to #172 and adds fullscreen handling to the GTK
apprt.

Works reliably for the current window and mimics exactly what happens
when F11 is pressed, which seems to be the standard keybinding for GTK
apps to toggle fullscreen.
2023-07-03 06:38:14 +02: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
ce77002198 remove metal workaround completely 2023-07-01 15:19:13 -07:00
Mitchell Hashimoto
9968128da9 fix failing test on non-Mac 2023-07-01 15:17:50 -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
1d1b868958 font: do not use Noto on macOS for tests, it doesn't work 2023-07-01 13:51:31 -07:00
Mitchell Hashimoto
0a718ec3eb pkg/macos: do not use bitCast through a function
workaround Zig issue: https://github.com/ziglang/zig/issues/16290
2023-07-01 13:38:10 -07:00
Mitchell Hashimoto
06f63288c8 coretext: address TODO 2023-07-01 10:15:50 -07:00
Mitchell Hashimoto
126817cac2 coretext: tweak underline position 2023-07-01 10:12:29 -07:00
Mitchell Hashimoto
51e42a62ed font: default rasterizer on macOS is now coretext 2023-07-01 10:04:49 -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
e99376cac1 font: update comment 2023-07-01 09:23:41 -07:00
Mitchell Hashimoto
b5cc37e20c font: comment out debug logs 2023-07-01 09:23:40 -07:00
Mitchell Hashimoto
42cc11e32c coretext: remove the old renderGlyph impl 2023-07-01 09:23:40 -07:00
Mitchell Hashimoto
3c5be0726f sprite: all rasterized sprites should have a 1px padding 2023-07-01 09:23:40 -07:00
Mitchell Hashimoto
362eeac74b coretext: do not treat color diffs special for offset 2023-07-01 09:23:40 -07:00
Mitchell Hashimoto
d39e3f5428 coretext: improved baseline calculation 2023-07-01 09:23:40 -07:00
Mitchell Hashimoto
69396b0853 coretext: layout rect must fit all chars 2023-07-01 09:23:40 -07:00
Mitchell Hashimoto
5706770c38 coretext: handle glyph padding in region reservation 2023-07-01 09:23:40 -07:00
Mitchell Hashimoto
55254acaad coretext: fix emoji placement 2023-07-01 09:23:40 -07:00
Mitchell Hashimoto
c52dc229f3 coretext: validate atlas depth matches color depth 2023-07-01 09:23:40 -07:00
Mitchell Hashimoto
a74e49833b coretext: colored glyph rendering 2023-07-01 09:23:40 -07:00
Mitchell Hashimoto
286944cd43 cleaning up rasterization, comments 2023-07-01 09:23:39 -07:00
Mitchell Hashimoto
552a1b51d0 coretext: rasterization looking cleaner 2023-07-01 09:23:39 -07:00
Mitchell Hashimoto
079fe7bc94 coretext: the size needs to be in pixels! (see comment) 2023-07-01 09:23:39 -07:00
Mitchell Hashimoto
4d7a2c9f05 font: remove the old comment about not doing the grey stroke 2023-07-01 09:23:39 -07:00
Mitchell Hashimoto
45da58188c fix up for new zig 2023-07-01 09:23:39 -07:00
Mitchell Hashimoto
ef5d86ffb0 coretext: initially fill grey 2023-07-01 09:23:39 -07:00
Mitchell Hashimoto
2a1cbb4f21 coretext: calculate units per em/point 2023-07-01 09:23:39 -07:00
Mitchell Hashimoto
a3401d9690 log if a configured font is not found 2023-07-01 09:23:39 -07:00
Thorsten Ball
6ff3f62e3a macOS: implement cmd+[0-9] to goto tab
This is my attempt at fixing #63. It works! But:

1. The `NotificationCenter` subscription is triggered once for every
   open tab. That's obviously wrong. But I'm not sure and could use some
   pointers where else to put the subscription. That leads me to...
2. I'm _not_ knowledgable in Swift/AppKit/SwiftUI, so I might have put
   the wrong/right things in the wrong/right places. For example: wasn't
   sure what's to be handled in Swift and what's to be handled by the
   core in Zig.

Would love some pointers :)
2023-07-01 09:08:02 -07:00