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