@@ -1,11 +1,7 @@ | |||
# Carla TODO | |||
MAKEFILE: | |||
- "strip" usage | |||
GENERAL: | |||
- add direct program access on ui-dialogs (needed for standalone bridges), maybe add extra buttons too (reset plugin, fix ui size) | |||
- implement osc-based uis in bridge mode | |||
- implement midi-learn (new dialog) | |||
- implement midi-cc automation special rules (invert, half, logarithmic, etc) | |||
- allow to change position of plugins (up/down) | |||
@@ -28,7 +24,6 @@ LADSPA: | |||
DSSI: | |||
LV2: | |||
- complete lv2-atom messages support | |||
- complete lv2-worker support | |||
VST: | |||
@@ -74,11 +74,16 @@ CarlaPluginGui::~CarlaPluginGui() | |||
if (fOptions.parented) | |||
{ | |||
CARLA_ASSERT(fContainer != nullptr); | |||
if (fContainer != nullptr) | |||
{ | |||
#ifdef Q_WS_X11 | |||
delete (QX11EmbedContainer*)fContainer; | |||
delete (QX11EmbedContainer*)fContainer; | |||
#else | |||
delete fContainer; | |||
delete fContainer; | |||
#endif | |||
fContainer = nullptr; | |||
} | |||
} | |||
} | |||
@@ -21,6 +21,7 @@ endif | |||
# Common | |||
LINK_FLAGS += $(shell pkg-config --libs liblo) | |||
LINK_FLAGS += -lpthread | |||
ifeq ($(HAVE_QT4),true) | |||
LINK_FLAGS += $(shell pkg-config --libs QtCore QtGui QtXml) | |||
@@ -18,7 +18,6 @@ | |||
#include "CarlaBridgeClient.hpp" | |||
#ifdef BUILD_BRIDGE_UI | |||
# include "CarlaBridgeToolkit.hpp" | |||
# include "CarlaLibUtils.hpp" | |||
#endif | |||
@@ -54,16 +53,9 @@ bool CarlaBridgeClient::uiInit(const char* const, const char* const) | |||
{ | |||
carla_debug("CarlaBridgeClient::uiInit()"); | |||
// Test for single init | |||
{ | |||
static bool initiated = false; | |||
CARLA_ASSERT(! initiated); | |||
initiated = true; | |||
} | |||
fUI.init(); | |||
return false; | |||
return true; | |||
} | |||
void CarlaBridgeClient::uiClose() | |||
@@ -75,6 +67,44 @@ void CarlaBridgeClient::uiClose() | |||
fUI.close(); | |||
} | |||
// --------------------------------------------------------------------- | |||
// ui toolkit | |||
void CarlaBridgeClient::toolkitShow() | |||
{ | |||
carla_debug("CarlaBridgeClient::toolkitShow()"); | |||
fUI.toolkit->show(); | |||
} | |||
void CarlaBridgeClient::toolkitHide() | |||
{ | |||
carla_debug("CarlaBridgeClient::toolkitHide()"); | |||
fUI.toolkit->hide(); | |||
} | |||
void CarlaBridgeClient::toolkitResize(const int width, const int height) | |||
{ | |||
carla_debug("CarlaBridgeClient::toolkitResize(%i, %i)", width, height); | |||
fUI.toolkit->resize(width, height); | |||
} | |||
void CarlaBridgeClient::toolkitExec(const bool showGui) | |||
{ | |||
carla_debug("CarlaBridgeClient::toolkitExec(%s)", bool2str(showGui)); | |||
fUI.toolkit->exec(showGui); | |||
} | |||
void CarlaBridgeClient::toolkitQuit() | |||
{ | |||
carla_debug("CarlaBridgeClient::toolkitQuit()"); | |||
fUI.close(); | |||
} | |||
#endif | |||
// --------------------------------------------------------------------- | |||
@@ -82,6 +112,7 @@ void CarlaBridgeClient::uiClose() | |||
void CarlaBridgeClient::oscInit(const char* const url) | |||
{ | |||
CARLA_ASSERT(fOscData == nullptr); | |||
carla_debug("CarlaBridgeClient::oscInit(\"%s\")", url); | |||
kOsc.init(url); | |||
@@ -144,46 +175,6 @@ void CarlaBridgeClient::sendOscBridgeError(const char* const error) | |||
} | |||
#endif | |||
#ifdef BUILD_BRIDGE_UI | |||
// --------------------------------------------------------------------- | |||
// toolkit | |||
void CarlaBridgeClient::toolkitShow() | |||
{ | |||
carla_debug("CarlaBridgeClient::toolkitShow()"); | |||
fUI.toolkit->show(); | |||
} | |||
void CarlaBridgeClient::toolkitHide() | |||
{ | |||
carla_debug("CarlaBridgeClient::toolkitHide()"); | |||
fUI.toolkit->hide(); | |||
} | |||
void CarlaBridgeClient::toolkitResize(const int width, const int height) | |||
{ | |||
carla_debug("CarlaBridgeClient::toolkitResize(%i, %i)", width, height); | |||
fUI.toolkit->resize(width, height); | |||
} | |||
void CarlaBridgeClient::toolkitExec(const bool showGui) | |||
{ | |||
carla_debug("CarlaBridgeClient::toolkitExec(%s)", bool2str(showGui)); | |||
fUI.toolkit->exec(showGui); | |||
} | |||
void CarlaBridgeClient::toolkitQuit() | |||
{ | |||
carla_debug("CarlaBridgeClient::toolkitQuit()"); | |||
fUI.close(); | |||
} | |||
#endif | |||
// --------------------------------------------------------------------- | |||
void CarlaBridgeClient::sendOscConfigure(const char* const key, const char* const value) | |||
@@ -265,6 +256,7 @@ void CarlaBridgeClient::sendOscLv2UridMap(const uint32_t urid, const char* const | |||
#ifdef BUILD_BRIDGE_UI | |||
void* CarlaBridgeClient::getContainerId() | |||
{ | |||
carla_debug("CarlaBridgeClient::getContainerId()"); | |||
return fUI.toolkit->getContainerId(); | |||
} | |||
@@ -272,6 +264,7 @@ bool CarlaBridgeClient::uiLibOpen(const char* const filename) | |||
{ | |||
CARLA_ASSERT(fUI.lib == nullptr); | |||
CARLA_ASSERT(filename != nullptr); | |||
carla_debug("CarlaBridgeClient::uiLibOpen(\"%s\")", filename); | |||
fUI.lib = lib_open(filename); | |||
fUI.filename = filename; | |||
@@ -282,6 +275,7 @@ bool CarlaBridgeClient::uiLibOpen(const char* const filename) | |||
bool CarlaBridgeClient::uiLibClose() | |||
{ | |||
CARLA_ASSERT(fUI.lib != nullptr); | |||
carla_debug("CarlaBridgeClient::uiLibClose()"); | |||
if (fUI.lib == nullptr) | |||
return false; | |||
@@ -294,6 +288,7 @@ bool CarlaBridgeClient::uiLibClose() | |||
void* CarlaBridgeClient::uiLibSymbol(const char* const symbol) | |||
{ | |||
CARLA_ASSERT(fUI.lib != nullptr); | |||
carla_debug("CarlaBridgeClient::uiLibSymbol(\"%s\")", symbol); | |||
if (fUI.lib == nullptr) | |||
return nullptr; | |||
@@ -303,6 +298,8 @@ void* CarlaBridgeClient::uiLibSymbol(const char* const symbol) | |||
const char* CarlaBridgeClient::uiLibError() | |||
{ | |||
carla_debug("CarlaBridgeClient::uiLibError()"); | |||
return lib_error(fUI.filename); | |||
} | |||
#endif | |||
@@ -19,7 +19,10 @@ | |||
#define __CARLA_BRIDGE_CLIENT_HPP__ | |||
#include "CarlaBridgeOsc.hpp" | |||
#include "CarlaBridgeToolkit.hpp" | |||
#ifdef BUILD_BRIDGE_UI | |||
# include "CarlaBridgeToolkit.hpp" | |||
#endif | |||
CARLA_BRIDGE_START_NAMESPACE | |||
@@ -27,13 +30,6 @@ CARLA_BRIDGE_START_NAMESPACE | |||
} // Fix editor indentation | |||
#endif | |||
/*! | |||
* @defgroup CarlaBridgeClient Carla Bridge Client | |||
* | |||
* The Carla Bridge Client. | |||
* @{ | |||
*/ | |||
class CarlaBridgeClient | |||
{ | |||
public: | |||
@@ -53,6 +49,24 @@ public: | |||
virtual void* getWidget() const = 0; | |||
virtual bool isResizable() const = 0; | |||
virtual bool needsReparent() const = 0; | |||
// --------------------------------------------------------------------- | |||
// ui processing | |||
virtual void setParameter(const int32_t rindex, const float value) = 0; | |||
virtual void setProgram(const uint32_t index) = 0; | |||
virtual void setMidiProgram(const uint32_t bank, const uint32_t program) = 0; | |||
virtual void noteOn(const uint8_t channel, const uint8_t note, const uint8_t velo) = 0; | |||
virtual void noteOff(const uint8_t channel, const uint8_t note) = 0; | |||
// --------------------------------------------------------------------- | |||
// ui toolkit | |||
void toolkitShow(); | |||
void toolkitHide(); | |||
void toolkitResize(const int width, const int height); | |||
void toolkitExec(const bool showGui); | |||
void toolkitQuit(); | |||
#endif | |||
#ifdef BUILD_BRIDGE_PLUGIN | |||
@@ -64,18 +78,6 @@ public: | |||
virtual void setChunkData(const char* const filePath) = 0; | |||
#endif | |||
// --------------------------------------------------------------------- | |||
// processing | |||
virtual void setParameter(const int32_t rindex, const float value) = 0; | |||
#ifndef BUILD_BRIDGE_PLUGIN | |||
virtual void setProgram(const uint32_t index) = 0; | |||
virtual void setMidiProgram(const uint32_t bank, const uint32_t program) = 0; | |||
virtual void noteOn(const uint8_t channel, const uint8_t note, const uint8_t velo) = 0; | |||
virtual void noteOff(const uint8_t channel, const uint8_t note) = 0; | |||
#endif | |||
// --------------------------------------------------------------------- | |||
// osc stuff | |||
@@ -91,17 +93,6 @@ public: | |||
void sendOscBridgeError(const char* const error); | |||
#endif | |||
#ifdef BUILD_BRIDGE_UI | |||
// --------------------------------------------------------------------- | |||
// toolkit | |||
void toolkitShow(); | |||
void toolkitHide(); | |||
void toolkitResize(const int width, const int height); | |||
void toolkitExec(const bool showGui); | |||
void toolkitQuit(); | |||
#endif | |||
// --------------------------------------------------------------------- | |||
protected: | |||
@@ -142,7 +133,10 @@ private: | |||
UI(CarlaBridgeToolkit* const toolkit_) | |||
: toolkit(toolkit_), | |||
lib(nullptr), | |||
quit(false) {} | |||
quit(false) | |||
{ | |||
CARLA_ASSERT(toolkit != nullptr); | |||
} | |||
~UI() | |||
{ | |||
@@ -161,6 +155,12 @@ private: | |||
toolkit->quit(); | |||
} | |||
# ifdef CARLA_PROPER_CPP11_SUPPORT | |||
UI() = delete; | |||
UI(UI&) = delete; | |||
UI(const UI&) = delete; | |||
# endif | |||
} fUI; | |||
#else | |||
friend class CarlaPluginClient; | |||
@@ -171,8 +171,6 @@ private: | |||
CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaBridgeClient) | |||
}; | |||
/**@}*/ | |||
CARLA_BRIDGE_END_NAMESPACE | |||
#endif // __CARLA_BRIDGE_CLIENT_HPP__ |
@@ -15,10 +15,8 @@ | |||
* For a full copy of the GNU General Public License see the GPL.txt file | |||
*/ | |||
#include "CarlaBridgeOsc.hpp" | |||
#include "CarlaBridgeClient.hpp" | |||
#include "CarlaMIDI.h" | |||
#include "CarlaUtils.hpp" | |||
CARLA_BRIDGE_START_NAMESPACE | |||
@@ -41,6 +39,7 @@ CarlaBridgeOsc::~CarlaBridgeOsc() | |||
CARLA_ASSERT(fName.isEmpty()); | |||
CARLA_ASSERT(fServerPath.isEmpty()); | |||
CARLA_ASSERT(fServer == nullptr); | |||
CARLA_ASSERT(fControlData.source == nullptr); // must never be used | |||
carla_debug("CarlaBridgeOsc::~CarlaBridgeOsc()"); | |||
} | |||
@@ -100,6 +99,7 @@ void CarlaBridgeOsc::close() | |||
CARLA_ASSERT(fName.isNotEmpty()); | |||
CARLA_ASSERT(fServerPath.isNotEmpty()); | |||
CARLA_ASSERT(fServer != nullptr); | |||
CARLA_ASSERT(fControlData.source == nullptr); // must never be used | |||
carla_debug("CarlaBridgeOsc::close()"); | |||
fName.clear(); | |||
@@ -151,8 +151,8 @@ int CarlaBridgeOsc::handleMessage(const char* const path, const int argc, const | |||
} | |||
// Get method from path | |||
char method[32] = { 0 }; | |||
std::strncpy(method, path + (nameSize + 2), 31); | |||
char method[32+1] = { '\0' }; | |||
std::strncpy(method, path + (nameSize + 2), 32); | |||
if (method[0] == '\0') | |||
{ | |||
@@ -160,19 +160,18 @@ int CarlaBridgeOsc::handleMessage(const char* const path, const int argc, const | |||
return 1; | |||
} | |||
// Common OSC methods | |||
#ifdef BUILD_BRIDGE_UI | |||
// Common UI methods | |||
if (std::strcmp(method, "configure") == 0) | |||
return handleMsgConfigure(argc, argv, types); | |||
if (std::strcmp(method, "control") == 0) | |||
return handleMsgControl(argc, argv, types); | |||
#ifndef BUILD_BRIDGE_PLUGIN | |||
if (std::strcmp(method, "program") == 0) | |||
return handleMsgProgram(argc, argv, types); | |||
if (std::strcmp(method, "midi-program") == 0) | |||
return handleMsgMidiProgram(argc, argv, types); | |||
if (std::strcmp(method, "midi") == 0) | |||
return handleMsgMidi(argc, argv, types); | |||
#endif | |||
if (std::strcmp(method, "sample-rate") == 0) | |||
return 0; // unused | |||
if (std::strcmp(method, "show") == 0) | |||
@@ -182,23 +181,23 @@ int CarlaBridgeOsc::handleMessage(const char* const path, const int argc, const | |||
if (std::strcmp(method, "quit") == 0) | |||
return handleMsgQuit(); | |||
#ifdef BRIDGE_LV2 | |||
# ifdef BRIDGE_LV2 | |||
// LV2 UI methods | |||
if (std::strcmp(method, "lv2_atom_transfer") == 0) | |||
return handleMsgLv2AtomTransfer(argc, argv, types); | |||
if (std::strcmp(method, "lv2_urid_map") == 0) | |||
return handleMsgLv2UridMap(argc, argv, types); | |||
# endif | |||
#endif | |||
#ifdef BUILD_BRIDGE_PLUGIN | |||
// Plugin methods | |||
if (std::strcmp(method, "plugin_save_now") == 0) | |||
return handleMsgPluginSaveNow(); | |||
// TODO: | |||
//if (std::strcmp(method, "plugin_set_parameter_midi_channel") == 0) | |||
// return handleMsgPluginSetParameterMidiChannel(argv); | |||
//if (std::strcmp(method, "plugin_set_parameter_midi_cc") == 0) | |||
// return handleMsgPluginSetParameterMidiCC(argv); | |||
if (std::strcmp(method, "plugin_set_parameter_midi_channel") == 0) | |||
return handleMsgPluginSetParameterMidiChannel(argv); | |||
if (std::strcmp(method, "plugin_set_parameter_midi_cc") == 0) | |||
return handleMsgPluginSetParameterMidiCC(argv); | |||
if (std::strcmp(method, "plugin_set_chunk") == 0) | |||
return handleMsgPluginSetChunk(argc, argv, types); | |||
if (std::strcmp(method, "plugin_set_custom_data") == 0) | |||
@@ -209,6 +208,7 @@ int CarlaBridgeOsc::handleMessage(const char* const path, const int argc, const | |||
return 1; | |||
} | |||
#ifdef BUILD_BRIDGE_UI | |||
int CarlaBridgeOsc::handleMsgConfigure(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
{ | |||
CARLA_ASSERT(kClient != nullptr); | |||
@@ -247,7 +247,6 @@ int CarlaBridgeOsc::handleMsgControl(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
return 0; | |||
} | |||
#ifndef BUILD_BRIDGE_PLUGIN | |||
int CarlaBridgeOsc::handleMsgProgram(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
{ | |||
CARLA_ASSERT(kClient != nullptr); | |||
@@ -340,9 +339,7 @@ int CarlaBridgeOsc::handleMsgMidi(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
return 0; | |||
} | |||
#endif | |||
#ifdef BUILD_BRIDGE_UI | |||
int CarlaBridgeOsc::handleMsgShow() | |||
{ | |||
CARLA_ASSERT(kClient != nullptr); | |||
@@ -381,6 +378,6 @@ int CarlaBridgeOsc::handleMsgQuit() | |||
return 0; | |||
} | |||
#endif | |||
#endif // BUILD_BRIDGE_UI | |||
CARLA_BRIDGE_END_NAMESPACE |
@@ -19,7 +19,6 @@ | |||
#define __CARLA_BRIDGE_OSC_HPP__ | |||
#include "CarlaBridge.hpp" | |||
#include "CarlaJuceUtils.hpp" | |||
#include "CarlaOscUtils.hpp" | |||
#include "CarlaString.hpp" | |||
@@ -97,24 +96,26 @@ private: | |||
int handleMessage(const char* const path, const int argc, const lo_arg* const* const argv, const char* const types, const lo_message msg); | |||
#ifdef BUILD_BRIDGE_UI | |||
int handleMsgConfigure(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
int handleMsgControl(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
#ifndef BUILD_BRIDGE_PLUGIN | |||
int handleMsgProgram(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
int handleMsgMidiProgram(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
int handleMsgMidi(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
#endif | |||
int handleMsgShow(); | |||
int handleMsgHide(); | |||
int handleMsgQuit(); | |||
#ifdef BRIDGE_LV2 | |||
# ifdef BRIDGE_LV2 | |||
int handleMsgLv2AtomTransfer(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
int handleMsgLv2UridMap(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
# endif | |||
#endif | |||
#ifdef BUILD_BRIDGE_PLUGIN | |||
int handleMsgPluginSaveNow(); | |||
int handleMsgPluginSetParameterMidiChannel(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
int handleMsgPluginSetParameterMidiCC(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
int handleMsgPluginSetChunk(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
int handleMsgPluginSetCustomData(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
#endif | |||
@@ -16,7 +16,6 @@ | |||
*/ | |||
#include "CarlaBridgeToolkit.hpp" | |||
#include "CarlaUtils.hpp" | |||
CARLA_BRIDGE_START_NAMESPACE | |||
@@ -27,13 +27,6 @@ CARLA_BRIDGE_START_NAMESPACE | |||
} // Fix editor indentation | |||
#endif | |||
/*! | |||
* @defgroup CarlaBridgeToolkit Carla Bridge Toolkit | |||
* | |||
* The Carla Bridge Toolkit. | |||
* @{ | |||
*/ | |||
class CarlaBridgeToolkit | |||
{ | |||
public: | |||
@@ -59,8 +52,6 @@ protected: | |||
CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaBridgeToolkit) | |||
}; | |||
/**@}*/ | |||
CARLA_BRIDGE_END_NAMESPACE | |||
#endif // __CARLA_BRIDGE_TOOLKIT_HPP__ |
@@ -38,7 +38,9 @@ static const char* const appName = "Carla-UIs"; | |||
#endif | |||
static int gargc = 0; | |||
static char** gargv = {}; | |||
static char** gargv = nullptr; | |||
// QSettings settings("falkTX", appName); | |||
// ------------------------------------------------------------------------- | |||
@@ -46,8 +48,7 @@ class CarlaToolkitGtk : public CarlaBridgeToolkit | |||
{ | |||
public: | |||
CarlaToolkitGtk(CarlaBridgeClient* const client, const char* const uiTitle) | |||
: CarlaBridgeToolkit(client, uiTitle), | |||
settings("falkTX", appName) | |||
: CarlaBridgeToolkit(client, uiTitle) | |||
{ | |||
carla_debug("CarlaToolkitGtk::CarlaToolkitGtk(%p, \"%s\")", client, uiTitle); | |||
@@ -182,7 +183,6 @@ public: | |||
protected: | |||
GtkWidget* window; | |||
QSettings settings; | |||
gint lastX, lastY, lastWidth, lastHeight; | |||
@@ -17,7 +17,7 @@ | |||
#include "CarlaBridgeClient.hpp" | |||
#include "CarlaBridgeToolkit.hpp" | |||
//#include "CarlaStyle.hpp" | |||
#include "CarlaStyle.hpp" | |||
#include <QtCore/QSettings> | |||
#include <QtCore/QThread> | |||
@@ -69,56 +69,52 @@ static char* qargv[0] = {}; | |||
// ------------------------------------------------------------------------- | |||
class CarlaBridgeToolkitQt: public CarlaBridgeToolkit, | |||
public QObject | |||
class CarlaBridgeToolkitQt: public QObject, | |||
public CarlaBridgeToolkit | |||
{ | |||
Q_OBJECT | |||
public: | |||
CarlaBridgeToolkitQt(CarlaBridgeClient* const client, const char* const uiTitle) | |||
: CarlaBridgeToolkit(client, uiTitle), | |||
QObject(nullptr) | |||
: QObject(nullptr), | |||
CarlaBridgeToolkit(client, uiTitle), | |||
fApp(nullptr), | |||
fWindow(nullptr), | |||
#ifdef BRIDGE_CONTAINER | |||
fEmbedContainer(nullptr), | |||
#endif | |||
fMsgTimer(0) | |||
{ | |||
carla_debug("CarlaBridgeToolkitQt::CarlaBridgeToolkitQt(%p, \"%s\")", client, uiTitle); | |||
app = nullptr; | |||
window = nullptr; | |||
msgTimer = 0; | |||
needsResize = false; | |||
nextWidth = 0; | |||
nextHeight = 0; | |||
#ifdef BRIDGE_CONTAINER | |||
embedContainer = nullptr; | |||
#endif | |||
connect(this, SIGNAL(setSizeSafeSignal(int,int)), SLOT(setSizeSafeSlot(int,int))); | |||
} | |||
~CarlaBridgeToolkitQt() override | |||
{ | |||
CARLA_ASSERT(! app); | |||
CARLA_ASSERT(! window); | |||
CARLA_ASSERT(! msgTimer); | |||
CARLA_ASSERT(fApp == nullptr); | |||
CARLA_ASSERT(fWindow == nullptr); | |||
CARLA_ASSERT(fMsgTimer == 0); | |||
carla_debug("CarlaBridgeToolkitQt::~CarlaBridgeToolkitQt()"); | |||
} | |||
void init() override | |||
{ | |||
CARLA_ASSERT(! app); | |||
CARLA_ASSERT(! window); | |||
CARLA_ASSERT(! msgTimer); | |||
CARLA_ASSERT(fApp == nullptr); | |||
CARLA_ASSERT(fWindow == nullptr); | |||
CARLA_ASSERT(fMsgTimer == 0); | |||
carla_debug("CarlaBridgeToolkitQt::init()"); | |||
app = new QApplication(qargc, qargv); | |||
fApp = new QApplication(qargc, qargv); | |||
#if 0 | |||
{ | |||
QSettings settings("falkTX", "Carla"); | |||
if (settings.value("Main/UseProTheme", true).toBool()) | |||
{ | |||
CarlaStyle* const style(new CarlaStyle()); | |||
app->setStyle(style); | |||
style->ready(app); | |||
fApp->setStyle(style); | |||
style->ready(fApp); | |||
QString color(settings.value("Main/ProThemeColor", "Black").toString()); | |||
@@ -128,229 +124,238 @@ public: | |||
style->setColorScheme(CarlaStyle::COLOR_BLACK); | |||
} | |||
} | |||
#endif | |||
window = new QMainWindow(nullptr); | |||
window->resize(30, 30); | |||
window->hide(); | |||
fWindow = new QMainWindow(nullptr); | |||
fWindow->resize(30, 30); | |||
fWindow->hide(); | |||
} | |||
void exec(const bool showGui) override | |||
{ | |||
CARLA_ASSERT(app); | |||
CARLA_ASSERT(window); | |||
CARLA_ASSERT(kClient); | |||
CARLA_ASSERT(kClient != nullptr); | |||
CARLA_ASSERT(fApp != nullptr); | |||
CARLA_ASSERT(fWindow != nullptr); | |||
carla_debug("CarlaBridgeToolkitQt::exec(%s)", bool2str(showGui)); | |||
#if defined(BRIDGE_QT4) || defined(BRIDGE_QT5) | |||
QWidget* const widget = (QWidget*)kClient->getWidget(); | |||
QWidget* const widget((QWidget*)kClient->getWidget()); | |||
window->setCentralWidget(widget); | |||
window->adjustSize(); | |||
fWindow->setCentralWidget(widget); | |||
fWindow->adjustSize(); | |||
widget->setParent(window); | |||
widget->setParent(fWindow); | |||
widget->show(); | |||
#endif | |||
if (! kClient->isResizable()) | |||
{ | |||
window->setFixedSize(window->width(), window->height()); | |||
fWindow->setFixedSize(fWindow->width(), fWindow->height()); | |||
#ifdef Q_OS_WIN | |||
window->setWindowFlags(window->windowFlags() | Qt::MSWindowsFixedSizeDialogHint); | |||
fWindow->setWindowFlags(fWindow->windowFlags() | Qt::MSWindowsFixedSizeDialogHint); | |||
#endif | |||
} | |||
window->setWindowTitle(kUiTitle); | |||
{ | |||
QSettings settings("falkTX", appName); | |||
if (settings.contains(QString("%1/pos_x").arg(kUiTitle))) | |||
{ | |||
bool hasX, hasY; | |||
int posX = settings.value(QString("%1/pos_x").arg(kUiTitle), window->x()).toInt(&hasX); | |||
int posY = settings.value(QString("%1/pos_y").arg(kUiTitle), window->y()).toInt(&hasY); | |||
const int posX(settings.value(QString("%1/pos_x").arg(kUiTitle), fWindow->x()).toInt(&hasX)); | |||
const int posY(settings.value(QString("%1/pos_y").arg(kUiTitle), fWindow->y()).toInt(&hasY)); | |||
if (hasX && hasY) | |||
window->move(posX, posY); | |||
fWindow->move(posX, posY); | |||
if (kClient->isResizable()) | |||
{ | |||
bool hasWidth, hasHeight; | |||
int width = settings.value(QString("%1/width").arg(kUiTitle), window->width()).toInt(&hasWidth); | |||
int height = settings.value(QString("%1/height").arg(kUiTitle), window->height()).toInt(&hasHeight); | |||
const int width(settings.value(QString("%1/width").arg(kUiTitle), fWindow->width()).toInt(&hasWidth)); | |||
const int height(settings.value(QString("%1/height").arg(kUiTitle), fWindow->height()).toInt(&hasHeight)); | |||
if (hasWidth && hasHeight) | |||
window->resize(width, height); | |||
fWindow->resize(width, height); | |||
} | |||
} | |||
if (settings.value("Engine/UIsAlwaysOnTop", true).toBool()) | |||
fWindow->setWindowFlags(fWindow->windowFlags() | Qt::WindowStaysOnTopHint); | |||
} | |||
fWindow->setWindowTitle(kUiTitle); | |||
if (showGui) | |||
show(); | |||
else | |||
kClient->sendOscUpdate(); | |||
// Timer | |||
msgTimer = startTimer(50); | |||
fMsgTimer = startTimer(50); | |||
// First idle | |||
handleTimeout(); | |||
// Main loop | |||
app->exec(); | |||
fApp->exec(); | |||
} | |||
void quit() override | |||
{ | |||
CARLA_ASSERT(app); | |||
CARLA_ASSERT(kClient != nullptr); | |||
CARLA_ASSERT(fApp != nullptr); | |||
CARLA_ASSERT(fWindow != nullptr); | |||
carla_debug("CarlaBridgeToolkitQt::quit()"); | |||
if (msgTimer != 0) | |||
if (fMsgTimer != 0) | |||
{ | |||
killTimer(msgTimer); | |||
msgTimer = 0; | |||
killTimer(fMsgTimer); | |||
fMsgTimer = 0; | |||
} | |||
if (window != nullptr) | |||
if (fWindow != nullptr) | |||
{ | |||
QSettings settings("falkTX", appName); | |||
settings.setValue(QString("%1/pos_x").arg(kUiTitle), window->x()); | |||
settings.setValue(QString("%1/pos_y").arg(kUiTitle), window->y()); | |||
settings.setValue(QString("%1/width").arg(kUiTitle), window->width()); | |||
settings.setValue(QString("%1/height").arg(kUiTitle), window->height()); | |||
settings.setValue(QString("%1/pos_x").arg(kUiTitle), fWindow->x()); | |||
settings.setValue(QString("%1/pos_y").arg(kUiTitle), fWindow->y()); | |||
settings.setValue(QString("%1/width").arg(kUiTitle), fWindow->width()); | |||
settings.setValue(QString("%1/height").arg(kUiTitle), fWindow->height()); | |||
settings.sync(); | |||
window->close(); | |||
} | |||
fWindow->close(); | |||
#ifdef BRIDGE_CONTAINER | |||
if (embedContainer != nullptr) | |||
{ | |||
embedContainer->close(); | |||
if (fEmbedContainer != nullptr) | |||
{ | |||
fEmbedContainer->close(); | |||
delete embedContainer; | |||
embedContainer = nullptr; | |||
} | |||
delete fEmbedContainer; | |||
fEmbedContainer = nullptr; | |||
} | |||
#endif | |||
if (window != nullptr) | |||
{ | |||
delete window; | |||
window = nullptr; | |||
delete fWindow; | |||
fWindow = nullptr; | |||
} | |||
if (app) | |||
if (fApp != nullptr) | |||
{ | |||
if (! app->closingDown()) | |||
app->quit(); | |||
if (! fApp->closingDown()) | |||
fApp->quit(); | |||
delete app; | |||
app = nullptr; | |||
delete fApp; | |||
fApp = nullptr; | |||
} | |||
} | |||
void show() override | |||
{ | |||
CARLA_ASSERT(window); | |||
CARLA_ASSERT(fWindow != nullptr); | |||
carla_debug("CarlaBridgeToolkitQt::show()"); | |||
if (window) | |||
window->show(); | |||
if (fWindow != nullptr) | |||
fWindow->show(); | |||
} | |||
void hide() override | |||
{ | |||
CARLA_ASSERT(window); | |||
CARLA_ASSERT(fWindow != nullptr); | |||
carla_debug("CarlaBridgeToolkitQt::hide()"); | |||
if (window) | |||
window->hide(); | |||
if (fWindow != nullptr) | |||
fWindow->hide(); | |||
} | |||
void resize(const int width, const int height) override | |||
{ | |||
CARLA_ASSERT(window); | |||
CARLA_ASSERT_INT(width > 0, width); | |||
CARLA_ASSERT_INT(height > 0, height); | |||
carla_debug("CarlaBridgeToolkitQt::resize(%i, %i)", width, height); | |||
if (app->thread() != QThread::currentThread()) | |||
{ | |||
nextWidth = width; | |||
nextHeight = height; | |||
needsResize = true; | |||
if (width <= 0) | |||
return; | |||
if (height <= 0) | |||
return; | |||
} | |||
if (window) | |||
window->setFixedSize(width, height); | |||
#ifdef BRIDGE_CONTAINER | |||
if (embedContainer) | |||
embedContainer->setFixedSize(width, height); | |||
#endif | |||
emit setSizeSafeSignal(width, height); | |||
} | |||
#ifdef BRIDGE_CONTAINER | |||
void* getContainerId() | |||
{ | |||
CARLA_ASSERT(window != nullptr); | |||
CARLA_ASSERT(fWindow != nullptr); | |||
carla_debug("CarlaBridgeToolkitQt::getContainerId()"); | |||
if (embedContainer == nullptr) | |||
if (fEmbedContainer == nullptr) | |||
{ | |||
embedContainer = new QEmbedContainer(window); | |||
fEmbedContainer = new QEmbedContainer(fWindow); | |||
window->setCentralWidget(embedContainer); | |||
window->adjustSize(); | |||
fWindow->setCentralWidget(fEmbedContainer); | |||
fWindow->adjustSize(); | |||
embedContainer->setParent(window); | |||
embedContainer->show(); | |||
fEmbedContainer->setParent(fWindow); | |||
fEmbedContainer->show(); | |||
} | |||
return (void*)embedContainer->winId(); | |||
return (void*)fEmbedContainer->winId(); | |||
} | |||
#endif | |||
protected: | |||
QApplication* app; | |||
QMainWindow* window; | |||
int msgTimer; | |||
bool needsResize; | |||
int nextWidth, nextHeight; | |||
QApplication* fApp; | |||
QMainWindow* fWindow; | |||
#ifdef BRIDGE_CONTAINER | |||
QEmbedContainer* embedContainer; | |||
QEmbedContainer* fEmbedContainer; | |||
#endif | |||
int fMsgTimer; | |||
void handleTimeout() | |||
{ | |||
if (! kClient) | |||
if (kClient == nullptr) | |||
return; | |||
if (needsResize) | |||
{ | |||
kClient->toolkitResize(nextWidth, nextHeight); | |||
needsResize = false; | |||
} | |||
if (kClient->isOscControlRegistered() && ! kClient->oscIdle()) | |||
{ | |||
killTimer(msgTimer); | |||
msgTimer = 0; | |||
killTimer(fMsgTimer); | |||
fMsgTimer = 0; | |||
} | |||
} | |||
private: | |||
void timerEvent(QTimerEvent* const event) | |||
{ | |||
if (event->timerId() == msgTimer) | |||
if (event->timerId() == fMsgTimer) | |||
handleTimeout(); | |||
QObject::timerEvent(event); | |||
} | |||
signals: | |||
void setSizeSafeSignal(int, int); | |||
private slots: | |||
void setSizeSafeSlot(int width, int height) | |||
{ | |||
CARLA_ASSERT(kClient != nullptr && kClient->isResizable()); | |||
CARLA_ASSERT(fWindow != nullptr); | |||
if (kClient == nullptr || fWindow == nullptr) | |||
return; | |||
if (kClient->isResizable()) | |||
fWindow->resize(width, height); | |||
else | |||
fWindow->setFixedSize(width, height); | |||
#ifdef BRIDGE_CONTAINER | |||
if (fEmbedContainer != nullptr) | |||
fEmbedContainer->setFixedSize(width, height); | |||
#endif | |||
} | |||
}; | |||
#include "CarlaBridgeToolkitQt.moc" | |||
// ------------------------------------------------------------------------- | |||
CarlaBridgeToolkit* CarlaBridgeToolkit::createNew(CarlaBridgeClient* const client, const char* const uiTitle) | |||
@@ -20,9 +20,6 @@ | |||
#include "CarlaMIDI.h" | |||
#include "RtList.hpp" | |||
// TODO - remove | |||
#include <vector> | |||
#include <QtCore/QDir> | |||
extern "C" { | |||
@@ -34,11 +31,14 @@ extern "C" { | |||
Lv2WorldClass gLv2World; | |||
// ----------------------------------------------------- | |||
CARLA_BRIDGE_START_NAMESPACE | |||
// ------------------------------------------------------------------------- | |||
#if 0 | |||
} | |||
#endif | |||
// fake values | |||
static uint32_t gBufferSize = 1024; | |||
static double gSampleRate = 44100.0; | |||
@@ -8,20 +8,18 @@ include ../Makefile.mk | |||
# -------------------------------------------------------------- | |||
QT_UI_FLAGS = -I../theme | |||
ifeq ($(HAVE_QT4),true) | |||
QT_UI_FLAGS += $(shell pkg-config --cflags QtGui) | |||
QT_UI_LIBS = $(shell pkg-config --libs QtGui) | |||
QT_UI_FLAGS = $(shell pkg-config --cflags QtGui) | |||
QT_UI_LIBS = $(shell pkg-config --libs QtGui) | |||
else | |||
QT_UI_FLAGS += $(shell pkg-config --cflags Qt5Gui Qt5Widgets) | |||
QT_UI_LIBS = $(shell pkg-config --libs Qt5Gui Qt5Widgets) | |||
QT_UI_FLAGS = $(shell pkg-config --cflags Qt5Gui Qt5Widgets) | |||
QT_UI_LIBS = $(shell pkg-config --libs Qt5Gui Qt5Widgets) | |||
endif | |||
# -------------------------------------------------------------- | |||
BUILD_CXX_FLAGS += -DBUILD_BRIDGE | |||
BUILD_CXX_FLAGS += -I. -I../backend -I../includes -I../utils | |||
BUILD_CXX_FLAGS += -I. -I../backend -I../includes -I../utils -I../theme | |||
BUILD_CXX_FLAGS += $(shell pkg-config --cflags liblo) | |||
LINK_FLAGS += $(shell pkg-config --libs liblo) | |||
@@ -37,7 +35,7 @@ endif | |||
# Plugin bridges | |||
BUILD_PLUGIN_FLAGS = $(BUILD_CXX_FLAGS) -DBUILD_BRIDGE_PLUGIN | |||
BUILD_PLUGIN_FLAGS += -I../backend/engine -I../backend/plugin -I../libs -I../theme | |||
BUILD_PLUGIN_FLAGS += -I../backend/engine -I../backend/plugin -I../libs | |||
LINK_PLUGIN_FLAGS = $(LINK_FLAGS) -lpthread | |||
ifeq ($(CARLA_PLUGIN_SUPPORT),true) | |||
@@ -58,22 +56,22 @@ endif | |||
# -------------------------------------------------------------- | |||
# Plugin bridges (POSIX) | |||
POSIX_BUILD_FLAGS = $(BUILD_PLUGIN_FLAGS) | |||
POSIX_32BIT_FLAGS = $(32BIT_FLAGS) -L/usr/lib32 -L/usr/lib/i386-linux-gnu | |||
POSIX_64BIT_FLAGS = $(64BIT_FLAGS) -L/usr/lib64 -L/usr/lib/x86_64-linux-gnu | |||
POSIX_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) -ldl | |||
POSIX_BUILD_FLAGS = $(BUILD_PLUGIN_FLAGS) | |||
POSIX_32BIT_FLAGS = $(32BIT_FLAGS) -L/usr/lib32 -L/usr/lib/i386-linux-gnu | |||
POSIX_64BIT_FLAGS = $(64BIT_FLAGS) -L/usr/lib64 -L/usr/lib/x86_64-linux-gnu | |||
POSIX_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) -ldl | |||
ifneq ($(MACOS),true) | |||
POSIX_LINK_FLAGS += -lrt | |||
POSIX_LINK_FLAGS += -lrt | |||
endif | |||
# -------------------------------------------------------------- | |||
# Plugin bridges (Windows) | |||
WIN_BUILD_FLAGS = $(BUILD_PLUGIN_FLAGS) -DJACKBRIDGE_EXPORT -DPTW32_STATIC_LIB -I../libs/jackbridge | |||
WIN_32BIT_FLAGS = $(32BIT_FLAGS) | |||
WIN_64BIT_FLAGS = $(64BIT_FLAGS) | |||
WIN_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) -mwindows -lwinspool -lole32 -luuid -limm32 -lshell32 -lws2_32 -L../libs | |||
WIN_BUILD_FLAGS = $(BUILD_PLUGIN_FLAGS) -DJACKBRIDGE_EXPORT | |||
WIN_32BIT_FLAGS = $(32BIT_FLAGS) | |||
WIN_64BIT_FLAGS = $(64BIT_FLAGS) | |||
WIN_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) -mwindows -lwinspool -lole32 -luuid -limm32 -lshell32 -lws2_32 -L../libs | |||
# -------------------------------------------------------------- | |||
# Plugin bridges (Native) | |||
@@ -85,9 +83,8 @@ DGL_LIBS = -lX11 | |||
endif | |||
NATIVE_BUILD_FLAGS = $(POSIX_BUILD_FLAGS) | |||
NATIVE_LINK_FLAGS = $(POSIX_LINK_FLAGS) | |||
NATIVE_BUILD_FLAGS += -DWANT_NATIVE | |||
NATIVE_LINK_FLAGS = $(POSIX_LINK_FLAGS) | |||
ifeq ($(HAVE_FLUIDSYNTH),true) | |||
NATIVE_BUILD_FLAGS += -DWANT_FLUIDSYNTH | |||
@@ -134,8 +131,12 @@ endif | |||
BUILD_UI_FLAGS = $(BUILD_CXX_FLAGS) -DBUILD_BRIDGE_UI | |||
LINK_UI_FLAGS = $(LINK_FLAGS) -ldl | |||
BUILD_UI_LV2_FLAGS = $(BUILD_UI_FLAGS) -DBRIDGE_LV2 | |||
BUILD_UI_VST_FLAGS = $(BUILD_UI_FLAGS) -DBRIDGE_VST | |||
BUILD_UI_LV2_FLAGS = $(BUILD_UI_FLAGS) -DBRIDGE_LV2 | |||
BUILD_UI_VST_FLAGS = $(BUILD_UI_FLAGS) -DBRIDGE_VST | |||
ifeq ($(CARLA_VESTIGE_HEADER),true) | |||
BUILD_UI_VST_FLAGS += -DVESTIGE_HEADER | |||
endif | |||
BUILD_UI_LV2_GTK2_FLAGS = $(BUILD_UI_LV2_FLAGS) -DBRIDGE_GTK2 -DBRIDGE_LV2_GTK2 $(shell pkg-config --cflags gtk+-2.0) | |||
LINK_UI_LV2_GTK2_FLAGS = $(LINK_UI_FLAGS) $(shell pkg-config --libs gtk+-2.0) | |||
@@ -150,7 +151,7 @@ BUILD_UI_LV2_QT5_FLAGS = $(BUILD_UI_LV2_FLAGS) -DBRIDGE_QT5 -DBRIDGE_LV2_QT5 $ | |||
LINK_UI_LV2_QT5_FLAGS = $(LINK_UI_FLAGS) $(shell pkg-config --libs Qt5Gui Qt5Widgets) | |||
BUILD_UI_LV2_COCOA_FLAGS = $(BUILD_UI_VST_FLAGS) -DBRIDGE_COCOA -DBRIDGE_LV2_COCOA $(QT_UI_FLAGS) | |||
LINK_UI_LV2_COCOA_FLAGS = $(LINK_FLAGS) $(QT_UI_LIBS) | |||
LINK_UI_LV2_COCOA_FLAGS = $(LINK_UI_FLAGS) $(QT_UI_LIBS) | |||
BUILD_UI_LV2_HWND_FLAGS = $(BUILD_UI_VST_FLAGS) -DBRIDGE_HWND -DBRIDGE_LV2_HWND $(QT_UI_FLAGS) | |||
LINK_UI_LV2_HWND_FLAGS = $(LINK_FLAGS) $(QT_UI_LIBS) -mwindows -static | |||
@@ -159,7 +160,7 @@ BUILD_UI_LV2_X11_FLAGS = $(BUILD_UI_LV2_FLAGS) -DBRIDGE_X11 -DBRIDGE_LV2_X11 $ | |||
LINK_UI_LV2_X11_FLAGS = $(LINK_UI_FLAGS) $(QT_UI_LIBS) | |||
BUILD_UI_VST_COCOA_FLAGS = $(BUILD_UI_VST_FLAGS) -DBRIDGE_COCOA -DBRIDGE_VST_COCOA $(QT_UI_FLAGS) | |||
LINK_UI_VST_COCOA_FLAGS = $(LINK_FLAGS) $(QT_UI_LIBS) | |||
LINK_UI_VST_COCOA_FLAGS = $(LINK_UI_FLAGS) $(QT_UI_LIBS) | |||
BUILD_UI_VST_HWND_FLAGS = $(BUILD_UI_VST_FLAGS) -DBRIDGE_HWND -DBRIDGE_VST_HWND $(QT_UI_FLAGS) | |||
LINK_UI_VST_HWND_FLAGS = $(LINK_FLAGS) $(QT_UI_LIBS) -mwindows -static | |||
@@ -167,23 +168,9 @@ LINK_UI_VST_HWND_FLAGS = $(LINK_FLAGS) $(QT_UI_LIBS) -mwindows -static | |||
BUILD_UI_VST_X11_FLAGS = $(BUILD_UI_VST_FLAGS) -DBRIDGE_X11 -DBRIDGE_VST_X11 $(QT_UI_FLAGS) | |||
LINK_UI_VST_X11_FLAGS = $(LINK_UI_FLAGS) $(QT_UI_LIBS) | |||
ifeq ($(HAVE_QT4),true) | |||
BUILD_UI_LV2_QT4_FLAGS += -I../theme | |||
LINK_UI_LV2_QT4_FLAGS += ../libs/theme.a | |||
else | |||
BUILD_UI_LV2_QT5_FLAGS += -I../theme | |||
LINK_UI_LV2_QT5_FLAGS += ../libs/theme.a | |||
endif | |||
ifeq ($(CARLA_VESTIGE_HEADER),true) | |||
BUILD_UI_VST_COCOA_FLAGS += -DVESTIGE_HEADER | |||
BUILD_UI_VST_HWND_FLAGS += -DVESTIGE_HEADER | |||
BUILD_UI_VST_X11_FLAGS += -DVESTIGE_HEADER | |||
endif | |||
# -------------------------------------------------------------- | |||
TARGETS = native | |||
TARGETS = native | |||
ifeq ($(CARLA_PLUGIN_SUPPORT),true) | |||
ifeq ($(HAVE_GTK2),true) | |||
@@ -194,10 +181,11 @@ TARGETS += ui_lv2-gtk3 | |||
endif | |||
ifeq ($(HAVE_QT4),true) | |||
TARGETS += ui_lv2-qt4 | |||
endif | |||
else | |||
ifeq ($(HAVE_QT5),true) | |||
TARGETS += ui_lv2-qt5 | |||
endif | |||
endif | |||
TARGETS += ui_lv2-x11 | |||
TARGETS += ui_vst-x11 | |||
endif | |||
@@ -236,6 +224,9 @@ win64: carla-bridge-win64.exe | |||
%__vst.o: %.cpp | |||
$(CXX) $< $(BUILD_UI_VST_FLAGS) -c -o $@ | |||
CarlaBridgeToolkitQt.moc: CarlaBridgeToolkitQt.cpp | |||
$(MOC) $< -DMOC_PARSING -o $@ | |||
OBJS_UI_LV2_LIBS = \ | |||
../libs/lilv.a \ | |||
../libs/rtmempool.a | |||
@@ -273,10 +264,10 @@ OBJS_UI_LV2_QT4 = CarlaBridgeUI-LV2__lv2-qt4.o \ | |||
CarlaBridgeClient__lv2.o CarlaBridgeOsc__lv2.o \ | |||
CarlaBridgeToolkit__lv2.o CarlaBridgeToolkitQt__lv2-qt4.o | |||
carla-bridge-lv2-qt4: $(OBJS_UI_LV2_QT4) $(OBJS_UI_LV2_LIBS) | |||
carla-bridge-lv2-qt4: $(OBJS_UI_LV2_QT4) $(OBJS_UI_LV2_LIBS) ../libs/theme.a | |||
$(CXX) $^ $(LINK_UI_LV2_QT4_FLAGS) -o $@ $(CMD_STRIP) $@ | |||
%__lv2-qt4.o: %.cpp | |||
%__lv2-qt4.o: %.cpp CarlaBridgeToolkitQt.moc | |||
$(CXX) $< $(BUILD_UI_LV2_QT4_FLAGS) -c -o $@ | |||
# -------------------------------------------------------------- | |||
@@ -286,12 +277,38 @@ OBJS_UI_LV2_QT5 = CarlaBridgeUI-LV2__lv2-qt5.o \ | |||
CarlaBridgeClient__lv2.o CarlaBridgeOsc__lv2.o \ | |||
CarlaBridgeToolkit__lv2.o CarlaBridgeToolkitQt__lv2-qt5.o | |||
carla-bridge-lv2-qt5: $(OBJS_UI_LV2_QT5) $(OBJS_UI_LV2_LIBS) | |||
carla-bridge-lv2-qt5: $(OBJS_UI_LV2_QT5) $(OBJS_UI_LV2_LIBS) ../libs/theme.a | |||
$(CXX) $^ $(LINK_UI_LV2_QT5_FLAGS) -o $@ $(CMD_STRIP) $@ | |||
%__lv2-qt5.o: %.cpp | |||
%__lv2-qt5.o: %.cpp CarlaBridgeToolkitQt.moc | |||
$(CXX) $< $(BUILD_UI_LV2_QT5_FLAGS) -c -o $@ | |||
# -------------------------------------------------------------- | |||
# ui_lv2-cocoa | |||
OBJS_UI_LV2_COCOA = CarlaBridgeUI-LV2__lv2-cocoa.o \ | |||
CarlaBridgeClient__lv2.o CarlaBridgeOsc__lv2.o \ | |||
CarlaBridgeToolkit__lv2.o CarlaBridgeToolkitQt__lv2-cocoa.o | |||
carla-bridge-lv2-cocoa: $(OBJS_UI_LV2_COCOA) $(OBJS_UI_LV2_LIBS) ../libs/theme.a | |||
$(CXX) $^ $(LINK_UI_LV2_COCOA_FLAGS) -o $@ $(CMD_STRIP) $@ | |||
%__lv2-cocoa.o: %.cpp CarlaBridgeToolkitQt.moc | |||
$(CXX) $< $(BUILD_UI_LV2_COCOA_FLAGS) -c -o $@ | |||
# -------------------------------------------------------------- | |||
# ui_lv2-hwnd | |||
OBJS_UI_LV2_HWND = CarlaBridgeUI-LV2__lv2-hwnd.o \ | |||
CarlaBridgeClient__lv2.o CarlaBridgeOsc__lv2.o \ | |||
CarlaBridgeToolkit__lv2.o CarlaBridgeToolkitQt__lv2-hwnd.o | |||
carla-bridge-lv2-hwnd.exe: $(OBJS_UI_LV2_HWND) $(OBJS_UI_LV2_LIBS) ../libs/theme.a | |||
$(CXX) $^ $(LINK_UI_LV2_HWND_FLAGS) -o $@ $(CMD_STRIP) $@ | |||
%__lv2-hwnd.o: %.cpp CarlaBridgeToolkitQt.moc | |||
$(CXX) $< $(BUILD_UI_LV2_HWND_FLAGS) -c -o $@ | |||
# -------------------------------------------------------------- | |||
# ui_lv2-x11 | |||
@@ -302,9 +319,22 @@ OBJS_UI_LV2_X11 = CarlaBridgeUI-LV2__lv2-x11.o \ | |||
carla-bridge-lv2-x11: $(OBJS_UI_LV2_X11) $(OBJS_UI_LV2_LIBS) ../libs/theme.a | |||
$(CXX) $^ $(LINK_UI_LV2_X11_FLAGS) -o $@ $(CMD_STRIP) $@ | |||
%__lv2-x11.o: %.cpp | |||
%__lv2-x11.o: %.cpp CarlaBridgeToolkitQt.moc | |||
$(CXX) $< $(BUILD_UI_LV2_X11_FLAGS) -c -o $@ | |||
# -------------------------------------------------------------- | |||
# ui_vst-cocoa | |||
OBJS_UI_VST_COCOA = CarlaBridgeUI-VST__vst-cocoa.o \ | |||
CarlaBridgeClient__vst.o CarlaBridgeOsc__vst.o \ | |||
CarlaBridgeToolkit__vst.o CarlaBridgeToolkitQt__vst-cocoa.o | |||
carla-bridge-vst-cocoa: $(OBJS_UI_VST_COCOA) ../libs/theme.a | |||
$(CXX) $^ $(LINK_UI_VST_COCOA_FLAGS) -o $@ $(CMD_STRIP) $@ | |||
%__vst-cocoa.o: %.cpp CarlaBridgeToolkitQt.moc | |||
$(CXX) $< $(BUILD_UI_VST_COCOA_FLAGS) -c -o $@ | |||
# -------------------------------------------------------------- | |||
# ui_vst-hwnd | |||
@@ -315,7 +345,7 @@ OBJS_UI_VST_HWND = CarlaBridgeUI-VST__vst-hwnd.o \ | |||
carla-bridge-vst-hwnd.exe: $(OBJS_UI_VST_HWND) ../libs/theme.a | |||
$(CXX) $^ $(LINK_UI_VST_HWND_FLAGS) -o $@ $(CMD_STRIP) $@ | |||
%__vst-hwnd.o: %.cpp | |||
%__vst-hwnd.o: %.cpp CarlaBridgeToolkitQt.moc | |||
$(CXX) $< $(BUILD_UI_VST_HWND_FLAGS) -c -o $@ | |||
# -------------------------------------------------------------- | |||
@@ -328,7 +358,7 @@ OBJS_UI_VST_X11 = CarlaBridgeUI-VST__vst-x11.o \ | |||
carla-bridge-vst-x11: $(OBJS_UI_VST_X11) ../libs/theme.a | |||
$(CXX) $^ $(LINK_UI_VST_X11_FLAGS) -o $@ $(CMD_STRIP) $@ | |||
%__vst-x11.o: %.cpp | |||
%__vst-x11.o: %.cpp CarlaBridgeToolkitQt.moc | |||
$(CXX) $< $(BUILD_UI_VST_X11_FLAGS) -c -o $@ | |||
# -------------------------------------------------------------- | |||
@@ -583,14 +613,14 @@ doxygen: carla_bridge.doxygen | |||
# -------------------------------------------------------------- | |||
clean: | |||
rm -f *.o *.dll *.so *.exe | |||
rm -f *.moc *.o *.dll *.dylib *.so *.exe | |||
rm -f $(OBJS_NATIVE) | |||
rm -f $(OBJS_POSIX32) | |||
rm -f $(OBJS_POSIX64) | |||
rm -f $(OBJS_WIN32) | |||
rm -f $(OBJS_WIN64) | |||
rm -f carla-bridge-lv2-gtk2 carla-bridge-lv2-gtk3 carla-bridge-lv2-qt4 carla-bridge-lv2-qt5 carla-bridge-lv2-x11 | |||
rm -f carla-bridge-vst-x11 | |||
rm -f carla-bridge-lv2-gtk2 carla-bridge-lv2-gtk3 carla-bridge-lv2-qt4 carla-bridge-lv2-qt5 carla-bridge-lv2-cocoa carla-bridge-lv2-x11 | |||
rm -f carla-bridge-vst-cocoa carla-bridge-vst-x11 | |||
rm -f carla-bridge-native carla-bridge-posix32 carla-bridge-posix64 | |||
# -------------------------------------------------------------- | |||