From 463557349d78365188b520512583ae40166a4ee1 Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Mon, 21 Dec 2020 23:46:29 +0100 Subject: [PATCH] Implement IPlugView::onSize() --- src/common/logging/vst3.cpp | 13 +++++++++++++ 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 | 11 ++++++++--- src/wine-host/bridges/vst3.cpp | 4 ++++ 6 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/common/logging/vst3.cpp b/src/common/logging/vst3.cpp index 5dcf5be9..bae28b1e 100644 --- a/src/common/logging/vst3.cpp +++ b/src/common/logging/vst3.cpp @@ -297,6 +297,19 @@ bool Vst3Logger::log_request(bool is_host_vst, }); } +bool Vst3Logger::log_request(bool is_host_vst, + const YaPlugView::OnSize& request) { + return log_request_base(is_host_vst, [&](auto& message) { + // This static cast is technically not correct of course but it's + // UTF-16, so everything's allowed + message << request.owner_instance_id + << ": IPlugView::onSize(newSize = )"; + }); +} + 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 bfe3879f..668f54da 100644 --- a/src/common/logging/vst3.h +++ b/src/common/logging/vst3.h @@ -94,6 +94,7 @@ class Vst3Logger { bool log_request(bool is_host_vst, const YaPlugView::OnWheel&); bool log_request(bool is_host_vst, const YaPlugView::OnKeyDown&); bool log_request(bool is_host_vst, const YaPlugView::OnKeyUp&); + bool log_request(bool is_host_vst, const YaPlugView::OnSize&); 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 4ae0dbfe..4ec3be88 100644 --- a/src/common/serialization/vst3.h +++ b/src/common/serialization/vst3.h @@ -83,6 +83,7 @@ using ControlRequest = std::variant + void serialize(S& s) { + s.value8b(owner_instance_id); + s.object(new_size); + } + }; + virtual tresult PLUGIN_API onSize(Steinberg::ViewRect* newSize) override = 0; virtual tresult PLUGIN_API onFocus(TBool state) override = 0; diff --git a/src/plugin/bridges/vst3-impls/plug-view-proxy.cpp b/src/plugin/bridges/vst3-impls/plug-view-proxy.cpp index bf6fabb0..7e840fe0 100644 --- a/src/plugin/bridges/vst3-impls/plug-view-proxy.cpp +++ b/src/plugin/bridges/vst3-impls/plug-view-proxy.cpp @@ -105,9 +105,14 @@ tresult PLUGIN_API Vst3PlugViewProxyImpl::getSize(Steinberg::ViewRect* size) { } tresult PLUGIN_API Vst3PlugViewProxyImpl::onSize(Steinberg::ViewRect* newSize) { - // TODO: Implement - bridge.logger.log("TODO: IPlugView::onSize()"); - return Steinberg::kNotImplemented; + if (newSize) { + return bridge.send_message(YaPlugView::OnSize{ + .owner_instance_id = owner_instance_id(), .new_size = *newSize}); + } else { + bridge.logger.log( + "WARNING: Null pointer passed to 'IPlugView::onSize()'"); + return Steinberg::kInvalidArgument; + } } tresult PLUGIN_API Vst3PlugViewProxyImpl::onFocus(TBool state) { diff --git a/src/wine-host/bridges/vst3.cpp b/src/wine-host/bridges/vst3.cpp index 63643bb3..240e5cc8 100644 --- a/src/wine-host/bridges/vst3.cpp +++ b/src/wine-host/bridges/vst3.cpp @@ -387,6 +387,10 @@ void Vst3Bridge::run() { .plug_view->onKeyUp(request.key, request.key_code, request.modifiers); }, + [&](YaPlugView::OnSize& request) -> YaPlugView::OnKeyUp::Response { + return object_instances[request.owner_instance_id] + .plug_view->onSize(&request.new_size); + }, [&](YaPlugView::GetSize& request) -> YaPlugView::GetSize::Response { const tresult result = object_instances[request.owner_instance_id]