summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2020-04-10 23:36:17 +0200
committerRobin Gareus <robin@gareus.org>2020-04-10 23:50:10 +0200
commite1a9034a0ee081c2c71951ac760dc625b16f543c (patch)
tree58f5f19acf1df129bcc23db35cca8900128ddecc /gtk2_ardour
parent58672bcaa20f69a5c237a9e54cf49b2c03305f7a (diff)
Synchronize meter-reset #7465
Queue reset to be handled when the meter is updated. Also only call set_name(), set_active_state() when the state changes.
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour_ui.cc25
-rw-r--r--gtk2_ardour/ardour_ui.h7
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc2
-rw-r--r--gtk2_ardour/gain_meter.cc26
-rw-r--r--gtk2_ardour/gain_meter.h3
-rw-r--r--gtk2_ardour/meter_strip.cc30
-rw-r--r--gtk2_ardour/meter_strip.h3
7 files changed, 66 insertions, 30 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index da3eb1dd46..7b55621ab9 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -316,6 +316,8 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
, error_alert_button ( ArdourButton::just_led_default_elements )
, editor_meter_peak_display()
, editor_meter(0)
+ , _clear_editor_meter( true)
+ , _editor_meter_peaked (false)
, _numpad_locate_happening (false)
, _session_is_new (false)
, last_key_press_time (0)
@@ -1136,11 +1138,20 @@ ARDOUR_UI::every_point_zero_something_seconds ()
// august 2007: actual update frequency: 25Hz (40ms), not 100Hz
if (editor_meter && UIConfiguration::instance().get_show_editor_meter() && editor_meter_peak_display.is_mapped ()) {
- float mpeak = editor_meter->update_meters();
- if (mpeak > editor_meter_max_peak) {
- if (mpeak >= UIConfiguration::instance().get_meter_peak()) {
- editor_meter_peak_display.set_active_state ( Gtkmm2ext::ExplicitActive );
- }
+
+ if (_clear_editor_meter) {
+ editor_meter->clear_meters();
+ editor_meter_peak_display.set_active_state (Gtkmm2ext::Off);
+ _clear_editor_meter = false;
+ _editor_meter_peaked = false;
+ }
+
+ const float mpeak = editor_meter->update_meters();
+ const bool peaking = mpeak > UIConfiguration::instance().get_meter_peak();
+
+ if (!_editor_meter_peaked && peaking) {
+ editor_meter_peak_display.set_active_state ( Gtkmm2ext::ExplicitActive );
+ _editor_meter_peaked = true;
}
}
}
@@ -2935,9 +2946,7 @@ void
ARDOUR_UI::reset_peak_display ()
{
if (!_session || !_session->master_out() || !editor_meter) return;
- editor_meter->clear_meters();
- editor_meter_max_peak = -INFINITY;
- editor_meter_peak_display.set_active_state ( Gtkmm2ext::Off );
+ _clear_editor_meter = true;
}
void
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index 346bdc4a65..974b482ecb 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -545,11 +545,14 @@ private:
ArdourWidgets::ArdourButton action_script_call_btn[MAX_LUA_ACTION_BUTTONS];
Gtk::VBox alert_box;
+
Gtk::Table editor_meter_table;
ArdourWidgets::ArdourButton editor_meter_peak_display;
LevelMeterHBox * editor_meter;
- float editor_meter_max_peak;
- bool editor_meter_peak_button_release (GdkEventButton*);
+
+ bool _clear_editor_meter;
+ bool _editor_meter_peaked;
+ bool editor_meter_peak_button_release (GdkEventButton*);
void blink_handler (bool);
sigc::connection blink_connection;
diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc
index 2ca699df45..dc71efef03 100644
--- a/gtk2_ardour/ardour_ui_dialogs.cc
+++ b/gtk2_ardour/ardour_ui_dialogs.cc
@@ -275,7 +275,7 @@ ARDOUR_UI::set_session (Session *s)
editor_meter_peak_display.set_size_request (-1, std::max (5.f, std::min (12.f, rintf (8.f * UIConfiguration::instance().get_ui_scale()))) );
editor_meter_peak_display.set_corner_radius (1.0);
- editor_meter_max_peak = -INFINITY;
+ _clear_editor_meter = true;
editor_meter_peak_display.signal_button_release_event().connect (sigc::mem_fun(*this, &ARDOUR_UI::editor_meter_peak_button_release), false);
repack_transport_hbox ();
diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc
index 97d753a653..2dbde7dc92 100644
--- a/gtk2_ardour/gain_meter.cc
+++ b/gtk2_ardour/gain_meter.cc
@@ -106,6 +106,8 @@ GainMeterBase::GainMeterBase (Session* s, bool horizontal, int fader_length, int
, meter_point_button (_("pre"))
, gain_astate_propagate (false)
, _data_type (DataType::AUDIO)
+ , _clear_meters (true)
+ , _meter_peaked (false)
{
using namespace Menu_Helpers;
@@ -456,10 +458,7 @@ GainMeterBase::reset_peak_display ()
return;
}
_meter->reset_max();
- level_meter->clear_meters();
- max_peak = minus_infinity ();
- peak_display.set_text (_("-inf"));
- peak_display.set_name ("MixerStripPeakDisplay");
+ _clear_meters = true;
}
void
@@ -842,7 +841,15 @@ GainMeterBase::meter_channels() const
void
GainMeterBase::update_meters()
{
- char buf[32];
+ if (_clear_meters) {
+ max_peak = minus_infinity ();
+ level_meter->clear_meters ();
+ peak_display.set_text (_("-inf"));
+ peak_display.set_name ("MixerStripPeakDisplay");
+ _meter_peaked = false;
+ _clear_meters = false;
+ }
+
float mpeak = level_meter->update_meters();
if (mpeak > max_peak) {
@@ -850,12 +857,17 @@ GainMeterBase::update_meters()
if (mpeak <= -200.0f) {
peak_display.set_text (_("-inf"));
} else {
+ char buf[32];
snprintf (buf, sizeof(buf), "%.1f", mpeak);
peak_display.set_text (buf);
}
}
- if (mpeak >= UIConfiguration::instance().get_meter_peak()) {
- peak_display.set_name ("MixerStripPeakDisplayPeak");
+
+ bool peaking = mpeak >= UIConfiguration::instance().get_meter_peak();
+
+ if (!_meter_peaked && peaking) {
+ peak_display.set_name ("MixerStripPeakDisplayPeak");
+ _meter_peaked = true;
}
}
diff --git a/gtk2_ardour/gain_meter.h b/gtk2_ardour/gain_meter.h
index 2ae9a2ee44..4cc1780ecb 100644
--- a/gtk2_ardour/gain_meter.h
+++ b/gtk2_ardour/gain_meter.h
@@ -208,6 +208,9 @@ private:
bool level_meter_button_press (GdkEventButton *);
PBD::ScopedConnection _level_meter_connection;
+
+ bool _clear_meters;
+ bool _meter_peaked;
};
class GainMeter : public GainMeterBase, public Gtk::VBox
diff --git a/gtk2_ardour/meter_strip.cc b/gtk2_ardour/meter_strip.cc
index e51725aef5..f29c99493e 100644
--- a/gtk2_ardour/meter_strip.cc
+++ b/gtk2_ardour/meter_strip.cc
@@ -70,6 +70,8 @@ PBD::Signal0<void> MeterStrip::ConfigurationChanged;
MeterStrip::MeterStrip (int metricmode, MeterType mt)
: RouteUI ((Session*) 0)
, metric_type (MeterPeak)
+ , _clear_meters (true)
+ , _meter_peaked (false)
, _has_midi (false)
, _tick_bar (0)
, _strip_type (0)
@@ -127,6 +129,8 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
, RouteUI ((Session*) 0)
, _route (rt)
, metric_type (MeterPeak)
+ , _clear_meters (true)
+ , _meter_peaked (false)
, _has_midi (false)
, _tick_bar (0)
, _strip_type (0)
@@ -165,7 +169,6 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
peak_display.set_name ("meterbridge peakindicator");
peak_display.set_elements((ArdourButton::Element) (ArdourButton::Edge|ArdourButton::Body));
set_tooltip (peak_display, _("Reset Peak"));
- max_peak = minus_infinity();
peak_display.unset_flags (Gtk::CAN_FOCUS);
peak_display.set_size_request(PX_SCALE(12, 12), PX_SCALE(8, 8));
peak_display.set_corner_radius(2); // ardour-button scales this
@@ -417,12 +420,19 @@ MeterStrip::route_color_changed ()
void
MeterStrip::fast_update ()
{
- float mpeak = level_meter->update_meters();
- if (mpeak > max_peak) {
- max_peak = mpeak;
- if (mpeak >= UIConfiguration::instance().get_meter_peak()) {
- peak_display.set_active_state ( Gtkmm2ext::ExplicitActive );
- }
+ if (_clear_meters) {
+ level_meter->clear_meters();
+ peak_display.set_active_state (Gtkmm2ext::Off);
+ _clear_meters = false;
+ _meter_peaked = false;
+ }
+
+ const float mpeak = level_meter->update_meters();
+ const bool peaking = mpeak > UIConfiguration::instance().get_meter_peak();
+
+ if (!_meter_peaked && peaking) {
+ peak_display.set_active_state ( Gtkmm2ext::ExplicitActive );
+ _meter_peaked = true;
}
}
@@ -697,9 +707,7 @@ void
MeterStrip::reset_peak_display ()
{
_route->shared_peak_meter()->reset_max();
- level_meter->clear_meters();
- max_peak = -INFINITY;
- peak_display.set_active_state ( Gtkmm2ext::Off );
+ _clear_meters = true;
}
bool
@@ -776,7 +784,7 @@ void
MeterStrip::parameter_changed (std::string const & p)
{
if (p == "meter-peak") {
- max_peak = -INFINITY;
+ _clear_meters = true;
}
else if (p == "show-rec-on-meterbridge") {
update_button_box();
diff --git a/gtk2_ardour/meter_strip.h b/gtk2_ardour/meter_strip.h
index b8d9bf26c2..f2d46256ec 100644
--- a/gtk2_ardour/meter_strip.h
+++ b/gtk2_ardour/meter_strip.h
@@ -131,7 +131,8 @@ private:
std::vector<ARDOUR::DataType> _types;
ARDOUR::MeterType metric_type;
- float max_peak;
+ bool _clear_meters;
+ bool _meter_peaked;
bool _has_midi;
int _tick_bar;
int _strip_type;