Browse Source

Plugin/UI bridges code cleanup

tags/1.9.4
falkTX 11 years ago
parent
commit
a1b4efc2c4
13 changed files with 320 additions and 301 deletions
  1. +0
    -5
      doc/Carla-TODO
  2. +7
    -2
      source/backend/plugin/CarlaPluginGui.cpp
  3. +1
    -0
      source/backend/standalone/Makefile
  4. +46
    -49
      source/bridges/CarlaBridgeClient.cpp
  5. +32
    -34
      source/bridges/CarlaBridgeClient.hpp
  6. +14
    -17
      source/bridges/CarlaBridgeOsc.cpp
  7. +5
    -4
      source/bridges/CarlaBridgeOsc.hpp
  8. +0
    -1
      source/bridges/CarlaBridgeToolkit.cpp
  9. +0
    -9
      source/bridges/CarlaBridgeToolkit.hpp
  10. +4
    -4
      source/bridges/CarlaBridgeToolkitGtk.cpp
  11. +127
    -122
      source/bridges/CarlaBridgeToolkitQt.cpp
  12. +5
    -5
      source/bridges/CarlaBridgeUI-LV2.cpp
  13. +79
    -49
      source/bridges/Makefile

+ 0
- 5
doc/Carla-TODO View File

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


+ 7
- 2
source/backend/plugin/CarlaPluginGui.cpp View File

@@ -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;
}
}
}



+ 1
- 0
source/backend/standalone/Makefile View File

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


+ 46
- 49
source/bridges/CarlaBridgeClient.cpp View File

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


+ 32
- 34
source/bridges/CarlaBridgeClient.hpp View File

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

+ 14
- 17
source/bridges/CarlaBridgeOsc.cpp View File

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

+ 5
- 4
source/bridges/CarlaBridgeOsc.hpp View File

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


+ 0
- 1
source/bridges/CarlaBridgeToolkit.cpp View File

@@ -16,7 +16,6 @@
*/

#include "CarlaBridgeToolkit.hpp"
#include "CarlaUtils.hpp"

CARLA_BRIDGE_START_NAMESPACE



+ 0
- 9
source/bridges/CarlaBridgeToolkit.hpp View File

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

+ 4
- 4
source/bridges/CarlaBridgeToolkitGtk.cpp View File

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



+ 127
- 122
source/bridges/CarlaBridgeToolkitQt.cpp View File

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


+ 5
- 5
source/bridges/CarlaBridgeUI-LV2.cpp View File

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



+ 79
- 49
source/bridges/Makefile View File

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

# --------------------------------------------------------------


Loading…
Cancel
Save