Implement the Wine host side of IComponentHandler3

This commit is contained in:
Robbert van der Helm
2021-01-06 22:41:45 +01:00
parent 9e3c57476c
commit b9d4bd6042
2 changed files with 26 additions and 13 deletions
@@ -18,6 +18,8 @@
#include <iostream>
#include "context-menu-proxy.h"
Vst3ComponentHandlerProxyImpl::Vst3ComponentHandlerProxyImpl(
Vst3Bridge& bridge,
Vst3ComponentHandlerProxy::ConstructArgs&& args)
@@ -93,11 +95,23 @@ tresult PLUGIN_API Vst3ComponentHandlerProxyImpl::finishGroupEdit() {
Steinberg::Vst::IContextMenu* PLUGIN_API
Vst3ComponentHandlerProxyImpl::createContextMenu(
Steinberg::IPlugView* plugView,
Steinberg::IPlugView* /*plugView*/,
const Steinberg::Vst::ParamID* paramID) {
// TODO: Implement
std::cerr << "TODO: IComponentHandler3::createContextMenu" << std::endl;
return nullptr;
// XXX: The does do not make it clear what `paramID` is, so my assumption
// that it really is a pointer to a parameter ID. I'll assume that 'the
// parameter being zero' was a typo and that they mean passign a null
// pointer.
CreateContextMenuResponse response =
bridge.send_message(YaComponentHandler3::CreateContextMenu{
.owner_instance_id = owner_instance_id(),
.param_id = (paramID ? std::optional(*paramID) : std::nullopt)});
if (response.context_menu_args) {
return new Vst3ContextMenuProxyImpl(
bridge, std::move(*response.context_menu_args));
} else {
return nullptr;
}
}
tresult PLUGIN_API Vst3ComponentHandlerProxyImpl::notifyUnitSelection(
@@ -37,19 +37,18 @@ class Vst3ContextMenuProxyImpl : public Vst3ContextMenuProxy {
void** obj) override;
// From `IContextMenu`
virtual int32 PLUGIN_API getItemCount() override = 0;
virtual tresult PLUGIN_API
int32 PLUGIN_API getItemCount() override;
tresult PLUGIN_API
getItem(int32 index,
Steinberg::Vst::IContextMenuItem& item /*out*/,
Steinberg::Vst::IContextMenuTarget** target /*out*/) override = 0;
virtual tresult PLUGIN_API
Steinberg::Vst::IContextMenuTarget** target /*out*/) override;
tresult PLUGIN_API
addItem(const Steinberg::Vst::IContextMenuItem& item,
Steinberg::Vst::IContextMenuTarget* target) override = 0;
virtual tresult PLUGIN_API
Steinberg::Vst::IContextMenuTarget* target) override;
tresult PLUGIN_API
removeItem(const Item& item,
Steinberg::Vst::IContextMenuTarget* target) override = 0;
virtual tresult PLUGIN_API popup(Steinberg::UCoord x,
Steinberg::UCoord y) override = 0;
Steinberg::Vst::IContextMenuTarget* target) override;
tresult PLUGIN_API popup(Steinberg::UCoord x, Steinberg::UCoord y) override;
private:
Vst3Bridge& bridge;