@@ -78,6 +78,19 @@ const unsigned int PARAMETER_USES_SCALEPOINTS = 0x40; //!< Parameter uses scalep | |||
const unsigned int PARAMETER_USES_CUSTOM_TEXT = 0x80; //!< Parameter uses custom text for displaying its value.\see CarlaPlugin::getParameterText() | |||
/**@}*/ | |||
/*! | |||
* @defgroup BridgeMessages Bridge Messages | |||
* | |||
* Various bridge related messages, used as configure(<message>, value). | |||
* @{ | |||
*/ | |||
const char* const CARLA_BRIDGE_MSG_HIDE_GUI = "CarlaBridgeHideGUI"; //!< Plugin -> Host call, tells host GUI is now hidden | |||
const char* const CARLA_BRIDGE_MSG_SAVED = "CarlaBridgeSaved"; //!< Plugin -> Host call, tells host state is saved | |||
const char* const CARLA_BRIDGE_MSG_SAVE_NOW = "CarlaBridgeSaveNow"; //!< Host -> Plugin call, tells plugin to save state now | |||
const char* const CARLA_BRIDGE_MSG_SET_CHUNK = "CarlaBridgeSetChunk"; //!< Host -> Plugin call, tells plugin to set chunk in file \a value | |||
const char* const CARLA_BRIDGE_MSG_SET_CUSTOM = "CarlaBridgeSetCustom"; //!< Host -> Plugin call, tells plugin to set a custom data set using \a value ("type·key·rvalue").\n If \a type is 'chunk' or 'binary' \a rvalue refers to chunk file. | |||
/**@}*/ | |||
/*! | |||
* The binary type of a plugin. | |||
*/ | |||
@@ -17,7 +17,9 @@ | |||
#include "carla_plugin.h" | |||
#include <QtCore/QDir> | |||
#include <QtCore/QFile> | |||
#include <QtCore/QStringList> | |||
#include <QtCore/QTextStream> | |||
#define CARLA_BRIDGE_CHECK_OSC_TYPES(/* argc, types, */ argcToCompare, typesToCompare) \ | |||
@@ -533,6 +535,28 @@ public: | |||
break; | |||
} | |||
case PluginBridgeConfigure: | |||
{ | |||
CARLA_BRIDGE_CHECK_OSC_TYPES(2, "ss"); | |||
const char* const key = (const char*)&argv[0]->s; | |||
const char* const value = (const char*)&argv[1]->s; | |||
Q_ASSERT(key); | |||
Q_ASSERT(value); | |||
if (strcmp(key, CARLA_BRIDGE_MSG_HIDE_GUI) == 0) | |||
{ | |||
x_engine->callback(CALLBACK_SHOW_GUI, m_id, 0, 0, 0.0); | |||
} | |||
else if (strcmp(key, CARLA_BRIDGE_MSG_SAVED) == 0) | |||
{ | |||
m_saved = true; | |||
} | |||
break; | |||
} | |||
case PluginBridgeSetParameterValue: | |||
{ | |||
CARLA_BRIDGE_CHECK_OSC_TYPES(2, "id"); | |||
@@ -552,7 +576,6 @@ public: | |||
const int32_t index = argv[0]->i; | |||
const double value = argv[1]->d; | |||
Q_ASSERT(index >= 0 && index < (int32_t)param.count); | |||
if (index >= 0 && index < (int32_t)param.count) | |||
@@ -585,25 +608,67 @@ public: | |||
case PluginBridgeSetCustomData: | |||
{ | |||
// const char* stype = (const char*)&argv[0]->s; | |||
// const char* key = (const char*)&argv[1]->s; | |||
// const char* value = (const char*)&argv[2]->s; | |||
CARLA_BRIDGE_CHECK_OSC_TYPES(3, "sss"); | |||
// setCustomData(getCustomDataStringType(stype), key, value, false); | |||
const char* const stype = (const char*)&argv[0]->s; | |||
const char* const key = (const char*)&argv[1]->s; | |||
const char* const value = (const char*)&argv[2]->s; | |||
Q_ASSERT(stype); | |||
Q_ASSERT(key); | |||
Q_ASSERT(value); | |||
setCustomData(getCustomDataStringType(stype), key, value, false); | |||
break; | |||
} | |||
case PluginBridgeSetChunkData: | |||
{ | |||
// const char* const filePath = (const char*)&argv[0]->s; | |||
// QFile file(filePath); | |||
CARLA_BRIDGE_CHECK_OSC_TYPES(1, "s"); | |||
const char* const chunkFileChar = (const char*)&argv[0]->s; | |||
Q_ASSERT(chunkFileChar); | |||
// if (file.open(QIODevice::ReadOnly)) | |||
// { | |||
// info.chunk = file.readAll(); | |||
// file.remove(); | |||
// } | |||
QString chunkFileStr(chunkFileChar); | |||
#ifndef Q_OS_WIN | |||
// Using Wine, fix temp dir | |||
if (m_binary == BINARY_WIN32 || m_binary == BINARY_WIN64) | |||
{ | |||
// Get WINEPREFIX | |||
QString wineDir; | |||
if (const char* const WINEPREFIX = getenv("WINEPREFIX")) | |||
wineDir = QString(WINEPREFIX); | |||
else | |||
wineDir = QDir::homePath() + "/.wine"; | |||
QStringList chunkFileStrSplit1 = chunkFileStr.split(":/"); | |||
QStringList chunkFileStrSplit2 = chunkFileStrSplit1.at(1).split("\\"); | |||
QString wineDrive = chunkFileStrSplit1.at(0).toLower(); | |||
QString wineTMP = chunkFileStrSplit2.at(0); | |||
QString baseName = chunkFileStrSplit2.at(1); | |||
chunkFileStr = wineDir; | |||
chunkFileStr += "/drive_"; | |||
chunkFileStr += wineDrive; | |||
chunkFileStr += "/"; | |||
chunkFileStr += wineTMP; | |||
chunkFileStr += "/"; | |||
chunkFileStr += baseName; | |||
chunkFileStr = QDir::toNativeSeparators(chunkFileStr); | |||
} | |||
#endif | |||
QFile chunkFile(chunkFileStr); | |||
if (chunkFile.open(QIODevice::ReadOnly)) | |||
{ | |||
info.chunk = chunkFile.readAll(); | |||
chunkFile.remove(); | |||
} | |||
break; | |||
} | |||
@@ -611,10 +676,6 @@ public: | |||
case PluginBridgeUpdateNow: | |||
m_initiated = true; | |||
break; | |||
case PluginBridgeSaved: | |||
m_saved = true; | |||
break; | |||
} | |||
return 0; | |||
@@ -1685,6 +1685,22 @@ void CarlaEngine::osc_send_bridge_midi_program_info(const int32_t index, const i | |||
} | |||
} | |||
void CarlaEngine::osc_send_bridge_configure(const char* const key, const char* const value) | |||
{ | |||
qDebug("CarlaEngine::osc_send_bridge_configure(\"%s\", \"%s\")", key, value); | |||
Q_ASSERT(m_oscData); | |||
Q_ASSERT(key); | |||
Q_ASSERT(value); | |||
if (m_oscData && m_oscData->target) | |||
{ | |||
char target_path[strlen(m_oscData->path)+18]; | |||
strcpy(target_path, m_oscData->path); | |||
strcat(target_path, "/bridge_configure"); | |||
lo_send(m_oscData->target, target_path, "ss", key, value); | |||
} | |||
} | |||
void CarlaEngine::osc_send_bridge_set_parameter_value(const int32_t index, const double value) | |||
{ | |||
qDebug("CarlaEngine::osc_send_bridge_set_parameter_value(%i, %g)", index, value); | |||
@@ -1741,6 +1757,34 @@ void CarlaEngine::osc_send_bridge_set_midi_program(const int32_t index) | |||
} | |||
} | |||
void CarlaEngine::osc_send_bridge_set_custom_data(const char* const stype, const char* const key, const char* const value) | |||
{ | |||
qDebug("CarlaEngine::osc_send_bridge_set_custom_data(\"%s\", \"%s\", \"%s\")", stype, key, value); | |||
Q_ASSERT(m_oscData); | |||
if (m_oscData && m_oscData->target) | |||
{ | |||
char target_path[strlen(m_oscData->path)+24]; | |||
strcpy(target_path, m_oscData->path); | |||
strcat(target_path, "/bridge_set_custom_data"); | |||
lo_send(m_oscData->target, target_path, "sss", stype, key, value); | |||
} | |||
} | |||
void CarlaEngine::osc_send_bridge_set_chunk_data(const char* const chunkFile) | |||
{ | |||
qDebug("CarlaEngine::osc_send_bridge_set_chunk_data(\"%s\")", chunkFile); | |||
Q_ASSERT(m_oscData); | |||
if (m_oscData && m_oscData->target) | |||
{ | |||
char target_path[strlen(m_oscData->path)+23]; | |||
strcpy(target_path, m_oscData->path); | |||
strcat(target_path, "/bridge_set_chunk_data"); | |||
lo_send(m_oscData->target, target_path, "s", chunkFile); | |||
} | |||
} | |||
void CarlaEngine::osc_send_bridge_set_input_peak_value(const int32_t portId, const double value) | |||
{ | |||
Q_ASSERT(m_oscData); | |||
@@ -109,7 +109,7 @@ struct CarlaTimeInfoBBT { | |||
float beat_type; | |||
double ticks_per_beat; | |||
double beats_per_minute; | |||
CarlaTimeInfoBBT() | |||
: bar(0), | |||
beat(0), | |||
@@ -279,14 +279,15 @@ public: | |||
void osc_send_bridge_parameter_ranges(const int32_t index, const double def, const double min, const double max, const double step, const double stepSmall, const double stepLarge); | |||
void osc_send_bridge_program_info(const int32_t index, const char* const name); | |||
void osc_send_bridge_midi_program_info(const int32_t index, const int32_t bank, const int32_t program, const char* const label); | |||
void osc_send_bridge_configure(const char* const key, const char* const value); | |||
void osc_send_bridge_set_parameter_value(const int32_t index, const double value); | |||
void osc_send_bridge_set_default_value(const int32_t index, const double value); | |||
void osc_send_bridge_set_program(const int32_t index); | |||
void osc_send_bridge_set_midi_program(const int32_t index); | |||
void osc_send_bridge_set_custom_data(const char* const stype, const char* const key, const char* const value); | |||
void osc_send_bridge_set_chunk_data(const char* const chunkFile); | |||
void osc_send_bridge_set_input_peak_value(const int32_t portId, const double value); | |||
void osc_send_bridge_set_output_peak_value(const int32_t portId, const double value); | |||
//void osc_send_bridge_custom_data(const char* const stype, const char* const key, const char* const value); | |||
//void osc_send_bridge_chunk_data(const char* const stringData); | |||
#else | |||
void osc_send_control_add_plugin(const int32_t pluginId, const char* const pluginName); | |||
void osc_send_control_remove_plugin(const int32_t pluginId); | |||
@@ -224,6 +224,8 @@ int CarlaOsc::handleMessage(const char* const path, const int argc, const lo_arg | |||
return plugin->setOscBridgeInfo(PluginBridgeProgramInfo, argc, argv, types); | |||
if (strcmp(method, "/bridge_midi_program_info") == 0) | |||
return plugin->setOscBridgeInfo(PluginBridgeMidiProgramInfo, argc, argv, types); | |||
if (strcmp(method, "/bridge_configure") == 0) | |||
return plugin->setOscBridgeInfo(PluginBridgeConfigure, argc, argv, types); | |||
if (strcmp(method, "/bridge_set_parameter_value") == 0) | |||
return plugin->setOscBridgeInfo(PluginBridgeSetParameterValue, argc, argv, types); | |||
if (strcmp(method, "/bridge_set_default_value") == 0) | |||
@@ -322,20 +324,6 @@ int CarlaOsc::handle_configure(CARLA_OSC_HANDLE_ARGS2) | |||
const char* const key = (const char*)&argv[0]->s; | |||
const char* const value = (const char*)&argv[1]->s; | |||
// if (plugin->hints() & PLUGIN_IS_BRIDGE) | |||
// { | |||
// if (strcmp(key, CARLA_BRIDGE_MSG_HIDE_GUI) == 0) | |||
// { | |||
// engine->callback(CALLBACK_SHOW_GUI, plugin->id(), 0, 0, 0.0); | |||
// return 0; | |||
// } | |||
// if (strcmp(key, CARLA_BRIDGE_MSG_SAVED) == 0) | |||
// { | |||
// return plugin->setOscBridgeInfo(PluginBridgeSaved, nullptr); | |||
// } | |||
// } | |||
plugin->setCustomData(CUSTOM_DATA_STRING, key, value, false); | |||
return 0; | |||
@@ -49,12 +49,6 @@ CARLA_BACKEND_START_NAMESPACE | |||
const unsigned short MAX_MIDI_EVENTS = 512; | |||
const unsigned short MAX_POST_EVENTS = 152; | |||
const char* const CARLA_BRIDGE_MSG_HIDE_GUI = "CarlaBridgeHideGUI"; //!< Plugin -> Host call, tells host GUI is now hidden | |||
const char* const CARLA_BRIDGE_MSG_SAVED = "CarlaBridgeSaved"; //!< Plugin -> Host call, tells host state is saved | |||
const char* const CARLA_BRIDGE_MSG_SAVE_NOW = "CarlaBridgeSaveNow"; //!< Host -> Plugin call, tells plugin to save state now | |||
const char* const CARLA_BRIDGE_MSG_SET_CHUNK = "CarlaBridgeSetChunk"; //!< Host -> Plugin call, tells plugin to set chunk in file \a value | |||
const char* const CARLA_BRIDGE_MSG_SET_CUSTOM = "CarlaBridgeSetCustom"; //!< Host -> Plugin call, tells plugin to set a custom data set using \a value ("type·key·rvalue").\n If \a type is 'chunk' or 'binary' \a rvalue refers to chunk file. | |||
#ifndef BUILD_BRIDGE | |||
enum PluginBridgeInfoType { | |||
PluginBridgeAudioCount, | |||
@@ -68,14 +62,14 @@ enum PluginBridgeInfoType { | |||
PluginBridgeParameterRanges, | |||
PluginBridgeProgramInfo, | |||
PluginBridgeMidiProgramInfo, | |||
PluginBridgeConfigure, | |||
PluginBridgeSetParameterValue, | |||
PluginBridgeSetDefaultValue, | |||
PluginBridgeSetProgram, | |||
PluginBridgeSetMidiProgram, | |||
PluginBridgeSetCustomData, | |||
PluginBridgeSetChunkData, | |||
PluginBridgeUpdateNow, | |||
PluginBridgeSaved | |||
PluginBridgeUpdateNow | |||
}; | |||
#endif | |||
@@ -4,8 +4,8 @@ | |||
# Created by falkTX | |||
# | |||
CXX ?= g++ | |||
STRIP ?= strip | |||
CXX ?= g++ | |||
STRIP ?= strip | |||
BASE_FLAGS = -O2 -ffast-math -fomit-frame-pointer -mtune=generic -msse -mfpmath=sse -Wall | |||
@@ -416,6 +416,6 @@ doc: carla_bridge.doxygen | |||
doxygen $< | |||
clean: | |||
rm -f *.o *.dll *.so *.exe | |||
rm -f *.o *.so *.exe | |||
rm -f carla-bridge-lv2-gtk2 carla-bridge-lv2-gtk3 carla-bridge-lv2-qt4 carla-bridge-lv2-x11 carla-bridge-vst-x11 | |||
rm -f carla-bridge-posix32 carla-bridge-posix64 |
@@ -4,7 +4,7 @@ | |||
# Created by falkTX | |||
# | |||
CXX ?= g++ | |||
CXX ?= g++ | |||
BASE_FLAGS = -O0 -g | |||
@@ -415,6 +415,6 @@ doc: carla_bridge.doxygen | |||
doxygen $< | |||
clean: | |||
rm -f *.o *.dll *.so *.exe | |||
rm -f *.o *.so *.exe | |||
rm -f carla-bridge-lv2-gtk2 carla-bridge-lv2-gtk3 carla-bridge-lv2-qt4 carla-bridge-lv2-x11 carla-bridge-vst-x11 | |||
rm -f carla-bridge-posix32 carla-bridge-posix64 |
@@ -328,6 +328,8 @@ private: | |||
#ifdef BUILD_BRIDGE_UI | |||
char* m_filename; | |||
void* m_lib; | |||
#else | |||
friend class CarlaPluginClient; | |||
#endif | |||
}; | |||
@@ -19,10 +19,6 @@ | |||
#include "carla_bridge_client.h" | |||
#include "carla_midi.h" | |||
#ifdef BUILD_BRIDGE_PLUGIN | |||
#include "carla_plugin.h" // FIXME - put msg defines somewhere else | |||
#endif | |||
#include <QtCore/QString> | |||
#include <QtCore/QStringList> | |||
@@ -20,6 +20,7 @@ | |||
#include "carla_bridge_client.h" | |||
#include "carla_plugin.h" | |||
#include <QtCore/QDir> | |||
#include <QtCore/QFile> | |||
#include <QtCore/QTimerEvent> | |||
#include <QtGui/QApplication> | |||
@@ -187,29 +188,34 @@ public: | |||
{ | |||
qDebug("CarlaPluginClient::saveNow()"); | |||
Q_ASSERT(plugin); | |||
Q_ASSERT(engine); | |||
if (! plugin) | |||
if (! (plugin && engine)) | |||
return; | |||
plugin->prepareForSave(); | |||
#if 0 | |||
for (uint32_t i=0; i < CARLA_PLUGIN->customDataCount(); i++) | |||
for (uint32_t i=0; i < plugin->customDataCount(); i++) | |||
{ | |||
const CustomData* const cdata = CARLA_PLUGIN->customData(i); | |||
osc_send_bridge_custom_data(customdatatype2str(cdata->type), cdata->key, cdata->value); | |||
const CarlaBackend::CustomData* const cdata = plugin->customData(i); | |||
engine->osc_send_bridge_set_custom_data(CarlaBackend::getCustomDataTypeString(cdata->type), cdata->key, cdata->value); | |||
} | |||
if (CARLA_PLUGIN->hints() & PLUGIN_USES_CHUNKS) | |||
if (plugin->hints() & CarlaBackend::PLUGIN_USES_CHUNKS) | |||
{ | |||
void* data = nullptr; | |||
int32_t dataSize = CARLA_PLUGIN->chunkData(&data); | |||
int32_t dataSize = plugin->chunkData(&data); | |||
if (data && dataSize >= 4) | |||
{ | |||
QString filePath; | |||
filePath += "/tmp/.CarlaChunk_"; | |||
filePath += CARLA_PLUGIN->name(); | |||
filePath = QDir::tempPath(); | |||
#ifdef Q_OS_WIN | |||
filePath += "\\.CarlaChunk_"; | |||
#else | |||
filePath += "/.CarlaChunk_"; | |||
#endif | |||
filePath += plugin->name(); | |||
QFile file(filePath); | |||
@@ -218,13 +224,12 @@ public: | |||
QByteArray chunk((const char*)data, dataSize); | |||
file.write(chunk); | |||
file.close(); | |||
osc_send_bridge_chunk_data(filePath.toUtf8().constData()); | |||
engine->osc_send_bridge_set_chunk_data(filePath.toUtf8().constData()); | |||
} | |||
} | |||
} | |||
osc_send_configure(CARLA_BRIDGE_MSG_SAVED, ""); | |||
#endif | |||
engine->osc_send_bridge_configure(CarlaBackend::CARLA_BRIDGE_MSG_SAVED, ""); | |||
} | |||
void setCustomData(const char* const type, const char* const key, const char* const value) | |||
@@ -267,7 +272,6 @@ public: | |||
return; | |||
plugin->idleGui(); | |||
//plugin->showGui(true); | |||
} | |||
void showGui(const bool yesNo) | |||
@@ -287,42 +291,49 @@ public: | |||
void handleCallback(const CarlaBackend::CallbackType action, const int value1, const int value2, const double value3) | |||
{ | |||
qDebug("CarlaPluginClient::handleCallback(%s, %i, %i, %g)", CarlaBackend::CallbackType2str(action), value1, value2, value3); | |||
Q_ASSERT(engine); | |||
if (! engine) | |||
return; | |||
// FIXME - those OSC calls should be on the engine | |||
switch (action) | |||
{ | |||
case CarlaBackend::CALLBACK_PARAMETER_VALUE_CHANGED: | |||
engine->osc_send_bridge_set_parameter_value(value1, value3); | |||
break; | |||
case CarlaBackend::CALLBACK_PROGRAM_CHANGED: | |||
engine->osc_send_bridge_set_program(value1); | |||
break; | |||
case CarlaBackend::CALLBACK_MIDI_PROGRAM_CHANGED: | |||
engine->osc_send_bridge_set_midi_program(value1); | |||
break; | |||
case CarlaBackend::CALLBACK_NOTE_ON: | |||
{ | |||
//uint8_t mdata[4] = { 0, MIDI_STATUS_NOTE_ON, (uint8_t)value1, (uint8_t)value2 }; | |||
//osc_send_midi(mdata); | |||
break; | |||
} | |||
case CarlaBackend::CALLBACK_NOTE_OFF: | |||
{ | |||
//uint8_t mdata[4] = { 0, MIDI_STATUS_NOTE_OFF, (uint8_t)value1, (uint8_t)value2 }; | |||
//osc_send_midi(mdata); | |||
break; | |||
} | |||
case CarlaBackend::CALLBACK_SHOW_GUI: | |||
//if (value1 == 0) | |||
//sendOscConfigure(CarlaBackend::CARLA_BRIDGE_MSG_HIDE_GUI, ""); | |||
//quequeMessage(MESSAGE_QUIT, 0, 0, 0.0); | |||
if (value1 == 0) | |||
engine->osc_send_bridge_configure(CarlaBackend::CARLA_BRIDGE_MSG_HIDE_GUI, ""); | |||
break; | |||
case CarlaBackend::CALLBACK_RESIZE_GUI: | |||
qDebug("resize callback-------------------------------------------------------------------------------"); | |||
quequeMessage(MESSAGE_RESIZE_GUI, value1, value2, 0.0); | |||
//if (m_toolkit) | |||
// m_toolkit->resize(value1, value2); | |||
if (m_toolkit) | |||
m_toolkit->resize(value1, value2); | |||
break; | |||
case CarlaBackend::CALLBACK_RELOAD_PARAMETERS: | |||
//if (CARLA_PLUGIN) | |||
//{ | |||
@@ -332,14 +343,14 @@ public: | |||
// } | |||
//} | |||
break; | |||
case CarlaBackend::CALLBACK_QUIT: | |||
//quequeMessage(MESSAGE_QUIT, 0, 0, 0.0); | |||
break; | |||
default: | |||
break; | |||
} | |||
Q_UNUSED(value1); | |||
Q_UNUSED(value2); | |||
Q_UNUSED(value3); | |||
} | |||
@@ -382,6 +393,14 @@ public: | |||
QApplication::exec(); | |||
} | |||
void killMsgTimer() | |||
{ | |||
Q_ASSERT(msgTimer != 0); | |||
killTimer(msgTimer); | |||
msgTimer = 0; | |||
} | |||
protected: | |||
void timerEvent(QTimerEvent* const event) | |||
{ | |||
@@ -395,7 +414,10 @@ protected: | |||
m_client->idle(); | |||
if (! m_client->runMessages()) | |||
killTimer(msgTimer); | |||
{ | |||
msgTimer = 0; | |||
return; | |||
} | |||
} | |||
} | |||
@@ -449,6 +471,7 @@ public: | |||
{ | |||
m_client->sendOscUpdate(); | |||
m_client->sendOscBridgeUpdate(); | |||
app->setQuitOnLastWindowClosed(false); | |||
} | |||
app->exec((CarlaPluginClient*)client); | |||
@@ -469,6 +492,8 @@ public: | |||
if (app) | |||
{ | |||
app->killMsgTimer(); | |||
if (! app->closingDown()) | |||
app->quit(); | |||
@@ -492,11 +517,11 @@ public: | |||
{ | |||
qDebug("CarlaToolkitPlugin::hide()"); | |||
if (dialog) | |||
dialog->hide(); | |||
if (m_client) | |||
((CarlaPluginClient*)m_client)->showGui(false); | |||
if (dialog) | |||
dialog->show(); | |||
} | |||
void resize(int width, int height) | |||
@@ -674,15 +699,18 @@ int main(int argc, char* argv[]) | |||
engine.removeAllPlugins(); | |||
engine.close(); | |||
// Close OSC | |||
if (useOsc) | |||
{ | |||
// Close OSC | |||
client.sendOscExiting(); | |||
client.oscClose(); | |||
// toolkit can't be closed manually, only by host | |||
} | |||
else | |||
{ | |||
// Close toolkit | |||
toolkit.quit(); | |||
} | |||
// Close toolkit | |||
toolkit.quit(); | |||
return ret; | |||
} | |||
@@ -30,7 +30,8 @@ INCLUDEPATH = .. \ | |||
../../carla-includes | |||
LIBS = \ | |||
../../carla-lilv/carla_lilv.a | |||
../../carla-lilv/carla_lilv.a \ | |||
../../carla-rtmempool/carla_rtmempool.a | |||
DEFINES = QTCREATOR_TEST | |||
DEFINES += BUILD_BRIDGE BUILD_BRIDGE_UI BRIDGE_LV2 BRIDGE_LV2_GTK2 | |||
@@ -30,7 +30,8 @@ INCLUDEPATH = .. \ | |||
../../carla-includes | |||
LIBS = \ | |||
../../carla-lilv/carla_lilv.a | |||
../../carla-lilv/carla_lilv.a \ | |||
../../carla-rtmempool/carla_rtmempool.a | |||
DEFINES = DEBUG | |||
DEFINES += BUILD_BRIDGE BUILD_BRIDGE_UI BRIDGE_LV2 BRIDGE_LV2_QT4 | |||
@@ -30,7 +30,8 @@ INCLUDEPATH = .. \ | |||
../../carla-includes | |||
LIBS = \ | |||
../../carla-lilv/carla_lilv.a | |||
../../carla-lilv/carla_lilv.a \ | |||
../../carla-rtmempool/carla_rtmempool.a | |||
DEFINES = DEBUG | |||
DEFINES += BUILD_BRIDGE BUILD_BRIDGE_UI BRIDGE_LV2 BRIDGE_LV2_X11 | |||
@@ -30,6 +30,11 @@ struct CarlaOscData { | |||
const char* path; | |||
lo_address source; | |||
lo_address target; | |||
CarlaOscData() | |||
: path(nullptr), | |||
source(nullptr), | |||
target(nullptr) {} | |||
}; | |||
static inline | |||