mirror of
https://github.com/robbert-vdh/yabridge.git
synced 2026-05-09 20:29:10 +02:00
Fully implement IParameterFinder
With this we're at VST 3.0.2 support.
This commit is contained in:
@@ -90,6 +90,7 @@ using ControlRequest =
|
|||||||
YaNoteExpressionController::GetNoteExpressionInfo,
|
YaNoteExpressionController::GetNoteExpressionInfo,
|
||||||
YaNoteExpressionController::GetNoteExpressionStringByValue,
|
YaNoteExpressionController::GetNoteExpressionStringByValue,
|
||||||
YaNoteExpressionController::GetNoteExpressionValueByString,
|
YaNoteExpressionController::GetNoteExpressionValueByString,
|
||||||
|
YaParameterFinder::FindParameter,
|
||||||
YaPlugView::IsPlatformTypeSupported,
|
YaPlugView::IsPlatformTypeSupported,
|
||||||
YaPlugView::Attached,
|
YaPlugView::Attached,
|
||||||
YaPlugView::Removed,
|
YaPlugView::Removed,
|
||||||
|
|||||||
@@ -21,10 +21,13 @@ Vst3PlugViewProxy::ConstructArgs::ConstructArgs() {}
|
|||||||
Vst3PlugViewProxy::ConstructArgs::ConstructArgs(
|
Vst3PlugViewProxy::ConstructArgs::ConstructArgs(
|
||||||
Steinberg::IPtr<Steinberg::FUnknown> object,
|
Steinberg::IPtr<Steinberg::FUnknown> object,
|
||||||
size_t owner_instance_id)
|
size_t owner_instance_id)
|
||||||
: owner_instance_id(owner_instance_id), plug_view_args(object) {}
|
: owner_instance_id(owner_instance_id),
|
||||||
|
plug_view_args(object),
|
||||||
|
parameter_finder_args(object) {}
|
||||||
|
|
||||||
Vst3PlugViewProxy::Vst3PlugViewProxy(const ConstructArgs&& args)
|
Vst3PlugViewProxy::Vst3PlugViewProxy(const ConstructArgs&& args)
|
||||||
: YaPlugView(std::move(args.plug_view_args)),
|
: YaPlugView(std::move(args.plug_view_args)),
|
||||||
|
YaParameterFinder(std::move(args.parameter_finder_args)),
|
||||||
arguments(std::move(args)){FUNKNOWN_CTOR}
|
arguments(std::move(args)){FUNKNOWN_CTOR}
|
||||||
|
|
||||||
Vst3PlugViewProxy::~Vst3PlugViewProxy() {
|
Vst3PlugViewProxy::~Vst3PlugViewProxy() {
|
||||||
@@ -44,6 +47,10 @@ tresult PLUGIN_API Vst3PlugViewProxy::queryInterface(Steinberg::FIDString _iid,
|
|||||||
QUERY_INTERFACE(_iid, obj, Steinberg::IPlugView::iid,
|
QUERY_INTERFACE(_iid, obj, Steinberg::IPlugView::iid,
|
||||||
Steinberg::IPlugView)
|
Steinberg::IPlugView)
|
||||||
}
|
}
|
||||||
|
if (YaParameterFinder::supported()) {
|
||||||
|
QUERY_INTERFACE(_iid, obj, Steinberg::Vst::IParameterFinder::iid,
|
||||||
|
Steinberg::Vst::IParameterFinder)
|
||||||
|
}
|
||||||
|
|
||||||
*obj = nullptr;
|
*obj = nullptr;
|
||||||
return Steinberg::kNoInterface;
|
return Steinberg::kNoInterface;
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
* `IEditController::createView()`, and it works exactly the same as
|
* `IEditController::createView()`, and it works exactly the same as
|
||||||
* `Vst3PluginProxy`.
|
* `Vst3PluginProxy`.
|
||||||
*/
|
*/
|
||||||
class Vst3PlugViewProxy : public YaPlugView {
|
class Vst3PlugViewProxy : public YaPlugView, public YaParameterFinder {
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* These are the arguments for constructing a
|
* These are the arguments for constructing a
|
||||||
@@ -55,10 +55,13 @@ class Vst3PlugViewProxy : public YaPlugView {
|
|||||||
|
|
||||||
YaPlugView::ConstructArgs plug_view_args;
|
YaPlugView::ConstructArgs plug_view_args;
|
||||||
|
|
||||||
|
YaParameterFinder::ConstructArgs parameter_finder_args;
|
||||||
|
|
||||||
template <typename S>
|
template <typename S>
|
||||||
void serialize(S& s) {
|
void serialize(S& s) {
|
||||||
s.value8b(owner_instance_id);
|
s.value8b(owner_instance_id);
|
||||||
s.object(plug_view_args);
|
s.object(plug_view_args);
|
||||||
|
s.object(parameter_finder_args);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ class YaParameterFinder : public Steinberg::Vst::IParameterFinder {
|
|||||||
virtual tresult PLUGIN_API
|
virtual tresult PLUGIN_API
|
||||||
findParameter(int32 xPos,
|
findParameter(int32 xPos,
|
||||||
int32 yPos,
|
int32 yPos,
|
||||||
Steinberg::Vst::ParamID& resultTag /*out*/) = 0;
|
Steinberg::Vst::ParamID& resultTag /*out*/) override = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ConstructArgs arguments;
|
ConstructArgs arguments;
|
||||||
|
|||||||
@@ -157,3 +157,18 @@ Vst3PlugViewProxyImpl::checkSizeConstraint(Steinberg::ViewRect* rect) {
|
|||||||
return Steinberg::kInvalidArgument;
|
return Steinberg::kInvalidArgument;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tresult PLUGIN_API Vst3PlugViewProxyImpl::findParameter(
|
||||||
|
int32 xPos,
|
||||||
|
int32 yPos,
|
||||||
|
Steinberg::Vst::ParamID& resultTag /*out*/) {
|
||||||
|
const FindParameterResponse response =
|
||||||
|
bridge.send_message(YaParameterFinder::FindParameter{
|
||||||
|
.owner_instance_id = owner_instance_id(),
|
||||||
|
.x_pos = xPos,
|
||||||
|
.y_pos = yPos});
|
||||||
|
|
||||||
|
resultTag = response.result_tag;
|
||||||
|
|
||||||
|
return response.result;
|
||||||
|
}
|
||||||
|
|||||||
@@ -57,6 +57,12 @@ class Vst3PlugViewProxyImpl : public Vst3PlugViewProxy {
|
|||||||
tresult PLUGIN_API canResize() override;
|
tresult PLUGIN_API canResize() override;
|
||||||
tresult PLUGIN_API checkSizeConstraint(Steinberg::ViewRect* rect) override;
|
tresult PLUGIN_API checkSizeConstraint(Steinberg::ViewRect* rect) override;
|
||||||
|
|
||||||
|
// From `IParameterFinder`
|
||||||
|
tresult PLUGIN_API
|
||||||
|
findParameter(int32 xPos,
|
||||||
|
int32 yPos,
|
||||||
|
Steinberg::Vst::ParamID& resultTag /*out*/) override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The `IPlugFrame` object passed by the host passed to us in
|
* The `IPlugFrame` object passed by the host passed to us in
|
||||||
* `IPlugView::setFrame()`. When the plugin makes a callback on the
|
* `IPlugView::setFrame()`. When the plugin makes a callback on the
|
||||||
|
|||||||
@@ -449,6 +449,17 @@ void Vst3Bridge::run() {
|
|||||||
.result = result,
|
.result = result,
|
||||||
.value_normalized = value_normalized};
|
.value_normalized = value_normalized};
|
||||||
},
|
},
|
||||||
|
[&](const YaParameterFinder::FindParameter& request)
|
||||||
|
-> YaParameterFinder::FindParameter::Response {
|
||||||
|
Steinberg::Vst::ParamID result_tag;
|
||||||
|
const tresult result =
|
||||||
|
object_instances[request.owner_instance_id]
|
||||||
|
.plug_view_instance->parameter_finder->findParameter(
|
||||||
|
request.x_pos, request.y_pos, result_tag);
|
||||||
|
|
||||||
|
return YaParameterFinder::FindParameterResponse{
|
||||||
|
.result = result, .result_tag = result_tag};
|
||||||
|
},
|
||||||
[&](const YaPlugView::IsPlatformTypeSupported& request)
|
[&](const YaPlugView::IsPlatformTypeSupported& request)
|
||||||
-> YaPlugView::IsPlatformTypeSupported::Response {
|
-> YaPlugView::IsPlatformTypeSupported::Response {
|
||||||
// The host will of course want to pass an X11 window ID for the
|
// The host will of course want to pass an X11 window ID for the
|
||||||
|
|||||||
Reference in New Issue
Block a user