]> git.sesse.net Git - nageru/blob - lrameter.h
e2e63ad813cb418b0143783ce33ddc2b1287f748
[nageru] / lrameter.h
1 #ifndef LRAMETER_H
2 #define LRAMETER_H
3
4 #include <math.h>
5 #include <QLabel>
6 #include <QPaintEvent>
7 #include <QWidget>
8 #include <mutex>
9
10 #include "vu_common.h"
11
12 class LRAMeter : public QWidget
13 {
14         Q_OBJECT
15
16 public:
17         LRAMeter(QWidget *parent);
18
19         void set_levels(float level_lufs, float range_low_lufs, float range_high_lufs) {
20                 std::unique_lock<std::mutex> lock(level_mutex);
21                 this->level_lufs = level_lufs;
22                 this->range_low_lufs = range_low_lufs;
23                 this->range_high_lufs = range_high_lufs;
24                 QMetaObject::invokeMethod(this, "update", Qt::AutoConnection);
25         }
26
27         double lufs_to_pos(float level_lu, int height)
28         {
29                 return ::lufs_to_pos(level_lu, height, min_level, max_level);
30         }
31
32         void set_min_level(float min_level)
33         {
34                 this->min_level = min_level;
35                 recalculate_pixmaps();
36         }
37
38         void set_max_level(float max_level)
39         {
40                 this->max_level = max_level;
41                 recalculate_pixmaps();
42         }
43
44 private:
45         void resizeEvent(QResizeEvent *event) override;
46         void paintEvent(QPaintEvent *event) override;
47         void recalculate_pixmaps();
48
49         std::mutex level_mutex;
50         float level_lufs = -HUGE_VAL;
51         float range_low_lufs = -HUGE_VAL;
52         float range_high_lufs = -HUGE_VAL;
53         float min_level = -18.0f, max_level = 9.0f;
54
55         QPixmap on_pixmap, off_pixmap;
56 };
57
58 #endif