diff --git a/src/common/serialization/vst3.h b/src/common/serialization/vst3.h index c6010f28..b9192aa4 100644 --- a/src/common/serialization/vst3.h +++ b/src/common/serialization/vst3.h @@ -113,6 +113,7 @@ using ControlRequest = YaPlugView::SetFrame, YaPlugView::CanResize, YaPlugView::CheckSizeConstraint, + YaPlugViewContentScaleSupport::SetContentScaleFactor, YaPluginBase::Initialize, YaPluginBase::Terminate, YaPluginFactory::Construct, diff --git a/src/plugin/bridges/vst3-impls/plug-view-proxy.cpp b/src/plugin/bridges/vst3-impls/plug-view-proxy.cpp index 49cbfe8b..92c48090 100644 --- a/src/plugin/bridges/vst3-impls/plug-view-proxy.cpp +++ b/src/plugin/bridges/vst3-impls/plug-view-proxy.cpp @@ -189,9 +189,7 @@ tresult PLUGIN_API Vst3PlugViewProxyImpl::findParameter( tresult PLUGIN_API Vst3PlugViewProxyImpl::setContentScaleFactor(ScaleFactor factor) { - // TODO: Implement - bridge.logger.log( - "TODO: Implement " - "iplugviewcontentscalesupport::setContentScaleFactor()"); - return Steinberg::kNotImplemented; + return bridge.send_message( + YaPlugViewContentScaleSupport::SetContentScaleFactor{ + .owner_instance_id = owner_instance_id(), .factor = factor}); } diff --git a/src/wine-host/bridges/vst3.cpp b/src/wine-host/bridges/vst3.cpp index c36df9f9..3648a8a9 100644 --- a/src/wine-host/bridges/vst3.cpp +++ b/src/wine-host/bridges/vst3.cpp @@ -30,7 +30,9 @@ InstancePlugView::InstancePlugView() {} InstancePlugView::InstancePlugView( Steinberg::IPtr plug_view) - : plug_view(plug_view), parameter_finder(plug_view) {} + : plug_view(plug_view), + parameter_finder(plug_view), + plug_view_content_scale_support(plug_view) {} InstanceInterfaces::InstanceInterfaces() {} @@ -737,6 +739,19 @@ void Vst3Bridge::run() { return YaPlugView::CheckSizeConstraintResponse{ .result = result, .updated_rect = std::move(request.rect)}; }, + [&](YaPlugViewContentScaleSupport::SetContentScaleFactor& request) + -> YaPlugViewContentScaleSupport::SetContentScaleFactor:: + Response { + return main_context + .run_in_context([&]() { + return object_instances[request + .owner_instance_id] + .plug_view_instance + ->plug_view_content_scale_support + ->setContentScaleFactor(request.factor); + }) + .get(); + }, [&](YaPluginBase::Initialize& request) -> YaPluginBase::Initialize::Response { // We'll create a proxy object for the host context passed by diff --git a/src/wine-host/bridges/vst3.h b/src/wine-host/bridges/vst3.h index 61032d4b..c8189bf1 100644 --- a/src/wine-host/bridges/vst3.h +++ b/src/wine-host/bridges/vst3.h @@ -46,6 +46,8 @@ struct InstancePlugView { // pointers if `plug_view` did not implement the interface. Steinberg::FUnknownPtr parameter_finder; + Steinberg::FUnknownPtr + plug_view_content_scale_support; }; /**