diff options
author | falkTX <falktx@gmail.com> | 2014-04-27 01:06:25 +0100 |
---|---|---|
committer | falkTX <falktx@gmail.com> | 2014-04-27 01:06:25 +0100 |
commit | aa0a8940435443e93bbbb7235c44d6d709c468e0 (patch) | |
tree | 69b641fb0246648b89b9b6bb0355884970a80e6f | |
parent | 2ffcf3382fe9cbe25cee9ade14d3d6e90ad0ce0c (diff) |
DPF: Implement custom http://kxstudio.sf.net/ns/carla/frontendWinId
-rw-r--r-- | libs/distrho/src/DistrhoUILV2.cpp | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/libs/distrho/src/DistrhoUILV2.cpp b/libs/distrho/src/DistrhoUILV2.cpp index a816a71..7ae356b 100644 --- a/libs/distrho/src/DistrhoUILV2.cpp +++ b/libs/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), @@ -52,6 +54,26 @@ public: // 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; + } + } } // ------------------------------------------------------------------- @@ -312,9 +334,11 @@ static LV2UI_Handle lv2ui_instantiate(const LV2UI_Descriptor*, const char* uri, 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; @@ -328,7 +352,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) |