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