|
|
@@ -70,6 +70,123 @@ |
|
|
|
#define DISTRHO_LV2_USE_EVENTS_IN (DISTRHO_PLUGIN_WANT_MIDI_INPUT || DISTRHO_PLUGIN_WANT_TIMEPOS || (DISTRHO_PLUGIN_WANT_STATE && DISTRHO_PLUGIN_HAS_UI)) |
|
|
|
#define DISTRHO_LV2_USE_EVENTS_OUT (DISTRHO_PLUGIN_WANT_MIDI_OUTPUT || (DISTRHO_PLUGIN_WANT_STATE && DISTRHO_PLUGIN_HAS_UI)) |
|
|
|
|
|
|
|
// ----------------------------------------------------------------------- |
|
|
|
static const char *const lv2ManifestPluginExtensionData[] = |
|
|
|
{ |
|
|
|
#if DISTRHO_PLUGIN_WANT_STATE |
|
|
|
LV2_STATE__interface, |
|
|
|
LV2_OPTIONS__interface, |
|
|
|
LV2_WORKER__interface, |
|
|
|
#endif |
|
|
|
#if DISTRHO_PLUGIN_WANT_PROGRAMS |
|
|
|
LV2_PROGRAMS__Interface, |
|
|
|
#endif |
|
|
|
#ifdef DISTRHO_PLUGIN_LICENSED_FOR_MOD |
|
|
|
MOD_LICENSE__interface, |
|
|
|
#endif |
|
|
|
nullptr |
|
|
|
}; |
|
|
|
|
|
|
|
static const char *const lv2ManifestPluginOptionalFeatures[] = |
|
|
|
{ |
|
|
|
#if DISTRHO_PLUGIN_IS_RT_SAFE |
|
|
|
LV2_CORE__hardRTCapable, |
|
|
|
#endif |
|
|
|
LV2_BUF_SIZE__boundedBlockLength, |
|
|
|
nullptr |
|
|
|
}; |
|
|
|
|
|
|
|
static const char *const lv2ManifestPluginRequiredFeatures[] = |
|
|
|
{ |
|
|
|
LV2_OPTIONS__options, |
|
|
|
LV2_URID__map, |
|
|
|
#if DISTRHO_PLUGIN_WANT_STATE |
|
|
|
LV2_WORKER__schedule, |
|
|
|
#endif |
|
|
|
#ifdef DISTRHO_PLUGIN_LICENSED_FOR_MOD |
|
|
|
MOD_LICENSE__feature, |
|
|
|
#endif |
|
|
|
nullptr |
|
|
|
}; |
|
|
|
|
|
|
|
static const char *const lv2ManifestPluginSupportedOptions[] = |
|
|
|
{ |
|
|
|
LV2_BUF_SIZE__nominalBlockLength, |
|
|
|
LV2_BUF_SIZE__maxBlockLength, |
|
|
|
LV2_PARAMETERS__sampleRate, |
|
|
|
nullptr |
|
|
|
}; |
|
|
|
|
|
|
|
#if DISTRHO_PLUGIN_HAS_UI |
|
|
|
static const char *const lv2ManifestUiExtensionData[] = |
|
|
|
{ |
|
|
|
LV2_OPTIONS__interface, |
|
|
|
"ui:idleInterface", |
|
|
|
"ui:showInterface", |
|
|
|
"ui:resize", |
|
|
|
#if DISTRHO_PLUGIN_WANT_PROGRAMS |
|
|
|
LV2_PROGRAMS__UIInterface, |
|
|
|
#endif |
|
|
|
nullptr |
|
|
|
}; |
|
|
|
|
|
|
|
static const char *const lv2ManifestUiOptionalFeatures[] = |
|
|
|
{ |
|
|
|
#if DISTRHO_PLUGIN_HAS_EMBED_UI |
|
|
|
# if !DISTRHO_UI_USER_RESIZABLE |
|
|
|
"ui:noUserResize", |
|
|
|
# endif |
|
|
|
"ui:resize", |
|
|
|
"ui:touch", |
|
|
|
#endif |
|
|
|
nullptr |
|
|
|
}; |
|
|
|
|
|
|
|
static const char *const lv2ManifestUiRequiredFeatures[] = |
|
|
|
{ |
|
|
|
#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS |
|
|
|
LV2_DATA_ACCESS_URI, |
|
|
|
LV2_INSTANCE_ACCESS_URI, |
|
|
|
#endif |
|
|
|
LV2_OPTIONS__options, |
|
|
|
LV2_URID__map, |
|
|
|
nullptr |
|
|
|
}; |
|
|
|
|
|
|
|
static const char *lv2ManifestUiSupportedOptions[] = |
|
|
|
{ |
|
|
|
LV2_PARAMETERS__sampleRate, |
|
|
|
nullptr |
|
|
|
}; |
|
|
|
#endif // DISTRHO_PLUGIN_HAS_UI |
|
|
|
|
|
|
|
static void addAttribute(String &text, unsigned indent, const char *attribute, const char* const values[]) |
|
|
|
{ |
|
|
|
if (!values[0]) |
|
|
|
return; |
|
|
|
|
|
|
|
size_t attributeLength = strlen(attribute); |
|
|
|
|
|
|
|
for (unsigned i = 0; values[i]; ++i) |
|
|
|
{ |
|
|
|
for (unsigned l = 0; l < indent; ++l) |
|
|
|
text += " "; |
|
|
|
|
|
|
|
if (i == 0) |
|
|
|
text += attribute; |
|
|
|
else |
|
|
|
for (unsigned l = 0; l < attributeLength; ++l) |
|
|
|
text += " "; |
|
|
|
text += " "; |
|
|
|
|
|
|
|
bool isUrl = strstr(values[i], "://") != nullptr; |
|
|
|
if (isUrl) text += "<"; |
|
|
|
text += values[i]; |
|
|
|
if (isUrl) text += ">"; |
|
|
|
text += values[i + 1] ? " ,\n" : " ;\n\n"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// ----------------------------------------------------------------------- |
|
|
|
|
|
|
|
DISTRHO_PLUGIN_EXPORT |
|
|
@@ -132,32 +249,11 @@ void lv2_generate_ttl(const char* const basename) |
|
|
|
manifestString += " a ui:" DISTRHO_LV2_UI_TYPE " ;\n"; |
|
|
|
manifestString += " ui:binary <" + pluginUI + "." DISTRHO_DLL_EXTENSION "> ;\n"; |
|
|
|
# if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS |
|
|
|
manifestString += "\n"; |
|
|
|
manifestString += " lv2:extensionData ui:idleInterface ,\n"; |
|
|
|
# if DISTRHO_PLUGIN_WANT_PROGRAMS |
|
|
|
manifestString += " ui:showInterface ,\n"; |
|
|
|
manifestString += " <" LV2_PROGRAMS__Interface "> ;\n"; |
|
|
|
# else |
|
|
|
manifestString += " ui:showInterface ;\n"; |
|
|
|
# endif |
|
|
|
manifestString += "\n"; |
|
|
|
# if DISTRHO_PLUGIN_HAS_EMBED_UI |
|
|
|
# if DISTRHO_UI_USER_RESIZABLE |
|
|
|
manifestString += " lv2:optionalFeature ui:resize ,\n"; |
|
|
|
manifestString += " ui:touch ;\n"; |
|
|
|
manifestString += "\n"; |
|
|
|
# else // DISTRHO_UI_USER_RESIZABLE |
|
|
|
manifestString += " lv2:optionalFeature ui:noUserResize ,\n"; |
|
|
|
manifestString += " ui:resize ,\n"; |
|
|
|
manifestString += " ui:touch ;\n"; |
|
|
|
manifestString += "\n"; |
|
|
|
# endif // DISTRHO_UI_USER_RESIZABLE |
|
|
|
# endif // DISTRHO_PLUGIN_HAS_EMBED_UI |
|
|
|
manifestString += " lv2:requiredFeature <" LV2_DATA_ACCESS_URI "> ,\n"; |
|
|
|
manifestString += " <" LV2_INSTANCE_ACCESS_URI "> ,\n"; |
|
|
|
manifestString += " <" LV2_OPTIONS__options "> ,\n"; |
|
|
|
manifestString += " <" LV2_URID__map "> ;\n"; |
|
|
|
manifestString += " opts:supportedOption <" LV2_PARAMETERS__sampleRate "> .\n"; |
|
|
|
addAttribute(manifestString, 4, "lv2:extensionData", lv2ManifestUiExtensionData); |
|
|
|
addAttribute(manifestString, 4, "lv2:optionalFeature", lv2ManifestUiOptionalFeatures); |
|
|
|
addAttribute(manifestString, 4, "lv2:requiredFeature", lv2ManifestUiRequiredFeatures); |
|
|
|
addAttribute(manifestString, 4, "opts:supportedOption", lv2ManifestUiSupportedOptions); |
|
|
|
manifestString[manifestString.rfind(';')] = '.'; |
|
|
|
# else // DISTRHO_PLUGIN_WANT_DIRECT_ACCESS |
|
|
|
manifestString += " rdfs:seeAlso <" + uiTTL + "> .\n"; |
|
|
|
# endif // DISTRHO_PLUGIN_WANT_DIRECT_ACCESS |
|
|
@@ -232,45 +328,10 @@ void lv2_generate_ttl(const char* const basename) |
|
|
|
#endif |
|
|
|
pluginString += "\n"; |
|
|
|
|
|
|
|
// extensionData |
|
|
|
pluginString += " lv2:extensionData <" LV2_STATE__interface "> "; |
|
|
|
#if DISTRHO_PLUGIN_WANT_STATE |
|
|
|
pluginString += ",\n <" LV2_OPTIONS__interface "> "; |
|
|
|
pluginString += ",\n <" LV2_WORKER__interface "> "; |
|
|
|
#endif |
|
|
|
#if DISTRHO_PLUGIN_WANT_PROGRAMS |
|
|
|
pluginString += ",\n <" LV2_PROGRAMS__Interface "> "; |
|
|
|
#endif |
|
|
|
#ifdef DISTRHO_PLUGIN_LICENSED_FOR_MOD |
|
|
|
pluginString += ",\n <" MOD_LICENSE__interface "> "; |
|
|
|
#endif |
|
|
|
pluginString += ";\n\n"; |
|
|
|
|
|
|
|
// optionalFeatures |
|
|
|
#if DISTRHO_PLUGIN_IS_RT_SAFE |
|
|
|
pluginString += " lv2:optionalFeature <" LV2_CORE__hardRTCapable "> ,\n"; |
|
|
|
pluginString += " <" LV2_BUF_SIZE__boundedBlockLength "> ;\n"; |
|
|
|
#else |
|
|
|
pluginString += " lv2:optionalFeature <" LV2_BUF_SIZE__boundedBlockLength "> ;\n"; |
|
|
|
#endif |
|
|
|
pluginString += "\n"; |
|
|
|
|
|
|
|
// requiredFeatures |
|
|
|
pluginString += " lv2:requiredFeature <" LV2_OPTIONS__options "> "; |
|
|
|
pluginString += ",\n <" LV2_URID__map "> "; |
|
|
|
#if DISTRHO_PLUGIN_WANT_STATE |
|
|
|
pluginString += ",\n <" LV2_WORKER__schedule "> "; |
|
|
|
#endif |
|
|
|
#ifdef DISTRHO_PLUGIN_LICENSED_FOR_MOD |
|
|
|
pluginString += ",\n <" MOD_LICENSE__feature "> "; |
|
|
|
#endif |
|
|
|
pluginString += ";\n\n"; |
|
|
|
|
|
|
|
// supportedOptions |
|
|
|
pluginString += " opts:supportedOption <" LV2_BUF_SIZE__nominalBlockLength "> ,\n"; |
|
|
|
pluginString += " <" LV2_BUF_SIZE__maxBlockLength "> ,\n"; |
|
|
|
pluginString += " <" LV2_PARAMETERS__sampleRate "> ;\n"; |
|
|
|
pluginString += "\n"; |
|
|
|
addAttribute(pluginString, 4, "lv2:extensionData", lv2ManifestPluginExtensionData); |
|
|
|
addAttribute(pluginString, 4, "lv2:optionalFeature", lv2ManifestPluginOptionalFeatures); |
|
|
|
addAttribute(pluginString, 4, "lv2:requiredFeature", lv2ManifestPluginRequiredFeatures); |
|
|
|
addAttribute(pluginString, 4, "opts:supportedOption", lv2ManifestPluginSupportedOptions); |
|
|
|
|
|
|
|
// UI |
|
|
|
#if DISTRHO_PLUGIN_HAS_UI |
|
|
@@ -635,30 +696,12 @@ void lv2_generate_ttl(const char* const basename) |
|
|
|
uiString += "\n"; |
|
|
|
|
|
|
|
uiString += "<" DISTRHO_UI_URI ">\n"; |
|
|
|
uiString += " lv2:extensionData ui:idleInterface ,\n"; |
|
|
|
# if DISTRHO_PLUGIN_WANT_PROGRAMS |
|
|
|
uiString += " ui:showInterface ,\n"; |
|
|
|
uiString += " <" LV2_PROGRAMS__Interface "> ;\n"; |
|
|
|
# else |
|
|
|
uiString += " ui:showInterface ;\n"; |
|
|
|
# endif |
|
|
|
uiString += "\n"; |
|
|
|
# if DISTRHO_PLUGIN_HAS_EMBED_UI |
|
|
|
# if DISTRHO_UI_USER_RESIZABLE |
|
|
|
uiString += " lv2:optionalFeature ui:resize ,\n"; |
|
|
|
uiString += " ui:touch ;\n"; |
|
|
|
uiString += "\n"; |
|
|
|
# else // DISTRHO_UI_USER_RESIZABLE |
|
|
|
uiString += " lv2:optionalFeature ui:noUserResize ,\n"; |
|
|
|
uiString += " ui:resize ,\n"; |
|
|
|
uiString += " ui:touch ;\n"; |
|
|
|
uiString += "\n"; |
|
|
|
# endif // DISTRHO_UI_USER_RESIZABLE |
|
|
|
# endif // DISTRHO_PLUGIN_HAS_EMBED_UI |
|
|
|
uiString += " lv2:requiredFeature <" LV2_OPTIONS__options "> ,\n"; |
|
|
|
uiString += " <" LV2_URID__map "> ;\n"; |
|
|
|
|
|
|
|
uiString += " opts:supportedOption <" LV2_PARAMETERS__sampleRate "> .\n"; |
|
|
|
addAttribute(uiString, 4, "lv2:extensionData", lv2ManifestUiExtensionData); |
|
|
|
addAttribute(uiString, 4, "lv2:optionalFeature", lv2ManifestUiOptionalFeatures); |
|
|
|
addAttribute(uiString, 4, "lv2:requiredFeature", lv2ManifestUiRequiredFeatures); |
|
|
|
addAttribute(uiString, 4, "opts:supportedOption", lv2ManifestUiSupportedOptions); |
|
|
|
uiString[uiString.rfind(';')] = '.'; |
|
|
|
|
|
|
|
uiFile << uiString << std::endl; |
|
|
|
uiFile.close(); |
|
|
|