@@ -28,7 +28,7 @@ endif | |||||
# -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
# Plugin bridges | # 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 += -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) | BUILD_PLUGIN_FLAGS += $(shell pkg-config --cflags jack) $(QT_UI_FLAGS) | ||||
@@ -123,21 +123,24 @@ win64: carla-bridge-win64.exe | |||||
# -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
# UI common | # UI common | ||||
carla_bridge_osc__lv2.o: carla_bridge_osc.cpp | |||||
%__lv2.o: %.cpp | |||||
$(CXX) $< $(BUILD_UI_LV2_FLAGS) -c -o $@ | $(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 $@ | $(CXX) $< $(BUILD_UI_VST_FLAGS) -c -o $@ | ||||
OBJS_UI_LV2_LIBS = \ | |||||
../carla-lilv/carla_lilv.a \ | |||||
../carla-rtmempool/carla_rtmempool.a | |||||
# -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
# ui_lv2-gtk2 | # ui_lv2-gtk2 | ||||
OBJS_UI_LV2_GTK2 = carla_bridge_ui-lv2__lv2-gtk2.o \ | 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) $@ | $(CXX) $^ $(LINK_UI_LV2_GTK2_FLAGS) -o $@ && $(STRIP) $@ | ||||
%__lv2-gtk2.o: %.cpp | %__lv2-gtk2.o: %.cpp | ||||
@@ -147,11 +150,10 @@ carla-bridge-lv2-gtk2: $(OBJS_UI_LV2_GTK2) | |||||
# ui_lv2-gtk3 | # ui_lv2-gtk3 | ||||
OBJS_UI_LV2_GTK3 = carla_bridge_ui-lv2__lv2-gtk3.o \ | 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) $@ | $(CXX) $^ $(LINK_UI_LV2_GTK3_FLAGS) -o $@ && $(STRIP) $@ | ||||
%__lv2-gtk3.o: %.cpp | %__lv2-gtk3.o: %.cpp | ||||
@@ -161,11 +163,10 @@ carla-bridge-lv2-gtk3: $(OBJS_UI_LV2_GTK3) | |||||
# ui_lv2-qt4 | # ui_lv2-qt4 | ||||
OBJS_UI_LV2_QT4 = carla_bridge_ui-lv2__lv2-qt4.o \ | 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) $@ | $(CXX) $^ $(LINK_UI_LV2_QT4_FLAGS) -o $@ && $(STRIP) $@ | ||||
%__lv2-qt4.o: %.cpp | %__lv2-qt4.o: %.cpp | ||||
@@ -175,11 +176,10 @@ carla-bridge-lv2-qt4: $(OBJS_UI_LV2_QT4) | |||||
# ui_lv2-qt5 | # ui_lv2-qt5 | ||||
OBJS_UI_LV2_QT5 = carla_bridge_ui-lv2__lv2-qt5.o \ | 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) $@ | $(CXX) $^ $(LINK_UI_LV2_QT5_FLAGS) -o $@ && $(STRIP) $@ | ||||
%__lv2-qt5.o: %.cpp | %__lv2-qt5.o: %.cpp | ||||
@@ -189,11 +189,10 @@ carla-bridge-lv2-qt5: $(OBJS_UI_LV2_QT5) | |||||
# ui_lv2-x11 | # ui_lv2-x11 | ||||
OBJS_UI_LV2_X11 = carla_bridge_ui-lv2__lv2-x11.o \ | 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) $@ | $(CXX) $^ $(LINK_UI_LV2_X11_FLAGS) -o $@ && $(STRIP) $@ | ||||
%__lv2-x11.o: %.cpp | %__lv2-x11.o: %.cpp | ||||
@@ -203,8 +202,8 @@ carla-bridge-lv2-x11: $(OBJS_UI_LV2_X11) | |||||
# ui_vst-hwnd | # ui_vst-hwnd | ||||
OBJS_UI_VST_HWND = carla_bridge_ui-vst__vst-hwnd.o \ | 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) | carla-bridge-vst-hwnd.exe: $(OBJS_UI_VST_HWND) | ||||
$(CXX) $^ $(LINK_UI_VST_HWND_FLAGS) -o $@ && $(STRIP) $@ | $(CXX) $^ $(LINK_UI_VST_HWND_FLAGS) -o $@ && $(STRIP) $@ | ||||
@@ -216,8 +215,8 @@ carla-bridge-vst-hwnd.exe: $(OBJS_UI_VST_HWND) | |||||
# ui_vst-x11 | # ui_vst-x11 | ||||
OBJS_UI_VST_X11 = carla_bridge_ui-vst__vst-x11.o \ | 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) | carla-bridge-vst-x11: $(OBJS_UI_VST_X11) | ||||
$(CXX) $^ $(LINK_UI_VST_X11_FLAGS) -o $@ && $(STRIP) $@ | $(CXX) $^ $(LINK_UI_VST_X11_FLAGS) -o $@ && $(STRIP) $@ | ||||
@@ -228,193 +227,137 @@ carla-bridge-vst-x11: $(OBJS_UI_VST_X11) | |||||
# -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
# posix32 | # 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) | carla-bridge-posix32: $(OBJS_POSIX32) | ||||
$(CXX) $^ $(POSIX_LINK_FLAGS) $(POSIX_32BIT_FLAGS) -o $@ && $(STRIP) $@ | $(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 $@ | $(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@ | ||||
# -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
# posix64 | # 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) | carla-bridge-posix64: $(OBJS_POSIX64) | ||||
$(CXX) $^ $(POSIX_LINK_FLAGS) $(POSIX_64BIT_FLAGS) -o $@ && $(STRIP) $@ | $(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 $@ | $(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@ | ||||
# -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
# win32 | # 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 | 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) $@ | $(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 $@ | $(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@ | ||||
# -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
# win64 | # 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 | 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) $@ | $(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 $@ | $(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@ | ||||
# -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
@@ -464,3 +407,4 @@ clean: | |||||
rm -f *.o *.dll *.so *.exe | 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-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 carla-bridge-posix32 carla-bridge-posix64 | ||||
rm -f $(OBJS_POSIX32) $(OBJS_POSIX64) $(OBJS_WIN32) $(OBJS_WIN64) |
@@ -142,13 +142,14 @@ void CarlaBridgeClient::sendOscUpdate() | |||||
} | } | ||||
#ifdef BUILD_BRIDGE_PLUGIN | #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) | void CarlaBridgeClient::sendOscBridgeError(const char* const error) | ||||
@@ -279,18 +280,6 @@ void CarlaBridgeClient::sendOscLv2TransferEvent(const int32_t portIndex, const c | |||||
} | } | ||||
#endif | #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 | #ifdef BUILD_BRIDGE_UI | ||||
@@ -20,12 +20,6 @@ | |||||
#include "carla_bridge_osc.hpp" | #include "carla_bridge_osc.hpp" | ||||
#ifdef BUILD_BRIDGE_PLUGIN | |||||
namespace CarlaBackend { | |||||
class CarlaEngine; | |||||
} | |||||
#endif | |||||
CARLA_BRIDGE_START_NAMESPACE | CARLA_BRIDGE_START_NAMESPACE | ||||
#if 0 | #if 0 | ||||
@@ -96,7 +90,7 @@ public: | |||||
void sendOscUpdate(); | void sendOscUpdate(); | ||||
#ifdef BUILD_BRIDGE_PLUGIN | #ifdef BUILD_BRIDGE_PLUGIN | ||||
void registerOscEngine(CarlaBackend::CarlaEngine* const engine); | |||||
void sendOscBridgeUpdate(); | |||||
void sendOscBridgeError(const char* const error); | void sendOscBridgeError(const char* const error); | ||||
#endif | #endif | ||||
@@ -124,10 +118,6 @@ protected: | |||||
void sendOscLv2TransferEvent(const int32_t portIndex, const char* const typeStr, const char* const atomBuf); | void sendOscLv2TransferEvent(const int32_t portIndex, const char* const typeStr, const char* const atomBuf); | ||||
#endif | #endif | ||||
#ifdef BUILD_BRIDGE_PLUGIN | |||||
void sendOscBridgeUpdate(); | |||||
#endif | |||||
// --------------------------------------------------------------------- | // --------------------------------------------------------------------- | ||||
#ifdef BUILD_BRIDGE_UI | #ifdef BUILD_BRIDGE_UI | ||||
@@ -150,6 +140,8 @@ private: | |||||
char* m_uiFilename; | char* m_uiFilename; | ||||
void* m_uiLib; | void* m_uiLib; | ||||
bool m_uiQuit; | bool m_uiQuit; | ||||
#else | |||||
friend class CarlaPluginClient; | |||||
#endif | #endif | ||||
}; | }; | ||||
@@ -15,25 +15,29 @@ | |||||
* For a full copy of the GNU General Public License see the COPYING file | * 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_bridge_client.hpp" | ||||
#include "carla_backend_utils.hpp" | |||||
#include "carla_bridge_toolkit.hpp" | |||||
#include "carla_plugin.hpp" | #include "carla_plugin.hpp" | ||||
#include <set> | |||||
//#include <QtCore/QTimerEvent> | |||||
#include <QtCore/QDir> | #include <QtCore/QDir> | ||||
#include <QtCore/QFile> | #include <QtCore/QFile> | ||||
#include <QtCore/QTextStream> | #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 | #ifdef Q_OS_UNIX | ||||
# include <signal.h> | # include <signal.h> | ||||
#endif | #endif | ||||
// ------------------------------------------------------------------------- | |||||
static int qargc = 0; | static int qargc = 0; | ||||
static char** qargv = nullptr; | static char** qargv = nullptr; | ||||
static bool qCloseNow = false; | 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: | 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 | 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: | 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; | msgTimerGUI = 0; | ||||
msgTimerOSC = 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(msgTimerGUI == 0); | ||||
CARLA_ASSERT(msgTimerOSC == 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() | 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() | void quit() | ||||
{ | { | ||||
qDebug("BridgePluginClient::quit()"); | |||||
if (msgTimerGUI != 0) | if (msgTimerGUI != 0) | ||||
{ | { | ||||
QApplication::killTimer(msgTimerGUI); | |||||
killTimer(msgTimerGUI); | |||||
msgTimerGUI = 0; | msgTimerGUI = 0; | ||||
} | } | ||||
if (msgTimerOSC != 0) | if (msgTimerOSC != 0) | ||||
{ | { | ||||
QApplication::killTimer(msgTimerOSC); | |||||
killTimer(msgTimerOSC); | |||||
msgTimerOSC = 0; | 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); | qDebug("CarlaPluginClient::setParameter(%i, %g)", rindex, value); | ||||
CARLA_ASSERT(plugin); | 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) | 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) | 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) | if (! engine) | ||||
return; | 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[]) | int main(int argc, char* argv[]) | ||||
{ | { | ||||
CARLA_BRIDGE_USE_NAMESPACE | |||||
if (argc != 6) | if (argc != 6) | ||||
{ | { | ||||
qWarning("usage: %s <osc-url|\"null\"> <type> <filename> <name|\"(none)\"> <label>", argv[0]); | qWarning("usage: %s <osc-url|\"null\"> <type> <filename> <name|\"(none)\"> <label>", argv[0]); | ||||
return 1; | return 1; | ||||
} | } | ||||
qargc = argc; | |||||
qargv = argv; | |||||
const char* const oscUrl = argv[1]; | const char* const oscUrl = argv[1]; | ||||
const char* const stype = argv[2]; | const char* const stype = argv[2]; | ||||
const char* const filename = argv[3]; | const char* const filename = argv[3]; | ||||
@@ -783,15 +675,13 @@ int main(int argc, char* argv[]) | |||||
return 1; | return 1; | ||||
} | } | ||||
// Init bridge client | |||||
CarlaBridge::BridgePluginClient client; | |||||
client.init(); | |||||
// Init Plugin client | |||||
CarlaPluginClient client; | |||||
// Init OSC | // Init OSC | ||||
if (useOsc && ! client.oscInit(oscUrl)) | if (useOsc && ! client.oscInit(oscUrl)) | ||||
{ | { | ||||
client.quit(); | |||||
return -1; | |||||
return 1; | |||||
} | } | ||||
// Listen for ctrl+c or sigint/sigterm events | // Listen for ctrl+c or sigint/sigterm events | ||||
@@ -800,22 +690,19 @@ int main(int argc, char* argv[]) | |||||
// Init backend engine | // Init backend engine | ||||
CarlaBackend::CarlaEngine* engine = CarlaBackend::CarlaEngine::newDriverByName("JACK"); | CarlaBackend::CarlaEngine* engine = CarlaBackend::CarlaEngine::newDriverByName("JACK"); | ||||
engine->setCallback(client.callback, &client); | 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(); | engine->close(); | ||||
delete engine; | delete engine; | ||||
client.sendOscBridgeError(lastError); | |||||
client.quit(); | |||||
return 2; | return 2; | ||||
} | } | ||||
@@ -833,22 +720,14 @@ int main(int argc, char* argv[]) | |||||
if (id >= 0 && id < CarlaBackend::MAX_PLUGINS) | if (id >= 0 && id < CarlaBackend::MAX_PLUGINS) | ||||
{ | { | ||||
CarlaBackend::CarlaPlugin* const plugin = engine->getPlugin(id); | 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) | if (! useOsc) | ||||
plugin->setActive(true, false, false); | plugin->setActive(true, false, false); | ||||
client.exec(nullptr, !useOsc); | |||||
client.init(); | |||||
client.toolkitExec(!useOsc); | |||||
client.quit(); | |||||
ret = 0; | ret = 0; | ||||
} | } | ||||
@@ -863,23 +742,18 @@ int main(int argc, char* argv[]) | |||||
ret = 1; | ret = 1; | ||||
} | } | ||||
engine->aboutToClose(); | |||||
engine->removeAllPlugins(); | engine->removeAllPlugins(); | ||||
engine->close(); | engine->close(); | ||||
delete engine; | delete engine; | ||||
// Close OSC | |||||
if (useOsc) | if (useOsc) | ||||
{ | { | ||||
// Close OSC | |||||
client.oscClose(); | client.oscClose(); | ||||
// bridge client can't be closed manually, only by host | |||||
} | |||||
else | |||||
{ | |||||
// Close bridge client | |||||
client.quit(); | |||||
} | } | ||||
return ret; | return ret; | ||||
} | } | ||||
#endif // BUILD_BRIDGE_PLUGIN | |||||
#endif // BRIDGE_PLUGIN |
@@ -98,21 +98,6 @@ public: | |||||
qDebug("CarlaBridgeToolkitQt::~CarlaBridgeToolkitQt()"); | qDebug("CarlaBridgeToolkitQt::~CarlaBridgeToolkitQt()"); | ||||
CARLA_ASSERT(! app); | CARLA_ASSERT(! app); | ||||
CARLA_ASSERT(! msgTimer); | CARLA_ASSERT(! msgTimer); | ||||
if (window) | |||||
{ | |||||
window->close(); | |||||
delete window; | |||||
} | |||||
#ifdef BRIDGE_CONTAINER | |||||
// TESTING | |||||
if (embedContainer) | |||||
{ | |||||
embedContainer->close(); | |||||
delete embedContainer; | |||||
} | |||||
#endif | |||||
} | } | ||||
void init() | void init() | ||||
@@ -216,6 +201,16 @@ public: | |||||
window = nullptr; | window = nullptr; | ||||
} | } | ||||
#ifdef BRIDGE_CONTAINER | |||||
if (embedContainer) | |||||
{ | |||||
embedContainer->close(); | |||||
delete embedContainer; | |||||
embedContainer = nullptr; | |||||
} | |||||
#endif | |||||
if (app) | if (app) | ||||
{ | { | ||||
if (! app->closingDown()) | if (! app->closingDown()) | ||||
@@ -40,12 +40,10 @@ CarlaBridgeToolkit::~CarlaBridgeToolkit() | |||||
free(uiTitle); | free(uiTitle); | ||||
} | } | ||||
#if BUILD_BRIDGE_UI | |||||
void* CarlaBridgeToolkit::getContainerId() | void* CarlaBridgeToolkit::getContainerId() | ||||
{ | { | ||||
qDebug("CarlaBridgeToolkit::getContainerId()"); | qDebug("CarlaBridgeToolkit::getContainerId()"); | ||||
return nullptr; | return nullptr; | ||||
} | } | ||||
#endif | |||||
CARLA_BRIDGE_END_NAMESPACE | CARLA_BRIDGE_END_NAMESPACE |
@@ -47,11 +47,9 @@ 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; | ||||
#if BUILD_BRIDGE_UI | |||||
virtual void* getContainerId(); | virtual void* getContainerId(); | ||||
static CarlaBridgeToolkit* createNew(CarlaBridgeClient* const client, const char* const uiTitle); | static CarlaBridgeToolkit* createNew(CarlaBridgeClient* const client, const char* const uiTitle); | ||||
#endif | |||||
protected: | protected: | ||||
CarlaBridgeClient* const client; | CarlaBridgeClient* const client; | ||||
@@ -1023,10 +1023,10 @@ int CarlaBridgeOsc::handleMsgLv2TransferAtom(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||||
chunk = QByteArray::fromBase64(atomBuf); | chunk = QByteArray::fromBase64(atomBuf); | ||||
LV2_Atom* const atom = (LV2_Atom*)chunk.constData(); | 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; | return 0; | ||||
} | } | ||||
@@ -1047,10 +1047,10 @@ int CarlaBridgeOsc::handleMsgLv2TransferEvent(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||||
chunk = QByteArray::fromBase64(atomBuf); | chunk = QByteArray::fromBase64(atomBuf); | ||||
LV2_Atom* const atom = (LV2_Atom*)chunk.constData(); | 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; | return 0; | ||||
} | } | ||||
@@ -1115,4 +1115,4 @@ int main(int argc, char* argv[]) | |||||
return ret; | return ret; | ||||
} | } | ||||
#endif | |||||
#endif // BRIDGE_LV2 |
@@ -530,6 +530,8 @@ private: | |||||
CarlaVstClient* CarlaVstClient::lastVstPlugin = nullptr; | CarlaVstClient* CarlaVstClient::lastVstPlugin = nullptr; | ||||
// ------------------------------------------------------------------------- | |||||
CARLA_BRIDGE_END_NAMESPACE | CARLA_BRIDGE_END_NAMESPACE | ||||
int main(int argc, char* argv[]) | int main(int argc, char* argv[]) | ||||
@@ -589,4 +591,5 @@ int main(int argc, char* argv[]) | |||||
return ret; | return ret; | ||||
} | } | ||||
#endif | |||||
#endif // BRIDGE_VST | |||||
@@ -1,6 +1,10 @@ | |||||
# QtCreator project file | # QtCreator project file | ||||
contains(QT_VERSION, ^5.*) { | |||||
QT = core widgets | |||||
} else { | |||||
QT = core gui | QT = core gui | ||||
} | |||||
CONFIG = debug link_pkgconfig qt warn_on | CONFIG = debug link_pkgconfig qt warn_on | ||||
PKGCONFIG = jack liblo | PKGCONFIG = jack liblo | ||||
@@ -10,15 +14,30 @@ TEMPLATE = app | |||||
VERSION = 0.5.0 | VERSION = 0.5.0 | ||||
SOURCES = \ | SOURCES = \ | ||||
../carla_bridge_client.cpp \ | |||||
../carla_bridge_osc.cpp \ | ../carla_bridge_osc.cpp \ | ||||
../carla_bridge_toolkit.cpp \ | |||||
../carla_bridge_plugin.cpp | ../carla_bridge_plugin.cpp | ||||
HEADERS = \ | |||||
../carla_bridge.hpp \ | |||||
../carla_bridge_client.hpp \ | |||||
../carla_bridge_osc.hpp \ | |||||
../carla_bridge_toolkit.hpp \ | |||||
# carla-engine | |||||
SOURCES += \ | SOURCES += \ | ||||
../../carla-engine/carla_engine.cpp \ | ../../carla-engine/carla_engine.cpp \ | ||||
../../carla-engine/carla_engine_osc.cpp \ | ../../carla-engine/carla_engine_osc.cpp \ | ||||
../../carla-engine/carla_engine_thread.cpp \ | ../../carla-engine/carla_engine_thread.cpp \ | ||||
../../carla-engine/jack.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 += \ | SOURCES += \ | ||||
../../carla-plugin/carla_plugin.cpp \ | ../../carla-plugin/carla_plugin.cpp \ | ||||
../../carla-plugin/carla_plugin_thread.cpp \ | ../../carla-plugin/carla_plugin_thread.cpp \ | ||||
@@ -27,31 +46,23 @@ SOURCES += \ | |||||
../../carla-plugin/lv2.cpp \ | ../../carla-plugin/lv2.cpp \ | ||||
../../carla-plugin/vst.cpp | ../../carla-plugin/vst.cpp | ||||
HEADERS = \ | |||||
../carla_bridge.hpp \ | |||||
../carla_bridge_client.hpp \ | |||||
../carla_bridge_osc.hpp \ | |||||
../carla_bridge_toolkit.hpp \ | |||||
HEADERS += \ | 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 += \ | HEADERS += \ | ||||
../../carla-backend/carla_backend.hpp \ | ../../carla-backend/carla_backend.hpp \ | ||||
../../carla-backend/carla_backend_utils.hpp | ../../carla-backend/carla_backend_utils.hpp | ||||
# carla-includes | |||||
HEADERS += \ | 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 += \ | HEADERS += \ | ||||
../../carla-utils/carla_lib_utils.hpp \ | ../../carla-utils/carla_lib_utils.hpp \ | ||||
../../carla-utils/carla_osc_utils.hpp \ | ../../carla-utils/carla_osc_utils.hpp \ | ||||
@@ -70,7 +81,8 @@ INCLUDEPATH = .. \ | |||||
DEFINES = QTCREATOR_TEST | DEFINES = QTCREATOR_TEST | ||||
DEFINES += DEBUG | DEFINES += DEBUG | ||||
#DEFINES += VESTIGE_HEADER | #DEFINES += VESTIGE_HEADER | ||||
DEFINES += BUILD_BRIDGE BUILD_BRIDGE_PLUGIN | |||||
DEFINES += BUILD_BRIDGE BUILD_BRIDGE_PLUGIN BRIDGE_PLUGIN | |||||
DEFINES += CARLA_ENGINE_JACK | DEFINES += CARLA_ENGINE_JACK | ||||
DEFINES += WANT_LADSPA WANT_DSSI WANT_LV2 WANT_VST | DEFINES += WANT_LADSPA WANT_DSSI WANT_LV2 WANT_VST | ||||
@@ -18,6 +18,8 @@ | |||||
#include "carla_plugin.hpp" | #include "carla_plugin.hpp" | ||||
#include "carla_lib_utils.hpp" | #include "carla_lib_utils.hpp" | ||||
#include <QtGui/QtEvents> | |||||
CARLA_BACKEND_START_NAMESPACE | CARLA_BACKEND_START_NAMESPACE | ||||
// ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
@@ -1550,4 +1552,132 @@ void CarlaPlugin::engineMidiUnlock() | |||||
x_engine->midiUnlock(); | 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 | CARLA_BACKEND_END_NAMESPACE |
@@ -21,24 +21,23 @@ | |||||
#include "carla_midi.h" | #include "carla_midi.h" | ||||
#include "carla_engine.hpp" | #include "carla_engine.hpp" | ||||
#include "carla_osc_utils.hpp" | #include "carla_osc_utils.hpp" | ||||
#include "carla_plugin_thread.hpp" | |||||
#ifdef BUILD_BRIDGE | #ifdef BUILD_BRIDGE | ||||
//# include "carla_backend_utils.hpp" | |||||
# include "carla_bridge_osc.hpp" | # include "carla_bridge_osc.hpp" | ||||
//#else | |||||
#endif | #endif | ||||
#include "carla_plugin_thread.hpp" | |||||
// common includes | // common includes | ||||
#include <cmath> | #include <cmath> | ||||
#include <vector> | #include <vector> | ||||
#include <QtCore/QMutex> | #include <QtCore/QMutex> | ||||
#include <QtGui/QMainWindow> | |||||
#ifdef Q_WS_X11 | #ifdef Q_WS_X11 | ||||
#include <QtGui/QX11EmbedContainer> | |||||
# include <QtGui/QX11EmbedContainer> | |||||
typedef QX11EmbedContainer GuiContainer; | typedef QX11EmbedContainer GuiContainer; | ||||
#else | #else | ||||
#include <QtGui/QWidget> | |||||
# include <QtGui/QWidget> | |||||
typedef QWidget GuiContainer; | typedef QWidget GuiContainer; | ||||
#endif | #endif | ||||
@@ -983,6 +982,90 @@ protected: | |||||
friend class CarlaEngineJack; | 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 | CARLA_BACKEND_END_NAMESPACE | ||||