DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit 57a430e9d5cf79beb28d4e47c5bc2913ddb519c7
parent b3c3cd6448ae25c373ac0dc494de90a9cb481a2f
Author: falkTX <falktx@falktx.com>
Date:   Sat, 25 Sep 2021 19:10:38 +0100

Experiments with C++98 compat

Signed-off-by: falkTX <falktx@falktx.com>

Diffstat:
Mdistrho/src/DistrhoPluginVST3.cpp | 4++--
Mdistrho/src/DistrhoUIVST3.cpp | 84+++++++++++++++++++++++++++++++++++++++++--------------------------------------
Mdistrho/src/travesty/view.h | 4++--
3 files changed, 48 insertions(+), 44 deletions(-)

diff --git a/distrho/src/DistrhoPluginVST3.cpp b/distrho/src/DistrhoPluginVST3.cpp @@ -121,8 +121,8 @@ const char* tuid2str(const v3_tuid iid) return "{v3_plugin_view}"; if (v3_tuid_match(iid, v3_plugin_frame_iid)) return "{v3_plugin_frame}"; - if (v3_tuid_match(iid, v3_plugin_view_content_scale_steinberg_iid)) - return "{v3_plugin_view_content_scale_steinberg}"; + if (v3_tuid_match(iid, v3_plugin_view_content_scale_iid)) + return "{v3_plugin_view_content_scale_iid}"; if (v3_tuid_match(iid, v3_plugin_view_parameter_finder_iid)) return "{v3_plugin_view_parameter_finder}"; if (std::memcmp(iid, dpf_tuid_class, sizeof(dpf_tuid)) == 0) diff --git a/distrho/src/DistrhoUIVST3.cpp b/distrho/src/DistrhoUIVST3.cpp @@ -310,65 +310,70 @@ private: // -------------------------------------------------------------------------------------------------------------------- // dpf_plugin_view_content_scale -struct v3_plugin_view_content_scale_steinberg_cpp : v3_funknown { - v3_plugin_view_content_scale_steinberg scale; +struct v3_plugin_view_content_scale_cpp : v3_funknown { + v3_plugin_view_content_scale scale; }; -struct dpf_plugin_view_scale : v3_plugin_view_content_scale_steinberg_cpp { +struct dpf_plugin_view_content_scale : v3_plugin_view_content_scale_cpp { ScopedPointer<UIVst3>& uivst3; // cached values float scaleFactor; - dpf_plugin_view_scale(ScopedPointer<UIVst3>& v) + dpf_plugin_view_content_scale(ScopedPointer<UIVst3>& v) : uivst3(v), scaleFactor(0.0f) { + query_interface = query_interface_fn; + ref = ref_fn; + unref = unref_fn; + scale.set_content_scale_factor = set_content_scale_factor_fn; + } + + // ---------------------------------------------------------------------------------------------------------------- + // v3_funknown + + static V3_API v3_result query_interface_fn(void* self, const v3_tuid iid, void** iface) + { + d_stdout("dpf_plugin_view_content_scale::query_interface => %p %s %p", self, tuid2str(iid), iface); + *iface = NULL; + DISTRHO_SAFE_ASSERT_RETURN(self != nullptr, V3_NO_INTERFACE); + static const uint8_t* kSupportedInterfaces[] = { v3_funknown_iid, - v3_plugin_view_content_scale_steinberg_iid + v3_plugin_view_content_scale_iid }; - // ------------------------------------------------------------------------------------------------------------ - // v3_funknown - - query_interface = []V3_API(void* self, const v3_tuid iid, void** iface) -> v3_result + for (const uint8_t* interface_iid : kSupportedInterfaces) { - d_stdout("dpf_plugin_view_scale::query_interface => %p %s %p", self, tuid2str(iid), iface); - *iface = NULL; - DISTRHO_SAFE_ASSERT_RETURN(self != nullptr, V3_NO_INTERFACE); - - for (const uint8_t* interface_iid : kSupportedInterfaces) + if (v3_tuid_match(interface_iid, iid)) { - if (v3_tuid_match(interface_iid, iid)) - { - *iface = self; - return V3_OK; - } + *iface = self; + return V3_OK; } + } - return V3_NO_INTERFACE; - }; + return V3_NO_INTERFACE; + } - // there is only a single instance of this, so we don't have to care here - ref = []V3_API(void*) -> uint32_t { return 1; }; - unref = []V3_API(void*) -> uint32_t { return 0; }; + // there is only a single instance of this, so we don't have to care here + static V3_API uint32_t ref_fn(void*) { return 1; }; + static V3_API uint32_t unref_fn(void*) { return 0; }; - // ------------------------------------------------------------------------------------------------------------ - // v3_plugin_view_content_scale_steinberg + // ---------------------------------------------------------------------------------------------------------------- + // v3_plugin_view_content_scale_steinberg - scale.set_content_scale_factor = []V3_API(void* self, float factor) -> v3_result - { - d_stdout("dpf_plugin_view::set_content_scale_factor => %p %f", self, factor); - dpf_plugin_view_scale* const scale = *(dpf_plugin_view_scale**)self; - DISTRHO_SAFE_ASSERT_RETURN(scale != nullptr, V3_NOT_INITIALISED); + static V3_API v3_result set_content_scale_factor_fn(void* self, float factor) + { + d_stdout("dpf_plugin_view::set_content_scale_factor => %p %f", self, factor); + dpf_plugin_view_content_scale* const scale = *(dpf_plugin_view_content_scale**)self; + DISTRHO_SAFE_ASSERT_RETURN(scale != nullptr, V3_NOT_INITIALISED); - scale->scaleFactor = factor; + scale->scaleFactor = factor; - if (UIVst3* const uivst3 = scale->uivst3) - return uivst3->setContentScaleFactor(factor); + if (UIVst3* const uivst3 = scale->uivst3) + return uivst3->setContentScaleFactor(factor); - return V3_NOT_INITIALISED; - }; + return V3_NOT_INITIALISED; } }; @@ -382,14 +387,13 @@ struct v3_plugin_view_cpp : v3_funknown { struct dpf_plugin_view : v3_plugin_view_cpp { std::atomic<int> refcounter; ScopedPointer<dpf_plugin_view>* self; - ScopedPointer<dpf_plugin_view_scale> scale; + ScopedPointer<dpf_plugin_view_content_scale> scale; ScopedPointer<UIVst3> uivst3; // cached values v3_edit_controller** const controller; v3_component_handler** const handler; void* const instancePointer; double sampleRate; -// v3_component_handler_cpp** handler = nullptr; v3_plugin_frame** frame = nullptr; dpf_plugin_view(ScopedPointer<dpf_plugin_view>* selfptr, @@ -440,10 +444,10 @@ struct dpf_plugin_view : v3_plugin_view_cpp { dpf_plugin_view* const view = *(dpf_plugin_view**)self; DISTRHO_SAFE_ASSERT_RETURN(view != nullptr, V3_NO_INTERFACE); - if (v3_tuid_match(v3_plugin_view_content_scale_steinberg_iid, iid)) + if (v3_tuid_match(v3_plugin_view_content_scale_iid, iid)) { if (view->scale == nullptr) - view->scale = new dpf_plugin_view_scale(view->uivst3); + view->scale = new dpf_plugin_view_content_scale(view->uivst3); *iface = &view->scale; return V3_OK; } diff --git a/distrho/src/travesty/view.h b/distrho/src/travesty/view.h @@ -85,13 +85,13 @@ static constexpr const v3_tuid v3_plugin_frame_iid = * (same IID/iface as presonus view scaling) */ -struct v3_plugin_view_content_scale_steinberg { +struct v3_plugin_view_content_scale { struct v3_funknown; V3_API v3_result (*set_content_scale_factor)(void* self, float factor); }; -static constexpr const v3_tuid v3_plugin_view_content_scale_steinberg_iid = +static constexpr const v3_tuid v3_plugin_view_content_scale_iid = V3_ID(0x65ED9690, 0x8AC44525, 0x8AADEF7A, 0x72EA703F); /**