]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiPainter.cpp
On Mac, moving down a paragraph should place the cursor at the end of the current...
[lyx.git] / src / frontends / qt4 / GuiPainter.cpp
index fb3e5e9bf840104e72eaabb51aa96137ff741194..ee0f65a3ce54f51350d9685a9b911de2099ff776 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_ = 0.5;
+       current_lw_ = thin_line;
 }
 
 
@@ -81,7 +83,7 @@ void GuiPainter::setQPainterPen(QColor const & col,
                case line_onoffdash: pen.setStyle(Qt::DotLine); break;
        }
 
-       pen.setWidth(lw);
+       pen.setWidthF(lw);
 
        setPen(pen);
 }
@@ -94,7 +96,9 @@ QString GuiPainter::generateStringSignature(QString const & str, FontInfo const
        sig.append(QChar(static_cast<short>(f.series())));
        sig.append(QChar(static_cast<short>(f.realShape())));
        sig.append(QChar(static_cast<short>(f.size())));
-       sig.append(QChar(static_cast<short>(f.color())));
+       Color const & color = f.realColor();
+       sig.append(QChar(static_cast<short>(color.baseColor)));
+       sig.append(QChar(static_cast<short>(color.mergeColor)));
        if (!monochrome_min_.empty()) {
                QColor const & min = monochrome_min_.top();
                QColor const & max = monochrome_max_.top();
@@ -152,7 +156,7 @@ void GuiPainter::enterMonochromeMode(Color const & min, Color const & max)
 
 void GuiPainter::leaveMonochromeMode()
 {
-       LASSERT(!monochrome_min_.empty(), /**/);
+       LASSERT(!monochrome_min_.empty(), return);
        monochrome_min_.pop();
        monochrome_max_.pop();
 }
@@ -331,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;
        }
 
@@ -346,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;
@@ -437,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; }