Commit 4da87999 authored by Martin Rudalics's avatar Martin Rudalics

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.
parent 1b082c88
...@@ -660,21 +660,25 @@ w32_draw_window_divider (struct window *w, int x0, int x1, int y0, int y1) ...@@ -660,21 +660,25 @@ w32_draw_window_divider (struct window *w, int x0, int x1, int y0, int y1)
? face_last->foreground ? face_last->foreground
: FRAME_FOREGROUND_PIXEL (f)); : FRAME_FOREGROUND_PIXEL (f));
if (y1 - y0 > x1 - x0 && x1 - x0 > 2) if ((y1 - y0 > x1 - x0) && (x1 - x0 >= 3))
/* Vertical. */ /* 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_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, x0 + 1, y0, x1 - 1, y1);
w32_fill_area_abs (f, hdc, color_last, x1 - 1, y0, x1, y1); w32_fill_area_abs (f, hdc, color_last, x1 - 1, y0, x1, y1);
} }
else if (x1 - x0 > y1 - y0 && y1 - y0 > 3) else if ((x1 - x0 > y1 - y0) && (y1 - y0 >= 3))
/* Horizontal. */ /* 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_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, x0, y0 + 1, x1, y1 - 1);
w32_fill_area_abs (f, hdc, color_last, x0, y1 - 1, x1, y1); w32_fill_area_abs (f, hdc, color_last, x0, y1 - 1, x1, y1);
} }
else 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); w32_fill_area_abs (f, hdc, color, x0, y0, x1, y1);
release_frame_dc (f, hdc); release_frame_dc (f, hdc);
......
...@@ -1104,8 +1104,9 @@ x_draw_window_divider (struct window *w, int x0, int x1, int y0, int y1) ...@@ -1104,8 +1104,9 @@ x_draw_window_divider (struct window *w, int x0, int x1, int y0, int y1)
: FRAME_FOREGROUND_PIXEL (f)); : FRAME_FOREGROUND_PIXEL (f));
Display *display = FRAME_X_DISPLAY (f); Display *display = FRAME_X_DISPLAY (f);
if (y1 - y0 > x1 - x0 && x1 - x0 > 2) if ((y1 - y0 > x1 - x0) && (x1 - x0 >= 3))
/* Vertical. */ /* A vertical divider, at least three pixels wide: Draw first and
last pixels differently. */
{ {
XSetForeground (display, f->output_data.x->normal_gc, color_first); XSetForeground (display, f->output_data.x->normal_gc, color_first);
x_fill_rectangle (f, f->output_data.x->normal_gc, 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) ...@@ -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, x_fill_rectangle (f, f->output_data.x->normal_gc,
x1 - 1, y0, 1, y1 - y0); x1 - 1, y0, 1, y1 - y0);
} }
else if (x1 - x0 > y1 - y0 && y1 - y0 > 3) else if ((x1 - x0 > y1 - y0) && (y1 - y0 >= 3))
/* Horizontal. */ /* A horizontal divider, at least three pixels high: Draw first and
last pixels differently. */
{ {
XSetForeground (display, f->output_data.x->normal_gc, color_first); XSetForeground (display, f->output_data.x->normal_gc, color_first);
x_fill_rectangle (f, f->output_data.x->normal_gc, 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) ...@@ -1132,6 +1134,8 @@ x_draw_window_divider (struct window *w, int x0, int x1, int y0, int y1)
} }
else else
{ {
/* In any other case do not draw the first and last pixels
differently. */
XSetForeground (display, f->output_data.x->normal_gc, color); XSetForeground (display, f->output_data.x->normal_gc, color);
x_fill_rectangle (f, f->output_data.x->normal_gc, x_fill_rectangle (f, f->output_data.x->normal_gc,
x0, y0, x1 - x0, y1 - y0); x0, y0, x1 - x0, y1 - y0);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment