mirror of
https://github.com/alacritty/alacritty.git
synced 2024-11-11 13:51:01 -05:00
Fix cursor inversion logic
The existing cursor inversion logic was causing more problems than it solved, without solving the problem of invisible cursor when inverting a cell with matching foreground and background colors. This patch reworks this logic and only inverts the cursor when the foreground and background colors of the cursor are similar and the cursor colors aren't set to fixed RGB values. Fixes #4564. Fixes #5550.
This commit is contained in:
parent
f90dd12efd
commit
d8a98f8829
2 changed files with 14 additions and 12 deletions
|
@ -21,6 +21,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||
|
||||
- Line indicator obstructing vi mode cursor when scrolled into history
|
||||
- Vi mode search starting in the line below the vi cursor
|
||||
- Invisible cursor with matching foreground/background colors
|
||||
|
||||
## 0.9.0
|
||||
|
||||
|
|
|
@ -117,22 +117,23 @@ impl<'a> RenderableContent<'a> {
|
|||
} else {
|
||||
self.config.ui_config.colors.cursor
|
||||
};
|
||||
let mut cursor_color =
|
||||
let cursor_color =
|
||||
self.terminal_content.colors[NamedColor::Cursor].map_or(color.background, CellRgb::Rgb);
|
||||
let mut text_color = color.foreground;
|
||||
let text_color = color.foreground;
|
||||
|
||||
// Invert the cursor if it has a fixed background close to the cell's background.
|
||||
if matches!(
|
||||
cursor_color,
|
||||
CellRgb::Rgb(color) if color.contrast(cell.bg) < MIN_CURSOR_CONTRAST
|
||||
) {
|
||||
cursor_color = CellRgb::CellForeground;
|
||||
text_color = CellRgb::CellBackground;
|
||||
}
|
||||
let insufficient_contrast = (!matches!(cursor_color, CellRgb::Rgb(_))
|
||||
|| !matches!(text_color, CellRgb::Rgb(_)))
|
||||
&& cell.fg.contrast(cell.bg) < MIN_CURSOR_CONTRAST;
|
||||
|
||||
// Convert from cell colors to RGB.
|
||||
let text_color = text_color.color(cell.fg, cell.bg);
|
||||
let cursor_color = cursor_color.color(cell.fg, cell.bg);
|
||||
let mut text_color = text_color.color(cell.fg, cell.bg);
|
||||
let mut cursor_color = cursor_color.color(cell.fg, cell.bg);
|
||||
|
||||
// Invert cursor color with insufficient contrast to prevent invisible cursors.
|
||||
if insufficient_contrast {
|
||||
cursor_color = self.config.ui_config.colors.primary.foreground;
|
||||
text_color = self.config.ui_config.colors.primary.background;
|
||||
}
|
||||
|
||||
Some(RenderableCursor {
|
||||
is_wide: cell.flags.contains(Flags::WIDE_CHAR),
|
||||
|
|
Loading…
Reference in a new issue