X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=lrameter.h;h=7a832dfcd2cc7d4336b239a5b6ffafa49c48b2e0;hb=9e47a2f661b9d292598ef0277e507458e3dad62f;hp=ec84b83cd71716c79788ad247e68f44f348d320b;hpb=0323944a99ea3c0e175f0f3d004fa42fecd02ece;p=nageru diff --git a/lrameter.h b/lrameter.h index ec84b83..7a832df 100644 --- a/lrameter.h +++ b/lrameter.h @@ -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 +#include +#include #include -#include -#include - #include +#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