DPF

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

commit ed2cecad4244c19fb74a3e46b3f5872b38a3e901
parent 1e36926d65ee2f99aff64d08d9e0687bfb36d8a8
Author: falkTX <falktx@gmail.com>
Date:   Tue, 29 Apr 2014 23:33:47 +0100

Import new distrho code

Diffstat:
Mdistrho/src/DistrhoPluginLV2export.cpp | 8+++++---
Mdistrho/src/DistrhoPluginVST.cpp | 3++-
Mdistrho/src/DistrhoUIDSSI.cpp | 5+++++
Mdistrho/src/DistrhoUILV2.cpp | 49++++++++++++++++++++++++++++++++++++-------------
4 files changed, 48 insertions(+), 17 deletions(-)

diff --git a/distrho/src/DistrhoPluginLV2export.cpp b/distrho/src/DistrhoPluginLV2export.cpp @@ -106,13 +106,15 @@ void lv2_generate_ttl(const char* const basename) manifestString += " ui:showInterface ;\n"; # endif manifestString += " lv2:optionalFeature ui:noUserResize ,\n"; + manifestString += " ui:resize ,\n"; manifestString += " ui:touch ;\n"; - manifestString += " lv2:requiredFeature ui:resize ,\n"; # if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS - manifestString += " <" LV2_DATA_ACCESS_URI "> ,\n"; + manifestString += " lv2:requiredFeature <" LV2_DATA_ACCESS_URI "> ,\n"; manifestString += " <" LV2_INSTANCE_ACCESS_URI "> ,\n"; -# endif manifestString += " <" LV2_OPTIONS__options "> ,\n"; +# else + manifestString += " lv2:requiredFeature <" LV2_OPTIONS__options "> ,\n"; +# endif manifestString += " <" LV2_URID__map "> .\n"; #endif diff --git a/distrho/src/DistrhoPluginVST.cpp b/distrho/src/DistrhoPluginVST.cpp @@ -974,7 +974,8 @@ const AEffect* VSTPluginMain(audioMasterCallback audioMaster) effect->magic = kEffectMagic; effect->uniqueID = plugin->getUniqueId(); #ifdef VESTIGE_HEADER - *(int32_t*)&effect->unknown1 = plugin->getVersion(); + int32_t* const version = (int32_t*)&effect->unknown1; + *version = plugin->getVersion(); #else effect->version = plugin->getVersion(); #endif diff --git a/distrho/src/DistrhoUIDSSI.cpp b/distrho/src/DistrhoUIDSSI.cpp @@ -248,6 +248,11 @@ int osc_debug_handler(const char* path, const char*, lo_arg**, int, lo_message, { d_debug("osc_debug_handler(\"%s\")", path); return 0; + +#ifndef DEBUG + // unused + (void)path; +#endif } void osc_error_handler(int num, const char* msg, const char* path) diff --git a/distrho/src/DistrhoUILV2.cpp b/distrho/src/DistrhoUILV2.cpp @@ -34,7 +34,9 @@ START_NAMESPACE_DISTRHO class UiLv2 { public: - UiLv2(const intptr_t winId, const LV2_URID_Map* const uridMap, const LV2UI_Resize* const uiResz, const LV2UI_Touch* uiTouch, const LV2UI_Controller controller, const LV2UI_Write_Function writeFunc, void* const dspPtr) + UiLv2(const intptr_t winId, + const LV2_Options_Option* options, const LV2_URID_Map* const uridMap, const LV2UI_Resize* const uiResz, const LV2UI_Touch* uiTouch, + const LV2UI_Controller controller, const LV2UI_Write_Function writeFunc, void* const dspPtr) : fUI(this, winId, editParameterCallback, setParameterCallback, setStateCallback, sendNoteCallback, uiResizeCallback, dspPtr), fUridMap(uridMap), fUiResize(uiResz), @@ -45,12 +47,35 @@ public: fKeyValueURID(uridMap->map(uridMap->handle, "urn:distrho:keyValueState")), fWinIdWasNull(winId == 0) { - fUiResize->ui_resize(fUiResize->handle, fUI.getWidth(), fUI.getHeight()); + if (winId == 0) + fUI.setTitle(fUI.getName()); + else if (fUiResize != nullptr) + fUiResize->ui_resize(fUiResize->handle, fUI.getWidth(), fUI.getHeight()); #if DISTRHO_PLUGIN_WANT_STATE // tell the DSP we're ready to receive msgs setState("__dpf_ui_data__", ""); #endif + + if (winId != 0) + return; + + const LV2_URID uridFrontendWinId(uridMap->map(uridMap->handle, "http://kxstudio.sf.net/ns/carla/frontendWinId")); + + for (int i=0; options[i].key != 0; ++i) + { + if (options[i].key == uridFrontendWinId) + { + if (options[i].type == uridMap->map(uridMap->handle, LV2_ATOM__Long)) + { + if (const int64_t frontendWinId = *(const int64_t*)options[i].value) + fUI.setTransientWinId(static_cast<intptr_t>(frontendWinId)); + } + else + d_stderr("Host provides frontendWinId but has wrong value type"); + break; + } + } } // ------------------------------------------------------------------- @@ -171,7 +196,9 @@ protected: void uiResize(const uint width, const uint height) { fUI.setSize(width, height); - fUiResize->ui_resize(fUiResize->handle, width, height); + + if (fUiResize != nullptr && ! fWinIdWasNull) + fUiResize->ui_resize(fUiResize->handle, width, height); } private: @@ -282,15 +309,9 @@ static LV2UI_Handle lv2ui_instantiate(const LV2UI_Descriptor*, const char* uri, return nullptr; } - if (uiResize == nullptr) - { - d_stderr("UI Resize feature missing, cannot continue!"); - return nullptr; - } - if (parentId == nullptr) { - d_stdout("Parent Window Id missing, host should use be ui:showInterface..."); + d_stdout("Parent Window Id missing, host should be using ui:showInterface..."); } #if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS @@ -313,11 +334,13 @@ static LV2UI_Handle lv2ui_instantiate(const LV2UI_Descriptor*, const char* uri, *widget = parentId; - const intptr_t winId(*((intptr_t*)&parentId)); + const intptr_t winId((intptr_t)parentId); + + const LV2_URID uridSampleRate(uridMap->map(uridMap->handle, LV2_CORE__sampleRate)); for (int i=0; options[i].key != 0; ++i) { - if (options[i].key == uridMap->map(uridMap->handle, LV2_CORE__sampleRate)) + if (options[i].key == uridSampleRate) { if (options[i].type == uridMap->map(uridMap->handle, LV2_ATOM__Double)) d_lastUiSampleRate = *(const double*)options[i].value; @@ -331,7 +354,7 @@ static LV2UI_Handle lv2ui_instantiate(const LV2UI_Descriptor*, const char* uri, if (d_lastUiSampleRate == 0.0) d_lastUiSampleRate = 44100.0; - return new UiLv2(winId, uridMap, uiResize, uiTouch, controller, writeFunction, instance); + return new UiLv2(winId, options, uridMap, uiResize, uiTouch, controller, writeFunction, instance); } #define uiPtr ((UiLv2*)ui)