Browse Source

Continue rework

tags/v0.9.0
falkTX 12 years ago
parent
commit
4e8f331563
12 changed files with 663 additions and 645 deletions
  1. +127
    -183
      c++/carla-bridge/Makefile
  2. +6
    -17
      c++/carla-bridge/carla_bridge_client.cpp
  3. +3
    -11
      c++/carla-bridge/carla_bridge_client.hpp
  4. +258
    -384
      c++/carla-bridge/carla_bridge_plugin.cpp
  5. +10
    -15
      c++/carla-bridge/carla_bridge_toolkit-qt.cpp
  6. +0
    -2
      c++/carla-bridge/carla_bridge_toolkit.cpp
  7. +0
    -2
      c++/carla-bridge/carla_bridge_toolkit.hpp
  8. +7
    -7
      c++/carla-bridge/carla_bridge_ui-lv2.cpp
  9. +4
    -1
      c++/carla-bridge/carla_bridge_ui-vst.cpp
  10. +30
    -18
      c++/carla-bridge/qtcreator/carla-bridge-plugin.pro
  11. +130
    -0
      c++/carla-plugin/carla_plugin.cpp
  12. +88
    -5
      c++/carla-plugin/carla_plugin.hpp

+ 127
- 183
c++/carla-bridge/Makefile View File

@@ -28,7 +28,7 @@ endif
# --------------------------------------------------------------
# Plugin bridges

BUILD_PLUGIN_FLAGS = $(BUILD_CXX_FLAGS) -DBUILD_BRIDGE_PLUGIN
BUILD_PLUGIN_FLAGS = $(BUILD_CXX_FLAGS) -DBUILD_BRIDGE_PLUGIN -DBRIDGE_PLUGIN
BUILD_PLUGIN_FLAGS += -DCARLA_ENGINE_JACK -I../carla-backend -I../carla-engine -I../carla-jackbridge -I../carla-plugin
BUILD_PLUGIN_FLAGS += $(shell pkg-config --cflags jack) $(QT_UI_FLAGS)

@@ -123,21 +123,24 @@ win64: carla-bridge-win64.exe
# --------------------------------------------------------------
# UI common

carla_bridge_osc__lv2.o: carla_bridge_osc.cpp
%__lv2.o: %.cpp
$(CXX) $< $(BUILD_UI_LV2_FLAGS) -c -o $@

carla_bridge_osc__vst.o: carla_bridge_osc.cpp
%__vst.o: %.cpp
$(CXX) $< $(BUILD_UI_VST_FLAGS) -c -o $@

OBJS_UI_LV2_LIBS = \
../carla-lilv/carla_lilv.a \
../carla-rtmempool/carla_rtmempool.a

# --------------------------------------------------------------
# ui_lv2-gtk2

OBJS_UI_LV2_GTK2 = carla_bridge_ui-lv2__lv2-gtk2.o \
carla_bridge_client__lv2-gtk2.o carla_bridge_osc__lv2.o \
carla_bridge_toolkit__lv2-gtk2.o carla_bridge_toolkit-gtk__lv2-gtk2.o \
../carla-lilv/carla_lilv.a ../carla-rtmempool/carla_rtmempool.a
carla_bridge_client__lv2.o carla_bridge_osc__lv2.o \
carla_bridge_toolkit__lv2.o carla_bridge_toolkit-gtk__lv2-gtk2.o

carla-bridge-lv2-gtk2: $(OBJS_UI_LV2_GTK2)
carla-bridge-lv2-gtk2: $(OBJS_UI_LV2_GTK2) $(OBJS_UI_LV2_LIBS)
$(CXX) $^ $(LINK_UI_LV2_GTK2_FLAGS) -o $@ && $(STRIP) $@

%__lv2-gtk2.o: %.cpp
@@ -147,11 +150,10 @@ carla-bridge-lv2-gtk2: $(OBJS_UI_LV2_GTK2)
# ui_lv2-gtk3

OBJS_UI_LV2_GTK3 = carla_bridge_ui-lv2__lv2-gtk3.o \
carla_bridge_client__lv2-gtk3.o carla_bridge_osc__lv2.o \
carla_bridge_toolkit__lv2-gtk3.o carla_bridge_toolkit-gtk__lv2-gtk3.o \
../carla-lilv/carla_lilv.a ../carla-rtmempool/carla_rtmempool.a
carla_bridge_client__lv2.o carla_bridge_osc__lv2.o \
carla_bridge_toolkit__lv2.o carla_bridge_toolkit-gtk__lv2-gtk3.o

carla-bridge-lv2-gtk3: $(OBJS_UI_LV2_GTK3)
carla-bridge-lv2-gtk3: $(OBJS_UI_LV2_GTK3) $(OBJS_UI_LV2_LIBS)
$(CXX) $^ $(LINK_UI_LV2_GTK3_FLAGS) -o $@ && $(STRIP) $@

%__lv2-gtk3.o: %.cpp
@@ -161,11 +163,10 @@ carla-bridge-lv2-gtk3: $(OBJS_UI_LV2_GTK3)
# ui_lv2-qt4

OBJS_UI_LV2_QT4 = carla_bridge_ui-lv2__lv2-qt4.o \
carla_bridge_client__lv2-qt4.o carla_bridge_osc__lv2.o \
carla_bridge_toolkit__lv2-qt4.o carla_bridge_toolkit-qt__lv2-qt4.o \
../carla-lilv/carla_lilv.a ../carla-rtmempool/carla_rtmempool.a
carla_bridge_client__lv2.o carla_bridge_osc__lv2.o \
carla_bridge_toolkit__lv2.o carla_bridge_toolkit-qt__lv2-qt4.o

carla-bridge-lv2-qt4: $(OBJS_UI_LV2_QT4)
carla-bridge-lv2-qt4: $(OBJS_UI_LV2_QT4) $(OBJS_UI_LV2_LIBS)
$(CXX) $^ $(LINK_UI_LV2_QT4_FLAGS) -o $@ && $(STRIP) $@

%__lv2-qt4.o: %.cpp
@@ -175,11 +176,10 @@ carla-bridge-lv2-qt4: $(OBJS_UI_LV2_QT4)
# ui_lv2-qt5

OBJS_UI_LV2_QT5 = carla_bridge_ui-lv2__lv2-qt5.o \
carla_bridge_client__lv2-qt5.o carla_bridge_osc__lv2.o \
carla_bridge_toolkit__lv2-qt5.o carla_bridge_toolkit-qt__lv2-qt5.o \
../carla-lilv/carla_lilv.a ../carla-rtmempool/carla_rtmempool.a
carla_bridge_client__lv2.o carla_bridge_osc__lv2.o \
carla_bridge_toolkit__lv2.o carla_bridge_toolkit-qt__lv2-qt5.o

carla-bridge-lv2-qt5: $(OBJS_UI_LV2_QT5)
carla-bridge-lv2-qt5: $(OBJS_UI_LV2_QT5) $(OBJS_UI_LV2_LIBS)
$(CXX) $^ $(LINK_UI_LV2_QT5_FLAGS) -o $@ && $(STRIP) $@

%__lv2-qt5.o: %.cpp
@@ -189,11 +189,10 @@ carla-bridge-lv2-qt5: $(OBJS_UI_LV2_QT5)
# ui_lv2-x11

OBJS_UI_LV2_X11 = carla_bridge_ui-lv2__lv2-x11.o \
carla_bridge_client__lv2-x11.o carla_bridge_osc__lv2.o \
carla_bridge_toolkit__lv2-x11.o carla_bridge_toolkit-qt__lv2-x11.o \
../carla-lilv/carla_lilv.a ../carla-rtmempool/carla_rtmempool.a
carla_bridge_client__lv2.o carla_bridge_osc__lv2.o \
carla_bridge_toolkit__lv2.o carla_bridge_toolkit-qt__lv2-x11.o

carla-bridge-lv2-x11: $(OBJS_UI_LV2_X11)
carla-bridge-lv2-x11: $(OBJS_UI_LV2_X11) $(OBJS_UI_LV2_LIBS)
$(CXX) $^ $(LINK_UI_LV2_X11_FLAGS) -o $@ && $(STRIP) $@

%__lv2-x11.o: %.cpp
@@ -203,8 +202,8 @@ carla-bridge-lv2-x11: $(OBJS_UI_LV2_X11)
# ui_vst-hwnd

OBJS_UI_VST_HWND = carla_bridge_ui-vst__vst-hwnd.o \
carla_bridge_client__vst-hwnd.o carla_bridge_osc__vst.o \
carla_bridge_toolkit__vst-hwnd.o carla_bridge_toolkit-qt__vst-hwnd.o
carla_bridge_client__vst.o carla_bridge_osc__vst.o \
carla_bridge_toolkit__vst.o carla_bridge_toolkit-qt__vst-hwnd.o

carla-bridge-vst-hwnd.exe: $(OBJS_UI_VST_HWND)
$(CXX) $^ $(LINK_UI_VST_HWND_FLAGS) -o $@ && $(STRIP) $@
@@ -216,8 +215,8 @@ carla-bridge-vst-hwnd.exe: $(OBJS_UI_VST_HWND)
# ui_vst-x11

OBJS_UI_VST_X11 = carla_bridge_ui-vst__vst-x11.o \
carla_bridge_client__vst-x11.o carla_bridge_osc__vst.o \
carla_bridge_toolkit__vst-x11.o carla_bridge_toolkit-qt__vst-x11.o
carla_bridge_client__vst.o carla_bridge_osc__vst.o \
carla_bridge_toolkit__vst.o carla_bridge_toolkit-qt__vst-x11.o

carla-bridge-vst-x11: $(OBJS_UI_VST_X11)
$(CXX) $^ $(LINK_UI_VST_X11_FLAGS) -o $@ && $(STRIP) $@
@@ -228,193 +227,137 @@ carla-bridge-vst-x11: $(OBJS_UI_VST_X11)
# --------------------------------------------------------------
# posix32

OBJS_POSIX32 = \
carla_bridge_plugin__posix32.o carla_bridge_osc__posix32.o \
carla_engine__posix32.o carla_engine_osc__posix32.o carla_engine_thread__posix32.o carla_engine_jack__posix32.o \
carla_plugin__posix32.o carla_plugin_thread__posix32.o ladspa__posix32.o dssi__posix32.o lv2__posix32.o vst__posix32.o \
../carla-lilv/carla_lilv_posix32.a ../carla-rtmempool/carla_rtmempool_posix32.a
OBJS_POSIX32 = carla_bridge_plugin__posix32.o \
carla_bridge_client__posix32.o carla_bridge_osc__posix32.o \
carla_bridge_toolkit__posix32.o

# carla-engine
OBJS_POSIX32 += \
../carla-engine/carla_engine__posix32.o \
../carla-engine/carla_engine_osc__posix32.o \
../carla-engine/carla_engine_thread__posix32.o \
../carla-engine/jack__posix32.o

# carla-plugin
OBJS_POSIX32 += \
../carla-plugin/carla_plugin__posix32.o \
../carla-plugin/carla_plugin_thread__posix32.o \
../carla-plugin/ladspa__posix32.o \
../carla-plugin/dssi__posix32.o \
../carla-plugin/lv2__posix32.o \
../carla-plugin/vst__posix32.o

# libs
OBJS_POSIX32 += \
../carla-lilv/carla_lilv_posix32.a \
../carla-rtmempool/carla_rtmempool_posix32.a

carla-bridge-posix32: $(OBJS_POSIX32)
$(CXX) $^ $(POSIX_LINK_FLAGS) $(POSIX_32BIT_FLAGS) -o $@ && $(STRIP) $@

carla_bridge_plugin__posix32.o: carla_bridge_plugin.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@

carla_bridge_osc__posix32.o: carla_bridge_osc.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@

carla_engine__posix32.o: ../carla-engine/carla_engine.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@

carla_engine_osc__posix32.o: ../carla-engine/carla_engine_osc.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@

carla_engine_thread__posix32.o: ../carla-engine/carla_engine_thread.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@

carla_engine_jack__posix32.o: ../carla-engine/jack.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@

carla_plugin__posix32.o: ../carla-plugin/carla_plugin.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@

carla_plugin_thread__posix32.o: ../carla-plugin/carla_plugin_thread.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@

ladspa__posix32.o: ../carla-plugin/ladspa.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@

dssi__posix32.o: ../carla-plugin/dssi.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@

lv2__posix32.o: ../carla-plugin/lv2.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@

vst__posix32.o: ../carla-plugin/vst.cpp
%__posix32.o: %.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@

# --------------------------------------------------------------
# posix64

OBJS_POSIX64 = \
carla_bridge_plugin__posix64.o carla_bridge_osc__posix64.o \
carla_engine__posix64.o carla_engine_osc__posix64.o carla_engine_thread__posix64.o carla_engine_jack__posix64.o \
carla_plugin__posix64.o carla_plugin_thread__posix64.o ladspa__posix64.o dssi__posix64.o lv2__posix64.o vst__posix64.o \
../carla-lilv/carla_lilv_posix64.a ../carla-rtmempool/carla_rtmempool_posix64.a
OBJS_POSIX64 = carla_bridge_plugin__posix64.o \
carla_bridge_client__posix64.o carla_bridge_osc__posix64.o \
carla_bridge_toolkit__posix64.o

# carla-engine
OBJS_POSIX64 += \
../carla-engine/carla_engine__posix64.o \
../carla-engine/carla_engine_osc__posix64.o \
../carla-engine/carla_engine_thread__posix64.o \
../carla-engine/jack__posix64.o

# carla-plugin
OBJS_POSIX64 += \
../carla-plugin/carla_plugin__posix64.o \
../carla-plugin/carla_plugin_thread__posix64.o \
../carla-plugin/ladspa__posix64.o \
../carla-plugin/dssi__posix64.o \
../carla-plugin/lv2__posix64.o \
../carla-plugin/vst__posix64.o

# libs
OBJS_POSIX64 += \
../carla-lilv/carla_lilv_posix64.a \
../carla-rtmempool/carla_rtmempool_posix64.a

carla-bridge-posix64: $(OBJS_POSIX64)
$(CXX) $^ $(POSIX_LINK_FLAGS) $(POSIX_64BIT_FLAGS) -o $@ && $(STRIP) $@

carla_bridge_plugin__posix64.o: carla_bridge_plugin.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@

carla_bridge_osc__posix64.o: carla_bridge_osc.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@

carla_engine__posix64.o: ../carla-engine/carla_engine.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@

carla_engine_osc__posix64.o: ../carla-engine/carla_engine_osc.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@

carla_engine_thread__posix64.o: ../carla-engine/carla_engine_thread.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@

carla_engine_jack__posix64.o: ../carla-engine/jack.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@

carla_plugin__posix64.o: ../carla-plugin/carla_plugin.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@

carla_plugin_thread__posix64.o: ../carla-plugin/carla_plugin_thread.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@

ladspa__posix64.o: ../carla-plugin/ladspa.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@

dssi__posix64.o: ../carla-plugin/dssi.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@

lv2__posix64.o: ../carla-plugin/lv2.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@

vst__posix64.o: ../carla-plugin/vst.cpp
%__posix64.o: %.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@

# --------------------------------------------------------------
# win32

OBJS_WIN32 = \
carla_bridge_plugin__win32.o carla_bridge_osc__win32.o \
carla_engine__win32.o carla_engine_osc__win32.o carla_engine_thread__win32.o carla_engine_jack__win32.o \
carla_plugin__win32.o carla_plugin_thread__win32.o ladspa__win32.o dssi__win32.o lv2__win32.o vst__win32.o \
../carla-lilv/carla_lilv_win32.a ../carla-rtmempool/carla_rtmempool_win32.a
OBJS_WIN32 = carla_bridge_plugin__win32.o \
carla_bridge_client__win32.o carla_bridge_osc__win32.o \
carla_bridge_toolkit__win32.o

# carla-engine
OBJS_WIN32 += \
../carla-engine/carla_engine__win32.o \
../carla-engine/carla_engine_osc__win32.o \
../carla-engine/carla_engine_thread__win32.o \
../carla-engine/jack__win32.o

# carla-plugin
OBJS_WIN32 += \
../carla-plugin/carla_plugin__win32.o \
../carla-plugin/carla_plugin_thread__win32.o \
../carla-plugin/ladspa__win32.o \
../carla-plugin/dssi__win32.o \
../carla-plugin/lv2__win32.o \
../carla-plugin/vst__win32.o

# libs
OBJS_WIN32 += \
../carla-lilv/carla_lilv_win32.a \
../carla-rtmempool/carla_rtmempool_win32.a

carla-bridge-win32.exe: $(OBJS_WIN32) ../carla-jackbridge/libcarla-jackbridge-win32.dll
$(CXX) $(OBJS_WIN32) $(WIN_32BIT_FLAGS) $(WIN_LINK_FLAGS) -lcarla-jackbridge-win32 -o $@ && $(STRIP) $@

carla_bridge_plugin__win32.o: carla_bridge_plugin.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@

carla_bridge_osc__win32.o: carla_bridge_osc.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@

carla_engine__win32.o: ../carla-engine/carla_engine.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@

carla_engine_osc__win32.o: ../carla-engine/carla_engine_osc.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@

carla_engine_thread__win32.o: ../carla-engine/carla_engine_thread.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@

carla_engine_jack__win32.o: ../carla-engine/jack.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@

carla_plugin__win32.o: ../carla-plugin/carla_plugin.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@

carla_plugin_thread__win32.o: ../carla-plugin/carla_plugin_thread.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@

ladspa__win32.o: ../carla-plugin/ladspa.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@

dssi__win32.o: ../carla-plugin/dssi.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@

lv2__win32.o: ../carla-plugin/lv2.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@

vst__win32.o: ../carla-plugin/vst.cpp
%__win32.o: %.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@

# --------------------------------------------------------------
# win64

OBJS_WIN64 = \
carla_bridge_plugin__win64.o carla_bridge_osc__win64.o \
carla_engine__win64.o carla_engine_osc__win64.o carla_engine_thread__win64.o carla_engine_jack__win64.o \
carla_plugin__win64.o carla_plugin_thread__win64.o ladspa__win64.o dssi__win64.o lv2__win64.o vst__win64.o \
../carla-lilv/carla_lilv_win64.a ../carla-rtmempool/carla_rtmempool_win64.a
OBJS_WIN64 = carla_bridge_plugin__win64.o \
carla_bridge_client__win64.o carla_bridge_osc__win64.o \
carla_bridge_toolkit__win64.o

# carla-engine
OBJS_WIN64 += \
../carla-engine/carla_engine__win64.o \
../carla-engine/carla_engine_osc__win64.o \
../carla-engine/carla_engine_thread__win64.o \
../carla-engine/jack__win64.o

# carla-plugin
OBJS_WIN64 += \
../carla-plugin/carla_plugin__win64.o \
../carla-plugin/carla_plugin_thread__win64.o \
../carla-plugin/ladspa__win64.o \
../carla-plugin/dssi__win64.o \
../carla-plugin/lv2__win64.o \
../carla-plugin/vst__win64.o

# libs
OBJS_WIN64 += \
../carla-lilv/carla_lilv_win64.a \
../carla-rtmempool/carla_rtmempool_win64.a

carla-bridge-win64.exe: $(OBJS_WIN64) ../carla-jackbridge/libcarla-jackbridge-win64.dll
$(CXX) $(OBJS_WIN64) $(WIN_64BIT_FLAGS) $(WIN_LINK_FLAGS) -lcarla-jackbridge-win64 -o $@ && $(STRIP) $@

carla_bridge_plugin__win64.o: carla_bridge_plugin.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@

carla_bridge_osc__win64.o: carla_bridge_osc.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@

carla_engine__win64.o: ../carla-engine/carla_engine.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@

carla_engine_osc__win64.o: ../carla-engine/carla_engine_osc.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@

carla_engine_thread__win64.o: ../carla-engine/carla_engine_thread.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@

carla_engine_jack__win64.o: ../carla-engine/jack.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@

carla_plugin__win64.o: ../carla-plugin/carla_plugin.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@

carla_plugin_thread__win64.o: ../carla-plugin/carla_plugin_thread.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@

ladspa__win64.o: ../carla-plugin/ladspa.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@

dssi__win64.o: ../carla-plugin/dssi.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@

lv2__win64.o: ../carla-plugin/lv2.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@

vst__win64.o: ../carla-plugin/vst.cpp
%__win64.o: %.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@

# --------------------------------------------------------------
@@ -464,3 +407,4 @@ clean:
rm -f *.o *.dll *.so *.exe
rm -f carla-bridge-lv2-gtk2 carla-bridge-lv2-gtk3 carla-bridge-lv2-qt4 carla-bridge-lv2-qt5 carla-bridge-lv2-x11 carla-bridge-vst-x11
rm -f carla-bridge-posix32 carla-bridge-posix64
rm -f $(OBJS_POSIX32) $(OBJS_POSIX64) $(OBJS_WIN32) $(OBJS_WIN64)

+ 6
- 17
c++/carla-bridge/carla_bridge_client.cpp View File

@@ -142,13 +142,14 @@ void CarlaBridgeClient::sendOscUpdate()
}

#ifdef BUILD_BRIDGE_PLUGIN
void CarlaBridgeClient::registerOscEngine(CarlaBackend::CarlaEngine* const engine)
void CarlaBridgeClient::sendOscBridgeUpdate()
{
qDebug("CarlaBridgeClient::registerOscEngine(%p)", engine);
CARLA_ASSERT(engine);
qDebug("CarlaBridgeClient::sendOscBridgeUpdate()");
CARLA_ASSERT(m_oscData);
CARLA_ASSERT(m_oscData->target && m_oscData->path);

if (engine)
engine->setOscBridgeData(m_oscData);
if (m_oscData && m_oscData->target && m_oscData->path)
osc_send_bridge_update(m_oscData, m_oscData->path);
}

void CarlaBridgeClient::sendOscBridgeError(const char* const error)
@@ -279,18 +280,6 @@ void CarlaBridgeClient::sendOscLv2TransferEvent(const int32_t portIndex, const c
}
#endif

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

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

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

#ifdef BUILD_BRIDGE_UI


+ 3
- 11
c++/carla-bridge/carla_bridge_client.hpp View File

@@ -20,12 +20,6 @@

#include "carla_bridge_osc.hpp"

#ifdef BUILD_BRIDGE_PLUGIN
namespace CarlaBackend {
class CarlaEngine;
}
#endif

CARLA_BRIDGE_START_NAMESPACE

#if 0
@@ -96,7 +90,7 @@ public:
void sendOscUpdate();

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

@@ -124,10 +118,6 @@ protected:
void sendOscLv2TransferEvent(const int32_t portIndex, const char* const typeStr, const char* const atomBuf);
#endif

#ifdef BUILD_BRIDGE_PLUGIN
void sendOscBridgeUpdate();
#endif

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

#ifdef BUILD_BRIDGE_UI
@@ -150,6 +140,8 @@ private:
char* m_uiFilename;
void* m_uiLib;
bool m_uiQuit;
#else
friend class CarlaPluginClient;
#endif
};



+ 258
- 384
c++/carla-bridge/carla_bridge_plugin.cpp View File

@@ -15,25 +15,29 @@
* For a full copy of the GNU General Public License see the COPYING file
*/

#ifdef BUILD_BRIDGE_PLUGIN
#ifdef BRIDGE_PLUGIN

#include "carla_bridge_client.hpp"
#include "carla_backend_utils.hpp"
#include "carla_bridge_toolkit.hpp"
#include "carla_plugin.hpp"

#include <set>
//#include <QtCore/QTimerEvent>
#include <QtCore/QDir>
#include <QtCore/QFile>
#include <QtCore/QTextStream>
#include <QtCore/QTimerEvent>
#include <QtGui/QApplication>
#include <QtGui/QMainWindow>
#include <QtGui/QtEvents>

#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
# include <QtWidgets/QApplication>
#else
# include <QtGui/QApplication>
#endif

#ifdef Q_OS_UNIX
# include <signal.h>
#endif

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

static int qargc = 0;
static char** qargv = nullptr;
static bool qCloseNow = false;
@@ -94,307 +98,261 @@ CARLA_BRIDGE_START_NAMESPACE

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

class BridgePluginGUI : public QMainWindow
class CarlaBridgeToolkitPlugin : public CarlaBridgeToolkit,
public CarlaBackend::CarlaPluginGUI::Callback
{
public:
class Callback
{
public:
virtual ~Callback() {}
virtual void guiClosedCallback() = 0;
};

BridgePluginGUI(QWidget* const parent, Callback* const callback_)
: QMainWindow(parent),
callback(callback_)
CarlaBridgeToolkitPlugin(CarlaBridgeClient* const client, const char* const uiTitle)
: CarlaBridgeToolkit(client, uiTitle)
{
qDebug("BridgePluginGUI::BridgePluginGUI(%p, %p", parent, callback);
CARLA_ASSERT(callback);

m_firstShow = true;
m_resizable = true;
qDebug("CarlaBridgeToolkitPlugin::CarlaBridgeToolkitPlugin(%p, \"%s\")", client, uiTitle);

container = new GuiContainer(this);
setCentralWidget(container);
app = nullptr;
gui = nullptr;

setNewSize(50, 50);
}

~BridgePluginGUI()
{
qDebug("BridgePluginGUI::~BridgePluginGUI()");
CARLA_ASSERT(container);
m_uiQuit = false;
m_uiShow = true;

delete container;
init();
}

GuiContainer* getContainer()
~CarlaBridgeToolkitPlugin()
{
return container;
qDebug("CarlaBridgeToolkitPlugin::~CarlaBridgeToolkitPlugin()");
CARLA_ASSERT(! app);
CARLA_ASSERT(! gui);
}

void setResizable(bool resizable)
void init()
{
m_resizable = resizable;
setNewSize(width(), height());
qDebug("CarlaBridgeToolkitPlugin::init()");
CARLA_ASSERT(! app);
CARLA_ASSERT(! gui);

#ifdef Q_OS_WIN
if (! resizable)
setWindowFlags(windowFlags() | Qt::MSWindowsFixedSizeDialogHint);
#endif
}
app = new QApplication(qargc, qargv);

void setTitle(const char* title)
{
CARLA_ASSERT(title);
setWindowTitle(QString("%1 (GUI)").arg(title));
gui = new CarlaBackend::CarlaPluginGUI(nullptr, this);
}

void setNewSize(int width, int height)
void exec(const bool showGui)
{
qDebug("BridgePluginGUI::setNewSize(%i, %i)", width, height);
qDebug("CarlaBridgeToolkitPlugin::exec(%s)", bool2str(showGui));
CARLA_ASSERT(app);
CARLA_ASSERT(gui);
CARLA_ASSERT(client);

if (width < 30)
width = 30;
if (height < 30)
height = 30;

if (m_resizable)
if (showGui)
{
resize(width, height);
if (m_uiShow)
show();
}
else
{
setFixedSize(width, height);
container->setFixedSize(width, height);
app->setQuitOnLastWindowClosed(false);
client->sendOscUpdate();
client->sendOscBridgeUpdate();
}

m_uiQuit = showGui;

// Main loop
app->exec();
}

void setVisible(const bool yesNo)
void quit()
{
qDebug("BridgePluginGUI::setVisible(%s)", bool2str(yesNo));
qDebug("CarlaBridgeToolkitPlugin::quit()");
CARLA_ASSERT(app);

if (yesNo)
if (gui)
{
if (m_firstShow)
{
m_firstShow = false;
restoreGeometry(QByteArray());
}
else if (! m_geometry.isNull())
restoreGeometry(m_geometry);
gui->close();

delete gui;
gui = nullptr;
}
else
m_geometry = saveGeometry();

QMainWindow::setVisible(yesNo);
if (app)
{
if (! app->closingDown())
app->quit();

delete app;
app = nullptr;
}
}

protected:
void hideEvent(QHideEvent* const event)
void show()
{
qDebug("BridgePluginGUI::hideEvent(%p)", event);
qDebug("CarlaBridgeToolkitPlugin::show()");
CARLA_ASSERT(gui);

event->accept();
close();
if (gui && m_uiShow)
gui->setVisible(true);
}

void closeEvent(QCloseEvent* const event)
void hide()
{
qDebug("BridgePluginGUI::closeEvent(%p)", event);
qDebug("CarlaBridgeToolkitPlugin::hide()");
CARLA_ASSERT(gui);

if (event->spontaneous())
{
callback->guiClosedCallback();
QMainWindow::closeEvent(event);
return;
}
if (gui && m_uiShow)
gui->setVisible(false);
}

void resize(const int width, const int height)
{
qDebug("CarlaBridgeToolkitPlugin::resize(%i, %i)", width, height);
CARLA_ASSERT(gui);

event->ignore();
if (gui)
gui->setNewSize(width, height);
}

private:
Callback* const callback;
GuiContainer* getContainer() const
{
CARLA_ASSERT(gui);

if (gui)
return gui->getContainer();

return nullptr;
}

GuiContainer* container;
void* getContainerId()
{
CARLA_ASSERT(gui);

if (gui)
return (void*)gui->getWinId();

return nullptr;
}

bool m_firstShow;
bool m_resizable;
QByteArray m_geometry;
void hasUI(const bool yesNo)
{
m_uiShow = yesNo;
}

protected:
QApplication* app;
CarlaBackend::CarlaPluginGUI* gui;

void guiClosedCallback();

private:
bool m_uiQuit;
bool m_uiShow;
};

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

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

class BridgePluginClient : public CarlaBridgeToolkit,
public CarlaBridgeClient,
public BridgePluginGUI::Callback,
public QApplication
class CarlaPluginClient : public CarlaBridgeClient,
public QObject
{
public:
BridgePluginClient()
: CarlaBridgeToolkit("carla-bridge-plugin"),
CarlaBridgeClient("ui title"),
QApplication(qargc, qargv, true)
CarlaPluginClient()
: CarlaBridgeClient(""),
QObject(nullptr)
{
qDebug("BridgePluginClient::BridgePluginClient()");
qDebug("CarlaPluginClient::CarlaPluginClient()");

msgTimerGUI = 0;
msgTimerOSC = 0;

engine = nullptr;
plugin = nullptr;
pluginGui = nullptr;

m_client = this;
m_doQuit = false;
m_hasUI = false;
m_qt4UI = false;

m_needsResize = false;
m_nextSize[0] = 0;
m_nextSize[1] = 0;
engine = nullptr;
plugin = nullptr;
}

~BridgePluginClient()
~CarlaPluginClient()
{
qDebug("BridgePluginClient::~BridgePluginClient()");
qDebug("CarlaPluginClient::~CarlaPluginClient()");
CARLA_ASSERT(msgTimerGUI == 0);
CARLA_ASSERT(msgTimerOSC == 0);
CARLA_ASSERT(! pluginGui);
}

void setStuff(CarlaBackend::CarlaEngine* const engine, CarlaBackend::CarlaPlugin* const plugin)
{
qDebug("BridgePluginClient::setStuff(%p, %p)", engine, plugin);
CARLA_ASSERT(engine);
CARLA_ASSERT(plugin);

this->engine = engine;
this->plugin = plugin;
}

// ---------------------------------------------------------------------
// toolkit

void init()
{
qDebug("BridgePluginClient::init()");

pluginGui = new BridgePluginGUI(nullptr, this);
pluginGui->hide();
}
CARLA_ASSERT(plugin);

void exec(CarlaClient* const, const bool showGui)
{
qDebug("BridgePluginClient::exec()");
msgTimerGUI = startTimer(50);
msgTimerOSC = startTimer(25);

if (showGui)
{
if (m_hasUI)
show();
if (! plugin)
return;

m_doQuit = true;
}
else
{
CarlaClient::sendOscUpdate();
CarlaClient::sendOscBridgeUpdate();
QApplication::setQuitOnLastWindowClosed(false);
}
// create window if needed
bool guiResizable;
CarlaBackend::GuiType guiType;
plugin->getGuiInfo(&guiType, &guiResizable);

msgTimerGUI = startTimer(50);
msgTimerOSC = startTimer(25);
CarlaBridgeToolkitPlugin* const plugToolkit = (CarlaBridgeToolkitPlugin*)m_toolkit;
plugToolkit->hasUI(guiType != CarlaBackend::GUI_NONE);

QApplication::exec();
if (guiType == CarlaBackend::GUI_INTERNAL_QT4 || guiType == CarlaBackend::GUI_INTERNAL_COCOA || guiType == CarlaBackend::GUI_INTERNAL_HWND || guiType == CarlaBackend::GUI_INTERNAL_X11)
plugin->setGuiContainer(plugToolkit->getContainer());
}

void quit()
{
qDebug("BridgePluginClient::quit()");

if (msgTimerGUI != 0)
{
QApplication::killTimer(msgTimerGUI);
killTimer(msgTimerGUI);
msgTimerGUI = 0;
}

if (msgTimerOSC != 0)
{
QApplication::killTimer(msgTimerOSC);
killTimer(msgTimerOSC);
msgTimerOSC = 0;
}

if (pluginGui)
{
if (pluginGui->isVisible())
hide();

pluginGui->close();

delete pluginGui;
pluginGui = nullptr;
}

if (! QApplication::closingDown())
QApplication::quit();
}

void show()
{
qDebug("BridgePluginClient::show()");
CARLA_ASSERT(pluginGui);

if (plugin)
plugin->showGui(true);

if (pluginGui && m_qt4UI)
pluginGui->show();
}
// ---------------------------------------------------------------------

void hide()
void setEngine(CarlaBackend::CarlaEngine* const engine)
{
qDebug("BridgePluginClient::hide()");
CARLA_ASSERT(pluginGui);
qDebug("CarlaPluginClient::setEngine(%p)", engine);
CARLA_ASSERT(engine);

if (pluginGui && m_qt4UI)
pluginGui->hide();
this->engine = engine;

if (plugin)
plugin->showGui(false);
engine->setOscBridgeData(m_oscData);
}

void resize(int width, int height)
void setPlugin(CarlaBackend::CarlaPlugin* const plugin)
{
qDebug("BridgePluginClient::resize(%i, %i)", width, height);
CARLA_ASSERT(pluginGui);
qDebug("CarlaPluginClient::setPlugin(%p)", plugin);
CARLA_ASSERT(plugin);

if (pluginGui)
pluginGui->setNewSize(width, height);
this->plugin = plugin;
}

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

void createWindow(const bool resizable)
void guiClosed()
{
qDebug("BridgePluginClient::createWindow(%s)", bool2str(resizable));
CARLA_ASSERT(plugin);
CARLA_ASSERT(pluginGui);

if (! (plugin && pluginGui))
return;

m_hasUI = true;
m_qt4UI = true;

pluginGui->setResizable(resizable);
pluginGui->setTitle(plugin->name());
CARLA_ASSERT(engine);

plugin->setGuiContainer(pluginGui->getContainer());
if (engine)
engine->osc_send_bridge_configure(CarlaBackend::CARLA_BRIDGE_MSG_HIDE_GUI, "");
}

void enableUI()
// ---------------------------------------------------------------------

static void callback(void* const ptr, CarlaBackend::CallbackType const action, const unsigned short, const int value1, const int value2, const double value3, const char* const valueStr)
{
m_hasUI = true;
CARLA_ASSERT(ptr);

if (CarlaPluginClient* const _this_ = (CarlaPluginClient*)ptr)
_this_->handleCallback(action, value1, value2, value3, valueStr);
}

// ---------------------------------------------------------------------
@@ -405,10 +363,8 @@ public:
qDebug("CarlaPluginClient::setParameter(%i, %g)", rindex, value);
CARLA_ASSERT(plugin);

if (! plugin)
return;

plugin->setParameterValueByRIndex(rindex, value, true, true, false);
if (plugin)
plugin->setParameterValueByRIndex(rindex, value, true, true, false);
}

void setProgram(const uint32_t index)
@@ -571,7 +527,12 @@ public:
}

// ---------------------------------------------------------------------
// callback

protected:
int msgTimerGUI, msgTimerOSC;

CarlaBackend::CarlaEngine* engine;
CarlaBackend::CarlaPlugin* plugin;

void handleCallback(const CarlaBackend::CallbackType action, const int value1, const int value2, const double value3, const char* const valueStr)
{
@@ -579,167 +540,99 @@ public:

if (! engine)
return;
}

switch (action)
{
case CarlaBackend::CALLBACK_PARAMETER_VALUE_CHANGED:
#if 0
parametersToUpdate.insert(value1);
#endif
engine->osc_send_bridge_set_parameter_value(value1, value3);
break;

case CarlaBackend::CALLBACK_PROGRAM_CHANGED:
engine->osc_send_bridge_set_program(value1);
break;

case CarlaBackend::CALLBACK_MIDI_PROGRAM_CHANGED:
engine->osc_send_bridge_set_midi_program(value1);
break;
void timerEvent(QTimerEvent* const event)
{
if (qCloseNow)
return toolkitQuit();

case CarlaBackend::CALLBACK_NOTE_ON:
if (qSaveNow)
{
//uint8_t mdata[4] = { 0, MIDI_STATUS_NOTE_ON, (uint8_t)value1, (uint8_t)value2 };
//osc_send_midi(mdata);
break;
// TODO
qSaveNow = false;
}

case CarlaBackend::CALLBACK_NOTE_OFF:
if (event->timerId() == msgTimerGUI)
{
//uint8_t mdata[4] = { 0, MIDI_STATUS_NOTE_OFF, (uint8_t)value1, (uint8_t)value2 };
//osc_send_midi(mdata);
break;
if (plugin)
plugin->idleGui();
}
else if (event->timerId() == msgTimerOSC)
{
if (isOscControlRegistered())
oscIdle();
}

case CarlaBackend::CALLBACK_SHOW_GUI:
if (value1 == 0)
{
engine->osc_send_bridge_configure(CarlaBackend::CARLA_BRIDGE_MSG_HIDE_GUI, "");

if (m_doQuit)
qCloseNow = true;
}
break;

case CarlaBackend::CALLBACK_RESIZE_GUI:
CARLA_ASSERT(value1 > 0 && value2 > 0);
CARLA_ASSERT(pluginGui);

if (value1 > 0 && value2 > 0 && pluginGui)
{
m_needsResize = true;
m_nextSize[0] = value1;
m_nextSize[1] = value2;
}

break;
QObject::timerEvent(event);
}
};

case CarlaBackend::CALLBACK_RELOAD_PARAMETERS:
//if (CARLA_PLUGIN)
//{
// for (uint32_t i=0; i < CARLA_PLUGIN->parameterCount(); i++)
// {
// osc_send_control(i, CARLA_PLUGIN->getParameterValue(i));
// }
//}
break;
// -------------------------------------------------------------------------

case CarlaBackend::CALLBACK_QUIT:
//QApplication::quit();
break;
void CarlaBridgeToolkitPlugin::guiClosedCallback()
{
CarlaPluginClient* const plugClient = (CarlaPluginClient*)client;

default:
break;
}
if (m_uiQuit)
{
plugClient->quit();
quit();
}

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

static void callback(void* const ptr, CarlaBackend::CallbackType const action, const unsigned short, const int value1, const int value2, const double value3, const char* const valueStr)
else
{
CARLA_ASSERT(ptr);
plugClient->guiClosed();
}
}

if (! ptr)
return;
// -------------------------------------------------------------------------

BridgePluginClient* const _this_ = (BridgePluginClient*)ptr;
_this_->handleCallback(action, value1, value2, value3, valueStr);
}
int CarlaBridgeOsc::handleMsgPluginSaveNow()
{
qDebug("CarlaBridgeOsc::handleMsgPluginSaveNow()");

protected:
void guiClosedCallback()
{
if (engine)
engine->osc_send_bridge_configure(CarlaBackend::CARLA_BRIDGE_MSG_HIDE_GUI, "");
}
if (! client)
return 1;

void timerEvent(QTimerEvent* const event)
{
if (qCloseNow)
return quit();
CarlaPluginClient* const plugClient = (CarlaPluginClient*)client;
plugClient->saveNow();

if (qSaveNow)
{
// TODO
qSaveNow = false;
}
return 0;
}

if (event->timerId() == msgTimerGUI)
{
#if 0
if (parametersToUpdate.size() > 0)
{
for (auto it = parametersToUpdate.begin(); it != parametersToUpdate.end(); it++)
{
const int32_t paramId(*it);
engine->osc_send_bridge_set_parameter_value(paramId, plugin->getParameterValue(paramId));
}
int CarlaBridgeOsc::handleMsgPluginSetChunk(CARLA_BRIDGE_OSC_HANDLE_ARGS)
{
qDebug("CarlaBridgeOsc::handleMsgPluginSaveNow()");
CARLA_BRIDGE_OSC_CHECK_OSC_TYPES(1, "s");

parametersToUpdate.clear();
}
#endif
if (! client)
return 1;

if (plugin)
plugin->idleGui();
const char* const chunkFile = (const char*)&argv[0]->s;

if (pluginGui && m_needsResize)
{
pluginGui->setNewSize(m_nextSize[0], m_nextSize[1]);
m_needsResize = false;
}
}
else if (event->timerId() == msgTimerOSC)
{
if (! CarlaClient::oscIdle())
{
CARLA_ASSERT(msgTimerOSC == 0);
msgTimerOSC = 0;
return;
}
}
CarlaPluginClient* const plugClient = (CarlaPluginClient*)client;
plugClient->setChunkData(chunkFile);

QApplication::timerEvent(event);
}
return 0;
}

// ---------------------------------------------------------------------
int CarlaBridgeOsc::handleMsgPluginSetCustomData(CARLA_BRIDGE_OSC_HANDLE_ARGS)
{
qDebug("CarlaBridgeOsc::handleMsgPluginSaveNow()");
CARLA_BRIDGE_OSC_CHECK_OSC_TYPES(3, "sss");

private:
int msgTimerGUI, msgTimerOSC;
#if 0
std::set<int32_t> parametersToUpdate;
#endif
if (! client)
return 1;

bool m_doQuit;
bool m_hasUI;
bool m_qt4UI;
bool m_needsResize;
int m_nextSize[2];
const char* const type = (const char*)&argv[0]->s;
const char* const key = (const char*)&argv[1]->s;
const char* const value = (const char*)&argv[2]->s;

CarlaBackend::CarlaEngine* engine;
CarlaBackend::CarlaPlugin* plugin;
CarlaPluginClient* const plugClient = (CarlaPluginClient*)client;
plugClient->setCustomData(type, key, value);

BridgePluginGUI* pluginGui;
};
return 0;
}

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

@@ -747,15 +640,14 @@ CARLA_BRIDGE_END_NAMESPACE

int main(int argc, char* argv[])
{
CARLA_BRIDGE_USE_NAMESPACE

if (argc != 6)
{
qWarning("usage: %s <osc-url|\"null\"> <type> <filename> <name|\"(none)\"> <label>", argv[0]);
return 1;
}

qargc = argc;
qargv = argv;

const char* const oscUrl = argv[1];
const char* const stype = argv[2];
const char* const filename = argv[3];
@@ -783,15 +675,13 @@ int main(int argc, char* argv[])
return 1;
}

// Init bridge client
CarlaBridge::BridgePluginClient client;
client.init();
// Init Plugin client
CarlaPluginClient client;

// Init OSC
if (useOsc && ! client.oscInit(oscUrl))
{
client.quit();
return -1;
return 1;
}

// Listen for ctrl+c or sigint/sigterm events
@@ -800,22 +690,19 @@ int main(int argc, char* argv[])
// Init backend engine
CarlaBackend::CarlaEngine* engine = CarlaBackend::CarlaEngine::newDriverByName("JACK");
engine->setCallback(client.callback, &client);
client.setEngine(engine);

// bridge client <-> engine
client.registerOscEngine(engine);

// Init engine
QString engName = QString("%1 (master)").arg(name ? name : label);
engName.truncate(engine->maxClientNameSize());

if (! engine->init(engName.toUtf8().constData()))
if (! engine->init(""))
{
const char* const lastError = engine->getLastError();
qWarning("Bridge engine failed to start, error was:\n%s", lastError);
if (const char* const lastError = engine->getLastError())
{
qWarning("Bridge engine failed to start, error was:\n%s", lastError);
client.sendOscBridgeError(lastError);
}

engine->close();
delete engine;
client.sendOscBridgeError(lastError);
client.quit();

return 2;
}

@@ -833,22 +720,14 @@ int main(int argc, char* argv[])
if (id >= 0 && id < CarlaBackend::MAX_PLUGINS)
{
CarlaBackend::CarlaPlugin* const plugin = engine->getPlugin(id);
client.setStuff(engine, plugin);

// create window if needed
bool guiResizable;
CarlaBackend::GuiType guiType;
plugin->getGuiInfo(&guiType, &guiResizable);

if (guiType == CarlaBackend::GUI_INTERNAL_QT4 || guiType == CarlaBackend::GUI_INTERNAL_COCOA || guiType == CarlaBackend::GUI_INTERNAL_HWND || guiType == CarlaBackend::GUI_INTERNAL_X11)
client.createWindow(guiResizable);
else if (guiType == CarlaBackend::GUI_EXTERNAL_LV2 || guiType == CarlaBackend::GUI_EXTERNAL_OSC)
client.enableUI();
client.setPlugin(plugin);

if (! useOsc)
plugin->setActive(true, false, false);

client.exec(nullptr, !useOsc);
client.init();
client.toolkitExec(!useOsc);
client.quit();

ret = 0;
}
@@ -863,23 +742,18 @@ int main(int argc, char* argv[])
ret = 1;
}

engine->aboutToClose();
engine->removeAllPlugins();
engine->close();
delete engine;

// Close OSC
if (useOsc)
{
// Close OSC
client.oscClose();
// bridge client can't be closed manually, only by host
}
else
{
// Close bridge client
client.quit();
}

return ret;
}

#endif // BUILD_BRIDGE_PLUGIN
#endif // BRIDGE_PLUGIN

+ 10
- 15
c++/carla-bridge/carla_bridge_toolkit-qt.cpp View File

@@ -98,21 +98,6 @@ public:
qDebug("CarlaBridgeToolkitQt::~CarlaBridgeToolkitQt()");
CARLA_ASSERT(! app);
CARLA_ASSERT(! msgTimer);

if (window)
{
window->close();
delete window;
}

#ifdef BRIDGE_CONTAINER
// TESTING
if (embedContainer)
{
embedContainer->close();
delete embedContainer;
}
#endif
}

void init()
@@ -216,6 +201,16 @@ public:
window = nullptr;
}

#ifdef BRIDGE_CONTAINER
if (embedContainer)
{
embedContainer->close();

delete embedContainer;
embedContainer = nullptr;
}
#endif

if (app)
{
if (! app->closingDown())


+ 0
- 2
c++/carla-bridge/carla_bridge_toolkit.cpp View File

@@ -40,12 +40,10 @@ CarlaBridgeToolkit::~CarlaBridgeToolkit()
free(uiTitle);
}

#if BUILD_BRIDGE_UI
void* CarlaBridgeToolkit::getContainerId()
{
qDebug("CarlaBridgeToolkit::getContainerId()");
return nullptr;
}
#endif

CARLA_BRIDGE_END_NAMESPACE

+ 0
- 2
c++/carla-bridge/carla_bridge_toolkit.hpp View File

@@ -47,11 +47,9 @@ public:
virtual void hide() = 0;
virtual void resize(const int width, const int height) = 0;

#if BUILD_BRIDGE_UI
virtual void* getContainerId();

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

protected:
CarlaBridgeClient* const client;


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

@@ -1023,10 +1023,10 @@ int CarlaBridgeOsc::handleMsgLv2TransferAtom(CARLA_BRIDGE_OSC_HANDLE_ARGS)
chunk = QByteArray::fromBase64(atomBuf);

LV2_Atom* const atom = (LV2_Atom*)chunk.constData();
CarlaLv2Client* const lv2client = (CarlaLv2Client*)client;
CarlaLv2Client* const lv2Client = (CarlaLv2Client*)client;

atom->type = lv2client->getCustomURID(typeStr);
lv2client->handleTransferAtom(portIndex, atom);
atom->type = lv2Client->getCustomURID(typeStr);
lv2Client->handleTransferAtom(portIndex, atom);

return 0;
}
@@ -1047,10 +1047,10 @@ int CarlaBridgeOsc::handleMsgLv2TransferEvent(CARLA_BRIDGE_OSC_HANDLE_ARGS)
chunk = QByteArray::fromBase64(atomBuf);

LV2_Atom* const atom = (LV2_Atom*)chunk.constData();
CarlaLv2Client* const lv2client = (CarlaLv2Client*)client;
CarlaLv2Client* const lv2Client = (CarlaLv2Client*)client;

atom->type = lv2client->getCustomURID(typeStr);
lv2client->handleTransferEvent(portIndex, atom);
atom->type = lv2Client->getCustomURID(typeStr);
lv2Client->handleTransferEvent(portIndex, atom);

return 0;
}
@@ -1115,4 +1115,4 @@ int main(int argc, char* argv[])
return ret;
}

#endif
#endif // BRIDGE_LV2

+ 4
- 1
c++/carla-bridge/carla_bridge_ui-vst.cpp View File

@@ -530,6 +530,8 @@ private:

CarlaVstClient* CarlaVstClient::lastVstPlugin = nullptr;

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

CARLA_BRIDGE_END_NAMESPACE

int main(int argc, char* argv[])
@@ -589,4 +591,5 @@ int main(int argc, char* argv[])
return ret;
}

#endif
#endif // BRIDGE_VST


+ 30
- 18
c++/carla-bridge/qtcreator/carla-bridge-plugin.pro View File

@@ -1,6 +1,10 @@
# QtCreator project file

contains(QT_VERSION, ^5.*) {
QT = core widgets
} else {
QT = core gui
}

CONFIG = debug link_pkgconfig qt warn_on
PKGCONFIG = jack liblo
@@ -10,15 +14,30 @@ TEMPLATE = app
VERSION = 0.5.0

SOURCES = \
../carla_bridge_client.cpp \
../carla_bridge_osc.cpp \
../carla_bridge_toolkit.cpp \
../carla_bridge_plugin.cpp

HEADERS = \
../carla_bridge.hpp \
../carla_bridge_client.hpp \
../carla_bridge_osc.hpp \
../carla_bridge_toolkit.hpp \

# carla-engine
SOURCES += \
../../carla-engine/carla_engine.cpp \
../../carla-engine/carla_engine_osc.cpp \
../../carla-engine/carla_engine_thread.cpp \
../../carla-engine/jack.cpp

HEADERS += \
../../carla-engine/carla_engine.hpp \
../../carla-engine/carla_engine_osc.hpp \
../../carla-engine/carla_engine_thread.hpp \

# carla-plugin
SOURCES += \
../../carla-plugin/carla_plugin.cpp \
../../carla-plugin/carla_plugin_thread.cpp \
@@ -27,31 +46,23 @@ SOURCES += \
../../carla-plugin/lv2.cpp \
../../carla-plugin/vst.cpp

HEADERS = \
../carla_bridge.hpp \
../carla_bridge_client.hpp \
../carla_bridge_osc.hpp \
../carla_bridge_toolkit.hpp \

HEADERS += \
../../carla-includes/carla_defines.hpp \
../../carla-includes/carla_midi.h \
../../carla-includes/ladspa_rdf.hpp \
../../carla-includes/lv2_rdf.hpp
../../carla-plugin/carla_plugin.hpp \
../../carla-plugin/carla_plugin_thread.hpp

# carla-backend
HEADERS += \
../../carla-backend/carla_backend.hpp \
../../carla-backend/carla_backend_utils.hpp

# carla-includes
HEADERS += \
../../carla-engine/carla_engine.hpp \
../../carla-engine/carla_engine_osc.hpp \
../../carla-engine/carla_engine_thread.hpp \

HEADERS += \
../../carla-plugin/carla_plugin.hpp \
../../carla-plugin/carla_plugin_thread.hpp
../../carla-includes/carla_defines.hpp \
../../carla-includes/carla_midi.h \
../../carla-includes/ladspa_rdf.hpp \
../../carla-includes/lv2_rdf.hpp

# carla-utils
HEADERS += \
../../carla-utils/carla_lib_utils.hpp \
../../carla-utils/carla_osc_utils.hpp \
@@ -70,7 +81,8 @@ INCLUDEPATH = .. \
DEFINES = QTCREATOR_TEST
DEFINES += DEBUG
#DEFINES += VESTIGE_HEADER
DEFINES += BUILD_BRIDGE BUILD_BRIDGE_PLUGIN
DEFINES += BUILD_BRIDGE BUILD_BRIDGE_PLUGIN BRIDGE_PLUGIN

DEFINES += CARLA_ENGINE_JACK
DEFINES += WANT_LADSPA WANT_DSSI WANT_LV2 WANT_VST



+ 130
- 0
c++/carla-plugin/carla_plugin.cpp View File

@@ -18,6 +18,8 @@
#include "carla_plugin.hpp"
#include "carla_lib_utils.hpp"

#include <QtGui/QtEvents>

CARLA_BACKEND_START_NAMESPACE

// -------------------------------------------------------------------
@@ -1550,4 +1552,132 @@ void CarlaPlugin::engineMidiUnlock()
x_engine->midiUnlock();
}

// -------------------------------------------------------------------
// CarlaPluginGUI

CarlaPluginGUI::CarlaPluginGUI(QWidget* const parent, Callback* const callback)
: QMainWindow(parent),
m_callback(callback)
{
qDebug("CarlaPluginGUI::CarlaPluginGUI(%p, %p", parent, callback);
CARLA_ASSERT(callback);

m_container = new GuiContainer(this);
setCentralWidget(m_container);
adjustSize();

m_container->setParent(this);
m_container->show();

m_resizable = true;

setNewSize(50, 50);

QMainWindow::setVisible(false);
}

CarlaPluginGUI::~CarlaPluginGUI()
{
qDebug("CarlaPluginGUI::~CarlaPluginGUI()");
CARLA_ASSERT(m_container);

delete m_container;
}

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

GuiContainer* CarlaPluginGUI::getContainer() const
{
return m_container;
}

WId CarlaPluginGUI::getWinId() const
{
return m_container->winId();
}

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

void CarlaPluginGUI::setNewSize(int width, int height)
{
qDebug("CarlaPluginGUI::setNewSize(%i, %i)", width, height);

if (width < 30)
width = 30;
if (height < 30)
height = 30;

if (m_resizable)
{
resize(width, height);
}
else
{
setFixedSize(width, height);
m_container->setFixedSize(width, height);
}
}

void CarlaPluginGUI::setResizable(bool resizable)
{
m_resizable = resizable;
setNewSize(width(), height());

#ifdef Q_OS_WIN
if (! resizable)
setWindowFlags(windowFlags() | Qt::MSWindowsFixedSizeDialogHint);
#endif
}

void CarlaPluginGUI::setTitle(const char* const title)
{
CARLA_ASSERT(title);
setWindowTitle(QString("%1 (GUI)").arg(title));
}

void CarlaPluginGUI::setVisible(const bool yesNo)
{
qDebug("CarlaPluginGUI::setVisible(%s)", bool2str(yesNo));

if (yesNo)
{
if (! m_geometry.isNull())
restoreGeometry(m_geometry);
}
else
m_geometry = saveGeometry();

QMainWindow::setVisible(yesNo);
}

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

void CarlaPluginGUI::hideEvent(QHideEvent* const event)
{
qDebug("CarlaPluginGUI::hideEvent(%p)", event);
CARLA_ASSERT(event);

event->accept();
close();
}

void CarlaPluginGUI::closeEvent(QCloseEvent* const event)
{
qDebug("CarlaPluginGUI::closeEvent(%p)", event);
CARLA_ASSERT(event);

if (event->spontaneous())
{
if (m_callback)
m_callback->guiClosedCallback();

QMainWindow::closeEvent(event);
return;
}

event->ignore();
}

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

CARLA_BACKEND_END_NAMESPACE

+ 88
- 5
c++/carla-plugin/carla_plugin.hpp View File

@@ -21,24 +21,23 @@
#include "carla_midi.h"
#include "carla_engine.hpp"
#include "carla_osc_utils.hpp"
#include "carla_plugin_thread.hpp"

#ifdef BUILD_BRIDGE
//# include "carla_backend_utils.hpp"
# include "carla_bridge_osc.hpp"
//#else
#endif
#include "carla_plugin_thread.hpp"

// common includes
#include <cmath>
#include <vector>
#include <QtCore/QMutex>
#include <QtGui/QMainWindow>

#ifdef Q_WS_X11
#include <QtGui/QX11EmbedContainer>
# include <QtGui/QX11EmbedContainer>
typedef QX11EmbedContainer GuiContainer;
#else
#include <QtGui/QWidget>
# include <QtGui/QWidget>
typedef QWidget GuiContainer;
#endif

@@ -983,6 +982,90 @@ protected:
friend class CarlaEngineJack;
};

/*!
* \class CarlaPluginGUI
*
* \brief Carla Backend gui plugin class
*
* \see CarlaPlugin
*/
class CarlaPluginGUI : public QMainWindow
{
public:
/*!
* \class Callback
*
* \brief Carla plugin GUI callback
*/
class Callback
{
public:
virtual ~Callback() {}
virtual void guiClosedCallback() = 0;
};

// -------------------------------------------------------------------
// Constructor and destructor

/*!
* TODO
*/
CarlaPluginGUI(QWidget* const parent, Callback* const callback);

/*!
* TODO
*/
~CarlaPluginGUI();

// -------------------------------------------------------------------
// Get data

/*!
* TODO
*/
GuiContainer* getContainer() const;

/*!
* TODO
*/
WId getWinId() const;

// -------------------------------------------------------------------
// Set data

/*!
* TODO
*/
void setNewSize(const int width, const int height);

/*!
* TODO
*/
void setResizable(const bool resizable);

/*!
* TODO
*/
void setTitle(const char* const title);

/*!
* TODO
*/
void setVisible(const bool yesNo);

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

private:
Callback* const m_callback;
GuiContainer* m_container;

QByteArray m_geometry;
bool m_resizable;

void hideEvent(QHideEvent* const event);
void closeEvent(QCloseEvent* const event);
};

/**@}*/

CARLA_BACKEND_END_NAMESPACE


Loading…
Cancel
Save