]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiPainter.cpp
Fix reloading of local layout file (bug #11120)
[lyx.git] / src / frontends / qt4 / GuiPainter.cpp
index 93bf16c414e7bfc80b0af09295b7b321bcf67645..b03bb44ad31d33ce5ded5217a9e8e958fb9a5a5c 100644 (file)
 #include "qt_helpers.h"
 
 #include "Font.h"
-#include "Language.h"
 #include "LyXRC.h"
 
-#include "insets/Inset.h"
-
 #include "support/debug.h"
 #include "support/lassert.h"
 #include "support/lyxlib.h"
@@ -53,12 +50,12 @@ const int Painter::thin_line = 1;
 
 GuiPainter::GuiPainter(QPaintDevice * device, double pixel_ratio)
        : QPainter(device), Painter(pixel_ratio),
-         use_pixmap_cache_(lyxrc.use_pixmap_cache && USE_PIXMAP_CACHE)
+         use_pixmap_cache_(false)
 {
-       // new QPainter has default QPen:
-       current_color_ = guiApp->colorCache().get(Color_black);
-       current_ls_ = line_solid;
-       current_lw_ = thin_line;
+       // set cache correctly
+       current_color_ = pen().color();
+       current_ls_ = pen().style() == Qt::DotLine ? line_onoffdash : line_solid;
+       current_lw_ = pen().width();
 }
 
 
@@ -137,15 +134,15 @@ QColor GuiPainter::filterColor(QColor const & col)
        // map into [min,max] interval
        QColor const & min = monochrome_min_.top();
        QColor const & max = monochrome_max_.top();
-                       
+
        qreal v = col.valueF();
        v *= v; // make it a bit steeper (i.e. darker)
-               
+
        qreal minr, ming, minb;
        qreal maxr, maxg, maxb;
        min.getRgbF(&minr, &ming, &minb);
        max.getRgbF(&maxr, &maxg, &maxb);
-                       
+
        QColor c;
        c.setRgbF(
                v * (minr - maxr) + maxr,
@@ -174,9 +171,6 @@ void GuiPainter::leaveMonochromeMode()
 
 void GuiPainter::point(int x, int y, Color col)
 {
-       if (!isDrawingEnabled())
-               return;
-
        setQPainterPen(computeColor(col));
        drawPoint(x, y);
 }
@@ -187,9 +181,6 @@ void GuiPainter::line(int x1, int y1, int x2, int y2,
        line_style ls,
        int lw)
 {
-       if (!isDrawingEnabled())
-               return;
-
        setQPainterPen(computeColor(col), ls, lw);
        bool const do_antialiasing = renderHints() & TextAntialiasing
                && x1 != x2 && y1 != y2 && ls != line_solid_aliased;
@@ -205,9 +196,6 @@ void GuiPainter::lines(int const * xp, int const * yp, int np,
        line_style ls,
        int lw)
 {
-       if (!isDrawingEnabled())
-               return;
-
        // double the size if needed
        // FIXME THREAD
        static QVector<QPoint> points(32);
@@ -250,9 +238,6 @@ void GuiPainter::path(int const * xp, int const * yp,
        line_style ls,
        int lw)
 {
-       if (!isDrawingEnabled())
-               return;
-
        QPainterPath bpath;
        // This is the starting point, so its control points are meaningless
        bpath.moveTo(xp[0], yp[0]);
@@ -281,9 +266,6 @@ void GuiPainter::rectangle(int x, int y, int w, int h,
        line_style ls,
        int lw)
 {
-       if (!isDrawingEnabled())
-               return;
-
        setQPainterPen(computeColor(col), ls, lw);
        drawRect(x, y, w, h);
 }
@@ -291,9 +273,6 @@ void GuiPainter::rectangle(int x, int y, int w, int h,
 
 void GuiPainter::fillRectangle(int x, int y, int w, int h, Color col)
 {
-       if (!isDrawingEnabled())
-               return;
-
        fillRect(x, y, w, h, guiApp->colorCache().get(col));
 }
 
@@ -301,9 +280,6 @@ void GuiPainter::fillRectangle(int x, int y, int w, int h, Color col)
 void GuiPainter::arc(int x, int y, unsigned int w, unsigned int h,
        int a1, int a2, Color col)
 {
-       if (!isDrawingEnabled())
-               return;
-
        // LyX usings 1/64ths degree, Qt usings 1/16th
        setQPainterPen(computeColor(col));
        bool const do_antialiasing = renderHints() & TextAntialiasing;
@@ -320,9 +296,6 @@ void GuiPainter::image(int x, int y, int w, int h, graphics::Image const & i)
 
        fillRectangle(x, y, w, h, Color_graphicsbg);
 
-       if (!isDrawingEnabled())
-               return;
-
        QImage const image = qlimage.image();
        QRectF const drect = QRectF(x, y, w, h);
        QRectF const srect = QRectF(0, 0, image.width(), image.height());
@@ -394,7 +367,7 @@ void GuiPainter::text(int x, int y, docstring const & s,
                       double const wordspacing, double const tw)
 {
        //LYXERR0("text: x=" << x << ", s=" << s);
-       if (s.empty() || !isDrawingEnabled())
+       if (s.empty())
                return;
 
        /* Caution: The following ucs4 to QString conversions work for symbol fonts
@@ -557,31 +530,10 @@ void GuiPainter::textDecoration(FontInfo const & f, int x, int y, int width)
 static int max(int a, int b) { return a > b ? a : b; }
 
 
-void GuiPainter::button(int x, int y, int w, int h, bool mouseHover)
-{
-       if (mouseHover)
-               fillRectangle(x, y, w, h, Color_buttonhoverbg);
-       else
-               fillRectangle(x, y, w, h, Color_buttonbg);
-       buttonFrame(x, y, w, h);
-}
-
-
-void GuiPainter::buttonFrame(int x, int y, int w, int h)
-{
-       line(x, y, x, y + h - 1, Color_buttonframe);
-       line(x - 1 + w, y, x - 1 + w, y + h - 1, Color_buttonframe);
-       line(x, y - 1, x - 1 + w, y - 1, Color_buttonframe);
-       line(x, y + h - 1, x - 1 + w, y + h - 1, Color_buttonframe);
-}
-
-
 void GuiPainter::rectText(int x, int y, docstring const & str,
        FontInfo const & font, Color back, Color frame)
 {
-       int width;
-       int ascent;
-       int descent;
+       int width, ascent, descent;
 
        FontMetrics const & fm = theFontMetrics(font);
        fm.rectText(str, width, ascent, descent);
@@ -593,24 +545,25 @@ void GuiPainter::rectText(int x, int y, docstring const & str,
        if (frame != Color_none)
                rectangle(x, y - ascent, width, ascent + descent, frame);
 
+       // FIXME: let offset depend on font
        text(x + 3, y, str, font);
 }
 
 
-void GuiPainter::buttonText(int x, int y, docstring const & str,
-       FontInfo const & font, bool mouseHover)
+void GuiPainter::buttonText(int x, int baseline, docstring const & s,
+       FontInfo const & font, Color back, Color frame, int offset)
 {
-       int width;
-       int ascent;
-       int descent;
+       int width, ascent, descent;
 
        FontMetrics const & fm = theFontMetrics(font);
-       fm.buttonText(str, width, ascent, descent);
+       fm.buttonText(s, offset, width, ascent, descent);
 
-       static int const d = Inset::TEXT_TO_INSET_OFFSET / 2;
+       static int const d = offset / 2;
 
-       button(x + d, y - ascent, width - Inset::TEXT_TO_INSET_OFFSET, descent + ascent, mouseHover);
-       text(x + Inset::TEXT_TO_INSET_OFFSET, y, str, font);
+       fillRectangle(x + d + 1, baseline - ascent + 1, width - offset - 1,
+                             ascent + descent - 1, back);
+       rectangle(x + d, baseline - ascent, width - offset, ascent + descent, frame);
+       text(x + offset, baseline, s, font);
 }