Browse Source

Merge branch 'master' into stoat-fixes

tags/v1.9.9
falkTX 7 years ago
parent
commit
7589fa94e0
48 changed files with 1264 additions and 788 deletions
  1. +3
    -3
      README.md
  2. +3
    -3
      data/linux/README
  3. +11
    -8
      data/linux/build-all.sh
  4. +52
    -0
      data/linux/build-deps.sh
  5. +2
    -0
      data/linux/common.env
  6. +3
    -3
      data/macos/README
  7. +112
    -46
      data/macos/build-deps.sh
  8. +4
    -3
      data/macos/build.sh
  9. +3
    -0
      data/macos/common.env
  10. +4
    -3
      data/macos/env.sh
  11. +71
    -0
      data/macos/patches/qt55-newosx-fix.patch
  12. +3
    -3
      data/windows/README.txt
  13. +58
    -1
      data/windows/build-deps.sh
  14. +2
    -2
      data/windows/build-win.sh
  15. +2
    -0
      data/windows/common.env
  16. +2
    -0
      data/windows/create-wineprefixes.sh
  17. +1
    -13
      doc/Carla-TODO
  18. +35
    -9
      resources/ui/carla_settings.ui
  19. +466
    -515
      source/backend/CarlaStandalone.cpp
  20. +2
    -1
      source/backend/engine/CarlaEngineNative.cpp
  21. +15
    -4
      source/backend/engine/CarlaEngineRtAudio.cpp
  22. +7
    -1
      source/backend/plugin/CarlaPlugin.cpp
  23. +4
    -0
      source/backend/plugin/CarlaPluginBridge.cpp
  24. +4
    -0
      source/backend/plugin/CarlaPluginDSSI.cpp
  25. +6
    -1
      source/backend/plugin/CarlaPluginInternal.cpp
  26. +4
    -1
      source/backend/plugin/CarlaPluginInternal.hpp
  27. +3
    -1
      source/backend/plugin/CarlaPluginJack.cpp
  28. +4
    -0
      source/backend/plugin/CarlaPluginLV2.cpp
  29. +4
    -0
      source/backend/plugin/CarlaPluginNative.cpp
  30. +3
    -3
      source/bridges-ui/CarlaBridgeToolkitNative.cpp
  31. +3
    -0
      source/carla_host.py
  32. +21
    -4
      source/carla_settings.py
  33. +4
    -5
      source/libjack/Makefile
  34. +67
    -36
      source/modules/dgl/src/Window.cpp
  35. +1
    -1
      source/modules/rtmidi/RtMidi.cpp
  36. +1
    -2
      source/native-plugins/_all.all.c
  37. +1
    -2
      source/native-plugins/_all.base.c
  38. +1
    -2
      source/native-plugins/_data.all.cpp
  39. +1
    -2
      source/native-plugins/_data.base.cpp
  40. +5
    -1
      source/native-plugins/external/Makefile
  41. +7
    -0
      source/native-plugins/external/Makefile.mk
  42. +2
    -2
      source/native-plugins/external/_all.c
  43. +3
    -3
      source/native-plugins/external/_data.cpp
  44. +114
    -81
      source/native-plugins/zynaddsubfx-src.cpp
  45. +4
    -4
      source/native-plugins/zynaddsubfx/rtosc/pretty-format.c
  46. +6
    -0
      source/plugin/Makefile
  47. +127
    -18
      source/utils/CarlaPluginUI.cpp
  48. +3
    -1
      source/utils/CarlaPluginUI.hpp

+ 3
- 3
README.md View File

@@ -14,9 +14,9 @@ Features
* GIG, SF2 and SFZ sound banks * GIG, SF2 and SFZ sound banks
* Internal audio and midi file player * Internal audio and midi file player
* Automation of plugin parameters via MIDI CC * Automation of plugin parameters via MIDI CC
* Full OSC control
* Rack and Patchbay engine modes, plus Single and Multi-Client if using JACK
* Native audio drivers (ALSA, DirectSound, CoreAudio) and low-latency (ASIO and JACK)
* Remote control over OSC
* Rack and Patchbay processing modes, plus Single and Multi-Client if using JACK
* Native audio drivers (ALSA, DirectSound, CoreAudio, etc) and JACK


In experimental phase / work in progress: In experimental phase / work in progress:
* Export any Carla loadable plugin or sound bank as an LV2 plugin * Export any Carla loadable plugin or sound bank as an LV2 plugin


+ 3
- 3
data/linux/README View File

@@ -13,9 +13,9 @@ Features
* GIG, SF2 and SFZ sound banks * GIG, SF2 and SFZ sound banks
* Internal audio and midi file player * Internal audio and midi file player
* Automation of plugin parameters via MIDI CC * Automation of plugin parameters via MIDI CC
* Full OSC control
* Rack and Patchbay engine modes, plus Single and Multi-Client if using JACK
* Native audio drivers (ALSA, DirectSound, CoreAudio) and low-latency (ASIO and JACK)
* Remote control over OSC
* Rack and Patchbay processing modes, plus Single and Multi-Client if using JACK
* Native audio drivers (ALSA, DirectSound, CoreAudio, etc) and JACK


In experimental phase / work in progress: In experimental phase / work in progress:
* Export any Carla loadable plugin or sound bank as an LV2 plugin * Export any Carla loadable plugin or sound bank as an LV2 plugin


+ 11
- 8
data/linux/build-all.sh View File

@@ -25,6 +25,7 @@ source common.env


CHROOT_CARLA_DIR="/tmp/carla-src" CHROOT_CARLA_DIR="/tmp/carla-src"
PKG_FOLDER="Carla_2.0-beta6-linux" PKG_FOLDER="Carla_2.0-beta6-linux"
export MAKE_ARGS="${MAKE_ARGS} SKIP_ZYN_SYNTH=true"


# --------------------------------------------------------------------------------------------------------------------- # ---------------------------------------------------------------------------------------------------------------------
# function to remove old stuff # function to remove old stuff
@@ -95,6 +96,7 @@ if [ ! -f /tmp/setup-repo-packages ]; then
apt-get install -y build-essential libglib2.0-dev uuid-dev git-core apt-get install -y build-essential libglib2.0-dev uuid-dev git-core
apt-get install -y autoconf libtool apt-get install -y autoconf libtool
apt-get install -y bison flex libxml-libxml-perl libxml-parser-perl apt-get install -y bison flex libxml-libxml-perl libxml-parser-perl
apt-get install -y libgl1-mesa-dev libglu1-mesa-dev
apt-get clean apt-get clean
rm /usr/lib/libuuid.so rm /usr/lib/libuuid.so
touch /tmp/setup-repo-packages touch /tmp/setup-repo-packages
@@ -175,6 +177,7 @@ chroot_build_carla()
{ {


CHROOT_DIR=${TARGETDIR}/chroot${ARCH} CHROOT_DIR=${TARGETDIR}/chroot${ARCH}
CHROOT_TARGET_DIR=/root/builds


cat <<EOF | sudo chroot ${CHROOT_DIR} cat <<EOF | sudo chroot ${CHROOT_DIR}
export HOME=/root export HOME=/root
@@ -184,21 +187,21 @@ unset LC_TIME


set -e set -e


export CFLAGS="-I${TARGETDIR}/carla${ARCH}/include"
export CFLAGS="-I${CHROOT_TARGET_DIR}/carla${ARCH}/include"
export CXXFLAGS=${CFLAGS} export CXXFLAGS=${CFLAGS}
export LDFLAGS="-L${TARGETDIR}/carla${ARCH}/lib"
export PKG_CONFIG_PATH=${TARGETDIR}/carla${ARCH}/lib/pkgconfig
export LDFLAGS="-L${CHROOT_TARGET_DIR}/carla${ARCH}/lib"
export PKG_CONFIG_PATH=${CHROOT_TARGET_DIR}/carla${ARCH}/lib/pkgconfig
export RCC_QT4=/usr/bin/rcc export RCC_QT4=/usr/bin/rcc
export LINUX="true" export LINUX="true"


cd ${CHROOT_CARLA_DIR} cd ${CHROOT_CARLA_DIR}
make EXTERNAL_PLUGINS=false ${MAKE_ARGS}
make ${MAKE_ARGS}


if [ x"${ARCH}" != x"32" ]; then if [ x"${ARCH}" != x"32" ]; then
export CFLAGS="-I${TARGETDIR}/carla32/include -m32"
export CFLAGS="-I${CHROOT_TARGET_DIR}/carla32/include -m32"
export CXXFLAGS=${CFLAGS} export CXXFLAGS=${CFLAGS}
export LDFLAGS="-L${TARGETDIR}/carla32/lib -m32"
export PKG_CONFIG_PATH=${TARGETDIR}/carla32/lib/pkgconfig
export LDFLAGS="-L${CHROOT_TARGET_DIR}/carla32/lib -m32"
export PKG_CONFIG_PATH=${CHROOT_TARGET_DIR}/carla32/lib/pkgconfig
make posix32 ${MAKE_ARGS} make posix32 ${MAKE_ARGS}
fi fi


@@ -292,7 +295,7 @@ unset LC_TIME


set -e set -e


export PKG_CONFIG_PATH=${TARGETDIR}/carla${ARCH}/lib/pkgconfig
export PKG_CONFIG_PATH=${CHROOT_TARGET_DIR}/carla${ARCH}/lib/pkgconfig
export RCC_QT4=/usr/bin/rcc export RCC_QT4=/usr/bin/rcc
export LINUX="true" export LINUX="true"




+ 52
- 0
data/linux/build-deps.sh View File

@@ -301,6 +301,58 @@ if [ ! -f fluidsynth-${FLUIDSYNTH_VERSION}/build-done ]; then
cd .. cd ..
fi fi


# ---------------------------------------------------------------------------------------------------------------------
# mxml

if [ ! -d mxml-${MXML_VERSION} ]; then
wget --no-check-certificate https://github.com/michaelrsweet/mxml/releases/download/v${MXML_VERSION}/mxml-${MXML_VERSION}.tar.gz -O mxml-${MXML_VERSION}.tar.gz
mkdir mxml-${MXML_VERSION}
cd mxml-${MXML_VERSION}
tar -xf ../mxml-${MXML_VERSION}.tar.gz
cd ..
fi

if [ ! -f mxml-${MXML_VERSION}/build-done ]; then
cd mxml-${MXML_VERSION}
./configure --disable-shared --prefix=$PREFIX
make libmxml.a
cp *.a $PREFIX/lib/
cp *.pc $PREFIX/lib/pkgconfig/
cp mxml.h $PREFIX/include/
touch build-done
cd ..
fi

# ---------------------------------------------------------------------------------------------------------------------
# fftw3 (needs to be last as it modifies C[XX]FLAGS)

if [ ! -d fftw-${FFTW3_VERSION} ]; then
wget --no-check-certificate http://www.fftw.org/fftw-${FFTW3_VERSION}.tar.gz
tar -xf fftw-${FFTW3_VERSION}.tar.gz
fi

if [ ! -f fftw-${FFTW3_VERSION}/build-done ]; then
export CFLAGS="${CFLAGS} -ffast-math"
export CXXFLAGS="${CXXFLAGS} -ffast-math"
cd fftw-${FFTW3_VERSION}
./configure --enable-static --disable-shared --prefix=${PREFIX} \
--enable-sse2 \
--disable-debug --disable-alloca --disable-fortran \
--with-our-malloc
make
make install
make clean
./configure --enable-static --disable-shared --prefix=${PREFIX} \
--enable-sse2 --enable-sse --enable-single \
--disable-debug --disable-alloca --disable-fortran \
--with-our-malloc
make
make install
make clean
touch build-done
cd ..
fi

} }


# --------------------------------------------------------------------------------------------------------------------- # ---------------------------------------------------------------------------------------------------------------------


+ 2
- 0
data/linux/common.env View File

@@ -11,6 +11,8 @@ LIBSNDFILE_VERSION=1.0.28
LIBGIG_VERSION=4.0.0 LIBGIG_VERSION=4.0.0
LINUXSAMPLER_VERSION=2.0.0 LINUXSAMPLER_VERSION=2.0.0
FLUIDSYNTH_VERSION=1.1.6 FLUIDSYNTH_VERSION=1.1.6
MXML_VERSION=2.11
FFTW3_VERSION=3.3.7


MAKE_ARGS="-j 8" MAKE_ARGS="-j 8"
TARGETDIR=$HOME/builds TARGETDIR=$HOME/builds

+ 3
- 3
data/macos/README View File

@@ -13,9 +13,9 @@ Features
* GIG, SF2 and SFZ sound banks * GIG, SF2 and SFZ sound banks
* Internal audio and midi file player * Internal audio and midi file player
* Automation of plugin parameters via MIDI CC * Automation of plugin parameters via MIDI CC
* Full OSC control
* Rack and Patchbay engine modes, plus Single and Multi-Client if using JACK
* Native audio drivers (ALSA, DirectSound, CoreAudio) and low-latency (ASIO and JACK)
* Remote control over OSC
* Rack and Patchbay processing modes, plus Single and Multi-Client if using JACK
* Native audio drivers (ALSA, DirectSound, CoreAudio, etc) and JACK


In experimental phase / work in progress: In experimental phase / work in progress:
* Export any Carla loadable plugin or sound bank as an LV2 plugin * Export any Carla loadable plugin or sound bank as an LV2 plugin


+ 112
- 46
data/macos/build-deps.sh View File

@@ -4,12 +4,12 @@
# automake, autoconf, bison, flex, libtool # automake, autoconf, bison, flex, libtool
# p5-libxml-perl, p5-xml-libxml, p7zip, pkgconfig # p5-libxml-perl, p5-xml-libxml, p7zip, pkgconfig


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# stop on error # stop on error


set -e set -e


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# cd to correct path # cd to correct path


if [ -f Makefile ]; then if [ -f Makefile ]; then
@@ -21,7 +21,7 @@ fi


source common.env source common.env


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# function to remove old stuff # function to remove old stuff


cleanup() cleanup()
@@ -59,7 +59,7 @@ exit 0


} }


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# function to build base libs # function to build base libs


build_base() build_base()
@@ -79,7 +79,7 @@ export CXXFLAGS="${CFLAGS} -fvisibility-inlines-hidden"
export LDFLAGS="-fdata-sections -ffunction-sections -Wl,-dead_strip -Wl,-dead_strip_dylibs" export LDFLAGS="-fdata-sections -ffunction-sections -Wl,-dead_strip -Wl,-dead_strip_dylibs"
export LDFLAGS="${LDFLAGS} -L${PREFIX}/lib -m${ARCH}" export LDFLAGS="${LDFLAGS} -L${PREFIX}/lib -m${ARCH}"


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# pkgconfig # pkgconfig


if [ ! -d pkg-config-${PKG_CONFIG_VERSION} ]; then if [ ! -d pkg-config-${PKG_CONFIG_VERSION} ]; then
@@ -97,7 +97,7 @@ if [ ! -f pkg-config-${PKG_CONFIG_VERSION}_$ARCH/build-done ]; then
cd .. cd ..
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# liblo # liblo


if [ ! -d liblo-${LIBLO_VERSION} ]; then if [ ! -d liblo-${LIBLO_VERSION} ]; then
@@ -117,13 +117,30 @@ if [ ! -f liblo-${LIBLO_VERSION}_$ARCH/build-done ]; then
cd .. cd ..
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------


if [ x"${ARCH}" = x"32" ]; then if [ x"${ARCH}" = x"32" ]; then
return return
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# zlib

if [ ! -d zlib-${ZLIB_VERSION} ]; then
curl -L https://github.com/madler/zlib/archive/v${ZLIB_VERSION}.tar.gz -o zlib-${ZLIB_VERSION}.tar.gz
tar -xf zlib-${ZLIB_VERSION}.tar.gz
fi

if [ ! -f zlib-${ZLIB_VERSION}/build-done ]; then
cd zlib-${ZLIB_VERSION}
./configure --static --prefix=${PREFIX}
make
make install
touch build-done
cd ..
fi

# ---------------------------------------------------------------------------------------------------------------------
# file/magic # file/magic


if [ ! -d file-${FILE_VERSION} ]; then if [ ! -d file-${FILE_VERSION} ]; then
@@ -140,7 +157,7 @@ if [ ! -f file-${FILE_VERSION}/build-done ]; then
cd .. cd ..
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# libogg # libogg


if [ ! -d libogg-${LIBOGG_VERSION} ]; then if [ ! -d libogg-${LIBOGG_VERSION} ]; then
@@ -157,7 +174,7 @@ if [ ! -f libogg-${LIBOGG_VERSION}/build-done ]; then
cd .. cd ..
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# libvorbis # libvorbis


if [ ! -d libvorbis-${LIBVORBIS_VERSION} ]; then if [ ! -d libvorbis-${LIBVORBIS_VERSION} ]; then
@@ -174,7 +191,7 @@ if [ ! -f libvorbis-${LIBVORBIS_VERSION}/build-done ]; then
cd .. cd ..
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# flac # flac


if [ ! -d flac-${FLAC_VERSION} ]; then if [ ! -d flac-${FLAC_VERSION} ]; then
@@ -194,7 +211,7 @@ if [ ! -f flac-${FLAC_VERSION}/build-done ]; then
cd .. cd ..
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# libsndfile # libsndfile


if [ ! -d libsndfile-${LIBSNDFILE_VERSION} ]; then if [ ! -d libsndfile-${LIBSNDFILE_VERSION} ]; then
@@ -212,7 +229,7 @@ if [ ! -f libsndfile-${LIBSNDFILE_VERSION}/build-done ]; then
cd .. cd ..
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# libgig # libgig


if [ ! -d libgig-${LIBGIG_VERSION} ]; then if [ ! -d libgig-${LIBGIG_VERSION} ]; then
@@ -233,7 +250,7 @@ if [ ! -f libgig-${LIBGIG_VERSION}/build-done ]; then
cd .. cd ..
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# linuxsampler # linuxsampler


if [ ! -d linuxsampler-${LINUXSAMPLER_VERSION} ]; then if [ ! -d linuxsampler-${LINUXSAMPLER_VERSION} ]; then
@@ -249,8 +266,6 @@ if [ ! -f linuxsampler-${LINUXSAMPLER_VERSION}/build-done ]; then
sed -i -e "s|HAVE_AU|HAVE_VST|" src/hostplugins/Makefile.am sed -i -e "s|HAVE_AU|HAVE_VST|" src/hostplugins/Makefile.am
touch patched touch patched
fi fi
#rm -f configure
#env PATH=/opt/local/bin:$PATH make -f Makefile.svn configure
env PATH=/opt/local/bin:$PATH /opt/local/bin/aclocal -I /opt/local/share/aclocal env PATH=/opt/local/bin:$PATH /opt/local/bin/aclocal -I /opt/local/share/aclocal
env PATH=/opt/local/bin:$PATH /opt/local/bin/glibtoolize --force --copy env PATH=/opt/local/bin:$PATH /opt/local/bin/glibtoolize --force --copy
env PATH=/opt/local/bin:$PATH /opt/local/bin/autoheader env PATH=/opt/local/bin:$PATH /opt/local/bin/autoheader
@@ -272,7 +287,7 @@ if [ ! -f linuxsampler-${LINUXSAMPLER_VERSION}/build-done ]; then
cd .. cd ..
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# libffi # libffi


if [ ! -d libffi-${LIBFFI_VERSION} ]; then if [ ! -d libffi-${LIBFFI_VERSION} ]; then
@@ -282,14 +297,14 @@ fi


if [ ! -f libffi-${LIBFFI_VERSION}/build-done ]; then if [ ! -f libffi-${LIBFFI_VERSION}/build-done ]; then
cd libffi-${LIBFFI_VERSION} cd libffi-${LIBFFI_VERSION}
./configure --enable-static --disable-shared --prefix=$PREFIX
./configure --enable-static --disable-shared --prefix=${PREFIX}
make ${MAKE_ARGS} make ${MAKE_ARGS}
make install make install
touch build-done touch build-done
cd .. cd ..
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# gettext # gettext


if [ ! -d gettext-${GETTEXT_VERSION} ]; then if [ ! -d gettext-${GETTEXT_VERSION} ]; then
@@ -306,7 +321,7 @@ if [ ! -f gettext-${GETTEXT_VERSION}/build-done ]; then
cd .. cd ..
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# glib # glib


if [ ! -d glib-${GLIB_VERSION} ]; then if [ ! -d glib-${GLIB_VERSION} ]; then
@@ -323,13 +338,13 @@ if [ ! -f glib-${GLIB_VERSION}/build-done ]; then
env PATH=/opt/local/bin:$PATH make ${MAKE_ARGS} || true env PATH=/opt/local/bin:$PATH make ${MAKE_ARGS} || true
touch gio/gio-querymodules gio/glib-compile-resources gio/gsettings gio/gdbus gio/gresource gio/gapplication touch gio/gio-querymodules gio/glib-compile-resources gio/gsettings gio/gdbus gio/gresource gio/gapplication
env PATH=/opt/local/bin:$PATH make ${MAKE_ARGS} env PATH=/opt/local/bin:$PATH make ${MAKE_ARGS}
touch $PREFIX/bin/gtester-report
touch ${PREFIX}/bin/gtester-report
env PATH=/opt/local/bin:$PATH make install env PATH=/opt/local/bin:$PATH make install
touch build-done touch build-done
cd .. cd ..
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# fluidsynth # fluidsynth


if [ ! -d fluidsynth-${FLUIDSYNTH_VERSION} ]; then if [ ! -d fluidsynth-${FLUIDSYNTH_VERSION} ]; then
@@ -353,9 +368,55 @@ if [ ! -f fluidsynth-${FLUIDSYNTH_VERSION}/build-done ]; then
cd .. cd ..
fi fi


# ---------------------------------------------------------------------------------------------------------------------
# mxml

if [ ! -d mxml-${MXML_VERSION} ]; then
curl -L https://github.com/michaelrsweet/mxml/releases/download/v${MXML_VERSION}/mxml-${MXML_VERSION}.tar.gz -o mxml-${MXML_VERSION}.tar.gz
mkdir mxml-${MXML_VERSION}
cd mxml-${MXML_VERSION}
tar -xf ../mxml-${MXML_VERSION}.tar.gz
cd ..
fi

if [ ! -f mxml-${MXML_VERSION}/build-done ]; then
cd mxml-${MXML_VERSION}
./configure --disable-shared --prefix=${PREFIX}
make libmxml.a
cp *.a ${PREFIX}/lib/
cp *.pc ${PREFIX}/lib/pkgconfig/
cp mxml.h ${PREFIX}/include/
touch build-done
cd ..
fi

# ---------------------------------------------------------------------------------------------------------------------
# fftw3 (needs to be last as it modifies C[XX]FLAGS)

if [ ! -d fftw-${FFTW3_VERSION} ]; then
curl -O http://www.fftw.org/fftw-${FFTW3_VERSION}.tar.gz
tar -xf fftw-${FFTW3_VERSION}.tar.gz
fi

if [ ! -f fftw-${FFTW3_VERSION}/build-done ]; then
export CFLAGS="${CFLAGS} -ffast-math"
export CXXFLAGS="${CXXFLAGS} -ffast-math"
cd fftw-${FFTW3_VERSION}
./configure --enable-static --enable-sse2 --disable-shared --disable-debug --prefix=${PREFIX}
make
make install
make clean
./configure --enable-static --enable-sse --enable-sse2 --enable-single --disable-shared --disable-debug --prefix=${PREFIX}
make
make install
make clean
touch build-done
cd ..
fi

} }


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# build base libs # build base libs


export ARCH=32 export ARCH=32
@@ -364,7 +425,7 @@ build_base
export ARCH=64 export ARCH=64
build_base build_base


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# set flags for qt stuff # set flags for qt stuff


export PREFIX=${TARGETDIR}/carla export PREFIX=${TARGETDIR}/carla
@@ -381,7 +442,7 @@ export MAKE=/usr/bin/make
export CFG_ARCH=x86_64 export CFG_ARCH=x86_64
export QMAKESPEC=macx-clang export QMAKESPEC=macx-clang


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# qt5-base download # qt5-base download


if [ ! -d qtbase-opensource-src-${QT5_VERSION} ]; then if [ ! -d qtbase-opensource-src-${QT5_VERSION} ]; then
@@ -390,22 +451,27 @@ if [ ! -d qtbase-opensource-src-${QT5_VERSION} ]; then
/opt/local/bin/7z x qtbase-opensource-src-${QT5_VERSION}.tar /opt/local/bin/7z x qtbase-opensource-src-${QT5_VERSION}.tar
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# qt5-base (64bit, shared, framework) # qt5-base (64bit, shared, framework)


if [ ! -f qtbase-opensource-src-${QT5_VERSION}/build-done ]; then if [ ! -f qtbase-opensource-src-${QT5_VERSION}/build-done ]; then
cd qtbase-opensource-src-${QT5_VERSION} cd qtbase-opensource-src-${QT5_VERSION}
if [ ! -f configured ]; then if [ ! -f configured ]; then
sed -i -e "s|AWK=.*|AWK=/opt/local/bin/gawk|" configure
if [ ! -f carla-patched ]; then
sed -i -e "s|PNG_WARNINGS_SUPPORTED|PNG_WARNINGS_NOT_SUPPORTED|" src/3rdparty/libpng/pnglibconf.h
sed -i -e "s|AWK=.*|AWK=/opt/local/bin/gawk|" configure
patch -p1 -i ../patches/qt55-newosx-fix.patch
touch carla-patched
fi
chmod +x configure chmod +x configure
chmod -R 777 config.tests/unix/ chmod -R 777 config.tests/unix/
./configure -release -shared -opensource -confirm-license -force-pkg-config -platform macx-clang -framework \ ./configure -release -shared -opensource -confirm-license -force-pkg-config -platform macx-clang -framework \
-prefix $PREFIX -plugindir $PREFIX/lib/qt5/plugins -headerdir $PREFIX/include/qt5 \
-prefix ${PREFIX} -plugindir ${PREFIX}/lib/qt5/plugins -headerdir ${PREFIX}/include/qt5 \
-qt-freetype -qt-libjpeg -qt-libpng -qt-pcre -opengl desktop -qpa cocoa \ -qt-freetype -qt-libjpeg -qt-libpng -qt-pcre -opengl desktop -qpa cocoa \
-no-directfb -no-eglfs -no-kms -no-linuxfb -no-mtdev -no-xcb -no-xcb-xlib \ -no-directfb -no-eglfs -no-kms -no-linuxfb -no-mtdev -no-xcb -no-xcb-xlib \
-no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-avx -no-avx2 -no-mips_dsp -no-mips_dspr2 \ -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-avx -no-avx2 -no-mips_dsp -no-mips_dspr2 \
-no-cups -no-dbus -no-evdev -no-fontconfig -no-harfbuzz -no-gif -no-glib -no-nis -no-openssl -no-pch -no-sql-ibase -no-sql-odbc \ -no-cups -no-dbus -no-evdev -no-fontconfig -no-harfbuzz -no-gif -no-glib -no-nis -no-openssl -no-pch -no-sql-ibase -no-sql-odbc \
-no-audio-backend -no-qml-debug -no-separate-debug-info \
-no-audio-backend -no-qml-debug -no-separate-debug-info -no-use-gold-linker \
-no-compile-examples -nomake examples -nomake tests -make libs -make tools -no-compile-examples -nomake examples -nomake tests -make libs -make tools
touch configured touch configured
fi fi
@@ -415,12 +481,12 @@ if [ ! -f qtbase-opensource-src-${QT5_VERSION}/build-done ]; then
ln -s ${PREFIX}/lib/QtGui.framework/Headers ${PREFIX}/include/qt5/QtGui ln -s ${PREFIX}/lib/QtGui.framework/Headers ${PREFIX}/include/qt5/QtGui
ln -s ${PREFIX}/lib/QtWidgets.framework/Headers ${PREFIX}/include/qt5/QtWidgets ln -s ${PREFIX}/lib/QtWidgets.framework/Headers ${PREFIX}/include/qt5/QtWidgets
sed -i -e "s/ -lqtpcre/ /" ${PREFIX}/lib/pkgconfig/Qt5Core.pc sed -i -e "s/ -lqtpcre/ /" ${PREFIX}/lib/pkgconfig/Qt5Core.pc
sed -i -e "s/ '/ /" $PREFIX/lib/pkgconfig/Qt5Core.pc
sed -i -e "s/ '/ /" $PREFIX/lib/pkgconfig/Qt5Core.pc
sed -i -e "s/ '/ /" $PREFIX/lib/pkgconfig/Qt5Gui.pc
sed -i -e "s/ '/ /" $PREFIX/lib/pkgconfig/Qt5Gui.pc
sed -i -e "s/ '/ /" $PREFIX/lib/pkgconfig/Qt5Widgets.pc
sed -i -e "s/ '/ /" $PREFIX/lib/pkgconfig/Qt5Widgets.pc
sed -i -e "s/ '/ /" ${PREFIX}/lib/pkgconfig/Qt5Core.pc
sed -i -e "s/ '/ /" ${PREFIX}/lib/pkgconfig/Qt5Core.pc
sed -i -e "s/ '/ /" ${PREFIX}/lib/pkgconfig/Qt5Gui.pc
sed -i -e "s/ '/ /" ${PREFIX}/lib/pkgconfig/Qt5Gui.pc
sed -i -e "s/ '/ /" ${PREFIX}/lib/pkgconfig/Qt5Widgets.pc
sed -i -e "s/ '/ /" ${PREFIX}/lib/pkgconfig/Qt5Widgets.pc
touch build-done touch build-done
cd .. cd ..
fi fi
@@ -462,7 +528,7 @@ QT59_ARGS="./configure -prefix ${PREFIX} -plugindir ${PREFIX}/lib/qt5/plugins -h
-qt-sqlite -qt-sqlite
" "


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# qt5-mac-extras # qt5-mac-extras


if [ ! -d qtmacextras-opensource-src-${QT5_VERSION} ]; then if [ ! -d qtmacextras-opensource-src-${QT5_VERSION} ]; then
@@ -480,7 +546,7 @@ if [ ! -f qtmacextras-opensource-src-${QT5_VERSION}/build-done ]; then
cd .. cd ..
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# qt5-svg # qt5-svg


if [ ! -d qtsvg-opensource-src-${QT5_VERSION} ]; then if [ ! -d qtsvg-opensource-src-${QT5_VERSION} ]; then
@@ -498,7 +564,7 @@ if [ ! -f qtsvg-opensource-src-${QT5_VERSION}/build-done ]; then
cd .. cd ..
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# python # python


if [ ! -d Python-${PYTHON_VERSION} ]; then if [ ! -d Python-${PYTHON_VERSION} ]; then
@@ -508,14 +574,14 @@ fi


if [ ! -f Python-${PYTHON_VERSION}/build-done ]; then if [ ! -f Python-${PYTHON_VERSION}/build-done ]; then
cd Python-${PYTHON_VERSION} cd Python-${PYTHON_VERSION}
./configure --prefix=$PREFIX
./configure --prefix=${PREFIX}
make make
make install make install
touch build-done touch build-done
cd .. cd ..
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# sip # sip


if [ ! -d sip-${SIP_VERSION} ]; then if [ ! -d sip-${SIP_VERSION} ]; then
@@ -532,7 +598,7 @@ if [ ! -f sip-${SIP_VERSION}/build-done ]; then
cd .. cd ..
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# pyqt5 # pyqt5


if [ ! -d PyQt-gpl-${PYQT5_VERSION} ]; then if [ ! -d PyQt-gpl-${PYQT5_VERSION} ]; then
@@ -549,7 +615,7 @@ if [ ! -f PyQt-gpl-${PYQT5_VERSION}/build-done ]; then
cd .. cd ..
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# pyliblo # pyliblo


if [ ! -d pyliblo-${PYLIBLO_VERSION} ]; then if [ ! -d pyliblo-${PYLIBLO_VERSION} ]; then
@@ -561,12 +627,12 @@ if [ ! -f pyliblo-${PYLIBLO_VERSION}/build-done ]; then
cd pyliblo-${PYLIBLO_VERSION} cd pyliblo-${PYLIBLO_VERSION}
env CFLAGS="${CFLAGS} -I${TARGETDIR}/carla64/include" LDFLAGS="${LDFLAGS} -L${TARGETDIR}/carla64/lib" \ env CFLAGS="${CFLAGS} -I${TARGETDIR}/carla64/include" LDFLAGS="${LDFLAGS} -L${TARGETDIR}/carla64/lib" \
python3 setup.py build python3 setup.py build
python3 setup.py install --prefix=$PREFIX
python3 setup.py install --prefix=${PREFIX}
touch build-done touch build-done
cd .. cd ..
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# cxfreeze # cxfreeze


if [ ! -d cx_Freeze-${CXFREEZE_VERSION} ]; then if [ ! -d cx_Freeze-${CXFREEZE_VERSION} ]; then
@@ -578,9 +644,9 @@ if [ ! -f cx_Freeze-${CXFREEZE_VERSION}/build-done ]; then
cd cx_Freeze-${CXFREEZE_VERSION} cd cx_Freeze-${CXFREEZE_VERSION}
sed -i -e 's/"python%s.%s"/"python%s.%sm"/' setup.py sed -i -e 's/"python%s.%s"/"python%s.%sm"/' setup.py
python3 setup.py build python3 setup.py build
python3 setup.py install --prefix=$PREFIX
python3 setup.py install --prefix=${PREFIX}
touch build-done touch build-done
cd .. cd ..
fi fi


# ------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------

+ 4
- 3
data/macos/build.sh View File

@@ -17,10 +17,11 @@ fi


source data/macos/common.env source data/macos/common.env


MAKE_ARGS="${MAKE_ARGS} EXTERNAL_PLUGINS=false"

export MACOS="true" export MACOS="true"
export MACOS_OLD="true"

if [ $(clang -v 2>&1 | sed -n 's/.*version \([0-9]\).*/\1/p') -lt 9 ]; then
export MACOS_OLD="true"
fi


export CC=clang export CC=clang
export CXX=clang++ export CXX=clang++


+ 3
- 0
data/macos/common.env View File

@@ -15,6 +15,9 @@ GETTEXT_VERSION=0.18.3.2
GLIB_VERSION=2.44.1 GLIB_VERSION=2.44.1
GLIB_MVERSION=2.44 GLIB_MVERSION=2.44
FLUIDSYNTH_VERSION=1.1.6 FLUIDSYNTH_VERSION=1.1.6
ZLIB_VERSION=1.2.11
MXML_VERSION=2.11
FFTW3_VERSION=3.3.7
QT5_VERSION=5.5.1 QT5_VERSION=5.5.1
QT5_MVERSION=5.5 QT5_MVERSION=5.5
PYTHON_VERSION=3.4.7 PYTHON_VERSION=3.4.7


+ 4
- 3
data/macos/env.sh View File

@@ -5,13 +5,14 @@


source data/macos/common.env source data/macos/common.env


export MACOS="true"
export MACOS_OLD="true"
export CC=clang export CC=clang
export CXX=clang++ export CXX=clang++


export MACOS="true" export MACOS="true"
export MACOS_OLD="true"

if [ $(clang -v 2>&1 | sed -n 's/.*version \([0-9]\).*/\1/p') -lt 9 ]; then
export MACOS_OLD="true"
fi


export CC=clang export CC=clang
export CXX=clang++ export CXX=clang++


+ 71
- 0
data/macos/patches/qt55-newosx-fix.patch View File

@@ -0,0 +1,71 @@
From 0707260a4f8e64dfadf1df5f935e74cabb7c7d27 Mon Sep 17 00:00:00 2001
From: Jake Petroules <jake.petroules@qt.io>
Date: Sun, 1 Oct 2017 21:48:17 -0700
Subject: [PATCH] Fix build error with macOS 10.13 SDK
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

Several of these variables/macros are no longer defined. We didn't
validate the preconditions on iOS, tvOS, or watchOS, so no
need to bother validating them on macOS either. Nor did we check the
OSStatus result on any platform anyways.

Task-number: QTBUG-63401
Change-Id: Ife64dff767cf6d3f4b839fc53ec486181c176bf3
(cherry-picked from 861544583511d4e6f7745d2339b26ff1cd44132b)
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
---
src/plugins/platforms/cocoa/qcocoahelpers.h | 2 +-
src/plugins/platforms/cocoa/qcocoahelpers.mm | 13 +------------
2 files changed, 2 insertions(+), 13 deletions(-)

diff --git a/src/plugins/platforms/cocoa/qcocoahelpers.h b/src/plugins/platforms/cocoa/qcocoahelpers.h
index bbb3793..74371d5 100644
--- a/src/plugins/platforms/cocoa/qcocoahelpers.h
+++ b/src/plugins/platforms/cocoa/qcocoahelpers.h
@@ -80,7 +80,7 @@ QColor qt_mac_toQColor(CGColorRef color);
// Creates a mutable shape, it's the caller's responsibility to release.
HIMutableShapeRef qt_mac_QRegionToHIMutableShape(const QRegion &region);
-OSStatus qt_mac_drawCGImage(CGContextRef inContext, const CGRect *inBounds, CGImageRef inImage);
+void qt_mac_drawCGImage(CGContextRef inContext, const CGRect *inBounds, CGImageRef inImage);
NSDragOperation qt_mac_mapDropAction(Qt::DropAction action);
NSDragOperation qt_mac_mapDropActions(Qt::DropActions actions);
diff --git a/src/plugins/platforms/cocoa/qcocoahelpers.mm b/src/plugins/platforms/cocoa/qcocoahelpers.mm
index cd73148..3f8429e 100644
--- a/src/plugins/platforms/cocoa/qcocoahelpers.mm
+++ b/src/plugins/platforms/cocoa/qcocoahelpers.mm
@@ -544,15 +544,8 @@ NSRect qt_mac_flipRect(const QRect &rect)
return NSMakeRect(rect.x(), flippedY, rect.width(), rect.height());
}
-OSStatus qt_mac_drawCGImage(CGContextRef inContext, const CGRect *inBounds, CGImageRef inImage)
+void qt_mac_drawCGImage(CGContextRef inContext, const CGRect *inBounds, CGImageRef inImage)
{
- // Verbatim copy if HIViewDrawCGImage (as shown on Carbon-Dev)
- OSStatus err = noErr;
-
- require_action(inContext != NULL, InvalidContext, err = paramErr);
- require_action(inBounds != NULL, InvalidBounds, err = paramErr);
- require_action(inImage != NULL, InvalidImage, err = paramErr);
-
CGContextSaveGState( inContext );
CGContextTranslateCTM (inContext, 0, inBounds->origin.y + CGRectGetMaxY(*inBounds));
CGContextScaleCTM(inContext, 1, -1);
@@ -560,10 +553,6 @@ OSStatus qt_mac_drawCGImage(CGContextRef inContext, const CGRect *inBounds, CGIm
CGContextDrawImage(inContext, *inBounds, inImage);
CGContextRestoreGState(inContext);
-InvalidImage:
-InvalidBounds:
-InvalidContext:
- return err;
}
Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum)
--
2.7.4


+ 3
- 3
data/windows/README.txt View File

@@ -13,9 +13,9 @@ Features
* GIG, SF2 and SFZ sound banks * GIG, SF2 and SFZ sound banks
* Internal audio and midi file player * Internal audio and midi file player
* Automation of plugin parameters via MIDI CC * Automation of plugin parameters via MIDI CC
* Full OSC control
* Rack and Patchbay engine modes, plus Single and Multi-Client if using JACK
* Native audio drivers (ALSA, DirectSound, CoreAudio) and low-latency (ASIO and JACK)
* Remote control over OSC
* Rack and Patchbay processing modes, plus Single and Multi-Client if using JACK
* Native audio drivers (ALSA, DirectSound, CoreAudio, etc) and JACK


In experimental phase / work in progress: In experimental phase / work in progress:
* Export any Carla loadable plugin or sound bank as an LV2 plugin * Export any Carla loadable plugin or sound bank as an LV2 plugin


+ 58
- 1
data/windows/build-deps.sh View File

@@ -74,7 +74,7 @@ unset CXXFLAGS
unset LDFLAGS unset LDFLAGS


export PREFIX=${TARGETDIR}/carla-w${ARCH} export PREFIX=${TARGETDIR}/carla-w${ARCH}
export PATH=${PREFIX}/bin/usr/sbin:/usr/bin:/sbin:/bin
export PATH=${PREFIX}/bin:/usr/sbin:/usr/bin:/sbin:/bin
export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig


# --------------------------------------------------------------------------------------------------------------------- # ---------------------------------------------------------------------------------------------------------------------
@@ -352,11 +352,68 @@ if [ ! -f fluidsynth-${FLUIDSYNTH_VERSION}/build-done ]; then
cd .. cd ..
fi fi


# ---------------------------------------------------------------------------------------------------------------------
# mxml

if [ ! -d mxml-${MXML_VERSION} ]; then
wget -c https://github.com/michaelrsweet/mxml/releases/download/v${MXML_VERSION}/mxml-${MXML_VERSION}.tar.gz -O mxml-${MXML_VERSION}.tar.gz
mkdir mxml-${MXML_VERSION}
cd mxml-${MXML_VERSION}
tar -xf ../mxml-${MXML_VERSION}.tar.gz
cd ..
fi

if [ ! -f mxml-${MXML_VERSION}/build-done ]; then
cd mxml-${MXML_VERSION}
./configure --disable-shared --prefix=${PREFIX} \
--target=${MINGW_PREFIX} --host=${MINGW_PREFIX} --build=${HOST_ARCH}
make libmxml.a
cp *.a ${PREFIX}/lib/
cp *.pc ${PREFIX}/lib/pkgconfig/
cp mxml.h ${PREFIX}/include/
touch build-done
cd ..
fi

# ---------------------------------------------------------------------------------------------------------------------
# fftw3 (needs to be last as it modifies C[XX]FLAGS)

if [ ! -d fftw-${FFTW3_VERSION} ]; then
curl -O http://www.fftw.org/fftw-${FFTW3_VERSION}.tar.gz
tar -xf fftw-${FFTW3_VERSION}.tar.gz
fi

if [ ! -f fftw-${FFTW3_VERSION}/build-done ]; then
export CFLAGS="${CFLAGS} -ffast-math"
export CXXFLAGS="${CXXFLAGS} -ffast-math"
cd fftw-${FFTW3_VERSION}
./configure --enable-static --disable-shared --prefix=${PREFIX} \
--target=${MINGW_PREFIX} --host=${MINGW_PREFIX} --build=${HOST_ARCH} \
--enable-sse2 \
--disable-debug --disable-alloca --disable-fortran \
--with-our-malloc
make
make install
make clean
./configure --enable-static --disable-shared --prefix=${PREFIX} \
--target=${MINGW_PREFIX} --host=${MINGW_PREFIX} --build=${HOST_ARCH} \
--enable-sse2 --enable-sse --enable-single \
--disable-debug --disable-alloca --disable-fortran \
--with-our-malloc
make
make install
make clean
touch build-done
cd ..
fi

} }


# --------------------------------------------------------------------------------------------------------------------- # ---------------------------------------------------------------------------------------------------------------------
# build base libs # build base libs


cleanup_prefix

export ARCH=32 export ARCH=32
build_base build_base
cleanup_pkgs cleanup_pkgs


+ 2
- 2
data/windows/build-win.sh View File

@@ -27,8 +27,8 @@ fi


source data/windows/common.env source data/windows/common.env


MAKE_ARGS="${MAKE_ARGS} HAVE_QT4=false HAVE_QT5=false HAVE_PYQT5=true HAVE_FFMPEG=false"
MAKE_ARGS="${MAKE_ARGS} BUILDING_FOR_WINDOWS=true EXTERNAL_PLUGINS=false"
MAKE_ARGS="${MAKE_ARGS} HAVE_QT4=false HAVE_QT5=false HAVE_PYQT5=true HAVE_FFMPEG=false HAVE_PROJECTM=false"
MAKE_ARGS="${MAKE_ARGS} BUILDING_FOR_WINDOWS=true"


if [ x"${ARCH}" != x"32" ]; then if [ x"${ARCH}" != x"32" ]; then
CPUARCH="x86_64" CPUARCH="x86_64"


+ 2
- 0
data/windows/common.env View File

@@ -15,6 +15,8 @@ GETTEXT_VERSION=0.18.3.2
GLIB_VERSION=2.22.5 GLIB_VERSION=2.22.5
GLIB_MVERSION=2.22 GLIB_MVERSION=2.22
FLUIDSYNTH_VERSION=1.1.6 FLUIDSYNTH_VERSION=1.1.6
MXML_VERSION=2.11
FFTW3_VERSION=3.3.7
QT5_VERSION=5.5.1 QT5_VERSION=5.5.1
QT5_MVERSION=5.5 QT5_MVERSION=5.5
PYTHON_VERSION=3.4.7 PYTHON_VERSION=3.4.7


+ 2
- 0
data/windows/create-wineprefixes.sh View File

@@ -8,6 +8,7 @@ rm -rf ~/.winepy3_x64
export WINEARCH=win32 export WINEARCH=win32
export WINEPREFIX=~/.winepy3_x32 export WINEPREFIX=~/.winepy3_x32
wineboot wineboot
winetricks winxp
winetricks vcrun2010 winetricks vcrun2010
winetricks corefonts winetricks corefonts
winetricks fontsmooth=rgb winetricks fontsmooth=rgb
@@ -21,6 +22,7 @@ winetricks fontsmooth=rgb
export WINEARCH=win64 export WINEARCH=win64
export WINEPREFIX=~/.winepy3_x64 export WINEPREFIX=~/.winepy3_x64
wineboot wineboot
winetricks win7
winetricks vcrun2010 winetricks vcrun2010
winetricks corefonts winetricks corefonts
winetricks fontsmooth=rgb winetricks fontsmooth=rgb


+ 1
- 13
doc/Carla-TODO View File

@@ -35,12 +35,9 @@ GENERAL:
- implement midi-learn (new dialog) - implement midi-learn (new dialog)
- implement favorite plugins, add in new tab near file-browser - implement favorite plugins, add in new tab near file-browser
- blender style canvas theme - blender style canvas theme
- make it possible to use backend as fake standalone app (using pipes) instead of a shared library
- artwork about tab
- NSM rework - NSM rework


FRONTEND: FRONTEND:
- options for UIs on top of carla (managed)
- make always-on-top depend on it^ - make always-on-top depend on it^
- complete zynfx, knob values on top - complete zynfx, knob values on top
- synth skin - synth skin
@@ -49,13 +46,10 @@ FRONTEND:
ENGINE: ENGINE:
- allow to change position of plugins (up/down) - allow to change position of plugins (up/down)
- allow to add plugins when engine is stopped - allow to add plugins when engine is stopped
- complete RtAudio+RtMidi support (only MIDI out missing)
- complete Juce engine driver support
- implement Haiku Media support (based from JACK?, LATER) - implement Haiku Media support (based from JACK?, LATER)
- implement latency in continuous-rack mode - implement latency in continuous-rack mode
- handle sample-rate changes in JACK (made possible by switch-master)
- add MIDI-bank change type (GM, GS, XG and MMA). See fluidsynth and los docs - add MIDI-bank change type (GM, GS, XG and MMA). See fluidsynth and los docs
- allow to use static OSC ports
~ allow to use static OSC ports
- switch engine modes when opening project - switch engine modes when opening project
- don't pass audio buffers to plugin process, make them request via ports - don't pass audio buffers to plugin process, make them request via ports


@@ -66,10 +60,6 @@ PLUGINS:
- implement LSCP file support (new native plugin?) - implement LSCP file support (new native plugin?)
- implement Csound file support - implement Csound file support


Native:
- Cleanup API
- Document API from daz
- update zynaddsubfx


LADSPA: LADSPA:


@@ -103,8 +93,6 @@ misc
-allow in-line edit window (i.e. right of rack/canvas) -> shows as soon as plugin/instr. is selected -allow in-line edit window (i.e. right of rack/canvas) -> shows as soon as plugin/instr. is selected
-indicate engine at work top right -indicate engine at work top right
-if engine is jack, show load top right (percent and/or gauge) -if engine is jack, show load top right (percent and/or gauge)
-don't show jack transport on start
-allow to re-open jack transport, i.e. settings/show ... and/or via toolbar
-warn on quit if unsaved -warn on quit if unsaved


patchbay patchbay


+ 35
- 9
resources/ui/carla_settings.ui View File

@@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>612</width> <width>612</width>
<height>587</height>
<height>507</height>
</rect> </rect>
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
@@ -708,7 +708,7 @@
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="page_engine"> <widget class="QWidget" name="page_engine">
<layout class="QVBoxLayout" name="verticalLayout_18">
<layout class="QVBoxLayout" name="verticalLayout_6">
<property name="margin"> <property name="margin">
<number>2</number> <number>2</number>
</property> </property>
@@ -924,7 +924,7 @@
</property> </property>
<layout class="QGridLayout" name="gridLayout_8"> <layout class="QGridLayout" name="gridLayout_8">
<item row="5" column="0"> <item row="5" column="0">
<widget class="QLabel" name="label_12">
<widget class="QLabel" name="label_engine_ui_bridges_timeout">
<property name="toolTip"> <property name="toolTip">
<string>How much time to wait for OSC GUIs to ping back the host</string> <string>How much time to wait for OSC GUIs to ping back the host</string>
</property> </property>
@@ -989,6 +989,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="0" colspan="3">
<widget class="QLabel" name="label_engine_ui_bridges_mac_note">
<property name="text">
<string>NOTE: Plugin-bridge UIs cannot be managed by Carla on macOS</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
@@ -1006,9 +1013,9 @@
</widget> </widget>
</item> </item>
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<layout class="QHBoxLayout" name="horizontalLayout_13">
<item> <item>
<spacer name="horizontalSpacer_10">
<spacer name="horizontalSpacer_20">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
@@ -1021,7 +1028,7 @@
</spacer> </spacer>
</item> </item>
<item> <item>
<widget class="QLabel" name="label_13">
<widget class="QLabel" name="label_22">
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>22</width> <width>22</width>
@@ -1040,14 +1047,14 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QLabel" name="label_14">
<widget class="QLabel" name="label_23">
<property name="text"> <property name="text">
<string>Restart the engine to load the new settings</string> <string>Restart the engine to load the new settings</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<spacer name="horizontalSpacer_13">
<spacer name="horizontalSpacer_21">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
@@ -1069,7 +1076,7 @@
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
<width>20</width> <width>20</width>
<height>225</height>
<height>300</height>
</size> </size>
</property> </property>
</spacer> </spacer>
@@ -1893,6 +1900,9 @@ This mode is not available for VST plugins.</string>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="ch_engine_prefer_plugin_bridges"> <widget class="QCheckBox" name="ch_engine_prefer_plugin_bridges">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip"> <property name="toolTip">
<string>Whenever possible, run the plugins in bridge mode.</string> <string>Whenever possible, run the plugins in bridge mode.</string>
</property> </property>
@@ -2085,5 +2095,21 @@ This mode is not available for VST plugins.</string>
</hint> </hint>
</hints> </hints>
</connection> </connection>
<connection>
<sender>cb_exp_plugin_bridges</sender>
<signal>toggled(bool)</signal>
<receiver>ch_engine_prefer_plugin_bridges</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>402</x>
<y>145</y>
</hint>
<hint type="destinationlabel">
<x>402</x>
<y>433</y>
</hint>
</hints>
</connection>
</connections> </connections>
</ui> </ui>

+ 466
- 515
source/backend/CarlaStandalone.cpp
File diff suppressed because it is too large
View File


+ 2
- 1
source/backend/engine/CarlaEngineNative.cpp View File

@@ -1,6 +1,6 @@
/* /*
* Carla Plugin Host * Carla Plugin Host
* Copyright (C) 2011-2017 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2011-2018 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -2323,6 +2323,7 @@ const EngineDriverDeviceInfo* CarlaEngine::getRtAudioDeviceInfo(const uint, cons


CARLA_BACKEND_END_NAMESPACE CARLA_BACKEND_END_NAMESPACE


#define CARLA_PLUGIN_UI_CLASS_PREFIX EngineNative
#include "CarlaHostCommon.cpp" #include "CarlaHostCommon.cpp"
#include "CarlaPluginUI.cpp" #include "CarlaPluginUI.cpp"
#include "CarlaDssiUtils.cpp" #include "CarlaDssiUtils.cpp"


+ 15
- 4
source/backend/engine/CarlaEngineRtAudio.cpp View File

@@ -478,6 +478,7 @@ public:
} }


// MIDI In // MIDI In
try
{ {
RtMidiIn midiIn(getMatchedAudioMidiAPI(fAudio.getCurrentApi()), "carla-discovery-in"); RtMidiIn midiIn(getMatchedAudioMidiAPI(fAudio.getCurrentApi()), "carla-discovery-in");


@@ -488,9 +489,10 @@ public:


extGraph.midiPorts.ins.append(portNameToId); extGraph.midiPorts.ins.append(portNameToId);
} }
}
} CARLA_SAFE_EXCEPTION("RtMidiIn discovery");


// MIDI Out // MIDI Out
try
{ {
RtMidiOut midiOut(getMatchedAudioMidiAPI(fAudio.getCurrentApi()), "carla-discovery-out"); RtMidiOut midiOut(getMatchedAudioMidiAPI(fAudio.getCurrentApi()), "carla-discovery-out");


@@ -501,7 +503,7 @@ public:


extGraph.midiPorts.outs.append(portNameToId); extGraph.midiPorts.outs.append(portNameToId);
} }
}
} CARLA_SAFE_EXCEPTION("RtMidiOut discovery");


// --------------------------------------------------------------- // ---------------------------------------------------------------
// now refresh // now refresh
@@ -789,7 +791,12 @@ protected:
newRtMidiPortName += ":"; newRtMidiPortName += ":";
newRtMidiPortName += portName; newRtMidiPortName += portName;


RtMidiIn* const rtMidiIn(new RtMidiIn(getMatchedAudioMidiAPI(fAudio.getCurrentApi()), newRtMidiPortName.buffer(), 512));
RtMidiIn* rtMidiIn;

try {
rtMidiIn = new RtMidiIn(getMatchedAudioMidiAPI(fAudio.getCurrentApi()), newRtMidiPortName.buffer(), 512);
} CARLA_SAFE_EXCEPTION_RETURN("new RtMidiIn", false);

rtMidiIn->ignoreTypes(); rtMidiIn->ignoreTypes();
rtMidiIn->setCallback(carla_rtmidi_callback, this); rtMidiIn->setCallback(carla_rtmidi_callback, this);


@@ -836,7 +843,11 @@ protected:
newRtMidiPortName += ":"; newRtMidiPortName += ":";
newRtMidiPortName += portName; newRtMidiPortName += portName;


RtMidiOut* const rtMidiOut(new RtMidiOut(getMatchedAudioMidiAPI(fAudio.getCurrentApi()), newRtMidiPortName.buffer()));
RtMidiOut* rtMidiOut;

try {
rtMidiOut = new RtMidiOut(getMatchedAudioMidiAPI(fAudio.getCurrentApi()), newRtMidiPortName.buffer());
} CARLA_SAFE_EXCEPTION_RETURN("new RtMidiOut", false);


bool found = false; bool found = false;
uint rtMidiPortIndex; uint rtMidiPortIndex;


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

@@ -2328,6 +2328,7 @@ void CarlaPlugin::uiIdle()
pData->postUiEvents.data.clear(); pData->postUiEvents.data.clear();
} }


#ifndef BUILD_BRIDGE
if (pData->transientTryCounter == 0) if (pData->transientTryCounter == 0)
return; return;
if (++pData->transientTryCounter % 10 != 0) if (++pData->transientTryCounter % 10 != 0)
@@ -2340,8 +2341,13 @@ void CarlaPlugin::uiIdle()
CarlaString uiTitle(pData->name); CarlaString uiTitle(pData->name);
uiTitle += " (GUI)"; uiTitle += " (GUI)";


if (CarlaPluginUI::tryTransientWinIdMatch(getUiBridgeProcessId(), uiTitle, pData->engine->getOptions().frontendWinId, true))
if (CarlaPluginUI::tryTransientWinIdMatch(getUiBridgeProcessId(), uiTitle,
pData->engine->getOptions().frontendWinId, pData->transientFirstTry))
{
pData->transientTryCounter = 0; pData->transientTryCounter = 0;
pData->transientFirstTry = false;
}
#endif
} }


void CarlaPlugin::uiParameterChange(const uint32_t index, const float value) noexcept void CarlaPlugin::uiParameterChange(const uint32_t index, const float value) noexcept


+ 4
- 0
source/backend/plugin/CarlaPluginBridge.cpp View File

@@ -391,9 +391,11 @@ public:
{ {
carla_debug("CarlaPluginBridge::~CarlaPluginBridge()"); carla_debug("CarlaPluginBridge::~CarlaPluginBridge()");


#ifndef BUILD_BRIDGE
// close UI // close UI
if (pData->hints & PLUGIN_HAS_CUSTOM_UI) if (pData->hints & PLUGIN_HAS_CUSTOM_UI)
pData->transientTryCounter = 0; pData->transientTryCounter = 0;
#endif


pData->singleMutex.lock(); pData->singleMutex.lock();
pData->masterMutex.lock(); pData->masterMutex.lock();
@@ -2189,7 +2191,9 @@ public:
break; break;


case kPluginBridgeNonRtServerUiClosed: case kPluginBridgeNonRtServerUiClosed:
#ifndef BUILD_BRIDGE
pData->transientTryCounter = 0; pData->transientTryCounter = 0;
#endif
pData->engine->callback(ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0.0f, nullptr); pData->engine->callback(ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0.0f, nullptr);
break; break;




+ 4
- 0
source/backend/plugin/CarlaPluginDSSI.cpp View File

@@ -697,7 +697,9 @@ public:
} }
else else
{ {
#ifndef BUILD_BRIDGE
pData->transientTryCounter = 0; pData->transientTryCounter = 0;
#endif


if (fOscData.target != nullptr) if (fOscData.target != nullptr)
{ {
@@ -2357,8 +2359,10 @@ public:
for (uint32_t i=0; i < pData->param.count; ++i) for (uint32_t i=0; i < pData->param.count; ++i)
osc_send_control(fOscData, pData->param.data[i].rindex, getParameterValue(i)); osc_send_control(fOscData, pData->param.data[i].rindex, getParameterValue(i));


#ifndef BUILD_BRIDGE
if (pData->engine->getOptions().frontendWinId != 0) if (pData->engine->getOptions().frontendWinId != 0)
pData->transientTryCounter = 1; pData->transientTryCounter = 1;
#endif


carla_stdout("CarlaPluginDSSI::updateOscData() - done"); carla_stdout("CarlaPluginDSSI::updateOscData() - done");
} }


+ 6
- 1
source/backend/plugin/CarlaPluginInternal.cpp View File

@@ -1,6 +1,6 @@
/* /*
* Carla Plugin * Carla Plugin
* Copyright (C) 2011-2014 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2011-2018 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -600,7 +600,10 @@ CarlaPlugin::ProtectedData::ProtectedData(CarlaEngine* const eng, const uint idx
uiLib(nullptr), uiLib(nullptr),
ctrlChannel(0), ctrlChannel(0),
extraHints(0x0), extraHints(0x0),
#ifndef BUILD_BRIDGE
transientTryCounter(0), transientTryCounter(0),
transientFirstTry(true),
#endif
name(nullptr), name(nullptr),
filename(nullptr), filename(nullptr),
iconName(nullptr), iconName(nullptr),
@@ -628,7 +631,9 @@ CarlaPlugin::ProtectedData::ProtectedData(CarlaEngine* const eng, const uint idx
CarlaPlugin::ProtectedData::~ProtectedData() noexcept CarlaPlugin::ProtectedData::~ProtectedData() noexcept
{ {
CARLA_SAFE_ASSERT(! (active && needsReset)); CARLA_SAFE_ASSERT(! (active && needsReset));
#ifndef BUILD_BRIDGE
CARLA_SAFE_ASSERT(transientTryCounter == 0); CARLA_SAFE_ASSERT(transientTryCounter == 0);
#endif


{ {
// mutex MUST have been locked before // mutex MUST have been locked before


+ 4
- 1
source/backend/plugin/CarlaPluginInternal.hpp View File

@@ -1,6 +1,6 @@
/* /*
* Carla Plugin * Carla Plugin
* Copyright (C) 2011-2014 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2011-2018 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -227,7 +227,10 @@ struct CarlaPlugin::ProtectedData {
// misc // misc
int8_t ctrlChannel; int8_t ctrlChannel;
uint extraHints; uint extraHints;
#ifndef BUILD_BRIDGE
uint transientTryCounter; uint transientTryCounter;
bool transientFirstTry;
#endif


// data 1 // data 1
const char* name; const char* name;


+ 3
- 1
source/backend/plugin/CarlaPluginJack.cpp View File

@@ -1,6 +1,6 @@
/* /*
* Carla Plugin JACK * Carla Plugin JACK
* Copyright (C) 2016-2017 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2016-2018 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -221,9 +221,11 @@ public:
{ {
carla_debug("CarlaPluginJack::~CarlaPluginJack()"); carla_debug("CarlaPluginJack::~CarlaPluginJack()");


#ifndef BUILD_BRIDGE
// close UI // close UI
if (pData->hints & PLUGIN_HAS_CUSTOM_UI) if (pData->hints & PLUGIN_HAS_CUSTOM_UI)
pData->transientTryCounter = 0; pData->transientTryCounter = 0;
#endif


pData->singleMutex.lock(); pData->singleMutex.lock();
pData->masterMutex.lock(); pData->masterMutex.lock();


+ 4
- 0
source/backend/plugin/CarlaPluginLV2.cpp View File

@@ -1322,8 +1322,10 @@ public:


const uintptr_t frontendWinId(pData->engine->getOptions().frontendWinId); const uintptr_t frontendWinId(pData->engine->getOptions().frontendWinId);


#ifndef BUILD_BRIDGE
if (! yesNo) if (! yesNo)
pData->transientTryCounter = 0; pData->transientTryCounter = 0;
#endif


if (fUI.type == UI::TYPE_BRIDGE) if (fUI.type == UI::TYPE_BRIDGE)
{ {
@@ -1613,7 +1615,9 @@ public:
fPipeServer.stopPipeServer(2000); fPipeServer.stopPipeServer(2000);
// fall through // fall through
case CarlaPipeServerLV2::UiCrashed: case CarlaPipeServerLV2::UiCrashed:
#ifndef BUILD_BRIDGE
pData->transientTryCounter = 0; pData->transientTryCounter = 0;
#endif
pData->engine->callback(ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0.0f, nullptr); pData->engine->callback(ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0.0f, nullptr);
break; break;
} }


+ 4
- 0
source/backend/plugin/CarlaPluginNative.cpp View File

@@ -229,7 +229,9 @@ public:
if (fIsUiVisible && fDescriptor != nullptr && fDescriptor->ui_show != nullptr && fHandle != nullptr) if (fIsUiVisible && fDescriptor != nullptr && fDescriptor->ui_show != nullptr && fHandle != nullptr)
fDescriptor->ui_show(fHandle, false); fDescriptor->ui_show(fHandle, false);


#ifndef BUILD_BRIDGE
pData->transientTryCounter = 0; pData->transientTryCounter = 0;
#endif
} }


pData->singleMutex.lock(); pData->singleMutex.lock();
@@ -800,7 +802,9 @@ public:


if (! yesNo) if (! yesNo)
{ {
#ifndef BUILD_BRIDGE
pData->transientTryCounter = 0; pData->transientTryCounter = 0;
#endif
return; return;
} }




+ 3
- 3
source/bridges-ui/CarlaBridgeToolkitNative.cpp View File

@@ -1,6 +1,6 @@
/* /*
* Carla Bridge UI * Carla Bridge UI
* Copyright (C) 2014-2017 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2014-2018 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -68,8 +68,7 @@ public:


fHostUI->setTitle(options.windowTitle.buffer()); fHostUI->setTitle(options.windowTitle.buffer());


#ifdef HAVE_X11
// Out-of-process reparenting only possible on X11
#if (defined(CARLA_OS_WIN) && defined(BRIDGE_HWND)) || (defined(HAVE_X11) && defined(BRIDGE_X11))
if (options.transientWindowId != 0) if (options.transientWindowId != 0)
{ {
fHostUI->setTransientWinId(options.transientWindowId); fHostUI->setTransientWinId(options.transientWindowId);
@@ -225,6 +224,7 @@ CarlaBridgeToolkit* CarlaBridgeToolkit::createNew(CarlaBridgeFormat* const forma


CARLA_BRIDGE_UI_END_NAMESPACE CARLA_BRIDGE_UI_END_NAMESPACE


#define CARLA_PLUGIN_UI_CLASS_PREFIX ToolkitNative
#include "CarlaPluginUI.cpp" #include "CarlaPluginUI.cpp"


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

+ 3
- 0
source/carla_host.py View File

@@ -309,6 +309,9 @@ class HostWindow(QMainWindow):
self.ui.cb_transport_link.setEnabled(False) self.ui.cb_transport_link.setEnabled(False)
self.ui.dsb_transport_bpm.setEnabled(False) self.ui.dsb_transport_bpm.setEnabled(False)


if MACOS:
self.ui.cb_transport_link.setEnabled(False)

self.ui.w_transport.setEnabled(False) self.ui.w_transport.setEnabled(False)


# ---------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------


+ 21
- 4
source/carla_settings.py View File

@@ -243,10 +243,6 @@ class CarlaSettingsW(QDialog):
self.ui.ch_main_show_logs.setEnabled(False) self.ui.ch_main_show_logs.setEnabled(False)
self.ui.ch_main_show_logs.setVisible(False) self.ui.ch_main_show_logs.setVisible(False)


if WINDOWS:
self.ui.ch_engine_manage_uis.setEnabled(False)
self.ui.ch_engine_manage_uis.setVisible(False)

if host.isControl: if host.isControl:
self.ui.lw_page.hideRow(self.TAB_INDEX_CANVAS) self.ui.lw_page.hideRow(self.TAB_INDEX_CANVAS)
self.ui.lw_page.hideRow(self.TAB_INDEX_ENGINE) self.ui.lw_page.hideRow(self.TAB_INDEX_ENGINE)
@@ -287,11 +283,16 @@ class CarlaSettingsW(QDialog):
self.ui.ch_exp_prevent_bad_behaviour.setVisible(False) self.ui.ch_exp_prevent_bad_behaviour.setVisible(False)
self.ui.lw_page.hideRow(self.TAB_INDEX_WINE) self.ui.lw_page.hideRow(self.TAB_INDEX_WINE)


if not MACOS:
self.ui.label_engine_ui_bridges_mac_note.setVisible(False)

# FIXME, pipes on win32 not working, and mis-behaving on macOS # FIXME, pipes on win32 not working, and mis-behaving on macOS
if MACOS or WINDOWS: if MACOS or WINDOWS:
self.ui.ch_engine_prefer_ui_bridges.setChecked(False) self.ui.ch_engine_prefer_ui_bridges.setChecked(False)
self.ui.ch_engine_prefer_ui_bridges.setEnabled(False) self.ui.ch_engine_prefer_ui_bridges.setEnabled(False)
self.ui.ch_engine_prefer_ui_bridges.setVisible(False) self.ui.ch_engine_prefer_ui_bridges.setVisible(False)
self.ui.label_engine_ui_bridges_timeout.setEnabled(False)
self.ui.label_engine_ui_bridges_timeout.setVisible(False)
self.ui.sb_engine_ui_bridges_timeout.setEnabled(False) self.ui.sb_engine_ui_bridges_timeout.setEnabled(False)
self.ui.sb_engine_ui_bridges_timeout.setVisible(False) self.ui.sb_engine_ui_bridges_timeout.setVisible(False)


@@ -328,8 +329,10 @@ class CarlaSettingsW(QDialog):


self.ui.ch_main_experimental.toggled.connect(self.slot_enableExperimental) self.ui.ch_main_experimental.toggled.connect(self.slot_enableExperimental)
self.ui.ch_exp_wine_bridges.toggled.connect(self.slot_enableWineBridges) self.ui.ch_exp_wine_bridges.toggled.connect(self.slot_enableWineBridges)
self.ui.cb_exp_plugin_bridges.toggled.connect(self.slot_pluginBridgesToggled)
self.ui.cb_canvas_eyecandy.toggled.connect(self.slot_canvasEyeCandyToggled) self.ui.cb_canvas_eyecandy.toggled.connect(self.slot_canvasEyeCandyToggled)
self.ui.cb_canvas_fancy_eyecandy.toggled.connect(self.slot_canvasFancyEyeCandyToggled) self.ui.cb_canvas_fancy_eyecandy.toggled.connect(self.slot_canvasFancyEyeCandyToggled)
self.ui.cb_canvas_use_opengl.toggled.connect(self.slot_canvasOpenGLToggled)


# ---------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------
# Post-connect setup # Post-connect setup
@@ -344,6 +347,8 @@ class CarlaSettingsW(QDialog):


self.ui.lw_page.setCurrentCell(0, 0) self.ui.lw_page.setCurrentCell(0, 0)


self.adjustSize()

# -------------------------------------------------------------------------------------------------------- # --------------------------------------------------------------------------------------------------------


def loadSettings(self): def loadSettings(self):
@@ -862,6 +867,13 @@ class CarlaSettingsW(QDialog):
else: else:
self.ui.lw_page.hideRow(self.TAB_INDEX_WINE) self.ui.lw_page.hideRow(self.TAB_INDEX_WINE)


@pyqtSlot(bool)
def slot_pluginBridgesToggled(self, toggled):
if not toggled:
self.ui.ch_exp_wine_bridges.setChecked(False)
self.ui.ch_engine_prefer_plugin_bridges.setChecked(False)
self.ui.lw_page.hideRow(self.TAB_INDEX_WINE)

@pyqtSlot(bool) @pyqtSlot(bool)
def slot_canvasEyeCandyToggled(self, toggled): def slot_canvasEyeCandyToggled(self, toggled):
if not toggled: if not toggled:
@@ -872,6 +884,11 @@ class CarlaSettingsW(QDialog):
if toggled: if toggled:
self.ui.cb_canvas_eyecandy.setChecked(True) self.ui.cb_canvas_eyecandy.setChecked(True)


@pyqtSlot(bool)
def slot_canvasOpenGLToggled(self, toggled):
if not toggled:
self.ui.cb_canvas_render_hq_aa.setChecked(False)

# -------------------------------------------------------------------------------------------------------- # --------------------------------------------------------------------------------------------------------


@pyqtSlot() @pyqtSlot()


+ 4
- 5
source/libjack/Makefile View File

@@ -27,11 +27,8 @@ LINK_FLAGS += -lpthread -lrt


# ---------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------------------


OBJS =
TARGETS =

ifeq ($(LINUX),true) ifeq ($(LINUX),true)
OBJS = \
OBJS = \
$(OBJDIR)/libjack.cpp.o \ $(OBJDIR)/libjack.cpp.o \
$(OBJDIR)/libjack_base.cpp.o \ $(OBJDIR)/libjack_base.cpp.o \
$(OBJDIR)/libjack_callbacks.cpp.o \ $(OBJDIR)/libjack_callbacks.cpp.o \
@@ -49,6 +46,8 @@ OBJS = \
$(OBJDIR)/libjack_transport.cpp.o \ $(OBJDIR)/libjack_transport.cpp.o \
$(OBJDIR)/ringbuffer.c.o $(OBJDIR)/ringbuffer.c.o
TARGET = $(BINDIR)/jack/libjack.so.0 TARGET = $(BINDIR)/jack/libjack.so.0
else
OBJS =
endif endif


# ---------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------------------
@@ -58,7 +57,7 @@ all: $(TARGET)
# ---------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------------------


clean: clean:
rm -f $(OBJDIR)/*.o $(TARGETS)
rm -f $(OBJDIR)/*.o $(TARGET)


debug: debug:
$(MAKE) DEBUG=true $(MAKE) DEBUG=true


+ 67
- 36
source/modules/dgl/src/Window.cpp View File

@@ -87,11 +87,13 @@ struct Window::PrivateData {
fWidgets(), fWidgets(),
fModal(), fModal(),
#if defined(DISTRHO_OS_WINDOWS) #if defined(DISTRHO_OS_WINDOWS)
hwnd(0)
hwnd(nullptr),
hwndParent(nullptr)
#elif defined(DISTRHO_OS_MAC) #elif defined(DISTRHO_OS_MAC)
fNeedsIdle(true), fNeedsIdle(true),
mView(nullptr), mView(nullptr),
mWindow(nullptr)
mWindow(nullptr),
mParentWindow(nullptr)
#else #else
xDisplay(nullptr), xDisplay(nullptr),
xWindow(0) xWindow(0)
@@ -115,11 +117,13 @@ struct Window::PrivateData {
fWidgets(), fWidgets(),
fModal(parent.pData), fModal(parent.pData),
#if defined(DISTRHO_OS_WINDOWS) #if defined(DISTRHO_OS_WINDOWS)
hwnd(0)
hwnd(nullptr),
hwndParent(nullptr)
#elif defined(DISTRHO_OS_MAC) #elif defined(DISTRHO_OS_MAC)
fNeedsIdle(false), fNeedsIdle(false),
mView(nullptr), mView(nullptr),
mWindow(nullptr)
mWindow(nullptr),
mParentWindow(nullptr)
#else #else
xDisplay(nullptr), xDisplay(nullptr),
xWindow(0) xWindow(0)
@@ -129,17 +133,16 @@ struct Window::PrivateData {
init(); init();


const PuglInternals* const parentImpl(parent.pData->fView->impl); const PuglInternals* const parentImpl(parent.pData->fView->impl);

// NOTE: almost a 1:1 copy of setTransientWinId()
#if defined(DISTRHO_OS_WINDOWS) #if defined(DISTRHO_OS_WINDOWS)
// TODO
hwndParent = parentImpl->hwnd;
SetWindowLongPtr(hwnd, GWLP_HWNDPARENT, (LONG_PTR)hwndParent);
#elif defined(DISTRHO_OS_MAC) #elif defined(DISTRHO_OS_MAC)
[parentImpl->window orderWindow:NSWindowBelow relativeTo:[[mView window] windowNumber]];
mParentWindow = parentImpl->window;
#else #else
XSetTransientForHint(xDisplay, xWindow, parentImpl->win); XSetTransientForHint(xDisplay, xWindow, parentImpl->win);
#endif #endif
return;

// maybe unused
(void)parentImpl;
} }


PrivateData(Application& app, Window* const self, const intptr_t parentId) PrivateData(Application& app, Window* const self, const intptr_t parentId)
@@ -156,11 +159,13 @@ struct Window::PrivateData {
fWidgets(), fWidgets(),
fModal(), fModal(),
#if defined(DISTRHO_OS_WINDOWS) #if defined(DISTRHO_OS_WINDOWS)
hwnd(0)
hwnd(nullptr),
hwndParent(nullptr)
#elif defined(DISTRHO_OS_MAC) #elif defined(DISTRHO_OS_MAC)
fNeedsIdle(parentId == 0), fNeedsIdle(parentId == 0),
mView(nullptr), mView(nullptr),
mWindow(nullptr)
mWindow(nullptr),
mParentWindow(nullptr)
#else #else
xDisplay(nullptr), xDisplay(nullptr),
xWindow(0) xWindow(0)
@@ -344,22 +349,6 @@ struct Window::PrivateData {
fModal.enabled = true; fModal.enabled = true;
fModal.parent->fModal.childFocus = this; fModal.parent->fModal.childFocus = this;


#ifdef DISTRHO_OS_WINDOWS
// Center this window
PuglInternals* const parentImpl = fModal.parent->fView->impl;

RECT curRect;
RECT parentRect;
GetWindowRect(hwnd, &curRect);
GetWindowRect(parentImpl->hwnd, &parentRect);

int x = parentRect.left+(parentRect.right-curRect.right)/2;
int y = parentRect.top +(parentRect.bottom-curRect.bottom)/2;

SetWindowPos(hwnd, 0, x, y, 0, 0, SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER);
UpdateWindow(hwnd);
#endif

fModal.parent->setVisible(true); fModal.parent->setVisible(true);
setVisible(true); setVisible(true);


@@ -436,25 +425,65 @@ struct Window::PrivateData {


#if defined(DISTRHO_OS_WINDOWS) #if defined(DISTRHO_OS_WINDOWS)
if (yesNo) if (yesNo)
ShowWindow(hwnd, fFirstInit ? SW_SHOWNORMAL : SW_RESTORE);
{
if (fFirstInit)
{
RECT rectChild, rectParent;

if (hwndParent != nullptr &&
GetWindowRect(hwnd, &rectChild) &&
GetWindowRect(hwndParent, &rectParent))
{
SetWindowPos(hwnd, hwndParent,
rectParent.left + (rectChild.right-rectChild.left)/2,
rectParent.top + (rectChild.bottom-rectChild.top)/2,
0, 0, SWP_SHOWWINDOW|SWP_NOSIZE);
}
else
{
ShowWindow(hwnd, SW_SHOWNORMAL);
}
}
else
{
ShowWindow(hwnd, SW_RESTORE);
}
}
else else
{
ShowWindow(hwnd, SW_HIDE); ShowWindow(hwnd, SW_HIDE);
}


UpdateWindow(hwnd); UpdateWindow(hwnd);
#elif defined(DISTRHO_OS_MAC) #elif defined(DISTRHO_OS_MAC)
if (yesNo) if (yesNo)
{ {
if (mWindow != nullptr) if (mWindow != nullptr)
{
if (mParentWindow != nullptr)
[mParentWindow addChildWindow:mWindow
ordered:NSWindowAbove];

[mWindow setIsVisible:YES]; [mWindow setIsVisible:YES];
}
else else
{
[mView setHidden:NO]; [mView setHidden:NO];
}
} }
else else
{ {
if (mWindow != nullptr) if (mWindow != nullptr)
{
if (mParentWindow != nullptr)
[mParentWindow removeChildWindow:mWindow];

[mWindow setIsVisible:NO]; [mWindow setIsVisible:NO];
}
else else
{
[mView setHidden:YES]; [mView setHidden:YES];
}
} }
#else #else
if (yesNo) if (yesNo)
@@ -626,14 +655,14 @@ struct Window::PrivateData {
DISTRHO_SAFE_ASSERT_RETURN(winId != 0,); DISTRHO_SAFE_ASSERT_RETURN(winId != 0,);


#if defined(DISTRHO_OS_WINDOWS) #if defined(DISTRHO_OS_WINDOWS)
// TODO
hwndParent = (HWND)winId;
SetWindowLongPtr(hwnd, GWLP_HWNDPARENT, (LONG_PTR)winId);
#elif defined(DISTRHO_OS_MAC) #elif defined(DISTRHO_OS_MAC)
NSWindow* const window = [NSApp windowWithWindowNumber:winId];
DISTRHO_SAFE_ASSERT_RETURN(window != nullptr,);
NSWindow* const parentWindow = [NSApp windowWithWindowNumber:winId];
DISTRHO_SAFE_ASSERT_RETURN(parentWindow != nullptr,);


[window addChildWindow:mWindow
ordered:NSWindowAbove];
[mWindow makeKeyWindow];
[parentWindow addChildWindow:mWindow
ordered:NSWindowAbove];
#else #else
XSetTransientForHint(xDisplay, xWindow, static_cast< ::Window>(winId)); XSetTransientForHint(xDisplay, xWindow, static_cast< ::Window>(winId));
#endif #endif
@@ -984,11 +1013,13 @@ struct Window::PrivateData {
} fModal; } fModal;


#if defined(DISTRHO_OS_WINDOWS) #if defined(DISTRHO_OS_WINDOWS)
HWND hwnd;
HWND hwnd;
HWND hwndParent;
#elif defined(DISTRHO_OS_MAC) #elif defined(DISTRHO_OS_MAC)
bool fNeedsIdle; bool fNeedsIdle;
PuglOpenGLView* mView; PuglOpenGLView* mView;
id mWindow; id mWindow;
id mParentWindow;
#else #else
Display* xDisplay; Display* xDisplay;
::Window xWindow; ::Window xWindow;


+ 1
- 1
source/modules/rtmidi/RtMidi.cpp View File

@@ -931,7 +931,7 @@ void MidiOutCore :: initialize( const std::string& clientName )
OSStatus result = MIDIClientCreate(name, NULL, NULL, &client ); OSStatus result = MIDIClientCreate(name, NULL, NULL, &client );
if ( result != noErr ) { if ( result != noErr ) {
std::ostringstream ost; std::ostringstream ost;
ost << "MidiInCore::initialize: error creating OS-X MIDI client object (" << result << ").";
ost << "MidiOutCore::initialize: error creating OS-X MIDI client object (" << result << ").";
errorString_ = ost.str(); errorString_ = ost.str();
error( RtMidiError::DRIVER_ERROR, errorString_ ); error( RtMidiError::DRIVER_ERROR, errorString_ );
return; return;


+ 1
- 2
source/native-plugins/_all.all.c View File

@@ -1,6 +1,6 @@
/* /*
* Carla Native Plugins * Carla Native Plugins
* Copyright (C) 2012-2017 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2012-2018 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -19,7 +19,6 @@
#include "CarlaNative.h" #include "CarlaNative.h"


#ifdef CARLA_OS_WIN #ifdef CARLA_OS_WIN
# define DISABLE_PLUGINS_FOR_WINDOWS_BUILD
# undef HAVE_PYQT # undef HAVE_PYQT
#endif #endif




+ 1
- 2
source/native-plugins/_all.base.c View File

@@ -1,6 +1,6 @@
/* /*
* Carla Native Plugins * Carla Native Plugins
* Copyright (C) 2012-2017 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2012-2018 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -19,7 +19,6 @@
#include "CarlaNative.h" #include "CarlaNative.h"


#ifdef CARLA_OS_WIN #ifdef CARLA_OS_WIN
# define DISABLE_PLUGINS_FOR_WINDOWS_BUILD
# undef HAVE_PYQT # undef HAVE_PYQT
#endif #endif




+ 1
- 2
source/native-plugins/_data.all.cpp View File

@@ -1,6 +1,6 @@
/* /*
* Carla Native Plugins * Carla Native Plugins
* Copyright (C) 2012-2017 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2012-2018 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -20,7 +20,6 @@
#include "CarlaUtils.hpp" #include "CarlaUtils.hpp"


#ifdef CARLA_OS_WIN #ifdef CARLA_OS_WIN
# define DISABLE_PLUGINS_FOR_WINDOWS_BUILD
# undef HAVE_PYQT # undef HAVE_PYQT
#endif #endif




+ 1
- 2
source/native-plugins/_data.base.cpp View File

@@ -1,6 +1,6 @@
/* /*
* Carla Native Plugins * Carla Native Plugins
* Copyright (C) 2012-2017 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2012-2018 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -20,7 +20,6 @@
#include "CarlaUtils.hpp" #include "CarlaUtils.hpp"


#ifdef CARLA_OS_WIN #ifdef CARLA_OS_WIN
# define DISABLE_PLUGINS_FOR_WINDOWS_BUILD
# undef HAVE_PYQT # undef HAVE_PYQT
#endif #endif




+ 5
- 1
source/native-plugins/external/Makefile View File

@@ -35,8 +35,12 @@ OBJS_all += \
ifeq ($(HAVE_ZYN_DEPS),true) ifeq ($(HAVE_ZYN_DEPS),true)
OBJS_all += \ OBJS_all += \
$(OBJDIR)/zynaddsubfx-fx.cpp.o \ $(OBJDIR)/zynaddsubfx-fx.cpp.o \
$(OBJDIR)/zynaddsubfx-src.cpp.o \
$(OBJDIR)/zynaddsubfx-src.cpp.o

ifneq ($(SKIP_ZYN_SYNTH),true)
OBJS_all += \
$(OBJDIR)/zynaddsubfx-synth.cpp.o $(OBJDIR)/zynaddsubfx-synth.cpp.o
endif


ifeq ($(HAVE_ZYN_UI_DEPS),true) ifeq ($(HAVE_ZYN_UI_DEPS),true)
TARGETS += resources/zynaddsubfx-ui$(APP_EXT) TARGETS += resources/zynaddsubfx-ui$(APP_EXT)


+ 7
- 0
source/native-plugins/external/Makefile.mk View File

@@ -12,6 +12,7 @@ endif


ifeq ($(MACOS_OR_WIN32),true) ifeq ($(MACOS_OR_WIN32),true)
HAVE_DGL = true HAVE_DGL = true
SKIP_ZYN_SYNTH = true
else else
HAVE_DGL = $(shell pkg-config --exists gl x11 && echo true) HAVE_DGL = $(shell pkg-config --exists gl x11 && echo true)
endif endif
@@ -98,7 +99,9 @@ endif
DPF_FLAGS = -I$(CWDE)/modules/distrho DPF_FLAGS = -I$(CWDE)/modules/distrho


ifeq ($(HAVE_DGL),true) ifeq ($(HAVE_DGL),true)
ifneq ($(MACOS_OR_WIN32),true)
DPF_FLAGS += $(shell pkg-config --cflags gl) DPF_FLAGS += $(shell pkg-config --cflags gl)
endif
DPF_FLAGS += -I$(CWDE)/modules/dgl -DDGL_NAMESPACE=CarlaDGL -DDGL_FILE_BROWSER_DISABLED -DDGL_NO_SHARED_RESOURCES DPF_FLAGS += -I$(CWDE)/modules/dgl -DDGL_NAMESPACE=CarlaDGL -DDGL_FILE_BROWSER_DISABLED -DDGL_NO_SHARED_RESOURCES
endif endif


@@ -123,6 +126,9 @@ ZYN_DSP_FLAGS += $(shell pkg-config --cflags fftw3 zlib)
ZYN_DSP_LIBS = $(ZYN_BASE_LIBS) ZYN_DSP_LIBS = $(ZYN_BASE_LIBS)
ZYN_DSP_LIBS += $(shell pkg-config --libs fftw3 zlib) ZYN_DSP_LIBS += $(shell pkg-config --libs fftw3 zlib)


ifeq ($(SKIP_ZYN_SYNTH),true)
BASE_FLAGS += -DSKIP_ZYN_SYNTH
else
# UI flags # UI flags
ifeq ($(HAVE_ZYN_UI_DEPS),true) ifeq ($(HAVE_ZYN_UI_DEPS),true)


@@ -154,6 +160,7 @@ else # HAVE_ZYN_UI_DEPS


ZYN_DSP_FLAGS += -DNO_UI ZYN_DSP_FLAGS += -DNO_UI


endif # SKIP_ZYN_SYNTH
endif # HAVE_ZYN_UI_DEPS endif # HAVE_ZYN_UI_DEPS
endif # HAVE_ZYN_DEPS endif # HAVE_ZYN_DEPS




+ 2
- 2
source/native-plugins/external/_all.c View File

@@ -1,6 +1,6 @@
/* /*
* Carla Native Plugins * Carla Native Plugins
* Copyright (C) 2012-2017 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2012-2018 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -62,7 +62,7 @@ void carla_register_all_native_external_plugins(void)
#ifdef HAVE_ZYN_DEPS #ifdef HAVE_ZYN_DEPS
// ZynAddSubFX // ZynAddSubFX
carla_register_native_plugin_zynaddsubfx_fx(); carla_register_native_plugin_zynaddsubfx_fx();
# ifndef DISABLE_PLUGINS_FOR_WINDOWS_BUILD
# ifndef SKIP_ZYN_SYNTH
carla_register_native_plugin_zynaddsubfx_synth(); carla_register_native_plugin_zynaddsubfx_synth();
# endif # endif
#endif #endif


+ 3
- 3
source/native-plugins/external/_data.cpp View File

@@ -1,6 +1,6 @@
/* /*
* Carla Native Plugins * Carla Native Plugins
* Copyright (C) 2012-2017 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2012-2018 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -356,7 +356,7 @@ static const NativePluginDescriptor sNativePluginDescriptors[] = {
/* copyright */ "GNU GPL v2+", /* copyright */ "GNU GPL v2+",
DESCFUNCS DESCFUNCS
}, },
# ifndef DISABLE_PLUGINS_FOR_WINDOWS_BUILD
# ifndef SKIP_ZYN_SYNTH
{ {
/* category */ NATIVE_PLUGIN_CATEGORY_SYNTH, /* category */ NATIVE_PLUGIN_CATEGORY_SYNTH,
/* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH
@@ -381,7 +381,7 @@ static const NativePluginDescriptor sNativePluginDescriptors[] = {
/* copyright */ "GNU GPL v2+", /* copyright */ "GNU GPL v2+",
DESCFUNCS DESCFUNCS
}, },
# endif // ! DISABLE_PLUGINS_FOR_WINDOWS_BUILD
# endif // ! SKIP_ZYN_SYNTH
#endif // HAVE_ZYN_DEPS #endif // HAVE_ZYN_DEPS


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


+ 114
- 81
source/native-plugins/zynaddsubfx-src.cpp View File

@@ -1,6 +1,6 @@
/* /*
* Carla Native Plugins * Carla Native Plugins
* Copyright (C) 2012-2016 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2012-2018 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -26,16 +26,28 @@
# pragma clang diagnostic push # pragma clang diagnostic push
# pragma clang diagnostic ignored "-Winconsistent-missing-override" # pragma clang diagnostic ignored "-Winconsistent-missing-override"
# pragma clang diagnostic ignored "-Wunused-private-field" # pragma clang diagnostic ignored "-Wunused-private-field"
#elif defined(__GNUC__) && (__GNUC__ >= 6)
#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
# pragma GCC diagnostic push # pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wshift-negative-value"
# pragma GCC diagnostic ignored "-Wmisleading-indentation"
# pragma GCC diagnostic ignored "-Wliteral-suffix"
# if __GNUC__ >= 6
# pragma GCC diagnostic ignored "-Wshift-negative-value"
# pragma GCC diagnostic ignored "-Wmisleading-indentation"
# endif
#endif #endif


// base c-style headers // base c-style headers
#include "zynaddsubfx/tlsf/tlsf.h" #include "zynaddsubfx/tlsf/tlsf.h"
#include "zynaddsubfx/rtosc/rtosc.h" #include "zynaddsubfx/rtosc/rtosc.h"


#ifdef SKIP_ZYN_SYNTH
# define PRId64 P_INT64
# define PRIi64 P_INT64
# define PRIx64 P_UINT64
# define PRId32 "%d"
# define PRIi32 "%i"
# define PRIx32 "%x"
#endif

// C-code includes // C-code includes
extern "C" { extern "C" {
#include "zynaddsubfx/tlsf/tlsf.c" #include "zynaddsubfx/tlsf/tlsf.c"
@@ -53,6 +65,9 @@ extern "C" {


#include "zynaddsubfx/rtosc/dispatch.c" #include "zynaddsubfx/rtosc/dispatch.c"
#include "zynaddsubfx/rtosc/rtosc.c" #include "zynaddsubfx/rtosc/rtosc.c"
#ifdef CARLA_OS_WIN
# include "zynaddsubfx/rtosc/pretty-format.c"
#endif
} }


// rtosc includes // rtosc includes
@@ -71,6 +86,7 @@ extern "C" {
// zynaddsubfx includes // zynaddsubfx includes
#include "zynaddsubfx/version.cpp" #include "zynaddsubfx/version.cpp"


#ifndef SKIP_ZYN_SYNTH
#include "zynaddsubfx/Containers/MultiPseudoStack.cpp" #include "zynaddsubfx/Containers/MultiPseudoStack.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
@@ -95,7 +111,9 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/DSP/AnalogFilter.cpp"
#include "zynaddsubfx/Misc/Bank.cpp"
#undef INSTRUMENT_EXTENSION
#undef FORCE_BANK_DIR_FILE
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -103,7 +121,9 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/DSP/FFTwrapper.cpp"
#define INSTRUMENT_EXTENSION INSTRUMENT_EXTENSION_DB
#include "zynaddsubfx/Misc/BankDb.cpp"
#undef INSTRUMENT_EXTENSION
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -111,7 +131,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/DSP/Filter.cpp"
#include "zynaddsubfx/Misc/CallbackRepeater.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -119,7 +139,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/DSP/FormantFilter.cpp"
#include "zynaddsubfx/Misc/Config.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -127,15 +147,15 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/DSP/SVFilter.cpp"
#undef rBegin
#include "zynaddsubfx/Misc/Master.cpp"
#undef rObject #undef rObject
#undef rStdString #undef rStdString
#undef rStdStringCb #undef rStdStringCb
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/DSP/Unison.cpp"
#include "zynaddsubfx/Misc/Microtonal.cpp"
#undef MAX_LINE_SIZE
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -143,7 +163,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Effects/Alienwah.cpp"
#include "zynaddsubfx/Misc/MiddleWare.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -151,7 +171,8 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Effects/Chorus.cpp"
#include "zynaddsubfx/Misc/Part.cpp"
#undef CLONE
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -159,7 +180,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Effects/Distorsion.cpp"
#include "zynaddsubfx/Misc/PresetExtractor.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -167,7 +188,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Effects/DynamicFilter.cpp"
#include "zynaddsubfx/Misc/Recorder.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -175,8 +196,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Effects/Echo.cpp"
#undef MAX_DELAY
#include "zynaddsubfx/Misc/WavFile.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -184,7 +204,8 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Effects/Effect.cpp"
#include "zynaddsubfx/Params/ADnoteParameters.cpp"
#undef EXPAND
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -192,7 +213,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Effects/EffectLFO.cpp"
#include "zynaddsubfx/Params/Controller.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -200,7 +221,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Effects/EffectMgr.cpp"
#include "zynaddsubfx/Params/EnvelopeParams.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -208,7 +229,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Effects/EQ.cpp"
#include "zynaddsubfx/Params/LFOParams.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -216,10 +237,9 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Effects/Phaser.cpp"
#undef PHASER_LFO_SHAPE
#undef ONE_
#undef ZERO_
#include "zynaddsubfx/Params/PADnoteParameters.cpp"
#undef PC
#undef P_C
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -227,7 +247,9 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Effects/Reverb.cpp"
#include "zynaddsubfx/Params/SUBnoteParameters.cpp"
#undef doPaste
#undef doPPaste
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -235,7 +257,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Misc/Allocator.cpp"
#include "zynaddsubfx/Synth/ADnote.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -243,9 +265,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Misc/Bank.cpp"
#undef INSTRUMENT_EXTENSION
#undef FORCE_BANK_DIR_FILE
#include "zynaddsubfx/Synth/Envelope.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -253,9 +273,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#define INSTRUMENT_EXTENSION INSTRUMENT_EXTENSION_DB
#include "zynaddsubfx/Misc/BankDb.cpp"
#undef INSTRUMENT_EXTENSION
#include "zynaddsubfx/Synth/LFO.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -263,7 +281,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Misc/CallbackRepeater.cpp"
#include "zynaddsubfx/Synth/ModFilter.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -271,7 +289,13 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Misc/Config.cpp"
#include "zynaddsubfx/Synth/OscilGen.cpp"
#undef PC
#undef DIFF
#undef PRESERVE
#undef RESTORE
#undef FUNC
#undef FILTER
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -279,15 +303,15 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Misc/Master.cpp"
#include "zynaddsubfx/Synth/PADnote.cpp"
#undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
#undef rStdStringCb #undef rStdStringCb
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Misc/Microtonal.cpp"
#undef MAX_LINE_SIZE
#include "zynaddsubfx/Synth/Resonance.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -295,7 +319,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Misc/MiddleWare.cpp"
#include "zynaddsubfx/Synth/SUBnote.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -303,8 +327,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Misc/Part.cpp"
#undef CLONE
#include "zynaddsubfx/Synth/SynthNote.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -312,7 +335,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Misc/PresetExtractor.cpp"
#include "zynaddsubfx/Synth/WatchPoint.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -320,7 +343,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Misc/Recorder.cpp"
#include "zynaddsubfx/UI/ConnectionDummy.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -328,7 +351,10 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Misc/Util.cpp"
#include "zynaddsubfx/globals.cpp"
#endif // ! SKIP_ZYN_SYNTH

#include "zynaddsubfx/DSP/AnalogFilter.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -336,7 +362,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Misc/WavFile.cpp"
#include "zynaddsubfx/DSP/FFTwrapper.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -344,7 +370,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Misc/WaveShapeSmps.cpp"
#include "zynaddsubfx/DSP/Filter.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -352,7 +378,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Misc/XMLwrapper.cpp"
#include "zynaddsubfx/DSP/FormantFilter.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -360,8 +386,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Params/ADnoteParameters.cpp"
#undef EXPAND
#include "zynaddsubfx/DSP/SVFilter.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -369,7 +394,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Params/Controller.cpp"
#include "zynaddsubfx/DSP/Unison.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -377,7 +402,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Params/EnvelopeParams.cpp"
#include "zynaddsubfx/Effects/Alienwah.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -385,7 +410,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Params/FilterParams.cpp"
#include "zynaddsubfx/Effects/Chorus.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -393,7 +418,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Params/LFOParams.cpp"
#include "zynaddsubfx/Effects/Distorsion.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -401,9 +426,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Params/PADnoteParameters.cpp"
#undef PC
#undef P_C
#include "zynaddsubfx/Effects/DynamicFilter.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -411,7 +434,8 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Params/Presets.cpp"
#include "zynaddsubfx/Effects/Echo.cpp"
#undef MAX_DELAY
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -419,7 +443,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Params/PresetsArray.cpp"
#include "zynaddsubfx/Effects/Effect.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -427,7 +451,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Params/PresetsStore.cpp"
#include "zynaddsubfx/Effects/EffectLFO.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -435,9 +459,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Params/SUBnoteParameters.cpp"
#undef doPaste
#undef doPPaste
#include "zynaddsubfx/Effects/EffectMgr.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -445,7 +467,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Synth/ADnote.cpp"
#include "zynaddsubfx/Effects/EQ.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -453,7 +475,10 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Synth/Envelope.cpp"
#include "zynaddsubfx/Effects/Phaser.cpp"
#undef PHASER_LFO_SHAPE
#undef ONE_
#undef ZERO_
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -461,7 +486,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Synth/LFO.cpp"
#include "zynaddsubfx/Effects/Reverb.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -469,7 +494,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Synth/ModFilter.cpp"
#include "zynaddsubfx/Misc/Allocator.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -477,13 +502,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Synth/OscilGen.cpp"
#undef PC
#undef DIFF
#undef PRESERVE
#undef RESTORE
#undef FUNC
#undef FILTER
#include "zynaddsubfx/Misc/Util.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -491,7 +510,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Synth/PADnote.cpp"
#include "zynaddsubfx/Misc/WaveShapeSmps.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -499,7 +518,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Synth/Resonance.cpp"
#include "zynaddsubfx/Misc/XMLwrapper.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -507,7 +526,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Synth/SUBnote.cpp"
#include "zynaddsubfx/Params/FilterParams.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -515,7 +534,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Synth/SynthNote.cpp"
#include "zynaddsubfx/Params/Presets.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -523,7 +542,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/Synth/WatchPoint.cpp"
#include "zynaddsubfx/Params/PresetsArray.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -531,7 +550,7 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/UI/ConnectionDummy.cpp"
#include "zynaddsubfx/Params/PresetsStore.cpp"
#undef rBegin #undef rBegin
#undef rObject #undef rObject
#undef rStdString #undef rStdString
@@ -539,14 +558,13 @@ extern "C" {
#undef rChangeCb #undef rChangeCb
#define rChangeCb #define rChangeCb


#include "zynaddsubfx/globals.cpp"

#if defined(__clang__) #if defined(__clang__)
# pragma clang diagnostic pop # pragma clang diagnostic pop
#elif defined(__GNUC__) && (__GNUC__ >= 6) #elif defined(__GNUC__) && (__GNUC__ >= 6)
# pragma GCC diagnostic pop # pragma GCC diagnostic pop
#endif #endif


#ifndef SKIP_ZYN_SYNTH
// Dummy variables and functions for linking purposes // Dummy variables and functions for linking purposes
namespace zyncarla { namespace zyncarla {
class WavFile; class WavFile;
@@ -563,3 +581,18 @@ namespace Nio {
void waveStop(){} void waveStop(){}
} }
} }
#endif // ! SKIP_ZYN_SYNTH

#ifdef CARLA_OS_WIN
rtosc_version rtosc_current_version()
{
return ((rtosc_version) { 0, 0, 0 } );
}

void rtosc_version_print_to_12byte_str(const rtosc_version* v,
char* _12bytes)
{
snprintf(_12bytes, 12, "%u.%u.%u",
(unsigned)v->major, (unsigned)v->minor, (unsigned)v->revision);
}
#endif

+ 4
- 4
source/native-plugins/zynaddsubfx/rtosc/pretty-format.c View File

@@ -23,8 +23,8 @@ static int asnprintf(char* str, size_t size, const char* format, ...)
return written; return written;
} }


static const rtosc_print_options* default_print_options
= &((rtosc_print_options) { true, 2, " ", 80});
static const rtosc_print_options default_print_options
= ((rtosc_print_options) { true, 2, " ", 80});


/** /**
* Return the char that represents the escape sequence * Return the char that represents the escape sequence
@@ -73,7 +73,7 @@ size_t rtosc_print_arg_val(const rtosc_arg_val_t *arg,
{ {
size_t wrt = 0; size_t wrt = 0;
if(!opt) if(!opt)
opt = default_print_options;
opt = &default_print_options;
assert(arg); assert(arg);
const rtosc_arg_t* val = &arg->val; const rtosc_arg_t* val = &arg->val;


@@ -301,7 +301,7 @@ size_t rtosc_print_arg_vals(const rtosc_arg_val_t *args, size_t n,
size_t wrt=0; size_t wrt=0;
int args_written_this_line = (cols_used) ? 1 : 0; int args_written_this_line = (cols_used) ? 1 : 0;
if(!opt) if(!opt)
opt = default_print_options;
opt = &default_print_options;
size_t sep_len = strlen(opt->sep); size_t sep_len = strlen(opt->sep);
char* last_sep = buffer - 1; char* last_sep = buffer - 1;
for(size_t i = 0; i < n; ++i) for(size_t i = 0; i < n; ++i)


+ 6
- 0
source/plugin/Makefile View File

@@ -81,6 +81,12 @@ LINK_FLAGS += $(LINUXSAMPLER_LIBS)
LINK_FLAGS += $(MAGIC_LIBS) LINK_FLAGS += $(MAGIC_LIBS)
LINK_FLAGS += $(X11_LIBS) LINK_FLAGS += $(X11_LIBS)


ifeq ($(MACOS),true)
# NOTE: this assumes only LV2 version will be built
SHARED += -Wl,-exported_symbol,_lv2_descriptor
SHARED += -Wl,-exported_symbol,_lv2ui_descriptor
endif

# ---------------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------------------------


TARGETS = \ TARGETS = \


+ 127
- 18
source/utils/CarlaPluginUI.cpp View File

@@ -1,6 +1,6 @@
/* /*
* Carla Plugin UI * Carla Plugin UI
* Copyright (C) 2014-2017 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2014-2018 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -33,6 +33,10 @@
# include <ctime> # include <ctime>
#endif #endif


#ifndef CARLA_PLUGIN_UI_CLASS_PREFIX
# error CARLA_PLUGIN_UI_CLASS_PREFIX undefined
#endif

// --------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------
// X11 // X11


@@ -359,6 +363,12 @@ private:


#ifdef CARLA_OS_MAC #ifdef CARLA_OS_MAC


#ifdef BUILD_BRIDGE
# define CarlaPluginWindow CARLA_JOIN_MACRO(CarlaPluginWindowBridged, CARLA_PLUGIN_UI_CLASS_PREFIX)
#else
# define CarlaPluginWindow CARLA_JOIN_MACRO(CarlaPluginWindow, CARLA_PLUGIN_UI_CLASS_PREFIX)
#endif

@interface CarlaPluginWindow : NSWindow @interface CarlaPluginWindow : NSWindow
{ {
@public @public
@@ -443,8 +453,7 @@ public:
CocoaPluginUI(Callback* const cb, const uintptr_t parentId, const bool isResizable) noexcept CocoaPluginUI(Callback* const cb, const uintptr_t parentId, const bool isResizable) noexcept
: CarlaPluginUI(cb, isResizable), : CarlaPluginUI(cb, isResizable),
fView(nullptr), fView(nullptr),
fWindow(0),
fParentId(parentId)
fWindow(0)
{ {
[NSAutoreleasePool new]; [NSAutoreleasePool new];
[NSApplication sharedApplication]; [NSApplication sharedApplication];
@@ -495,9 +504,6 @@ public:


[fView setHidden:NO]; [fView setHidden:NO];
[fWindow setIsVisible:YES]; [fWindow setIsVisible:YES];

if (fParentId != 0)
setTransientWinId(fParentId);
} }


void hide() override void hide() override
@@ -559,12 +565,11 @@ public:
{ {
CARLA_SAFE_ASSERT_RETURN(fWindow != 0,); CARLA_SAFE_ASSERT_RETURN(fWindow != 0,);


NSWindow* window = [NSApp windowWithWindowNumber:winId];
CARLA_SAFE_ASSERT_RETURN(window != nullptr,);
NSWindow* const parentWindow = [NSApp windowWithWindowNumber:winId];
CARLA_SAFE_ASSERT_RETURN(parentWindow != nullptr,);


[window addChildWindow:fWindow
ordered:NSWindowAbove];
[fWindow makeKeyWindow];
[parentWindow addChildWindow:fWindow
ordered:NSWindowAbove];
} }


void setChildWindow(void* const winId) override void setChildWindow(void* const winId) override
@@ -585,7 +590,6 @@ public:
private: private:
NSView* fView; NSView* fView;
id fWindow; id fWindow;
uintptr_t fParentId;


CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CocoaPluginUI) CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CocoaPluginUI)
}; };
@@ -606,7 +610,8 @@ class WindowsPluginUI : public CarlaPluginUI
public: public:
WindowsPluginUI(Callback* const cb, const uintptr_t parentId, const bool isResizable) noexcept WindowsPluginUI(Callback* const cb, const uintptr_t parentId, const bool isResizable) noexcept
: CarlaPluginUI(cb, isResizable), : CarlaPluginUI(cb, isResizable),
fWindow(0),
fWindow(nullptr),
fParentWindow(nullptr),
fIsVisible(false), fIsVisible(false),
fFirstShow(true) fFirstShow(true)
{ {
@@ -675,9 +680,31 @@ public:
{ {
CARLA_SAFE_ASSERT_RETURN(fWindow != 0,); CARLA_SAFE_ASSERT_RETURN(fWindow != 0,);


ShowWindow(fWindow, fFirstShow ? SW_SHOWNORMAL : SW_RESTORE);
if (fFirstShow)
{
fFirstShow = false;
RECT rectChild, rectParent;

if (fParentWindow != nullptr &&
GetWindowRect(fWindow, &rectChild) &&
GetWindowRect(fParentWindow, &rectParent))
{
SetWindowPos(fWindow, fParentWindow,
rectParent.left + (rectChild.right-rectChild.left)/2,
rectParent.top + (rectChild.bottom-rectChild.top)/2,
0, 0, SWP_SHOWWINDOW|SWP_NOSIZE);
}
else
{
ShowWindow(fWindow, SW_SHOWNORMAL);
}
}
else
{
ShowWindow(fWindow, SW_RESTORE);
}

fIsVisible = true; fIsVisible = true;
fFirstShow = false;
UpdateWindow(fWindow); UpdateWindow(fWindow);
} }


@@ -769,7 +796,8 @@ public:
{ {
CARLA_SAFE_ASSERT_RETURN(fWindow != 0,); CARLA_SAFE_ASSERT_RETURN(fWindow != 0,);


// TODO
fParentWindow = (HWND)winId;
SetWindowLongPtr(fWindow, GWLP_HWNDPARENT, (LONG_PTR)winId);
} }


void setChildWindow(void* const winId) override void setChildWindow(void* const winId) override
@@ -789,6 +817,7 @@ public:


private: private:
HWND fWindow; HWND fWindow;
HWND fParentWindow;
WNDCLASS fWindowClass; WNDCLASS fWindowClass;


bool fIsVisible; bool fIsVisible;
@@ -824,6 +853,7 @@ LRESULT CALLBACK wndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)


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


#ifndef BUILD_BRIDGE
bool CarlaPluginUI::tryTransientWinIdMatch(const uintptr_t pid, const char* const uiTitle, const uintptr_t winId, const bool centerUI) bool CarlaPluginUI::tryTransientWinIdMatch(const uintptr_t pid, const char* const uiTitle, const uintptr_t winId, const bool centerUI)
{ {
CARLA_SAFE_ASSERT_RETURN(uiTitle != nullptr && uiTitle[0] != '\0', true); CARLA_SAFE_ASSERT_RETURN(uiTitle != nullptr && uiTitle[0] != '\0', true);
@@ -1028,11 +1058,90 @@ bool CarlaPluginUI::tryTransientWinIdMatch(const uintptr_t pid, const char* cons


XFlush(sd.display); XFlush(sd.display);
return true; return true;
#else
#endif

#ifdef CARLA_OS_MAC
uint const hints = kCGWindowListOptionOnScreenOnly|kCGWindowListExcludeDesktopElements;

CFArrayRef const windowListRef = CGWindowListCopyWindowInfo(hints, kCGNullWindowID);
const NSArray* const windowList = (const NSArray*)windowListRef;

int windowToMap, windowWithPID = 0, windowWithNameAndPID = 0;

for (NSDictionary* const entry in windowList)
{
if ([entry[(id)kCGWindowSharingState] intValue] == kCGWindowSharingNone)
continue;

NSString* const windowName = entry[(id)kCGWindowName];
int const windowNumber = [entry[(id)kCGWindowNumber] intValue];
uintptr_t const windowPID = [entry[(id)kCGWindowOwnerPID] intValue];

if (windowPID != pid)
continue;

windowWithPID = windowNumber;

if (windowName != nullptr && std::strcmp([windowName UTF8String], uiTitle) == 0)
windowWithNameAndPID = windowNumber;
}

CFRelease(windowListRef);

if (windowWithNameAndPID != 0)
{
carla_stdout("Match found using pid and name");
windowToMap = windowWithNameAndPID;
}
else if (windowWithPID != 0)
{
carla_stdout("Match found using pid");
windowToMap = windowWithPID;
}
else
{
return false;
}

NSWindow* const parentWindow = [NSApp windowWithWindowNumber:winId];
CARLA_SAFE_ASSERT_RETURN(parentWindow != nullptr, false);

[parentWindow orderWindow:NSWindowBelow
relativeTo:windowToMap];
return true; return true;
(void)pid; (void)centerUI;
#endif #endif

#ifdef CARLA_OS_WIN
if (HWND const childWindow = FindWindowA(nullptr, uiTitle))
{
HWND const parentWindow = (HWND)winId;
SetWindowLongPtr(childWindow, GWLP_HWNDPARENT, (LONG_PTR)parentWindow);

if (centerUI)
{
RECT rectChild, rectParent;

if (GetWindowRect(childWindow, &rectChild) && GetWindowRect(parentWindow, &rectParent))
{
SetWindowPos(childWindow, parentWindow,
rectParent.left + (rectChild.right-rectChild.left)/2,
rectParent.top + (rectChild.bottom-rectChild.top)/2,
0, 0, SWP_NOSIZE);
}
}

carla_stdout("Match found using window name");
return true;
}

return false;
#endif

// fallback, may be unused
return true;
(void)pid; (void)centerUI;
} }
#endif // BUILD_BRIDGE


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




+ 3
- 1
source/utils/CarlaPluginUI.hpp View File

@@ -1,6 +1,6 @@
/* /*
* Carla Plugin UI * Carla Plugin UI
* Copyright (C) 2014 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2014-2018 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -46,7 +46,9 @@ public:
virtual void* getDisplay() const noexcept = 0; virtual void* getDisplay() const noexcept = 0;
#endif #endif


#ifndef BUILD_BRIDGE
static bool tryTransientWinIdMatch(const uintptr_t pid, const char* const uiTitle, const uintptr_t winId, const bool centerUI); static bool tryTransientWinIdMatch(const uintptr_t pid, const char* const uiTitle, const uintptr_t winId, const bool centerUI);
#endif


#ifdef CARLA_OS_MAC #ifdef CARLA_OS_MAC
static CarlaPluginUI* newCocoa(Callback*, uintptr_t, bool); static CarlaPluginUI* newCocoa(Callback*, uintptr_t, bool);


Loading…
Cancel
Save