Call IPlugView::on* from the UI thread

Since these can trigger a redraw.
This commit is contained in:
Robbert van der Helm
2020-12-22 15:47:57 +01:00
parent 9bb90388c1
commit 9ee7982591
+34 -12
View File
@@ -371,20 +371,34 @@ void Vst3Bridge::run() {
}, },
[&](const YaPlugView::OnWheel& request) [&](const YaPlugView::OnWheel& request)
-> YaPlugView::OnWheel::Response { -> YaPlugView::OnWheel::Response {
return object_instances[request.owner_instance_id] // Since all of these `IPlugView::on*` functions can cause a
.plug_view->onWheel(request.distance); // redraw, they all have to be called from the UI thread
return main_context
.run_in_context<tresult>([&]() {
return object_instances[request.owner_instance_id]
.plug_view->onWheel(request.distance);
})
.get();
}, },
[&](const YaPlugView::OnKeyDown& request) [&](const YaPlugView::OnKeyDown& request)
-> YaPlugView::OnKeyDown::Response { -> YaPlugView::OnKeyDown::Response {
return object_instances[request.owner_instance_id] return main_context
.plug_view->onKeyDown(request.key, request.key_code, .run_in_context<tresult>([&]() {
request.modifiers); return object_instances[request.owner_instance_id]
.plug_view->onKeyDown(request.key, request.key_code,
request.modifiers);
})
.get();
}, },
[&](const YaPlugView::OnKeyUp& request) [&](const YaPlugView::OnKeyUp& request)
-> YaPlugView::OnKeyUp::Response { -> YaPlugView::OnKeyUp::Response {
return object_instances[request.owner_instance_id] return main_context
.plug_view->onKeyUp(request.key, request.key_code, .run_in_context<tresult>([&]() {
request.modifiers); return object_instances[request.owner_instance_id]
.plug_view->onKeyUp(request.key, request.key_code,
request.modifiers);
})
.get();
}, },
[&](YaPlugView::GetSize& request) -> YaPlugView::GetSize::Response { [&](YaPlugView::GetSize& request) -> YaPlugView::GetSize::Response {
const tresult result = const tresult result =
@@ -395,13 +409,21 @@ void Vst3Bridge::run() {
.result = result, .updated_size = request.size}; .result = result, .updated_size = request.size};
}, },
[&](YaPlugView::OnSize& request) -> YaPlugView::OnSize::Response { [&](YaPlugView::OnSize& request) -> YaPlugView::OnSize::Response {
return object_instances[request.owner_instance_id] return main_context
.plug_view->onSize(&request.new_size); .run_in_context<tresult>([&]() {
return object_instances[request.owner_instance_id]
.plug_view->onSize(&request.new_size);
})
.get();
}, },
[&](const YaPlugView::OnFocus& request) [&](const YaPlugView::OnFocus& request)
-> YaPlugView::OnFocus::Response { -> YaPlugView::OnFocus::Response {
return object_instances[request.owner_instance_id] return main_context
.plug_view->onFocus(request.state); .run_in_context<tresult>([&]() {
return object_instances[request.owner_instance_id]
.plug_view->onFocus(request.state);
})
.get();
}, },
[&](YaPlugView::SetFrame& request) [&](YaPlugView::SetFrame& request)
-> YaPlugView::SetFrame::Response { -> YaPlugView::SetFrame::Response {