Mercurial > vim
changeset 30771:cf77f7a19ab6 v9.0.0720
patch 9.0.0720: MS-Windows GUI may have pixel dust from antialiasing
Commit: https://github.com/vim/vim/commit/0c502d2e7031611788c301c7da0896f0fd9515fd
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Oct 11 12:48:44 2022 +0100
patch 9.0.0720: MS-Windows GUI may have pixel dust from antialiasing
Problem: MS-Windows GUI may have pixel dust from antialiasing.
Solution: When a character changes also redraw the next one. (issue https://github.com/vim/vim/issues/8532)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 11 Oct 2022 14:00:07 +0200 |
parents | aff0085cbf86 |
children | 73a1f2dec989 |
files | src/screen.c src/version.c |
diffstat | 2 files changed, 24 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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