Signed-off-by: falkTX <falktx@gmail.com>tags/v2.1-alpha1-winvst
| @@ -63,10 +63,8 @@ ALL_LIBS += $(MODULEDIR)/juce_audio_processors.a | |||
| ALL_LIBS += $(MODULEDIR)/juce_core.a | |||
| ALL_LIBS += $(MODULEDIR)/juce_data_structures.a | |||
| ALL_LIBS += $(MODULEDIR)/juce_events.a | |||
| ifeq ($(MACOS_OR_WIN32),true) | |||
| ALL_LIBS += $(MODULEDIR)/juce_graphics.a | |||
| ALL_LIBS += $(MODULEDIR)/juce_gui_basics.a | |||
| endif | |||
| ifeq ($(MACOS),true) | |||
| ALL_LIBS += $(MODULEDIR)/juce_gui_extra.a | |||
| endif | |||
| @@ -452,8 +452,11 @@ LILV_LIBS = -ldl -lm -lrt | |||
| RTMEMPOOL_LIBS = -lpthread -lrt | |||
| WATER_LIBS = -ldl -lpthread -lrt | |||
| ifeq ($(USING_JUCE),true) | |||
| JUCE_CORE_LIBS = -ldl -lpthread -lrt | |||
| JUCE_AUDIO_DEVICES_LIBS = $(shell pkg-config $(PKG_CONFIG_FLAGS) --libs alsa) | |||
| JUCE_CORE_LIBS = -ldl -lpthread -lrt | |||
| JUCE_EVENTS_LIBS = $(shell pkg-config $(PKG_CONFIG_FLAGS) --libs x11) | |||
| JUCE_GRAPHICS_LIBS = $(shell pkg-config $(PKG_CONFIG_FLAGS) --libs freetype2) | |||
| JUCE_GUI_BASICS_LIBS = $(shell pkg-config $(PKG_CONFIG_FLAGS) --libs x11 xext) | |||
| else | |||
| ifeq ($(HAVE_ALSA),true) | |||
| RTAUDIO_FLAGS += $(shell pkg-config $(PKG_CONFIG_FLAGS) --cflags alsa) -D__LINUX_ALSA__ | |||
| @@ -44,10 +44,8 @@ STANDALONE_LIBS += $(MODULEDIR)/juce_audio_processors.a | |||
| STANDALONE_LIBS += $(MODULEDIR)/juce_core.a | |||
| STANDALONE_LIBS += $(MODULEDIR)/juce_data_structures.a | |||
| STANDALONE_LIBS += $(MODULEDIR)/juce_events.a | |||
| ifeq ($(MACOS_OR_WIN32),true) | |||
| STANDALONE_LIBS += $(MODULEDIR)/juce_graphics.a | |||
| STANDALONE_LIBS += $(MODULEDIR)/juce_gui_basics.a | |||
| endif | |||
| ifeq ($(MACOS),true) | |||
| STANDALONE_LIBS += $(MODULEDIR)/juce_gui_extra.a | |||
| endif | |||
| @@ -76,10 +74,8 @@ STANDALONE_LINK_FLAGS += $(JUCE_AUDIO_PROCESSORS_LIBS) | |||
| STANDALONE_LINK_FLAGS += $(JUCE_CORE_LIBS) | |||
| STANDALONE_LINK_FLAGS += $(JUCE_DATA_STRUCTURES_LIBS) | |||
| STANDALONE_LINK_FLAGS += $(JUCE_EVENTS_LIBS) | |||
| ifeq ($(MACOS_OR_WIN32),true) | |||
| STANDALONE_LINK_FLAGS += $(JUCE_GRAPHICS_LIBS) | |||
| STANDALONE_LINK_FLAGS += $(JUCE_GUI_BASICS_LIBS) | |||
| endif | |||
| ifeq ($(MACOS),true) | |||
| STANDALONE_LINK_FLAGS += $(JUCE_GUI_EXTRA_LIBS) | |||
| endif | |||
| @@ -53,10 +53,8 @@ public: | |||
| fAudioBuffer(), | |||
| fMidiBuffer(), | |||
| fPosInfo(), | |||
| fChunk() | |||
| #if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) | |||
| , fWindow() | |||
| #endif | |||
| fChunk(), | |||
| fWindow() | |||
| { | |||
| carla_debug("CarlaPluginJuce::CarlaPluginJuce(%p, %i)", engine, id); | |||
| @@ -234,7 +232,6 @@ public: | |||
| // ------------------------------------------------------------------- | |||
| // Set data (internal stuff) | |||
| #if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) | |||
| void setName(const char* const newName) override | |||
| { | |||
| CarlaPlugin::setName(newName); | |||
| @@ -246,7 +243,6 @@ public: | |||
| fWindow->setName(uiName); | |||
| } | |||
| } | |||
| #endif | |||
| // ------------------------------------------------------------------- | |||
| // Set data (plugin-specific stuff) | |||
| @@ -269,10 +265,30 @@ public: | |||
| CARLA_SAFE_ASSERT_RETURN(data != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(dataSize > 0,); | |||
| if (isJuceSaveFormat(data, dataSize)) | |||
| { | |||
| const ScopedSingleProcessLocker spl(this, true); | |||
| fInstance->setStateInformation(data, static_cast<int>(dataSize)); | |||
| } | |||
| else | |||
| { | |||
| carla_stdout("NOTE: Loading plugin state in Carla compatibiity mode"); | |||
| uint8_t* const dataCompat = new uint8_t[dataSize + 160]; | |||
| std::memset(dataCompat, 0, 160); | |||
| std::memcpy(dataCompat+160, data, dataSize); | |||
| int32_t* const set = (int32_t*)dataCompat; | |||
| dataCompat[39] = dataSize; | |||
| set[0] = (int32_t)juce::ByteOrder::littleEndianInt("CcnK"); | |||
| set[2] = (int32_t)juce::ByteOrder::littleEndianInt("FBCh"); | |||
| set[3] = fxbSwap(1); | |||
| set[39] = fxbSwap(dataSize); | |||
| const ScopedSingleProcessLocker spl(this, true); | |||
| fInstance->setStateInformation(dataCompat, static_cast<int>(dataSize+160)); | |||
| } | |||
| #if defined(HAVE_LIBLO) && ! defined(BUILD_BRIDGE) | |||
| const bool sendOsc(pData->engine->isOscControlRegistered()); | |||
| @@ -302,7 +318,6 @@ public: | |||
| // ------------------------------------------------------------------- | |||
| // Set ui stuff | |||
| #if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) | |||
| void showCustomUI(const bool yesNo) override | |||
| { | |||
| CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr,); | |||
| @@ -346,7 +361,6 @@ public: | |||
| CarlaPlugin::uiIdle(); | |||
| } | |||
| #endif | |||
| // ------------------------------------------------------------------- | |||
| // Plugin state | |||
| @@ -542,13 +556,11 @@ public: | |||
| if (fDesc.isInstrument) | |||
| pData->hints |= PLUGIN_IS_SYNTH; | |||
| #if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) | |||
| if (fInstance->hasEditor()) | |||
| { | |||
| pData->hints |= PLUGIN_HAS_CUSTOM_UI; | |||
| pData->hints |= PLUGIN_NEEDS_UI_MAIN_THREAD; | |||
| } | |||
| #endif | |||
| if (aOuts > 0 && (aIns == aOuts || aIns == 1)) | |||
| pData->hints |= PLUGIN_CAN_DRYWET; | |||
| @@ -1224,6 +1236,8 @@ public: | |||
| fInstance->setPlayHead(this); | |||
| fInstance->addListener(this); | |||
| fFormatName = format; | |||
| // --------------------------------------------------------------- | |||
| // get info | |||
| @@ -1279,10 +1293,41 @@ private: | |||
| juce::MidiBuffer fMidiBuffer; | |||
| CurrentPositionInfo fPosInfo; | |||
| juce::MemoryBlock fChunk; | |||
| juce::String fFormatName; | |||
| #if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) | |||
| ScopedPointer<JucePluginWindow> fWindow; | |||
| #endif | |||
| bool isJuceSaveFormat(const void* const data, const std::size_t dataSize) | |||
| { | |||
| if (fFormatName != "VST2") | |||
| return true; | |||
| if (dataSize < 160) | |||
| return false; | |||
| const int32_t* const set = (const int32_t*)data; | |||
| if (! compareMagic(set[0], "CcnK")) | |||
| return false; | |||
| if (! compareMagic(set[2], "FBCh")) | |||
| return false; | |||
| if (fxbSwap(set[3]) > 1) | |||
| return false; | |||
| const int32_t chunkSize = fxbSwap(set[39]); | |||
| return static_cast<std::size_t>(chunkSize + 160) == dataSize; | |||
| } | |||
| static bool compareMagic(int32_t magic, const char* name) noexcept | |||
| { | |||
| return magic == (int32_t)juce::ByteOrder::littleEndianInt (name) | |||
| || magic == (int32_t)juce::ByteOrder::bigEndianInt (name); | |||
| } | |||
| static int32_t fxbSwap(const int32_t x) noexcept | |||
| { | |||
| return (int32_t)juce::ByteOrder::swapIfLittleEndian ((uint32_t) x); | |||
| } | |||
| CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginJuce) | |||
| }; | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * Carla VST Plugin | |||
| * Copyright (C) 2011-2018 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2011-2019 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| @@ -397,7 +397,7 @@ public: | |||
| CARLA_SAFE_ASSERT_RETURN(data != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(dataSize > 0,); | |||
| if (loadOldSaveFormat(data, dataSize)) | |||
| if (loadJuceSaveFormat(data, dataSize)) | |||
| return; | |||
| if (fLastChunk != nullptr) | |||
| @@ -2476,7 +2476,7 @@ private: | |||
| return (int32_t)ByteOrder::swapIfLittleEndian ((uint32_t) x); | |||
| } | |||
| bool loadOldSaveFormat(const void* const data, const std::size_t dataSize) | |||
| bool loadJuceSaveFormat(const void* const data, const std::size_t dataSize) | |||
| { | |||
| if (dataSize < 28) | |||
| return false; | |||
| @@ -2496,6 +2496,7 @@ private: | |||
| if (static_cast<std::size_t>(chunkSize + 160) > dataSize) | |||
| return false; | |||
| carla_stdout("NOTE: Loading plugin state in Juce compatibiity mode"); | |||
| setChunkData(&set[40], static_cast<std::size_t>(chunkSize)); | |||
| return true; | |||
| } | |||
| @@ -29,10 +29,8 @@ LIBS += $(MODULEDIR)/juce_audio_processors.a | |||
| LIBS += $(MODULEDIR)/juce_core.a | |||
| LIBS += $(MODULEDIR)/juce_data_structures.a | |||
| LIBS += $(MODULEDIR)/juce_events.a | |||
| ifeq ($(MACOS_OR_WIN32),true) | |||
| LIBS += $(MODULEDIR)/juce_graphics.a | |||
| LIBS += $(MODULEDIR)/juce_gui_basics.a | |||
| endif | |||
| ifeq ($(MACOS),true) | |||
| LIBS += $(MODULEDIR)/juce_gui_extra.a | |||
| endif | |||
| @@ -55,10 +53,8 @@ LINK_FLAGS += $(JUCE_AUDIO_PROCESSORS_LIBS) | |||
| LINK_FLAGS += $(JUCE_CORE_LIBS) | |||
| LINK_FLAGS += $(JUCE_DATA_STRUCTURES_LIBS) | |||
| LINK_FLAGS += $(JUCE_EVENTS_LIBS) | |||
| ifeq ($(MACOS_OR_WIN32),true) | |||
| LINK_FLAGS += $(JUCE_GRAPHICS_LIBS) | |||
| LINK_FLAGS += $(JUCE_GUI_BASICS_LIBS) | |||
| endif | |||
| ifeq ($(MACOS),true) | |||
| LINK_FLAGS += $(JUCE_GUI_EXTRA_LIBS) | |||
| endif | |||
| @@ -99,7 +99,6 @@ LIBS_win32 += $(MODULEDIR)/juce_events.win32.a | |||
| LIBS_win64 += $(MODULEDIR)/juce_events.win64.a | |||
| LINK_FLAGS += $(JUCE_EVENTS_LIBS) | |||
| ifeq ($(MACOS_OR_WIN32),true) | |||
| LIBS_native += $(MODULEDIR)/juce_graphics.a | |||
| LIBS_posix32 += $(MODULEDIR)/juce_graphics.posix32.a | |||
| LIBS_posix64 += $(MODULEDIR)/juce_graphics.posix64.a | |||
| @@ -113,7 +112,6 @@ LIBS_posix64 += $(MODULEDIR)/juce_gui_basics.posix64.a | |||
| LIBS_win32 += $(MODULEDIR)/juce_gui_basics.win32.a | |||
| LIBS_win64 += $(MODULEDIR)/juce_gui_basics.win64.a | |||
| LINK_FLAGS += $(JUCE_GUI_BASICS_LIBS) | |||
| endif | |||
| ifeq ($(MACOS),true) | |||
| LIBS_native += $(MODULEDIR)/juce_gui_extra.a | |||
| @@ -101,7 +101,6 @@ LIBS_win32 += $(MODULEDIR)/juce_events.win32.a | |||
| LIBS_win64 += $(MODULEDIR)/juce_events.win64.a | |||
| LINK_FLAGS += $(JUCE_EVENTS_LIBS) | |||
| ifeq ($(MACOS_OR_WIN32),true) | |||
| LIBS_native += $(MODULEDIR)/juce_graphics.a | |||
| LIBS_posix32 += $(MODULEDIR)/juce_graphics.posix32.a | |||
| LIBS_posix64 += $(MODULEDIR)/juce_graphics.posix64.a | |||
| @@ -115,7 +114,6 @@ LIBS_posix64 += $(MODULEDIR)/juce_gui_basics.posix64.a | |||
| LIBS_win32 += $(MODULEDIR)/juce_gui_basics.win32.a | |||
| LIBS_win64 += $(MODULEDIR)/juce_gui_basics.win64.a | |||
| LINK_FLAGS += $(JUCE_GUI_BASICS_LIBS) | |||
| endif # MACOS_OR_WIN32 | |||
| ifeq ($(MACOS),true) | |||
| LIBS_native += $(MODULEDIR)/juce_gui_extra.a | |||
| @@ -49,6 +49,8 @@ | |||
| #define JUCE_MODULE_AVAILABLE_juce_core 1 | |||
| #define JUCE_MODULE_AVAILABLE_juce_data_structures 1 | |||
| #define JUCE_MODULE_AVAILABLE_juce_events 1 | |||
| #define JUCE_MODULE_AVAILABLE_juce_graphics 1 | |||
| #define JUCE_MODULE_AVAILABLE_juce_gui_basics 1 | |||
| // always disabled | |||
| #define JUCE_MODULE_AVAILABLE_juce_audio_formats 0 | |||
| @@ -59,15 +61,7 @@ | |||
| #define JUCE_MODULE_AVAILABLE_juce_video 0 | |||
| // conditional | |||
| #if defined(APPCONFIG_OS_MAC) || defined(APPCONFIG_OS_WIN) | |||
| # define JUCE_MODULE_AVAILABLE_juce_graphics 1 | |||
| # define JUCE_MODULE_AVAILABLE_juce_gui_basics 1 | |||
| #else | |||
| # define JUCE_MODULE_AVAILABLE_juce_graphics 0 | |||
| # define JUCE_MODULE_AVAILABLE_juce_gui_basics 0 | |||
| #endif | |||
| #if defined(APPCONFIG_OS_MAC) | |||
| #ifdef APPCONFIG_OS_MAC | |||
| # define JUCE_MODULE_AVAILABLE_juce_gui_extra 1 | |||
| #else | |||
| # define JUCE_MODULE_AVAILABLE_juce_gui_extra 0 | |||
| @@ -89,9 +83,10 @@ | |||
| #define JUCE_STRING_UTF_TYPE 8 | |||
| #define JUCE_USE_VFORK 1 | |||
| #if ! (defined(APPCONFIG_OS_MAC) || defined(APPCONFIG_OS_WIN)) | |||
| #ifdef APPCONFIG_OS_LINUX | |||
| # define JUCE_DISABLE_NATIVE_FILECHOOSERS 1 | |||
| # define JUCE_MODAL_LOOPS_PERMITTED 0 | |||
| # define JUCE_AUDIOPROCESSOR_NO_GUI 1 | |||
| // # define JUCE_AUDIOPROCESSOR_NO_GUI 1 | |||
| #endif | |||
| // -------------------------------------------------------------------------------------------------------------------- | |||
| @@ -218,11 +213,7 @@ | |||
| @see VSTPluginFormat, AudioPluginFormat, AudioPluginFormatManager, JUCE_PLUGINHOST_AU | |||
| */ | |||
| #if defined(APPCONFIG_OS_MAC) || defined(APPCONFIG_OS_WIN) | |||
| # define JUCE_PLUGINHOST_VST 1 | |||
| #else | |||
| # define JUCE_PLUGINHOST_VST 0 | |||
| #endif | |||
| #define JUCE_PLUGINHOST_VST 1 | |||
| /** Config: JUCE_PLUGINHOST_VST3 | |||
| Enables the VST3 audio plugin hosting classes. This requires the Steinberg VST3 SDK to be | |||
| @@ -12,6 +12,9 @@ include ../Makefile.mk | |||
| BUILD_CXX_FLAGS += $(JUCE_GRAPHICS_FLAGS) -I.. | |||
| ifeq ($(LINUX),true) | |||
| BUILD_CXX_FLAGS += $(shell pkg-config --cflags freetype2) | |||
| endif | |||
| ifeq ($(WIN32),true) | |||
| BUILD_CXX_FLAGS += -Wno-missing-field-initializers -Wno-strict-overflow | |||
| endif | |||
| @@ -27,16 +27,6 @@ | |||
| namespace juce | |||
| { | |||
| static bool exeIsAvailable (const char* const executable) | |||
| { | |||
| ChildProcess child; | |||
| const bool ok = child.start ("which " + String (executable)) | |||
| && child.readAllProcessOutput().trim().isNotEmpty(); | |||
| child.waitForProcessToFinish (60 * 1000); | |||
| return ok; | |||
| } | |||
| bool FileChooser::isPlatformDialogAvailable() | |||
| { | |||
| #if JUCE_DISABLE_NATIVE_FILECHOOSERS | |||
| @@ -47,6 +37,17 @@ bool FileChooser::isPlatformDialogAvailable() | |||
| #endif | |||
| } | |||
| #if ! JUCE_DISABLE_NATIVE_FILECHOOSERS | |||
| static bool exeIsAvailable (const char* const executable) | |||
| { | |||
| ChildProcess child; | |||
| const bool ok = child.start ("which " + String (executable)) | |||
| && child.readAllProcessOutput().trim().isNotEmpty(); | |||
| child.waitForProcessToFinish (60 * 1000); | |||
| return ok; | |||
| } | |||
| static uint64 getTopWindowID() noexcept | |||
| { | |||
| if (TopLevelWindow* top = TopLevelWindow::getActiveTopLevelWindow()) | |||
| @@ -209,5 +210,6 @@ void FileChooser::showPlatformDialog (Array<File>& results, | |||
| previousWorkingDirectory.setAsCurrentWorkingDirectory(); | |||
| } | |||
| #endif | |||
| } // namespace juce | |||
| @@ -65,10 +65,8 @@ LIBS += $(MODULEDIR)/juce_audio_processors.a | |||
| LIBS += $(MODULEDIR)/juce_core.a | |||
| LIBS += $(MODULEDIR)/juce_data_structures.a | |||
| LIBS += $(MODULEDIR)/juce_events.a | |||
| ifeq ($(MACOS_OR_WIN32),true) | |||
| LIBS += $(MODULEDIR)/juce_graphics.a | |||
| LIBS += $(MODULEDIR)/juce_gui_basics.a | |||
| endif | |||
| ifeq ($(MACOS),true) | |||
| LIBS += $(MODULEDIR)/juce_gui_extra.a | |||
| endif | |||
| @@ -95,10 +93,8 @@ LINK_FLAGS += $(JUCE_AUDIO_PROCESSORS_LIBS) | |||
| LINK_FLAGS += $(JUCE_CORE_LIBS) | |||
| LINK_FLAGS += $(JUCE_DATA_STRUCTURES_LIBS) | |||
| LINK_FLAGS += $(JUCE_EVENTS_LIBS) | |||
| ifeq ($(MACOS_OR_WIN32),true) | |||
| LINK_FLAGS += $(JUCE_GRAPHICS_LIBS) | |||
| LINK_FLAGS += $(JUCE_GUI_BASICS_LIBS) | |||
| endif | |||
| ifeq ($(MACOS),true) | |||
| LINK_FLAGS += $(JUCE_GUI_EXTRA_LIBS) | |||
| endif | |||
| @@ -33,10 +33,6 @@ | |||
| namespace juce { | |||
| #if JUCE_LINUX && defined(HAVE_X11) | |||
| extern Display* display; | |||
| #endif | |||
| class JucePluginWindow : public DialogWindow | |||
| { | |||
| public: | |||
| @@ -103,6 +99,7 @@ private: | |||
| return; | |||
| #if JUCE_LINUX && defined(HAVE_X11) | |||
| Display* const display = XWindowSystem::getInstance()->displayRef(); | |||
| CARLA_SAFE_ASSERT_RETURN(display != nullptr,); | |||
| ::Window window = (::Window)getWindowHandle(); | |||