summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2013-07-29 19:42:41 +0200
committerPaul Davis <paul@linuxaudiosystems.com>2013-08-08 15:26:17 -0400
commit84f20367ccd09d2f265c586d133a1eb8f4e3090c (patch)
treee4396c4581fb60c05c3e4aec3c3075f84601acf3
parentb58bb80a05d30eed83459263b375df0368363ab6 (diff)
add option to resize meterbridge track-labels
-rw-r--r--gtk2_ardour/level_meter.cc1
-rw-r--r--gtk2_ardour/level_meter.h1
-rw-r--r--gtk2_ardour/meter_strip.cc108
-rw-r--r--gtk2_ardour/meter_strip.h12
-rw-r--r--gtk2_ardour/meterbridge.cc3
-rw-r--r--libs/ardour/ardour/session_configuration_vars.h1
6 files changed, 106 insertions, 20 deletions
diff --git a/gtk2_ardour/level_meter.cc b/gtk2_ardour/level_meter.cc
index dc6ad772b1..7a5c43c8d0 100644
--- a/gtk2_ardour/level_meter.cc
+++ b/gtk2_ardour/level_meter.cc
@@ -427,6 +427,7 @@ LevelMeterBase::meter_button_release (GdkEventButton* ev)
if (ev->button == 1) {
clear_meters (false);
}
+ ButtonRelease(ev);
return true;
}
diff --git a/gtk2_ardour/level_meter.h b/gtk2_ardour/level_meter.h
index abb5e327ed..a355d7d285 100644
--- a/gtk2_ardour/level_meter.h
+++ b/gtk2_ardour/level_meter.h
@@ -71,6 +71,7 @@ class LevelMeterBase : public ARDOUR::SessionHandlePtr
/** Emitted in the GUI thread when a button is pressed over the meter */
PBD::Signal1<bool, GdkEventButton *> ButtonPress;
+ PBD::Signal1<bool, GdkEventButton *> ButtonRelease;
PBD::Signal1<void, ARDOUR::MeterType> MeterTypeChanged;
protected:
diff --git a/gtk2_ardour/meter_strip.cc b/gtk2_ardour/meter_strip.cc
index 87fbb62406..78dc61485a 100644
--- a/gtk2_ardour/meter_strip.cc
+++ b/gtk2_ardour/meter_strip.cc
@@ -135,7 +135,7 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
level_meter->clear_meters();
level_meter->set_type (_route->meter_type());
level_meter->setup_meters (220, meter_width, 6);
- level_meter->ButtonPress.connect_same_thread (level_meter_connection, boost::bind (&MeterStrip::level_meter_button_press, this, _1));
+ level_meter->ButtonRelease.connect_same_thread (level_meter_connection, boost::bind (&MeterStrip::level_meter_button_release, this, _1));
level_meter->MeterTypeChanged.connect_same_thread (level_meter_connection, boost::bind (&MeterStrip::meter_type_changed, this, _1));
meter_align.set(0.5, 0.5, 0.0, 1.0);
@@ -249,6 +249,7 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
_route->PropertyChanged.connect (route_connections, invalidator (*this), boost::bind (&MeterStrip::strip_property_changed, this, _1), gui_context());
peak_display.signal_button_release_event().connect (sigc::mem_fun(*this, &MeterStrip::peak_button_release), false);
+ name_label.signal_button_release_event().connect (sigc::mem_fun(*this, &MeterStrip::name_label_button_release), false);
UI::instance()->theme_changed.connect (sigc::mem_fun(*this, &MeterStrip::on_theme_changed));
ColorsChanged.connect (sigc::mem_fun (*this, &MeterStrip::on_theme_changed));
@@ -450,9 +451,29 @@ void
MeterStrip::on_size_allocate (Gtk::Allocation& a)
{
const int wh = a.get_height();
- int nh = ceilf(wh * .11f);
- if (nh < 52) nh = 52;
- if (nh > 148) nh = 148;
+ int nh;
+ int mh = 0;
+ if (_session) {
+ mh = _session->config.get_meterbridge_label_height();
+ }
+ switch (mh) {
+ default:
+ case 0:
+ nh = ceilf(wh * .11f);
+ if (nh < 52) nh = 52;
+ if (nh > 148) nh = 148;
+ break;
+ case 2:
+ nh = ceilf(wh * .22);
+ if (nh < 52) nh = 52;
+ if (nh > 256) nh = 256;
+ break;
+ case 1:
+ nh = ceilf(wh * .08);
+ if (nh < 36) nh = 36;
+ if (nh > 128) nh = 128;
+ break;
+ }
namebx.set_size_request(18, nh);
if (_route) {
name_label.set_size_request(18, nh-2);
@@ -651,11 +672,13 @@ MeterStrip::parameter_changed (std::string const & p)
else if (p == "show-name-on-meterbridge") {
update_name_box();
}
+ else if (p == "meterbridge-label-height") {
+ queue_resize();
+ }
}
-
bool
-MeterStrip::level_meter_button_press (GdkEventButton* ev)
+MeterStrip::level_meter_button_release (GdkEventButton* ev)
{
if (ev->button == 3) {
popup_level_meter_menu (ev);
@@ -676,15 +699,15 @@ MeterStrip::popup_level_meter_menu (GdkEventButton* ev)
RadioMenuItem::Group group;
_suspend_menu_callbacks = true;
- add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterPeak), MeterPeak);
- add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterKrms), MeterKrms);
- add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterIEC1DIN), MeterIEC1DIN);
- add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterIEC1NOR), MeterIEC1NOR);
- add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterIEC2BBC), MeterIEC2BBC);
- add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterIEC2EBU), MeterIEC2EBU);
- add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterK20), MeterK20);
- add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterK14), MeterK14);
- add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterVU), MeterVU);
+ add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterPeak), MeterPeak);
+ add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterKrms), MeterKrms);
+ add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterIEC1DIN), MeterIEC1DIN);
+ add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterIEC1NOR), MeterIEC1NOR);
+ add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterIEC2BBC), MeterIEC2BBC);
+ add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterIEC2EBU), MeterIEC2EBU);
+ add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterK20), MeterK20);
+ add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterK14), MeterK14);
+ add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterVU), MeterVU);
MeterType cmt = _route->meter_type();
const std::string cmn = ArdourMeter::meter_type_string(cmt);
@@ -701,8 +724,52 @@ MeterStrip::popup_level_meter_menu (GdkEventButton* ev)
_suspend_menu_callbacks = false;
}
+bool
+MeterStrip::name_label_button_release (GdkEventButton* ev)
+{
+ if (!_session) return true;
+ if (!_session->config.get_show_name_on_meterbridge()) return true;
+
+ if (ev->button == 3) {
+ popup_name_label_menu (ev);
+ return true;
+ }
+
+ return false;
+}
+
+void
+MeterStrip::popup_name_label_menu (GdkEventButton* ev)
+{
+ using namespace Gtk::Menu_Helpers;
+
+ Gtk::Menu* m = manage (new Menu);
+ MenuList& items = m->items ();
+
+ RadioMenuItem::Group group;
+
+ _suspend_menu_callbacks = true;
+ items.push_back (SeparatorElem());
+ add_label_height_item (items, group, _("Short labels"), 1);
+ add_label_height_item (items, group, _("Medium labels"), 0);
+ add_label_height_item (items, group, _("Tall labels"), 2);
+
+ m->popup (ev->button, ev->time);
+ _suspend_menu_callbacks = false;
+}
+
void
-MeterStrip::add_level_meter_item (Menu_Helpers::MenuList& items, RadioMenuItem::Group& group, string const & name, MeterType type)
+MeterStrip::add_label_height_item (Menu_Helpers::MenuList& items, RadioMenuItem::Group& group, string const & name, uint32_t h)
+{
+ using namespace Menu_Helpers;
+
+ items.push_back (RadioMenuElem (group, name, sigc::bind (sigc::mem_fun (*this, &MeterStrip::set_label_height), h)));
+ RadioMenuItem* i = dynamic_cast<RadioMenuItem *> (&items.back ());
+ i->set_active (_session && _session->config.get_meterbridge_label_height() == h);
+}
+
+void
+MeterStrip::add_level_meter_type_item (Menu_Helpers::MenuList& items, RadioMenuItem::Group& group, string const & name, MeterType type)
{
using namespace Menu_Helpers;
@@ -715,10 +782,19 @@ void
MeterStrip::set_meter_type (MeterType type)
{
if (_suspend_menu_callbacks) return;
+ if (_route->meter_type() == type) return;
+
level_meter->set_type (type);
}
void
+MeterStrip::set_label_height (uint32_t h)
+{
+ if (_suspend_menu_callbacks) return;
+ _session->config.set_meterbridge_label_height(h);
+}
+
+void
MeterStrip::meter_type_changed (MeterType type)
{
if (_route->meter_type() != type) {
diff --git a/gtk2_ardour/meter_strip.h b/gtk2_ardour/meter_strip.h
index 896725656b..e817f7d5c6 100644
--- a/gtk2_ardour/meter_strip.h
+++ b/gtk2_ardour/meter_strip.h
@@ -132,8 +132,6 @@ class MeterStrip : public Gtk::VBox, public RouteUI
void meter_type_changed (ARDOUR::MeterType);
void update_background (ARDOUR::MeterType);
- static int max_pattern_metric_size; // == FastMeter::max_pattern_metric_size
-
bool peak_button_release (GdkEventButton*);
void parameter_changed (std::string const & p);
@@ -142,10 +140,16 @@ class MeterStrip : public Gtk::VBox, public RouteUI
void update_name_box ();
bool _suspend_menu_callbacks;
- bool level_meter_button_press (GdkEventButton* ev);
+ bool level_meter_button_release (GdkEventButton* ev);
void popup_level_meter_menu (GdkEventButton* ev);
- void add_level_meter_item (Gtk::Menu_Helpers::MenuList& items, Gtk::RadioMenuItem::Group& group, std::string const & name, ARDOUR::MeterType mode);
+ void add_level_meter_type_item (Gtk::Menu_Helpers::MenuList&, Gtk::RadioMenuItem::Group&, std::string const &, ARDOUR::MeterType);
+
+ bool name_label_button_release (GdkEventButton* ev);
+ void popup_name_label_menu (GdkEventButton* ev);
+ void add_label_height_item (Gtk::Menu_Helpers::MenuList&, Gtk::RadioMenuItem::Group&, std::string const &, uint32_t);
+
void set_meter_type (ARDOUR::MeterType mode);
+ void set_label_height (uint32_t);
};
#endif /* __ardour_mixer_strip__ */
diff --git a/gtk2_ardour/meterbridge.cc b/gtk2_ardour/meterbridge.cc
index 0183c0f4d2..a0110365c1 100644
--- a/gtk2_ardour/meterbridge.cc
+++ b/gtk2_ardour/meterbridge.cc
@@ -807,6 +807,9 @@ Meterbridge::parameter_changed (std::string const & p)
else if (p == "show-name-on-meterbridge") {
scroller.queue_resize();
}
+ else if (p == "meterbridge-label-height") {
+ scroller.queue_resize();
+ }
}
void
diff --git a/libs/ardour/ardour/session_configuration_vars.h b/libs/ardour/ardour/session_configuration_vars.h
index ebeebbe1fd..5e93c01b79 100644
--- a/libs/ardour/ardour/session_configuration_vars.h
+++ b/libs/ardour/ardour/session_configuration_vars.h
@@ -64,3 +64,4 @@ CONFIG_VARIABLE (bool, show_rec_on_meterbridge, "show-rec-on-meterbridge", true)
CONFIG_VARIABLE (bool, show_mute_on_meterbridge, "show-mute-on-meterbridge", false)
CONFIG_VARIABLE (bool, show_solo_on_meterbridge, "show-solo-on-meterbridge", false)
CONFIG_VARIABLE (bool, show_name_on_meterbridge, "show-name-on-meterbridge", true)
+CONFIG_VARIABLE (uint32_t, meterbridge_label_height, "meterbridge-label-height", 0)