Problem: 'wincolor' not used for > for not fitting double width char.
Also: popup drawn on right half of double width character looks
wrong.
Solution: Adjust color for > character. Clear left half of double width
character if right half is being overwritten.
if (tocol == vcol)
tocol += n_extra;
// combine 'showbreak' with 'wincolor'
- if (win_attr != 0)
- char_attr = hl_combine_attr(win_attr, char_attr);
+ char_attr = hl_combine_attr(win_attr, char_attr);
# ifdef FEAT_SYN_HL
// combine 'showbreak' with 'cursorline'
if (cul_attr != 0)
if (cul_attr)
multi_attr = hl_combine_attr(multi_attr, cul_attr);
#endif
+ multi_attr = hl_combine_attr(win_attr, multi_attr);
+
// put the pointer back to output the double-width
// character at the start of the next line.
++n_extra;
mb_c = c;
mb_utf8 = FALSE;
mb_l = 1;
- multi_attr = HL_ATTR(HLF_AT);
+ multi_attr = hl_combine_attr(win_attr, HL_ATTR(HLF_AT));
// Put pointer back so that the character will be
// displayed at the start of the next line.
--ptr;
}
#endif /* FEAT_RIGHTLEFT */
+#ifdef FEAT_TEXT_PROP
+ // First char of a popup window may go on top of the right half of a
+ // double-wide character. Clear the left half to avoid it getting the popup
+ // window background color.
+ if (coloff > 0 && ScreenLines[off_to] == 0)
+ {
+ ScreenLines[off_to - 1] = ' ';
+ ScreenLinesUC[off_to - 1] = 0;
+ screen_char(off_to - 1, row, col + coloff - 1);
+ }
+#endif
+
redraw_next = char_needs_redraw(off_from, off_to, endcol - col);
while (col < endcol)
--- /dev/null
+>x+0&#ffffff0| |你*0#0000001#ffd7ff255|好|,|世|界| +&|-| |>+0#4040ff13&| +0#0000000#ffffff0|好*&|世|界|你|好| +&@47
+|你*&|你*0#0000001#ffd7ff255|好|,|世|界|x+&@3|好*0#0000000#ffffff0|世|界|你|好| +&@48
+|x| |x+0#0000001#ffd7ff255| @12| +0#0000000#ffffff0|好*&|世|界|你|好| +&@47
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|,|1| @10|A|l@1|
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 2351,
/**/
2350,
/**/