]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix overline display over stretch glyphs with box on NS
authorPo Lu <luangruo@yahoo.com>
Sun, 12 Dec 2021 13:33:56 +0000 (21:33 +0800)
committerPo Lu <luangruo@yahoo.com>
Sun, 12 Dec 2021 13:33:56 +0000 (21:33 +0800)
* src/nsterm.m (ns_dumpglyphs_stretch): Don't draw text
decorations when there is a box.
(ns_draw_glyph_string): Draw text decorations after the box
in stretch glyph that have one.

src/nsterm.m

index 5d39be3a870b38ee8715b52d531ff003b0b228dc..4e5ce5ef7003983bc89e6278b9cb43253820637e 100644 (file)
@@ -3858,10 +3858,14 @@ ns_dumpglyphs_stretch (struct glyph_string *s)
 
       NSRectFill (glyphRect);
 
-      /* Draw overlining, etc. on the stretch glyph (or the part
-         of the stretch glyph after the cursor). */
-      ns_draw_text_decoration (s, face, fgCol, NSWidth (glyphRect),
-                               NSMinX (glyphRect));
+      /* Draw overlining, etc. on the stretch glyph (or the part of
+         the stretch glyph after the cursor).  If the glyph has a box,
+         then decorations will be drawn after drawing the box in
+         ns_draw_glyph_string, in order to prevent them from being
+         overwritten by the box.  */
+      if (s->face->box != FACE_NO_BOX)
+       ns_draw_text_decoration (s, face, fgCol, NSWidth (glyphRect),
+                                NSMinX (glyphRect));
 
       s->background_filled_p = 1;
     }
@@ -4105,6 +4109,16 @@ ns_draw_glyph_string (struct glyph_string *s)
   if (!s->for_overlaps && !box_drawn_p && s->face->box != FACE_NO_BOX)
     ns_dumpglyphs_box_or_relief (s);
 
+  if (s->face->box != FACE_NO_BOX
+      && s->first_glyph->type == STRETCH_GLYPH)
+    {
+      NSColor *fg_color;
+
+      fg_color = ns_lookup_indexed_color (NS_FACE_FOREGROUND (s->face), s->f);
+      ns_draw_text_decoration (s, s->face, fg_color,
+                              s->background_width, s->x);
+    }
+
   ns_unfocus (s->f);
 
   /* Draw surrounding overhangs. */