1 #include "correlation_meter.h"
9 #include <QPaintDevice>
20 CorrelationMeter::CorrelationMeter(QWidget *parent)
25 void CorrelationMeter::resizeEvent(QResizeEvent *event)
27 on_pixmap = QPixmap(width(), height());
28 QPainter on_painter(&on_pixmap);
29 QLinearGradient on(0, 0, width(), 0);
30 on.setColorAt(0.0f, QColor(255, 0, 0));
31 on.setColorAt(0.5f, QColor(255, 255, 0));
32 on.setColorAt(0.8f, QColor(0, 255, 0));
33 on.setColorAt(0.95f, QColor(255, 255, 0));
34 on_painter.fillRect(0, 0, width(), height(), Qt::black);
35 on_painter.fillRect(1, 1, width() - 2, height() - 2, on);
37 off_pixmap = QPixmap(width(), height());
38 QPainter off_painter(&off_pixmap);
39 QLinearGradient off(0, 0, width(), 0);
40 off.setColorAt(0.0f, QColor(127, 0, 0));
41 off.setColorAt(0.5f, QColor(127, 127, 0));
42 off.setColorAt(0.8f, QColor(0, 127, 0));
43 off.setColorAt(0.95f, QColor(127, 127, 0));
44 off_painter.fillRect(0, 0, width(), height(), Qt::black);
45 off_painter.fillRect(1, 1, width() - 2, height() - 2, off);
48 void CorrelationMeter::paintEvent(QPaintEvent *event)
50 QPainter painter(this);
54 lock_guard<mutex> lock(correlation_mutex);
55 correlation = this->correlation;
59 correlation = std::min(std::max(correlation, -1.0f), 1.0f);
61 int pos = 3 + lrintf(0.5f * (correlation + 1.0f) * (width() - 6));
62 QRect off_rect(0, 0, width(), height());
63 QRect on_rect(pos - 2, 0, 5, height());
65 painter.drawPixmap(off_rect, off_pixmap, off_rect);
66 painter.drawPixmap(on_rect, on_pixmap, on_rect);