From cb413146428ce5db5e281d70f2b3b7df27c1aaab Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 11 Apr 2008 14:06:50 +0000 Subject: merge 3.0 from 2.0-ongoing@3243 git-svn-id: svn://localhost/ardour2/branches/3.0@3248 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/level_meter.cc | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'gtk2_ardour/level_meter.cc') 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, 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::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::iterator i = meters.begin(); i < meters.end(); i++) { (*i).meter->clear(); } + max_peak = minus_infinity(); } void LevelMeter::hide_meters () -- cgit v1.2.3