]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiPainter.cpp
Cleanup private part of Layout Box on destructor (probably not really an
[lyx.git] / src / frontends / qt4 / GuiPainter.cpp
index 470b928e38e3c3155c8360db99593007509daf95..3ade5c918857c680433f94051ff31c64b772d5db 100644 (file)
@@ -44,6 +44,8 @@ using namespace std;
 
 namespace lyx {
 namespace frontend {
+  
+const float Painter::thin_line = 0.0;
 
 GuiPainter::GuiPainter(QPaintDevice * device)
        : QPainter(device), Painter(),
@@ -52,7 +54,7 @@ GuiPainter::GuiPainter(QPaintDevice * device)
        // new QPainter has default QPen:
        current_color_ = guiApp->colorCache().get(Color_black);
        current_ls_ = line_solid;
-       current_lw_ = line_thin;
+       current_lw_ = thin_line;
 }
 
 
@@ -64,7 +66,7 @@ GuiPainter::~GuiPainter()
 
 
 void GuiPainter::setQPainterPen(QColor const & col,
-       Painter::line_style ls, Painter::line_width lw)
+       Painter::line_style ls, float lw)
 {
        if (col == current_color_ && ls == current_ls_ && lw == current_lw_)
                return;
@@ -81,10 +83,7 @@ void GuiPainter::setQPainterPen(QColor const & col,
                case line_onoffdash: pen.setStyle(Qt::DotLine); break;
        }
 
-       switch (lw) {
-               case line_thin: pen.setWidth(0); break;
-               case line_thick: pen.setWidth(3); break;
-       }
+       pen.setWidthF(lw);
 
        setPen(pen);
 }
@@ -174,7 +173,7 @@ void GuiPainter::point(int x, int y, Color col)
 void GuiPainter::line(int x1, int y1, int x2, int y2,
        Color col,
        line_style ls,
-       line_width lw)
+       float lw)
 {
        if (!isDrawingEnabled())
                return;
@@ -191,7 +190,7 @@ void GuiPainter::line(int x1, int y1, int x2, int y2,
 void GuiPainter::lines(int const * xp, int const * yp, int np,
        Color col,
        line_style ls,
-       line_width lw)
+       float lw)
 {
        if (!isDrawingEnabled())
                return;
@@ -219,7 +218,7 @@ void GuiPainter::lines(int const * xp, int const * yp, int np,
 void GuiPainter::rectangle(int x, int y, int w, int h,
        Color col,
        line_style ls,
-       line_width lw)
+       float lw)
 {
        if (!isDrawingEnabled())
                return;
@@ -338,6 +337,10 @@ int GuiPainter::text(int x, int y, docstring const & s,
                        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;
        }
 
@@ -349,6 +352,11 @@ int GuiPainter::text(int x, int y, docstring const & s,
                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;
@@ -524,6 +532,17 @@ int GuiPainter::preeditText(int x, int y, char_type c,
 }
 
 
+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);
@@ -570,7 +589,7 @@ void GuiPainter::dashedUnderline(FontInfo const & f, int x, int y, int width)
 void GuiPainter::wavyHorizontalLine(int x, int y, int width, ColorCode col)
 {
        setQPainterPen(computeColor(col));
-       int const step = 4;
+       int const step = 2;
        int const xend = x + width;
        int height = 1;
        //FIXME: I am not sure if Antialiasing gives the best effect.
@@ -579,8 +598,8 @@ void GuiPainter::wavyHorizontalLine(int x, int y, int width, ColorCode col)
                height = - height;
                drawLine(x, y - height, x + step, y + height);
                x += step;
-               drawLine(x, y + height, x + 2, y + height);
-               x += 2;
+               drawLine(x, y + height, x + step/2, y + height);
+               x += step/2;
        }
        //setRenderHint(Antialiasing, false);
 }