@@ -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 | ||||
@@ -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 | ||||
@@ -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" | ||||
@@ -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 | |||||
} | } | ||||
# --------------------------------------------------------------------------------------------------------------------- | # --------------------------------------------------------------------------------------------------------------------- | ||||
@@ -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 |
@@ -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 | ||||
@@ -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 | ||||
# ------------------------------------------------------------------------------------ | |||||
# --------------------------------------------------------------------------------------------------------------------- |
@@ -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++ | ||||
@@ -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 | ||||
@@ -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++ | ||||
@@ -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 ®ion); | |||||
-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 | |||||
@@ -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 | ||||
@@ -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 | ||||
@@ -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" | ||||
@@ -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 | ||||
@@ -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 | ||||
@@ -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 | ||||
@@ -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> |
@@ -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" | ||||
@@ -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; | ||||
@@ -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 | ||||
@@ -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; | ||||
@@ -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"); | ||||
} | } | ||||
@@ -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 | ||||
@@ -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; | ||||
@@ -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(); | ||||
@@ -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; | ||||
} | } | ||||
@@ -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; | ||||
} | } | ||||
@@ -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" | ||||
// ------------------------------------------------------------------------- | // ------------------------------------------------------------------------- |
@@ -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) | ||||
# ---------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------- | ||||
@@ -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() | ||||
@@ -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 | ||||
@@ -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; | ||||
@@ -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,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,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,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,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 | ||||
@@ -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) | ||||
@@ -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 | ||||
@@ -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 | ||||
@@ -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 | ||||
// -------------------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------------------- | ||||
@@ -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 |
@@ -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) | ||||
@@ -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 = \ | ||||
@@ -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 | |||||
// ----------------------------------------------------- | // ----------------------------------------------------- | ||||
@@ -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); | ||||