VST3: add set-dirty/state-changed support

This commit is contained in:
Robin Gareus
2020-09-27 18:01:50 +02:00
parent 554bd9958a
commit 1d6d4dc7b8
3 changed files with 51 additions and 1 deletions

View File

@@ -48,6 +48,7 @@ namespace Steinberg {
*/
class LIBARDOUR_API VST3PI
: public Vst::IComponentHandler
, public Vst::IComponentHandler2
, public Vst::IConnectionPoint
, public IPlugFrame
{
@@ -61,6 +62,12 @@ public:
tresult PLUGIN_API endEdit (Vst::ParamID id) SMTG_OVERRIDE;
tresult PLUGIN_API restartComponent (int32 flags) SMTG_OVERRIDE;
/* IComponentHandler2 */
tresult PLUGIN_API setDirty (TBool state) SMTG_OVERRIDE;
tresult PLUGIN_API requestOpenEditor (FIDString name) SMTG_OVERRIDE;
tresult PLUGIN_API startGroupEdit () SMTG_OVERRIDE;
tresult PLUGIN_API finishGroupEdit () SMTG_OVERRIDE;
/* IConnectionPoint API */
tresult PLUGIN_API connect (Vst::IConnectionPoint* other) SMTG_OVERRIDE;
tresult PLUGIN_API disconnect (Vst::IConnectionPoint* other) SMTG_OVERRIDE;
@@ -120,7 +127,7 @@ public:
std::string format_parameter (uint32_t p) const;
Vst::ParamID index_to_id (uint32_t) const;
enum ParameterChange { BeginGesture, EndGesture , ValueChange };
enum ParameterChange { BeginGesture, EndGesture , ValueChange, InternalChange };
PBD::Signal3<void, ParameterChange, uint32_t, float> OnParameterChange;
/* API for Ardour -- Setup/Processing */

View File

@@ -40,6 +40,7 @@ DEF_CLASS_IID (Vst::IAudioProcessor)
DEF_CLASS_IID (Vst::IAutomationState)
DEF_CLASS_IID (Vst::IComponent)
DEF_CLASS_IID (Vst::IComponentHandler)
DEF_CLASS_IID (Vst::IComponentHandler2)
DEF_CLASS_IID (Vst::IConnectionPoint)
DEF_CLASS_IID (Vst::IEditController)
DEF_CLASS_IID (Vst::IEventList)

View File

@@ -105,6 +105,9 @@ VST3Plugin::parameter_change_handler (VST3PI::ParameterChange t, uint32_t param,
/* emit ParameterChangedExternally, mark preset dirty */
Plugin::parameter_changed_externally (param, value);
break;
case VST3PI::InternalChange:
Plugin::state_changed ();
break;
}
}
@@ -1225,6 +1228,8 @@ VST3PI::queryInterface (const TUID _iid, void** obj)
{
QUERY_INTERFACE (_iid, obj, FUnknown::iid, Vst::IComponentHandler)
QUERY_INTERFACE (_iid, obj, Vst::IComponentHandler::iid, Vst::IComponentHandler)
QUERY_INTERFACE (_iid, obj, FUnknown::iid, Vst::IComponentHandler2)
QUERY_INTERFACE (_iid, obj, Vst::IComponentHandler2::iid, Vst::IComponentHandler2)
#if SMTG_OS_LINUX
if (_run_loop && FUnknownPrivate::iidEqual (_iid, Linux::IRunLoop::iid)) {
@@ -1296,6 +1301,43 @@ VST3PI::endEdit (Vst::ParamID id)
return kResultOk;
}
tresult
VST3PI::setDirty (TBool state)
{
if (state) {
OnParameterChange (InternalChange, 0, 0); /* EMIT SIGNAL */
}
return kResultOk;
}
tresult
VST3PI::requestOpenEditor (FIDString name)
{
if (name == Vst::ViewType::kEditor) {
/* TODO get plugin-insert (first plugin only, not replicated ones)
* call pi->ShowUI ();
*/
}
return kNotImplemented;
}
tresult
VST3PI::startGroupEdit ()
{
/* TODO:
* remember current time, update StartTouch API
* to allow passing a timestamp to PluginInsert::start_touch
* replacing .audible_sample()
*/
return kNotImplemented;
}
tresult
VST3PI::finishGroupEdit ()
{
return kNotImplemented;
}
bool
VST3PI::deactivate ()
{