From 8c33f6888b172cccecdb6e8adf6776d605ed79d3 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 17 Nov 2004 03:10:40 +0000 Subject: * implement level decaying git-svn-id: file:///home/lennart/svn/public/pavumeter/trunk@21 c62a5a7b-6fe3-0310-9d5a-afe6de46906b --- src/vumeter.cc | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/vumeter.cc b/src/vumeter.cc index 578ede3..28ef143 100644 --- a/src/vumeter.cc +++ b/src/vumeter.cc @@ -40,6 +40,7 @@ protected: virtual bool on_delete_event(GdkEventAny* e); virtual bool on_display_timeout(); virtual bool on_calc_timeout(); + virtual void decayLevels(); sigc::connection display_timeout_signal_connection; sigc::connection calc_timeout_signal_connection; @@ -205,9 +206,34 @@ void MainWindow::showLevels(const LevelInfo &i) { } +#define DECAY_LEVEL (0.005) + +void MainWindow::decayLevels() { + unsigned nchan = channels.size(); + + for (unsigned n = 0; n < nchan; n++) { + double level; + + ChannelInfo *c = channels[n]; + + level = c->progress->get_fraction(); + + if (level <= 0) + continue; + + level = level > DECAY_LEVEL ? level - DECAY_LEVEL : 0; + c->progress->set_fraction(level); + } +} + bool MainWindow::on_display_timeout() { LevelInfo *i = NULL; + if (levelQueue.empty()) { + decayLevels(); + return true; + } + while (levelQueue.size() > 0) { if (i) delete i; -- cgit