VST3: add set-dirty/state-changed support
This commit is contained in:
@@ -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 */
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 ()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user