summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKirill Chibisov <contact@kchibisov.com>2024-04-21 15:23:10 +0400
committerGitHub <noreply@github.com>2024-04-21 15:23:10 +0400
commit90054614c241375839571d4dd2145edcb65257a6 (patch)
tree095ef1ea17e2ac2d0185af6aff8b42bacd1df5af
parent44dc9e19f4bbf89d1789502953683ca201668fe4 (diff)
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.md9
-rw-r--r--alacritty/src/renderer/mod.rs31
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);