diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-10-11 12:48:44 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-10-11 12:48:44 +0100 |
commit | 0c502d2e7031611788c301c7da0896f0fd9515fd (patch) | |
tree | d5118f7ab758a733c62b2db10e26481bbaff35b4 | |
parent | 56564964e6d0956c29687e8a10cb94fe42f5c097 (diff) | |
download | vim-git-0c502d2e7031611788c301c7da0896f0fd9515fd.tar.gz |
patch 9.0.0720: MS-Windows GUI may have pixel dust from antialiasingv9.0.0720
Problem: MS-Windows GUI may have pixel dust from antialiasing.
Solution: When a character changes also redraw the next one. (issue #8532)
-rw-r--r-- | src/screen.c | 22 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/screen.c b/src/screen.c index e5fd4bf0d..d1dd5a401 100644 --- a/src/screen.c +++ b/src/screen.c @@ -475,6 +475,10 @@ screen_line( #endif ; int redraw_next; // redraw_this for next character +#ifdef FEAT_GUI_MSWIN + int changed_this; // TRUE if character changed + int changed_next; // TRUE if next character changed +#endif int clear_next = FALSE; int char_cells; // 1: normal char // 2: occupies two display cells @@ -534,6 +538,9 @@ screen_line( #endif redraw_next = char_needs_redraw(off_from, off_to, endcol - col); +#ifdef FEAT_GUI_MSWIN + changed_next = redraw_next; +#endif while (col < endcol) { @@ -547,15 +554,24 @@ screen_line( off_to + char_cells, endcol - col - char_cells); #ifdef FEAT_GUI +# ifdef FEAT_GUI_MSWIN + changed_this = changed_next; + changed_next = redraw_next; +# endif // If the next character was bold, then redraw the current character to // remove any pixels that might have spilt over into us. This only // happens in the GUI. + // With MS-Windows antialiasing may also cause pixels to spill over + // from a previous character, no matter attributes, always redraw if a + // character changed. if (redraw_next && gui.in_use) { +# ifndef FEAT_GUI_MSWIN hl = ScreenAttrs[off_to + char_cells]; if (hl > HL_ALL) hl = syn_attr2attr(hl); if (hl & HL_BOLD) +# endif redraw_this = TRUE; } #endif @@ -689,6 +705,12 @@ screen_line( redraw_next = TRUE; } #endif +#ifdef FEAT_GUI_MSWIN + // MS-Windows antialiasing may spill over to the next character, + // redraw that one if this one changed, no matter attributes. + if (gui.in_use && changed_this) + redraw_next = TRUE; +#endif ScreenAttrs[off_to] = ScreenAttrs[off_from]; // For simplicity set the attributes of second half of a diff --git a/src/version.c b/src/version.c index fadd4a3d0..87259de51 100644 --- a/src/version.c +++ b/src/version.c @@ -700,6 +700,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 720, +/**/ 719, /**/ 718, |