X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiPainter.cpp;h=afa2182eb671f4ee3e53208c0df13efc4a273e86;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=f4bd49587c5445aad8c4d0c85f08dcb8bf6b0e8d;hpb=f694cf713571c8de3c414fd1969e5338a4b7ffef;p=lyx.git diff --git a/src/frontends/qt4/GuiPainter.cpp b/src/frontends/qt4/GuiPainter.cpp index f4bd49587c..afa2182eb6 100644 --- a/src/frontends/qt4/GuiPainter.cpp +++ b/src/frontends/qt4/GuiPainter.cpp @@ -336,6 +336,12 @@ int GuiPainter::text(int x, int y, docstring const & s, textwidth = smallCapsText(x, y, str, f); if (f.underbar() == FONT_ON) underline(f, x, y, textwidth); + if (f.strikeout() == FONT_ON) + strikeoutLine(f, x, y, textwidth); + if (f.uuline() == FONT_ON) + doubleUnderline(f, x, y, textwidth); + if (f.uwave() == FONT_ON) + wavyHorizontalLine(x, y, textwidth, f.realColor().baseColor); return textwidth; } @@ -345,6 +351,13 @@ int GuiPainter::text(int x, int y, docstring const & s, textwidth = fm.width(s); if (f.underbar() == FONT_ON) underline(f, x, y, textwidth); + if (f.strikeout() == FONT_ON) + strikeoutLine(f, x, y, textwidth); + if (f.uuline() == FONT_ON) + doubleUnderline(f, x, y, textwidth); + if (f.uwave() == FONT_ON) + // f.color() doesn't work on some circumstances + wavyHorizontalLine(x, y, textwidth, f.realColor().baseColor); if (!isDrawingEnabled()) return textwidth; @@ -520,6 +533,17 @@ int GuiPainter::preeditText(int x, int y, char_type c, } +void GuiPainter::doubleUnderline(FontInfo const & f, int x, int y, int width) +{ + FontMetrics const & fm = theFontMetrics(f); + + int const below = max(fm.maxDescent() / 2, 2); + + line(x, y + below, x + width, y + below, f.realColor()); + line(x, y + below - 2, x + width, y + below - 2, f.realColor()); +} + + void GuiPainter::underline(FontInfo const & f, int x, int y, int width) { FontMetrics const & fm = theFontMetrics(f); @@ -534,6 +558,20 @@ void GuiPainter::underline(FontInfo const & f, int x, int y, int width) } +void GuiPainter::strikeoutLine(FontInfo const & f, int x, int y, int width) +{ + FontMetrics const & fm = theFontMetrics(f); + + int const middle = max((fm.maxHeight() / 4), 1); + int const height = middle/3; + + if (height < 2) + line(x, y - middle, x + width, y - middle, f.realColor()); + else + fillRectangle(x, y - middle, width, height, f.realColor()); +} + + void GuiPainter::dashedUnderline(FontInfo const & f, int x, int y, int width) { FontMetrics const & fm = theFontMetrics(f); @@ -548,5 +586,24 @@ void GuiPainter::dashedUnderline(FontInfo const & f, int x, int y, int width) line(x, y + below + n, x + width, y + below + n, f.realColor(), line_onoffdash); } + +void GuiPainter::wavyHorizontalLine(int x, int y, int width, ColorCode col) +{ + setQPainterPen(computeColor(col)); + int const step = 4; + int const xend = x + width; + int height = 1; + //FIXME: I am not sure if Antialiasing gives the best effect. + //setRenderHint(Antialiasing, true); + while (x < xend) { + height = - height; + drawLine(x, y - height, x + step, y + height); + x += step; + drawLine(x, y + height, x + 2, y + height); + x += 2; + } + //setRenderHint(Antialiasing, false); +} + } // namespace frontend } // namespace lyx