From: Martin Rudalics Date: Mon, 20 Nov 2017 08:18:59 +0000 (+0100) Subject: Fix misbehavior when drawing three-pixel high horizontal dividers (Bug#29353) X-Git-Tag: emacs-26.0.91~283^2 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=4da87999c234155300b30b01c5a7e221d65e4cc8;p=emacs.git Fix misbehavior when drawing three-pixel high horizontal dividers (Bug#29353) * src/xterm.c (x_draw_window_divider): * src/w32term.c (w32_draw_window_divider): Fix misbehavior when drawing three-pixel high horizontal dividers (Bug#29353). The misbehavior was noted by Keith David Bershatsky and analyzed by Alan Third. --- diff --git a/src/w32term.c b/src/w32term.c index e62d49dd947..7a3b2cc631f 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -660,21 +660,25 @@ w32_draw_window_divider (struct window *w, int x0, int x1, int y0, int y1) ? face_last->foreground : FRAME_FOREGROUND_PIXEL (f)); - if (y1 - y0 > x1 - x0 && x1 - x0 > 2) - /* Vertical. */ + if ((y1 - y0 > x1 - x0) && (x1 - x0 >= 3)) + /* A vertical divider, at least three pixels wide: Draw first and + last pixels differently. */ { w32_fill_area_abs (f, hdc, color_first, x0, y0, x0 + 1, y1); w32_fill_area_abs (f, hdc, color, x0 + 1, y0, x1 - 1, y1); w32_fill_area_abs (f, hdc, color_last, x1 - 1, y0, x1, y1); } - else if (x1 - x0 > y1 - y0 && y1 - y0 > 3) - /* Horizontal. */ + else if ((x1 - x0 > y1 - y0) && (y1 - y0 >= 3)) + /* A horizontal divider, at least three pixels high: Draw first and + last pixels differently. */ { w32_fill_area_abs (f, hdc, color_first, x0, y0, x1, y0 + 1); w32_fill_area_abs (f, hdc, color, x0, y0 + 1, x1, y1 - 1); w32_fill_area_abs (f, hdc, color_last, x0, y1 - 1, x1, y1); } else + /* In any other case do not draw the first and last pixels + differently. */ w32_fill_area_abs (f, hdc, color, x0, y0, x1, y1); release_frame_dc (f, hdc); diff --git a/src/xterm.c b/src/xterm.c index 28abfaecde9..1deb7b46013 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -1104,8 +1104,9 @@ x_draw_window_divider (struct window *w, int x0, int x1, int y0, int y1) : FRAME_FOREGROUND_PIXEL (f)); Display *display = FRAME_X_DISPLAY (f); - if (y1 - y0 > x1 - x0 && x1 - x0 > 2) - /* Vertical. */ + if ((y1 - y0 > x1 - x0) && (x1 - x0 >= 3)) + /* A vertical divider, at least three pixels wide: Draw first and + last pixels differently. */ { XSetForeground (display, f->output_data.x->normal_gc, color_first); x_fill_rectangle (f, f->output_data.x->normal_gc, @@ -1117,8 +1118,9 @@ x_draw_window_divider (struct window *w, int x0, int x1, int y0, int y1) x_fill_rectangle (f, f->output_data.x->normal_gc, x1 - 1, y0, 1, y1 - y0); } - else if (x1 - x0 > y1 - y0 && y1 - y0 > 3) - /* Horizontal. */ + else if ((x1 - x0 > y1 - y0) && (y1 - y0 >= 3)) + /* A horizontal divider, at least three pixels high: Draw first and + last pixels differently. */ { XSetForeground (display, f->output_data.x->normal_gc, color_first); x_fill_rectangle (f, f->output_data.x->normal_gc, @@ -1132,6 +1134,8 @@ x_draw_window_divider (struct window *w, int x0, int x1, int y0, int y1) } else { + /* In any other case do not draw the first and last pixels + differently. */ XSetForeground (display, f->output_data.x->normal_gc, color); x_fill_rectangle (f, f->output_data.x->normal_gc, x0, y0, x1 - x0, y1 - y0);