X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=vumeter.h;h=341f60fb3d8c4a49716f3a6c388fdccb27e58961;hb=92246b3e7e2d914a0549bbc7f90dd07ff3fd103a;hp=61fbf23a5995ddf505a3320ade5b8282e04aabbc;hpb=8d0d68b7cca3a4c58268fa0822ca38bb1863dd19;p=nageru diff --git a/vumeter.h b/vumeter.h index 61fbf23..341f60f 100644 --- a/vumeter.h +++ b/vumeter.h @@ -1,12 +1,14 @@ #ifndef VUMETER_H #define VUMETER_H -#include +#include #include #include - +#include #include +#include "vu_common.h" + class VUMeter : public QWidget { Q_OBJECT @@ -17,17 +19,41 @@ public: void set_level(float level_lufs) { std::unique_lock lock(level_mutex); this->level_lufs = level_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 min_level = -18.0f, max_level = 9.0f, ref_level_lufs = -23.0f; -extern VUMeter *global_vu_meter; -extern QLabel *global_peak_display; + QPixmap on_pixmap, off_pixmap; +}; #endif