]> git.lyx.org Git - features.git/blobdiff - src/frontends/qt/GuiPainter.cpp
Fix and simplify computation of painter monochrome mode
[features.git] / src / frontends / qt / GuiPainter.cpp
index b40078ed826069a6f5ef72710714213c4d13f002..d9074cb427c0f3a6050374bc1bcf26b4a1a90f4c 100644 (file)
@@ -91,44 +91,25 @@ QColor GuiPainter::computeColor(Color col)
 
 QColor GuiPainter::filterColor(QColor const & col)
 {
-       if (monochrome_min_.empty())
+       if (monochrome_blend_.empty())
                return 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,
-               v * (ming - maxg) + maxg,
-               v * (minb - maxb) + maxb);
-       return c;
+       QColor const blend = monochrome_blend_.top();
+       return QColor::fromHsv(blend.hue(), blend.saturation(), qGray(col.rgb()));
 }
 
 
-void GuiPainter::enterMonochromeMode(Color const & min, Color const & max)
+void GuiPainter::enterMonochromeMode(Color const & blend)
 {
-       QColor qmin = filterColor(guiApp->colorCache().get(min));
-       QColor qmax = filterColor(guiApp->colorCache().get(max));
-       monochrome_min_.push(qmin);
-       monochrome_max_.push(qmax);
+       QColor qblend = filterColor(guiApp->colorCache().get(blend));
+       monochrome_blend_.push(qblend);
 }
 
 
 void GuiPainter::leaveMonochromeMode()
 {
-       LASSERT(!monochrome_min_.empty(), return);
-       monochrome_min_.pop();
-       monochrome_max_.pop();
+       LASSERT(!monochrome_blend_.empty(), return);
+       monochrome_blend_.pop();
 }