From 84f20367ccd09d2f265c586d133a1eb8f4e3090c Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 29 Jul 2013 19:42:41 +0200 Subject: add option to resize meterbridge track-labels --- gtk2_ardour/level_meter.cc | 1 + gtk2_ardour/level_meter.h | 1 + gtk2_ardour/meter_strip.cc | 108 ++++++++++++++++++++---- gtk2_ardour/meter_strip.h | 12 ++- gtk2_ardour/meterbridge.cc | 3 + libs/ardour/ardour/session_configuration_vars.h | 1 + 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 ButtonPress; + PBD::Signal1 ButtonRelease; PBD::Signal1 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 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 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 (&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,9 +782,18 @@ 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) { 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) -- cgit v1.2.3