MacVST Program/Preset support

This commit is contained in:
Robin Gareus 2016-11-15 00:01:27 +01:00
parent 35de5080a6
commit a610157955
2 changed files with 31 additions and 0 deletions

View File

@ -51,9 +51,11 @@ private:
int get_XID ();
bool idle ();
void lower_box_realized ();
void set_program ();
NSWindow* get_nswindow();
Gtk::EventBox low_box;
NSView* _ns_view;
sigc::connection _idle_connection;
PBD::ScopedConnection _program_connection;
};

View File

@ -56,6 +56,8 @@ MacVSTPluginUI::MacVSTPluginUI (boost::shared_ptr<PluginInsert> pi, boost::share
low_box.signal_realize().connect (mem_fun (this, &MacVSTPluginUI::lower_box_realized));
pack_start (low_box, true, true);
low_box.show ();
vst->LoadPresetProgram.connect (_program_connection, invalidator (*this), boost::bind (&MacVSTPluginUI::set_program, this), gui_context());
}
MacVSTPluginUI::~MacVSTPluginUI ()
@ -149,3 +151,30 @@ MacVSTPluginUI::idle ()
_vst->state()->wantIdle = plugin->dispatcher (plugin, effEditIdle, 0, 0, NULL, 0);
return true; // _vst->state()->wantIdle;
}
void
MacVSTPluginUI::set_program ()
{
VSTState* vstfx = _vst->state();
if (vstfx->want_program != -1) {
if (vstfx->vst_version >= 2) {
vstfx->plugin->dispatcher (vstfx->plugin, 67 /* effBeginSetProgram */, 0, 0, NULL, 0);
}
vstfx->plugin->dispatcher (vstfx->plugin, effSetProgram, 0, vstfx->want_program, NULL, 0);
if (vstfx->vst_version >= 2) {
vstfx->plugin->dispatcher (vstfx->plugin, 68 /* effEndSetProgram */, 0, 0, NULL, 0);
}
vstfx->want_program = -1;
}
if (vstfx->want_chunk == 1) {
pthread_mutex_lock (&vstfx->state_lock);
vstfx->plugin->dispatcher (vstfx->plugin, 24 /* effSetChunk */, 1, vstfx->wanted_chunk_size, vstfx->wanted_chunk, 0);
vstfx->want_chunk = 0;
pthread_mutex_unlock (&vstfx->state_lock);
}
}