@@ -1160,12 +1160,18 @@ public: | |||
break; | |||
} | |||
if (fUi.window == nullptr) | |||
if (fUi.window == nullptr && fExt.uishow == nullptr) | |||
{ | |||
return pData->engine->callback(ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, -1, 0, 0.0f, msg); | |||
// unused | |||
(void)frontendWinId; | |||
} | |||
fUi.window->setTitle(fUi.title); | |||
fFeatures[kFeatureIdUiParent]->data = fUi.window->getPtr(); | |||
if (fUi.window != nullptr) | |||
{ | |||
fUi.window->setTitle(fUi.title); | |||
fFeatures[kFeatureIdUiParent]->data = fUi.window->getPtr(); | |||
} | |||
} | |||
#endif | |||
@@ -1195,7 +1201,10 @@ public: | |||
#ifndef LV2_UIS_ONLY_BRIDGES | |||
if (fUi.type == UI::TYPE_EMBED) | |||
{ | |||
fUi.window->show(); | |||
if (fUi.window != nullptr) | |||
fUi.window->show(); | |||
else if (fExt.uishow != nullptr) | |||
fExt.uishow->show(fUi.handle); | |||
} | |||
else | |||
#endif | |||
@@ -1209,10 +1218,10 @@ public: | |||
#ifndef LV2_UIS_ONLY_BRIDGES | |||
if (fUi.type == UI::TYPE_EMBED) | |||
{ | |||
CARLA_SAFE_ASSERT(fUi.window != nullptr); | |||
if (fUi.window != nullptr) | |||
fUi.window->hide(); | |||
else if (fExt.uishow != nullptr) | |||
fExt.uishow->hide(fUi.handle); | |||
} | |||
else | |||
#endif | |||
@@ -3762,6 +3771,8 @@ public: | |||
for (uint32_t i=0; i < fRdfDescriptor->ExtensionCount; ++i) | |||
{ | |||
CARLA_SAFE_ASSERT_CONTINUE(fRdfDescriptor->Extensions[i] != nullptr); | |||
if (std::strcmp(fRdfDescriptor->Extensions[i], LV2_OPTIONS__interface) == 0) | |||
pData->hints |= PLUGIN_HAS_EXTENSION_OPTIONS; | |||
else if (std::strcmp(fRdfDescriptor->Extensions[i], LV2_PROGRAMS__Interface) == 0) | |||
@@ -3811,22 +3822,6 @@ public: | |||
CARLA_SAFE_ASSERT_RETURN(fUi.descriptor != nullptr,); | |||
carla_debug("Lv2Plugin::updateUi()"); | |||
fExt.uiidle = nullptr; | |||
fExt.uiprograms = nullptr; | |||
if (fUi.descriptor->extension_data != nullptr) | |||
{ | |||
fExt.uiidle = (const LV2UI_Idle_Interface*)fUi.descriptor->extension_data(LV2_UI__idleInterface); | |||
fExt.uiprograms = (const LV2_Programs_UI_Interface*)fUi.descriptor->extension_data(LV2_PROGRAMS__UIInterface); | |||
// check if invalid | |||
if (fExt.uiidle != nullptr && fExt.uiidle->idle == nullptr) | |||
fExt.uiidle = nullptr; | |||
if (fExt.uiprograms != nullptr && fExt.uiprograms->select_program == nullptr) | |||
fExt.uiprograms = nullptr; | |||
} | |||
// update midi program | |||
if (fExt.uiprograms != nullptr && pData->midiprog.count > 0 && pData->midiprog.current >= 0) | |||
{ | |||
@@ -4620,7 +4615,7 @@ public: | |||
void initUi() | |||
{ | |||
// --------------------------------------------------------------- | |||
// find more appropriate ui | |||
// find the most appropriate ui | |||
int eQt4, eQt5, eGtk2, eGtk3, eCocoa, eWindows, eX11, eExt, iCocoa, iWindows, iX11, iExt, iFinal; | |||
eQt4 = eQt5 = eGtk2 = eGtk3 = eCocoa = eWindows = eX11 = eExt = iCocoa = iWindows = iX11 = iExt = iFinal = -1; | |||
@@ -4657,32 +4652,21 @@ public: | |||
if (isUiBridgeable(i)) | |||
eGtk3 = ii; | |||
break; | |||
#if defined(CARLA_OS_HAIKU) | |||
#elif defined(CARLA_OS_MAC) | |||
case LV2_UI_COCOA: | |||
if (isUiBridgeable(i) && preferUiBridges) | |||
eCocoa = ii; | |||
# ifndef LV2_UIS_ONLY_BRIDGES | |||
iCocoa = ii; | |||
# endif | |||
break; | |||
#elif defined(CARLA_OS_WIN) | |||
case LV2_UI_WINDOWS: | |||
if (isUiBridgeable(i) && preferUiBridges) | |||
eWindows = ii; | |||
# ifndef LV2_UIS_ONLY_BRIDGES | |||
iWindows = ii; | |||
# endif | |||
break; | |||
#else | |||
case LV2_UI_X11: | |||
if (isUiBridgeable(i) && preferUiBridges) | |||
eX11 = ii; | |||
# ifndef LV2_UIS_ONLY_BRIDGES | |||
iX11 = ii; | |||
# endif | |||
break; | |||
#endif | |||
case LV2_UI_EXTERNAL: | |||
case LV2_UI_OLD_EXTERNAL: | |||
if (isUiBridgeable(i)) | |||
@@ -4702,29 +4686,64 @@ public: | |||
iFinal = eGtk2; | |||
else if (eGtk3 >= 0) | |||
iFinal = eGtk3; | |||
#ifdef CARLA_OS_MAC | |||
else if (eCocoa >= 0) | |||
iFinal = eCocoa; | |||
#endif | |||
#ifdef CARLA_OS_WIN | |||
else if (eWindows >= 0) | |||
iFinal = eWindows; | |||
#endif | |||
#ifdef HAVE_X11 | |||
else if (eX11 >= 0) | |||
iFinal = eX11; | |||
#endif | |||
//else if (eExt >= 0) // TODO | |||
// iFinal = eExt; | |||
#ifndef LV2_UIS_ONLY_BRIDGES | |||
# ifdef CARLA_OS_MAC | |||
else if (iCocoa >= 0) | |||
iFinal = iCocoa; | |||
# endif | |||
# ifdef CARLA_OS_WIN | |||
else if (iWindows >= 0) | |||
iFinal = iWindows; | |||
# endif | |||
# ifdef HAVE_X11 | |||
else if (iX11 >= 0) | |||
iFinal = iX11; | |||
# endif | |||
#endif | |||
else if (iExt >= 0) | |||
iFinal = iExt; | |||
if (iFinal < 0) | |||
{ | |||
carla_stderr("Failed to find an appropriate LV2 UI for this plugin"); | |||
return; | |||
// no suitable UI found, see if there's one which supports ui:showInterface | |||
bool hasShowInterface = false; | |||
for (uint32_t i=0; i < fRdfDescriptor->UICount && ! hasShowInterface; ++i) | |||
{ | |||
LV2_RDF_UI* const ui(&fRdfDescriptor->UIs[i]); | |||
for (uint32_t j=0; j < ui->ExtensionCount; ++j) | |||
{ | |||
CARLA_SAFE_ASSERT_CONTINUE(ui->Extensions[j] != nullptr); | |||
if (std::strcmp(ui->Extensions[j], LV2_UI__showInterface) != 0) | |||
continue; | |||
iFinal = static_cast<int>(i); | |||
hasShowInterface = true; | |||
break; | |||
} | |||
} | |||
if (! hasShowInterface) | |||
{ | |||
carla_stderr("Failed to find an appropriate LV2 UI for this plugin"); | |||
return; | |||
} | |||
} | |||
fUi.rdfDescriptor = &fRdfDescriptor->UIs[iFinal]; | |||
@@ -4772,6 +4791,13 @@ public: | |||
delete[] bridgeBinary; | |||
return; | |||
} | |||
if (iFinal == eQt4 || iFinal == eQt5 || iFinal == eGtk2 || iFinal == eGtk3) | |||
{ | |||
carla_stderr2("Failed to find UI bridge binary, cannot use UI"); | |||
fUi.rdfDescriptor = nullptr; | |||
return; | |||
} | |||
} | |||
#ifdef LV2_UIS_ONLY_BRIDGES | |||
@@ -4828,33 +4854,40 @@ public: | |||
{ | |||
case LV2_UI_QT4: | |||
carla_stdout("Will use LV2 Qt4 UI, NOT!"); | |||
fUi.type = UI::TYPE_EMBED; | |||
break; | |||
case LV2_UI_QT5: | |||
carla_stdout("Will use LV2 Qt5 UI, NOT!"); | |||
fUi.type = UI::TYPE_EMBED; | |||
break; | |||
case LV2_UI_GTK2: | |||
carla_stdout("Will use LV2 Gtk2 UI, NOT!"); | |||
fUi.type = UI::TYPE_EMBED; | |||
break; | |||
case LV2_UI_GTK3: | |||
carla_stdout("Will use LV2 Gtk3 UI, NOT!"); | |||
fUi.type = UI::TYPE_EMBED; | |||
break; | |||
#if defined(CARLA_OS_HAIKU) | |||
#elif defined(CARLA_OS_MAC) | |||
#ifdef CARLA_OS_MAC | |||
case LV2_UI_COCOA: | |||
carla_stdout("Will use LV2 Cocoa UI"); | |||
fUi.type = UI::TYPE_EMBED; | |||
break; | |||
#elif defined(CARLA_OS_WIN) | |||
#endif | |||
#ifdef CARLA_OS_WIN | |||
case LV2_UI_WINDOWS: | |||
carla_stdout("Will use LV2 Windows UI"); | |||
fUi.type = UI::TYPE_EMBED; | |||
break; | |||
#else | |||
#endif | |||
case LV2_UI_X11: | |||
#ifdef HAVE_X11 | |||
carla_stdout("Will use LV2 X11 UI"); | |||
#else | |||
carla_stdout("Will use LV2 X11 UI, NOT!"); | |||
#endif | |||
fUi.type = UI::TYPE_EMBED; | |||
break; | |||
#endif | |||
case LV2_UI_EXTERNAL: | |||
case LV2_UI_OLD_EXTERNAL: | |||
carla_stdout("Will use LV2 External UI"); | |||
@@ -4938,6 +4971,26 @@ public: | |||
fFeatures[kFeatureIdExternalUiOld]->URI = LV2_EXTERNAL_UI_DEPRECATED_URI; | |||
fFeatures[kFeatureIdExternalUiOld]->data = uiExternalHostFt; | |||
// --------------------------------------------------------------- | |||
// initialize ui extensions | |||
if (fUi.descriptor->extension_data == nullptr) | |||
return; | |||
fExt.uiidle = (const LV2UI_Idle_Interface*)fUi.descriptor->extension_data(LV2_UI__idleInterface); | |||
fExt.uishow = (const LV2UI_Show_Interface*)fUi.descriptor->extension_data(LV2_UI__showInterface); | |||
fExt.uiprograms = (const LV2_Programs_UI_Interface*)fUi.descriptor->extension_data(LV2_PROGRAMS__UIInterface); | |||
// check if invalid | |||
if (fExt.uiidle != nullptr && fExt.uiidle->idle == nullptr) | |||
fExt.uiidle = nullptr; | |||
if (fExt.uishow != nullptr && (fExt.uishow->show == nullptr || fExt.uishow->hide == nullptr)) | |||
fExt.uishow = nullptr; | |||
if (fExt.uiprograms != nullptr && fExt.uiprograms->select_program == nullptr) | |||
fExt.uiprograms = nullptr; | |||
} | |||
// ------------------------------------------------------------------- | |||
@@ -5010,6 +5063,7 @@ private: | |||
const LV2_Worker_Interface* worker; | |||
const LV2_Programs_Interface* programs; | |||
const LV2UI_Idle_Interface* uiidle; | |||
const LV2UI_Show_Interface* uishow; | |||
const LV2_Programs_UI_Interface* uiprograms; | |||
Extensions() | |||
@@ -5018,6 +5072,7 @@ private: | |||
worker(nullptr), | |||
programs(nullptr), | |||
uiidle(nullptr), | |||
uishow(nullptr), | |||
uiprograms(nullptr) {} | |||
} fExt; | |||
@@ -14,7 +14,6 @@ LINK_FLAGS += $(DGL_LIBS) | |||
OBJS = \ | |||
src/App.cpp.o \ | |||
src/Base.cpp.o \ | |||
src/Image.cpp.o \ | |||
src/ImageAboutWindow.cpp.o \ | |||
src/ImageButton.cpp.o \ | |||
@@ -26,7 +25,6 @@ OBJS = \ | |||
OBJS_posix32 = \ | |||
src/App.cpp.posix32.o \ | |||
src/Base.cpp.posix32.o \ | |||
src/Image.cpp.posix32.o \ | |||
src/ImageAboutWindow.cpp.posix32.o \ | |||
src/ImageButton.cpp.posix32.o \ | |||
@@ -38,7 +36,6 @@ OBJS_posix32 = \ | |||
OBJS_posix64 = \ | |||
src/App.cpp.posix64.o \ | |||
src/Base.cpp.posix64.o \ | |||
src/Image.cpp.posix64.o \ | |||
src/ImageAboutWindow.cpp.posix64.o \ | |||
src/ImageButton.cpp.posix64.o \ | |||
@@ -50,7 +47,6 @@ OBJS_posix64 = \ | |||
OBJS_win32 = \ | |||
src/App.cpp.win32.o \ | |||
src/Base.cpp.win32.o \ | |||
src/Image.cpp.win32.o \ | |||
src/ImageAboutWindow.cpp.win32.o \ | |||
src/ImageButton.cpp.win32.o \ | |||
@@ -62,7 +58,6 @@ OBJS_win32 = \ | |||
OBJS_win64 = \ | |||
src/App.cpp.win64.o \ | |||
src/Base.cpp.win64.o \ | |||
src/Image.cpp.win64.o \ | |||
src/ImageAboutWindow.cpp.win64.o \ | |||
src/ImageButton.cpp.win64.o \ | |||
@@ -1,49 +0,0 @@ | |||
/* | |||
* DISTRHO Plugin Framework (DPF) | |||
* Copyright (C) 2012-2014 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
* permission notice appear in all copies. | |||
* | |||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||
* TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||
*/ | |||
#include "../Base.hpp" | |||
#ifdef DGL_OS_WINDOWS | |||
# include <windows.h> | |||
#else | |||
# include <unistd.h> | |||
#endif | |||
START_NAMESPACE_DGL | |||
// ----------------------------------------------------------------------- | |||
void sleep(unsigned int secs) | |||
{ | |||
#ifdef DGL_OS_WINDOWS | |||
::Sleep(secs * 1000); | |||
#else | |||
::sleep(secs); | |||
#endif | |||
} | |||
void msleep(unsigned int msecs) | |||
{ | |||
#ifdef DGL_OS_WINDOWS | |||
::Sleep(msecs); | |||
#else | |||
::usleep(msecs * 1000); | |||
#endif | |||
} | |||
// ----------------------------------------------------------------------- | |||
END_NAMESPACE_DGL |
@@ -905,63 +905,70 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri, const bool doInit) | |||
if (unitUnitNodes.size() > 0) | |||
{ | |||
if (const char* const unitUnit = unitUnitNodes.get_first().as_uri()) | |||
Lilv::Node unitUnitNode(unitUnitNodes.get_first()); | |||
if (unitUnitNode.is_uri()) | |||
{ | |||
rdfPort->Unit.Hints |= LV2_PORT_UNIT_UNIT; | |||
if (std::strcmp(unitUnit, LV2_UNITS__bar) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_BAR; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__beat) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_BEAT; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__bpm) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_BPM; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__cent) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_CENT; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__cm) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_CM; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__coef) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_COEF; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__db) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_DB; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__degree) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_DEGREE; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__frame) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_FRAME; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__hz) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_HZ; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__inch) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_INCH; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__khz) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_KHZ; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__km) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_KM; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__m) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_M; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__mhz) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_MHZ; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__midiNote) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_MIDINOTE; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__mile) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_MILE; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__min) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_MIN; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__mm) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_MM; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__ms) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_MS; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__oct) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_OCT; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__pc) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_PC; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__s) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_S; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__semitone12TET) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_SEMITONE; | |||
else | |||
carla_stderr("lv2_rdf_new(\"%s\") - got unknown unit unit '%s'", uri, unitUnit); | |||
if (const char* const unitUnit = unitUnitNode.as_uri()) | |||
{ | |||
rdfPort->Unit.Hints |= LV2_PORT_UNIT_UNIT; | |||
if (std::strcmp(unitUnit, LV2_UNITS__bar) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_BAR; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__beat) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_BEAT; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__bpm) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_BPM; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__cent) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_CENT; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__cm) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_CM; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__coef) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_COEF; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__db) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_DB; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__degree) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_DEGREE; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__frame) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_FRAME; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__hz) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_HZ; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__inch) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_INCH; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__khz) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_KHZ; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__km) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_KM; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__m) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_M; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__mhz) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_MHZ; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__midiNote) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_MIDINOTE; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__mile) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_MILE; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__min) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_MIN; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__mm) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_MM; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__ms) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_MS; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__oct) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_OCT; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__pc) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_PC; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__s) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_S; | |||
else if (std::strcmp(unitUnit, LV2_UNITS__semitone12TET) == 0) | |||
rdfPort->Unit.Unit = LV2_PORT_UNIT_SEMITONE; | |||
else | |||
carla_stderr("lv2_rdf_new(\"%s\") - got unknown unit unit '%s'", uri, unitUnit); | |||
} | |||
} | |||
} | |||
// FIXME | |||
Lilv::Nodes unitNameNodes(lilvPort.get_value(lv2World.unit_name)); | |||
if (unitNameNodes.size() > 0) | |||
@@ -1264,7 +1271,7 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri, const bool doInit) | |||
{ | |||
CARLA_SAFE_ASSERT_BREAK(h2 < rdfUI->ExtensionCount); | |||
Lilv::Node lilvExtensionDataNode(lilvExtensionDataNodes.get(it)); | |||
Lilv::Node lilvExtensionDataNode(lilvExtensionDataNodes.get(it2)); | |||
LV2_URI* const rdfExtension(&rdfUI->Extensions[h2++]); | |||
if (lilvExtensionDataNode.is_uri()) | |||