]> git.lyx.org Git - features.git/commitdiff
Factor out painting of text decorations
authorVincent van Ravesteijn <vfr@lyx.org>
Wed, 2 May 2012 16:02:17 +0000 (18:02 +0200)
committerVincent van Ravesteijn <vfr@lyx.org>
Wed, 2 May 2012 16:02:17 +0000 (18:02 +0200)
src/frontends/Painter.h
src/frontends/qt4/GuiPainter.cpp
src/frontends/qt4/GuiPainter.h

index 8bbda37701955e54f71c0da47501353977b3fcee..d219b1b85e4918155b633c39a12beb4747c58e48 100644 (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
index 5cb43a039b79df9117a024a13bd3f6d87d563dbf..db18858862b16933132cf01609d49d833ae8fbd7 100644 (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; }
 
 
index a3849bb679ca4a65d8d48a362bde653bbe918933..a29507831fa80423089eb2aca5e1a64f9d3c5184 100644 (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);