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 {}
/// 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 {}

View File

@ -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.

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;
/// 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,

View File

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