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.
This commit is contained in:
Jean-Marc Lasgouttes 2023-09-22 12:41:44 +02:00
parent fcbbb138a2
commit 94c6d45b74
5 changed files with 19 additions and 15 deletions

View File

@ -65,10 +65,10 @@ public:
void image(int, int, int, int, graphics::Image const &, bool) override {} void image(int, int, int, int, graphics::Image const &, bool) override {}
/// draw a string /// 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 /// 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 /// draw a string
void text(int, int, docstring const &, Font const &, double, double) override {} void text(int, int, docstring const &, Font const &, double, double) override {}

View File

@ -134,11 +134,16 @@ public:
virtual void image(int x, int y, int w, int h, virtual void image(int x, int y, int w, int h,
graphics::Image const & image, bool const revert_in_darkmode = false) = 0; 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). /// 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) /// 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 /** draw a string at position x, y (y is the baseline). The
* text direction is enforced by the \c Font. * text direction is enforced by the \c Font.

View File

@ -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);
} }

View File

@ -116,10 +116,12 @@ public:
lyx::graphics::Image const & image, bool const darkmode = false) override; lyx::graphics::Image const & image, bool const darkmode = false) override;
/// draw a string at position x, y (y is the baseline). /// 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) /// 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 /** draw a string at position x, y (y is the baseline). The
* text direction is enforced by the \c Font. * text direction is enforced by the \c Font.
@ -188,9 +190,6 @@ private:
line_style ls = line_solid, int lw = thin_line, line_style ls = line_solid, int lw = thin_line,
Qt::PenJoinStyle js = Qt::BevelJoin); Qt::PenJoinStyle js = Qt::BevelJoin);
// Direction for painting text
enum Direction { LtR, RtL, Auto };
// Real text() method // Real text() method
void text(int x, int y, docstring const & s, void text(int x, int y, docstring const & s,
FontInfo const & f, Direction const dir, FontInfo const & f, Direction const dir,

View File

@ -805,7 +805,7 @@ void drawStrRed(PainterInfo & pi, int x, int y, docstring const & str)
FontInfo f = pi.base.font; FontInfo f = pi.base.font;
augmentFont(f, "mathnormal"); augmentFont(f, "mathnormal");
f.setColor(Color_latex); 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; FontInfo f = pi.base.font;
augmentFont(f, "mathnormal"); augmentFont(f, "mathnormal");
f.setColor(Color_foreground); f.setColor(Color_foreground);
pi.pain.text(x, y, str, f); pi.pain.text(x, y, str, f, Painter::LtR);
} }