]> git.sesse.net Git - nageru/blob - vumeter.cpp
Some refactoring of common VU functions.
[nageru] / vumeter.cpp
1 #include <QPainter>
2
3 #include "vumeter.h"
4 #include "vu_common.h"
5
6 using namespace std;
7
8 VUMeter::VUMeter(QWidget *parent)
9         : QWidget(parent)
10 {
11 }
12
13 void VUMeter::paintEvent(QPaintEvent *event)
14 {
15         QPainter painter(this);
16
17         painter.fillRect(0, 0, width(), height(), Qt::black);
18
19         // Draw some reference bars.
20         for (int level = -18; level < 9; ++level) {
21                 int min_y = lufs_to_pos(level, height()) - 1;
22                 int max_y = lufs_to_pos(level + 1.0f, height()) + 1;
23
24                 // Recommended range is 0 LU +/- 1 LU.
25                 if (level == -1 || level == 0) {
26                         painter.fillRect(1, min_y, width() - 2, max_y - min_y, Qt::green);
27                 } else {
28                         painter.fillRect(1, min_y, width() - 2, max_y - min_y, QColor(80, 80, 80));
29                 }
30         }
31
32         float level_lufs;
33         {
34                 unique_lock<mutex> lock(level_mutex);
35                 level_lufs = this->level_lufs;
36         }
37
38         float level_lu = level_lufs + 23.0f;
39         int y = lufs_to_pos(level_lu, height());
40         painter.fillRect(0, y, width(), 2, Qt::white);
41 }