#include <limits.h>
#include "ardour/meter.h"
+#include "ardour/logmeter.h"
#include <gtkmm2ext/utils.h>
#include "pbd/fastlog.h"
#include "level_meter.h"
#include "utils.h"
-#include "logmeter.h"
#include "gui_thread.h"
#include "keyboard.h"
#include "public_editor.h"
#include "ui_config.h"
-#include "i18n.h"
+#include "pbd/i18n.h"
using namespace ARDOUR;
using namespace ARDOUR_UI_UTILS;
, max_peak (minus_infinity())
, meter_type (MeterPeak)
, visible_meter_type (MeterType(0))
- , visible_meter_count (0)
+ , midi_count (0)
+ , meter_count (0)
+ , max_visible_meters (0)
, color_changed (false)
{
set_session (s);
(*i).packed = false;
}
}
- visible_meter_count = 0;
+ meter_count = 0;
+}
+
+void
+LevelMeterBase::set_max_audio_meter_count (uint32_t cnt)
+{
+ if (cnt == max_visible_meters) {
+ return;
+ }
+ color_changed = true; // force re-setup
+ max_visible_meters = cnt;
+ setup_meters (meter_length, regular_meter_width, thin_meter_width);
}
void
return; /* do it later or never */
}
- int32_t nmidi = _meter->input_streams().n_midi();
+ uint32_t nmidi = _meter->input_streams().n_midi();
uint32_t nmeters = _meter->input_streams().n_total();
regular_meter_width = initial_width;
thin_meter_width = thin_width;
width = rint (width * UIConfiguration::instance().get_ui_scale());
if ( meters.size() > 0
- && nmeters == visible_meter_count
+ && nmidi == midi_count
+ && nmeters == meter_count
&& meters[0].width == width
&& meters[0].length == len
&& !color_changed
(meters.size() > 0) ? "yes" : "no",
(meters.size() > 0 && meters[0].width == width) ? "yes" : "no",
(meters.size() > 0 && meters[0].length == len) ? "yes" : "no",
- (nmeters == visible_meter_count) ? "yes" : "no",
+ (nmeters == meter_count) ? "yes" : "no",
(meter_type == visible_meter_type) ? "yes" : "no",
!color_changed ? "yes" : "no"
);
b[1] = UIConfiguration::instance().color ("meter background top");
b[2] = 0x991122ff; // red highlight gradient Bot
b[3] = 0x551111ff; // red highlight gradient Top
- if (n < nmidi) {
+ if ((uint32_t) n < nmidi) {
c[0] = UIConfiguration::instance().color ("midi meter color0");
c[1] = UIConfiguration::instance().color ("midi meter color1");
c[2] = UIConfiguration::instance().color ("midi meter color2");
}
}
}
- if (meters[n].width != width || meters[n].length != len || color_changed || meter_type != visible_meter_type) {
+ if (meters[n].width != width || meters[n].length != len || color_changed || meter_type != visible_meter_type || nmidi != midi_count) {
bool hl = meters[n].meter ? meters[n].meter->get_highlight() : false;
meters[n].packed = false;
delete meters[n].meter;
//pack_end (*meters[n].meter, false, false);
mtr_pack (*meters[n].meter);
- meters[n].meter->show_all ();
meters[n].packed = true;
+ if (max_visible_meters == 0 || (uint32_t) n < max_visible_meters + nmidi) {
+ meters[n].meter->show_all ();
+ } else {
+ meters[n].meter->hide ();
+ }
}
//show();
color_changed = false;
visible_meter_type = meter_type;
- visible_meter_count = nmeters;
+ midi_count = nmidi;
+ meter_count = nmeters;
}
void