]> git.eshelyaron.com Git - emacs.git/commitdiff
Implement recent improvements to underline display on PGTK
authorPo Lu <luangruo@yahoo.com>
Mon, 10 Jan 2022 12:07:12 +0000 (20:07 +0800)
committerPo Lu <luangruo@yahoo.com>
Mon, 10 Jan 2022 12:07:12 +0000 (20:07 +0800)
* src/pgtkterm.c (pgtk_draw_glyph_string): Respect new underline
face fields.

src/pgtkterm.c

index 1195d53d320080a64ce1b4fd0b4b9b3a5b4c9b8b..0155ae991d3f0dce14e64a3dcf36e67d93347ea7 100644 (file)
@@ -2527,8 +2527,12 @@ pgtk_draw_glyph_string (struct glyph_string *s)
              unsigned long thickness, position;
              int y;
 
-             if (s->prev && s->prev->face->underline
-                 && s->prev->face->underline == FACE_UNDER_LINE)
+             if (s->prev
+                 && s->prev->face->underline == FACE_UNDER_LINE
+                 && (s->prev->face->underline_at_descent_line_p
+                     == s->face->underline_at_descent_line_p)
+                 && (s->prev->face->underline_pixels_above_descent_line
+                     == s->face->underline_pixels_above_descent_line))
                {
                  /* We use the same underline style as the previous one.  */
                  thickness = s->prev->underline_thickness;
@@ -2543,8 +2547,11 @@ pgtk_draw_glyph_string (struct glyph_string *s)
                    thickness = font->underline_thickness;
                  else
                    thickness = 1;
-                 if (x_underline_at_descent_line)
-                   position = (s->height - thickness) - (s->ybase - s->y);
+                 if ((x_underline_at_descent_line
+                      || s->face->underline_at_descent_line_p))
+                   position = ((s->height - thickness)
+                               - (s->ybase - s->y)
+                               - s->face->underline_pixels_above_descent_line);
                  else
                    {
                      /* Get the underline position.  This is the recommended
@@ -2563,7 +2570,11 @@ pgtk_draw_glyph_string (struct glyph_string *s)
                      else
                        position = underline_minimum_offset;
                    }
-                 position = max (position, underline_minimum_offset);
+
+                 /* Ignore minimum_offset if the amount of pixels was
+                    explictly specified.  */
+                 if (!s->face->underline_pixels_above_descent_line)
+                   position = max (position, underline_minimum_offset);
                }
              /* Check the sanity of thickness and position.  We should
                 avoid drawing underline out of the current line area.  */