commit a2378c11822e1478a20d36d2ad72558fcecdb923
Author: Jean-Marc Lasgouttes <[email protected]>
Date:   Wed Mar 15 10:48:31 2023 +0100

    Improve display of ellipsis special char
    
    Follow the TeXbook and use a half space as separation.
---
 src/insets/InsetSpecialChar.cpp |   22 ++++++++++++++--------
 1 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/src/insets/InsetSpecialChar.cpp b/src/insets/InsetSpecialChar.cpp
index bebf61a..fd36a21 100644
--- a/src/insets/InsetSpecialChar.cpp
+++ b/src/insets/InsetSpecialChar.cpp
@@ -191,8 +191,7 @@ void drawLogo(PainterInfo & pi, int & x, int const y, 
InsetSpecialChar::Kind kin
 
 void InsetSpecialChar::metrics(MetricsInfo & mi, Dimension & dim) const
 {
-       frontend::FontMetrics const & fm =
-               theFontMetrics(mi.base.font);
+       frontend::FontMetrics const & fm = theFontMetrics(mi.base.font);
        dim.asc = fm.maxAscent();
        dim.des = 0;
        dim.wid = 0;
@@ -211,7 +210,9 @@ void InsetSpecialChar::metrics(MetricsInfo & mi, Dimension 
& dim) const
                        s = from_ascii(".");
                        break;
                case LDOTS:
-                       s = from_ascii(". . .");
+                       // see comment in draw().
+                       dim.wid = 3 * fm.width(char_type('.'))
+                               + 3 * fm.width(char_type(' ')) / 2;
                        break;
                case MENU_SEPARATOR:
                        // ▹  U+25B9 WHITE RIGHT-POINTING SMALL TRIANGLE
@@ -285,15 +286,20 @@ void InsetSpecialChar::draw(PainterInfo & pi, int x, int 
y) const
        case LDOTS:
        {
                font.setColor(Color_special);
-               string ell = ". . . ";
-               docstring dell(ell.begin(), ell.end());
-               pi.pain.text(x, y, dell, font);
+               /* \textellipsis uses a \fontdimen3 is spacing. The TeXbook
+                * tells us that \fontdimen3 is the interword stretch, and
+                * that this is usually half a space.
+                */
+               frontend::FontMetrics const & fm = theFontMetrics(font);
+               int wid1 = fm.width(char_type('.')) + fm.width(char_type(' ')) 
/ 2;
+               pi.pain.text(x, y, char_type('.'), font);
+               pi.pain.text(x + wid1, y, char_type('.'), font);
+               pi.pain.text(x + 2 * wid1, y, char_type('.'), font);
                break;
        }
        case MENU_SEPARATOR:
        {
-               frontend::FontMetrics const & fm =
-                       theFontMetrics(font);
+               frontend::FontMetrics const & fm = theFontMetrics(font);
 
                // There is a \thinspace on each side of the triangle
                x += fm.em() / 6;
-- 
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to