]> git.sesse.net Git - nageru/blob - lrameter.cpp
Some refactoring of common VU functions.
[nageru] / lrameter.cpp
1 #include <QPainter>
2
3 #include "lrameter.h"
4 #include "vu_common.h"
5
6 using namespace std;
7
8 LRAMeter::LRAMeter(QWidget *parent)
9         : QWidget(parent)
10 {
11 }
12
13 void LRAMeter::paintEvent(QPaintEvent *event)
14 {
15         QPainter painter(this);
16
17         painter.fillRect(0, 0, width(), height(), parentWidget()->palette().window());
18
19         float level_lufs;
20         {
21                 unique_lock<mutex> lock(level_mutex);
22                 level_lufs = this->level_lufs;
23         }
24
25         float level_lu = level_lufs + 23.0f;
26         const int margin = 5;
27         draw_vu_meter(painter, level_lu, width(), height(), margin);
28
29         // Draw the target area (+/-1 LU is allowed EBU range).
30         int min_y = lufs_to_pos(1.0f, height());
31         int max_y = lufs_to_pos(-1.0f, height());
32
33         // FIXME: This outlining isn't so pretty.
34         {
35                 QPen pen(Qt::black);
36                 pen.setWidth(5);
37                 painter.setPen(pen);
38                 painter.drawRect(2, min_y, width() - 5, max_y - min_y);
39         }
40         {
41                 QPen pen;
42                 if (level_lu >= -1.0f && level_lu <= 1.0f) {
43                         pen.setColor(Qt::green);
44                 } else {
45                         pen.setColor(Qt::red);
46                 }
47                 pen.setWidth(3);
48                 painter.setPen(pen);
49                 painter.drawRect(2, min_y, width() - 5, max_y - min_y);
50         }
51 }