[LyX/master] Use correct width for \fint

Enrico Forestieri forenr at lyx.org
Sat Aug 29 18:15:49 UTC 2020


commit 80f94a9398ef1843d2592e87bd71d1cd2b40703c
Author: Enrico Forestieri <forenr at lyx.org>
Date:   Sat Aug 29 20:10:26 2020 +0200

    Use correct width for \fint
    
    Both QTextLine::naturalTextWidth() and QTextLine::horizontalAdvance()
    return the same value for \fint. However, examining esint10.ttf with
    fontforge does not reveal any issue with the metrics. The fact that
    \fint seems to be the only affected symbol might be due to its code
    point, which corresponds to a space, so that maybe Qt makes some
    assumptions on the metrics.
    
    As QTextLine::naturalTextWidth() returns the width of the line that is
    occupied by text, in the case of a single symbol we can obtain the
    same value by using the width of the rectangle bounding the symbol.
---
 src/frontends/qt/GuiFontMetrics.cpp |   12 ++++++------
 1 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/frontends/qt/GuiFontMetrics.cpp b/src/frontends/qt/GuiFontMetrics.cpp
index 9ff027e..3611250 100644
--- a/src/frontends/qt/GuiFontMetrics.cpp
+++ b/src/frontends/qt/GuiFontMetrics.cpp
@@ -245,18 +245,18 @@ int GuiFontMetrics::width(docstring const & s) const
 #else
 	bool const math_char = s.length() == 1;
 #endif
-	// keep value 0 for math chars with width 0
-	if (!math_char || metrics_.width(toqstr(s)) != 0) {
+	if (math_char) {
+		// keep value 0 for math chars with width 0
+		if (metrics_.width(toqstr(s)) != 0)
+			w = metrics_.boundingRect(toqstr(s)).width();
+	} else {
 		QTextLayout tl;
 		tl.setText(toqstr(s));
 		tl.setFont(font_);
 		tl.beginLayout();
 		QTextLine line = tl.createLine();
 		tl.endLayout();
-		if (math_char)
-			w = iround(line.naturalTextWidth());
-		else
-			w = iround(line.horizontalAdvance());
+		w = iround(line.horizontalAdvance());
 	}
 	strwidth_cache_.insert(s, w, s.size() * sizeof(char_type));
 	return w;


More information about the lyx-cvs mailing list