[LyX/master] Amend 08b4a01fd33f

Udi Fogiel <[email protected]>
Newsgroups gmane.editors.lyx.cvs
Message-ID <[email protected]>
commit db168dc6bba9c33603eec5045aeec7569f3d21dc
Author: Udi Fogiel <[email protected]>
Date:   Sat Aug 15 03:23:19 2026 +0300

    Amend 08b4a01fd33f
    
    That commit forced LtR direction on mathed glyph draws to fix #12928,
    but this also routed them through Qt's text shaping (QTextLayout),
    which corrupts raw glyph-index symbols such as \int that are
    not real Unicode text. Decouple direction enforcement from shaping in
    GuiPainter::text() so mathed keeps forced LtR ordering without
    triggering the shaper.
---
 src/frontends/qt/GuiPainter.cpp | 12 +++++++++---
 src/frontends/qt/GuiPainter.h   |  3 ++-
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/frontends/qt/GuiPainter.cpp b/src/frontends/qt/GuiPainter.cpp
index 0121fe5dfc..600bcfa20f 100644
--- a/src/frontends/qt/GuiPainter.cpp
+++ b/src/frontends/qt/GuiPainter.cpp
@@ -290,14 +290,14 @@ void GuiPainter::text(int x, int y, char_type c, FontInfo const & f, Direction c
 
 void GuiPainter::text(int x, int y, docstring const & s, FontInfo const & f, Direction const dir)
 {
-	text(x, y, s, f, dir, 0.0, 0.0);
+	text(x, y, s, f, dir, 0.0, 0.0, false, false);
 }
 
 
 void GuiPainter::text(int x, int y, docstring const & s,
                       FontInfo const & f, Direction const dir,
                       double const wordspacing, double const tw,
-                      bool const invert)
+                      bool const invert, bool const shape)
 {
 	//LYXERR0("text: x=" << x << ", s=" << s);
 	if (s.empty())
@@ -336,11 +336,17 @@ void GuiPainter::text(int x, int y, docstring const & s,
 		// Brighten that for workarea display (#13218)
 		rc.mergeColor = Color_foreground;
 	setQPainterPen(computeColor(rc));
-	if (dir != Auto) {
+	if (dir != Auto && shape) {
 		auto ptl = fm.getTextLayout(s, dir == RtL, wordspacing);
 		QTextLine const & tline = ptl->lineForTextPosition(0);
 		ptl->draw(this, QPointF(x, y - tline.ascent()));
 	} else {
+		if (dir == Auto)
+			setLayoutDirection(Qt::LayoutDirectionAuto);
+		else if (dir == RtL)
+			setLayoutDirection(Qt::RightToLeft);
+		else
+			setLayoutDirection(Qt::LeftToRight);
 		if (font() != ff)
 			setFont(ff);
 		drawText(x, y, str);
diff --git a/src/frontends/qt/GuiPainter.h b/src/frontends/qt/GuiPainter.h
index abc4df9065..9b193b3cfd 100644
--- a/src/frontends/qt/GuiPainter.h
+++ b/src/frontends/qt/GuiPainter.h
@@ -202,10 +202,11 @@ private:
 		Qt::PenJoinStyle js = Qt::BevelJoin);
 
 	// Real text() method
+	// shape = false skips Qt's text shaper for raw math glyph draws.
 	void text(int x, int y, docstring const & s,
 		  FontInfo const & f, Direction const dir,
 		  double const wordspacing, double tw,
-		  bool const invert = false);
+		  bool const invert = false, bool const shape = true);
 
 	QColor current_color_;
 	Painter::line_style current_ls_;
-- 
lyx-cvs mailing list
[email protected]
https://lists.lyx.org/mailman/listinfo/lyx-cvs
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.