summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfalkTX <falktx@gmail.com>2014-04-27 01:06:25 +0100
committerfalkTX <falktx@gmail.com>2014-04-27 01:06:25 +0100
commitaa0a8940435443e93bbbb7235c44d6d709c468e0 (patch)
tree69b641fb0246648b89b9b6bb0355884970a80e6f
parent2ffcf3382fe9cbe25cee9ade14d3d6e90ad0ce0c (diff)
DPF: Implement custom http://kxstudio.sf.net/ns/carla/frontendWinId
-rw-r--r--libs/distrho/src/DistrhoUILV2.cpp30
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)