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) # 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 ..




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

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




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

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


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


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

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


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

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


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

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


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

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




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

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




+ 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) 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 * 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


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

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


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

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




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

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


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

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


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

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


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


Loading…
Cancel
Save