mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-06 14:54:56 +01:00
overhaul meterbridge:
* rotate labels, fix size * identical total width for mono + stereo meters * show metric area only every 8th meter * ...
This commit is contained in:
parent
446aed52f3
commit
bc2ff6a554
3 changed files with 62 additions and 7 deletions
|
|
@ -26,6 +26,9 @@
|
||||||
#include "ardour/route_group.h"
|
#include "ardour/route_group.h"
|
||||||
#include "ardour/meter.h"
|
#include "ardour/meter.h"
|
||||||
|
|
||||||
|
#include "ardour/audio_track.h"
|
||||||
|
#include "ardour/midi_track.h"
|
||||||
|
|
||||||
#include <gtkmm2ext/gtk_ui.h>
|
#include <gtkmm2ext/gtk_ui.h>
|
||||||
#include <gtkmm2ext/utils.h>
|
#include <gtkmm2ext/utils.h>
|
||||||
|
|
||||||
|
|
@ -55,11 +58,16 @@ MeterStrip::MeterStrip (Meterbridge& mtr, Session* sess, boost::shared_ptr<ARDOU
|
||||||
{
|
{
|
||||||
set_spacing(2);
|
set_spacing(2);
|
||||||
|
|
||||||
|
int meter_width = 6;
|
||||||
|
if (_route->shared_peak_meter()->input_streams().n_total() == 1) {
|
||||||
|
meter_width = 12;
|
||||||
|
}
|
||||||
|
|
||||||
// add level meter
|
// add level meter
|
||||||
level_meter = new LevelMeter(sess);
|
level_meter = new LevelMeter(sess);
|
||||||
level_meter->set_meter (_route->shared_peak_meter().get());
|
level_meter->set_meter (_route->shared_peak_meter().get());
|
||||||
level_meter->clear_meters();
|
level_meter->clear_meters();
|
||||||
level_meter->setup_meters (350, 6);
|
level_meter->setup_meters (350, meter_width, 6);
|
||||||
level_meter->pack_start (meter_metric_area, false, false);
|
level_meter->pack_start (meter_metric_area, false, false);
|
||||||
|
|
||||||
Gtk::Alignment *meter_align = Gtk::manage (new Gtk::Alignment());
|
Gtk::Alignment *meter_align = Gtk::manage (new Gtk::Alignment());
|
||||||
|
|
@ -71,13 +79,17 @@ MeterStrip::MeterStrip (Meterbridge& mtr, Session* sess, boost::shared_ptr<ARDOU
|
||||||
// * fixed-height labels (or table layout)
|
// * fixed-height labels (or table layout)
|
||||||
// * print lables at angle (allow longer text)
|
// * print lables at angle (allow longer text)
|
||||||
label.set_text(_route->name().c_str());
|
label.set_text(_route->name().c_str());
|
||||||
|
label.set_name("MeterbridgeLabel");
|
||||||
|
#if 0
|
||||||
label.set_ellipsize(Pango::ELLIPSIZE_MIDDLE);
|
label.set_ellipsize(Pango::ELLIPSIZE_MIDDLE);
|
||||||
label.set_max_width_chars(7);
|
label.set_max_width_chars(7);
|
||||||
label.set_width_chars(7);
|
label.set_width_chars(7);
|
||||||
label.set_alignment(0.5, 0.5);
|
label.set_alignment(0.5, 0.5);
|
||||||
label.set_name("MeterbridgeLabel");
|
#else //ellipsize & angle are incompatible :(
|
||||||
//ellipsize & angle are incompatible :(
|
label.set_angle(90.0);
|
||||||
//label.property_angle().set_value(90.0);
|
label.set_alignment(0.5, 0.0);
|
||||||
|
#endif
|
||||||
|
label.set_size_request(12, 36);
|
||||||
|
|
||||||
pack_start(*meter_align, true, true);
|
pack_start(*meter_align, true, true);
|
||||||
pack_start (label, false, false);
|
pack_start (label, false, false);
|
||||||
|
|
@ -131,6 +143,16 @@ MeterStrip::fast_update ()
|
||||||
// TODO peak indicator if mpeak > 0
|
// TODO peak indicator if mpeak > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MeterStrip::display_metrics (bool show)
|
||||||
|
{
|
||||||
|
if (show) {
|
||||||
|
meter_metric_area.show();
|
||||||
|
} else {
|
||||||
|
meter_metric_area.hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MeterStrip::on_theme_changed()
|
MeterStrip::on_theme_changed()
|
||||||
{
|
{
|
||||||
|
|
@ -150,8 +172,13 @@ MeterStrip::meter_configuration_changed (ChanCount c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO draw Inactive routes and busses with different styles
|
// TODO draw Inactive routes or busses with different styles
|
||||||
if (type == (1 << DataType::AUDIO)) {
|
if (boost::dynamic_pointer_cast<AudioTrack>(_route) == 0
|
||||||
|
&& boost::dynamic_pointer_cast<MidiTrack>(_route) == 0
|
||||||
|
) {
|
||||||
|
meter_metric_area.set_name ("AudioBusMetrics");
|
||||||
|
}
|
||||||
|
else if (type == (1 << DataType::AUDIO)) {
|
||||||
meter_metric_area.set_name ("AudioTrackMetrics");
|
meter_metric_area.set_name ("AudioTrackMetrics");
|
||||||
}
|
}
|
||||||
else if (type == (1 << DataType::MIDI)) {
|
else if (type == (1 << DataType::MIDI)) {
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,7 @@ class MeterStrip : public Gtk::VBox
|
||||||
~MeterStrip ();
|
~MeterStrip ();
|
||||||
|
|
||||||
void fast_update ();
|
void fast_update ();
|
||||||
|
void display_metrics (bool);
|
||||||
boost::shared_ptr<ARDOUR::Route> route() { return _route; }
|
boost::shared_ptr<ARDOUR::Route> route() { return _route; }
|
||||||
|
|
||||||
static PBD::Signal1<void,MeterStrip*> CatchDeletion;
|
static PBD::Signal1<void,MeterStrip*> CatchDeletion;
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,9 @@
|
||||||
#include "ardour/route_group.h"
|
#include "ardour/route_group.h"
|
||||||
#include "ardour/session.h"
|
#include "ardour/session.h"
|
||||||
|
|
||||||
|
#include "ardour/audio_track.h"
|
||||||
|
#include "ardour/midi_track.h"
|
||||||
|
|
||||||
#include "meterbridge.h"
|
#include "meterbridge.h"
|
||||||
|
|
||||||
#include "monitor_section.h"
|
#include "monitor_section.h"
|
||||||
|
|
@ -137,7 +140,7 @@ Meterbridge::Meterbridge ()
|
||||||
|
|
||||||
MeterStrip::CatchDeletion.connect (*this, invalidator (*this), boost::bind (&Meterbridge::remove_strip, this, _1), gui_context());
|
MeterStrip::CatchDeletion.connect (*this, invalidator (*this), boost::bind (&Meterbridge::remove_strip, this, _1), gui_context());
|
||||||
|
|
||||||
global_hpacker.set_spacing(1);
|
global_hpacker.set_spacing(3);
|
||||||
scroller.add (global_hpacker);
|
scroller.add (global_hpacker);
|
||||||
scroller.set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_NEVER);
|
scroller.set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_NEVER);
|
||||||
global_vpacker.pack_start (scroller, true, true);
|
global_vpacker.pack_start (scroller, true, true);
|
||||||
|
|
@ -405,6 +408,17 @@ Meterbridge::add_strips (RouteList& routes)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (route->is_master()) {
|
||||||
|
/* always show master */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (boost::dynamic_pointer_cast<AudioTrack>(route) == 0
|
||||||
|
&& boost::dynamic_pointer_cast<MidiTrack>(route) == 0
|
||||||
|
) {
|
||||||
|
// non-master bus
|
||||||
|
if (0) continue; // TODO allow to skip busses
|
||||||
|
}
|
||||||
|
|
||||||
strip = new MeterStrip (*this, _session, route);
|
strip = new MeterStrip (*this, _session, route);
|
||||||
strips.push_back (strip);
|
strips.push_back (strip);
|
||||||
|
|
||||||
|
|
@ -437,6 +451,19 @@ Meterbridge::sync_order_keys (RouteSortOrderKey src)
|
||||||
|
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
for (list<MeterStrip *>::iterator i = copy.begin(); i != copy.end(); ++i) {
|
for (list<MeterStrip *>::iterator i = copy.begin(); i != copy.end(); ++i) {
|
||||||
|
#if 0 // TODO subscribe to route active,inactive changes
|
||||||
|
if (! (*i)->route()->active()) {
|
||||||
|
(*i)->hide();
|
||||||
|
} else {
|
||||||
|
(*i)->show();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (pos%8 == 0) {
|
||||||
|
(*i)->display_metrics(true);
|
||||||
|
} else {
|
||||||
|
(*i)->display_metrics(false);
|
||||||
|
}
|
||||||
global_hpacker.reorder_child(*(*i), pos++);
|
global_hpacker.reorder_child(*(*i), pos++);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue