Subject: bug#40687: Missing right border on composed text used in 'display property

From: Eli Zaretskii <[email-masked]>
Date: Thu, 23 Apr 2020 18:48:09 +0300

> From: Clément Pit-Claudel <[email-masked]>
> Date: Fri, 17 Apr 2020 15:44:36 -0400
> 
> With the following sample code, I observe the results shown in the attached image.  The first two "ab" have a border, but the last one only has three-quarters of its border: the right side is missing.
> 
> (defface my-button
>   '((t :box(:line-width -4 :style released-button)
>        :background"lightgrey":foreground"black"))
>   "Button face")
> 
> (with-current-buffer (get-buffer-create "button")
>   (insert "\n")
>   (insert (propertize "ab" 'face 'my-button))
>   (insert " ")
>   (insert (propertize (compose-chars ?a '(Br . Bl) ?b) 'face 'my-button))
>   (insert " ")
>   (insert (propertize "ab" 'display (compose-chars ?a '(Br . Bl) ?b) 'face 'my-button))
>   (insert " ")
>   (pop-to-buffer-same-window (current-buffer)))

Thanks, should be fixed now.

FTR, a recipe to test more fully display of composed text with a :box
face is below.  I found quite a few problems with this, especially
when the text in the boxed face ends with a composed character.  They
should be fixed now on the master branch.  I tested this fully only on
MS-Windows; could someone please use the recipe below to verify the
display looks correctly also on X and on NS?  Note that what appears
below to be LATIN SMALL LETTER A WITH ACUTE is not a single character,
but 2 characters that are composed into a single glyph.

(defface my-button
  '((t :box(:line-width -4 :style released-button)
       :background"lightgrey":foreground"black"))
  "Button face")

(with-current-buffer (get-buffer-create "button")
  (insert "\n")
  (insert " ")
  (insert (propertize "ab" 'face 'my-button))
  (insert " ")
  (insert "\n")
  (insert " ")
  (insert (propertize (compose-chars ?a '(Br . Bl) ?b) 'face 'my-button))
  (insert " ")
  (insert "\n")
  (insert " ")
  (insert (propertize "ab" 'display (compose-chars ?a '(Br . Bl) ?b) 'face 'my-button))
  (insert " ")
  (insert "\n")
  (insert " ")
  (insert (propertize "xá" 'face 'my-button))
  (insert " ")
  (insert "\n")
  (insert " ")
  (insert (propertize "Khmer (ភាសាខ្មែរ) ជំរាបសួរ" 'face 'my-button))
  (insert " ")
  (pop-to-buffer-same-window (current-buffer)))