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