diff options
author | Kirill Chibisov <contact@kchibisov.com> | 2024-04-21 15:23:10 +0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-21 15:23:10 +0400 |
commit | 90054614c241375839571d4dd2145edcb65257a6 (patch) | |
tree | 095ef1ea17e2ac2d0185af6aff8b42bacd1df5af | |
parent | 44dc9e19f4bbf89d1789502953683ca201668fe4 (diff) | |
download | alacritty-90054614c241375839571d4dd2145edcb65257a6.tar.gz alacritty-90054614c241375839571d4dd2145edcb65257a6.zip |
Fix IME preview overlapping text
Fix incorrect usage of the `flags` when drawing the preedit resulting
in setting the `flags`, but not actually reading the value back.
The logic to skip things was also used incorrectly, because the renderer
does that already based on the `WIDE_CHAR` flag on the cell.
Fixes: 67a433ceed (Skip whitespaces for wide chars in preedit)
-rw-r--r-- | CHANGELOG.md | 9 | ||||
-rw-r--r-- | alacritty/src/renderer/mod.rs | 31 |
2 files changed, 20 insertions, 20 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index e6b301e2..b41ed24f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,14 +10,15 @@ Notable changes to the `alacritty_terminal` crate are documented in its ## 0.14.0-dev +### Changed + +- Pressing `Alt` with unicode input will now add `ESC` like for ASCII input + ### Fixed - Crash when trying to create a new tab without decorations enabled - New window being treated as focused when it's not on Wayland - -### Changed - -- Pressing `Alt` with unicode input will now add `ESC` like for ASCII input +- IME preview blending into text below it ## 0.13.2 diff --git a/alacritty/src/renderer/mod.rs b/alacritty/src/renderer/mod.rs index 02bfd762..f4f1397f 100644 --- a/alacritty/src/renderer/mod.rs +++ b/alacritty/src/renderer/mod.rs @@ -205,30 +205,29 @@ impl Renderer { size_info: &SizeInfo, glyph_cache: &mut GlyphCache, ) { - let mut skip_next = false; - let cells = string_chars.enumerate().filter_map(|(i, character)| { - if skip_next { - skip_next = false; - return None; - } - - let mut flags = Flags::empty(); - if character.width() == Some(2) { - flags.insert(Flags::WIDE_CHAR); - // Wide character is always followed by a spacer, so skip it. - skip_next = true; - } + let mut wide_char_spacer = false; + let cells = string_chars.enumerate().map(|(i, character)| { + let flags = if wide_char_spacer { + wide_char_spacer = false; + Flags::WIDE_CHAR_SPACER + } else if character.width() == Some(2) { + // The spacer is always following the wide char. + wide_char_spacer = true; + Flags::WIDE_CHAR + } else { + Flags::empty() + }; - Some(RenderableCell { + RenderableCell { point: Point::new(point.line, point.column + i), character, extra: None, - flags: Flags::empty(), + flags, bg_alpha: 1.0, fg, bg, underline: fg, - }) + } }); self.draw_cells(size_info, glyph_cache, cells); |