Add message structs for IComponentHandler3

This commit is contained in:
Robbert van der Helm
2021-01-06 21:09:44 +01:00
parent abe7085ab5
commit 053a288cd5
2 changed files with 46 additions and 2 deletions
@@ -17,9 +17,11 @@
#pragma once
#include <pluginterfaces/vst/ivstcontextmenu.h>
#include "bitsery/ext/std_optional.h"
#include "../../common.h"
#include "../base.h"
#include "../context-menu-proxy.h"
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
@@ -61,6 +63,48 @@ class YaComponentHandler3 : public Steinberg::Vst::IComponentHandler3 {
inline bool supported() const { return arguments.supported; }
/**
* The arguments needed to create a proxy object for the context menu
* returned by the host resulting from a call to
* `IComponentHandler3::createContextMenu(<plug_view>, param_id)`, if the
* call succeeded.
*/
struct CreateContextMenuResponse {
std::optional<Vst3ContextMenuProxy::ConstructArgs> context_menu_args;
template <typename S>
void serialize(S& s) {
s.ext(context_menu_args, bitsery::ext::StdOptional{});
}
};
/**
* Message to pass through a call to
* `IComponentHandler3::createContextMenu(<plug_view>, param_id)` to the
* component handler provided by the host.
*
* XXX: Since we don't support multiple `IPlugView`s right now (as it's not
* used the SDK's current version), we'll just assume that `view` is
* the view stored in `Vst3PluginProxyImpl::plug_view`
*/
struct CreateContextMenu {
using Response = CreateContextMenuResponse;
native_size_t owner_instance_id;
// XXX: Why do they pass a pointer to the parameter ID? The docs that
// when the parameter ID is zero, the host should create a generic
// context menu. Did they mean to write 'a null pointer' here?
std::optional<Steinberg::Vst::ParamID> param_id;
template <typename S>
void serialize(S& s) {
s.value8b(owner_instance_id);
s.ext(param_id, bitsery::ext::StdOptional{},
[](S& s, Steinberg::Vst::ParamID& id) { s.value4b(id); });
}
};
virtual Steinberg::Vst::IContextMenu* PLUGIN_API
createContextMenu(Steinberg::IPlugView* plugView,
const Steinberg::Vst::ParamID* paramID) override = 0;
@@ -62,8 +62,8 @@ class YaPlugFrame : public Steinberg::IPlugFrame {
inline bool supported() const { return arguments.supported; }
/**
* Message to pass through a call to `IPlugFrame::resizeView` to the
* `IPlugView` object provided by the host.
* Message to pass through a call to `IPlugFrame::resizeView(<plug_view>,
* new_size)` to the `IPlugView` object provided by the host.
*
* XXX: Since we don't support multiple `IPlugView`s right now (as it's not
* used the SDK's current version), we'll just assume that `view` is