Fix display artifacts from ns_dumpglyphs_stretch (Bug#8470).
authorAlp Aker <alp.tekin.aker@gmail.com>
Thu, 28 Jul 2011 18:41:21 +0000 (14:41 -0400)
committerChong Yidong <cyd@stupidchicken.com>
Thu, 28 Jul 2011 18:41:21 +0000 (14:41 -0400)
* src/nsterm.m (ns_dumpglyphs_stretch): Avoid overwriting left fringe
or scroll bar.

src/ChangeLog
src/nsterm.m

index 2bd3cf8..3f9c098 100644 (file)
@@ -9,6 +9,9 @@
        (EmacsTooltip -init): Remove bezels and add shadows to
        tooltip windows.
 
+       * nsterm.m (ns_dumpglyphs_stretch): Avoid overwriting left fringe
+       or scroll bar (Bug#8470).
+
 2011-07-28  Alp Aker  <alp.tekin.aker@gmail.com>
 
        Implement strike-through and overline on NextStep (Bug#8863).
index e9e7dcc..d4b1a3f 100644 (file)
@@ -3110,12 +3110,24 @@ ns_dumpglyphs_stretch (struct glyph_string *s)
         {
           if (!s->row->full_width_p)
             {
+             int overrun, leftoverrun;
+
               /* truncate to avoid overwriting fringe and/or scrollbar */
-              int overrun = max (0, (s->x + s->background_width)
-                                  - (WINDOW_BOX_RIGHT_EDGE_X (s->w)
-                                    - WINDOW_RIGHT_FRINGE_WIDTH (s->w)));
+             overrun = max (0, (s->x + s->background_width)
+                            - (WINDOW_BOX_RIGHT_EDGE_X (s->w)
+                               - WINDOW_RIGHT_FRINGE_WIDTH (s->w)));
               r[i].size.width -= overrun;
 
+             /* truncate to avoid overwriting to left of the window box */
+             leftoverrun = (WINDOW_BOX_LEFT_EDGE_X (s->w)
+                            + WINDOW_LEFT_FRINGE_WIDTH (s->w)) - s->x;
+
+             if (leftoverrun > 0)
+               {
+                 r[i].origin.x += leftoverrun;
+                 r[i].size.width -= leftoverrun;
+               }
+
               /* XXX: Try to work between problem where a stretch glyph on
                  a partially-visible bottom row will clear part of the
                  modeline, and another where list-buffers headers and similar