Browse Source

Pass LV2 UI bundle path to external UIs

pull/6/head
falkTX 8 years ago
parent
commit
f726245325
4 changed files with 43 additions and 20 deletions
  1. +7
    -0
      distrho/DistrhoUI.hpp
  2. +10
    -4
      distrho/src/DistrhoUI.cpp
  3. +21
    -12
      distrho/src/DistrhoUIInternal.hpp
  4. +5
    -4
      distrho/src/DistrhoUILV2.cpp

+ 7
- 0
distrho/DistrhoUI.hpp View File

@@ -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:


+ 10
- 4
distrho/src/DistrhoUI.cpp View File

@@ -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

/* ------------------------------------------------------------------------------------------------------------


+ 21
- 12
distrho/src/DistrhoUIInternal.hpp View File

@@ -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
}

// -------------------------------------------------------------------


+ 5
- 4
distrho/src/DistrhoUILV2.cpp View File

@@ -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)


Loading…
Cancel
Save