emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs-26 4da8799: Fix misbehavior when drawing three-pixel


From: Martin Rudalics
Subject: [Emacs-diffs] emacs-26 4da8799: Fix misbehavior when drawing three-pixel high horizontal dividers (Bug#29353)
Date: Mon, 20 Nov 2017 03:20:39 -0500 (EST)

branch: emacs-26
commit 4da87999c234155300b30b01c5a7e221d65e4cc8
Author: Martin Rudalics <address@hidden>
Commit: Martin Rudalics <address@hidden>

    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.
---
 src/w32term.c | 12 ++++++++----
 src/xterm.c   | 12 ++++++++----
 2 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/src/w32term.c b/src/w32term.c
index e62d49d..7a3b2cc 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 28abfae..1deb7b4 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);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]