summaryrefslogtreecommitdiffstats
path: root/src/gui.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-03-28 20:44:41 +0100
committerBram Moolenaar <Bram@vim.org>2020-03-28 20:44:41 +0100
commit7c003aa314337ce732e18c541fa93d71cafedf03 (patch)
treec7e2f687fd9daf56fdb2e42493a7dc6b8e00b3b5 /src/gui.c
parent33fa29cf74ea314f89cfa58ec9ffc2d6781a59d4 (diff)
patch 8.2.0468: GUI: pixel dust with some fonts and charactersv8.2.0468
Problem: GUI: pixel dust with some fonts and characters. Solution: Always redraw the character before the cursor. (Nir Lichtman, closes #5549, closes #5856)
Diffstat (limited to 'src/gui.c')
-rw-r--r--src/gui.c26
1 files changed, 10 insertions, 16 deletions
diff --git a/src/gui.c b/src/gui.c
index 0e008c12d8..85e4628e71 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -2630,18 +2630,19 @@ gui_outstr_nowrap(
/*
* Un-draw the cursor. Actually this just redraws the character at the given
- * position. The character just before it too, for when it was in bold.
+ * position.
*/
void
gui_undraw_cursor(void)
{
if (gui.cursor_is_valid)
{
- if (gui_redraw_block(gui.cursor_row, gui.cursor_col,
- gui.cursor_row, gui.cursor_col, GUI_MON_NOCLEAR)
- && gui.cursor_col > 0)
- (void)gui_redraw_block(gui.cursor_row, gui.cursor_col - 1,
- gui.cursor_row, gui.cursor_col - 1, GUI_MON_NOCLEAR);
+ // Redraw the character just before too, if there is one, because with
+ // some fonts and characters there can be a one pixel overlap.
+ gui_redraw_block(gui.cursor_row,
+ gui.cursor_col > 0 ? gui.cursor_col - 1 : gui.cursor_col,
+ gui.cursor_row, gui.cursor_col, GUI_MON_NOCLEAR);
+
// Cursor_is_valid is reset when the cursor is undrawn, also reset it
// here in case it wasn't needed to undraw it.
gui.cursor_is_valid = FALSE;
@@ -2662,7 +2663,7 @@ gui_redraw(
row2 = Y_2_ROW(y + h - 1);
col2 = X_2_COL(x + w - 1);
- (void)gui_redraw_block(row1, col1, row2, col2, GUI_MON_NOCLEAR);
+ gui_redraw_block(row1, col1, row2, col2, GUI_MON_NOCLEAR);
/*
* We may need to redraw the cursor, but don't take it upon us to change
@@ -2678,10 +2679,8 @@ gui_redraw(
/*
* Draw a rectangular block of characters, from row1 to row2 (inclusive) and
* from col1 to col2 (inclusive).
- * Return TRUE when the character before the first drawn character has
- * different attributes (may have to be redrawn too).
*/
- int
+ void
gui_redraw_block(
int row1,
int col1,
@@ -2695,12 +2694,11 @@ gui_redraw_block(
sattr_T first_attr;
int idx, len;
int back, nback;
- int retval = FALSE;
int orig_col1, orig_col2;
// Don't try to update when ScreenLines is not valid
if (!screen_cleared || ScreenLines == NULL)
- return retval;
+ return;
// Don't try to draw outside the shell!
// Check everything, strange values may be caused by a big border width
@@ -2762,8 +2760,6 @@ gui_redraw_block(
if (ScreenAttrs[off - 1 - back] != ScreenAttrs[off]
|| ScreenLines[off - 1 - back] == ' ')
break;
- retval = (col1 > 0 && ScreenAttrs[off - 1] != 0 && back == 0
- && ScreenLines[off - 1] != ' ');
// Break it up in strings of characters with the same attributes.
// Print UTF-8 characters individually.
@@ -2845,8 +2841,6 @@ gui_redraw_block(
gui.row = old_row;
gui.col = old_col;
gui.highlight_mask = (int)old_hl_mask;
-
- return retval;
}
static void