DPF

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

commit f726245325c7fcfcdffb66e1c3a89bb07da96d06
parent ba4e24046493f754dcf32386102a8f6e50e7268c
Author: falkTX <falktx@gmail.com>
Date:   Sat, 12 Mar 2016 18:09:31 +0100

Pass LV2 UI bundle path to external UIs

Diffstat:
Mdistrho/DistrhoUI.hpp | 7+++++++
Mdistrho/src/DistrhoUI.cpp | 14++++++++++----
Mdistrho/src/DistrhoUIInternal.hpp | 33+++++++++++++++++++++------------
Mdistrho/src/DistrhoUILV2.cpp | 9+++++----
4 files changed, 43 insertions(+), 20 deletions(-)

diff --git a/distrho/DistrhoUI.hpp b/distrho/DistrhoUI.hpp @@ -119,6 +119,13 @@ public: it will return 0 when called from anywhere else. */ static uintptr_t getNextWindowId() noexcept; + + /** + Get the bundle path that will be used for the next UI. + @note: This function is only valid during createUI(), + it will return null when called from anywhere else. + */ + static const char* getNextBundlePath() noexcept; #endif protected: diff --git a/distrho/src/DistrhoUI.cpp b/distrho/src/DistrhoUI.cpp @@ -25,12 +25,13 @@ START_NAMESPACE_DISTRHO /* ------------------------------------------------------------------------------------------------------------ * Static data, see DistrhoUIInternal.hpp */ -double d_lastUiSampleRate = 0.0; -void* d_lastUiDspPtr = nullptr; +double d_lastUiSampleRate = 0.0; +void* d_lastUiDspPtr = nullptr; #ifdef HAVE_DGL -Window* d_lastUiWindow = nullptr; +Window* d_lastUiWindow = nullptr; #endif -uintptr_t g_nextWindowId = 0; +uintptr_t g_nextWindowId = 0; +const char* g_nextBundlePath = nullptr; /* ------------------------------------------------------------------------------------------------------------ * UI */ @@ -106,6 +107,11 @@ uintptr_t UI::getNextWindowId() noexcept { return g_nextWindowId; } + +const char* UI::getNextBundlePath() noexcept +{ + return g_nextBundlePath; +} #endif /* ------------------------------------------------------------------------------------------------------------ diff --git a/distrho/src/DistrhoUIInternal.hpp b/distrho/src/DistrhoUIInternal.hpp @@ -32,12 +32,13 @@ START_NAMESPACE_DISTRHO // ----------------------------------------------------------------------- // Static data, see DistrhoUI.cpp -extern double d_lastUiSampleRate; -extern void* d_lastUiDspPtr; +extern double d_lastUiSampleRate; +extern void* d_lastUiDspPtr; #ifdef HAVE_DGL -extern Window* d_lastUiWindow; +extern Window* d_lastUiWindow; #endif -extern uintptr_t g_nextWindowId; +extern uintptr_t g_nextWindowId; +extern const char* g_nextBundlePath; // ----------------------------------------------------------------------- // UI callbacks @@ -199,13 +200,15 @@ private: }; #else static inline -UI* createUiWrapper(void* const dspPtr, const uintptr_t winId) +UI* createUiWrapper(void* const dspPtr, const uintptr_t winId, const char* const bundlePath) { - d_lastUiDspPtr = dspPtr; - g_nextWindowId = winId; - UI* const ret = createUI(); - d_lastUiDspPtr = nullptr; - g_nextWindowId = 0; + d_lastUiDspPtr = dspPtr; + g_nextWindowId = winId; + g_nextBundlePath = bundlePath; + UI* const ret = createUI(); + d_lastUiDspPtr = nullptr; + g_nextWindowId = 0; + g_nextBundlePath = nullptr; return ret; } #endif @@ -218,14 +221,15 @@ class UIExporter public: UIExporter(void* const ptr, const intptr_t winId, const editParamFunc editParamCall, const setParamFunc setParamCall, const setStateFunc setStateCall, const sendNoteFunc sendNoteCall, const setSizeFunc setSizeCall, - void* const dspPtr = nullptr) + void* const dspPtr = nullptr, + const char* const bundlePath = nullptr) #ifdef HAVE_DGL : glApp(), glWindow(glApp, winId, dspPtr), fChangingSize(false), fUI(glWindow.getUI()), #else - : fUI(createUiWrapper(dspPtr, winId)), + : fUI(createUiWrapper(dspPtr, winId, bundlePath)), #endif fData((fUI != nullptr) ? fUI->pData : nullptr) { @@ -238,6 +242,11 @@ public: fData->setStateCallbackFunc = setStateCall; fData->sendNoteCallbackFunc = sendNoteCall; fData->setSizeCallbackFunc = setSizeCall; + +#ifdef HAVE_DGL + // unused + return; (void)bundlePath; +#endif } // ------------------------------------------------------------------- diff --git a/distrho/src/DistrhoUILV2.cpp b/distrho/src/DistrhoUILV2.cpp @@ -39,11 +39,11 @@ START_NAMESPACE_DISTRHO class UiLv2 { public: - UiLv2(const intptr_t winId, + UiLv2(const char* const bundlePath, 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, LV2UI_Widget* const widget, void* const dspPtr) - : fUI(this, winId, editParameterCallback, setParameterCallback, setStateCallback, sendNoteCallback, setSizeCallback, dspPtr), + : fUI(this, winId, editParameterCallback, setParameterCallback, setStateCallback, sendNoteCallback, setSizeCallback, dspPtr, bundlePath), fUridMap(uridMap), fUiResize(uiResz), fUiTouch(uiTouch), @@ -319,7 +319,8 @@ private: // ----------------------------------------------------------------------- -static LV2UI_Handle lv2ui_instantiate(const LV2UI_Descriptor*, const char* uri, const char*, LV2UI_Write_Function writeFunction, LV2UI_Controller controller, LV2UI_Widget* widget, const LV2_Feature* const* features) +static LV2UI_Handle lv2ui_instantiate(const LV2UI_Descriptor*, const char* uri, const char* bundlePath, + LV2UI_Write_Function writeFunction, LV2UI_Controller controller, LV2UI_Widget* widget, const LV2_Feature* const* features) { if (uri == nullptr || std::strcmp(uri, DISTRHO_PLUGIN_URI) != 0) { @@ -421,7 +422,7 @@ static LV2UI_Handle lv2ui_instantiate(const LV2UI_Descriptor*, const char* uri, d_lastUiSampleRate = 44100.0; } - return new UiLv2(winId, options, uridMap, uiResize, uiTouch, controller, writeFunction, widget, instance); + return new UiLv2(bundlePath, winId, options, uridMap, uiResize, uiTouch, controller, writeFunction, widget, instance); } #define uiPtr ((UiLv2*)ui)