Subject: Re: bug#33648: 25.2; feature request: configurable position of strike-through line

From: Eli Zaretskii <[email-masked]>
Date: Mon, 31 Aug 2020 21:43:42 +0300

> From: Stefan Kangas <[email-masked]>
> Date: Mon, 31 Aug 2020 17:42:43 +0000
> Cc: [email-masked]
> 
> I've attached a suggested patch to change the strike-through line
> depending on the glyph size.  The constant factor was found by
> experimentation and produces reasonable results here.

Which glyph, though?  Emacs draws glyphs in series, called "glyph
string".  All the glyphs in a glyph string share the same face (and
thus the same font), but that doesn't mean all the glyphs are of the
same height.  And here...

> --- a/src/xterm.c
> +++ b/src/xterm.c
> @@ -3931,7 +3931,7 @@ x_draw_glyph_string (struct glyph_string *s)
>  	  int glyph_height = s->first_glyph->ascent + s->first_glyph->descent;
>  	  /* Strike-through width and offset from the glyph string's
>  	     top edge.  */
> -          unsigned long h = 1;
> +	  unsigned long h = STRIKE_THROUGH_WIDTH (glyph_height);
>            unsigned long dy = (glyph_height - h) / 2;

..glyph_height is simply the height of the first glyph in the glyph
string.  Which could be anything, whereas you seem to assume that all
of the glyphs in a glyph string are of the same height.  IOW, you are
repeating the same "mistake" we do now, just with a different fraction
value.  Wanna bet that it will break with some fonts?

That is why I suggested a Lisp-exposed variable that could be set to
the offset in pixels of the strike-through line from the base.  (If
you want to be fancy, the Lisp variable could also be a float, in
which case it will be interpreted as a fraction of the first glyph's
height.)  This should be user-controlled, which will allow users (or
Lisp programs) to set that as they see fit, without requiring us to
second-guess up front what they would like.

Thanks.