@@ -28,7 +28,7 @@ all: BIN RES UI WIDGETS | |||||
# -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
# Binaries (native) | # 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 | bin/carla-bridge-native$(APP_EXT): libs .FORCE | ||||
$(MAKE) -C source/bridges-plugin | $(MAKE) -C source/bridges-plugin | ||||
# -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
bridges-ui: libs .FORCE | |||||
$(MAKE) -C source/bridges-ui | |||||
# -------------------------------------------------------------- | |||||
discovery: bin/carla-discovery-native$(APP_EXT) | discovery: bin/carla-discovery-native$(APP_EXT) | ||||
bin/carla-discovery-native$(APP_EXT): libs .FORCE | 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 | bin/carla-native.lv2/carla-native$(LIB_EXT): backend .FORCE | ||||
$(MAKE) -C source/plugin ../../$@ | $(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-export$(APP_EXT); cd .. | ||||
cd bin/carla-native.lv2 && $(LINK) ../*bridge-* ../carla-discovery-* .; cd .. | cd bin/carla-native.lv2 && $(LINK) ../*bridge-* ../carla-discovery-* .; cd .. | ||||
@@ -1385,7 +1385,7 @@ void CarlaPlugin::idle() | |||||
CarlaString uiTitle(pData->name); | CarlaString uiTitle(pData->name); | ||||
uiTitle += " (GUI)"; | 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; | pData->transientTryCounter = 0; | ||||
} | } | ||||
@@ -379,7 +379,7 @@ struct Lv2PluginOptions { | |||||
// ----------------------------------------------------- | // ----------------------------------------------------- | ||||
class Lv2Plugin : public CarlaPlugin, | class Lv2Plugin : public CarlaPlugin, | ||||
CarlaPluginUi::CloseCallback | |||||
CarlaPluginUI::CloseCallback | |||||
{ | { | ||||
public: | public: | ||||
Lv2Plugin(CarlaEngine* const engine, const uint id) | Lv2Plugin(CarlaEngine* const engine, const uint id) | ||||
@@ -1175,7 +1175,7 @@ public: | |||||
case LV2_UI_COCOA: | case LV2_UI_COCOA: | ||||
# ifdef CARLA_OS_MAC | # ifdef CARLA_OS_MAC | ||||
fUi.window = CarlaPluginUi::newCocoa(this, frontendWinId); | |||||
fUi.window = CarlaPluginUI::newCocoa(this, frontendWinId); | |||||
# else | # else | ||||
msg = "UI is for MacOS only"; | msg = "UI is for MacOS only"; | ||||
# endif | # endif | ||||
@@ -1183,7 +1183,7 @@ public: | |||||
case LV2_UI_WINDOWS: | case LV2_UI_WINDOWS: | ||||
# ifdef CARLA_OS_WIN | # ifdef CARLA_OS_WIN | ||||
fUi.window = CarlaPluginUi::newWindows(this, frontendWinId); | |||||
fUi.window = CarlaPluginUI::newWindows(this, frontendWinId); | |||||
# else | # else | ||||
msg = "UI is for Windows only"; | msg = "UI is for Windows only"; | ||||
# endif | # endif | ||||
@@ -1191,7 +1191,7 @@ public: | |||||
case LV2_UI_X11: | case LV2_UI_X11: | ||||
# ifdef HAVE_X11 | # ifdef HAVE_X11 | ||||
fUi.window = CarlaPluginUi::newX11(this, frontendWinId); | |||||
fUi.window = CarlaPluginUI::newX11(this, frontendWinId); | |||||
# else | # else | ||||
msg = "UI is only for systems with X11"; | msg = "UI is only for systems with X11"; | ||||
# endif | # endif | ||||
@@ -3879,38 +3879,32 @@ public: | |||||
if (bridgeBinary.isEmpty()) | if (bridgeBinary.isEmpty()) | ||||
return nullptr; | return nullptr; | ||||
#ifdef CARLA_OS_LINUX | |||||
// test for local build | |||||
if (bridgeBinary.endsWith("/source/backend/")) | |||||
bridgeBinary += "../bridges/"; | |||||
#endif | |||||
switch (type) | switch (type) | ||||
{ | { | ||||
case LV2_UI_GTK2: | case LV2_UI_GTK2: | ||||
bridgeBinary += "carla-bridge-lv2-gtk2"; | |||||
bridgeBinary += OS_SEP_STR "carla-bridge-lv2-gtk2"; | |||||
break; | break; | ||||
case LV2_UI_GTK3: | case LV2_UI_GTK3: | ||||
bridgeBinary += "carla-bridge-lv2-gtk3"; | |||||
bridgeBinary += OS_SEP_STR "carla-bridge-lv2-gtk3"; | |||||
break; | break; | ||||
case LV2_UI_QT4: | case LV2_UI_QT4: | ||||
bridgeBinary += "carla-bridge-lv2-qt4"; | |||||
bridgeBinary += OS_SEP_STR "carla-bridge-lv2-qt4"; | |||||
break; | break; | ||||
case LV2_UI_QT5: | case LV2_UI_QT5: | ||||
bridgeBinary += "carla-bridge-lv2-qt5"; | |||||
bridgeBinary += OS_SEP_STR "carla-bridge-lv2-qt5"; | |||||
break; | break; | ||||
case LV2_UI_COCOA: | case LV2_UI_COCOA: | ||||
bridgeBinary += "carla-bridge-lv2-cocoa"; | |||||
bridgeBinary += OS_SEP_STR "carla-bridge-lv2-cocoa"; | |||||
break; | break; | ||||
case LV2_UI_WINDOWS: | case LV2_UI_WINDOWS: | ||||
bridgeBinary += "carla-bridge-lv2-windows"; | |||||
bridgeBinary += OS_SEP_STR "carla-bridge-lv2-windows"; | |||||
break; | break; | ||||
case LV2_UI_X11: | case LV2_UI_X11: | ||||
bridgeBinary += "carla-bridge-lv2-x11"; | |||||
bridgeBinary += OS_SEP_STR "carla-bridge-lv2-x11"; | |||||
break; | break; | ||||
case LV2_UI_EXTERNAL: | case LV2_UI_EXTERNAL: | ||||
case LV2_UI_OLD_EXTERNAL: | case LV2_UI_OLD_EXTERNAL: | ||||
bridgeBinary += "carla-bridge-lv2-external"; | |||||
bridgeBinary += OS_SEP_STR "carla-bridge-lv2-external"; | |||||
break; | break; | ||||
default: | default: | ||||
return nullptr; | return nullptr; | ||||
@@ -4235,10 +4229,10 @@ public: | |||||
// ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
void handleExternalUiClosed() | |||||
void handleExternalUIClosed() | |||||
{ | { | ||||
CARLA_SAFE_ASSERT_RETURN(fUi.type == UI::TYPE_EXTERNAL,); | 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) | if (fUi.handle != nullptr && fUi.descriptor != nullptr && fUi.descriptor->cleanup != nullptr) | ||||
fUi.descriptor->cleanup(fUi.handle); | 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); | 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.type == UI::TYPE_EMBED,); | ||||
CARLA_SAFE_ASSERT_RETURN(fUi.window != nullptr,); | CARLA_SAFE_ASSERT_RETURN(fUi.window != nullptr,); | ||||
carla_debug("Lv2Plugin::handlePluginUiClosed()"); | |||||
carla_debug("Lv2Plugin::handlePluginUIClosed()"); | |||||
fUi.window->hide(); | 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_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) | for (uint32_t i=0; i < fRdfDescriptor->PortCount; ++i) | ||||
{ | { | ||||
@@ -4280,23 +4274,23 @@ public: | |||||
return LV2UI_INVALID_PORT_INDEX; | 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(fUi.window != nullptr, 1); | ||||
CARLA_SAFE_ASSERT_RETURN(width > 0, 1); | CARLA_SAFE_ASSERT_RETURN(width > 0, 1); | ||||
CARLA_SAFE_ASSERT_RETURN(height > 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); | fUi.window->setSize(static_cast<uint>(width), static_cast<uint>(height), true); | ||||
return 0; | 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(buffer != nullptr,); | ||||
CARLA_SAFE_ASSERT_RETURN(bufferSize > 0,); | 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; | uint32_t index = LV2UI_INVALID_PORT_INDEX; | ||||
@@ -4350,7 +4344,7 @@ public: | |||||
} break; | } break; | ||||
default: | 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; | break; | ||||
} | } | ||||
} | } | ||||
@@ -5282,7 +5276,7 @@ private: | |||||
const LV2UI_Descriptor* descriptor; | const LV2UI_Descriptor* descriptor; | ||||
const LV2_RDF_UI* rdfDescriptor; | const LV2_RDF_UI* rdfDescriptor; | ||||
CarlaPluginUi* window; | |||||
CarlaPluginUI* window; | |||||
UI() | UI() | ||||
: type(TYPE_NULL), | : type(TYPE_NULL), | ||||
@@ -5724,7 +5718,7 @@ private: | |||||
CARLA_SAFE_ASSERT_RETURN(controller != nullptr,); | CARLA_SAFE_ASSERT_RETURN(controller != nullptr,); | ||||
carla_debug("carla_lv2_external_ui_closed(%p)", controller); | 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_SAFE_ASSERT_RETURN(handle != nullptr, LV2UI_INVALID_PORT_INDEX); | ||||
carla_debug("carla_lv2_ui_port_map(%p, \"%s\")", handle, symbol); | 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_SAFE_ASSERT_RETURN(handle != nullptr, 1); | ||||
carla_debug("carla_lv2_ui_resize(%p, %i, %i)", handle, width, height); | 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_SAFE_ASSERT_RETURN(controller != nullptr,); | ||||
carla_debug("carla_lv2_ui_write_function(%p, %i, %i, %i, %p)", controller, port_index, buffer_size, format, buffer); | 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); | |||||
} | } | ||||
// ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
@@ -51,7 +51,7 @@ const uint PLUGIN_WANTS_MIDI_INPUT = 0x8000; | |||||
// ----------------------------------------------------- | // ----------------------------------------------------- | ||||
class VstPlugin : public CarlaPlugin, | class VstPlugin : public CarlaPlugin, | ||||
CarlaPluginUi::CloseCallback | |||||
CarlaPluginUI::CloseCallback | |||||
{ | { | ||||
public: | public: | ||||
VstPlugin(CarlaEngine* const engine, const uint id) | VstPlugin(CarlaEngine* const engine, const uint id) | ||||
@@ -437,16 +437,16 @@ public: | |||||
#if defined(CARLA_OS_LINUX) | #if defined(CARLA_OS_LINUX) | ||||
# ifdef HAVE_X11 | # ifdef HAVE_X11 | ||||
fUi.window = CarlaPluginUi::newX11(this, frontendWinId); | |||||
fUi.window = CarlaPluginUI::newX11(this, frontendWinId); | |||||
# else | # else | ||||
msg = "UI is only for systems with X11"; | msg = "UI is only for systems with X11"; | ||||
# endif | # endif | ||||
#elif defined(CARLA_OS_MAC) | #elif defined(CARLA_OS_MAC) | ||||
# ifdef __LP64__ | # ifdef __LP64__ | ||||
fUi.window = CarlaPluginUi::newCocoa(this, frontendWinId); | |||||
fUi.window = CarlaPluginUI::newCocoa(this, frontendWinId); | |||||
# endif | # endif | ||||
#elif defined(CARLA_OS_WIN) | #elif defined(CARLA_OS_WIN) | ||||
fUi.window = CarlaPluginUi::newWindows(this, frontendWinId); | |||||
fUi.window = CarlaPluginUI::newWindows(this, frontendWinId); | |||||
#else | #else | ||||
msg = "Unknown UI type"; | msg = "Unknown UI type"; | ||||
#endif | #endif | ||||
@@ -1760,11 +1760,11 @@ public: | |||||
// ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
protected: | 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.type == UI::UI_EMBED || fUi.type == UI::UI_EXTERNAL,); | ||||
CARLA_SAFE_ASSERT_RETURN(fUi.window != nullptr,); | CARLA_SAFE_ASSERT_RETURN(fUi.window != nullptr,); | ||||
carla_debug("VstPlugin::handlePluginUiClosed()"); | |||||
carla_debug("VstPlugin::handlePluginUIClosed()"); | |||||
showCustomUI(false); | showCustomUI(false); | ||||
pData->engine->callback(ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0.0f, nullptr); | 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) | if (index == 0xedcd && value == 0 && ptr != nullptr && std::strcmp((const char*)ptr, "EditorClosed") == 0) | ||||
{ | { | ||||
CARLA_SAFE_ASSERT_BREAK(fUi.type == UI::UI_EXTERNAL); | CARLA_SAFE_ASSERT_BREAK(fUi.type == UI::UI_EXTERNAL); | ||||
handlePluginUiClosed(); | |||||
handlePluginUIClosed(); | |||||
break; | break; | ||||
} | } | ||||
// TODO - cockos extensions | // TODO - cockos extensions | ||||
@@ -2295,13 +2295,7 @@ public: | |||||
CarlaString bridgeBinary(pData->engine->getOptions().binaryDir); | CarlaString bridgeBinary(pData->engine->getOptions().binaryDir); | ||||
#if defined(CARLA_OS_LINUX) | #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 | #endif | ||||
if (bridgeBinary.isNotEmpty() && File(bridgeBinary.buffer()).existsAsFile()) | if (bridgeBinary.isNotEmpty() && File(bridgeBinary.buffer()).existsAsFile()) | ||||
@@ -2377,7 +2371,7 @@ private: | |||||
} type; | } type; | ||||
bool isVisible; // not used in OSC mode | bool isVisible; // not used in OSC mode | ||||
CarlaPluginUi* window; | |||||
CarlaPluginUI* window; | |||||
UI() | UI() | ||||
: type(UI_NULL), | : type(UI_NULL), | ||||
@@ -1,6 +1,6 @@ | |||||
/* | /* | ||||
* Carla Bridge Client | * 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 | * This program is free software; you can redistribute it and/or | ||||
* modify it under the terms of the GNU General Public License as | * modify it under the terms of the GNU General Public License as | ||||
@@ -213,6 +213,12 @@ void* CarlaBridgeClient::getContainerId() | |||||
return fUI.toolkit->getContainerId(); | return fUI.toolkit->getContainerId(); | ||||
} | } | ||||
void* CarlaBridgeClient::getContainerId2() | |||||
{ | |||||
carla_debug("CarlaBridgeClient::getContainerId2()"); | |||||
return fUI.toolkit->getContainerId2(); | |||||
} | |||||
bool CarlaBridgeClient::uiLibOpen(const char* const filename) | bool CarlaBridgeClient::uiLibOpen(const char* const filename) | ||||
{ | { | ||||
CARLA_ASSERT(fUI.lib == nullptr); | CARLA_ASSERT(fUI.lib == nullptr); | ||||
@@ -1,6 +1,6 @@ | |||||
/* | /* | ||||
* Carla Bridge Client | * 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 | * This program is free software; you can redistribute it and/or | ||||
* modify it under the terms of the GNU General Public License as | * modify it under the terms of the GNU General Public License as | ||||
@@ -43,7 +43,6 @@ public: | |||||
virtual void* getWidget() const = 0; | virtual void* getWidget() const = 0; | ||||
virtual bool isResizable() const = 0; | virtual bool isResizable() const = 0; | ||||
virtual bool needsReparent() const = 0; | |||||
// --------------------------------------------------------------------- | // --------------------------------------------------------------------- | ||||
// ui processing | // ui processing | ||||
@@ -91,6 +90,7 @@ protected: | |||||
// --------------------------------------------------------------------- | // --------------------------------------------------------------------- | ||||
void* getContainerId(); | void* getContainerId(); | ||||
void* getContainerId2(); | |||||
bool uiLibOpen(const char* const filename); | bool uiLibOpen(const char* const filename); | ||||
bool uiLibClose(); | bool uiLibClose(); | ||||
void* uiLibSymbol(const char* const symbol); | void* uiLibSymbol(const char* const symbol); | ||||
@@ -38,7 +38,8 @@ public: | |||||
virtual void hide() = 0; | virtual void hide() = 0; | ||||
virtual void resize(const int width, const int height) = 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); | static CarlaBridgeToolkit* createNew(CarlaBridgeClient* const client, const char* const uiTitle); | ||||
@@ -81,19 +81,19 @@ public: | |||||
gtk_container_add(GTK_CONTAINER(fWindow), widget); | gtk_container_add(GTK_CONTAINER(fWindow), widget); | ||||
gtk_window_set_resizable(GTK_WINDOW(fWindow), kClient->isResizable()); | 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 | #if 0 | ||||
{ | { | ||||
QSettings settings("falkTX", appName); | 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); | gtk_window_get_position(GTK_WINDOW(fWindow), &fLastX, &fLastY); | ||||
bool hasX, hasY; | 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) | if (hasX && hasY) | ||||
gtk_window_move(GTK_WINDOW(fWindow), fLastX, fLastY); | gtk_window_move(GTK_WINDOW(fWindow), fLastX, fLastY); | ||||
@@ -103,8 +103,8 @@ public: | |||||
gtk_window_get_size(GTK_WINDOW(fWindow), &fLastWidth, &fLastHeight); | gtk_window_get_size(GTK_WINDOW(fWindow), &fLastWidth, &fLastHeight); | ||||
bool hasWidth, hasHeight; | 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) | if (hasWidth && hasHeight) | ||||
gtk_window_resize(GTK_WINDOW(fWindow), fLastWidth, fLastHeight); | gtk_window_resize(GTK_WINDOW(fWindow), fLastWidth, fLastHeight); | ||||
@@ -194,10 +194,10 @@ protected: | |||||
#if 0 | #if 0 | ||||
QSettings settings("falkTX", appName); | 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 | #endif | ||||
} | } | ||||
@@ -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) | CarlaBridgeToolkit* CarlaBridgeToolkit::createNew(CarlaBridgeClient* const client, const char* const uiTitle) | ||||
{ | { | ||||
return nullptr; | |||||
(void)client; (void)uiTitle; | |||||
return new CarlaBridgeToolkitPlugin(client, uiTitle); | |||||
} | } | ||||
// ------------------------------------------------------------------------- | // ------------------------------------------------------------------------- | ||||
@@ -1,6 +1,6 @@ | |||||
/* | /* | ||||
* Carla Bridge Toolkit, Qt version | * 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 | * This program is free software; you can redistribute it and/or | ||||
* modify it under the terms of the GNU General Public License as | * modify it under the terms of the GNU General Public License as | ||||
@@ -470,14 +470,13 @@ public: | |||||
void uiClose() override | void uiClose() override | ||||
{ | { | ||||
CarlaBridgeClient::uiClose(); | |||||
if (fHandle != nullptr && fDescriptor != nullptr && fDescriptor->cleanup != nullptr) | if (fHandle != nullptr && fDescriptor != nullptr && fDescriptor->cleanup != nullptr) | ||||
{ | { | ||||
fDescriptor->cleanup(fHandle); | fDescriptor->cleanup(fHandle); | ||||
fHandle = nullptr; | fHandle = nullptr; | ||||
} | } | ||||
CarlaBridgeClient::uiClose(); | |||||
uiLibClose(); | uiLibClose(); | ||||
} | } | ||||
@@ -494,15 +493,6 @@ public: | |||||
return fIsResizable; | return fIsResizable; | ||||
} | } | ||||
bool needsReparent() const override | |||||
{ | |||||
#if defined(BRIDGE_COCOA) || defined(BRIDGE_HWND) || defined(BRIDGE_X11) | |||||
return true; | |||||
#else | |||||
return false; | |||||
#endif | |||||
} | |||||
// --------------------------------------------------------------------- | // --------------------------------------------------------------------- | ||||
// ui processing | // ui processing | ||||
@@ -1154,14 +1144,14 @@ private: | |||||
CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaLv2Client) | 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_BRIDGE_OSC_CHECK_OSC_TYPES(2, "is"); | ||||
carla_debug("CarlaBridgeOsc::handleMsgLv2AtomTransfer()"); | carla_debug("CarlaBridgeOsc::handleMsgLv2AtomTransfer()"); | ||||
if (fClient == nullptr) | |||||
if (kClient == nullptr) | |||||
return 1; | return 1; | ||||
const int32_t portIndex = argv[0]->i; | const int32_t portIndex = argv[0]->i; | ||||
@@ -1178,12 +1168,12 @@ int CarlaBridgeOsc::handleMsgLv2UiAtomTransfer(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||||
return 0; | 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_BRIDGE_OSC_CHECK_OSC_TYPES(2, "is"); | ||||
carla_debug("CarlaBridgeOsc::handleMsgLv2UridMap()"); | carla_debug("CarlaBridgeOsc::handleMsgLv2UridMap()"); | ||||
if (fClient == nullptr) | |||||
if (kClient == nullptr) | |||||
return 1; | return 1; | ||||
const int32_t urid = argv[0]->i; | const int32_t urid = argv[0]->i; | ||||
@@ -1,6 +1,6 @@ | |||||
/* | /* | ||||
* Carla Bridge UI, VST version | * 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 | * This program is free software; you can redistribute it and/or | ||||
* modify it under the terms of the GNU General Public License as | * modify it under the terms of the GNU General Public License as | ||||
@@ -20,13 +20,6 @@ | |||||
#include "CarlaVstUtils.hpp" | #include "CarlaVstUtils.hpp" | ||||
#include "CarlaMIDI.h" | #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 | CARLA_BRIDGE_START_NAMESPACE | ||||
// ------------------------------------------------------------------------- | // ------------------------------------------------------------------------- | ||||
@@ -35,17 +28,13 @@ CARLA_BRIDGE_START_NAMESPACE | |||||
uint32_t bufferSize = 512; | uint32_t bufferSize = 512; | ||||
double sampleRate = 44100.0; | double sampleRate = 44100.0; | ||||
class CarlaVstClient : public QObject, | |||||
public CarlaBridgeClient | |||||
class CarlaVstClient : public CarlaBridgeClient | |||||
{ | { | ||||
public: | public: | ||||
CarlaVstClient(const char* const uiTitle) | CarlaVstClient(const char* const uiTitle) | ||||
: QObject(nullptr), | |||||
CarlaBridgeClient(uiTitle) | |||||
: CarlaBridgeClient(uiTitle) | |||||
{ | { | ||||
effect = nullptr; | effect = nullptr; | ||||
idleTimer = 0; | |||||
needIdle = false; | needIdle = false; | ||||
// make client valid | // make client valid | ||||
@@ -108,9 +97,9 @@ public: | |||||
effect->resvd1 = ToVstPtr(this); | effect->resvd1 = ToVstPtr(this); | ||||
#endif | #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 | #endif | ||||
effect->dispatcher(effect, effOpen, 0, 0, nullptr, 0.0f); | effect->dispatcher(effect, effOpen, 0, 0, nullptr, 0.0f); | ||||
@@ -145,20 +134,18 @@ public: | |||||
toolkitResize(width, height); | toolkitResize(width, height); | ||||
} | } | ||||
idleTimer = startTimer(50); | |||||
return true; | return true; | ||||
} | } | ||||
void uiIdle() override | 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 | void uiClose() override | ||||
{ | { | ||||
CarlaBridgeClient::uiClose(); | |||||
if (effect != nullptr) | if (effect != nullptr) | ||||
{ | { | ||||
effect->dispatcher(effect, effEditClose, 0, 0, nullptr, 0.0f); | effect->dispatcher(effect, effEditClose, 0, 0, nullptr, 0.0f); | ||||
@@ -166,6 +153,7 @@ public: | |||||
effect = nullptr; | effect = nullptr; | ||||
} | } | ||||
CarlaBridgeClient::uiClose(); | |||||
uiLibClose(); | uiLibClose(); | ||||
} | } | ||||
@@ -182,11 +170,6 @@ public: | |||||
return false; | return false; | ||||
} | } | ||||
bool needsReparent() const override | |||||
{ | |||||
return true; | |||||
} | |||||
// --------------------------------------------------------------------- | // --------------------------------------------------------------------- | ||||
// ui processing | // ui processing | ||||
@@ -241,7 +224,7 @@ public: | |||||
intptr_t handleAudioMasterGetTime() | intptr_t handleAudioMasterGetTime() | ||||
{ | { | ||||
memset(&vstTimeInfo, 0, sizeof(VstTimeInfo_R)); | |||||
memset(&vstTimeInfo, 0, sizeof(VstTimeInfo)); | |||||
vstTimeInfo.sampleRate = sampleRate; | vstTimeInfo.sampleRate = sampleRate; | ||||
@@ -420,8 +403,8 @@ public: | |||||
break; | break; | ||||
case audioMasterGetTime: | case audioMasterGetTime: | ||||
static VstTimeInfo_R timeInfo; | |||||
memset(&timeInfo, 0, sizeof(VstTimeInfo_R)); | |||||
static VstTimeInfo timeInfo; | |||||
memset(&timeInfo, 0, sizeof(VstTimeInfo)); | |||||
timeInfo.sampleRate = sampleRate; | timeInfo.sampleRate = sampleRate; | ||||
// Tempo | // Tempo | ||||
@@ -507,27 +490,12 @@ public: | |||||
return ret; | 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: | private: | ||||
int unique1; | int unique1; | ||||
AEffect* effect; | AEffect* effect; | ||||
VstTimeInfo_R vstTimeInfo; | |||||
VstTimeInfo vstTimeInfo; | |||||
int idleTimer; | |||||
bool needIdle; | bool needIdle; | ||||
static CarlaVstClient* lastVstPlugin; | static CarlaVstClient* lastVstPlugin; | ||||
@@ -19,8 +19,8 @@ ifeq ($(CARLA_VESTIGE_HEADER),true) | |||||
BUILD_VST_FLAGS += -DVESTIGE_HEADER | BUILD_VST_FLAGS += -DVESTIGE_HEADER | ||||
endif | endif | ||||
LINK_FLAGS += $(LIBLO_LIBS) | |||||
LINK_FLAGS += $(JUCE_CORE_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) | 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 | 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 | BUILD_LV2_COCOA_FLAGS = $(BUILD_LV2_FLAGS) -DBRIDGE_COCOA -DBRIDGE_LV2_COCOA | ||||
LINK_LV2_COCOA_FLAGS = $(LINK_FLAGS) -ldl | 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 | BUILD_LV2_WINDOWS_FLAGS = $(BUILD_LV2_FLAGS) -DBRIDGE_HWND -DBRIDGE_LV2_HWND | ||||
LINK_LV2_WINDOWS_FLAGS = $(LINK_FLAGS) -static -mwindows | 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) | ifeq ($(HAVE_GTK2),true) | ||||
TARGETS += ui_lv2-gtk2 | |||||
# TARGETS += ui_lv2-gtk2 | |||||
endif | endif | ||||
ifeq ($(HAVE_GTK3),true) | ifeq ($(HAVE_GTK3),true) | ||||
TARGETS += ui_lv2-gtk3 | |||||
# TARGETS += ui_lv2-gtk3 | |||||
endif | endif | ||||
ifeq ($(HAVE_QT4),true) | ifeq ($(HAVE_QT4),true) | ||||
TARGETS += ui_lv2-qt4 | |||||
# TARGETS += ui_lv2-qt4 | |||||
endif | endif | ||||
ifeq ($(HAVE_QT5),true) | ifeq ($(HAVE_QT5),true) | ||||
TARGETS += ui_lv2-qt5 | |||||
# TARGETS += ui_lv2-qt5 | |||||
endif | endif | ||||
ifeq ($(HAVE_X11),true) | 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-gtk2: ../../bin/carla-bridge-lv2-gtk2 | ||||
ui_lv2-gtk3: ../../bin/carla-bridge-lv2-gtk3 | ui_lv2-gtk3: ../../bin/carla-bridge-lv2-gtk3 | ||||
@@ -237,7 +234,7 @@ OBJS_VST_X11 = \ | |||||
CarlaBridgeToolkitPlugin__vst-x11.o \ | CarlaBridgeToolkitPlugin__vst-x11.o \ | ||||
CarlaBridgeUI-VST__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 $@ | $(CXX) $^ $(LINK_VST_X11_FLAGS) -o $@ | ||||
%__vst-x11.o: %.cpp | %__vst-x11.o: %.cpp | ||||
@@ -41,11 +41,11 @@ static int temporaryErrorHandler(Display*, XErrorEvent*) | |||||
return 0; | return 0; | ||||
} | } | ||||
class X11PluginUi : public CarlaPluginUi | |||||
class X11PluginUi : public CarlaPluginUI | |||||
{ | { | ||||
public: | public: | ||||
X11PluginUi(CloseCallback* const cb, const uintptr_t parentId) noexcept | X11PluginUi(CloseCallback* const cb, const uintptr_t parentId) noexcept | ||||
: CarlaPluginUi(cb), | |||||
: CarlaPluginUI(cb), | |||||
fDisplay(nullptr), | fDisplay(nullptr), | ||||
fWindow(0), | fWindow(0), | ||||
fIsVisible(false), | fIsVisible(false), | ||||
@@ -184,7 +184,7 @@ public: | |||||
{ | { | ||||
fIsVisible = false; | fIsVisible = false; | ||||
CARLA_SAFE_ASSERT_CONTINUE(fCallback != nullptr); | CARLA_SAFE_ASSERT_CONTINUE(fCallback != nullptr); | ||||
fCallback->handlePluginUiClosed(); | |||||
fCallback->handlePluginUIClosed(); | |||||
} | } | ||||
break; | break; | ||||
@@ -193,7 +193,7 @@ public: | |||||
{ | { | ||||
fIsVisible = false; | fIsVisible = false; | ||||
CARLA_SAFE_ASSERT_CONTINUE(fCallback != nullptr); | CARLA_SAFE_ASSERT_CONTINUE(fCallback != nullptr); | ||||
fCallback->handlePluginUiClosed(); | |||||
fCallback->handlePluginUIClosed(); | |||||
} | } | ||||
break; | 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(uiTitle != nullptr && uiTitle[0] != '\0', true); | ||||
CARLA_SAFE_ASSERT_RETURN(winId != 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 | #ifdef CARLA_OS_MAC | ||||
CarlaPluginUi* CarlaPluginUi::newCocoa(CloseCallback*, uintptr_t) | |||||
CarlaPluginUI* CarlaPluginUI::newCocoa(CloseCallback*, uintptr_t) | |||||
{ | { | ||||
//return new CocoaPluginUi(cb, parentId); | //return new CocoaPluginUi(cb, parentId); | ||||
return nullptr; | return nullptr; | ||||
@@ -464,7 +464,7 @@ CarlaPluginUi* CarlaPluginUi::newCocoa(CloseCallback*, uintptr_t) | |||||
#endif | #endif | ||||
#ifdef CARLA_OS_WIN | #ifdef CARLA_OS_WIN | ||||
CarlaPluginUi* CarlaPluginUi::newWindows(CloseCallback*, uintptr_t) | |||||
CarlaPluginUI* CarlaPluginUI::newWindows(CloseCallback*, uintptr_t) | |||||
{ | { | ||||
//return new WindowsPluginUi(cb, parentId); | //return new WindowsPluginUi(cb, parentId); | ||||
return nullptr; | return nullptr; | ||||
@@ -472,7 +472,7 @@ CarlaPluginUi* CarlaPluginUi::newWindows(CloseCallback*, uintptr_t) | |||||
#endif | #endif | ||||
#ifdef HAVE_X11 | #ifdef HAVE_X11 | ||||
CarlaPluginUi* CarlaPluginUi::newX11(CloseCallback* cb, uintptr_t parentId) | |||||
CarlaPluginUI* CarlaPluginUI::newX11(CloseCallback* cb, uintptr_t parentId) | |||||
{ | { | ||||
return new X11PluginUi(cb, parentId); | return new X11PluginUi(cb, parentId); | ||||
} | } | ||||
@@ -22,16 +22,16 @@ | |||||
// ----------------------------------------------------- | // ----------------------------------------------------- | ||||
class CarlaPluginUi | |||||
class CarlaPluginUI | |||||
{ | { | ||||
public: | public: | ||||
class CloseCallback { | class CloseCallback { | ||||
public: | public: | ||||
virtual ~CloseCallback() {} | virtual ~CloseCallback() {} | ||||
virtual void handlePluginUiClosed() = 0; | |||||
virtual void handlePluginUIClosed() = 0; | |||||
}; | }; | ||||
virtual ~CarlaPluginUi() {} | |||||
virtual ~CarlaPluginUI() {} | |||||
virtual void show() = 0; | virtual void show() = 0; | ||||
virtual void hide() = 0; | virtual void hide() = 0; | ||||
virtual void focus() = 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); | static bool tryTransientWinIdMatch(const uintptr_t pid, const char* const uiTitle, const uintptr_t winId); | ||||
#ifdef CARLA_OS_MAC | #ifdef CARLA_OS_MAC | ||||
static CarlaPluginUi* newCocoa(CloseCallback*, uintptr_t); | |||||
static CarlaPluginUI* newCocoa(CloseCallback*, uintptr_t); | |||||
#endif | #endif | ||||
#ifdef CARLA_OS_WIN | #ifdef CARLA_OS_WIN | ||||
static CarlaPluginUi* newWindows(CloseCallback*, uintptr_t); | |||||
static CarlaPluginUI* newWindows(CloseCallback*, uintptr_t); | |||||
#endif | #endif | ||||
#ifdef HAVE_X11 | #ifdef HAVE_X11 | ||||
static CarlaPluginUi* newX11(CloseCallback*, uintptr_t); | |||||
static CarlaPluginUI* newX11(CloseCallback*, uintptr_t); | |||||
#endif | #endif | ||||
protected: | protected: | ||||
bool fIsIdling; | bool fIsIdling; | ||||
CloseCallback* fCallback; | CloseCallback* fCallback; | ||||
CarlaPluginUi(CloseCallback* const cb) noexcept : fIsIdling(false), fCallback(cb) {} | |||||
CarlaPluginUI(CloseCallback* const cb) noexcept : fIsIdling(false), fCallback(cb) {} | |||||
}; | }; | ||||
// ----------------------------------------------------- | // ----------------------------------------------------- | ||||