mirror of
https://github.com/robbert-vdh/yabridge.git
synced 2026-05-07 20:10:13 +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::GetNoteExpressionStringByValue,
|
||||
YaNoteExpressionController::GetNoteExpressionValueByString,
|
||||
YaParameterFinder::FindParameter,
|
||||
YaPlugView::IsPlatformTypeSupported,
|
||||
YaPlugView::Attached,
|
||||
YaPlugView::Removed,
|
||||
|
||||
@@ -21,10 +21,13 @@ Vst3PlugViewProxy::ConstructArgs::ConstructArgs() {}
|
||||
Vst3PlugViewProxy::ConstructArgs::ConstructArgs(
|
||||
Steinberg::IPtr<Steinberg::FUnknown> object,
|
||||
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)
|
||||
: YaPlugView(std::move(args.plug_view_args)),
|
||||
YaParameterFinder(std::move(args.parameter_finder_args)),
|
||||
arguments(std::move(args)){FUNKNOWN_CTOR}
|
||||
|
||||
Vst3PlugViewProxy::~Vst3PlugViewProxy() {
|
||||
@@ -44,6 +47,10 @@ tresult PLUGIN_API Vst3PlugViewProxy::queryInterface(Steinberg::FIDString _iid,
|
||||
QUERY_INTERFACE(_iid, obj, Steinberg::IPlugView::iid,
|
||||
Steinberg::IPlugView)
|
||||
}
|
||||
if (YaParameterFinder::supported()) {
|
||||
QUERY_INTERFACE(_iid, obj, Steinberg::Vst::IParameterFinder::iid,
|
||||
Steinberg::Vst::IParameterFinder)
|
||||
}
|
||||
|
||||
*obj = nullptr;
|
||||
return Steinberg::kNoInterface;
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
* `IEditController::createView()`, and it works exactly the same as
|
||||
* `Vst3PluginProxy`.
|
||||
*/
|
||||
class Vst3PlugViewProxy : public YaPlugView {
|
||||
class Vst3PlugViewProxy : public YaPlugView, public YaParameterFinder {
|
||||
public:
|
||||
/**
|
||||
* These are the arguments for constructing a
|
||||
@@ -55,10 +55,13 @@ class Vst3PlugViewProxy : public YaPlugView {
|
||||
|
||||
YaPlugView::ConstructArgs plug_view_args;
|
||||
|
||||
YaParameterFinder::ConstructArgs parameter_finder_args;
|
||||
|
||||
template <typename S>
|
||||
void serialize(S& s) {
|
||||
s.value8b(owner_instance_id);
|
||||
s.object(plug_view_args);
|
||||
s.object(parameter_finder_args);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ class YaParameterFinder : public Steinberg::Vst::IParameterFinder {
|
||||
virtual tresult PLUGIN_API
|
||||
findParameter(int32 xPos,
|
||||
int32 yPos,
|
||||
Steinberg::Vst::ParamID& resultTag /*out*/) = 0;
|
||||
Steinberg::Vst::ParamID& resultTag /*out*/) override = 0;
|
||||
|
||||
protected:
|
||||
ConstructArgs arguments;
|
||||
|
||||
@@ -157,3 +157,18 @@ Vst3PlugViewProxyImpl::checkSizeConstraint(Steinberg::ViewRect* rect) {
|
||||
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 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
|
||||
* `IPlugView::setFrame()`. When the plugin makes a callback on the
|
||||
|
||||
@@ -449,6 +449,17 @@ void Vst3Bridge::run() {
|
||||
.result = result,
|
||||
.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)
|
||||
-> YaPlugView::IsPlatformTypeSupported::Response {
|
||||
// The host will of course want to pass an X11 window ID for the
|
||||
|
||||
Reference in New Issue
Block a user