mirror of
https://github.com/masscollaborationlabs/emacs.git
synced 2025-07-11 14:40:50 +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
|
? 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);
|
||||||
|
|
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));
|
: 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)
|
||||||
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)
|
||||||
}
|
}
|
||||||
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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue