From 94c6d45b74f815c8c924ed88b30f246201733f05 Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Fri, 22 Sep 2023 12:41:44 +0200 Subject: [PATCH] When drawing macro names, enforce LtR direction Add a Direction parameter to the Painter::text methods that take a FontInfo parameter. In drawStrRed and drawStrBlack, force the direction to LtR. Fixes bug #12905. --- src/frontends/NullPainter.h | 4 ++-- src/frontends/Painter.h | 9 +++++++-- src/frontends/qt/GuiPainter.cpp | 8 ++++---- src/frontends/qt/GuiPainter.h | 9 ++++----- src/mathed/MathSupport.cpp | 4 ++-- 5 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/frontends/NullPainter.h b/src/frontends/NullPainter.h index 3af85aa6b2..bec16fa327 100644 --- a/src/frontends/NullPainter.h +++ b/src/frontends/NullPainter.h @@ -65,10 +65,10 @@ public: void image(int, int, int, int, graphics::Image const &, bool) override {} /// draw a string - void text(int, int, docstring const &, FontInfo const &) override {} + void text(int, int, docstring const &, FontInfo const &, Direction const = Auto) override {} /// draw a char - void text(int, int, char_type, FontInfo const &) override {} + void text(int, int, char_type, FontInfo const &, Direction const = Auto) override {} /// draw a string void text(int, int, docstring const &, Font const &, double, double) override {} diff --git a/src/frontends/Painter.h b/src/frontends/Painter.h index 41427ab3e0..60953341af 100644 --- a/src/frontends/Painter.h +++ b/src/frontends/Painter.h @@ -134,11 +134,16 @@ public: virtual void image(int x, int y, int w, int h, graphics::Image const & image, bool const revert_in_darkmode = false) = 0; + // Direction for painting text + enum Direction { LtR, RtL, Auto }; + /// draw a string at position x, y (y is the baseline). - virtual void text(int x, int y, docstring const & str, FontInfo const & f) = 0; + virtual void text(int x, int y, docstring const & str, FontInfo const & f, + Direction const dir = Auto) = 0; /// draw a char at position x, y (y is the baseline) - virtual void text(int x, int y, char_type c, FontInfo const & f) = 0; + virtual void text(int x, int y, char_type c, FontInfo const & f, + Direction const dir = Auto) = 0; /** draw a string at position x, y (y is the baseline). The * text direction is enforced by the \c Font. diff --git a/src/frontends/qt/GuiPainter.cpp b/src/frontends/qt/GuiPainter.cpp index 62e48c48b2..7110910c3c 100644 --- a/src/frontends/qt/GuiPainter.cpp +++ b/src/frontends/qt/GuiPainter.cpp @@ -282,15 +282,15 @@ void GuiPainter::image(int x, int y, int w, int h, graphics::Image const & i, } -void GuiPainter::text(int x, int y, char_type c, FontInfo const & f) +void GuiPainter::text(int x, int y, char_type c, FontInfo const & f, Direction const dir) { - text(x, y, docstring(1, c), f); + text(x, y, docstring(1, c), f, dir); } -void GuiPainter::text(int x, int y, docstring const & s, FontInfo const & f) +void GuiPainter::text(int x, int y, docstring const & s, FontInfo const & f, Direction const dir) { - text(x, y, s, f, Auto, 0.0, 0.0); + text(x, y, s, f, dir, 0.0, 0.0); } diff --git a/src/frontends/qt/GuiPainter.h b/src/frontends/qt/GuiPainter.h index 522b83c65f..932072e481 100644 --- a/src/frontends/qt/GuiPainter.h +++ b/src/frontends/qt/GuiPainter.h @@ -116,10 +116,12 @@ public: lyx::graphics::Image const & image, bool const darkmode = false) override; /// draw a string at position x, y (y is the baseline). - void text(int x, int y, docstring const & str, FontInfo const & f) override; + void text(int x, int y, docstring const & str, FontInfo const & f, + Direction const dir = Auto) override; /// draw a char at position x, y (y is the baseline) - void text(int x, int y, char_type c, FontInfo const & f) override; + void text(int x, int y, char_type c, FontInfo const & f, + Direction const dir = Auto) override; /** draw a string at position x, y (y is the baseline). The * text direction is enforced by the \c Font. @@ -188,9 +190,6 @@ private: line_style ls = line_solid, int lw = thin_line, Qt::PenJoinStyle js = Qt::BevelJoin); - // Direction for painting text - enum Direction { LtR, RtL, Auto }; - // Real text() method void text(int x, int y, docstring const & s, FontInfo const & f, Direction const dir, diff --git a/src/mathed/MathSupport.cpp b/src/mathed/MathSupport.cpp index 16019205f1..b71c46ee8f 100644 --- a/src/mathed/MathSupport.cpp +++ b/src/mathed/MathSupport.cpp @@ -805,7 +805,7 @@ void drawStrRed(PainterInfo & pi, int x, int y, docstring const & str) FontInfo f = pi.base.font; augmentFont(f, "mathnormal"); f.setColor(Color_latex); - pi.pain.text(x, y, str, f); + pi.pain.text(x, y, str, f, Painter::LtR); } @@ -814,7 +814,7 @@ void drawStrBlack(PainterInfo & pi, int x, int y, docstring const & str) FontInfo f = pi.base.font; augmentFont(f, "mathnormal"); f.setColor(Color_foreground); - pi.pain.text(x, y, str, f); + pi.pain.text(x, y, str, f, Painter::LtR); } -- 2.39.5