Patch from Daniel.
This commit is contained in:
Richard Kimberly Heck 2021-02-27 13:27:03 -05:00
parent 195b928f92
commit 0895b76f1e
4 changed files with 17 additions and 10 deletions

View File

@ -105,7 +105,7 @@ public:
/// leave monochrome painting mode /// leave monochrome painting mode
void leaveMonochromeMode() override {} void leaveMonochromeMode() override {}
/// draws a wavy line that can be used for underlining. /// draws a wavy line that can be used for underlining.
void wavyHorizontalLine(int, int, int, ColorCode) override {} void wavyHorizontalLine(FontInfo const &, int, int, int, ColorCode) override {}
}; };
} // namespace frontend } // namespace frontend

View File

@ -186,7 +186,7 @@ public:
/// leave monochrome painting mode /// leave monochrome painting mode
virtual void leaveMonochromeMode() = 0; virtual void leaveMonochromeMode() = 0;
/// draws a wavy line that can be used for underlining. /// draws a wavy line that can be used for underlining.
virtual void wavyHorizontalLine(int x, int y, int width, ColorCode col) = 0; virtual void wavyHorizontalLine(FontInfo const & f, int x, int y, int width, ColorCode col) = 0;
private: private:
/// Ratio between physical pixels and device-independent pixels /// Ratio between physical pixels and device-independent pixels
double pixel_ratio_; double pixel_ratio_;

View File

@ -406,7 +406,7 @@ void GuiPainter::textDecoration(FontInfo const & f, int x, int y, int width)
doubleUnderline(f, x, y, width); doubleUnderline(f, x, y, width);
if (f.uwave() == FONT_ON) if (f.uwave() == FONT_ON)
// f.color() doesn't work on some circumstances // f.color() doesn't work on some circumstances
wavyHorizontalLine(x, y, width, f.realColor().baseColor); wavyHorizontalLine(f, x, y, width, f.realColor().baseColor);
} }
@ -546,21 +546,28 @@ void GuiPainter::dashedUnderline(FontInfo const & f, int x, int y, int width)
} }
void GuiPainter::wavyHorizontalLine(int x, int y, int width, ColorCode col) void GuiPainter::wavyHorizontalLine(FontInfo const & f, int x, int y, int width, ColorCode col)
{ {
setQPainterPen(computeColor(col)); FontMetrics const & fm = theFontMetrics(f);
int const step = 2; int const pos = fm.underlinePos();
setQPainterPen(computeColor(col), line_solid, fm.lineWidth());
int const step = 2 * fm.lineWidth();
int const xend = x + width; int const xend = x + width;
int height = 1; int height = 1 * fm.lineWidth();
//FIXME: I am not sure if Antialiasing gives the best effect. //FIXME: I am not sure if Antialiasing gives the best effect.
//setRenderHint(Antialiasing, true); //setRenderHint(Antialiasing, true);
QVector<QPoint> points;
while (x < xend) { while (x < xend) {
height = - height; height = - height;
drawLine(x, y - height, x + step, y + height); points.append(QPoint(x, y + pos - height));
points.append(QPoint(x + step, y + pos + height));
x += step; x += step;
drawLine(x, y + height, x + step/2, y + height); points.append(QPoint(x, (qreal)y + pos + height));
points.append(QPoint(x + step/2, y + pos + height));
x += step/2; x += step/2;
} }
drawPolyline(points);
//setRenderHint(Antialiasing, false); //setRenderHint(Antialiasing, false);
} }

View File

@ -160,7 +160,7 @@ public:
int preeditText(int x, int y, int preeditText(int x, int y,
char_type c, FontInfo const & f, preedit_style style) override; char_type c, FontInfo const & f, preedit_style style) override;
void wavyHorizontalLine(int x, int y, int width, ColorCode col) override; void wavyHorizontalLine(FontInfo const & f, int x, int y, int width, ColorCode col) override;
private: private:
/// check the font, and if set, draw an underline /// check the font, and if set, draw an underline