summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2004-11-17 03:10:40 +0000
committerLennart Poettering <lennart@poettering.net>2004-11-17 03:10:40 +0000
commit8c33f6888b172cccecdb6e8adf6776d605ed79d3 (patch)
tree366cbd169099a083a772ab4b016c747c2d4fada7
parent8a5f3e4c99279db2360353823d99fda03d00869d (diff)
* implement level decaying
git-svn-id: file:///home/lennart/svn/public/pavumeter/trunk@21 c62a5a7b-6fe3-0310-9d5a-afe6de46906b
-rw-r--r--src/vumeter.cc26
1 files changed, 26 insertions, 0 deletions
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;