]> git.sesse.net Git - nageru/blobdiff - lrameter.h
Release Nageru 1.7.2.
[nageru] / lrameter.h
index ec84b83cd71716c79788ad247e68f44f348d320b..7a832dfcd2cc7d4336b239a5b6ffafa49c48b2e0 100644 (file)
@@ -1,14 +1,18 @@
-// TODO: This isn't really an LRA meter right now (it ignores the range).
-
 #ifndef LRAMETER_H
 #define LRAMETER_H
 
+#include <math.h>
+#include <QPixmap>
+#include <QString>
 #include <QWidget>
-#include <QLabel>
-#include <QPaintEvent>
-
 #include <mutex>
 
+#include "vu_common.h"
+
+class QObject;
+class QPaintEvent;
+class QResizeEvent;
+
 class LRAMeter : public QWidget
 {
        Q_OBJECT
@@ -21,16 +25,43 @@ public:
                this->level_lufs = level_lufs;
                this->range_low_lufs = range_low_lufs;
                this->range_high_lufs = range_high_lufs;
-               update();
+               QMetaObject::invokeMethod(this, "update", Qt::AutoConnection);
+       }
+
+       double lufs_to_pos(float level_lu, int height)
+       {
+               return ::lufs_to_pos(level_lu, height, min_level, max_level);
+       }
+
+       void set_min_level(float min_level)
+       {
+               this->min_level = min_level;
+               recalculate_pixmaps();
+       }
+
+       void set_max_level(float max_level)
+       {
+               this->max_level = max_level;
+               recalculate_pixmaps();
+       }
+
+       void set_ref_level(float ref_level_lufs)
+       {
+               this->ref_level_lufs = ref_level_lufs;
        }
 
 private:
+       void resizeEvent(QResizeEvent *event) override;
        void paintEvent(QPaintEvent *event) override;
+       void recalculate_pixmaps();
 
        std::mutex level_mutex;
        float level_lufs = -HUGE_VAL;
        float range_low_lufs = -HUGE_VAL;
        float range_high_lufs = -HUGE_VAL;
+       float min_level = -18.0f, max_level = 9.0f, ref_level_lufs = -23.0f;
+
+       QPixmap on_pixmap, off_pixmap;
 };
 
 #endif