summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-10-11 12:48:44 +0100
committerBram Moolenaar <Bram@vim.org>2022-10-11 12:48:44 +0100
commit0c502d2e7031611788c301c7da0896f0fd9515fd (patch)
treed5118f7ab758a733c62b2db10e26481bbaff35b4
parent56564964e6d0956c29687e8a10cb94fe42f5c097 (diff)
downloadvim-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.c22
-rw-r--r--src/version.c2
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,