]> git.sesse.net Git - nageru/blob - vumeter.h
33f8df149d339ce6cfe77b0fe89c0e53c2e469a8
[nageru] / vumeter.h
1 #ifndef VUMETER_H
2 #define VUMETER_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 VUMeter : public QWidget
13 {
14         Q_OBJECT
15
16 public:
17         VUMeter(QWidget *parent);
18
19         void set_level(float level_lufs) {
20                 std::unique_lock<std::mutex> lock(level_mutex);
21                 this->level_lufs = level_lufs;
22                 QMetaObject::invokeMethod(this, "update", Qt::AutoConnection);
23         }
24
25         double lufs_to_pos(float level_lu, int height)
26         {
27                 return ::lufs_to_pos(level_lu, height, min_level, max_level);
28         }
29
30         void set_min_level(float min_level)
31         {
32                 this->min_level = min_level;
33                 recalculate_pixmaps();
34         }
35
36         void set_max_level(float max_level)
37         {
38                 this->max_level = max_level;
39                 recalculate_pixmaps();
40         }
41
42 private:
43         void resizeEvent(QResizeEvent *event) override;
44         void paintEvent(QPaintEvent *event) override;
45         void recalculate_pixmaps();
46
47         std::mutex level_mutex;
48         float level_lufs = -HUGE_VAL;
49         float min_level = -18.0f, max_level = 9.0f;
50
51         QPixmap on_pixmap, off_pixmap;
52 };
53
54 #endif