From 06c55fcdd87349477119e4b4c1df3ec3a1600dbf Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Mon, 21 Dec 2020 18:56:22 +0100 Subject: [PATCH] Implement IPlugView::onWheel() --- src/common/logging/vst3.cpp | 9 +++++++++ src/common/logging/vst3.h | 1 + src/common/serialization/vst3.h | 1 + .../serialization/vst3/plug-view/plug-view.h | 19 +++++++++++++++++++ .../bridges/vst3-impls/plug-view-proxy.cpp | 5 ++--- src/wine-host/bridges/vst3.cpp | 5 +++++ 6 files changed, 37 insertions(+), 3 deletions(-) diff --git a/src/common/logging/vst3.cpp b/src/common/logging/vst3.cpp index 1add9e8f..7eee5a95 100644 --- a/src/common/logging/vst3.cpp +++ b/src/common/logging/vst3.cpp @@ -264,6 +264,15 @@ bool Vst3Logger::log_request(bool is_host_vst, }); } +bool Vst3Logger::log_request(bool is_host_vst, + const YaPlugView::OnWheel& request) { + return log_request_base(is_host_vst, [&](auto& message) { + message << request.owner_instance_id + << ": IPlugView::onWheel(distance = " << request.distance + << ")"; + }); +} + bool Vst3Logger::log_request(bool is_host_vst, const YaPlugView::GetSize& request) { return log_request_base(is_host_vst, [&](auto& message) { diff --git a/src/common/logging/vst3.h b/src/common/logging/vst3.h index b42af87c..3fd03cde 100644 --- a/src/common/logging/vst3.h +++ b/src/common/logging/vst3.h @@ -91,6 +91,7 @@ class Vst3Logger { const YaPlugView::IsPlatformTypeSupported&); bool log_request(bool is_host_vst, const YaPlugView::Attached&); bool log_request(bool is_host_vst, const YaPlugView::Removed&); + bool log_request(bool is_host_vst, const YaPlugView::OnWheel&); bool log_request(bool is_host_vst, const YaPlugView::GetSize&); bool log_request(bool is_host_vst, const YaPluginBase::Initialize&); bool log_request(bool is_host_vst, const YaPluginBase::Terminate&); diff --git a/src/common/serialization/vst3.h b/src/common/serialization/vst3.h index 7fa649b6..e8707f28 100644 --- a/src/common/serialization/vst3.h +++ b/src/common/serialization/vst3.h @@ -80,6 +80,7 @@ using ControlRequest = std::variant + void serialize(S& s) { + s.value8b(owner_instance_id); + s.value4b(distance); + } + }; + virtual tresult PLUGIN_API onWheel(float distance) override = 0; virtual tresult PLUGIN_API onKeyDown(char16 key, int16 keyCode, diff --git a/src/plugin/bridges/vst3-impls/plug-view-proxy.cpp b/src/plugin/bridges/vst3-impls/plug-view-proxy.cpp index 8b931003..130d5fad 100644 --- a/src/plugin/bridges/vst3-impls/plug-view-proxy.cpp +++ b/src/plugin/bridges/vst3-impls/plug-view-proxy.cpp @@ -64,9 +64,8 @@ tresult PLUGIN_API Vst3PlugViewProxyImpl::removed() { } tresult PLUGIN_API Vst3PlugViewProxyImpl::onWheel(float distance) { - // TODO: Implement - bridge.logger.log("TODO: IPlugView::onWheel()"); - return Steinberg::kNotImplemented; + return bridge.send_message(YaPlugView::OnWheel{ + .owner_instance_id = owner_instance_id(), .distance = distance}); } tresult PLUGIN_API Vst3PlugViewProxyImpl::onKeyDown(char16 key, diff --git a/src/wine-host/bridges/vst3.cpp b/src/wine-host/bridges/vst3.cpp index c29447f3..179c4574 100644 --- a/src/wine-host/bridges/vst3.cpp +++ b/src/wine-host/bridges/vst3.cpp @@ -370,6 +370,11 @@ void Vst3Bridge::run() { }) .get(); }, + [&](const YaPlugView::OnWheel& request) + -> YaPlugView::OnWheel::Response { + return object_instances[request.owner_instance_id] + .plug_view->onWheel(request.distance); + }, [&](YaPlugView::GetSize& request) -> YaPlugView::GetSize::Response { const tresult result = object_instances[request.owner_instance_id]