Subject: Re: bug#25824: 25.1; bugs about display specfications

From: [email-masked]
Date: Thu, 23 Feb 2017 11:53:16 +0900

Eli Zaretskii <[email-masked]> writes:
> Display
> string and 'raise'/'heaight' specs don't make sense together in the
> same display spec.

The height of the replacing text can be controlled by its face.
Is there any chance to 'raise' the replacing text?

> The space is needed to accommodate the enlarged X on the same screen
> line.  Emacs display engine doesn't require that all the glyphs on a
> line be of the same size, but it does require them to have the same
> baseline (the display geometry is that of a canvas).

I don't understand the relation between the space and the baseline.

I want to display large text centered vertically.
But there is a blank area over the large text.

I expect line-pixel-height of a line with 5 times larger text
is 5 times larger than a normal line.

Practically, if the large text is 'raise'd negative,
line-pixel-height is 5 times plus 'raise'd pixels larger.
(with some computational error)

;; normal line
(line-pixel-height)
=>22

;; large text without raise specification
(progn
  (insert "normal"
          (propertize "LARGE" 'display '((height 5))))
  (beginning-of-line)
  (line-pixel-height))
=>107

;; cap height is 14 and line height is 22
;; 'raise' -2 * cap height pixels
(progn
  (insert "normal"
          (propertize "LARGE" 'display '((raise -1.2727) (height 5))))
  (beginning-of-line)
  (line-pixel-height))
=>134

By the way, if the baseline height is same,
I think consecutive underlines should be displayed as one straight line.
The form below shows three underlines with different height.

(insert (propertize "X" 'face '(:underline t))
        (propertize "X" 'face '(:underline t) 'display '((raise -1)))
        (propertize "X" 'face '(:underline t) 'display '((raise 1))))

As for overlines, they are displayed as one straight line.

(insert (propertize "X" 'face '(:overline t))
        (propertize "X" 'face '(:overline t) 'display '((raise -1)))
        (propertize "X" 'face '(:overline t) 'display '((raise 1))))