From 5ef7e73725bb83d2c57404bd6e9585b8fa877830 Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Tue, 22 Dec 2020 15:37:06 +0100 Subject: [PATCH] Implement IPlugView::canResize() --- src/common/logging/vst3.cpp | 7 +++++++ src/common/logging/vst3.h | 1 + src/common/serialization/vst3.h | 1 + .../serialization/vst3/plug-view/plug-view.h | 16 ++++++++++++++++ .../bridges/vst3-impls/plug-view-proxy.cpp | 5 ++--- src/wine-host/bridges/vst3.cpp | 5 +++++ 6 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/common/logging/vst3.cpp b/src/common/logging/vst3.cpp index 85839b02..af419ffd 100644 --- a/src/common/logging/vst3.cpp +++ b/src/common/logging/vst3.cpp @@ -326,6 +326,13 @@ bool Vst3Logger::log_request(bool is_host_vst, }); } +bool Vst3Logger::log_request(bool is_host_vst, + const YaPlugView::CanResize& request) { + return log_request_base(is_host_vst, [&](auto& message) { + message << request.owner_instance_id << ": IPlugView::canResize()"; + }); +} + bool Vst3Logger::log_request(bool is_host_vst, const YaPluginBase::Initialize& 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 e9f3dc03..ca359e17 100644 --- a/src/common/logging/vst3.h +++ b/src/common/logging/vst3.h @@ -98,6 +98,7 @@ class Vst3Logger { bool log_request(bool is_host_vst, const YaPlugView::OnSize&); bool log_request(bool is_host_vst, const YaPlugView::OnFocus&); bool log_request(bool is_host_vst, const YaPlugView::SetFrame&); + bool log_request(bool is_host_vst, const YaPlugView::CanResize&); bool log_request(bool is_host_vst, const YaPluginBase::Initialize&); bool log_request(bool is_host_vst, const YaPluginBase::Terminate&); bool log_request(bool is_host_vst, const YaPluginFactory::Construct&); diff --git a/src/common/serialization/vst3.h b/src/common/serialization/vst3.h index 65222858..3a6f1c89 100644 --- a/src/common/serialization/vst3.h +++ b/src/common/serialization/vst3.h @@ -89,6 +89,7 @@ using ControlRequest = std::variant + void serialize(S& s) { + s.value8b(owner_instance_id); + } + }; + virtual tresult PLUGIN_API canResize() override = 0; virtual tresult PLUGIN_API checkSizeConstraint(Steinberg::ViewRect* rect) 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 eaa09a64..aaa14bbb 100644 --- a/src/plugin/bridges/vst3-impls/plug-view-proxy.cpp +++ b/src/plugin/bridges/vst3-impls/plug-view-proxy.cpp @@ -139,9 +139,8 @@ Vst3PlugViewProxyImpl::setFrame(Steinberg::IPlugFrame* frame) { } tresult PLUGIN_API Vst3PlugViewProxyImpl::canResize() { - // TODO: Implement - bridge.logger.log("TODO: IPlugView::canResize()"); - return Steinberg::kNotImplemented; + return bridge.send_message( + YaPlugView::CanResize{.owner_instance_id = owner_instance_id()}); } tresult PLUGIN_API diff --git a/src/wine-host/bridges/vst3.cpp b/src/wine-host/bridges/vst3.cpp index 7df6f3ed..1b4b7276 100644 --- a/src/wine-host/bridges/vst3.cpp +++ b/src/wine-host/bridges/vst3.cpp @@ -420,6 +420,11 @@ void Vst3Bridge::run() { object_instances[request.owner_instance_id] .plug_frame_proxy); }, + [&](YaPlugView::CanResize& request) + -> YaPlugView::CanResize::Response { + return object_instances[request.owner_instance_id] + .plug_view->canResize(); + }, [&](YaPluginBase::Initialize& request) -> YaPluginBase::Initialize::Response { // We'll create a proxy object for the host context passed by