diff options
author | David Robillard <d@drobilla.net> | 2010-02-04 01:29:34 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2010-02-04 01:29:34 +0000 |
commit | 36dc6bdb6d9b96e2a18acbe6c681a842d1590fb6 (patch) | |
tree | eb01898024d18a0d1463a03cbcfaeb0a7e3956c4 /src/engine/Engine.cpp | |
parent | aef3c9348218029a077f40081fd078a9e2ee85ca (diff) | |
download | ingen-36dc6bdb6d9b96e2a18acbe6c681a842d1590fb6.tar.gz ingen-36dc6bdb6d9b96e2a18acbe6c681a842d1590fb6.tar.bz2 ingen-36dc6bdb6d9b96e2a18acbe6c681a842d1590fb6.zip |
MIDI feedback.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2418 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/Engine.cpp')
-rw-r--r-- | src/engine/Engine.cpp | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/src/engine/Engine.cpp b/src/engine/Engine.cpp index 78420e3a..3f65b587 100644 --- a/src/engine/Engine.cpp +++ b/src/engine/Engine.cpp @@ -151,6 +151,16 @@ Engine::add_event_source(SharedPtr<EventSource> source) } +static void +execute_and_delete_event(ProcessContext& context, QueuedEvent* ev) +{ + ev->pre_process(); + ev->execute(context); + ev->post_process(); + delete ev; +} + + bool Engine::activate() { @@ -178,18 +188,26 @@ Engine::activate() root_patch->compiled_patch(root_patch->compile()); _driver->set_root_patch(root_patch); - // Add control port - Shared::Resource::Properties properties; - properties.insert(make_pair(uris.lv2_name, "Control")); - properties.insert(make_pair(uris.rdf_type, uris.lv2ev_EventPort)); - properties.insert(make_pair(uris.rdf_type, uris.lv2_InputPort)); - Events::CreatePort* ev = new Events::CreatePort(*this, SharedPtr<Request>(), 0, - "/ingen_control", uris.lv2ev_EventPort, false, properties); - ev->pre_process(); ProcessContext context(*this); - ev->execute(context); - ev->post_process(); - delete ev; + + Shared::Resource::Properties control_properties; + control_properties.insert(make_pair(uris.lv2_name, "Control")); + control_properties.insert(make_pair(uris.rdf_type, uris.lv2ev_EventPort)); + + // Add control input + Shared::Resource::Properties in_properties(control_properties); + in_properties.insert(make_pair(uris.rdf_type, uris.lv2_InputPort)); + + execute_and_delete_event(context, new Events::CreatePort( + *this, SharedPtr<Request>(), 0, + "/control_in", uris.lv2ev_EventPort, false, in_properties)); + + // Add control out + Shared::Resource::Properties out_properties(control_properties); + out_properties.insert(make_pair(uris.rdf_type, uris.lv2_OutputPort)); + execute_and_delete_event(context, new Events::CreatePort( + *this, SharedPtr<Request>(), 0, + "/control_out", uris.lv2ev_EventPort, true, out_properties)); } _driver->activate(); |