summaryrefslogtreecommitdiff
path: root/gtk2_ardour/level_meter.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2008-04-11 14:06:50 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2008-04-11 14:06:50 +0000
commitcb413146428ce5db5e281d70f2b3b7df27c1aaab (patch)
tree4961e9dcb107f2ca1f0a4298faf5135ba8611d92 /gtk2_ardour/level_meter.cc
parent9aa8af5a28abbb86c9ae86c6991838eb6828d0a9 (diff)
merge 3.0 from 2.0-ongoing@3243
git-svn-id: svn://localhost/ardour2/branches/3.0@3248 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/level_meter.cc')
-rw-r--r--gtk2_ardour/level_meter.cc24
1 files changed, 21 insertions, 3 deletions
diff --git a/gtk2_ardour/level_meter.cc b/gtk2_ardour/level_meter.cc
index cc1df9add5..8a05d8da56 100644
--- a/gtk2_ardour/level_meter.cc
+++ b/gtk2_ardour/level_meter.cc
@@ -67,6 +67,7 @@ LevelMeter::LevelMeter (boost::shared_ptr<IO> io, Session& s)
Config->ParameterChanged.connect (mem_fun (*this, &LevelMeter::parameter_changed));
UI::instance()->theme_changed.connect (mem_fun(*this, &LevelMeter::on_theme_changed));
ColorsChanged.connect (mem_fun (*this, &LevelMeter::color_handler));
+ max_peak = minus_infinity();
}
void
@@ -84,7 +85,7 @@ LevelMeter::~LevelMeter ()
}
}
-void
+float
LevelMeter::update_meters ()
{
vector<MeterInfo>::iterator i;
@@ -96,8 +97,12 @@ LevelMeter::update_meters ()
peak = _io->peak_meter().peak_power (n);
(*i).meter->set (log_meter (peak));
mpeak = _io->peak_meter().max_peak_power(n);
+ if (mpeak > max_peak) {
+ max_peak = mpeak;
+ }
}
}
+ return max_peak;
}
void
@@ -134,9 +139,10 @@ LevelMeter::hide_all_meters ()
}
void
-LevelMeter::setup_meters (int len)
+LevelMeter::setup_meters (int len, int initial_width)
{
uint32_t nmeters = _io->n_outputs().n_total();
+ regular_meter_width = initial_width;
guint16 width;
hide_all_meters ();
@@ -191,6 +197,7 @@ LevelMeter::setup_meters (int len)
meters[n].width = width;
meters[n].length = len;
meters[n].meter->add_events (Gdk::BUTTON_RELEASE_MASK);
+ meters[n].meter->signal_button_release_event().connect (bind (mem_fun(*this, &LevelMeter::meter_button_release), n));
}
pack_end (*meters[n].meter, false, false);
@@ -199,13 +206,24 @@ LevelMeter::setup_meters (int len)
}
show();
color_changed = false;
-}
+}
+
+gint
+LevelMeter::meter_button_release (GdkEventButton* ev, uint32_t which)
+{
+ if (ev->button == 1) {
+ clear_meters();
+ }
+ return true;
+}
+
void LevelMeter::clear_meters ()
{
for (vector<MeterInfo>::iterator i = meters.begin(); i < meters.end(); i++) {
(*i).meter->clear();
}
+ max_peak = minus_infinity();
}
void LevelMeter::hide_meters ()