1
1
mirror of https://github.com/wez/wezterm.git synced 2024-11-23 23:21:08 +03:00
Commit Graph

7588 Commits

Author SHA1 Message Date
Wez Furlong
b6ba87ad3c
fonts: tidy up some warnings 2023-08-20 17:46:34 -07:00
Wez Furlong
19ccec6e86
cairo: suppress a bunch of warnings
We can't do anything about warnings in the vendored code, except
pretend they do not exist!
2023-08-20 17:38:25 -07:00
Wez Furlong
8f4f9653c5
font: adjust metrics for pre-scaled bitmap glyphs
When using the harfbuzz rasterizer with a bitmap glyph, the result
is a rasterized glyph that is pre-scaled to the cell dimensions.

We need to tell glyphcache that that has happened, otherwise it
will apply the same scale factor again.
2023-08-20 17:32:42 -07:00
Wez Furlong
84720a18f0
fonts: stick with ft based metrics for now
I think I've got the right values going in and out, so I think
it's ok to turn this on, but I'm worried about legacy non-opentype
formats that freetype supports but harfbuzz doesn't.

Let's stick with ft's metrics until I find time to validate
the behavior.
2023-08-20 16:52:33 -07:00
Wez Furlong
536c3fa4da
rasterizer/freetype: tune debug logging 2023-08-20 15:31:33 -07:00
Wez Furlong
7264030a28
fonts: adopt fixed crate for freetype fixed-point math
This found at least one bug and should prevent future bugs.
2023-08-20 15:19:30 -07:00
Wez Furlong
1ed4058741
fonts: add freetype COLR 1 raster impl
This isn't fully baked, but it looks mostly ok.
The ghost emoji has a weirdly positioned white patch; there's
something funky with its positioning that needs to be investigated.

There's some copypasta here; a bunch of the cairo related stuff
was copied and adapted from the harfbuzz impl.

I plan to refactor the latter in terms of the former to reduce
the amount of code overall.
2023-08-20 15:19:30 -07:00
Wez Furlong
44e9e09273
font: remove half-baked attempt at rendering svg fonts
It's just too complex. Will focus on COLR 1 instead.
2023-08-20 15:19:30 -07:00
Wez Furlong
6b7ba71f32
fonts: harfbuzz raster: add linear and radial gradients
fixup colors and excessive clipping.

This now looks decent. Still don't support sweep gradients;
those look complex and I'm not sure that I have a font to
test that against.
2023-08-20 15:19:30 -07:00
Wez Furlong
f1c82e8894
fonts: harfbuzz raster: use cairo
This meshes well with the sequence of instructions that we
get from harfbuzz.

This will need some vendoring to integrate with wezterm's build
on all platforms; that can come later.

Still need to hook up gradients.
2023-08-20 15:19:27 -07:00
Wez Furlong
4ddcad7ef6
fonts: harfbuzz raster: rejigger
We need to make a couple of passes over the paint instructions,
and making a nice interface around FontFuncs and DrawFuncs was
taking up a lot of boilerplate.

Adjust so that we accumulate parsed PaintOps and DrawOps instead.

This makes the code smaller and easier to grok.

Still has trouble rasterizing the new noto color emoji font though.
2023-08-20 15:18:10 -07:00
Wez Furlong
75b72c9520
fonts: use harfbuzz ot funcs when shaping
I think this fixes up the discrepancy I had in metrics with images.
The "solution" is to tell harfbuzz to scale to the selected
bitmap strike size instead of the the computed pixel size for
the current settings.
2023-08-20 15:18:10 -07:00
Wez Furlong
25697d406e
font: add helper to swap red/blue channels in an image 2023-08-20 15:18:09 -07:00
Wez Furlong
847b1b7ab9
font: refactor: extract cropping helper 2023-08-20 15:18:09 -07:00
Wez Furlong
560fa1f552
fonts: harfbuzz raster: add basic glyph rendering 2023-08-20 15:18:09 -07:00
Wez Furlong
c7b689e369
fonts: starting building out harfbuzz rasterizer
This seems like it might be a way to get COLR support without
too much effort.

This commit just adds bitmap image support as a first step
2023-08-20 15:18:09 -07:00
Wez Furlong
58a2a30623
Add vendored cairo-sys-rs crate
I'm experimenting with using cairo's 2D graphics for glyph related
drawing operations, and perhaps more stuff in the UI in the future.

The challenge is that no one has yet encapsulated its build in a
cargo-friendly way.

This commit is that attempt.

The strategy is this:

* `deps/cairo` is ostensibly the same thing as https://github.com/gtk-rs/gtk-rs-core/tree/master/cairo/sys
  which is the cairo-sys-rs crate
* Its build.rs has been replaced with a version that builds from the C
  sources that are found in-tree; it will never look for the system
  cairo library
* A pair of scripts to import pixman (a required dep of cairo) and
  cairo itself in a repeatable way are include, for if/when we need
  to update the vendored sources
  Cairo is a mature library and doesn't release very often.
* The workspace sets a patch for crates.io so that cairo-rs has
  its cairo-sys-rs dep redirected to the local build.

I'm not planning to upstream this stuff to gtk-rs-core as full cairo
depends on a lot more things than are dealt with here, so it would be a
PITA to handle that generally.

This vendoring strips out things that are not used, so the cairo
library that remains:

* Is not internally thread safe; no TLS or mutex support is enabled
  in either of them. That's fine because the high level cairo-rs
  wrapper is not Send+Sync, which means that rust will only allow
  it to be used single threaded anyway.
* Only has the basic recording and image surfaces
* No platform support for win32/xlib/xcb and so on
2023-08-20 14:59:29 -07:00
Wez Furlong
6c7aa8159f
SHELL cleanup
* Allow set_environment_variables to set the SHELL.
  Previously, we'd always set it to the shell from the password
  database.  Now we do that by default, but if set_environment_variables
  has been used, we'll preserve that value for the environment
  of the to-be-spawned process

* Clarify the docs:
  * Remove the confusing version dependent sections that started
    with old behavior and rewrite in terms of the behavior that
    has been true for the past year
  * I've heard from a few people that they tried to change COMSPEC
    on Windows and pain ensued.  Try to nudge them to read the
    next paragraph that tells them what they are actually supposed
    to change.

refs: https://github.com/wez/wezterm/issues/4098
refs: https://github.com/wez/wezterm/issues/4168
closes: https://github.com/wez/wezterm/issues/3816
refs: https://github.com/wez/wezterm/issues/3317
2023-08-20 10:42:38 -07:00
Felipe
b112fb3f7a docs: fix typo in what-is-a-terminal.md
Change forsee to foresee.
2023-08-20 09:43:09 -07:00
UserIsntAvailable
fd9afa18c6 add awesome to default tiling_desktop_environments. 2023-08-19 16:31:09 -07:00
Gabriel Nützi
f2d78ff60d docs: improve visualizations in TTY and PTY explanations 2023-08-18 20:57:51 -07:00
Wez Furlong
87a009924c
cargo update 2023-08-17 09:27:49 -07:00
Wez Furlong
0499ab0430
mlua 0.9 is now stable; update 2023-08-17 09:26:47 -07:00
Wez Furlong
e8171f67d9
Add PRIVACY policy/statement
https://github.com/wez/wezterm/issues/4158
2023-08-17 08:59:53 -07:00
Wez Furlong
513c410eb9
freetype: update bindings to include Paint API 2023-08-17 08:38:02 -07:00
Gabriel Nützi
2516afa249
docs: fix typo in what-is-a-terminal.md (#4154)
* docs: fix typo in  `what-is-a-terminal.md`

* Update docs/what-is-a-terminal.md

---------

Co-authored-by: Wez Furlong <wez@wezfurlong.org>
2023-08-16 05:11:47 -07:00
Wez Furlong
b365225695
fonts: svg: half-assed attempt to set the y-bearing
This is not right, but better than not setting it.
2023-08-15 11:27:34 -07:00
Wez Furlong
edbf4ac1e4
add experiemental svg font support
The vertical alignment is wonky, and some glyphs have the wrong
aspect and are missig colors. eg: the watermelon glyph in Noto Color
Emoji (U+1f349).

Turn this off by default, and skip loading fonts that have svg by
default.
2023-08-15 10:33:45 -07:00
Wez Furlong
8c77ea1d9e
fonts: allow svg fonts to take precedence over bitmap versions
But note that we don't currently render svg

refs: https://github.com/wez/wezterm/issues/4148
2023-08-14 20:23:17 -07:00
Wez Furlong
0f1ffacefc
cargo update 2023-08-13 22:04:50 -07:00
Wez Furlong
bf17263431
cargo update 2023-08-06 22:53:28 -07:00
Wez Furlong
59b8664eb3
fixup F21+ handling
The warnings were not noticed in the original PR.
Those warnings were actually errors.
Promote warnings to error in the mapping logic to prevent
this sort of thing from slipping through in the future,
and fixup the errors.

refs: #3935
refs: #3937
2023-08-06 16:15:35 -07:00
cycleke
211bce5037 ssh: apply HostKeyAlgorithms in ssh config 2023-08-06 10:40:44 -07:00
Wez Furlong
3b4d82e74c
docs: changelog for #3937 2023-08-06 10:25:08 -07:00
Ovidiu Ionescu
9c215e15fd
fix: issue 3935 handle F13-F24 (#3937)
* fix: issue 3935 handle F13-F24

* Added F13-F24 in kitty mode

* fix: replace trailing ~ with u in escape sequence

* fix: patch ending char for function keys

---------

Co-authored-by: Ovidiu Ionescu <ovidiu@ionescu.net>
2023-08-06 10:22:14 -07:00
Wez Furlong
06dd8e4a79
macos: populate effective_dpi in wezterm.gui.screens
refs: #4096
2023-08-06 10:11:05 -07:00
Wez Furlong
1bbd56d469
wayland: return effective_dpi in wezterm.gui.screens
Note that this also does not respect dpi_by_screen; this is for
consistency in behavior and reported values.

Once we can produce the correct overridden value in
dispatch_pending_event, we can update these functions to return
the same data.

refs: #4096
2023-08-06 09:31:11 -07:00
Wez Furlong
06046c4319
x11: return effective_dpi in wezterm.gui.screens
refs: #4096
2023-08-06 09:26:06 -07:00
Wez Furlong
2a7167a0ef
fix some warnings 2023-08-06 09:18:40 -07:00
Wez Furlong
6ccbc723ba
wezterm.gui.screens: add optional effective_dpi field
This commit implements it for Windows. The other systems
report None for now.
2023-08-06 09:18:40 -07:00
Wez Furlong
18d93fce5a
gui: remove config.dpi override logic
The overrides are now applied at the window layer, which is (mostly!)
aware of per-screen overrides.

refs: #4096
2023-08-06 08:45:14 -07:00
Wez Furlong
b11691dda7
windows: support dpi_by_screen option
refs: #4096
2023-08-06 08:43:33 -07:00
Wez Furlong
ef94fc8405
wayland: respond to config.dpi changes faster
This is a baby step towards handling dpi_by_screen.
I don't want to do the actualy per-screen stuff here;
it touches stuff around the edges of SCTK and there is a pending,
significant, rewrite of that code needed to upgrade to a more
recent version of SCTK + wayland-protocols, and I don't want to waste
my effort on the intermediate state.
https://github.com/wez/wezterm/issues/3996#issuecomment-1636830740

refs: #4096
2023-08-06 07:52:37 -07:00
Wez Furlong
ede7e846f4
x11: respect config.dpi_by_screen
Maintain a cache of the positions of the various named screens,
and use that to resolve the screen of the current window, and
from there we can resolve the correct dpi_by_screen screen.

Make dpi and dpi_by_screen config changes generate a resize
event with the updated dpi.

refs: #4096
2023-08-05 22:25:06 -07:00
Wez Furlong
f7f253ec28
macos: add config.dpi_by_screen config option
Allows specifying the precise dpi to use on a per-screen basis:

```lua
return {
  dpi_by_screen = {
    ["Built-in Retina Display"] = 144,
  },
}
```

The screen names are the same as those returned from
`wezterm.gui.screens()`.

Changing either `dpi` or `dpi_by_screen` in the config will now cause
the window to be immediately resized/adjusted to the changed dpi
override.

Ultimately, I'd like to deprecate `dpi` in favor of `dpi_by_screen`,
but can't do that until this functionality is ported to windows, x11
and wayland.

refs: #4096
2023-08-05 20:48:59 -07:00
Wez Furlong
085e8da478
macos: fonts: use alternative fallback approach
The approach we were using previously was to ask macOS for the fallback
font list, but it didn't include the correct fonts for certain
codepoints.

Switch to using an alternative API that asks macOS which font to use for
a specific codepoint.

refs: #4099
2023-08-05 18:15:08 -07:00
Wez Furlong
33187d0e79
macos: fonts: use full list of user fallback languages
The hope was that this would find more fonts, but it doesn't actually
help for this case.

refs: https://github.com/wez/wezterm/issues/4099
2023-08-05 17:33:59 -07:00
Wez Furlong
a7c6ea8c1e
deps: harfbuzz -> 8.1.1
Second attempt to get on 8.1, tests seem good!

refs: https://github.com/harfbuzz/harfbuzz/issues/4358
2023-08-02 19:06:52 -07:00
xqrdot
419210bc14 corrected front_end.md 2023-08-02 07:15:27 -07:00
Daniel Vainsencher
6238da2f1b Support [https://pop.system76.com/](POP!_OS) in get-deps
A debian variant IIUC
2023-08-02 07:14:11 -07:00