Browse Source

More cleanup

tags/v0.9.0
falkTX 12 years ago
parent
commit
16de0cef40
9 changed files with 181 additions and 123 deletions
  1. +42
    -28
      c++/carla-bridge/carla_bridge_client.cpp
  2. +5
    -7
      c++/carla-bridge/carla_bridge_client.hpp
  3. +35
    -37
      c++/carla-bridge/carla_bridge_osc.cpp
  4. +7
    -1
      c++/carla-bridge/carla_bridge_osc.hpp
  5. +54
    -26
      c++/carla-bridge/carla_bridge_toolkit-gtk.cpp
  6. +27
    -20
      c++/carla-bridge/carla_bridge_toolkit-qt.cpp
  7. +1
    -1
      c++/carla-bridge/carla_bridge_toolkit.cpp
  8. +3
    -3
      c++/carla-bridge/carla_bridge_ui-lv2.cpp
  9. +7
    -0
      c++/carla-utils/carla_osc_utils.hpp

+ 42
- 28
c++/carla-bridge/carla_bridge_client.cpp View File

@@ -18,16 +18,12 @@
#include "carla_bridge_client.hpp"
#include "carla_bridge_toolkit.hpp"

#ifdef BUILD_BRIDGE_PLUGIN
# include "carla_engine.hpp"
#else
#ifdef BUILD_BRIDGE_UI
# include "carla_lib_utils.hpp"
#endif

#include <cmath>
#include <cstdio>
#include <cstdint>
#include <cstdlib>
#include <cstring>

CARLA_BRIDGE_START_NAMESPACE

@@ -46,8 +42,6 @@ CarlaBridgeClient::CarlaBridgeClient(const char* const uiTitle)
m_uiLib = nullptr;
m_uiQuit = false;
#endif

m_toolkit->init();
}

CarlaBridgeClient::~CarlaBridgeClient()
@@ -58,6 +52,8 @@ CarlaBridgeClient::~CarlaBridgeClient()
if (m_uiFilename)
free(m_uiFilename);
#endif

delete m_toolkit;
}

#ifdef BUILD_BRIDGE_UI
@@ -68,7 +64,17 @@ bool CarlaBridgeClient::init(const char* const, const char* const)
{
qDebug("CarlaBridgeClient::init()");

// Test for single init
{
static bool initiated = false;
CARLA_ASSERT(! initiated);
initiated = true;
}

m_uiQuit = false;

m_toolkit->init();

return false;
}

@@ -95,7 +101,7 @@ bool CarlaBridgeClient::oscInit(const char* const url)
{
qDebug("CarlaBridgeClient::oscInit(\"%s\")", url);

bool ret = m_osc.init(url);
const bool ret = m_osc.init(url);
m_oscData = m_osc.getControlData();

return ret;
@@ -103,7 +109,7 @@ bool CarlaBridgeClient::oscInit(const char* const url)

bool CarlaBridgeClient::oscIdle()
{
m_osc .idle();
m_osc.idle();

#ifdef BUILD_BRIDGE_UI
return ! m_uiQuit;
@@ -136,6 +142,15 @@ void CarlaBridgeClient::sendOscUpdate()
}

#ifdef BUILD_BRIDGE_PLUGIN
void CarlaBridgeClient::registerOscEngine(CarlaBackend::CarlaEngine* const engine)
{
qDebug("CarlaBridgeClient::registerOscEngine(%p)", engine);
CARLA_ASSERT(engine);

if (engine)
engine->setOscBridgeData(m_oscData);
}

void CarlaBridgeClient::sendOscBridgeError(const char* const error)
{
qDebug("CarlaBridgeClient::sendOscBridgeError(\"%s\")", error);
@@ -145,12 +160,6 @@ void CarlaBridgeClient::sendOscBridgeError(const char* const error)
if (m_oscData && m_oscData->target)
osc_send_bridge_error(m_oscData, error);
}

void CarlaBridgeClient::registerOscEngine(CarlaBackend::CarlaEngine* const engine)
{
qDebug("CarlaBridgeClient::registerOscEngine(%p)", engine);
engine->setOscBridgeData(m_oscData);
}
#endif

// ---------------------------------------------------------------------
@@ -250,18 +259,6 @@ void CarlaBridgeClient::sendOscExiting()
osc_send_exiting(m_oscData);
}

#ifdef BUILD_BRIDGE_PLUGIN
void CarlaBridgeClient::sendOscBridgeUpdate()
{
qDebug("CarlaBridgeClient::sendOscBridgeUpdate()");
CARLA_ASSERT(m_oscData);
CARLA_ASSERT(m_oscData->target && m_osc.m_serverPath);

if (m_oscData && m_oscData->target && m_osc.m_serverPath)
osc_send_bridge_update(m_oscData, m_osc.m_serverPath);
}
#endif

#ifdef BRIDGE_LV2
void CarlaBridgeClient::sendOscLv2TransferAtom(const int32_t portIndex, const char* const typeStr, const char* const atomBuf)
{
@@ -282,6 +279,18 @@ void CarlaBridgeClient::sendOscLv2TransferEvent(const int32_t portIndex, const c
}
#endif

#ifdef BUILD_BRIDGE_PLUGIN
void CarlaBridgeClient::sendOscBridgeUpdate()
{
qDebug("CarlaBridgeClient::sendOscBridgeUpdate()");
CARLA_ASSERT(m_oscData);
CARLA_ASSERT(m_oscData->target && m_osc.m_serverPath);

if (m_oscData && m_oscData->target && m_osc.m_serverPath)
osc_send_bridge_update(m_oscData, m_osc.m_serverPath);
}
#endif

// ---------------------------------------------------------------------

#ifdef BUILD_BRIDGE_UI
@@ -292,6 +301,7 @@ void* CarlaBridgeClient::getContainerId()

bool CarlaBridgeClient::uiLibOpen(const char* const filename)
{
CARLA_ASSERT(! m_uiLib);
CARLA_ASSERT(filename);

if (m_uiFilename)
@@ -305,6 +315,8 @@ bool CarlaBridgeClient::uiLibOpen(const char* const filename)

bool CarlaBridgeClient::uiLibClose()
{
CARLA_ASSERT(m_uiLib);

if (m_uiLib)
{
const bool closed = lib_close(m_uiLib);
@@ -317,6 +329,8 @@ bool CarlaBridgeClient::uiLibClose()

void* CarlaBridgeClient::uiLibSymbol(const char* const symbol)
{
CARLA_ASSERT(m_uiLib);

if (m_uiLib)
return lib_symbol(m_uiLib, symbol);



+ 5
- 7
c++/carla-bridge/carla_bridge_client.hpp View File

@@ -20,8 +20,6 @@

#include "carla_bridge_osc.hpp"

#include <QtCore/QMutex>

#ifdef BUILD_BRIDGE_PLUGIN
namespace CarlaBackend {
class CarlaEngine;
@@ -98,8 +96,8 @@ public:
void sendOscUpdate();

#ifdef BUILD_BRIDGE_PLUGIN
void sendOscBridgeError(const char* const error);
void registerOscEngine(CarlaBackend::CarlaEngine* const engine);
void sendOscBridgeError(const char* const error);
#endif

// ---------------------------------------------------------------------
@@ -121,15 +119,15 @@ protected:
void sendOscMidi(const uint8_t midiBuf[4]);
void sendOscExiting();

#ifdef BUILD_BRIDGE_PLUGIN
void sendOscBridgeUpdate();
#endif

#ifdef BRIDGE_LV2
void sendOscLv2TransferAtom(const int32_t portIndex, const char* const typeStr, const char* const atomBuf);
void sendOscLv2TransferEvent(const int32_t portIndex, const char* const typeStr, const char* const atomBuf);
#endif

#ifdef BUILD_BRIDGE_PLUGIN
void sendOscBridgeUpdate();
#endif

// ---------------------------------------------------------------------

#ifdef BUILD_BRIDGE_UI


+ 35
- 37
c++/carla-bridge/carla_bridge_osc.cpp View File

@@ -1,6 +1,6 @@
/*
* Carla Bridge OSC
* Copyright (C) 2012 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2011-2012 Filipe Coelho <falktx@falktx.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -234,6 +234,16 @@ int CarlaBridgeOsc::handleMessage(const char* const path, const int argc, const
return handleMsgLv2TransferEvent(argc, argv, types);
#endif

#ifdef BUILD_BRIDGE_PLUGIN
// Plugin methods
if (strcmp(method, "plugin_save_now") == 0)
return handleMsgPluginSaveNow();
if (strcmp(method, "plugin_set_chunk") == 0)
return handleMsgPluginSetChunk(argc, argv, types);
if (strcmp(method, "plugin_set_custom_data") == 0)
return handleMsgPluginSetCustomData(argc, argv, types);
#endif

#if 0
// TODO
else if (strcmp(method, "set_parameter_midi_channel") == 0)
@@ -254,36 +264,11 @@ int CarlaBridgeOsc::handleMsgConfigure(CARLA_BRIDGE_OSC_HANDLE_ARGS)
if (! client)
return 1;

#ifdef BUILD_BRIDGE_PLUGIN
const char* const key = (const char*)&argv[0]->s;
const char* const value = (const char*)&argv[1]->s;
// nothing here for now

if (strcmp(key, CarlaBackend::CARLA_BRIDGE_MSG_SAVE_NOW) == 0)
{
client->saveNow();
}
else if (strcmp(key, CarlaBackend::CARLA_BRIDGE_MSG_SET_CHUNK) == 0)
{
client->setChunkData(value);
}
else if (strcmp(key, CarlaBackend::CARLA_BRIDGE_MSG_SET_CUSTOM) == 0)
{
QStringList vList = QString(value).split("·", QString::KeepEmptyParts);

if (vList.size() == 3)
{
const char* const cType = vList.at(0).toUtf8().constData();
const char* const cKey = vList.at(1).toUtf8().constData();
const char* const cValue = vList.at(2).toUtf8().constData();
return 0;

client->setCustomData(cType, cKey, cValue);
}
}
#else
Q_UNUSED(argv);
#endif

return 0;
}

int CarlaBridgeOsc::handleMsgControl(CARLA_BRIDGE_OSC_HANDLE_ARGS)
@@ -296,6 +281,7 @@ int CarlaBridgeOsc::handleMsgControl(CARLA_BRIDGE_OSC_HANDLE_ARGS)

const int32_t index = argv[0]->i;
const float value = argv[1]->f;

client->setParameter(index, value);

return 0;
@@ -310,34 +296,44 @@ int CarlaBridgeOsc::handleMsgProgram(CARLA_BRIDGE_OSC_HANDLE_ARGS)
return 1;

const int32_t index = argv[0]->i;

client->setProgram(index);

return 0;
}

#ifdef BUILD_BRIDGE_PLUGIN
int CarlaBridgeOsc::handleMsgMidiProgram(CARLA_BRIDGE_OSC_HANDLE_ARGS)
{
qDebug("CarlaBridgeOsc::handleMsgMidiProgram()");
#ifdef BUILD_BRIDGE_PLUGIN
CARLA_BRIDGE_OSC_CHECK_OSC_TYPES(1, "i");
#else
CARLA_BRIDGE_OSC_CHECK_OSC_TYPES(2, "ii");
#endif

if (! client)
return 1;

#ifdef BUILD_BRIDGE_PLUGIN
const int32_t index = argv[0]->i;

client->setMidiProgram(index);

return 0;
}
#else
int CarlaBridgeOsc::handleMsgMidiProgram(CARLA_BRIDGE_OSC_HANDLE_ARGS)
{
qDebug("CarlaBridgeOsc::handleMsgMidiProgram()");
CARLA_BRIDGE_OSC_CHECK_OSC_TYPES(2, "ii");

if (! client)
return 1;

const int32_t bank = argv[0]->i;
const int32_t program = argv[1]->i;

client->setMidiProgram(bank, program);
#endif

return 0;
}
#endif

int CarlaBridgeOsc::handleMsgMidi(CARLA_BRIDGE_OSC_HANDLE_ARGS)
{
@@ -359,13 +355,15 @@ int CarlaBridgeOsc::handleMsgMidi(CARLA_BRIDGE_OSC_HANDLE_ARGS)

if (MIDI_IS_STATUS_NOTE_OFF(status))
{
uint8_t note = data[2];
const uint8_t note = data[2];

client->noteOff(channel, note);
}
else if (MIDI_IS_STATUS_NOTE_ON(status))
{
uint8_t note = data[2];
uint8_t velo = data[3];
const uint8_t note = data[2];
const uint8_t velo = data[3];

client->noteOn(channel, note, velo);
}



+ 7
- 1
c++/carla-bridge/carla_bridge_osc.hpp View File

@@ -1,6 +1,6 @@
/*
* Carla Bridge OSC
* Copyright (C) 2012 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2011-2012 Filipe Coelho <falktx@falktx.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -110,6 +110,12 @@ private:
int handleMsgLv2TransferEvent(CARLA_BRIDGE_OSC_HANDLE_ARGS);
#endif

#ifdef BUILD_BRIDGE_PLUGIN
int handleMsgPluginSaveNow();
int handleMsgPluginSetChunk(CARLA_BRIDGE_OSC_HANDLE_ARGS);
int handleMsgPluginSetCustomData(CARLA_BRIDGE_OSC_HANDLE_ARGS);
#endif

// -------------------------------------------------------------------

static void osc_error_handler(const int num, const char* const msg, const char* const path)


+ 54
- 26
c++/carla-bridge/carla_bridge_toolkit-gtk.cpp View File

@@ -53,13 +53,18 @@ public:

window = nullptr;

lastX = lastY = 0;
lastWidth = lastHeight = 0;
lastX = 0;
lastY = 0;
lastWidth = 0;
lastHeight = 0;
}

~CarlaToolkitGtk()
{
qDebug("CarlaToolkitGtk::~CarlaToolkitGtk()");

if (window)
gtk_widget_destroy(window);
}

void init()
@@ -68,44 +73,61 @@ public:
CARLA_ASSERT(! window);

gtk_init(&gargc, &gargv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_resize(GTK_WINDOW(window), 30, 30);
gtk_widget_hide(window);
}

void exec(const bool showGui)
{
qDebug("CarlaToolkitGtk::exec(%s)", bool2str(showGui));
CARLA_ASSERT(window);
CARLA_ASSERT(client);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_container_add(GTK_CONTAINER(window), (GtkWidget*)client->getWidget());
GtkWidget* const widget = (GtkWidget*)client->getWidget();

gtk_container_add(GTK_CONTAINER(window), widget);

gtk_window_set_resizable(GTK_WINDOW(window), client->isResizable());
gtk_window_set_title(GTK_WINDOW(window), uiTitle);

gtk_window_get_position(GTK_WINDOW(window), &lastX, &lastY);
gtk_window_get_size(GTK_WINDOW(window), &lastWidth, &lastHeight);

if (settings.contains(QString("%1/pos_x").arg(uiTitle)))
{
lastX = settings.value(QString("%1/pos_x").arg(uiTitle), lastX).toInt();
lastY = settings.value(QString("%1/pos_y").arg(uiTitle), lastY).toInt();
gtk_window_move(GTK_WINDOW(window), lastX, lastY);
gtk_window_get_position(GTK_WINDOW(window), &lastX, &lastY);

bool hasX, hasY;
lastX = settings.value(QString("%1/pos_x").arg(uiTitle), lastX).toInt(&hasX);
lastY = settings.value(QString("%1/pos_y").arg(uiTitle), lastY).toInt(&hasY);

if (hasX && hasY)
gtk_window_move(GTK_WINDOW(window), lastX, lastY);

if (client->isResizable())
{
lastWidth = settings.value(QString("%1/width").arg(uiTitle), lastWidth).toInt();
lastHeight = settings.value(QString("%1/height").arg(uiTitle), lastHeight).toInt();
gtk_window_resize(GTK_WINDOW(window), lastWidth, lastHeight);
gtk_window_get_size(GTK_WINDOW(window), &lastWidth, &lastHeight);

bool hasWidth, hasHeight;
lastWidth = settings.value(QString("%1/width").arg(uiTitle), lastWidth).toInt(&hasWidth);
lastHeight = settings.value(QString("%1/height").arg(uiTitle), lastHeight).toInt(&hasHeight);

if (hasWidth && hasHeight)
gtk_window_resize(GTK_WINDOW(window), lastWidth, lastHeight);
}
}

g_timeout_add(50, gtk_ui_timeout, this);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_ui_destroy), this);

if (showGui)
show();
else
client->sendOscUpdate();

// Timer
g_timeout_add(50, gtk_ui_timeout, this);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_ui_destroy), this);

// First idle
handleTimeout();

// Main loop
gtk_main();
}
@@ -159,6 +181,11 @@ public:
// ---------------------------------------------------------------------

protected:
GtkWidget* window;
QSettings settings;

gint lastX, lastY, lastWidth, lastHeight;

void handleDestroy()
{
qDebug("CarlaToolkitGtk::handleDestroy()");
@@ -180,30 +207,31 @@ protected:
gtk_window_get_size(GTK_WINDOW(window), &lastWidth, &lastHeight);
}

// FIXME
// FIXME?
return client->isOscControlRegistered() ? client->oscIdle() : false;
}

// ---------------------------------------------------------------------

private:
GtkWidget* window;
QSettings settings;

gint lastX, lastY, lastWidth, lastHeight;

static void gtk_ui_destroy(GtkWidget*, gpointer data)
{
CarlaToolkitGtk* const _this_ = (CarlaToolkitGtk*)data;
_this_->handleDestroy();
CARLA_ASSERT(data);

if (CarlaToolkitGtk* const _this_ = (CarlaToolkitGtk*)data)
_this_->handleDestroy();

gtk_main_quit();
}

static gboolean gtk_ui_timeout(gpointer data)
{
CarlaToolkitGtk* const _this_ = (CarlaToolkitGtk*)data;
return _this_->handleTimeout();
CARLA_ASSERT(data);

if (CarlaToolkitGtk* const _this_ = (CarlaToolkitGtk*)data)
return _this_->handleTimeout();

return false;
}
};



+ 27
- 20
c++/carla-bridge/carla_bridge_toolkit-qt.cpp View File

@@ -184,6 +184,9 @@ public:
// Timer
msgTimer = startTimer(50);

// First idle
handleTimeout();

// Main loop
app->exec();
}
@@ -201,14 +204,11 @@ public:

if (window)
{
if (client)
{
settings.setValue(QString("%1/pos_x").arg(uiTitle), window->x());
settings.setValue(QString("%1/pos_y").arg(uiTitle), window->y());
settings.setValue(QString("%1/width").arg(uiTitle), window->width());
settings.setValue(QString("%1/height").arg(uiTitle), window->height());
settings.sync();
}
settings.setValue(QString("%1/pos_x").arg(uiTitle), window->x());
settings.setValue(QString("%1/pos_y").arg(uiTitle), window->y());
settings.setValue(QString("%1/width").arg(uiTitle), window->width());
settings.setValue(QString("%1/height").arg(uiTitle), window->height());
settings.sync();

window->close();

@@ -300,22 +300,29 @@ protected:
QEmbedContainer* embedContainer;
#endif

void timerEvent(QTimerEvent* const event)
void handleTimeout()
{
if (event->timerId() == msgTimer && client)
if (! client)
return;

if (needsResize)
{
if (needsResize)
{
client->toolkitResize(nextWidth, nextHeight);
needsResize = false;
}
client->toolkitResize(nextWidth, nextHeight);
needsResize = false;
}

if (client->isOscControlRegistered() && ! client->oscIdle())
{
killTimer(msgTimer);
msgTimer = 0;
}
if (client->isOscControlRegistered() && ! client->oscIdle())
{
killTimer(msgTimer);
msgTimer = 0;
}
}

private:
void timerEvent(QTimerEvent* const event)
{
if (event->timerId() == msgTimer)
handleTimeout();

QObject::timerEvent(event);
}


+ 1
- 1
c++/carla-bridge/carla_bridge_toolkit.cpp View File

@@ -26,7 +26,7 @@ CARLA_BRIDGE_START_NAMESPACE
CarlaBridgeToolkit::CarlaBridgeToolkit(CarlaBridgeClient* const client_, const char* const newTitle)
: client(client_)
{
qDebug("CarlaBridgeToolkit::CarlaBridgeToolkit(\"%s\")", newTitle);
qDebug("CarlaBridgeToolkit::CarlaBridgeToolkit(%p, \"%s\")", client, newTitle);
CARLA_ASSERT(client);
CARLA_ASSERT(newTitle);



+ 3
- 3
c++/carla-bridge/carla_bridge_ui-lv2.cpp View File

@@ -618,7 +618,8 @@ public:

void handleProgramChanged(int32_t /*index*/)
{
sendOscConfigure("reloadprograms", "");
if (isOscControlRegistered())
sendOscConfigure("reloadprograms", "");
}

uint32_t handleUiPortMap(const char* const symbol)
@@ -651,10 +652,9 @@ public:
return 0;
}


void handleUiWrite(uint32_t portIndex, uint32_t bufferSize, uint32_t format, const void* buffer)
{
if (! buffer)
if (! (buffer && isOscControlRegistered()))
return;

if (format == 0)


+ 7
- 0
c++/carla-utils/carla_osc_utils.hpp View File

@@ -35,6 +35,11 @@ struct CarlaOscData {
source(nullptr),
target(nullptr) {}

~CarlaOscData()
{
free();
}

void free()
{
if (path)
@@ -300,6 +305,7 @@ void osc_send_bridge_error(const CarlaOscData* const oscData, const char* const
}
#endif

#if defined(BRIDGE_LV2) || defined(WANT_LV2)
static inline
void osc_send_lv2_transfer_atom(const CarlaOscData* const oscData, const int32_t portIndex, const char* const typeStr, const char* const atomBuf)
{
@@ -335,6 +341,7 @@ void osc_send_lv2_transfer_event(const CarlaOscData* const oscData, const int32_
lo_send(oscData->target, targetPath, "iss", portIndex, typeStr, atomBuf);
}
}
#endif

// ------------------------------------------------------------------------------------------------



Loading…
Cancel
Save