diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-11-26 22:39:10 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-11-26 22:39:10 +0100 |
commit | 92e25ab2df03756bbb8523cf871db29fe8819c13 (patch) | |
tree | 8a0b492d49d656c356bf7ecc252c098aef489f44 | |
parent | 0c0734d527a132edfb4089be48486586424b3f41 (diff) | |
download | vim-git-92e25ab2df03756bbb8523cf871db29fe8819c13.tar.gz |
patch 8.1.2351: 'wincolor' not used for > for not fitting double width charv8.1.2351
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.
-rw-r--r-- | src/drawline.c | 7 | ||||
-rw-r--r-- | src/screen.c | 12 | ||||
-rw-r--r-- | src/testdir/dumps/Test_popupwin_doublewidth_1.dump | 10 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 28 insertions, 3 deletions
diff --git a/src/drawline.c b/src/drawline.c index 54163c7c9..189ed80ac 100644 --- a/src/drawline.c +++ b/src/drawline.c @@ -1230,8 +1230,7 @@ win_line( 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) @@ -1616,6 +1615,8 @@ win_line( 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; @@ -1790,7 +1791,7 @@ win_line( 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; diff --git a/src/screen.c b/src/screen.c index c0f7d494b..763d7a82f 100644 --- a/src/screen.c +++ b/src/screen.c @@ -460,6 +460,18 @@ screen_line( } #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) diff --git a/src/testdir/dumps/Test_popupwin_doublewidth_1.dump b/src/testdir/dumps/Test_popupwin_doublewidth_1.dump new file mode 100644 index 000000000..d59466dd2 --- /dev/null +++ b/src/testdir/dumps/Test_popupwin_doublewidth_1.dump @@ -0,0 +1,10 @@ +>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| diff --git a/src/version.c b/src/version.c index 6c9ac2295..ce3b73156 100644 --- a/src/version.c +++ b/src/version.c @@ -738,6 +738,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2351, +/**/ 2350, /**/ 2349, |