render: don’t invert cursor colors when custom colors are being used

When the user has configured custom cursor colors (cursor.color is set
in foot.ini), don’t invert those colors when the cell is either
selected, or has the ‘reverse’ attribute set.

This aligns foot’s behavior with Alacritty, Kitty and Wezterm. Contour
also behaves similarly, except mouse selections override the cursor
colors (turning the cursor invisible).

Closes #1347
This commit is contained in:
Daniel Eklöf 2023-07-14 09:51:06 +02:00
parent 66df6fb2f6
commit b3745b31c7
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 8 additions and 11 deletions

View file

@ -94,11 +94,16 @@
([#1383][1383]).
* `dpi-aware` now defaults to `no`, and the `auto` value has been
removed.
* When using custom cursor colors (`cursor.color` is set in
`foot.ini`), the cursor is no longer inverted when the cell is
selected, or when the cell has the `reverse` (SGR 7) attribute set
([#1347][1347]).
[1371]: https://codeberg.org/dnkl/foot/pulls/1371
[1183]: https://codeberg.org/dnkl/foot/issues/1183
[1360]: https://codeberg.org/dnkl/foot/issues/1360
[1383]: https://codeberg.org/dnkl/foot/issues/1383
[1347]: https://codeberg.org/dnkl/foot/issues/1347
### Deprecated

View file

@ -405,19 +405,11 @@ cursor_colors_for_cell(const struct terminal *term, const struct cell *cell,
const pixman_color_t *fg, const pixman_color_t *bg,
pixman_color_t *cursor_color, pixman_color_t *text_color)
{
bool is_selected = cell->attrs.selected;
if (term->cursor_color.cursor >> 31) {
*cursor_color = color_hex_to_pixman(term->cursor_color.cursor);
*text_color = color_hex_to_pixman(
term->cursor_color.text >> 31
? term->cursor_color.text : term->colors.bg);
xassert(term->cursor_color.text >> 31);
if (cell->attrs.reverse ^ is_selected) {
pixman_color_t swap = *cursor_color;
*cursor_color = *text_color;
*text_color = swap;
}
*cursor_color = color_hex_to_pixman(term->cursor_color.cursor);
*text_color = color_hex_to_pixman(term->cursor_color.text);
} else {
*cursor_color = *fg;
*text_color = *bg;