Browse Source

Implement UI bridges for X11, fix vst-ui bridge build

tags/1.9.4
falkTX 10 years ago
parent
commit
001ea62fb2
15 changed files with 241 additions and 161 deletions
  1. +8
    -3
      Makefile
  2. +1
    -1
      source/backend/plugin/CarlaPlugin.cpp
  3. +28
    -34
      source/backend/plugin/Lv2Plugin.cpp
  4. +9
    -15
      source/backend/plugin/VstPlugin.cpp
  5. +7
    -1
      source/bridges-ui/CarlaBridgeClient.cpp
  6. +2
    -2
      source/bridges-ui/CarlaBridgeClient.hpp
  7. +2
    -1
      source/bridges-ui/CarlaBridgeToolkit.hpp
  8. +10
    -10
      source/bridges-ui/CarlaBridgeToolkitGtk.cpp
  9. +127
    -2
      source/bridges-ui/CarlaBridgeToolkitPlugin.cpp
  10. +1
    -1
      source/bridges-ui/CarlaBridgeToolkitQt.cpp
  11. +6
    -16
      source/bridges-ui/CarlaBridgeUI-LV2.cpp
  12. +14
    -46
      source/bridges-ui/CarlaBridgeUI-VST.cpp
  13. +11
    -14
      source/bridges-ui/Makefile
  14. +8
    -8
      source/utils/CarlaPluginUI.cpp
  15. +7
    -7
      source/utils/CarlaPluginUI.hpp

+ 8
- 3
Makefile View File

@@ -28,7 +28,7 @@ all: BIN RES UI WIDGETS
# --------------------------------------------------------------
# Binaries (native)

BIN: libs backend bridges discovery plugin theme
BIN: libs backend bridges-plugin bridges-ui discovery plugin theme

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

@@ -105,13 +105,18 @@ bin/libcarla_standalone2$(LIB_EXT): libs .FORCE

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

bridges: bin/carla-bridge-native$(APP_EXT)
bridges-plugin: bin/carla-bridge-native$(APP_EXT)

bin/carla-bridge-native$(APP_EXT): libs .FORCE
$(MAKE) -C source/bridges-plugin

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

bridges-ui: libs .FORCE
$(MAKE) -C source/bridges-ui

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

discovery: bin/carla-discovery-native$(APP_EXT)

bin/carla-discovery-native$(APP_EXT): libs .FORCE
@@ -124,7 +129,7 @@ plugin: bin/carla-native.lv2/manifest.ttl
bin/carla-native.lv2/carla-native$(LIB_EXT): backend .FORCE
$(MAKE) -C source/plugin ../../$@

bin/carla-native.lv2/manifest.ttl: bin/carla-native-lv2-export$(APP_EXT) bridges discovery .FORCE
bin/carla-native.lv2/manifest.ttl: bin/carla-native-lv2-export$(APP_EXT) bridges-plugin discovery .FORCE
cd bin && ./carla-native-lv2-export$(APP_EXT); cd ..
cd bin/carla-native.lv2 && $(LINK) ../*bridge-* ../carla-discovery-* .; cd ..



+ 1
- 1
source/backend/plugin/CarlaPlugin.cpp View File

@@ -1385,7 +1385,7 @@ void CarlaPlugin::idle()
CarlaString uiTitle(pData->name);
uiTitle += " (GUI)";

if (CarlaPluginUi::tryTransientWinIdMatch(pData->osc.data.target != nullptr ? pData->osc.thread.getPid() : 0, uiTitle, pData->engine->getOptions().frontendWinId))
if (CarlaPluginUI::tryTransientWinIdMatch(pData->osc.data.target != nullptr ? pData->osc.thread.getPid() : 0, uiTitle, pData->engine->getOptions().frontendWinId))
pData->transientTryCounter = 0;
}



+ 28
- 34
source/backend/plugin/Lv2Plugin.cpp View File

@@ -379,7 +379,7 @@ struct Lv2PluginOptions {
// -----------------------------------------------------

class Lv2Plugin : public CarlaPlugin,
CarlaPluginUi::CloseCallback
CarlaPluginUI::CloseCallback
{
public:
Lv2Plugin(CarlaEngine* const engine, const uint id)
@@ -1175,7 +1175,7 @@ public:

case LV2_UI_COCOA:
# ifdef CARLA_OS_MAC
fUi.window = CarlaPluginUi::newCocoa(this, frontendWinId);
fUi.window = CarlaPluginUI::newCocoa(this, frontendWinId);
# else
msg = "UI is for MacOS only";
# endif
@@ -1183,7 +1183,7 @@ public:

case LV2_UI_WINDOWS:
# ifdef CARLA_OS_WIN
fUi.window = CarlaPluginUi::newWindows(this, frontendWinId);
fUi.window = CarlaPluginUI::newWindows(this, frontendWinId);
# else
msg = "UI is for Windows only";
# endif
@@ -1191,7 +1191,7 @@ public:

case LV2_UI_X11:
# ifdef HAVE_X11
fUi.window = CarlaPluginUi::newX11(this, frontendWinId);
fUi.window = CarlaPluginUI::newX11(this, frontendWinId);
# else
msg = "UI is only for systems with X11";
# endif
@@ -3879,38 +3879,32 @@ public:
if (bridgeBinary.isEmpty())
return nullptr;

#ifdef CARLA_OS_LINUX
// test for local build
if (bridgeBinary.endsWith("/source/backend/"))
bridgeBinary += "../bridges/";
#endif

switch (type)
{
case LV2_UI_GTK2:
bridgeBinary += "carla-bridge-lv2-gtk2";
bridgeBinary += OS_SEP_STR "carla-bridge-lv2-gtk2";
break;
case LV2_UI_GTK3:
bridgeBinary += "carla-bridge-lv2-gtk3";
bridgeBinary += OS_SEP_STR "carla-bridge-lv2-gtk3";
break;
case LV2_UI_QT4:
bridgeBinary += "carla-bridge-lv2-qt4";
bridgeBinary += OS_SEP_STR "carla-bridge-lv2-qt4";
break;
case LV2_UI_QT5:
bridgeBinary += "carla-bridge-lv2-qt5";
bridgeBinary += OS_SEP_STR "carla-bridge-lv2-qt5";
break;
case LV2_UI_COCOA:
bridgeBinary += "carla-bridge-lv2-cocoa";
bridgeBinary += OS_SEP_STR "carla-bridge-lv2-cocoa";
break;
case LV2_UI_WINDOWS:
bridgeBinary += "carla-bridge-lv2-windows";
bridgeBinary += OS_SEP_STR "carla-bridge-lv2-windows";
break;
case LV2_UI_X11:
bridgeBinary += "carla-bridge-lv2-x11";
bridgeBinary += OS_SEP_STR "carla-bridge-lv2-x11";
break;
case LV2_UI_EXTERNAL:
case LV2_UI_OLD_EXTERNAL:
bridgeBinary += "carla-bridge-lv2-external";
bridgeBinary += OS_SEP_STR "carla-bridge-lv2-external";
break;
default:
return nullptr;
@@ -4235,10 +4229,10 @@ public:

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

void handleExternalUiClosed()
void handleExternalUIClosed()
{
CARLA_SAFE_ASSERT_RETURN(fUi.type == UI::TYPE_EXTERNAL,);
carla_debug("Lv2Plugin::handleExternalUiClosed()");
carla_debug("Lv2Plugin::handleExternalUIClosed()");

if (fUi.handle != nullptr && fUi.descriptor != nullptr && fUi.descriptor->cleanup != nullptr)
fUi.descriptor->cleanup(fUi.handle);
@@ -4248,11 +4242,11 @@ public:
pData->engine->callback(ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0.0f, nullptr);
}

void handlePluginUiClosed() override
void handlePluginUIClosed() override
{
CARLA_SAFE_ASSERT_RETURN(fUi.type == UI::TYPE_EMBED,);
CARLA_SAFE_ASSERT_RETURN(fUi.window != nullptr,);
carla_debug("Lv2Plugin::handlePluginUiClosed()");
carla_debug("Lv2Plugin::handlePluginUIClosed()");

fUi.window->hide();

@@ -4266,10 +4260,10 @@ public:

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

uint32_t handleUiPortMap(const char* const symbol) const noexcept
uint32_t handleUIPortMap(const char* const symbol) const noexcept
{
CARLA_SAFE_ASSERT_RETURN(symbol != nullptr && symbol[0] != '\0', LV2UI_INVALID_PORT_INDEX);
carla_debug("Lv2Plugin::handleUiPortMap(\"%s\")", symbol);
carla_debug("Lv2Plugin::handleUIPortMap(\"%s\")", symbol);

for (uint32_t i=0; i < fRdfDescriptor->PortCount; ++i)
{
@@ -4280,23 +4274,23 @@ public:
return LV2UI_INVALID_PORT_INDEX;
}

int handleUiResize(const int width, const int height)
int handleUIResize(const int width, const int height)
{
CARLA_SAFE_ASSERT_RETURN(fUi.window != nullptr, 1);
CARLA_SAFE_ASSERT_RETURN(width > 0, 1);
CARLA_SAFE_ASSERT_RETURN(height > 0, 1);
carla_debug("Lv2Plugin::handleUiResize(%i, %i)", width, height);
carla_debug("Lv2Plugin::handleUIResize(%i, %i)", width, height);

fUi.window->setSize(static_cast<uint>(width), static_cast<uint>(height), true);

return 0;
}

void handleUiWrite(const uint32_t rindex, const uint32_t bufferSize, const uint32_t format, const void* const buffer)
void handleUIWrite(const uint32_t rindex, const uint32_t bufferSize, const uint32_t format, const void* const buffer)
{
CARLA_SAFE_ASSERT_RETURN(buffer != nullptr,);
CARLA_SAFE_ASSERT_RETURN(bufferSize > 0,);
carla_debug("Lv2Plugin::handleUiWrite(%i, %i, %i, %p)", rindex, bufferSize, format, buffer);
carla_debug("Lv2Plugin::handleUIWrite(%i, %i, %i, %p)", rindex, bufferSize, format, buffer);

uint32_t index = LV2UI_INVALID_PORT_INDEX;

@@ -4350,7 +4344,7 @@ public:
} break;

default:
carla_stdout("Lv2Plugin::handleUiWrite(%i, %i, %i:\"%s\", %p) - unknown format", rindex, bufferSize, format, carla_lv2_urid_unmap(this, format), buffer);
carla_stdout("Lv2Plugin::handleUIWrite(%i, %i, %i:\"%s\", %p) - unknown format", rindex, bufferSize, format, carla_lv2_urid_unmap(this, format), buffer);
break;
}
}
@@ -5282,7 +5276,7 @@ private:
const LV2UI_Descriptor* descriptor;
const LV2_RDF_UI* rdfDescriptor;

CarlaPluginUi* window;
CarlaPluginUI* window;

UI()
: type(TYPE_NULL),
@@ -5724,7 +5718,7 @@ private:
CARLA_SAFE_ASSERT_RETURN(controller != nullptr,);
carla_debug("carla_lv2_external_ui_closed(%p)", controller);

((Lv2Plugin*)controller)->handleExternalUiClosed();
((Lv2Plugin*)controller)->handleExternalUIClosed();
}

// -------------------------------------------------------------------
@@ -5735,7 +5729,7 @@ private:
CARLA_SAFE_ASSERT_RETURN(handle != nullptr, LV2UI_INVALID_PORT_INDEX);
carla_debug("carla_lv2_ui_port_map(%p, \"%s\")", handle, symbol);

return ((Lv2Plugin*)handle)->handleUiPortMap(symbol);
return ((Lv2Plugin*)handle)->handleUIPortMap(symbol);
}

// -------------------------------------------------------------------
@@ -5746,7 +5740,7 @@ private:
CARLA_SAFE_ASSERT_RETURN(handle != nullptr, 1);
carla_debug("carla_lv2_ui_resize(%p, %i, %i)", handle, width, height);

return ((Lv2Plugin*)handle)->handleUiResize(width, height);
return ((Lv2Plugin*)handle)->handleUIResize(width, height);
}

// -------------------------------------------------------------------
@@ -5757,7 +5751,7 @@ private:
CARLA_SAFE_ASSERT_RETURN(controller != nullptr,);
carla_debug("carla_lv2_ui_write_function(%p, %i, %i, %i, %p)", controller, port_index, buffer_size, format, buffer);

((Lv2Plugin*)controller)->handleUiWrite(port_index, buffer_size, format, buffer);
((Lv2Plugin*)controller)->handleUIWrite(port_index, buffer_size, format, buffer);
}

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


+ 9
- 15
source/backend/plugin/VstPlugin.cpp View File

@@ -51,7 +51,7 @@ const uint PLUGIN_WANTS_MIDI_INPUT = 0x8000;
// -----------------------------------------------------

class VstPlugin : public CarlaPlugin,
CarlaPluginUi::CloseCallback
CarlaPluginUI::CloseCallback
{
public:
VstPlugin(CarlaEngine* const engine, const uint id)
@@ -437,16 +437,16 @@ public:

#if defined(CARLA_OS_LINUX)
# ifdef HAVE_X11
fUi.window = CarlaPluginUi::newX11(this, frontendWinId);
fUi.window = CarlaPluginUI::newX11(this, frontendWinId);
# else
msg = "UI is only for systems with X11";
# endif
#elif defined(CARLA_OS_MAC)
# ifdef __LP64__
fUi.window = CarlaPluginUi::newCocoa(this, frontendWinId);
fUi.window = CarlaPluginUI::newCocoa(this, frontendWinId);
# endif
#elif defined(CARLA_OS_WIN)
fUi.window = CarlaPluginUi::newWindows(this, frontendWinId);
fUi.window = CarlaPluginUI::newWindows(this, frontendWinId);
#else
msg = "Unknown UI type";
#endif
@@ -1760,11 +1760,11 @@ public:
// -------------------------------------------------------------------

protected:
void handlePluginUiClosed() override
void handlePluginUIClosed() override
{
CARLA_SAFE_ASSERT_RETURN(fUi.type == UI::UI_EMBED || fUi.type == UI::UI_EXTERNAL,);
CARLA_SAFE_ASSERT_RETURN(fUi.window != nullptr,);
carla_debug("VstPlugin::handlePluginUiClosed()");
carla_debug("VstPlugin::handlePluginUIClosed()");

showCustomUI(false);
pData->engine->callback(ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0.0f, nullptr);
@@ -2041,7 +2041,7 @@ protected:
if (index == 0xedcd && value == 0 && ptr != nullptr && std::strcmp((const char*)ptr, "EditorClosed") == 0)
{
CARLA_SAFE_ASSERT_BREAK(fUi.type == UI::UI_EXTERNAL);
handlePluginUiClosed();
handlePluginUIClosed();
break;
}
// TODO - cockos extensions
@@ -2295,13 +2295,7 @@ public:
CarlaString bridgeBinary(pData->engine->getOptions().binaryDir);

#if defined(CARLA_OS_LINUX)
bridgeBinary += "carla-bridge-vst-x11";
#elif defined(CARLA_OS_MAC)
bridgeBinary += "carla-bridge-vst-mac";
#elif defined(CARLA_OS_WIN)
bridgeBinary += "carla-bridge-vst-hwnd.exe";
#else
bridgeBinary.clear();
bridgeBinary += OS_SEP_STR "carla-bridge-vst-x11";
#endif

if (bridgeBinary.isNotEmpty() && File(bridgeBinary.buffer()).existsAsFile())
@@ -2377,7 +2371,7 @@ private:
} type;

bool isVisible; // not used in OSC mode
CarlaPluginUi* window;
CarlaPluginUI* window;

UI()
: type(UI_NULL),


+ 7
- 1
source/bridges-ui/CarlaBridgeClient.cpp View File

@@ -1,6 +1,6 @@
/*
* Carla Bridge Client
* Copyright (C) 2011-2013 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2011-2014 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
@@ -213,6 +213,12 @@ void* CarlaBridgeClient::getContainerId()
return fUI.toolkit->getContainerId();
}

void* CarlaBridgeClient::getContainerId2()
{
carla_debug("CarlaBridgeClient::getContainerId2()");
return fUI.toolkit->getContainerId2();
}

bool CarlaBridgeClient::uiLibOpen(const char* const filename)
{
CARLA_ASSERT(fUI.lib == nullptr);


+ 2
- 2
source/bridges-ui/CarlaBridgeClient.hpp View File

@@ -1,6 +1,6 @@
/*
* Carla Bridge Client
* Copyright (C) 2011-2013 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2011-2014 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
@@ -43,7 +43,6 @@ public:

virtual void* getWidget() const = 0;
virtual bool isResizable() const = 0;
virtual bool needsReparent() const = 0;

// ---------------------------------------------------------------------
// ui processing
@@ -91,6 +90,7 @@ protected:
// ---------------------------------------------------------------------

void* getContainerId();
void* getContainerId2();
bool uiLibOpen(const char* const filename);
bool uiLibClose();
void* uiLibSymbol(const char* const symbol);


+ 2
- 1
source/bridges-ui/CarlaBridgeToolkit.hpp View File

@@ -38,7 +38,8 @@ public:
virtual void hide() = 0;
virtual void resize(const int width, const int height) = 0;

virtual void* getContainerId() const { return nullptr; }
virtual void* getContainerId() const { return nullptr; }
virtual void* getContainerId2() const { return nullptr; }

static CarlaBridgeToolkit* createNew(CarlaBridgeClient* const client, const char* const uiTitle);



+ 10
- 10
source/bridges-ui/CarlaBridgeToolkitGtk.cpp View File

@@ -81,19 +81,19 @@ public:
gtk_container_add(GTK_CONTAINER(fWindow), widget);

gtk_window_set_resizable(GTK_WINDOW(fWindow), kClient->isResizable());
gtk_window_set_title(GTK_WINDOW(fWindow), kUiTitle);
gtk_window_set_title(GTK_WINDOW(fWindow), kWindowTitle);

#if 0
{
QSettings settings("falkTX", appName);

if (settings.contains(QString("%1/pos_x").arg(kUiTitle)))
if (settings.contains(QString("%1/pos_x").arg(kWindowTitle)))
{
gtk_window_get_position(GTK_WINDOW(fWindow), &fLastX, &fLastY);

bool hasX, hasY;
fLastX = settings.value(QString("%1/pos_x").arg(kUiTitle), fLastX).toInt(&hasX);
fLastY = settings.value(QString("%1/pos_y").arg(kUiTitle), fLastY).toInt(&hasY);
fLastX = settings.value(QString("%1/pos_x").arg(kWindowTitle), fLastX).toInt(&hasX);
fLastY = settings.value(QString("%1/pos_y").arg(kWindowTitle), fLastY).toInt(&hasY);

if (hasX && hasY)
gtk_window_move(GTK_WINDOW(fWindow), fLastX, fLastY);
@@ -103,8 +103,8 @@ public:
gtk_window_get_size(GTK_WINDOW(fWindow), &fLastWidth, &fLastHeight);

bool hasWidth, hasHeight;
fLastWidth = settings.value(QString("%1/width").arg(kUiTitle), fLastWidth).toInt(&hasWidth);
fLastHeight = settings.value(QString("%1/height").arg(kUiTitle), fLastHeight).toInt(&hasHeight);
fLastWidth = settings.value(QString("%1/width").arg(kWindowTitle), fLastWidth).toInt(&hasWidth);
fLastHeight = settings.value(QString("%1/height").arg(kWindowTitle), fLastHeight).toInt(&hasHeight);

if (hasWidth && hasHeight)
gtk_window_resize(GTK_WINDOW(fWindow), fLastWidth, fLastHeight);
@@ -194,10 +194,10 @@ protected:

#if 0
QSettings settings("falkTX", appName);
settings.setValue(QString("%1/pos_x").arg(kUiTitle), fLastX);
settings.setValue(QString("%1/pos_y").arg(kUiTitle), fLastY);
settings.setValue(QString("%1/width").arg(kUiTitle), fLastWidth);
settings.setValue(QString("%1/height").arg(kUiTitle), fLastHeight);
settings.setValue(QString("%1/pos_x").arg(kWindowTitle), fLastX);
settings.setValue(QString("%1/pos_y").arg(kWindowTitle), fLastY);
settings.setValue(QString("%1/width").arg(kWindowTitle), fLastWidth);
settings.setValue(QString("%1/height").arg(kWindowTitle), fLastHeight);
#endif
}



+ 127
- 2
source/bridges-ui/CarlaBridgeToolkitPlugin.cpp View File

@@ -24,10 +24,135 @@ CARLA_BRIDGE_START_NAMESPACE

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

class CarlaBridgeToolkitPlugin : public CarlaBridgeToolkit,
private CarlaPluginUI::CloseCallback
{
public:
CarlaBridgeToolkitPlugin(CarlaBridgeClient* const client, const char* const uiTitle)
: CarlaBridgeToolkit(client, uiTitle),
fUI(nullptr),
fIdling(false)
{
carla_debug("CarlaBridgeToolkitPlugin::CarlaBridgeToolkitPlugin(%p, \"%s\")", client, uiTitle);
}

~CarlaBridgeToolkitPlugin() override
{
CARLA_SAFE_ASSERT_RETURN(fUI == nullptr,);
carla_debug("CarlaBridgeToolkitPlugin::~CarlaBridgeToolkitPlugin()");
}

void init() override
{
CARLA_SAFE_ASSERT_RETURN(fUI == nullptr,);
carla_debug("CarlaBridgeToolkitPlugin::init()");

#if defined(CARLA_OS_MAC) && defined(BRIDGE_COCOA)
fUI = CarlaPluginUI::newCocoa(this, 0);
#elif defined(CARLA_OS_WIN) && defined(BRIDGE_HWND)
fUI = CarlaPluginUI::newWindows(this, 0);
#elif defined(HAVE_X11) && defined(BRIDGE_X11)
fUI = CarlaPluginUI::newX11(this, 0);
#endif
CARLA_SAFE_ASSERT_RETURN(fUI != nullptr,);

fUI->setTitle(kWindowTitle);
}

void exec(const bool showUI) override
{
CARLA_SAFE_ASSERT_RETURN(kClient != nullptr,);
CARLA_SAFE_ASSERT_RETURN(fUI != nullptr,);
carla_debug("CarlaBridgeToolkitPlugin::exec(%s)", bool2str(showUI));

if (showUI)
fUI->show();

fIdling = true;

for (; fIdling;)
{
fUI->idle();
kClient->uiIdle();

if (! kClient->oscIdle())
break;

carla_msleep(20);
}
}

void quit() override
{
CARLA_SAFE_ASSERT_RETURN(fUI != nullptr,);
carla_debug("CarlaBridgeToolkitPlugin::quit()");

fIdling = false;

delete fUI;
fUI = nullptr;
}

void show() override
{
CARLA_SAFE_ASSERT_RETURN(fUI != nullptr,);
carla_debug("CarlaBridgeToolkitPlugin::show()");

fUI->show();
}

void hide() override
{
CARLA_SAFE_ASSERT_RETURN(fUI != nullptr,);
carla_debug("CarlaBridgeToolkitPlugin::hide()");

fUI->hide();
}

void resize(int width, int height) override
{
CARLA_SAFE_ASSERT_RETURN(fUI != nullptr,);
carla_debug("CarlaBridgeToolkitPlugin::resize(%i, %i)", width, height);

fUI->setSize(width, height, false);
}

void* getContainerId() const override
{
CARLA_SAFE_ASSERT_RETURN(fUI != nullptr, nullptr);

return fUI->getPtr();
}

#ifdef HAVE_X11
void* getContainerId2() const override
{
CARLA_SAFE_ASSERT_RETURN(fUI != nullptr, nullptr);

return fUI->getDisplay();
}
#endif

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

protected:
void handlePluginUIClosed() override
{
fIdling = false;
}

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

private:
CarlaPluginUI* fUI;
bool fIdling;
};

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

CarlaBridgeToolkit* CarlaBridgeToolkit::createNew(CarlaBridgeClient* const client, const char* const uiTitle)
{
return nullptr;
(void)client; (void)uiTitle;
return new CarlaBridgeToolkitPlugin(client, uiTitle);
}

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


+ 1
- 1
source/bridges-ui/CarlaBridgeToolkitQt.cpp View File

@@ -1,6 +1,6 @@
/*
* Carla Bridge Toolkit, Qt version
* Copyright (C) 2011-2013 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2011-2014 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


+ 6
- 16
source/bridges-ui/CarlaBridgeUI-LV2.cpp View File

@@ -470,14 +470,13 @@ public:

void uiClose() override
{
CarlaBridgeClient::uiClose();

if (fHandle != nullptr && fDescriptor != nullptr && fDescriptor->cleanup != nullptr)
{
fDescriptor->cleanup(fHandle);
fHandle = nullptr;
}

CarlaBridgeClient::uiClose();
uiLibClose();
}

@@ -494,15 +493,6 @@ public:
return fIsResizable;
}

bool needsReparent() const override
{
#if defined(BRIDGE_COCOA) || defined(BRIDGE_HWND) || defined(BRIDGE_X11)
return true;
#else
return false;
#endif
}

// ---------------------------------------------------------------------
// ui processing

@@ -1154,14 +1144,14 @@ private:
CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaLv2Client)
};

#define lv2ClientPtr ((CarlaLv2Client*)fClient)
#define lv2ClientPtr ((CarlaLv2Client*)kClient)

int CarlaBridgeOsc::handleMsgLv2UiAtomTransfer(CARLA_BRIDGE_OSC_HANDLE_ARGS)
int CarlaBridgeOsc::handleMsgLv2AtomTransfer(CARLA_BRIDGE_OSC_HANDLE_ARGS)
{
CARLA_BRIDGE_OSC_CHECK_OSC_TYPES(2, "is");
carla_debug("CarlaBridgeOsc::handleMsgLv2AtomTransfer()");

if (fClient == nullptr)
if (kClient == nullptr)
return 1;

const int32_t portIndex = argv[0]->i;
@@ -1178,12 +1168,12 @@ int CarlaBridgeOsc::handleMsgLv2UiAtomTransfer(CARLA_BRIDGE_OSC_HANDLE_ARGS)
return 0;
}

int CarlaBridgeOsc::handleMsgLv2UiUridMap(CARLA_BRIDGE_OSC_HANDLE_ARGS)
int CarlaBridgeOsc::handleMsgLv2UridMap(CARLA_BRIDGE_OSC_HANDLE_ARGS)
{
CARLA_BRIDGE_OSC_CHECK_OSC_TYPES(2, "is");
carla_debug("CarlaBridgeOsc::handleMsgLv2UridMap()");

if (fClient == nullptr)
if (kClient == nullptr)
return 1;

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


+ 14
- 46
source/bridges-ui/CarlaBridgeUI-VST.cpp View File

@@ -1,6 +1,6 @@
/*
* Carla Bridge UI, VST version
* Copyright (C) 2011-2013 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2011-2014 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
@@ -20,13 +20,6 @@
#include "CarlaVstUtils.hpp"
#include "CarlaMIDI.h"

#include <QtCore/QObject> // FIXME
#include <QtCore/QTimerEvent>

#if defined(Q_WS_X11) && (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
# include <QtGui/QX11Info>
#endif

CARLA_BRIDGE_START_NAMESPACE

// -------------------------------------------------------------------------
@@ -35,17 +28,13 @@ CARLA_BRIDGE_START_NAMESPACE
uint32_t bufferSize = 512;
double sampleRate = 44100.0;

class CarlaVstClient : public QObject,
public CarlaBridgeClient
class CarlaVstClient : public CarlaBridgeClient
{
public:
CarlaVstClient(const char* const uiTitle)
: QObject(nullptr),
CarlaBridgeClient(uiTitle)
: CarlaBridgeClient(uiTitle)
{
effect = nullptr;

idleTimer = 0;
needIdle = false;

// make client valid
@@ -108,9 +97,9 @@ public:
effect->resvd1 = ToVstPtr(this);
#endif

int32_t value = 0;
#if defined(Q_WS_X11) && (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
value = (int64_t)QX11Info::display();
intptr_t value = 0;
#if defined(HAVE_X11) && defined(BRIDGE_X11)
value = (intptr_t)getContainerId2();
#endif

effect->dispatcher(effect, effOpen, 0, 0, nullptr, 0.0f);
@@ -145,20 +134,18 @@ public:
toolkitResize(width, height);
}

idleTimer = startTimer(50);

return true;
}

void uiIdle() override
{
// TODO
if (needIdle)
effect->dispatcher(effect, effIdle, 0, 0, nullptr, 0.0f);
effect->dispatcher(effect, effEditIdle, 0, 0, nullptr, 0.0f);
}

void uiClose() override
{
CarlaBridgeClient::uiClose();

if (effect != nullptr)
{
effect->dispatcher(effect, effEditClose, 0, 0, nullptr, 0.0f);
@@ -166,6 +153,7 @@ public:
effect = nullptr;
}

CarlaBridgeClient::uiClose();
uiLibClose();
}

@@ -182,11 +170,6 @@ public:
return false;
}

bool needsReparent() const override
{
return true;
}

// ---------------------------------------------------------------------
// ui processing

@@ -241,7 +224,7 @@ public:

intptr_t handleAudioMasterGetTime()
{
memset(&vstTimeInfo, 0, sizeof(VstTimeInfo_R));
memset(&vstTimeInfo, 0, sizeof(VstTimeInfo));

vstTimeInfo.sampleRate = sampleRate;

@@ -420,8 +403,8 @@ public:
break;

case audioMasterGetTime:
static VstTimeInfo_R timeInfo;
memset(&timeInfo, 0, sizeof(VstTimeInfo_R));
static VstTimeInfo timeInfo;
memset(&timeInfo, 0, sizeof(VstTimeInfo));
timeInfo.sampleRate = sampleRate;

// Tempo
@@ -507,27 +490,12 @@ public:
return ret;
}

protected:
void timerEvent(QTimerEvent* const event)
{
if (event->timerId() == idleTimer && effect)
{
if (needIdle)
effect->dispatcher(effect, effIdle, 0, 0, nullptr, 0.0f);

effect->dispatcher(effect, effEditIdle, 0, 0, nullptr, 0.0f);
}

QObject::timerEvent(event);
}

private:
int unique1;

AEffect* effect;
VstTimeInfo_R vstTimeInfo;
VstTimeInfo vstTimeInfo;

int idleTimer;
bool needIdle;
static CarlaVstClient* lastVstPlugin;



+ 11
- 14
source/bridges-ui/Makefile View File

@@ -19,8 +19,8 @@ ifeq ($(CARLA_VESTIGE_HEADER),true)
BUILD_VST_FLAGS += -DVESTIGE_HEADER
endif

LINK_FLAGS += $(LIBLO_LIBS)
LINK_FLAGS += $(JUCE_CORE_LIBS)
LINK_FLAGS += $(LIBLO_LIBS)

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

@@ -36,8 +36,8 @@ LINK_LV2_QT4_FLAGS = $(LINK_FLAGS) $(shell pkg-config --libs QtCore QtGui)
BUILD_LV2_QT5_FLAGS = $(BUILD_LV2_FLAGS) -DBRIDGE_QT5 -DBRIDGE_LV2_QT5 $(shell pkg-config --cflags Qt5Core Qt5Gui Qt5Widgets)
LINK_LV2_QT5_FLAGS = $(LINK_FLAGS) $(shell pkg-config --libs Qt5Core Qt5Gui Qt5Widgets) -ldl

BUILD_LV2_X11_FLAGS = $(BUILD_LV2_FLAGS) -DBRIDGE_X11 -DBRIDGE_LV2_X11
LINK_LV2_X11_FLAGS = $(LINK_FLAGS) -ldl
BUILD_LV2_X11_FLAGS = $(BUILD_LV2_FLAGS) -DBRIDGE_X11 -DBRIDGE_LV2_X11 $(X11_FLAGS)
LINK_LV2_X11_FLAGS = $(LINK_FLAGS) $(X11_LIBS) -ldl

BUILD_LV2_COCOA_FLAGS = $(BUILD_LV2_FLAGS) -DBRIDGE_COCOA -DBRIDGE_LV2_COCOA
LINK_LV2_COCOA_FLAGS = $(LINK_FLAGS) -ldl
@@ -45,25 +45,25 @@ LINK_LV2_COCOA_FLAGS = $(LINK_FLAGS) -ldl
BUILD_LV2_WINDOWS_FLAGS = $(BUILD_LV2_FLAGS) -DBRIDGE_HWND -DBRIDGE_LV2_HWND
LINK_LV2_WINDOWS_FLAGS = $(LINK_FLAGS) -static -mwindows

BUILD_VST_X11_FLAGS = $(BUILD_VST_FLAGS) -DBRIDGE_X11 -DBRIDGE_VST_X11
LINK_VST_X11_FLAGS = $(LINK_FLAGS) -ldl
BUILD_VST_X11_FLAGS = $(BUILD_VST_FLAGS) -DBRIDGE_X11 -DBRIDGE_VST_X11 $(X11_FLAGS)
LINK_VST_X11_FLAGS = $(LINK_FLAGS) $(X11_LIBS) -ldl

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

ifeq ($(HAVE_GTK2),true)
TARGETS += ui_lv2-gtk2
# TARGETS += ui_lv2-gtk2
endif

ifeq ($(HAVE_GTK3),true)
TARGETS += ui_lv2-gtk3
# TARGETS += ui_lv2-gtk3
endif

ifeq ($(HAVE_QT4),true)
TARGETS += ui_lv2-qt4
# TARGETS += ui_lv2-qt4
endif

ifeq ($(HAVE_QT5),true)
TARGETS += ui_lv2-qt5
# TARGETS += ui_lv2-qt5
endif

ifeq ($(HAVE_X11),true)
@@ -81,10 +81,7 @@ endif

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

# all: $(TARGETS)

# TODO
all:
all: $(TARGETS)

ui_lv2-gtk2: ../../bin/carla-bridge-lv2-gtk2
ui_lv2-gtk3: ../../bin/carla-bridge-lv2-gtk3
@@ -237,7 +234,7 @@ OBJS_VST_X11 = \
CarlaBridgeToolkitPlugin__vst-x11.o \
CarlaBridgeUI-VST__vst-x11.o \

../../bin/carla-bridge-vst-x11: $(OBJS_VST_X11) $(OBJS_VST_LIBS) ../modules/theme.a
../../bin/carla-bridge-vst-x11: $(OBJS_VST_X11) $(OBJS_VST_LIBS)
$(CXX) $^ $(LINK_VST_X11_FLAGS) -o $@

%__vst-x11.o: %.cpp


+ 8
- 8
source/utils/CarlaPluginUI.cpp View File

@@ -41,11 +41,11 @@ static int temporaryErrorHandler(Display*, XErrorEvent*)
return 0;
}

class X11PluginUi : public CarlaPluginUi
class X11PluginUi : public CarlaPluginUI
{
public:
X11PluginUi(CloseCallback* const cb, const uintptr_t parentId) noexcept
: CarlaPluginUi(cb),
: CarlaPluginUI(cb),
fDisplay(nullptr),
fWindow(0),
fIsVisible(false),
@@ -184,7 +184,7 @@ public:
{
fIsVisible = false;
CARLA_SAFE_ASSERT_CONTINUE(fCallback != nullptr);
fCallback->handlePluginUiClosed();
fCallback->handlePluginUIClosed();
}
break;

@@ -193,7 +193,7 @@ public:
{
fIsVisible = false;
CARLA_SAFE_ASSERT_CONTINUE(fCallback != nullptr);
fCallback->handlePluginUiClosed();
fCallback->handlePluginUIClosed();
}
break;
}
@@ -298,7 +298,7 @@ private:

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

bool CarlaPluginUi::tryTransientWinIdMatch(const uintptr_t pid, const char* const uiTitle, const uintptr_t winId)
bool CarlaPluginUI::tryTransientWinIdMatch(const uintptr_t pid, const char* const uiTitle, const uintptr_t winId)
{
CARLA_SAFE_ASSERT_RETURN(uiTitle != nullptr && uiTitle[0] != '\0', true);
CARLA_SAFE_ASSERT_RETURN(winId != 0, true);
@@ -456,7 +456,7 @@ bool CarlaPluginUi::tryTransientWinIdMatch(const uintptr_t pid, const char* cons
// -----------------------------------------------------

#ifdef CARLA_OS_MAC
CarlaPluginUi* CarlaPluginUi::newCocoa(CloseCallback*, uintptr_t)
CarlaPluginUI* CarlaPluginUI::newCocoa(CloseCallback*, uintptr_t)
{
//return new CocoaPluginUi(cb, parentId);
return nullptr;
@@ -464,7 +464,7 @@ CarlaPluginUi* CarlaPluginUi::newCocoa(CloseCallback*, uintptr_t)
#endif

#ifdef CARLA_OS_WIN
CarlaPluginUi* CarlaPluginUi::newWindows(CloseCallback*, uintptr_t)
CarlaPluginUI* CarlaPluginUI::newWindows(CloseCallback*, uintptr_t)
{
//return new WindowsPluginUi(cb, parentId);
return nullptr;
@@ -472,7 +472,7 @@ CarlaPluginUi* CarlaPluginUi::newWindows(CloseCallback*, uintptr_t)
#endif

#ifdef HAVE_X11
CarlaPluginUi* CarlaPluginUi::newX11(CloseCallback* cb, uintptr_t parentId)
CarlaPluginUI* CarlaPluginUI::newX11(CloseCallback* cb, uintptr_t parentId)
{
return new X11PluginUi(cb, parentId);
}


+ 7
- 7
source/utils/CarlaPluginUI.hpp View File

@@ -22,16 +22,16 @@

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

class CarlaPluginUi
class CarlaPluginUI
{
public:
class CloseCallback {
public:
virtual ~CloseCallback() {}
virtual void handlePluginUiClosed() = 0;
virtual void handlePluginUIClosed() = 0;
};

virtual ~CarlaPluginUi() {}
virtual ~CarlaPluginUI() {}
virtual void show() = 0;
virtual void hide() = 0;
virtual void focus() = 0;
@@ -47,19 +47,19 @@ public:
static bool tryTransientWinIdMatch(const uintptr_t pid, const char* const uiTitle, const uintptr_t winId);

#ifdef CARLA_OS_MAC
static CarlaPluginUi* newCocoa(CloseCallback*, uintptr_t);
static CarlaPluginUI* newCocoa(CloseCallback*, uintptr_t);
#endif
#ifdef CARLA_OS_WIN
static CarlaPluginUi* newWindows(CloseCallback*, uintptr_t);
static CarlaPluginUI* newWindows(CloseCallback*, uintptr_t);
#endif
#ifdef HAVE_X11
static CarlaPluginUi* newX11(CloseCallback*, uintptr_t);
static CarlaPluginUI* newX11(CloseCallback*, uintptr_t);
#endif

protected:
bool fIsIdling;
CloseCallback* fCallback;
CarlaPluginUi(CloseCallback* const cb) noexcept : fIsIdling(false), fCallback(cb) {}
CarlaPluginUI(CloseCallback* const cb) noexcept : fIsIdling(false), fCallback(cb) {}
};

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


Loading…
Cancel
Save