if (f.realShape() == SMALLCAPS_SHAPE) {
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);
+ textDecoration(f, x, y, textwidth);
return textwidth;
}
// textwidth = fontMetrics().width(str);
// because the above is awfully expensive on MacOSX
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);
+ textDecoration(f, x, y, textwidth);
if (!isDrawingEnabled())
return textwidth;
}
+void GuiPainter::textDecoration(FontInfo const & f, int x, int y, int width)
+{
+ if (f.underbar() == FONT_ON)
+ underline(f, x, y, width);
+ if (f.strikeout() == FONT_ON)
+ strikeoutLine(f, x, y, width);
+ if (f.uuline() == FONT_ON)
+ doubleUnderline(f, x, y, width);
+ if (f.uwave() == FONT_ON)
+ // f.color() doesn't work on some circumstances
+ wavyHorizontalLine(x, y, width, f.realColor().baseColor);
+}
+
+
static int max(int a, int b) { return a > b ? a : b; }
/// draw a char at position x, y (y is the baseline)
virtual int text(int x, int y, char_type c, FontInfo const & f);
+ ///
+ virtual void textDecoration(FontInfo const & f, int x, int y, int width);
+
/// draw a string and enclose it inside a button frame
virtual void buttonText(int x, int baseline, docstring const & s,
FontInfo const & font, bool mouseHover);