X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=vumeter.cpp;h=c7f8df467ab3681900205d35fdedbfe115846fbc;hb=92246b3e7e2d914a0549bbc7f90dd07ff3fd103a;hp=ab40fceff699ec13df3f3db1c86eefdbd73ed3bf;hpb=fdd77c1f8a51f1e87151b876c2c5ab536a2fb02d;p=nageru diff --git a/vumeter.cpp b/vumeter.cpp index ab40fce..c7f8df4 100644 --- a/vumeter.cpp +++ b/vumeter.cpp @@ -10,6 +10,11 @@ VUMeter::VUMeter(QWidget *parent) { } +void VUMeter::resizeEvent(QResizeEvent *event) +{ + recalculate_pixmaps(); +} + void VUMeter::paintEvent(QPaintEvent *event) { QPainter painter(this); @@ -20,6 +25,22 @@ void VUMeter::paintEvent(QPaintEvent *event) level_lufs = this->level_lufs; } - float level_lu = level_lufs + 23.0f; - draw_vu_meter(painter, -HUGE_VAL, level_lu, width(), height(), 0); + float level_lu = level_lufs - ref_level_lufs; + int on_pos = lrint(lufs_to_pos(level_lu, height())); + QRect off_rect(0, 0, width(), on_pos); + QRect on_rect(0, on_pos, width(), height() - on_pos); + + painter.drawPixmap(off_rect, off_pixmap, off_rect); + painter.drawPixmap(on_rect, on_pixmap, on_rect); +} + +void VUMeter::recalculate_pixmaps() +{ + on_pixmap = QPixmap(width(), height()); + QPainter on_painter(&on_pixmap); + draw_vu_meter(on_painter, width(), height(), 0, true, min_level, max_level); + + off_pixmap = QPixmap(width(), height()); + QPainter off_painter(&off_pixmap); + draw_vu_meter(off_painter, width(), height(), 0, false, min_level, max_level); }