| 3876 | } |
| 3877 | |
| 3878 | static v3_plugin_view** V3_API create_view(void* self, const char* name) |
| 3879 | { |
| 3880 | d_debug("dpf_edit_controller::create_view => %p %s", self, name); |
| 3881 | |
| 3882 | #if DISTRHO_PLUGIN_HAS_UI |
| 3883 | dpf_edit_controller* const controller = *static_cast<dpf_edit_controller**>(self); |
| 3884 | |
| 3885 | d_debug("create_view has contexts %p %p", |
| 3886 | controller->hostApplicationFromFactory, controller->hostApplicationFromInitialize); |
| 3887 | |
| 3888 | // plugin must be initialized |
| 3889 | PluginVst3* const vst3 = controller->vst3; |
| 3890 | DISTRHO_SAFE_ASSERT_RETURN(vst3 != nullptr, nullptr); |
| 3891 | |
| 3892 | d_debug("dpf_edit_controller::create_view => %p %s | edit-ctrl %p, factory %p", |
| 3893 | self, name, |
| 3894 | controller->hostApplicationFromInitialize, |
| 3895 | controller->hostApplicationFromFactory); |
| 3896 | |
| 3897 | // we require a host application for message creation |
| 3898 | v3_host_application** const host = controller->hostApplicationFromInitialize != nullptr |
| 3899 | ? controller->hostApplicationFromInitialize |
| 3900 | #if !DPF_VST3_USES_SEPARATE_CONTROLLER |
| 3901 | : controller->hostApplicationFromComponent != nullptr |
| 3902 | ? controller->hostApplicationFromComponent |
| 3903 | : controller->hostApplicationFromComponentInitialize != nullptr |
| 3904 | ? controller->hostApplicationFromComponentInitialize |
| 3905 | #endif |
| 3906 | : controller->hostApplicationFromFactory; |
| 3907 | DISTRHO_SAFE_ASSERT_RETURN(host != nullptr, nullptr); |
| 3908 | |
| 3909 | v3_plugin_view** const view = dpf_plugin_view_create(host, |
| 3910 | vst3->getInstancePointer(), |
| 3911 | vst3->getSampleRate()); |
| 3912 | DISTRHO_SAFE_ASSERT_RETURN(view != nullptr, nullptr); |
| 3913 | |
| 3914 | v3_connection_point** uiconn = nullptr; |
| 3915 | if (v3_cpp_obj_query_interface(view, v3_connection_point_iid, &uiconn) == V3_OK) |
| 3916 | { |
| 3917 | d_debug("view connection query ok %p", uiconn); |
| 3918 | controller->connectionCtrl2View = new dpf_ctrl2view_connection_point(controller->vst3); |
| 3919 | |
| 3920 | v3_connection_point** const ctrlconn = (v3_connection_point**)&controller->connectionCtrl2View; |
| 3921 | |
| 3922 | v3_cpp_obj(uiconn)->connect(uiconn, ctrlconn); |
| 3923 | v3_cpp_obj(ctrlconn)->connect(ctrlconn, uiconn); |
| 3924 | } |
| 3925 | else |
| 3926 | { |
| 3927 | controller->connectionCtrl2View = nullptr; |
| 3928 | } |
| 3929 | |
| 3930 | return view; |
| 3931 | #else |
| 3932 | return nullptr; |
| 3933 | #endif |
| 3934 | |
| 3935 | // maybe unused |
nothing calls this directly
no test coverage detected