mirror of
https://github.com/masscollaborationlabs/emacs.git
synced 2025-07-11 06:30:51 +00:00
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.
This commit is contained in:
parent
1b082c886c
commit
4da87999c2
2 changed files with 16 additions and 8 deletions
|
@ -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);
|
||||
|
|
12
src/xterm.c
12
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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue