Add preference to configure VST3 Knob mode

This commit is contained in:
Robin Gareus 2025-11-11 01:05:00 +01:00
parent 6d53b42022
commit d8ea090902
No known key found for this signature in database
GPG key ID: A090BCE02CF57F04
4 changed files with 50 additions and 10 deletions

View file

@ -4164,6 +4164,35 @@ These settings will only take effect after %1 is restarted.\n\
add_option (_("Plugins/GUI"), _plugin_prefer_inline);
#endif
#ifdef VST3_SUPPORT
add_option (_("Plugins/GUI"), new OptionEditorHeading (_("VST3 UI")));
add_option (_("Plugins/GUI"),
new BoolOption (
"show-vst3-micro-edit-inline",
_("Automatically show 'Micro Edit' tagged controls on the mixer-strip"),
sigc::mem_fun (*_rc_config, &RCConfiguration::get_show_vst3_micro_edit_inline),
sigc::mem_fun (*_rc_config, &RCConfiguration::set_show_vst3_micro_edit_inline)
));
ComboOption<VST3KnobMode>* v3km = new ComboOption<VST3KnobMode> (
"vst3-knob-mode",
_("VST3 Knob Mode"),
sigc::mem_fun (*_rc_config, &RCConfiguration::get_vst3_knob_mode),
sigc::mem_fun (*_rc_config, &RCConfiguration::set_vst3_knob_mode)
);
v3km->add (VST3KnobPluginDefault, _("Plugin Default"));
v3km->add (VST3KnobCircularMode, _("Circular with jump to clicked position (discouraged)"));
v3km->add (VST3KnobRelativCircularMode, _("Circular without jump to clicked position"));
v3km->add (VST3KnobLinearMode, _("Linear: depending on vertical movement"));
v3km->set_note (_("These settings apply to new VST3 plugin instances only.\nAlready loaded plugins retain the previous setting."));
add_option (_("Plugins/GUI"), v3km);
#endif
#if (defined WINDOWS_VST_SUPPORT || defined MACVST_SUPPORT || defined LXVST_SUPPORT || defined VST3_SUPPORT)
add_option (_("Plugins/VST"), new OptionEditorHeading (_("VST")));
@ -4296,15 +4325,6 @@ These settings will only take effect after %1 is restarted.\n\
"are always searched, and need not be explicitly set."));
add_option (_("Plugins/VST"), vst3_path);
// -> Appearance/Mixer ?
add_option (_("Plugins/VST"),
new BoolOption (
"show-vst3-micro-edit-inline",
_("Automatically show 'Micro Edit' tagged controls on the mixer-strip"),
sigc::mem_fun (*_rc_config, &RCConfiguration::get_show_vst3_micro_edit_inline),
sigc::mem_fun (*_rc_config, &RCConfiguration::set_show_vst3_micro_edit_inline)
));
#if (defined WINDOWS_VST_SUPPORT || defined MACVST_SUPPORT || defined LXVST_SUPPORT)
add_option (_("Plugins/VST"), new OptionEditorHeading (_("VST2/VST3")));
add_option (_("Plugins/VST"),

View file

@ -259,6 +259,7 @@ CONFIG_VARIABLE (bool, setup_sidechain, "setup-sidechain", false)
CONFIG_VARIABLE (uint32_t, plugin_scan_timeout, "plugin-scan-timeout", 150) /* deci-seconds */
CONFIG_VARIABLE (uint32_t, limit_n_automatables, "limit-n-automatables", 512)
CONFIG_VARIABLE (uint32_t, plugin_cache_version, "plugin-cache-version", 0)
CONFIG_VARIABLE (VST3KnobMode, vst3_knob_mode, "vst3-knob-mode", VST3KnobLinearMode)
CONFIG_VARIABLE (float, tail_duration_sec, "tail-duration-sec", 2.0)
CONFIG_VARIABLE (uint32_t, max_tail_samples, "max-tail-samples", 0xffffffff) // aka kInfiniteTail

View file

@ -2927,6 +2927,13 @@ LuaBindings::common (lua_State* L)
.addConst ("NameAfterDriver", ARDOUR::TracksAutoNamingRule(NameAfterDriver))
.endNamespace ()
.beginNamespace ("VST3KnobMode")
.addConst ("VST3KnobPluginDefault", ARDOUR::VST3KnobMode(VST3KnobPluginDefault))
.addConst ("VST3KnobCircularMode", ARDOUR::VST3KnobMode(VST3KnobCircularMode))
.addConst ("VST3KnobRelativCircularMode", ARDOUR::VST3KnobMode(VST3KnobRelativCircularMode))
.addConst ("VST3KnobLinearMode", ARDOUR::VST3KnobMode(VST3KnobLinearMode))
.endNamespace ()
.endNamespace (); // end ARDOUR
luabridge::getGlobalNamespace (L)

View file

@ -1322,7 +1322,19 @@ VST3PI::VST3PI (std::shared_ptr<ARDOUR::VST3PluginModule> m, std::string unique_
FUnknownPtr<Vst::IEditController2> controller2 (_controller);
if (controller2) {
controller2->setKnobMode (Vst::kLinearMode);
switch (Config->get_vst3_knob_mode ()) {
case VST3KnobLinearMode:
controller2->setKnobMode (Vst::kLinearMode);
break;
case VST3KnobCircularMode:
controller2->setKnobMode (Vst::kCircularMode);
break;
case VST3KnobRelativCircularMode:
controller2->setKnobMode (Vst::kRelativCircularMode);
break;
default:
break;
}
}
int32 n_params = _controller->getParameterCount ();