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)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e6b301e..b41ed24 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,14 +10,15 @@
 
 ## 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 02bfd76..f4f1397 100644
--- a/alacritty/src/renderer/mod.rs
+++ b/alacritty/src/renderer/mod.rs
@@ -205,30 +205,29 @@
         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 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()
+            };
 
-            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;
-            }
-
-            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);