summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/parameter_descriptor.h1
-rw-r--r--libs/ardour/lv2_plugin.cc8
-rw-r--r--libs/ardour/parameter_descriptor.cc5
-rw-r--r--libs/ardour/plugin_insert.cc5
-rw-r--r--libs/ardour/send.cc1
-rw-r--r--libs/pbd/pbd/controllable.h9
6 files changed, 23 insertions, 6 deletions
diff --git a/libs/ardour/ardour/parameter_descriptor.h b/libs/ardour/ardour/parameter_descriptor.h
index b9c0417ce6..1218448985 100644
--- a/libs/ardour/ardour/parameter_descriptor.h
+++ b/libs/ardour/ardour/parameter_descriptor.h
@@ -112,6 +112,7 @@ struct LIBARDOUR_API ParameterDescriptor : public Evoral::ParameterDescriptor
bool integer_step;
bool sr_dependent;
bool enumeration;
+ bool inline_ctrl;
};
} // namespace ARDOUR
diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc
index c3ce6026ed..453c454714 100644
--- a/libs/ardour/lv2_plugin.cc
+++ b/libs/ardour/lv2_plugin.cc
@@ -213,6 +213,7 @@ public:
LilvNode* auto_automation_controlled; // lv2:portProperty
LilvNode* auto_automation_controller; // lv2:portProperty
LilvNode* inline_display_in_gui; // lv2:optionalFeature
+ LilvNode* inline_mixer_control; // lv2:PortProperty
#endif
private:
@@ -2279,6 +2280,10 @@ LV2Plugin::get_parameter_descriptor(uint32_t which, ParameterDescriptor& desc) c
desc.enumeration = lilv_port_has_property(_impl->plugin, port, _world.lv2_enumeration);
desc.scale_points = get_scale_points(which);
+#ifdef LV2_EXTENDED
+ desc.inline_ctrl = lilv_port_has_property(_impl->plugin, port, _world.inline_mixer_control);
+#endif
+
if (steps) {
desc.rangesteps = lilv_node_as_float (steps);
}
@@ -3323,6 +3328,7 @@ LV2World::LV2World()
auto_automation_controlled = lilv_new_uri(world, LV2_AUTOMATE_URI__controlled);
auto_automation_controller = lilv_new_uri(world, LV2_AUTOMATE_URI__controller);
inline_display_in_gui = lilv_new_uri(world, LV2_INLINEDISPLAY__in_gui);
+ inline_mixer_control = lilv_new_uri(world, "http://ardour.org/lv2/ext#inlineMixerControl");
#endif
bufz_powerOf2BlockLength = lilv_new_uri(world, LV2_BUF_SIZE__powerOf2BlockLength);
bufz_fixedBlockLength = lilv_new_uri(world, LV2_BUF_SIZE__fixedBlockLength);
@@ -3346,6 +3352,8 @@ LV2World::~LV2World()
lilv_node_free(auto_automation_control);
lilv_node_free(auto_automation_controlled);
lilv_node_free(auto_automation_controller);
+ lilv_node_free(inline_display_in_gui);
+ lilv_node_free(inline_mixer_control);
#endif
lilv_node_free(patch_Message);
lilv_node_free(opts_requiredOptions);
diff --git a/libs/ardour/parameter_descriptor.cc b/libs/ardour/parameter_descriptor.cc
index d959072fb5..0559927d21 100644
--- a/libs/ardour/parameter_descriptor.cc
+++ b/libs/ardour/parameter_descriptor.cc
@@ -53,8 +53,10 @@ ParameterDescriptor::ParameterDescriptor(const Evoral::Parameter& parameter)
/* Note: defaults in Evoral::ParameterDescriptor */
switch((AutomationType)parameter.type()) {
- case GainAutomation:
case BusSendLevel:
+ inline_ctrl = true;
+ /* fallthrough */
+ case GainAutomation:
upper = Config->get_max_gain();
normal = 1.0f;
break;
@@ -150,6 +152,7 @@ ParameterDescriptor::ParameterDescriptor()
, integer_step(false)
, sr_dependent(false)
, enumeration(false)
+ , inline_ctrl(false)
{}
void
diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc
index 9b4aa17b0c..22e40e4b63 100644
--- a/libs/ardour/plugin_insert.cc
+++ b/libs/ardour/plugin_insert.cc
@@ -486,9 +486,12 @@ PluginInsert::create_automatable_parameters ()
boost::shared_ptr<AutomationList> list(new AutomationList(param, desc));
boost::shared_ptr<AutomationControl> c (new PluginControl(this, param, desc, list));
- if (!automatable || (limit_automatables > 0 && i > limit_automatables)) {
+ if (!automatable || (limit_automatables > 0 && what_can_be_automated ().size() > limit_automatables)) {
c->set_flags (Controllable::Flag ((int)c->flags() | Controllable::NotAutomatable));
}
+ if (desc.inline_ctrl) {
+ c->set_flags (Controllable::Flag ((int)c->flags() | Controllable::InlineControl));
+ }
add_control (c);
plugin->set_automation_control (i, c);
}
diff --git a/libs/ardour/send.cc b/libs/ardour/send.cc
index 78246eca82..d913693909 100644
--- a/libs/ardour/send.cc
+++ b/libs/ardour/send.cc
@@ -102,6 +102,7 @@ Send::Send (Session& s, boost::shared_ptr<Pannable> p, boost::shared_ptr<MuteMas
boost::shared_ptr<AutomationList> gl (new AutomationList (Evoral::Parameter (GainAutomation)));
_gain_control = boost::shared_ptr<GainControl> (new GainControl (_session, Evoral::Parameter(BusSendLevel), gl));
+ _gain_control->set_flags (Controllable::Flag ((int)_gain_control->flags() | Controllable::InlineControl));
add_control (_gain_control);
_amp.reset (new Amp (_session, _("Fader"), _gain_control, true));
diff --git a/libs/pbd/pbd/controllable.h b/libs/pbd/pbd/controllable.h
index a83a42bcb3..3d5dd5fc65 100644
--- a/libs/pbd/pbd/controllable.h
+++ b/libs/pbd/pbd/controllable.h
@@ -73,10 +73,11 @@ class LIBPBD_API Controllable : public PBD::StatefulDestructible, public boost::
{
public:
enum Flag {
- Toggle = 0x1,
- GainLike = 0x2,
- RealTime = 0x4,
- NotAutomatable = 0x8,
+ Toggle = 0x01,
+ GainLike = 0x02,
+ RealTime = 0x04,
+ NotAutomatable = 0x08,
+ InlineControl = 0x10,
};
Controllable (const std::string& name, Flag f = Flag (0));