Factor out painting of text decorations

This commit is contained in:
Vincent van Ravesteijn 2012-05-02 18:02:17 +02:00
parent fa9bd04ea4
commit 53b75399e7
3 changed files with 22 additions and 17 deletions

View File

@ -127,6 +127,9 @@ public:
*/
virtual int text(int x, int y, char_type c, FontInfo const & f) = 0;
/// draw the underbar, strikeout, uuline and uwave font attributes
virtual void textDecoration(FontInfo const & f, int x, int y, int width) = 0;
/**
* Draw a string and enclose it inside a rectangle. If
* back color is specified, the background is cleared with

View File

@ -335,14 +335,7 @@ int GuiPainter::text(int x, int y, docstring const & s,
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;
}
@ -350,15 +343,7 @@ int GuiPainter::text(int x, int y, docstring const & s,
// 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;
@ -441,6 +426,20 @@ int GuiPainter::text(int x, int y, docstring const & s,
}
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; }

View File

@ -93,6 +93,9 @@ public:
/// 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);