| @@ -53,7 +53,7 @@ posix64: | |||
| $(MAKE) -C source/discovery posix64 | |||
| win32: | |||
| $(MAKE) -C source/bridges win32 | |||
| # $(MAKE) -C source/bridges win32 | |||
| $(MAKE) -C source/discovery win32 | |||
| win64: | |||
| @@ -286,8 +286,8 @@ else | |||
| endif | |||
| # --- Others --- | |||
| endif | |||
| @echo "" | |||
| endif | |||
| @echo "" | |||
| @echo "\033[36m---> Plugin formats: \033[0m" | |||
| @echo "Internal:$(ANS_YES)" | |||
| @@ -306,38 +306,43 @@ endif | |||
| ifeq ($(CARLA_PLUGIN_SUPPORT),true) | |||
| @echo "\033[36m---> LV2 UI toolkit support: \033[0m" | |||
| @echo "ExternalUI:$(ANS_YES) (direct)" | |||
| ifeq ($(MACOS),true) | |||
| # --- MacOS --- | |||
| @echo "Cocoa:$(ANS_YES)" | |||
| @echo "CocoaUI: $(ANS_YES) (direct+bridge)" | |||
| # --- MacOS --- | |||
| else | |||
| # --- Win32 --- | |||
| ifeq ($(WIN32),true) | |||
| # --- Win32 --- | |||
| @echo "Windows:$(ANS_YES)" | |||
| @echo "WindowsUI: $(ANS_YES) (direct+bridge)" | |||
| else | |||
| # --- Others --- | |||
| ifeq ($(HAVE_GTK2),true) | |||
| @echo "Gtk2:$(ANS_YES)" | |||
| @echo "GtkUI: $(ANS_YES) (bridge)" | |||
| else | |||
| @echo "Gtk2:$(ANS_NO) $(mS)Gtk2 missing$(mE)" | |||
| @echo "GtkUI: $(ANS_NO) $(mS)Gtk2 missing$(mE)" | |||
| endif | |||
| ifeq ($(HAVE_GTK3),true) | |||
| @echo "Gtk3:$(ANS_YES)" | |||
| @echo "Gtk3UI: $(ANS_YES) (bridge)" | |||
| else | |||
| @echo "Gtk3:$(ANS_NO) $(mS)Gtk3 missing$(mE)" | |||
| @echo "Gtk3UI: $(ANS_NO) $(mS)Gtk3 missing$(mE)" | |||
| endif | |||
| ifeq ($(HAVE_QT4),true) | |||
| @echo "Qt4: $(ANS_YES)" | |||
| @echo "Qt4UI: $(ANS_YES) (direct+bridge)" | |||
| else | |||
| @echo "Qt4: $(ANS_NO) $(mS)Qt4 missing$(mE)" | |||
| @echo "Qt4UI: $(ANS_NO) $(mS)Qt4 missing$(mE)" | |||
| endif | |||
| ifeq ($(HAVE_QT5),true) | |||
| @echo "Qt5: $(ANS_YES)" | |||
| ifeq ($(HAVE_QT4),true) | |||
| @echo "Qt5UI: $(ANS_YES) (bridge)" | |||
| else | |||
| @echo "Qt5UI: $(ANS_YES) (direct+bridge)" | |||
| endif | |||
| else | |||
| @echo "Qt5: $(ANS_NO) $(mS)Qt5 missing$(mE)" | |||
| @echo "Qt5UI: $(ANS_NO) $(mS)Qt5 missing$(mE)" | |||
| endif | |||
| @echo "X11: $(ANS_YES)" | |||
| @echo "X11UI: $(ANS_YES) (direct+bridge)" | |||
| endif | |||
| # --- Others --- | |||
| endif | |||
| @@ -373,10 +378,10 @@ ifeq ($(HAVE_AF_DEPS),true) | |||
| ifeq ($(HAVE_FFMPEG),true) | |||
| @echo "AudioFile: $(ANS_YES) (with ffmpeg)" | |||
| else | |||
| @echo "AudioFIle: $(ANS_YES) (without ffmpeg) $(mS)ffmpeg/libav missing$(mE)" | |||
| @echo "AudioFile: $(ANS_YES) (without ffmpeg) $(mS)ffmpeg/libav missing$(mE)" | |||
| endif | |||
| else | |||
| @echo "AudioFIle: $(ANS_NO) $(mS)libsndfile missing$(mE)" | |||
| @echo "AudioFile: $(ANS_NO) $(mS)libsndfile missing$(mE)" | |||
| endif | |||
| ifeq ($(HAVE_MF_DEPS),true) | |||
| @@ -11,9 +11,9 @@ if [ ! -f Makefile ]; then | |||
| cd ../.. | |||
| fi | |||
| ln -s -f $MINGW_PATH/bin/$MINGW-pkg-config ./data/windows/pkg-config | |||
| export WIN32=true | |||
| export PATH=`pwd`/data/windows:$MINGW_PATH/bin:$MINGW_PATH/$MINGW/bin:$PATH | |||
| export PATH=$MINGW_PATH/bin:$MINGW_PATH/$MINGW/bin:$PATH | |||
| export AR=$MINGW-ar | |||
| export CC=$MINGW-gcc | |||
| export CXX=$MINGW-g++ | |||
| @@ -23,89 +23,85 @@ export UIC=$MINGW-uic | |||
| export STRIP=$MINGW-strip | |||
| export WINDRES=$MINGW-windres | |||
| export PKG_CONFIG_PATH=$MINGW_PATH/lib/pkgconfig | |||
| export WINEPREFIX=~/.winepy3 | |||
| export PYTHON_EXE="C:\\\\Python33\\\\python.exe" | |||
| export CXFREEZE="wine $PYTHON_EXE C:\\\\Python33\\\\Scripts\\\\cxfreeze" | |||
| export PYUIC="wine $PYTHON_EXE C:\\\\Python33\\\\Lib\\\\site-packages\\\\PyQt4\\\\uic\\\\pyuic.py" | |||
| export PYRCC="wine C:\\\\Python33\\\\Lib\\\\site-packages\\\\PyQt4\\\\pyrcc4.exe -py3" | |||
| export CFLAGS="-DPTW32_STATIC_LIB -I$MINGW_PATH/include" | |||
| export CXXFLAGS="-DPTW32_STATIC_LIB -DFLUIDSYNTH_NOT_A_DLL -I$MINGW_PATH/include" | |||
| export EXTRA_LIBS1="-lglib-2.0 -lgthread-2.0 -lgig -lsndfile -lFLAC -lvorbisenc -lvorbis -logg" | |||
| export EXTRA_LIBS2="$MINGW_PATH/lib/qt4/plugins/imageformats/libqsvg.a $MINGW_PATH/lib/qt4/plugins/iconengines/libqsvgicon.a" | |||
| export EXTRA_LIBS2="$MINGW_PATH/lib/qt4/plugins/imageformats/libqsvg.a" | |||
| # Clean build | |||
| make clean | |||
| # make clean | |||
| # Build PyQt4 resources | |||
| make $JOBS UI RES WIDGETS | |||
| # make $JOBS UI RES WIDGETS | |||
| # Build discovery | |||
| make $JOBS -C source/discovery WIN32=true EXTRA_LIBS="$EXTRA_LIBS1" | |||
| mv source/discovery/carla-discovery-native source/discovery/carla-discovery-win32.exe | |||
| make $JOBS discovery EXTRA_LIBS="$EXTRA_LIBS1" | |||
| cp source/discovery/carla-discovery-native.exe source/discovery/carla-discovery-win32.exe | |||
| # Build backend | |||
| make $JOBS -C source/backend/standalone ../libcarla_standalone.dll WIN32=true EXTRA_LIBS="$EXTRA_LIBS1 $EXTRA_LIBS2" | |||
| rm -rf ./data/windows/Carla | |||
| cp ./source/carla.py ./source/carla.pyw | |||
| $CXFREEZE --target-dir=".\\data\\windows\\Carla" ".\\source\\carla.pyw" | |||
| rm -f ./source/carla.pyw | |||
| rm -rf ./data/windows/CarlaControl | |||
| cp ./source/carla_control.py ./source/carla_control.pyw | |||
| $CXFREEZE --target-dir=".\\data\\windows\\CarlaControl" ".\\source\\carla_control.pyw" | |||
| rm -f ./source/carla_control.pyw | |||
| cd data/windows | |||
| mkdir Carla/backend | |||
| mkdir Carla/bridges | |||
| mkdir Carla/discovery | |||
| cp ../../source/backend/*.dll Carla/backend/ | |||
| cp ../../source/discovery/*.exe Carla/discovery/ | |||
| mv CarlaControl/carla_control.exe CarlaControl/CarlaControl.exe | |||
| cp $WINEPREFIX/drive_c/windows/syswow64/python33.dll Carla/ | |||
| cp $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/QtCore4.dll Carla/ | |||
| cp $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/QtGui4.dll Carla/ | |||
| cp $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/QtOpenGL4.dll Carla/ | |||
| cp $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/QtSvg4.dll Carla/ | |||
| cp $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/QtXml4.dll Carla/ | |||
| cp -r $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/plugins/imageformats/ Carla/ | |||
| cp -r $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/plugins/iconengines/ Carla/ | |||
| cp $WINEPREFIX/drive_c/windows/syswow64/python33.dll CarlaControl/ | |||
| cp $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/QtCore4.dll CarlaControl/ | |||
| cp $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/QtGui4.dll CarlaControl/ | |||
| cp -r $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/plugins/imageformats/ CarlaControl/ | |||
| cp -r $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/plugins/iconengines/ CarlaControl/ | |||
| rm -f pkg-config | |||
| # make $JOBS -C source/backend/standalone ../libcarla_standalone.dll WIN32=true EXTRA_LIBS="$EXTRA_LIBS1 $EXTRA_LIBS2" | |||
| # export WINEPREFIX=~/.winepy3 | |||
| # | |||
| # export PYTHON_EXE="C:\\\\Python33\\\\python.exe" | |||
| # | |||
| # export CXFREEZE="wine $PYTHON_EXE C:\\\\Python33\\\\Scripts\\\\cxfreeze" | |||
| # export PYUIC="wine $PYTHON_EXE C:\\\\Python33\\\\Lib\\\\site-packages\\\\PyQt4\\\\uic\\\\pyuic.py" | |||
| # export PYRCC="wine C:\\\\Python33\\\\Lib\\\\site-packages\\\\PyQt4\\\\pyrcc4.exe -py3" | |||
| # rm -rf ./data/windows/Carla | |||
| # cp ./source/carla.py ./source/carla.pyw | |||
| # $CXFREEZE --target-dir=".\\data\\windows\\Carla" ".\\source\\carla.pyw" | |||
| # rm -f ./source/carla.pyw | |||
| # | |||
| # rm -rf ./data/windows/CarlaControl | |||
| # cp ./source/carla_control.py ./source/carla_control.pyw | |||
| # $CXFREEZE --target-dir=".\\data\\windows\\CarlaControl" ".\\source\\carla_control.pyw" | |||
| # rm -f ./source/carla_control.pyw | |||
| # cd data/windows | |||
| # mkdir Carla/backend | |||
| # mkdir Carla/bridges | |||
| # mkdir Carla/discovery | |||
| # cp ../../source/backend/*.dll Carla/backend/ | |||
| # cp ../../source/discovery/*.exe Carla/discovery/ | |||
| # mv CarlaControl/carla_control.exe CarlaControl/CarlaControl.exe | |||
| # | |||
| # cp $WINEPREFIX/drive_c/windows/syswow64/python33.dll Carla/ | |||
| # cp $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/QtCore4.dll Carla/ | |||
| # cp $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/QtGui4.dll Carla/ | |||
| # cp $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/QtOpenGL4.dll Carla/ | |||
| # cp $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/QtSvg4.dll Carla/ | |||
| # cp $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/QtXml4.dll Carla/ | |||
| # cp -r $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/plugins/imageformats/ Carla/ | |||
| # cp -r $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/plugins/iconengines/ Carla/ | |||
| # | |||
| # cp $WINEPREFIX/drive_c/windows/syswow64/python33.dll CarlaControl/ | |||
| # cp $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/QtCore4.dll CarlaControl/ | |||
| # cp $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/QtGui4.dll CarlaControl/ | |||
| # cp -r $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/plugins/imageformats/ CarlaControl/ | |||
| # cp -r $WINEPREFIX/drive_c/Python33/Lib/site-packages/PyQt4/plugins/iconengines/ CarlaControl/ | |||
| # Build unzipfx | |||
| make -C unzipfx-carla -f Makefile.win32 | |||
| make -C unzipfx-carla-control -f Makefile.win32 | |||
| # make -C unzipfx-carla -f Makefile.win32 | |||
| # make -C unzipfx-carla-control -f Makefile.win32 | |||
| # Create static build | |||
| rm -f Carla.zip CarlaControl.zip | |||
| zip -r -9 Carla.zip Carla | |||
| zip -r -9 CarlaControl.zip CarlaControl | |||
| rm -f Carla.exe CarlaControl.exe | |||
| cat unzipfx-carla/unzipfx2cat.exe Carla.zip > Carla.exe | |||
| cat unzipfx-carla-control/unzipfx2cat.exe CarlaControl.zip > CarlaControl.exe | |||
| chmod +x Carla.exe | |||
| chmod +x CarlaControl.exe | |||
| # rm -f Carla.zip CarlaControl.zip | |||
| # zip -r -9 Carla.zip Carla | |||
| # zip -r -9 CarlaControl.zip CarlaControl | |||
| # | |||
| # rm -f Carla.exe CarlaControl.exe | |||
| # cat unzipfx-carla/unzipfx2cat.exe Carla.zip > Carla.exe | |||
| # cat unzipfx-carla-control/unzipfx2cat.exe CarlaControl.zip > CarlaControl.exe | |||
| # chmod +x Carla.exe | |||
| # chmod +x CarlaControl.exe | |||
| # Cleanup | |||
| make -C unzipfx-carla -f Makefile.win32 clean | |||
| make -C unzipfx-carla-control -f Makefile.win32 clean | |||
| rm -f Carla.zip CarlaControl.zip | |||
| rm -f unzipfx-*/*.exe | |||
| # make -C unzipfx-carla -f Makefile.win32 clean | |||
| # make -C unzipfx-carla-control -f Makefile.win32 clean | |||
| # rm -f Carla.zip CarlaControl.zip | |||
| # rm -f unzipfx-*/*.exe | |||
| # Testing: | |||
| echo "export WINEPREFIX=~/.winepy3" | |||
| @@ -1,5 +1,8 @@ | |||
| # Carla TODO | |||
| MAKEFILE: | |||
| - "strip" usage | |||
| GENERAL: | |||
| - add direct program access on ui-dialogs (needed for standalone bridges), maybe add extra buttons too (reset plugin, fix ui size) | |||
| - implement osc-based uis in bridge mode | |||
| @@ -33,7 +33,7 @@ BASE_FLAGS = -Wall -Wextra -fPIC -pipe | |||
| BASE_OPTS = -O2 -ffast-math -mtune=generic -msse -mfpmath=sse | |||
| ifeq ($(RASPPI),true) | |||
| # RaspberryPi build flags | |||
| # Raspberry-Pi optimization flags | |||
| BASE_OPTS = -O2 -ffast-math -march=armv6 -mfpu=vfp -mfloat-abi=hard | |||
| endif | |||
| @@ -41,6 +41,7 @@ ifeq ($(DEBUG),true) | |||
| BASE_FLAGS += -DDEBUG -O0 -g | |||
| else | |||
| BASE_FLAGS += -DNDEBUG $(BASE_OPTS) -fvisibility=hidden | |||
| # BASE_FLAGS += -DCARLA_NO_ASSERTS | |||
| endif | |||
| 32BIT_FLAGS = -m32 | |||
| @@ -61,7 +62,7 @@ HAVE_FFMPEG = $(shell pkg-config --exists libavcodec libavformat libavutil | |||
| HAVE_OPENGL = $(shell pkg-config --exists gl && echo true) | |||
| HAVE_GTK2 = $(shell pkg-config --exists gtk+-2.0 && echo true) | |||
| HAVE_GTK3 = $(shell pkg-config --exists gtk+-3.0 && echo true) | |||
| HAVE_QT4 = $(shell pkg-config --exists QtCore && echo true) | |||
| # HAVE_QT4 = $(shell pkg-config --exists QtCore && echo true) | |||
| HAVE_QT5 = $(shell pkg-config --exists Qt5Core && echo true) | |||
| HAVE_AF_DEPS = $(shell pkg-config --exists sndfile && echo true) | |||
| @@ -143,16 +143,16 @@ enum BinaryType { | |||
| * Some plugin classes might provide more than 1 plugin type. | |||
| */ | |||
| enum PluginType { | |||
| PLUGIN_NONE = 0, //!< Null plugin type. | |||
| PLUGIN_INTERNAL = 1, //!< Internal plugin. | |||
| PLUGIN_LADSPA = 2, //!< LADSPA plugin. | |||
| PLUGIN_DSSI = 3, //!< DSSI plugin. | |||
| PLUGIN_LV2 = 4, //!< LV2 plugin. | |||
| PLUGIN_VST = 5, //!< VST1/2 plugin. | |||
| PLUGIN_VST3 = 6, //!< VST3 plugin. | |||
| PLUGIN_GIG = 7, //!< GIG sound kit, implemented via LinuxSampler. | |||
| PLUGIN_SF2 = 8, //!< SF2 sound kit (aka SoundFont), implemented via FluidSynth. | |||
| PLUGIN_SFZ = 9 //!< SFZ sound kit, implemented via LinuxSampler. | |||
| PLUGIN_NONE = 0, //!< Null plugin type | |||
| PLUGIN_INTERNAL = 1, //!< Internal plugin | |||
| PLUGIN_LADSPA = 2, //!< LADSPA plugin | |||
| PLUGIN_DSSI = 3, //!< DSSI plugin | |||
| PLUGIN_LV2 = 4, //!< LV2 plugin | |||
| PLUGIN_VST = 5, //!< VST1/2 plugin | |||
| PLUGIN_VST3 = 6, //!< VST3 plugin | |||
| PLUGIN_GIG = 7, //!< GIG sound kit | |||
| PLUGIN_SF2 = 8, //!< SF2 sound kit (aka SoundFont) | |||
| PLUGIN_SFZ = 9 //!< SFZ sound kit | |||
| }; | |||
| /*! | |||
| @@ -493,7 +493,7 @@ enum CallbackType { | |||
| /*! | |||
| * The plugin's custom GUI state has changed. | |||
| * | |||
| * \param value1 State, as follows:.\n | |||
| * \param value1 State, as follows:\n | |||
| * 0: GUI has been closed or hidden\n | |||
| * 1: GUI has been shown\n | |||
| * -1: GUI has crashed and should not be shown again | |||
| @@ -590,39 +590,47 @@ enum CallbackType { | |||
| CALLBACK_PATCHBAY_CONNECTION_REMOVED = 25, | |||
| /*! | |||
| * Non-Session-Manager Announce message. | |||
| * Engine buffer-size changed. | |||
| */ | |||
| CALLBACK_BUFFER_SIZE_CHANGED = 26, | |||
| /*! | |||
| * Non-Session-Manager Announce message. | |||
| * Engine sample-rate changed. | |||
| */ | |||
| CALLBACK_SAMPLE_RATE_CHANGED = 27, | |||
| /*! | |||
| * Engine process mode changed. | |||
| * | |||
| * \param value1 New process mode | |||
| * \see ProcessMode | |||
| */ | |||
| CALLBACK_PROCESS_MODE_CHANGED = 28, | |||
| /*! | |||
| * Non-Session-Manager Announce message. | |||
| */ | |||
| CALLBACK_NSM_ANNOUNCE = 28, | |||
| CALLBACK_NSM_ANNOUNCE = 29, | |||
| /*! | |||
| * Non-Session-Manager Open message. | |||
| */ | |||
| CALLBACK_NSM_OPEN = 29, | |||
| CALLBACK_NSM_OPEN = 30, | |||
| /*! | |||
| * Non-Session-Manager Save message. | |||
| */ | |||
| CALLBACK_NSM_SAVE = 30, | |||
| CALLBACK_NSM_SAVE = 31, | |||
| /*! | |||
| * An error occurred, show \a valueStr as an error to user. | |||
| */ | |||
| CALLBACK_ERROR = 31, | |||
| CALLBACK_ERROR = 32, | |||
| /*! | |||
| * The engine has crashed or malfunctioned and will no longer work. | |||
| */ | |||
| CALLBACK_QUIT = 32 | |||
| CALLBACK_QUIT = 33 | |||
| }; | |||
| /*! | |||
| @@ -643,8 +651,8 @@ enum ProcessMode { | |||
| */ | |||
| enum TransportMode { | |||
| TRANSPORT_MODE_INTERNAL = 0, //!< Internal transport mode. | |||
| TRANSPORT_MODE_JACK = 1, //!< JACK transport, only available if driver name is "JACK" | |||
| TRANSPORT_MODE_PLUGIN = 2, //!< Plugin transport from host, used when Carla is a plugin | |||
| TRANSPORT_MODE_JACK = 1, //!< Transport from JACK, only available if driver name is "JACK" | |||
| TRANSPORT_MODE_PLUGIN = 2, //!< Transport from host, used when Carla is a plugin | |||
| TRANSPORT_MODE_BRIDGE = 3 //!< Special mode, used in plugin-bridges only. | |||
| }; | |||
| @@ -674,6 +682,8 @@ struct ParameterData { | |||
| hints(0x0), | |||
| midiChannel(0), | |||
| midiCC(-1) {} | |||
| CARLA_LEAK_DETECTOR(ParameterData) | |||
| #endif | |||
| }; | |||
| @@ -696,6 +706,8 @@ struct ParameterRanges { | |||
| step(0.01f), | |||
| stepSmall(0.0001f), | |||
| stepLarge(0.1f) {} | |||
| CARLA_LEAK_DETECTOR(ParameterRanges) | |||
| #endif | |||
| void fixDefault() | |||
| @@ -751,6 +763,8 @@ struct MidiProgramData { | |||
| : bank(0), | |||
| program(0), | |||
| name(nullptr) {} | |||
| CARLA_LEAK_DETECTOR(MidiProgramData) | |||
| #endif | |||
| }; | |||
| @@ -770,6 +784,8 @@ struct CustomData { | |||
| : type(nullptr), | |||
| key(nullptr), | |||
| value(nullptr) {} | |||
| CARLA_LEAK_DETECTOR(CustomData) | |||
| #endif | |||
| }; | |||
| @@ -49,6 +49,16 @@ protected: | |||
| return kHost; | |||
| } | |||
| const char* hostResourceDir() const | |||
| { | |||
| CARLA_ASSERT(kHost != nullptr); | |||
| if (kHost != nullptr) | |||
| return kHost->resource_dir; | |||
| return nullptr; | |||
| } | |||
| const char* hostUiName() const | |||
| { | |||
| CARLA_ASSERT(kHost != nullptr); | |||
| @@ -662,8 +662,8 @@ public: | |||
| #ifdef WANT_ZYNADDSUBFX_UI | |||
| if (gPixmapPath.isEmpty()) | |||
| { | |||
| gPixmapPath = host->resource_dir; | |||
| gPixmapPath += PIXMAP_PATH; | |||
| gPixmapPath = host->resource_dir; | |||
| gPixmapPath += PIXMAP_PATH; | |||
| gUiPixmapPath = gPixmapPath; | |||
| } | |||
| #endif | |||
| @@ -710,10 +710,11 @@ int ZynAddSubFxPlugin::sInstanceCount = 0; | |||
| NonRtList<ZynAddSubFxPlugin::ProgramInfo*> ZynAddSubFxPlugin::sPrograms; | |||
| static const struct ProgramsDestructor { | |||
| ProgramsDestructor() {} | |||
| ~ProgramsDestructor() { | |||
| ZynAddSubFxPlugin::_clearPrograms(); | |||
| } | |||
| } programsDestructor; | |||
| } _programsDestructor; | |||
| // ----------------------------------------------------------------------- | |||
| @@ -245,13 +245,14 @@ CALLBACK_PATCHBAY_PORT_REMOVED = 22 | |||
| CALLBACK_PATCHBAY_PORT_RENAMED = 23 | |||
| CALLBACK_PATCHBAY_CONNECTION_ADDED = 24 | |||
| CALLBACK_PATCHBAY_CONNECTION_REMOVED = 25 | |||
| CALLBACK_BUFFER_SIZE_CHANGED = 26 | |||
| CALLBACK_SAMPLE_RATE_CHANGED = 27 | |||
| CALLBACK_NSM_ANNOUNCE = 28 | |||
| CALLBACK_NSM_OPEN = 29 | |||
| CALLBACK_NSM_SAVE = 30 | |||
| CALLBACK_ERROR = 31 | |||
| CALLBACK_QUIT = 32 | |||
| CALLBACK_BUFFER_SIZE_CHANGED = 26 | |||
| CALLBACK_SAMPLE_RATE_CHANGED = 27 | |||
| CALLBACK_PROCESS_MODE_CHANGED = 28 | |||
| CALLBACK_NSM_ANNOUNCE = 29 | |||
| CALLBACK_NSM_OPEN = 30 | |||
| CALLBACK_NSM_SAVE = 31 | |||
| CALLBACK_ERROR = 32 | |||
| CALLBACK_QUIT = 33 | |||
| # Process Mode | |||
| PROCESS_MODE_SINGLE_CLIENT = 0 | |||
| @@ -43,7 +43,7 @@ POSIX_LINK_FLAGS = $(LINK_FLAGS) -ldl | |||
| WIN_BUILD_FLAGS = $(BUILD_CXX_FLAGS) | |||
| WIN_32BIT_FLAGS = $(32BIT_FLAGS) | |||
| WIN_64BIT_FLAGS = $(64BIT_FLAGS) | |||
| WIN_LINK_FLAGS = $(LINK_FLAGS) $(EXTRA_LIBS) -lole32 -luuid -lws2_32 -static | |||
| WIN_LINK_FLAGS = $(LINK_FLAGS) $(EXTRA_LIBS) -lole32 -luuid -lws2_32 | |||
| ifeq ($(HAVE_FLUIDSYNTH),true) | |||
| WIN_LINK_FLAGS += -ldsound -lwinmm | |||
| @@ -53,14 +53,6 @@ ifeq ($(HAVE_LINUXSAMPLER),true) | |||
| WIN_LINK_FLAGS += -lrpcrt4 | |||
| endif | |||
| ifeq ($(WIN32),true) | |||
| NATIVE_BUILD_FLAGS = $(WIN_BUILD_FLAGS) | |||
| NATIVE_LINK_FLAGS = $(WIN_LINK_FLAGS) | |||
| else | |||
| NATIVE_BUILD_FLAGS = $(POSIX_BUILD_FLAGS) | |||
| NATIVE_LINK_FLAGS = $(POSIX_LINK_FLAGS) | |||
| endif | |||
| ifeq ($(CARLA_PLUGIN_SUPPORT),true) | |||
| LIBS = ../libs/lilv.a | |||
| LIBS_posix32 = ../libs/lilv.posix32.a | |||
| @@ -73,7 +65,11 @@ OBJS = carla-discovery.cpp | |||
| # -------------------------------------------------------------- | |||
| ifeq ($(WIN32),true) | |||
| all: carla-discovery-native.exe | |||
| else | |||
| all: carla-discovery-native | |||
| endif | |||
| posix32: carla-discovery-posix32 | |||
| posix64: carla-discovery-posix64 | |||
| @@ -83,7 +79,10 @@ win64: carla-discovery-win64.exe | |||
| # -------------------------------------------------------------- | |||
| carla-discovery-native: $(OBJS) $(LIBS) | |||
| $(CXX) $^ $(NATIVE_BUILD_FLAGS) $(NATIVE_FLAGS) $(NATIVE_LINK_FLAGS) -o $@ && $(STRIP) $@ | |||
| $(CXX) $^ $(POSIX_BUILD_FLAGS) $(NATIVE_FLAGS) $(POSIX_LINK_FLAGS) -o $@ && $(STRIP) $@ | |||
| carla-discovery-native.exe: $(OBJS) $(LIBS) | |||
| $(CXX) $^ $(WIN_BUILD_FLAGS) $(NATIVE_FLAGS) $(WIN_LINK_FLAGS) -o $@ && $(STRIP) $@ | |||
| carla-discovery-posix32: $(OBJS) $(LIBS_posix32) | |||
| $(CXX) $^ $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) $(POSIX_LINK_FLAGS) -o $@ && $(STRIP) $@ | |||
| @@ -107,5 +106,21 @@ debug: | |||
| # -------------------------------------------------------------- | |||
| ../libs/%: | |||
| $(MAKE) -C ../libs $* | |||
| ../libs/lilv.a: | |||
| $(MAKE) -C ../libs lilv | |||
| ../libs/lilv.posix32.a: | |||
| $(MAKE) -C ../libs lilv_posix32 | |||
| ../libs/lilv.posix64.a: | |||
| $(MAKE) -C ../libs lilv_posix32 | |||
| ../libs/lilv.win32.a: | |||
| $(MAKE) -C ../libs lilv_win32 | |||
| ../libs/lilv.win64.a: | |||
| $(MAKE) -C ../libs lilv_win64 | |||
| .PHONY: ../libs/lilv.a \ | |||
| ../libs/lilv.posix32.a ../libs/lilv.posix64.a \ | |||
| ../libs/lilv.win32.a ../libs/lilv.win64.a | |||
| @@ -109,11 +109,12 @@ | |||
| # define BINARY_NATIVE BINARY_OTHER | |||
| #endif | |||
| // Define CARLA_ASSERT* | |||
| // Define CARLA_SAFE_ASSERT* | |||
| #define CARLA_SAFE_ASSERT(cond) ((!(cond)) ? carla_assert(#cond, __FILE__, __LINE__) : pass()) | |||
| #define CARLA_SAFE_ASSERT_INT(cond, value) ((!(cond)) ? carla_assert_int(#cond, __FILE__, __LINE__, value) : pass()) | |||
| #define CARLA_SAFE_ASSERT_INT2(cond, v1, v2) ((!(cond)) ? carla_assert_int2(#cond, __FILE__, __LINE__, v1, v2) : pass()) | |||
| // Define CARLA_ASSERT* | |||
| #if defined(CARLA_NO_ASSERTS) | |||
| # define CARLA_ASSERT(cond) | |||
| # define CARLA_ASSERT_INT(cond, value) | |||
| @@ -111,7 +111,7 @@ | |||
| #define MIDI_CONTROL_OMNI_MODE_OFF 0x7C // 0 (+ all notes off) | |||
| #define MIDI_CONTROL_OMNI_MODE_ON 0x7D // 0 (+ all notes off) | |||
| #define MIDI_CONTROL_MONO_MODE_ON 0x7E // ... | |||
| #define MIDI_CONTROL_POLY_MODE_ON 0x7F // 0 ( + mono off, + all notes off) | |||
| #define MIDI_CONTROL_POLY_MODE_ON 0x7F // 0 (+ mono off, + all notes off) | |||
| #define MIDI_CONTROL_SOUND_VARIATION MIDI_CONTROL_SOUND_CONTROLLER_1 | |||
| #define MIDI_CONTROL_TIMBRE MIDI_CONTROL_SOUND_CONTROLLER_2 | |||
| @@ -127,13 +127,13 @@ struct LADSPA_RDF_ScalePoint { | |||
| ~LADSPA_RDF_ScalePoint() | |||
| { | |||
| if (Label != nullptr) | |||
| { | |||
| delete[] Label; | |||
| Label = nullptr; | |||
| } | |||
| } | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| LADSPA_RDF_ScalePoint(LADSPA_RDF_ScalePoint&) = delete; | |||
| LADSPA_RDF_ScalePoint(const LADSPA_RDF_ScalePoint&) = delete; | |||
| #endif | |||
| CARLA_DECLARE_NON_COPY_STRUCT_WITH_LEAK_DETECTOR(LADSPA_RDF_ScalePoint) | |||
| }; | |||
| // Port | |||
| @@ -159,15 +159,18 @@ struct LADSPA_RDF_Port { | |||
| ~LADSPA_RDF_Port() | |||
| { | |||
| if (Label != nullptr) | |||
| { | |||
| delete[] Label; | |||
| Label = nullptr; | |||
| } | |||
| if (ScalePoints != nullptr) | |||
| { | |||
| delete[] ScalePoints; | |||
| ScalePoints = nullptr; | |||
| } | |||
| } | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| LADSPA_RDF_Port(LADSPA_RDF_Port&) = delete; | |||
| LADSPA_RDF_Port(const LADSPA_RDF_Port&) = delete; | |||
| #endif | |||
| CARLA_DECLARE_NON_COPY_STRUCT_WITH_LEAK_DETECTOR(LADSPA_RDF_Port) | |||
| }; | |||
| // Plugin | |||
| @@ -191,17 +194,23 @@ struct LADSPA_RDF_Descriptor { | |||
| ~LADSPA_RDF_Descriptor() | |||
| { | |||
| if (Title != nullptr) | |||
| { | |||
| delete[] Title; | |||
| Title = nullptr; | |||
| } | |||
| if (Creator != nullptr) | |||
| { | |||
| delete[] Creator; | |||
| Creator = nullptr; | |||
| } | |||
| if (Ports != nullptr) | |||
| { | |||
| delete[] Ports; | |||
| Ports = nullptr; | |||
| } | |||
| } | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| LADSPA_RDF_Descriptor(LADSPA_RDF_Descriptor&) = delete; | |||
| LADSPA_RDF_Descriptor(const LADSPA_RDF_Descriptor&) = delete; | |||
| #endif | |||
| CARLA_DECLARE_NON_COPY_STRUCT_WITH_LEAK_DETECTOR(LADSPA_RDF_Descriptor) | |||
| }; | |||
| #endif // LADSPA_RDF_INCLUDED | |||
| @@ -29,8 +29,8 @@ typedef const char* LV2_URI; | |||
| typedef uint32_t LV2_Property; | |||
| // Port Midi Map Types | |||
| #define LV2_PORT_MIDI_MAP_CC 0x1 | |||
| #define LV2_PORT_MIDI_MAP_NRPN 0x2 | |||
| #define LV2_PORT_MIDI_MAP_CC 1 | |||
| #define LV2_PORT_MIDI_MAP_NRPN 2 | |||
| #define LV2_IS_PORT_MIDI_MAP_CC(x) ((x) == LV2_PORT_MIDI_MAP_CC) | |||
| #define LV2_IS_PORT_MIDI_MAP_NRPN(x) ((x) == LV2_PORT_MIDI_MAP_NRPN) | |||
| @@ -56,30 +56,30 @@ typedef uint32_t LV2_Property; | |||
| #define LV2_HAVE_PORT_UNIT_UNIT(x) ((x) & LV2_PORT_UNIT_UNIT) | |||
| // Port Unit Unit | |||
| #define LV2_PORT_UNIT_BAR 0x01 | |||
| #define LV2_PORT_UNIT_BEAT 0x02 | |||
| #define LV2_PORT_UNIT_BPM 0x03 | |||
| #define LV2_PORT_UNIT_CENT 0x04 | |||
| #define LV2_PORT_UNIT_CM 0x05 | |||
| #define LV2_PORT_UNIT_COEF 0x06 | |||
| #define LV2_PORT_UNIT_DB 0x07 | |||
| #define LV2_PORT_UNIT_DEGREE 0x08 | |||
| #define LV2_PORT_UNIT_FRAME 0x09 | |||
| #define LV2_PORT_UNIT_HZ 0x0A | |||
| #define LV2_PORT_UNIT_INCH 0x0B | |||
| #define LV2_PORT_UNIT_KHZ 0x0C | |||
| #define LV2_PORT_UNIT_KM 0x0D | |||
| #define LV2_PORT_UNIT_M 0x0E | |||
| #define LV2_PORT_UNIT_MHZ 0x0F | |||
| #define LV2_PORT_UNIT_MIDINOTE 0x10 | |||
| #define LV2_PORT_UNIT_MILE 0x11 | |||
| #define LV2_PORT_UNIT_MIN 0x12 | |||
| #define LV2_PORT_UNIT_MM 0x13 | |||
| #define LV2_PORT_UNIT_MS 0x14 | |||
| #define LV2_PORT_UNIT_OCT 0x15 | |||
| #define LV2_PORT_UNIT_PC 0x16 | |||
| #define LV2_PORT_UNIT_S 0x17 | |||
| #define LV2_PORT_UNIT_SEMITONE 0x18 | |||
| #define LV2_PORT_UNIT_BAR 1 | |||
| #define LV2_PORT_UNIT_BEAT 2 | |||
| #define LV2_PORT_UNIT_BPM 3 | |||
| #define LV2_PORT_UNIT_CENT 4 | |||
| #define LV2_PORT_UNIT_CM 5 | |||
| #define LV2_PORT_UNIT_COEF 6 | |||
| #define LV2_PORT_UNIT_DB 7 | |||
| #define LV2_PORT_UNIT_DEGREE 8 | |||
| #define LV2_PORT_UNIT_FRAME 9 | |||
| #define LV2_PORT_UNIT_HZ 10 | |||
| #define LV2_PORT_UNIT_INCH 11 | |||
| #define LV2_PORT_UNIT_KHZ 12 | |||
| #define LV2_PORT_UNIT_KM 13 | |||
| #define LV2_PORT_UNIT_M 14 | |||
| #define LV2_PORT_UNIT_MHZ 15 | |||
| #define LV2_PORT_UNIT_MIDINOTE 16 | |||
| #define LV2_PORT_UNIT_MILE 17 | |||
| #define LV2_PORT_UNIT_MIN 18 | |||
| #define LV2_PORT_UNIT_MM 19 | |||
| #define LV2_PORT_UNIT_MS 20 | |||
| #define LV2_PORT_UNIT_OCT 21 | |||
| #define LV2_PORT_UNIT_PC 22 | |||
| #define LV2_PORT_UNIT_S 23 | |||
| #define LV2_PORT_UNIT_SEMITONE 24 | |||
| #define LV2_IS_PORT_UNIT_BAR(x) ((x) == LV2_PORT_UNIT_BAR) | |||
| #define LV2_IS_PORT_UNIT_BEAT(x) ((x) == LV2_PORT_UNIT_BEAT) | |||
| @@ -167,19 +167,19 @@ typedef uint32_t LV2_Property; | |||
| #define LV2_IS_PORT_TRIGGER(x) ((x) & LV2_PORT_TRIGGER) | |||
| // Port Designation | |||
| #define LV2_PORT_DESIGNATION_CONTROL 0x1 | |||
| #define LV2_PORT_DESIGNATION_FREEWHEELING 0x2 | |||
| #define LV2_PORT_DESIGNATION_LATENCY 0x3 | |||
| #define LV2_PORT_DESIGNATION_SAMPLE_RATE 0x4 | |||
| #define LV2_PORT_DESIGNATION_TIME_BAR 0x5 | |||
| #define LV2_PORT_DESIGNATION_TIME_BAR_BEAT 0x6 | |||
| #define LV2_PORT_DESIGNATION_TIME_BEAT 0x7 | |||
| #define LV2_PORT_DESIGNATION_TIME_BEAT_UNIT 0x8 | |||
| #define LV2_PORT_DESIGNATION_TIME_BEATS_PER_BAR 0x9 | |||
| #define LV2_PORT_DESIGNATION_TIME_BEATS_PER_MINUTE 0xA | |||
| #define LV2_PORT_DESIGNATION_TIME_FRAME 0xB | |||
| #define LV2_PORT_DESIGNATION_TIME_FRAMES_PER_SECOND 0xC | |||
| #define LV2_PORT_DESIGNATION_TIME_SPEED 0xD | |||
| #define LV2_PORT_DESIGNATION_CONTROL 1 | |||
| #define LV2_PORT_DESIGNATION_FREEWHEELING 2 | |||
| #define LV2_PORT_DESIGNATION_LATENCY 3 | |||
| #define LV2_PORT_DESIGNATION_SAMPLE_RATE 4 | |||
| #define LV2_PORT_DESIGNATION_TIME_BAR 5 | |||
| #define LV2_PORT_DESIGNATION_TIME_BAR_BEAT 6 | |||
| #define LV2_PORT_DESIGNATION_TIME_BEAT 7 | |||
| #define LV2_PORT_DESIGNATION_TIME_BEAT_UNIT 8 | |||
| #define LV2_PORT_DESIGNATION_TIME_BEATS_PER_BAR 9 | |||
| #define LV2_PORT_DESIGNATION_TIME_BEATS_PER_MINUTE 10 | |||
| #define LV2_PORT_DESIGNATION_TIME_FRAME 11 | |||
| #define LV2_PORT_DESIGNATION_TIME_FRAMES_PER_SECOND 12 | |||
| #define LV2_PORT_DESIGNATION_TIME_SPEED 13 | |||
| #define LV2_IS_PORT_DESIGNATION_CONTROL(x) ((x) == LV2_PORT_DESIGNATION_CONTROL) | |||
| #define LV2_IS_PORT_DESIGNATION_FREEWHEELING(x) ((x) == LV2_PORT_DESIGNATION_FREEWHEELING) | |||
| @@ -197,22 +197,22 @@ typedef uint32_t LV2_Property; | |||
| #define LV2_IS_PORT_DESIGNATION_TIME(x) ((x) >= LV2_PORT_DESIGNATION_TIME_BAR && (x) <= LV2_PORT_DESIGNATION_TIME_SPEED) | |||
| // Feature Types | |||
| #define LV2_FEATURE_OPTIONAL 0x1 | |||
| #define LV2_FEATURE_REQUIRED 0x2 | |||
| #define LV2_FEATURE_OPTIONAL 1 | |||
| #define LV2_FEATURE_REQUIRED 2 | |||
| #define LV2_IS_FEATURE_OPTIONAL(x) ((x) == LV2_FEATURE_OPTIONAL) | |||
| #define LV2_IS_FEATURE_REQUIRED(x) ((x) == LV2_FEATURE_REQUIRED) | |||
| // UI Types | |||
| #define LV2_UI_GTK2 0x1 | |||
| #define LV2_UI_GTK3 0x2 | |||
| #define LV2_UI_QT4 0x3 | |||
| #define LV2_UI_QT5 0x4 | |||
| #define LV2_UI_COCOA 0x5 | |||
| #define LV2_UI_WINDOWS 0x6 | |||
| #define LV2_UI_X11 0x7 | |||
| #define LV2_UI_EXTERNAL 0x8 | |||
| #define LV2_UI_OLD_EXTERNAL 0x9 | |||
| #define LV2_UI_GTK2 1 | |||
| #define LV2_UI_GTK3 2 | |||
| #define LV2_UI_QT4 3 | |||
| #define LV2_UI_QT5 4 | |||
| #define LV2_UI_COCOA 5 | |||
| #define LV2_UI_WINDOWS 6 | |||
| #define LV2_UI_X11 7 | |||
| #define LV2_UI_EXTERNAL 8 | |||
| #define LV2_UI_OLD_EXTERNAL 9 | |||
| #define LV2_IS_UI_GTK2(x) ((x) == LV2_UI_GTK2) | |||
| #define LV2_IS_UI_GTK3(x) ((x) == LV2_UI_GTK3) | |||
| @@ -299,10 +299,7 @@ struct LV2_RDF_PortMidiMap { | |||
| : Type(0), | |||
| Number(0) {} | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| LV2_RDF_PortMidiMap(LV2_RDF_PortMidiMap&) = delete; | |||
| LV2_RDF_PortMidiMap(const LV2_RDF_PortMidiMap&) = delete; | |||
| #endif | |||
| CARLA_LEAK_DETECTOR(LV2_RDF_PortMidiMap) | |||
| }; | |||
| // Port Points | |||
| @@ -318,10 +315,7 @@ struct LV2_RDF_PortPoints { | |||
| Minimum(0.0f), | |||
| Maximum(1.0f) {} | |||
| #if 0 // def CARLA_PROPER_CPP11_SUPPORT FIXME! | |||
| LV2_RDF_PortPoints(LV2_RDF_PortPoints&) = delete; | |||
| LV2_RDF_PortPoints(const LV2_RDF_PortPoints&) = delete; | |||
| #endif | |||
| CARLA_LEAK_DETECTOR(LV2_RDF_PortPoints) | |||
| }; | |||
| // Port Unit | |||
| @@ -342,17 +336,23 @@ struct LV2_RDF_PortUnit { | |||
| ~LV2_RDF_PortUnit() | |||
| { | |||
| if (Name != nullptr) | |||
| { | |||
| delete[] Name; | |||
| Name = nullptr; | |||
| } | |||
| if (Render != nullptr) | |||
| { | |||
| delete[] Render; | |||
| Render = nullptr; | |||
| } | |||
| if (Symbol != nullptr) | |||
| { | |||
| delete[] Symbol; | |||
| Symbol = nullptr; | |||
| } | |||
| } | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| LV2_RDF_PortUnit(LV2_RDF_PortUnit&) = delete; | |||
| LV2_RDF_PortUnit(const LV2_RDF_PortUnit&) = delete; | |||
| #endif | |||
| CARLA_DECLARE_NON_COPY_STRUCT_WITH_LEAK_DETECTOR(LV2_RDF_PortUnit) | |||
| }; | |||
| // Port Scale Point | |||
| @@ -367,13 +367,13 @@ struct LV2_RDF_PortScalePoint { | |||
| ~LV2_RDF_PortScalePoint() | |||
| { | |||
| if (Label != nullptr) | |||
| { | |||
| delete[] Label; | |||
| Label = nullptr; | |||
| } | |||
| } | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| LV2_RDF_PortScalePoint(LV2_RDF_PortScalePoint&) = delete; | |||
| LV2_RDF_PortScalePoint(const LV2_RDF_PortScalePoint&) = delete; | |||
| #endif | |||
| CARLA_DECLARE_NON_COPY_STRUCT_WITH_LEAK_DETECTOR(LV2_RDF_PortScalePoint) | |||
| }; | |||
| // Port | |||
| @@ -403,17 +403,23 @@ struct LV2_RDF_Port { | |||
| ~LV2_RDF_Port() | |||
| { | |||
| if (Name != nullptr) | |||
| { | |||
| delete[] Name; | |||
| Name = nullptr; | |||
| } | |||
| if (Symbol != nullptr) | |||
| { | |||
| delete[] Symbol; | |||
| Symbol = nullptr; | |||
| } | |||
| if (ScalePoints != nullptr) | |||
| { | |||
| delete[] ScalePoints; | |||
| ScalePoints = nullptr; | |||
| } | |||
| } | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| LV2_RDF_Port(LV2_RDF_Port&) = delete; | |||
| LV2_RDF_Port(const LV2_RDF_Port&) = delete; | |||
| #endif | |||
| CARLA_DECLARE_NON_COPY_STRUCT_WITH_LEAK_DETECTOR(LV2_RDF_Port) | |||
| }; | |||
| // Preset | |||
| @@ -428,15 +434,18 @@ struct LV2_RDF_Preset { | |||
| ~LV2_RDF_Preset() | |||
| { | |||
| if (URI != nullptr) | |||
| { | |||
| delete[] URI; | |||
| URI = nullptr; | |||
| } | |||
| if (Label != nullptr) | |||
| { | |||
| delete[] Label; | |||
| Label = nullptr; | |||
| } | |||
| } | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| LV2_RDF_Preset(LV2_RDF_Preset&) = delete; | |||
| LV2_RDF_Preset(const LV2_RDF_Preset&) = delete; | |||
| #endif | |||
| CARLA_DECLARE_NON_COPY_STRUCT_WITH_LEAK_DETECTOR(LV2_RDF_Preset) | |||
| }; | |||
| // Feature | |||
| @@ -451,13 +460,13 @@ struct LV2_RDF_Feature { | |||
| ~LV2_RDF_Feature() | |||
| { | |||
| if (URI != nullptr) | |||
| { | |||
| delete[] URI; | |||
| URI = nullptr; | |||
| } | |||
| } | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| LV2_RDF_Feature(LV2_RDF_Feature&) = delete; | |||
| LV2_RDF_Feature(const LV2_RDF_Feature&) = delete; | |||
| #endif | |||
| CARLA_DECLARE_NON_COPY_STRUCT_WITH_LEAK_DETECTOR(LV2_RDF_Feature) | |||
| }; | |||
| // UI | |||
| @@ -486,21 +495,33 @@ struct LV2_RDF_UI { | |||
| ~LV2_RDF_UI() | |||
| { | |||
| if (URI != nullptr) | |||
| { | |||
| delete[] URI; | |||
| URI = nullptr; | |||
| } | |||
| if (Binary != nullptr) | |||
| { | |||
| delete[] Binary; | |||
| Binary = nullptr; | |||
| } | |||
| if (Bundle != nullptr) | |||
| { | |||
| delete[] Bundle; | |||
| Bundle = nullptr; | |||
| } | |||
| if (Features != nullptr) | |||
| { | |||
| delete[] Features; | |||
| Features = nullptr; | |||
| } | |||
| if (Extensions != nullptr) | |||
| { | |||
| delete[] Extensions; | |||
| Extensions = nullptr; | |||
| } | |||
| } | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| LV2_RDF_UI(LV2_RDF_UI&) = delete; | |||
| LV2_RDF_UI(const LV2_RDF_UI&) = delete; | |||
| #endif | |||
| CARLA_DECLARE_NON_COPY_STRUCT_WITH_LEAK_DETECTOR(LV2_RDF_UI) | |||
| }; | |||
| // Plugin | |||
| @@ -561,33 +582,63 @@ struct LV2_RDF_Descriptor { | |||
| ~LV2_RDF_Descriptor() | |||
| { | |||
| if (URI != nullptr) | |||
| { | |||
| delete[] URI; | |||
| URI = nullptr; | |||
| } | |||
| if (Name != nullptr) | |||
| { | |||
| delete[] Name; | |||
| Name = nullptr; | |||
| } | |||
| if (Author != nullptr) | |||
| { | |||
| delete[] Author; | |||
| Author = nullptr; | |||
| } | |||
| if (License != nullptr) | |||
| { | |||
| delete[] License; | |||
| License = nullptr; | |||
| } | |||
| if (Binary != nullptr) | |||
| { | |||
| delete[] Binary; | |||
| Binary = nullptr; | |||
| } | |||
| if (Bundle != nullptr) | |||
| { | |||
| delete[] Bundle; | |||
| Bundle = nullptr; | |||
| } | |||
| if (Ports != nullptr) | |||
| { | |||
| delete[] Ports; | |||
| Ports = nullptr; | |||
| } | |||
| if (Presets != nullptr) | |||
| { | |||
| delete[] Presets; | |||
| Presets = nullptr; | |||
| } | |||
| if (Features != nullptr) | |||
| { | |||
| delete[] Features; | |||
| Features = nullptr; | |||
| } | |||
| if (Extensions != nullptr) | |||
| { | |||
| delete[] Extensions; | |||
| Extensions = nullptr; | |||
| } | |||
| if (UIs != nullptr) | |||
| { | |||
| delete[] UIs; | |||
| UIs = nullptr; | |||
| } | |||
| } | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| LV2_RDF_Descriptor(LV2_RDF_Descriptor&) = delete; | |||
| LV2_RDF_Descriptor(const LV2_RDF_Descriptor&) = delete; | |||
| #endif | |||
| CARLA_DECLARE_NON_COPY_STRUCT_WITH_LEAK_DETECTOR(LV2_RDF_Descriptor) | |||
| }; | |||
| #endif // LV2_RDF_INCLUDED | |||
| @@ -66,3 +66,7 @@ clean: | |||
| $(MAKE) clean -C rtmempool | |||
| $(MAKE) clean -C ../theme | |||
| $(MAKE) clean -C ../widgets | |||
| # -------------------------------------------------------------- | |||
| .PHONY: lilv rtmempool | |||
| @@ -33,15 +33,10 @@ DigitalPeakMeter::DigitalPeakMeter(QWidget* parent) | |||
| fColorBase(93, 231, 61), | |||
| fColorBaseAlt(15, 110, 15, 100), | |||
| fChannelsData(nullptr), | |||
| fLastValueData(nullptr), | |||
| fPaintTimer(this) | |||
| fLastValueData(nullptr) | |||
| { | |||
| setChannels(0); | |||
| setColor(GREEN); | |||
| fPaintTimer.setInterval(60); | |||
| connect(&fPaintTimer, SIGNAL(timeout()), this, SLOT(update())); | |||
| fPaintTimer.start(); | |||
| } | |||
| DigitalPeakMeter::~DigitalPeakMeter() | |||
| @@ -60,12 +55,23 @@ void DigitalPeakMeter::displayMeter(int meter, float level) | |||
| if (meter <= 0 || meter > fChannels || fChannelsData == nullptr) | |||
| return qCritical("DigitalPeakMeter::displayMeter(%i, %f) - invalid meter number", meter, level); | |||
| if (level < 0.0f) | |||
| level = -level; | |||
| else if (level > 1.0f) | |||
| int i = meter - 1; | |||
| if (fSmoothMultiplier > 0) | |||
| level = (fLastValueData[i] * fSmoothMultiplier + level) / float(fSmoothMultiplier + 1); | |||
| if (level < 0.001f) | |||
| level = 0.0f; | |||
| else if (level > 0.999f) | |||
| level = 1.0f; | |||
| fChannelsData[meter-1] = level; | |||
| if (fChannelsData[i] != level) | |||
| { | |||
| fChannelsData[i] = level; | |||
| update(); | |||
| } | |||
| fLastValueData[i] = level; | |||
| } | |||
| void DigitalPeakMeter::setChannels(int channels) | |||
| @@ -146,15 +152,6 @@ void DigitalPeakMeter::setOrientation(Orientation orientation) | |||
| updateSizes(); | |||
| } | |||
| void DigitalPeakMeter::setRefreshRate(int rate) | |||
| { | |||
| Q_ASSERT(rate > 0); | |||
| fPaintTimer.stop(); | |||
| fPaintTimer.setInterval(rate); | |||
| fPaintTimer.start(); | |||
| } | |||
| void DigitalPeakMeter::setSmoothRelease(int value) | |||
| { | |||
| Q_ASSERT(value >= 0 && value <= 5); | |||
| @@ -169,7 +166,7 @@ void DigitalPeakMeter::setSmoothRelease(int value) | |||
| QSize DigitalPeakMeter::minimumSizeHint() const | |||
| { | |||
| return QSize(30, 30); | |||
| return QSize(10, 10); | |||
| } | |||
| QSize DigitalPeakMeter::sizeHint() const | |||
| @@ -216,9 +213,6 @@ void DigitalPeakMeter::paintEvent(QPaintEvent* event) | |||
| { | |||
| float value, level = fChannelsData[i]; | |||
| if (level == fLastValueData[i]) | |||
| continue; | |||
| if (fOrientation == HORIZONTAL) | |||
| value = level * float(fWidth); | |||
| else if (fOrientation == VERTICAL) | |||
| @@ -226,18 +220,12 @@ void DigitalPeakMeter::paintEvent(QPaintEvent* event) | |||
| else | |||
| value = 0.0f; | |||
| if (value < 0.0f) | |||
| value = 0.0f; | |||
| else if (fSmoothMultiplier > 0) | |||
| value = (fLastValueData[i] * float(fSmoothMultiplier) + value) / float(fSmoothMultiplier + 1); | |||
| if (fOrientation == HORIZONTAL) | |||
| painter.drawRect(0, meterX, int(value), fSizeMeter); | |||
| else if (fOrientation == VERTICAL) | |||
| painter.drawRect(meterX, int(value), fSizeMeter, fHeight); | |||
| meterX += fSizeMeter; | |||
| fLastValueData[i] = value; | |||
| } | |||
| painter.setBrush(Qt::black); | |||
| @@ -42,23 +42,22 @@ public: | |||
| }; | |||
| DigitalPeakMeter(QWidget* parent); | |||
| ~DigitalPeakMeter(); | |||
| ~DigitalPeakMeter() override; | |||
| void displayMeter(int meter, float level); | |||
| void setChannels(int channels); | |||
| void setColor(Color color); | |||
| void setOrientation(Orientation orientation); | |||
| void setRefreshRate(int rate); | |||
| void setSmoothRelease(int value); | |||
| QSize minimumSizeHint() const; | |||
| QSize sizeHint() const; | |||
| QSize minimumSizeHint() const override; | |||
| QSize sizeHint() const override; | |||
| protected: | |||
| void updateSizes(); | |||
| void paintEvent(QPaintEvent* event); | |||
| void resizeEvent(QResizeEvent* event); | |||
| void paintEvent(QPaintEvent* event) override; | |||
| void resizeEvent(QResizeEvent* event) override; | |||
| private: | |||
| int fChannels; | |||
| @@ -75,8 +74,6 @@ private: | |||
| float* fChannelsData; | |||
| float* fLastValueData; | |||
| QTimer fPaintTimer; | |||
| CARLA_LEAK_DETECTOR(DigitalPeakMeter) | |||
| }; | |||