DPF

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

commit d704e0c82868ad29ca7fb226c96edb80ab6c764b
parent 17dde100a09b2522aaa2cdf19ee90d713b97b77e
Author: falkTX <falktx@falktx.com>
Date:   Thu, 23 Sep 2021 19:26:14 +0100

Continue VST3 testing, UI shows up

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

Diffstat:
MMakefile.plugins.mk | 9+++++++--
Mdistrho/src/DistrhoPluginVST3.cpp | 519+++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------
Mdistrho/src/DistrhoUIPrivateData.hpp | 2+-
Mdistrho/src/travesty/edit_controller.h | 2+-
4 files changed, 342 insertions(+), 190 deletions(-)

diff --git a/Makefile.plugins.mk b/Makefile.plugins.mk @@ -392,10 +392,15 @@ endif vst3: $(vst3) -$(vst3): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_VST3.cpp.o $(BUILD_DIR)/DistrhoUIMain_VST3.cpp.o $(DGL_LIB) +ifeq ($(HAVE_DGL),true) +$(vst3): $(OBJS_DSP) $(OBJS_UI) $(BUILD_DIR)/DistrhoPluginMain_VST3.cpp.o $(BUILD_DIR)/DistrhoUIMain_VST3.cpp.o $(DGL_LIB) +else +$(vst3): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_VST3.cpp.o +endif -@mkdir -p $(shell dirname $@) @echo "Creating VST3 plugin for $(NAME)" - $(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(SHARED) $(SYMBOLS_VST3) -o $@ + # NOTE TESTING -lpthread is for testing, remove later + $(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(SHARED) -lpthread $(SYMBOLS_VST3) -o $@ # --------------------------------------------------------------------------------------------------------------------- diff --git a/distrho/src/DistrhoPluginVST3.cpp b/distrho/src/DistrhoPluginVST3.cpp @@ -25,6 +25,9 @@ #include <atomic> #include <vector> +// TESTING awful idea dont reuse +#include "../extra/Thread.hpp" + #if DISTRHO_PLUGIN_HAS_UI && ! DISTRHO_PLUGIN_HAS_EMBED_UI # undef DISTRHO_PLUGIN_HAS_UI # define DISTRHO_PLUGIN_HAS_UI 0 @@ -35,6 +38,9 @@ # define DISTRHO_PLUGIN_HAS_UI 0 #endif +#undef DISTRHO_PLUGIN_HAS_UI +#define DISTRHO_PLUGIN_HAS_UI 1 + #if DISTRHO_PLUGIN_HAS_UI # include "DistrhoUIInternal.hpp" # include "../extra/RingBuffer.hpp" @@ -223,171 +229,6 @@ struct ParameterAndNotesHelper // -------------------------------------------------------------------------------------------------------------------- -#if DISTRHO_PLUGIN_HAS_UI - -#if ! DISTRHO_PLUGIN_WANT_MIDI_INPUT -static const sendNoteFunc sendNoteCallback = nullptr; -#endif -#if ! DISTRHO_PLUGIN_WANT_STATE -static const setStateFunc setStateCallback = nullptr; -#endif - -class UIVst3 -{ -public: - UIVst3(ParameterAndNotesHelper* const uiHelper, - PluginExporter* const plugin, - const intptr_t winId, const float scaleFactor) - : fUiHelper(uiHelper), - fPlugin(plugin), - fUI(this, winId, plugin->getSampleRate(), - editParameterCallback, - setParameterCallback, - setStateCallback, - sendNoteCallback, - setSizeCallback, - nullptr, // TODO file request - nullptr, - plugin->getInstancePointer(), - scaleFactor) -# if DISTRHO_PLUGIN_WANT_MIDI_INPUT - , fNotesRingBuffer() -# endif - { -# if DISTRHO_PLUGIN_WANT_MIDI_INPUT - fNotesRingBuffer.setRingBuffer(&uiHelper->notesRingBuffer, false); -# endif - } - - // ------------------------------------------------------------------- - - void idle() - { - for (uint32_t i=0, count = fPlugin->getParameterCount(); i < count; ++i) - { - if (fUiHelper->parameterChecks[i]) - { - fUiHelper->parameterChecks[i] = false; - fUI.parameterChanged(i, fUiHelper->parameterValues[i]); - } - } - - fUI.plugin_idle(); - } - - int16_t getWidth() const - { - return fUI.getWidth(); - } - - int16_t getHeight() const - { - return fUI.getHeight(); - } - - double getScaleFactor() const - { - return fUI.getScaleFactor(); - } - - // ------------------------------------------------------------------- - -protected: - void editParameter(const uint32_t /*index*/, const bool /*started*/) const - { - // hostCallback(started ? audioMasterBeginEdit : audioMasterEndEdit, index); - } - - void setParameterValue(const uint32_t index, const float realValue) - { - // const ParameterRanges& ranges(fPlugin->getParameterRanges(index)); - // const float perValue(ranges.getNormalizedValue(realValue)); - - fPlugin->setParameterValue(index, realValue); - // hostCallback(audioMasterAutomate, index, 0, nullptr, perValue); - } - - void setSize(uint /*width*/, uint /*height*/) - { -// # ifdef DISTRHO_OS_MAC -// const double scaleFactor = fUI.getScaleFactor(); -// width /= scaleFactor; -// height /= scaleFactor; -// # endif - // hostCallback(audioMasterSizeWindow, width, height); - } - -# if DISTRHO_PLUGIN_WANT_MIDI_INPUT - void sendNote(const uint8_t channel, const uint8_t note, const uint8_t velocity) - { - uint8_t midiData[3]; - midiData[0] = (velocity != 0 ? 0x90 : 0x80) | channel; - midiData[1] = note; - midiData[2] = velocity; - fNotesRingBuffer.writeCustomData(midiData, 3); - fNotesRingBuffer.commitWrite(); - } -# endif - -# if DISTRHO_PLUGIN_WANT_STATE - void setState(const char* const key, const char* const value) - { - fUiHelper->setStateFromUI(key, value); - } -# endif - -private: - // Vst3 stuff - ParameterAndNotesHelper* const fUiHelper; - PluginExporter* const fPlugin; - - // Plugin UI - UIExporter fUI; -# if DISTRHO_PLUGIN_WANT_MIDI_INPUT - RingBufferControl<SmallStackBuffer> fNotesRingBuffer; -# endif - - // ------------------------------------------------------------------- - // Callbacks - - #define handlePtr ((UIVst3*)ptr) - - static void editParameterCallback(void* ptr, uint32_t index, bool started) - { - handlePtr->editParameter(index, started); - } - - static void setParameterCallback(void* ptr, uint32_t rindex, float value) - { - handlePtr->setParameterValue(rindex, value); - } - - static void setSizeCallback(void* ptr, uint width, uint height) - { - handlePtr->setSize(width, height); - } - -# if DISTRHO_PLUGIN_WANT_MIDI_INPUT - static void sendNoteCallback(void* ptr, uint8_t channel, uint8_t note, uint8_t velocity) - { - handlePtr->sendNote(channel, note, velocity); - } -# endif - -# if DISTRHO_PLUGIN_WANT_STATE - static void setStateCallback(void* ptr, const char* key, const char* value) - { - handlePtr->setState(key, value); - } -# endif - - #undef handlePtr -}; - -#endif // DISTRHO_PLUGIN_HAS_UI - -// -------------------------------------------------------------------------------------------------------------------- - class PluginVst3 { /* buses: we provide 1 for the main audio (if there is any) plus 1 for each sidechain or cv port. @@ -475,6 +316,16 @@ public: #endif } + void* getInstancePointer() const noexcept + { + return fPlugin.getInstancePointer(); + } + + double getSampleRate() const noexcept + { + return fPlugin.getSampleRate(); + } + // ---------------------------------------------------------------------------------------------------------------- // v3_component interface calls @@ -726,9 +577,14 @@ public: void setProcessing(const bool processing) { if (processing) - fPlugin.activate(); + { + if (! fPlugin.isActive()) + fPlugin.activate(); + } else + { fPlugin.deactivate(); + } } void process(v3_process_data* const data) @@ -776,6 +632,202 @@ private: }; // -------------------------------------------------------------------------------------------------------------------- + +#if DISTRHO_PLUGIN_HAS_UI + +#if ! DISTRHO_PLUGIN_WANT_MIDI_INPUT +static const sendNoteFunc sendNoteCallback = nullptr; +#endif +#if ! DISTRHO_PLUGIN_WANT_STATE +static const setStateFunc setStateCallback = nullptr; +#endif + +class UIVst3 : public Thread +{ +public: + UIVst3(ScopedPointer<PluginVst3>& v, v3_plugin_frame* const f, const intptr_t winId, const float scaleFactor) + : vst3(v), + frame(f), + fUI(this, winId, v->getSampleRate(), + editParameterCallback, + setParameterCallback, + setStateCallback, + sendNoteCallback, + setSizeCallback, + nullptr, // TODO file request + nullptr, + v->getInstancePointer(), + scaleFactor) +# if DISTRHO_PLUGIN_WANT_MIDI_INPUT + , fNotesRingBuffer() +# endif + { +# if DISTRHO_PLUGIN_WANT_MIDI_INPUT + fNotesRingBuffer.setRingBuffer(&uiHelper->notesRingBuffer, false); +# endif + // TESTING awful idea dont reuse + startThread(); + } + + ~UIVst3() override + { + stopThread(5000); + } + + // ------------------------------------------------------------------- + + // TESTING awful idea dont reuse + void run() override + { + while (! shouldThreadExit()) + { + idle(); + d_msleep(50); + } + } + + void idle() + { + /* + for (uint32_t i=0, count = fPlugin->getParameterCount(); i < count; ++i) + { + if (fUiHelper->parameterChecks[i]) + { + fUiHelper->parameterChecks[i] = false; + fUI.parameterChanged(i, fUiHelper->parameterValues[i]); + } + } + */ + + fUI.plugin_idle(); + } + + int16_t getWidth() const + { + return fUI.getWidth(); + } + + int16_t getHeight() const + { + return fUI.getHeight(); + } + + double getScaleFactor() const + { + return fUI.getScaleFactor(); + } + + // ---------------------------------------------------------------------------------------------------------------- + // v3_plugin_view interface calls + + void setFrame(v3_plugin_frame* const f) noexcept + { + frame = f; + } + + // ---------------------------------------------------------------------------------------------------------------- + +protected: + void editParameter(const uint32_t /*index*/, const bool /*started*/) const + { + // hostCallback(started ? audioMasterBeginEdit : audioMasterEndEdit, index); + } + + void setParameterValue(const uint32_t index, const float realValue) + { + // const ParameterRanges& ranges(fPlugin->getParameterRanges(index)); + // const float perValue(ranges.getNormalizedValue(realValue)); + + // fPlugin->setParameterValue(index, realValue); + // hostCallback(audioMasterAutomate, index, 0, nullptr, perValue); + } + + void setSize(uint width, uint height) + { +# ifdef DISTRHO_OS_MAC + const double scaleFactor = fUI.getScaleFactor(); + width /= scaleFactor; + height /= scaleFactor; +# endif + if (frame == nullptr) + return; + + v3_view_rect rect = {}; + rect.right = width; + rect.bottom = height; + // frame->resize_view(nullptr, uivst3, &rect); + } + +# if DISTRHO_PLUGIN_WANT_MIDI_INPUT + void sendNote(const uint8_t channel, const uint8_t note, const uint8_t velocity) + { + uint8_t midiData[3]; + midiData[0] = (velocity != 0 ? 0x90 : 0x80) | channel; + midiData[1] = note; + midiData[2] = velocity; + fNotesRingBuffer.writeCustomData(midiData, 3); + fNotesRingBuffer.commitWrite(); + } +# endif + +# if DISTRHO_PLUGIN_WANT_STATE + void setState(const char* const key, const char* const value) + { + // fUiHelper->setStateFromUI(key, value); + } +# endif + +private: + // VST3 stuff + ScopedPointer<PluginVst3>& vst3; + v3_plugin_frame* frame; + + // Plugin UI + UIExporter fUI; +# if DISTRHO_PLUGIN_WANT_MIDI_INPUT + RingBufferControl<SmallStackBuffer> fNotesRingBuffer; +# endif + + // ------------------------------------------------------------------- + // Callbacks + + #define handlePtr ((UIVst3*)ptr) + + static void editParameterCallback(void* ptr, uint32_t index, bool started) + { + handlePtr->editParameter(index, started); + } + + static void setParameterCallback(void* ptr, uint32_t rindex, float value) + { + handlePtr->setParameterValue(rindex, value); + } + + static void setSizeCallback(void* ptr, uint width, uint height) + { + handlePtr->setSize(width, height); + } + +# if DISTRHO_PLUGIN_WANT_MIDI_INPUT + static void sendNoteCallback(void* ptr, uint8_t channel, uint8_t note, uint8_t velocity) + { + handlePtr->sendNote(channel, note, velocity); + } +# endif + +# if DISTRHO_PLUGIN_WANT_STATE + static void setStateCallback(void* ptr, const char* key, const char* value) + { + handlePtr->setState(key, value); + } +# endif + + #undef handlePtr +}; + +#endif // DISTRHO_PLUGIN_HAS_UI + +// -------------------------------------------------------------------------------------------------------------------- // Dummy plugin to get data from static ScopedPointer<PluginExporter> gPluginInfo; @@ -789,9 +841,12 @@ struct v3_plugin_view_cpp : v3_funknown { }; struct dpf_plugin_view : v3_plugin_view_cpp { - ScopedPointer<UIVst3>& vst3; + ScopedPointer<PluginVst3>& vst3; + ScopedPointer<UIVst3> uivst3; + double lastScaleFactor = 0.0; + v3_plugin_frame* hostframe = nullptr; - dpf_plugin_view(ScopedPointer<UIVst3>& v) + dpf_plugin_view(ScopedPointer<PluginVst3>& v) : vst3(v) { static const uint8_t* kSupportedFactories[] = { @@ -839,73 +894,157 @@ struct dpf_plugin_view : v3_plugin_view_cpp { view.is_platform_type_supported = []V3_API(void* self, const char* platform_type) -> v3_result { d_stdout("dpf_plugin_view::is_platform_type_supported => %s | %p %s", __PRETTY_FUNCTION__ + 41, self, platform_type); - return V3_OK; + const char* const supported[] = { +#ifdef _WIN32 + V3_VIEW_PLATFORM_TYPE_HWND, +#elif defined(__APPLE__) + V3_VIEW_PLATFORM_TYPE_NSVIEW, +#else + V3_VIEW_PLATFORM_TYPE_X11, +#endif + }; + + for (size_t i=0; i<sizeof(supported)/sizeof(supported[0]); ++i) + { + if (std::strcmp(supported[i], platform_type)) + return V3_OK; + } + + return V3_NOT_IMPLEMENTED; }; view.attached = []V3_API(void* self, void* parent, const char* platform_type) -> v3_result { d_stdout("dpf_plugin_view::attached => %s | %p %p %s", __PRETTY_FUNCTION__ + 41, self, parent, platform_type); + dpf_plugin_view* const view = *(dpf_plugin_view**)self; + DISTRHO_SAFE_ASSERT_RETURN(view != nullptr, V3_NOT_INITIALISED); + DISTRHO_SAFE_ASSERT_RETURN(view->uivst3 == nullptr, V3_INVALID_ARG); + view->uivst3 = new UIVst3(view->vst3, view->hostframe, (uintptr_t)parent, view->lastScaleFactor); + + // TODO send parameter values + view->uivst3->idle(); return V3_OK; }; view.removed = []V3_API(void* self) -> v3_result { d_stdout("dpf_plugin_view::removed => %s | %p", __PRETTY_FUNCTION__ + 41, self); + dpf_plugin_view* const view = *(dpf_plugin_view**)self; + DISTRHO_SAFE_ASSERT_RETURN(view != nullptr, V3_NOT_INITIALISED); + DISTRHO_SAFE_ASSERT_RETURN(view->uivst3 != nullptr, V3_INVALID_ARG); + view->uivst3 = nullptr; return V3_OK; }; view.on_wheel = []V3_API(void* self, float distance) -> v3_result { d_stdout("dpf_plugin_view::on_wheel => %s | %p %f", __PRETTY_FUNCTION__ + 41, self, distance); - return V3_OK; + dpf_plugin_view* const view = *(dpf_plugin_view**)self; + DISTRHO_SAFE_ASSERT_RETURN(view != nullptr, V3_NOT_INITIALISED); + DISTRHO_SAFE_ASSERT_RETURN(view->uivst3 != nullptr, V3_NOT_INITIALISED); + return V3_NOT_IMPLEMENTED; }; view.on_key_down = []V3_API(void* self, int16_t key_char, int16_t key_code, int16_t modifiers) -> v3_result { d_stdout("dpf_plugin_view::on_key_down => %s | %p %i %i %i", __PRETTY_FUNCTION__ + 41, self, key_char, key_code, modifiers); - return V3_OK; + dpf_plugin_view* const view = *(dpf_plugin_view**)self; + DISTRHO_SAFE_ASSERT_RETURN(view != nullptr, V3_NOT_INITIALISED); + DISTRHO_SAFE_ASSERT_RETURN(view->uivst3 != nullptr, V3_NOT_INITIALISED); + return V3_NOT_IMPLEMENTED; }; view.on_key_up = []V3_API(void* self, int16_t key_char, int16_t key_code, int16_t modifiers) -> v3_result { d_stdout("dpf_plugin_view::on_key_up => %s | %p %i %i %i", __PRETTY_FUNCTION__ + 41, self, key_char, key_code, modifiers); - return V3_OK; + dpf_plugin_view* const view = *(dpf_plugin_view**)self; + DISTRHO_SAFE_ASSERT_RETURN(view != nullptr, V3_NOT_INITIALISED); + DISTRHO_SAFE_ASSERT_RETURN(view->uivst3 != nullptr, V3_NOT_INITIALISED); + return V3_NOT_IMPLEMENTED; }; - view.get_size = []V3_API(void* self, v3_view_rect*) -> v3_result + view.get_size = []V3_API(void* self, v3_view_rect* rect) -> v3_result { d_stdout("dpf_plugin_view::get_size => %s | %p", __PRETTY_FUNCTION__ + 41, self); - return V3_OK; + dpf_plugin_view* const view = *(dpf_plugin_view**)self; + DISTRHO_SAFE_ASSERT_RETURN(view != nullptr, V3_NOT_INITIALISED); + + std::memset(rect, 0, sizeof(v3_view_rect)); + + if (view->uivst3 != nullptr) + { + rect->right = view->uivst3->getWidth(); + rect->bottom = view->uivst3->getHeight(); +# ifdef DISTRHO_OS_MAC + const double scaleFactor = view->uivst3->getScaleFactor(); + rect->right /= scaleFactor; + rect->bottom /= scaleFactor; +# endif + } + else + { + UIExporter tmpUI(nullptr, 0, view->vst3->getSampleRate(), + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + view->vst3->getInstancePointer(), view->lastScaleFactor); + rect->right = tmpUI.getWidth(); + rect->bottom = tmpUI.getHeight(); +# ifdef DISTRHO_OS_MAC + const double scaleFactor = tmpUI.getScaleFactor(); + rect->right /= scaleFactor; + rect->bottom /= scaleFactor; +# endif + tmpUI.quit(); + } + + return V3_NOT_IMPLEMENTED; }; view.set_size = []V3_API(void* self, v3_view_rect*) -> v3_result { d_stdout("dpf_plugin_view::set_size => %s | %p", __PRETTY_FUNCTION__ + 41, self); - return V3_OK; + dpf_plugin_view* const view = *(dpf_plugin_view**)self; + DISTRHO_SAFE_ASSERT_RETURN(view != nullptr, V3_NOT_INITIALISED); + DISTRHO_SAFE_ASSERT_RETURN(view->uivst3 != nullptr, V3_NOT_INITIALISED); + return V3_NOT_IMPLEMENTED; }; view.on_focus = []V3_API(void* self, v3_bool state) -> v3_result { d_stdout("dpf_plugin_view::on_focus => %s | %p %u", __PRETTY_FUNCTION__ + 41, self, state); - return V3_OK; + dpf_plugin_view* const view = *(dpf_plugin_view**)self; + DISTRHO_SAFE_ASSERT_RETURN(view != nullptr, V3_NOT_INITIALISED); + DISTRHO_SAFE_ASSERT_RETURN(view->uivst3 != nullptr, V3_NOT_INITIALISED); + return V3_NOT_IMPLEMENTED; }; - view.set_frame = []V3_API(void* self, v3_plugin_frame*) -> v3_result + view.set_frame = []V3_API(void* self, v3_plugin_frame* frame) -> v3_result { d_stdout("dpf_plugin_view::set_frame => %s | %p", __PRETTY_FUNCTION__ + 41, self); + dpf_plugin_view* const view = *(dpf_plugin_view**)self; + DISTRHO_SAFE_ASSERT_RETURN(view != nullptr, V3_NOT_INITIALISED); + + view->hostframe = frame; + + if (view->uivst3 != nullptr) + view->uivst3->setFrame(frame); + return V3_OK; }; view.can_resize = []V3_API(void* self) -> v3_result { d_stdout("dpf_plugin_view::can_resize => %s | %p", __PRETTY_FUNCTION__ + 41, self); +#if DISTRHO_UI_USER_RESIZABLE return V3_OK; +#else + return V3_NOT_IMPLEMENTED; +#endif }; view.check_size_constraint = []V3_API(void* self, v3_view_rect*) -> v3_result { d_stdout("dpf_plugin_view::check_size_constraint => %s | %p", __PRETTY_FUNCTION__ + 41, self); - return V3_OK; + return V3_NOT_IMPLEMENTED; }; } }; @@ -920,6 +1059,7 @@ struct v3_edit_controller_cpp : v3_funknown { }; struct dpf_edit_controller : v3_edit_controller_cpp { + ScopedPointer<dpf_plugin_view> view; ScopedPointer<PluginVst3>& vst3; dpf_edit_controller(ScopedPointer<PluginVst3>& v) @@ -1075,7 +1215,7 @@ struct dpf_edit_controller : v3_edit_controller_cpp { { d_stdout("dpf_edit_controller::set_parameter_normalised => %s | %p %f", __PRETTY_FUNCTION__ + 97, self, normalised); dpf_edit_controller* const controller = *(dpf_edit_controller**)self; - DISTRHO_SAFE_ASSERT_RETURN(controller != nullptr, V3_INVALID_ARG); + DISTRHO_SAFE_ASSERT_RETURN(controller != nullptr, V3_NOT_INITIALISED); PluginVst3* const vst3 = controller->vst3.get(); DISTRHO_SAFE_ASSERT_RETURN(vst3 != nullptr, V3_NOT_INITIALISED); @@ -1091,10 +1231,16 @@ struct dpf_edit_controller : v3_edit_controller_cpp { return V3_NOT_IMPLEMENTED; }; - controller.create_view = []V3_API(void* self, const char* name) -> v3_plug_view** + controller.create_view = []V3_API(void* self, const char* name) -> v3_plugin_view** { d_stdout("dpf_edit_controller::create_view => %s | %p %s", __PRETTY_FUNCTION__ + 97, self, name); - return nullptr; + dpf_edit_controller* const controller = *(dpf_edit_controller**)self; + DISTRHO_SAFE_ASSERT_RETURN(controller != nullptr, nullptr); + + if (controller->view == nullptr) + controller->view = new dpf_plugin_view(controller->vst3); + + return (v3_plugin_view**)&controller->view; }; } }; @@ -1211,9 +1357,11 @@ struct dpf_audio_processor : v3_audio_processor_cpp { processor.process = []V3_API(void* self, v3_process_data* data) -> v3_result { - d_stdout("dpf_audio_processor::process => %s | %p", __PRETTY_FUNCTION__ + 97, self); + // NOTE runs during RT + // d_stdout("dpf_audio_processor::process => %s | %p", __PRETTY_FUNCTION__ + 97, self); dpf_audio_processor* const processor = *(dpf_audio_processor**)self; DISTRHO_SAFE_ASSERT_RETURN(processor != nullptr, V3_NOT_INITIALISED); + DISTRHO_SAFE_ASSERT_RETURN(data->symbolic_sample_size == V3_SAMPLE_32, V3_INVALID_ARG); processor->vst3->process(data); return V3_OK; }; @@ -1345,13 +1493,13 @@ struct dpf_component : v3_component_cpp { comp.set_io_mode = []V3_API(void* self, int32_t io_mode) -> v3_result { d_stdout("dpf_component::set_io_mode => %s | %p %i", __PRETTY_FUNCTION__ + 41, self, io_mode); - return V3_OK; + return V3_NOT_IMPLEMENTED; }; comp.get_bus_count = []V3_API(void* self, int32_t media_type, int32_t bus_direction) -> int32_t { // NOTE runs during RT - d_stdout("dpf_component::get_bus_count => %s | %p %i %i", __PRETTY_FUNCTION__ + 41, self, media_type, bus_direction); + // d_stdout("dpf_component::get_bus_count => %s | %p %i %i", __PRETTY_FUNCTION__ + 41, self, media_type, bus_direction); switch (media_type) { @@ -1438,14 +1586,13 @@ struct dpf_component : v3_component_cpp { int32_t bus_idx, v3_bool state) -> v3_result { d_stdout("dpf_component::activate_bus => %s | %p %i %i %i %u", __PRETTY_FUNCTION__ + 41, self, media_type, bus_direction, bus_idx, state); - return V3_OK; + return V3_NOT_IMPLEMENTED; }; comp.set_active = []V3_API(void* self, v3_bool state) -> v3_result { d_stdout("dpf_component::set_active => %s | %p %u", __PRETTY_FUNCTION__ + 41, self, state); dpf_component* const component = *(dpf_component**)self; - component->vst3->setActive(state); return V3_OK; }; diff --git a/distrho/src/DistrhoUIPrivateData.hpp b/distrho/src/DistrhoUIPrivateData.hpp @@ -33,7 +33,7 @@ # define DISTRHO_UI_IS_STANDALONE 0 #endif -#if defined(DISTRHO_PLUGIN_TARGET_VST2) || defined(DISTRHO_PLUGIN_TARGET_VST3) +#if defined(DISTRHO_PLUGIN_TARGET_VST2) # undef DISTRHO_UI_USER_RESIZABLE # define DISTRHO_UI_USER_RESIZABLE 0 #endif diff --git a/distrho/src/travesty/edit_controller.h b/distrho/src/travesty/edit_controller.h @@ -103,7 +103,7 @@ struct v3_edit_controller { V3_API v3_result (*set_component_handler) (void *self, struct v3_component_handler **); - V3_API struct v3_plug_view **(*create_view) + V3_API struct v3_plugin_view **(*create_view) (void *self, const char *name); };