Browse Source

Add patches folder from juce6 branch for juce-current

Signed-off-by: falkTX <falktx@falktx.com>
tags/2020-12-27
falkTX 4 years ago
parent
commit
eaa2a2d521
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
36 changed files with 8315 additions and 0 deletions
  1. +205
    -0
      libs/juce-current/patches/_haiku.patch
  2. +14
    -0
      libs/juce-current/patches/audiodevicemanager_prefer-jack-over-alsa.patch
  3. +16
    -0
      libs/juce-current/patches/audioprocessors_lv2-string-state.patch
  4. +12
    -0
      libs/juce-current/patches/audioprocessors_lv2type.patch
  5. +73
    -0
      libs/juce-current/patches/audioprocessors_no-splash-screen.patch
  6. +54
    -0
      libs/juce-current/patches/audioprocessors_no-splash-screen_pt2.patch
  7. +145
    -0
      libs/juce-current/patches/audioprocessors_nogui.patch
  8. +61
    -0
      libs/juce-current/patches/childprocess_getpid.patch
  9. +70
    -0
      libs/juce-current/patches/dialogwindow_allow-native-titlebar.patch
  10. +16
    -0
      libs/juce-current/patches/fix-for-temporary-windows.patch
  11. +16
    -0
      libs/juce-current/patches/fix-linux-thread-priorities.patch
  12. +13
    -0
      libs/juce-current/patches/fix-midi-message-constness.patch
  13. +80
    -0
      libs/juce-current/patches/flac-assume-sse.patch
  14. +20
    -0
      libs/juce-current/patches/juce_events-dispatch-public.patch
  15. +2991
    -0
      libs/juce-current/patches/juce_vst_interface.patch
  16. +13
    -0
      libs/juce-current/patches/local-ladspa.patch
  17. +13
    -0
      libs/juce-current/patches/maybe-not-needed/fix-distrho-juceplugin-includes.patch
  18. +44
    -0
      libs/juce-current/patches/maybe-not-needed/mingw-fixes.patch
  19. +201
    -0
      libs/juce-current/patches/maybe-not-needed/mingw-fixes_pt2.patch
  20. +79
    -0
      libs/juce-current/patches/maybe-not-needed/mingw-fixes_temp-pt1.patch
  21. +14
    -0
      libs/juce-current/patches/maybe-not-needed/vst3-less-strict.patch
  22. +14
    -0
      libs/juce-current/patches/mingw-fixes_pt1.patch
  23. +37
    -0
      libs/juce-current/patches/no-linux-native-dialog-without-modal-loops.patch
  24. +46
    -0
      libs/juce-current/patches/proper-posix-getExecutableFile.patch
  25. +114
    -0
      libs/juce-current/patches/to-delete/osx-ui-processors-utils-separate.patch
  26. +244
    -0
      libs/juce-current/patches/todo/juce_IIRFilterOld.cpp
  27. +151
    -0
      libs/juce-current/patches/todo/juce_IIRFilterOld.h
  28. +24
    -0
      libs/juce-current/patches/todo/juce_IIRFilterOld.patch
  29. +15
    -0
      libs/juce-current/patches/use-mingw-std-threads.patch
  30. +119
    -0
      libs/juce-current/patches/use-vfork+consistency.patch
  31. +13
    -0
      libs/juce-current/patches/vst2-linux-fix-gui-init.patch
  32. +76
    -0
      libs/juce-current/patches/vst2-linux-fix-scale-factor.patch
  33. +3178
    -0
      libs/juce-current/patches/vst2-support.patch
  34. +47
    -0
      libs/juce-current/patches/vst2-support_pt2.patch
  35. +53
    -0
      libs/juce-current/patches/vst3-linux-fix-scale-factor.patch
  36. +34
    -0
      libs/juce-current/patches/vstwrapper-fixes.patch

+ 205
- 0
libs/juce-current/patches/_haiku.patch View File

@@ -0,0 +1,205 @@
diff --git a/modules/juce_core/juce_core.cpp b/modules/juce_core/juce_core.cpp
index c992d50..8cc0b36 100644
--- a/modules/juce_core/juce_core.cpp
+++ b/modules/juce_core/juce_core.cpp
@@ -69,18 +69,16 @@
#endif
#else
- #if JUCE_LINUX || JUCE_ANDROID
+ #if JUCE_LINUX || JUCE_ANDROID || JUCE_HAIKU
#include <sys/types.h>
#include <sys/socket.h>
- #include <sys/errno.h>
+ #if ! JUCE_HAIKU
+ #include <sys/errno.h>
+ #endif
#include <unistd.h>
#include <netinet/in.h>
#endif
- #if JUCE_LINUX
- #include <langinfo.h>
- #endif
-
#include <pwd.h>
#include <fcntl.h>
#include <netdb.h>
@@ -90,8 +88,9 @@
#include <net/if.h>
#include <sys/ioctl.h>
- #if ! JUCE_ANDROID
+ #if JUCE_LINUX
#include <execinfo.h>
+ #include <langinfo.h>
#endif
#endif
@@ -214,6 +213,10 @@ namespace juce
#include "native/juce_android_SystemStats.cpp"
#include "native/juce_android_Threads.cpp"
+//==============================================================================
+#elif JUCE_HAIKU
+// TODO
+
#endif
#include "threads/juce_ChildProcess.cpp"
diff --git a/modules/juce_core/native/juce_BasicNativeHeaders.h b/modules/juce_core/native/juce_BasicNativeHeaders.h
index 55c0c8c..3bdb384 100644
--- a/modules/juce_core/native/juce_BasicNativeHeaders.h
+++ b/modules/juce_core/native/juce_BasicNativeHeaders.h
@@ -212,6 +212,33 @@
#include <dirent.h>
#include <fnmatch.h>
#include <sys/wait.h>
+
+//==============================================================================
+#elif JUCE_HAIKU
+ #include <sched.h>
+ #include <pthread.h>
+ #include <sys/time.h>
+ #include <errno.h>
+ #include <sys/stat.h>
+ #include <sys/statvfs.h>
+ #include <sys/wait.h>
+ #include <sys/mman.h>
+ #include <fnmatch.h>
+ #include <utime.h>
+ #include <pwd.h>
+ #include <fcntl.h>
+ #include <dlfcn.h>
+ #include <netdb.h>
+ #include <arpa/inet.h>
+ #include <netinet/in.h>
+ #include <sys/types.h>
+ #include <sys/ioctl.h>
+ #include <sys/socket.h>
+ #include <sys/sockio.h>
+ #include <net/if.h>
+ #include <sys/file.h>
+ #include <signal.h>
+ #include <stddef.h>
#endif
// Need to clear various moronic redefinitions made by system headers..
diff --git a/modules/juce_core/native/juce_posix_SharedCode.h b/modules/juce_core/native/juce_posix_SharedCode.h
index 9823d25..a391a00 100644
--- a/modules/juce_core/native/juce_posix_SharedCode.h
+++ b/modules/juce_core/native/juce_posix_SharedCode.h
@@ -142,7 +142,7 @@ void JUCE_CALLTYPE Thread::sleep (int millisecs)
void JUCE_CALLTYPE Process::terminate()
{
- #if JUCE_ANDROID
+ #if JUCE_ANDROID || JUCE_HAIKU
_exit (EXIT_FAILURE);
#else
std::_Exit (EXIT_FAILURE);
@@ -203,6 +203,10 @@ namespace
#define JUCE_STAT stat
#endif
+ #if JUCE_HAIKU
+ #define statfs statvfs
+ #endif
+
bool juce_stat (const String& fileName, juce_statStruct& info)
{
return fileName.isNotEmpty()
@@ -542,7 +546,11 @@ void MemoryMappedFile::openInternal (const File& file, AccessMode mode)
if (m != MAP_FAILED)
{
address = m;
- madvise (m, (size_t) range.getLength(), MADV_SEQUENTIAL);
+ #if JUCE_HAIKU
+ posix_madvise (m, (size_t) range.getLength(), POSIX_MADV_SEQUENTIAL);
+ #else
+ madvise (m, (size_t) range.getLength(), MADV_SEQUENTIAL);
+ #endif
}
else
{
@@ -663,6 +671,10 @@ int File::getVolumeSerialNumber() const
return result;
}
+#if JUCE_HAIKU
+ #undef statvfs
+#endif
+
//==============================================================================
void juce_runSystemCommand (const String&);
void juce_runSystemCommand (const String& command)
diff --git a/modules/juce_core/network/juce_URL.cpp b/modules/juce_core/network/juce_URL.cpp
index 49db1f9..8b3afbd 100644
--- a/modules/juce_core/network/juce_URL.cpp
+++ b/modules/juce_core/network/juce_URL.cpp
@@ -342,6 +342,7 @@ InputStream* URL::createInputStream (const bool usePostCommand,
if (! headers.endsWithChar ('\n'))
headers << "\r\n";
+ #if ! JUCE_HAIKU
ScopedPointer<WebInputStream> wi (new WebInputStream (toString (! usePostCommand),
usePostCommand, headersAndPostData,
progressCallback, progressCallbackContext,
@@ -351,6 +352,9 @@ InputStream* URL::createInputStream (const bool usePostCommand,
*statusCode = wi->statusCode;
return wi->isError() ? nullptr : wi.release();
+ #else
+ return nullptr; // TODO
+ #endif
}
//==============================================================================
diff --git a/modules/juce_core/system/juce_SystemStats.cpp b/modules/juce_core/system/juce_SystemStats.cpp
index 365e94d..6b56569 100644
--- a/modules/juce_core/system/juce_SystemStats.cpp
+++ b/modules/juce_core/system/juce_SystemStats.cpp
@@ -97,7 +97,7 @@ String SystemStats::getStackBacktrace()
{
String result;
- #if JUCE_ANDROID || JUCE_MINGW
+ #if JUCE_ANDROID || JUCE_MINGW || JUCE_HAIKU
jassertfalse; // sorry, not implemented yet!
#elif JUCE_WINDOWS
diff --git a/modules/juce_core/system/juce_TargetPlatform.h b/modules/juce_core/system/juce_TargetPlatform.h
index 86adc38..0d12d7d 100644
--- a/modules/juce_core/system/juce_TargetPlatform.h
+++ b/modules/juce_core/system/juce_TargetPlatform.h
@@ -51,6 +51,8 @@
#define JUCE_ANDROID 1
#elif defined (LINUX) || defined (__linux__)
#define JUCE_LINUX 1
+#elif defined (__HAIKU__)
+ #define JUCE_HAIKU 1
#elif defined (__APPLE_CPP__) || defined(__APPLE_CC__)
#define Point CarbonDummyPointName // (workaround to avoid definition of "Point" by old Carbon headers)
#define Component CarbonDummyCompName
@@ -140,7 +142,7 @@
#endif
//==============================================================================
-#if JUCE_LINUX || JUCE_ANDROID
+#if JUCE_LINUX || JUCE_ANDROID || JUCE_HAIKU
#ifdef _DEBUG
#define JUCE_DEBUG 1
diff --git a/modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp b/modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp
index ece2121..7b1fa73 100644
--- a/modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp
+++ b/modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp
@@ -82,7 +82,7 @@ File PropertiesFile::Options::getDefaultFile() const
if (folderName.isNotEmpty())
dir = dir.getChildFile (folderName);
- #elif JUCE_LINUX || JUCE_ANDROID
+ #elif JUCE_LINUX || JUCE_ANDROID || JUCE_HAIKU
const File dir (File (commonToAllUsers ? "/var" : "~")
.getChildFile (folderName.isNotEmpty() ? folderName
: ("." + applicationName)));

+ 14
- 0
libs/juce-current/patches/audiodevicemanager_prefer-jack-over-alsa.patch View File

@@ -0,0 +1,14 @@
diff --git a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp
index 823a1b209..eff47377b 100644
--- a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp
+++ b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp
@@ -184,8 +184,8 @@ void AudioDeviceManager::createAudioDeviceTypes (OwnedArray<AudioIODeviceType>&
addIfNotNull (list, AudioIODeviceType::createAudioIODeviceType_CoreAudio());
addIfNotNull (list, AudioIODeviceType::createAudioIODeviceType_iOSAudio());
addIfNotNull (list, AudioIODeviceType::createAudioIODeviceType_Bela());
- addIfNotNull (list, AudioIODeviceType::createAudioIODeviceType_ALSA());
addIfNotNull (list, AudioIODeviceType::createAudioIODeviceType_JACK());
+ addIfNotNull (list, AudioIODeviceType::createAudioIODeviceType_ALSA());
addIfNotNull (list, AudioIODeviceType::createAudioIODeviceType_Oboe());
addIfNotNull (list, AudioIODeviceType::createAudioIODeviceType_OpenSLES());
addIfNotNull (list, AudioIODeviceType::createAudioIODeviceType_Android());

+ 16
- 0
libs/juce-current/patches/audioprocessors_lv2-string-state.patch View File

@@ -0,0 +1,16 @@
diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessor.h b/modules/juce_audio_processors/processors/juce_AudioProcessor.h
index 5e538d5e1..626c5d182 100644
--- a/modules/juce_audio_processors/processors/juce_AudioProcessor.h
+++ b/modules/juce_audio_processors/processors/juce_AudioProcessor.h
@@ -1109,6 +1109,11 @@ public:
/** This method is called when the layout of the audio processor changes. */
virtual void processorLayoutsChanged();
+ //==============================================================================
+ /** LV2 specific calls, saving/restore as string. */
+ virtual String getStateInformationString () { return String(); }
+ virtual void setStateInformationString (const String&) {}
+
//==============================================================================
/** Adds a listener that will be called when an aspect of this processor changes. */
virtual void addListener (AudioProcessorListener* newListener);

+ 12
- 0
libs/juce-current/patches/audioprocessors_lv2type.patch View File

@@ -0,0 +1,12 @@
diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessor.h b/modules/juce_audio_processors/processors/juce_AudioProcessor.h
index 626c5d182..8d3cd062e 100644
--- a/modules/juce_audio_processors/processors/juce_AudioProcessor.h
+++ b/modules/juce_audio_processors/processors/juce_AudioProcessor.h
@@ -1198,6 +1198,7 @@ public:
wrapperType_AudioUnitv3,
wrapperType_RTAS,
wrapperType_AAX,
+ wrapperType_LV2,
wrapperType_Standalone,
wrapperType_Unity
};

+ 73
- 0
libs/juce-current/patches/audioprocessors_no-splash-screen.patch View File

@@ -0,0 +1,73 @@
diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp b/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp
index b9df89ed9..1f40e3eaa 100644
--- a/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp
+++ b/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp
@@ -33,8 +33,6 @@ AudioProcessorEditor::AudioProcessorEditor (AudioProcessor* p) noexcept : proce
AudioProcessorEditor::~AudioProcessorEditor()
{
- splashScreen.deleteAndZero();
-
// if this fails, then the wrapper hasn't called editorBeingDeleted() on the
// filter for some reason..
jassert (processor.getActiveEditor() != this);
@@ -49,23 +47,6 @@ void AudioProcessorEditor::hostMIDIControllerIsAvailable (bool) {
void AudioProcessorEditor::initialise()
{
- /*
- ==========================================================================
- In accordance with the terms of the JUCE 5 End-Use License Agreement, the
- JUCE Code in SECTION A cannot be removed, changed or otherwise rendered
- ineffective unless you have a JUCE Indie or Pro license, or are using
- JUCE under the GPL v3 license.
-
- End User License Agreement: www.juce.com/juce-5-licence
- ==========================================================================
- */
-
- // BEGIN SECTION A
-
- splashScreen = new JUCESplashScreen (*this);
-
- // END SECTION A
-
resizable = false;
attachConstrainer (&defaultConstrainer);
diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h b/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h
index 847707ea8..c33cbe73d 100644
--- a/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h
+++ b/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h
@@ -199,7 +199,6 @@ private:
bool resizable;
ComponentBoundsConstrainer defaultConstrainer;
ComponentBoundsConstrainer* constrainer = {};
- Component::SafePointer<Component> splashScreen;
AffineTransform hostScaleTransform;
JUCE_DECLARE_NON_COPYABLE (AudioProcessorEditor)
diff --git a/modules/juce_gui_basics/juce_gui_basics.cpp b/modules/juce_gui_basics/juce_gui_basics.cpp
index 7c6273a54..ca0c5e227 100644
--- a/modules/juce_gui_basics/juce_gui_basics.cpp
+++ b/modules/juce_gui_basics/juce_gui_basics.cpp
@@ -211,7 +211,6 @@ namespace juce
#include "application/juce_Application.cpp"
#include "misc/juce_BubbleComponent.cpp"
#include "misc/juce_DropShadower.cpp"
-#include "misc/juce_JUCESplashScreen.cpp"
#include "layout/juce_FlexBox.cpp"
#include "layout/juce_GridItem.cpp"
diff --git a/modules/juce_gui_basics/juce_gui_basics.h b/modules/juce_gui_basics/juce_gui_basics.h
index 8085c6eae..038f679fd 100644
--- a/modules/juce_gui_basics/juce_gui_basics.h
+++ b/modules/juce_gui_basics/juce_gui_basics.h
@@ -243,7 +243,6 @@ namespace juce
#include "menus/juce_BurgerMenuComponent.h"
#include "buttons/juce_ToolbarButton.h"
#include "misc/juce_DropShadower.h"
-#include "misc/juce_JUCESplashScreen.h"
#include "widgets/juce_TreeView.h"
#include "windows/juce_TopLevelWindow.h"
#include "windows/juce_AlertWindow.h"

+ 54
- 0
libs/juce-current/patches/audioprocessors_no-splash-screen_pt2.patch View File

@@ -0,0 +1,54 @@
diff --git a/modules/juce_gui_basics/windows/juce_ResizableWindow.cpp b/modules/juce_gui_basics/windows/juce_ResizableWindow.cpp
index 712e93f43..d4d8b7c14 100644
--- a/modules/juce_gui_basics/windows/juce_ResizableWindow.cpp
+++ b/modules/juce_gui_basics/windows/juce_ResizableWindow.cpp
@@ -34,8 +34,6 @@ ResizableWindow::ResizableWindow (const String& name, Colour bkgnd, bool shouldA
ResizableWindow::~ResizableWindow()
{
- splashScreen.deleteAndZero();
-
// Don't delete or remove the resizer components yourself! They're managed by the
// ResizableWindow, and you should leave them alone! You may have deleted them
// accidentally by careless use of deleteAllChildren()..?
@@ -53,27 +51,6 @@ ResizableWindow::~ResizableWindow()
void ResizableWindow::initialise (const bool shouldAddToDesktop)
{
- /*
- ==========================================================================
-
- In accordance with the terms of the JUCE 5 End-Use License Agreement, the
- JUCE Code in SECTION A cannot be removed, changed or otherwise rendered
- ineffective unless you have a JUCE Indie or Pro license, or are using
- JUCE under the GPL v3 license.
-
- End User License Agreement: www.juce.com/juce-5-licence
-
- ==========================================================================
- */
-
- // BEGIN SECTION A
-
- #if ! JucePlugin_Build_Standalone
- splashScreen = new JUCESplashScreen (*this);
- #endif
-
- // END SECTION A
-
defaultConstrainer.setMinimumOnscreenAmounts (0x10000, 16, 24, 16);
lastNonFullScreenPos.setBounds (50, 50, 256, 256);
diff --git a/modules/juce_gui_basics/windows/juce_ResizableWindow.h b/modules/juce_gui_basics/windows/juce_ResizableWindow.h
index 27c709cc6..01aeee19f 100644
--- a/modules/juce_gui_basics/windows/juce_ResizableWindow.h
+++ b/modules/juce_gui_basics/windows/juce_ResizableWindow.h
@@ -376,7 +376,7 @@ protected:
private:
//==============================================================================
- Component::SafePointer<Component> contentComponent, splashScreen;
+ Component::SafePointer<Component> contentComponent;
bool ownsContentComponent = false, resizeToFitContent = false, fullscreen = false, canDrag = true, dragStarted = false;
ComponentDragger dragger;
Rectangle<int> lastNonFullScreenPos;

+ 145
- 0
libs/juce-current/patches/audioprocessors_nogui.patch View File

@@ -0,0 +1,145 @@
diff --git a/modules/juce_audio_processors/juce_audio_processors.cpp b/modules/juce_audio_processors/juce_audio_processors.cpp
index c468c944c..133d1ad45 100644
--- a/modules/juce_audio_processors/juce_audio_processors.cpp
+++ b/modules/juce_audio_processors/juce_audio_processors.cpp
@@ -40,7 +40,7 @@
#endif
#endif
-#if (JUCE_PLUGINHOST_VST || JUCE_PLUGINHOST_VST3) && JUCE_LINUX
+#if (JUCE_PLUGINHOST_VST || JUCE_PLUGINHOST_VST3) && JUCE_LINUX && ! JUCE_AUDIOPROCESSOR_NO_GUI
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <sys/utsname.h>
@@ -130,9 +130,11 @@ JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations", "-Wcast-align"
#include "format_types/juce_LegacyAudioParameter.cpp"
#include "processors/juce_AudioProcessor.cpp"
#include "processors/juce_AudioPluginInstance.cpp"
-#include "processors/juce_AudioProcessorEditor.cpp"
#include "processors/juce_AudioProcessorGraph.cpp"
-#include "processors/juce_GenericAudioProcessorEditor.cpp"
+#if ! JUCE_AUDIOPROCESSOR_NO_GUI
+ #include "processors/juce_AudioProcessorEditor.cpp"
+ #include "processors/juce_GenericAudioProcessorEditor.cpp"
+#endif
#include "processors/juce_PluginDescription.cpp"
#include "format_types/juce_LADSPAPluginFormat.cpp"
#include "format_types/juce_VSTPluginFormat.cpp"
diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp b/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp
index d8efe0707..7c83196e9 100644
--- a/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp
+++ b/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp
@@ -44,12 +44,14 @@ AudioProcessor::AudioProcessor (const BusesProperties& ioConfig)
AudioProcessor::~AudioProcessor()
{
+ #if ! JUCE_AUDIOPROCESSOR_NO_GUI
{
const ScopedLock sl (activeEditorLock);
// ooh, nasty - the editor should have been deleted before its AudioProcessor.
jassert (activeEditor == nullptr);
}
+ #endif
#if JUCE_DEBUG && ! JUCE_DISABLE_AUDIOPROCESSOR_BEGIN_END_GESTURE_CHECKING
// This will fail if you've called beginParameterChangeGesture() for one
@@ -797,6 +799,7 @@ void AudioProcessor::audioIOChanged (bool busNumberChanged, bool channelNumChang
processorLayoutsChanged();
}
+#if ! JUCE_AUDIOPROCESSOR_NO_GUI
//==============================================================================
void AudioProcessor::editorBeingDeleted (AudioProcessorEditor* const editor) noexcept
{
@@ -833,6 +836,7 @@ AudioProcessorEditor* AudioProcessor::createEditorIfNeeded()
return ed;
}
+#endif
//==============================================================================
void AudioProcessor::getCurrentProgramStateInformation (juce::MemoryBlock& destData)
diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessor.h b/modules/juce_audio_processors/processors/juce_AudioProcessor.h
index 8d3cd062e..34a192dc5 100644
--- a/modules/juce_audio_processors/processors/juce_AudioProcessor.h
+++ b/modules/juce_audio_processors/processors/juce_AudioProcessor.h
@@ -919,6 +919,7 @@ public:
*/
virtual void setNonRealtime (bool isNonRealtime) noexcept;
+ #if ! JUCE_AUDIOPROCESSOR_NO_GUI
//==============================================================================
/** Creates the processor's GUI.
@@ -968,6 +969,7 @@ public:
This may call createEditor() internally to create the component.
*/
AudioProcessorEditor* createEditorIfNeeded();
+ #endif
//==============================================================================
/** Returns the default number of steps for a parameter.
@@ -1184,9 +1186,11 @@ public:
virtual CurveData getResponseCurve (CurveData::Type /*curveType*/) const { return {}; }
+ #if ! JUCE_AUDIOPROCESSOR_NO_GUI
//==============================================================================
/** Not for public use - this is called before deleting an editor component. */
void editorBeingDeleted (AudioProcessorEditor*) noexcept;
+ #endif
/** Flags to indicate the type of plugin context in which a processor is being used. */
enum WrapperType
@@ -1461,7 +1465,9 @@ private:
//==============================================================================
Array<AudioProcessorListener*> listeners;
+ #if ! JUCE_AUDIOPROCESSOR_NO_GUI
Component::SafePointer<AudioProcessorEditor> activeEditor;
+ #endif
double currentSampleRate = 0;
int blockSize = 0, latencySamples = 0;
bool suspended = false;
diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp
index 7d2ac0047..dcdaea84d 100644
--- a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp
+++ b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp
@@ -1490,8 +1490,10 @@ bool AudioProcessorGraph::AudioGraphIOProcessor::producesMidi() const
bool AudioProcessorGraph::AudioGraphIOProcessor::isInput() const noexcept { return type == audioInputNode || type == midiInputNode; }
bool AudioProcessorGraph::AudioGraphIOProcessor::isOutput() const noexcept { return type == audioOutputNode || type == midiOutputNode; }
+#if ! JUCE_AUDIOPROCESSOR_NO_GUI
bool AudioProcessorGraph::AudioGraphIOProcessor::hasEditor() const { return false; }
AudioProcessorEditor* AudioProcessorGraph::AudioGraphIOProcessor::createEditor() { return nullptr; }
+#endif
int AudioProcessorGraph::AudioGraphIOProcessor::getNumPrograms() { return 0; }
int AudioProcessorGraph::AudioGraphIOProcessor::getCurrentProgram() { return 0; }
diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h
index 93b2d75a4..23d1670d4 100644
--- a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h
+++ b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h
@@ -348,8 +348,10 @@ public:
bool acceptsMidi() const override;
bool producesMidi() const override;
+ #if ! JUCE_AUDIOPROCESSOR_NO_GUI
bool hasEditor() const override;
AudioProcessorEditor* createEditor() override;
+ #endif
int getNumPrograms() override;
int getCurrentProgram() override;
@@ -385,8 +387,10 @@ public:
bool acceptsMidi() const override;
bool producesMidi() const override;
+ #if ! JUCE_AUDIOPROCESSOR_NO_GUI
bool hasEditor() const override { return false; }
AudioProcessorEditor* createEditor() override { return nullptr; }
+ #endif
int getNumPrograms() override { return 0; }
int getCurrentProgram() override { return 0; }
void setCurrentProgram (int) override { }

+ 61
- 0
libs/juce-current/patches/childprocess_getpid.patch View File

@@ -0,0 +1,61 @@
diff --git a/modules/juce_core/native/juce_posix_SharedCode.h b/modules/juce_core/native/juce_posix_SharedCode.h
index ea007b1..f6faa5b 100644
--- a/modules/juce_core/native/juce_posix_SharedCode.h
+++ b/modules/juce_core/native/juce_posix_SharedCode.h
@@ -1234,6 +1234,11 @@ public:
return 0;
}
+ int getPID() const noexcept
+ {
+ return childPID;
+ }
+
int childPID = 0;
int pipeHandle = 0;
int exitCode = -1;
diff --git a/modules/juce_core/native/juce_win32_Threads.cpp b/modules/juce_core/native/juce_win32_Threads.cpp
index 68d891f..d38b733 100644
--- a/modules/juce_core/native/juce_win32_Threads.cpp
+++ b/modules/juce_core/native/juce_win32_Threads.cpp
@@ -488,6 +488,11 @@ public:
return (uint32) exitCode;
}
+ int getPID() const noexcept
+ {
+ return 0;
+ }
+
bool ok;
private:
diff --git a/modules/juce_core/threads/juce_ChildProcess.cpp b/modules/juce_core/threads/juce_ChildProcess.cpp
index 5648c5d..262882b 100644
--- a/modules/juce_core/threads/juce_ChildProcess.cpp
+++ b/modules/juce_core/threads/juce_ChildProcess.cpp
@@ -75,6 +75,11 @@ String ChildProcess::readAllProcessOutput()
return result.toString();
}
+uint32 ChildProcess::getPID() const noexcept
+{
+ return activeProcess != nullptr ? activeProcess->getPID() : 0;
+}
+
//==============================================================================
#if JUCE_UNIT_TESTS
diff --git a/modules/juce_core/threads/juce_ChildProcess.h b/modules/juce_core/threads/juce_ChildProcess.h
index b2bd0e1..cbc380d 100644
--- a/modules/juce_core/threads/juce_ChildProcess.h
+++ b/modules/juce_core/threads/juce_ChildProcess.h
@@ -99,6 +99,8 @@ public:
*/
bool kill();
+ uint32 getPID() const noexcept;
+
private:
//==============================================================================
class ActiveProcess;

+ 70
- 0
libs/juce-current/patches/dialogwindow_allow-native-titlebar.patch View File

@@ -0,0 +1,70 @@
diff --git a/modules/juce_gui_basics/windows/juce_DialogWindow.cpp b/modules/juce_gui_basics/windows/juce_DialogWindow.cpp
index 2b2345cdb..30c611fa7 100644
--- a/modules/juce_gui_basics/windows/juce_DialogWindow.cpp
+++ b/modules/juce_gui_basics/windows/juce_DialogWindow.cpp
@@ -124,7 +124,8 @@ void DialogWindow::showDialog (const String& dialogTitle,
Colour backgroundColour,
const bool escapeKeyTriggersCloseButton,
const bool resizable,
- const bool useBottomRightCornerResizer)
+ const bool useBottomRightCornerResizer,
+ const bool useNativeTitleBar)
{
LaunchOptions o;
o.dialogTitle = dialogTitle;
@@ -132,9 +133,9 @@ void DialogWindow::showDialog (const String& dialogTitle,
o.componentToCentreAround = componentToCentreAround;
o.dialogBackgroundColour = backgroundColour;
o.escapeKeyTriggersCloseButton = escapeKeyTriggersCloseButton;
- o.useNativeTitleBar = false;
o.resizable = resizable;
o.useBottomRightCornerResizer = useBottomRightCornerResizer;
+ o.useNativeTitleBar = useNativeTitleBar;
o.launchAsync();
}
@@ -146,7 +147,8 @@ int DialogWindow::showModalDialog (const String& dialogTitle,
Colour backgroundColour,
const bool escapeKeyTriggersCloseButton,
const bool resizable,
- const bool useBottomRightCornerResizer)
+ const bool useBottomRightCornerResizer,
+ const bool useNativeTitleBar)
{
LaunchOptions o;
o.dialogTitle = dialogTitle;
@@ -154,9 +156,9 @@ int DialogWindow::showModalDialog (const String& dialogTitle,
o.componentToCentreAround = componentToCentreAround;
o.dialogBackgroundColour = backgroundColour;
o.escapeKeyTriggersCloseButton = escapeKeyTriggersCloseButton;
- o.useNativeTitleBar = false;
o.resizable = resizable;
o.useBottomRightCornerResizer = useBottomRightCornerResizer;
+ o.useNativeTitleBar = useNativeTitleBar;
return o.runModal();
}
diff --git a/modules/juce_gui_basics/windows/juce_DialogWindow.h b/modules/juce_gui_basics/windows/juce_DialogWindow.h
index 231168d0c..8c9f32957 100644
--- a/modules/juce_gui_basics/windows/juce_DialogWindow.h
+++ b/modules/juce_gui_basics/windows/juce_DialogWindow.h
@@ -186,7 +186,8 @@ public:
Colour backgroundColour,
bool escapeKeyTriggersCloseButton,
bool shouldBeResizable = false,
- bool useBottomRightCornerResizer = false);
+ bool useBottomRightCornerResizer = false,
+ bool useNativeTitleBar = false);
#if JUCE_MODAL_LOOPS_PERMITTED || DOXYGEN
/** Easy way of quickly showing a dialog box containing a given component.
@@ -232,7 +233,8 @@ public:
Colour backgroundColour,
bool escapeKeyTriggersCloseButton,
bool shouldBeResizable = false,
- bool useBottomRightCornerResizer = false);
+ bool useBottomRightCornerResizer = false,
+ bool useNativeTitleBar = false);
#endif

+ 16
- 0
libs/juce-current/patches/fix-for-temporary-windows.patch View File

@@ -0,0 +1,16 @@
diff --git a/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp b/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp
index 6d23372d9..32e159cf6 100644
--- a/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp
+++ b/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp
@@ -2542,8 +2542,9 @@ void XWindowSystem::setWindowType (::Window windowH, int styleFlags) const
Atom netHints [2];
- if ((styleFlags & ComponentPeer::windowIsTemporary) != 0
- || ((styleFlags & ComponentPeer::windowHasDropShadow) == 0 && Desktop::canUseSemiTransparentWindows()))
+ if (styleFlags & ComponentPeer::windowIsTemporary)
+ netHints [0] = XWindowSystemUtilities::Atoms::getIfExists (display, "_NET_WM_WINDOW_TYPE_TOOLTIP");
+ else if ((styleFlags & ComponentPeer::windowHasDropShadow) == 0 && Desktop::canUseSemiTransparentWindows())
netHints [0] = XWindowSystemUtilities::Atoms::getIfExists (display, "_NET_WM_WINDOW_TYPE_COMBO");
else
netHints [0] = XWindowSystemUtilities::Atoms::getIfExists (display, "_NET_WM_WINDOW_TYPE_NORMAL");

+ 16
- 0
libs/juce-current/patches/fix-linux-thread-priorities.patch View File

@@ -0,0 +1,16 @@
diff --git a/modules/juce_core/native/juce_posix_SharedCode.h b/modules/juce_core/native/juce_posix_SharedCode.h
index fc04da66a..b83efeac8 100644
--- a/modules/juce_core/native/juce_posix_SharedCode.h
+++ b/modules/juce_core/native/juce_posix_SharedCode.h
@@ -977,7 +977,11 @@ bool Thread::setThreadPriority (void* handle, int priority)
if (pthread_getschedparam ((pthread_t) handle, &policy, &param) != 0)
return false;
+ #if JUCE_LINUX
+ policy = priority < 9 ? SCHED_OTHER : SCHED_RR;
+ #else
policy = priority == 0 ? SCHED_OTHER : SCHED_RR;
+ #endif
const int minPriority = sched_get_priority_min (policy);
const int maxPriority = sched_get_priority_max (policy);

+ 13
- 0
libs/juce-current/patches/fix-midi-message-constness.patch View File

@@ -0,0 +1,13 @@
diff --git a/modules/juce_audio_basics/midi/juce_MidiMessage.h b/modules/juce_audio_basics/midi/juce_MidiMessage.h
index 5628c3ae9..207bb9a0b 100644
--- a/modules/juce_audio_basics/midi/juce_MidiMessage.h
+++ b/modules/juce_audio_basics/midi/juce_MidiMessage.h
@@ -945,7 +945,7 @@ private:
#endif
inline bool isHeapAllocated() const noexcept { return size > (int) sizeof (packedData); }
- inline uint8* getData() const noexcept { return isHeapAllocated() ? packedData.allocatedData : (uint8*) packedData.asBytes; }
+ inline uint8* getData() const noexcept { return isHeapAllocated() ? packedData.allocatedData : const_cast<uint8*>(packedData.asBytes); }
uint8* allocateSpace (int);
};

+ 80
- 0
libs/juce-current/patches/flac-assume-sse.patch View File

@@ -0,0 +1,80 @@
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/cpu.c b/modules/juce_audio_formats/codecs/flac/libFLAC/cpu.c
index 4eac42e95..74d120e7d 100644
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/cpu.c
+++ b/modules/juce_audio_formats/codecs/flac/libFLAC/cpu.c
@@ -240,42 +240,7 @@ void FLAC__cpu_info(FLAC__CPUInfo *info)
disable_sse(info);
# endif
#elif defined(__linux__)
- int sse = 0;
- struct sigaction sigill_save;
- struct sigaction sigill_sse;
- sigill_sse.sa_sigaction = sigill_handler_sse_os;
- #ifdef __ANDROID__
- sigemptyset (&sigill_sse.sa_mask);
- #else
- __sigemptyset(&sigill_sse.sa_mask);
- #endif
- sigill_sse.sa_flags = SA_SIGINFO | SA_RESETHAND; /* SA_RESETHAND just in case our SIGILL return jump breaks, so we don't get stuck in a loop */
- if(0 == sigaction(SIGILL, &sigill_sse, &sigill_save))
- {
- /* http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html */
- /* see sigill_handler_sse_os() for an explanation of the following: */
- asm volatile (
- "xorps %%xmm0,%%xmm0\n\t" /* will cause SIGILL if unsupported by OS */
- "incl %0\n\t" /* SIGILL handler will jump over this */
- /* landing zone */
- "nop\n\t" /* SIGILL jump lands here if "inc" is 9 bytes */
- "nop\n\t"
- "nop\n\t"
- "nop\n\t"
- "nop\n\t"
- "nop\n\t"
- "nop\n\t" /* SIGILL jump lands here if "inc" is 3 bytes (expected) */
- "nop\n\t"
- "nop" /* SIGILL jump lands here if "inc" is 1 byte */
- : "=r"(sse)
- : "0"(sse)
- );
-
- sigaction(SIGILL, &sigill_save, NULL);
- }
-
- if(!sse)
- disable_sse(info);
+ int sse = 1;
#elif defined(_MSC_VER)
__try {
__asm {
@@ -287,30 +252,7 @@ void FLAC__cpu_info(FLAC__CPUInfo *info)
disable_sse(info);
}
#elif defined(__GNUC__) /* MinGW goes here */
- int sse = 0;
- /* Based on the idea described in Agner Fog's manual "Optimizing subroutines in assembly language" */
- /* In theory, not guaranteed to detect lack of OS SSE support on some future Intel CPUs, but in practice works (see the aforementioned manual) */
- if (ia32_fxsr) {
- struct {
- FLAC__uint32 buff[128];
- } __attribute__((aligned(16))) fxsr;
- FLAC__uint32 old_val, new_val;
-
- asm volatile ("fxsave %0" : "=m" (fxsr) : "m" (fxsr));
- old_val = fxsr.buff[50];
- fxsr.buff[50] ^= 0x0013c0de; /* change value in the buffer */
- asm volatile ("fxrstor %0" : "=m" (fxsr) : "m" (fxsr)); /* try to change SSE register */
- fxsr.buff[50] = old_val; /* restore old value in the buffer */
- asm volatile ("fxsave %0 " : "=m" (fxsr) : "m" (fxsr)); /* old value will be overwritten if SSE register was changed */
- new_val = fxsr.buff[50]; /* == old_val if FXRSTOR didn't change SSE register and (old_val ^ 0x0013c0de) otherwise */
- fxsr.buff[50] = old_val; /* again restore old value in the buffer */
- asm volatile ("fxrstor %0" : "=m" (fxsr) : "m" (fxsr)); /* restore old values of registers */
-
- if ((old_val^new_val) == 0x0013c0de)
- sse = 1;
- }
- if(!sse)
- disable_sse(info);
+ int sse = 1;
#else
/* no way to test, disable to be safe */
disable_sse(info);

+ 20
- 0
libs/juce-current/patches/juce_events-dispatch-public.patch View File

@@ -0,0 +1,20 @@
diff --git a/modules/juce_events/messages/juce_MessageManager.h b/modules/juce_events/messages/juce_MessageManager.h
index 22b2d1895..e94d0ce5a 100644
--- a/modules/juce_events/messages/juce_MessageManager.h
+++ b/modules/juce_events/messages/juce_MessageManager.h
@@ -316,6 +316,7 @@ public:
// Internal methods - do not use!
void deliverBroadcastMessage (const String&);
~MessageManager() noexcept;
+ static bool dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages);
#endif
private:
@@ -338,7 +339,6 @@ private:
static void* exitModalLoopCallback (void*);
static void doPlatformSpecificInitialisation();
static void doPlatformSpecificShutdown();
- static bool dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages);
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MessageManager)
};

+ 2991
- 0
libs/juce-current/patches/juce_vst_interface.patch
File diff suppressed because it is too large
View File


+ 13
- 0
libs/juce-current/patches/local-ladspa.patch View File

@@ -0,0 +1,13 @@
diff --git a/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp
index d65642de6..050941c6c 100644
--- a/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp
+++ b/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp
@@ -18,7 +18,7 @@
#if JUCE_PLUGINHOST_LADSPA && JUCE_LINUX
-#include <ladspa.h>
+#include "ladspa.h"
namespace juce
{

+ 13
- 0
libs/juce-current/patches/maybe-not-needed/fix-distrho-juceplugin-includes.patch View File

@@ -0,0 +1,13 @@
diff --git a/modules/juce_audio_plugin_client/utility/juce_IncludeModuleHeaders.h b/modules/juce_audio_plugin_client/utility/juce_IncludeModuleHeaders.h
index 701c4df..0e8a324 100644
--- a/modules/juce_audio_plugin_client/utility/juce_IncludeModuleHeaders.h
+++ b/modules/juce_audio_plugin_client/utility/juce_IncludeModuleHeaders.h
@@ -24,6 +24,8 @@
==============================================================================
*/
+#pragma once
+
#include "../juce_audio_plugin_client.h"
namespace juce

+ 44
- 0
libs/juce-current/patches/maybe-not-needed/mingw-fixes.patch View File

@@ -0,0 +1,44 @@
diff --git a/modules/juce_audio_devices/native/juce_win32_ASIO.cpp b/modules/juce_audio_devices/native/juce_win32_ASIO.cpp
index c919767..e6d88aa 100644
--- a/modules/juce_audio_devices/native/juce_win32_ASIO.cpp
+++ b/modules/juce_audio_devices/native/juce_win32_ASIO.cpp
@@ -1413,7 +1413,11 @@ private:
void setCallbackFunctions() noexcept
{
- ASIOCallbackFunctions<0>::setCallbacksForDevice (callbacks, this);
+ /**/ if (currentASIODev[0] == this) ASIOCallbackFunctions<0>::setCallbacks (callbacks);
+ else if (currentASIODev[1] == this) ASIOCallbackFunctions<1>::setCallbacks (callbacks);
+ else if (currentASIODev[2] == this) ASIOCallbackFunctions<2>::setCallbacks (callbacks);
+ else if (currentASIODev[3] == this) ASIOCallbackFunctions<3>::setCallbacks (callbacks);
+ else jassertfalse;
}
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ASIOAudioIODevice)
diff --git a/modules/juce_audio_processors/format_types/juce_VST3Headers.h b/modules/juce_audio_processors/format_types/juce_VST3Headers.h
index 1eec325..de33170 100644
--- a/modules/juce_audio_processors/format_types/juce_VST3Headers.h
+++ b/modules/juce_audio_processors/format_types/juce_VST3Headers.h
@@ -86,6 +86,9 @@
#include <public.sdk/source/common/memorystream.h>
#include <public.sdk/source/vst/vsteditcontroller.h>
#else
+ #if JUCE_MINGW
+ #define _set_abort_behavior(...)
+ #endif
#include <base/source/baseiids.cpp>
#include <base/source/fbuffer.cpp>
#include <base/source/fdebug.cpp>
diff --git a/modules/juce_core/native/juce_BasicNativeHeaders.h b/modules/juce_core/native/juce_BasicNativeHeaders.h
index 088832b..9ce110c 100644
--- a/modules/juce_core/native/juce_BasicNativeHeaders.h
+++ b/modules/juce_core/native/juce_BasicNativeHeaders.h
@@ -117,7 +117,7 @@
#define STRICT 1
#define WIN32_LEAN_AND_MEAN 1
#if JUCE_MINGW
- #define _WIN32_WINNT 0x0501
+ #define _WIN32_WINNT 0x0502
#else
#define _WIN32_WINNT 0x0602
#endif

+ 201
- 0
libs/juce-current/patches/maybe-not-needed/mingw-fixes_pt2.patch View File

@@ -0,0 +1,201 @@
diff --git a/modules/juce_audio_basics/juce_audio_basics.cpp b/modules/juce_audio_basics/juce_audio_basics.cpp
index c5a6bfa..fae5bff 100644
--- a/modules/juce_audio_basics/juce_audio_basics.cpp
+++ b/modules/juce_audio_basics/juce_audio_basics.cpp
@@ -31,7 +31,7 @@
#include "juce_audio_basics.h"
-#if JUCE_MINGW && ! defined (__SSE2__)
+#if JUCE_MINGW
#define JUCE_USE_SSE_INTRINSICS 0
#endif
diff --git a/modules/juce_audio_processors/format_types/juce_VST3Headers.h b/modules/juce_audio_processors/format_types/juce_VST3Headers.h
index de33170..ef37a65 100644
--- a/modules/juce_audio_processors/format_types/juce_VST3Headers.h
+++ b/modules/juce_audio_processors/format_types/juce_VST3Headers.h
@@ -90,12 +90,13 @@
#define _set_abort_behavior(...)
#endif
#include <base/source/baseiids.cpp>
+ #include <base/source/fatomic.cpp>
#include <base/source/fbuffer.cpp>
#include <base/source/fdebug.cpp>
#include <base/source/fobject.cpp>
#include <base/source/fstreamer.cpp>
#include <base/source/fstring.cpp>
- #include <base/source/flock.cpp>
+ #include <base/source/fthread.cpp>
#include <base/source/updatehandler.cpp>
#include <pluginterfaces/base/conststringtable.cpp>
#include <pluginterfaces/base/funknown.cpp>
diff --git a/modules/juce_events/native/juce_win32_Messaging.cpp b/modules/juce_events/native/juce_win32_Messaging.cpp
index f55e540..12858ba 100644
--- a/modules/juce_events/native/juce_win32_Messaging.cpp
+++ b/modules/juce_events/native/juce_win32_Messaging.cpp
@@ -104,7 +104,7 @@ namespace WindowsMessageHelpers
}
}
-#if JUCE_MODULE_AVAILABLE_juce_gui_extra
+#if JUCE_MODULE_AVAILABLE_juce_gui_extra && ! JUCE_MINGW
LRESULT juce_offerEventToActiveXControl (::MSG&);
#endif
@@ -119,7 +119,7 @@ bool MessageManager::dispatchNextMessageOnSystemQueue (const bool returnIfNoPend
if (GetMessage (&m, (HWND) 0, 0, 0) >= 0)
{
- #if JUCE_MODULE_AVAILABLE_juce_gui_extra
+ #if JUCE_MODULE_AVAILABLE_juce_gui_extra && ! JUCE_MINGW
if (juce_offerEventToActiveXControl (m) != S_FALSE)
return true;
#endif
diff --git a/modules/juce_gui_basics/juce_gui_basics.cpp b/modules/juce_gui_basics/juce_gui_basics.cpp
index b710d39..a98f00e 100644
--- a/modules/juce_gui_basics/juce_gui_basics.cpp
+++ b/modules/juce_gui_basics/juce_gui_basics.cpp
@@ -83,6 +83,7 @@
#if JUCE_MINGW
#include <imm.h>
+ #define JUCE_DISABLE_WIN32_DPI_AWARENESS 1
#endif
//==============================================================================
diff --git a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp
index 569c400..a390474 100644
--- a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp
+++ b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp
@@ -206,6 +206,10 @@ extern void* getUser32Function (const char*);
};
#endif
+#if JUCE_MINGW
+static bool canUseMultiTouch() { return false; }
+static void checkForPointerAPI() { }
+#else
typedef BOOL (WINAPI* RegisterTouchWindowFunc) (HWND, ULONG);
typedef BOOL (WINAPI* GetTouchInputInfoFunc) (HTOUCHINPUT, UINT, TOUCHINPUT*, int);
typedef BOOL (WINAPI* CloseTouchInputHandleFunc) (HTOUCHINPUT);
@@ -259,6 +263,7 @@ static void checkForPointerAPI()
&& getPointerTouchInfo != nullptr
&& getPointerPenInfo != nullptr);
}
+#endif
static Rectangle<int> rectangleFromRECT (const RECT& r) noexcept
{
@@ -1578,7 +1583,9 @@ private:
case WM_MOUSEACTIVATE:
case WM_NCMOUSEHOVER:
case WM_MOUSEHOVER:
+#if ! JUCE_MINGW
case WM_TOUCH:
+#endif
case WM_POINTERUPDATE:
case WM_NCPOINTERUPDATE:
case WM_POINTERWHEEL:
@@ -1694,8 +1701,10 @@ private:
RegisterDragDrop (hwnd, dropTarget);
+#if ! JUCE_MINGW
if (canUseMultiTouch())
registerTouchWindow (hwnd, 0);
+#endif
setDPIAwareness();
setMessageFilter();
@@ -2025,8 +2034,10 @@ private:
bool isTouchEvent() noexcept
{
+#if ! JUCE_MINGW
if (registerTouchWindow == nullptr)
return false;
+#endif
// Relevant info about touch/pen detection flags:
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms703320(v=vs.85).aspx
@@ -2194,6 +2205,7 @@ private:
static MouseInputSource::InputSourceType getPointerType (WPARAM wParam)
{
+#if ! JUCE_MINGW
if (getPointerTypeFunction != nullptr)
{
POINTER_INPUT_TYPE pointerType;
@@ -2207,6 +2219,7 @@ private:
return MouseInputSource::InputSourceType::pen;
}
}
+#endif
return MouseInputSource::InputSourceType::mouse;
}
@@ -2228,6 +2241,7 @@ private:
peer->handleMouseWheel (getPointerType (wParam), localPos, getMouseEventTime(), wheel);
}
+#if ! JUCE_MINGW
bool doGestureEvent (LPARAM lParam)
{
GESTUREINFO gi;
@@ -2403,6 +2417,7 @@ private:
return touchInput;
}
+#endif
bool handlePenInput (POINTER_PEN_INFO penInfo, Point<float> pos, const float pressure, bool isDown, bool isUp)
{
@@ -2945,6 +2960,7 @@ private:
return 1;
+#if ! JUCE_MINGW
//==============================================================================
case WM_POINTERUPDATE:
if (handlePointerInput (wParam, lParam, false, false))
@@ -2960,6 +2976,7 @@ private:
if (handlePointerInput (wParam, lParam, false, true))
return 0;
break;
+#endif
//==============================================================================
case WM_MOUSEMOVE: doMouseMove (getPointFromLParam (lParam), false); return 0;
@@ -2990,6 +3007,7 @@ private:
return 0;
+#if ! JUCE_MINGW
case WM_TOUCH:
if (getTouchInputInfo != nullptr)
return doTouchEvent ((int) wParam, (HTOUCHINPUT) lParam);
@@ -3001,6 +3019,7 @@ private:
return 0;
break;
+#endif
//==============================================================================
case WM_SIZING: return handleSizeConstraining (*(RECT*) lParam, wParam);
@@ -3898,6 +3917,7 @@ static BOOL CALLBACK enumMonitorsProc (HMONITOR hm, HDC, LPRECT r, LPARAM userIn
const bool isMain = (info.dwFlags & 1 /* MONITORINFOF_PRIMARY */) != 0;
double dpi = 0;
+ #if ! JUCE_DISABLE_WIN32_DPI_AWARENESS
if (getDPIForMonitor != nullptr)
{
UINT dpiX = 0, dpiY = 0;
@@ -3905,6 +3925,7 @@ static BOOL CALLBACK enumMonitorsProc (HMONITOR hm, HDC, LPRECT r, LPARAM userIn
if (SUCCEEDED (getDPIForMonitor (hm, MDT_Default, &dpiX, &dpiY)))
dpi = (dpiX + dpiY) / 2.0;
}
+ #endif
((Array<MonitorInfo>*) userInfo)->add (MonitorInfo (rectangleFromRECT (*r), isMain, dpi));

+ 79
- 0
libs/juce-current/patches/maybe-not-needed/mingw-fixes_temp-pt1.patch View File

@@ -0,0 +1,79 @@
diff --git a/modules/juce_core/juce_core.cpp b/modules/juce_core/juce_core.cpp
index 7d10dfa..a2d6a97 100644
--- a/modules/juce_core/juce_core.cpp
+++ b/modules/juce_core/juce_core.cpp
@@ -60,6 +60,7 @@
#if JUCE_MINGW
#include <ws2spi.h>
+ _locale_t _create_locale(int, const char*) { _locale_t loc; juce::zeromem(&loc, sizeof(loc)); return loc; }
#endif
#else
diff --git a/modules/juce_core/native/juce_win32_Files.cpp b/modules/juce_core/native/juce_win32_Files.cpp
index 5185d12..17c2e34 100644
--- a/modules/juce_core/native/juce_win32_Files.cpp
+++ b/modules/juce_core/native/juce_win32_Files.cpp
@@ -682,7 +682,7 @@ File File::getLinkedTarget() const
CloseHandle (h);
const StringRef prefix ("\\\\?\\");
- const String path (buffer);
+ const String path (buffer.getData());
// It turns out that GetFinalPathNameByHandleW prepends \\?\ to the path.
// This is not a bug, it's feature. See MSDN for more information.
diff --git a/modules/juce_core/text/juce_CharacterFunctions.h b/modules/juce_core/text/juce_CharacterFunctions.h
index e4b2337..00d02d0 100644
--- a/modules/juce_core/text/juce_CharacterFunctions.h
+++ b/modules/juce_core/text/juce_CharacterFunctions.h
@@ -218,7 +218,7 @@ public:
*currentCharacter++ = '0';
}
- #if JUCE_MSVC
+ #if JUCE_WINDOWS
static _locale_t locale = _create_locale (LC_ALL, "C");
return _strtod_l (&buffer[0], nullptr, locale);
#else
diff --git a/modules/juce_gui_basics/native/juce_win32_FileChooser.cpp b/modules/juce_gui_basics/native/juce_win32_FileChooser.cpp
index 728a4c6..353263a 100644
--- a/modules/juce_gui_basics/native/juce_win32_FileChooser.cpp
+++ b/modules/juce_gui_basics/native/juce_win32_FileChooser.cpp
@@ -202,7 +202,7 @@ void FileChooser::showPlatformDialog (Array<File>& results, const String& title_
if (info.returnedString.isNotEmpty())
{
- results.add (File (String (files)).getSiblingFile (info.returnedString));
+ results.add (File (String (files.getData())).getSiblingFile (info.returnedString));
return;
}
}
@@ -287,12 +287,12 @@ void FileChooser::showPlatformDialog (Array<File>& results, const String& title_
while (*filename != 0)
{
- results.add (File (String (files)).getChildFile (String (filename)));
+ results.add (File (String (files.getData())).getChildFile (String (filename)));
filename += wcslen (filename) + 1;
}
}
else if (files[0] != 0)
{
- results.add (File (String (files)));
+ results.add (File (String (files.getData())));
}
}
diff --git a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp
index 22e783b..607d11b 100644
--- a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp
+++ b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp
@@ -3440,7 +3440,7 @@ private:
HeapBlock<TCHAR> buffer;
buffer.calloc (stringSizeBytes / sizeof (TCHAR) + 1);
ImmGetCompositionString (hImc, type, buffer, (DWORD) stringSizeBytes);
- return String (buffer);
+ return String (buffer.getData());
}
return {};

+ 14
- 0
libs/juce-current/patches/maybe-not-needed/vst3-less-strict.patch View File

@@ -0,0 +1,14 @@
diff --git a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp
index 88d8f49..7a5d661 100644
--- a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp
+++ b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp
@@ -1356,7 +1356,8 @@ private:
auto result = finder.findDescriptionsAndPerform (f);
- if (result.getErrorMessage() == MatchingDescriptionFinder::getSuccessString())
+ if (result.getErrorMessage() == MatchingDescriptionFinder::getSuccessString() ||
+ result.getErrorMessage().isEmpty())
{
name = description.name;
return true;

+ 14
- 0
libs/juce-current/patches/mingw-fixes_pt1.patch View File

@@ -0,0 +1,14 @@
diff --git a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp
index bf7b4af22..bdb285290 100644
--- a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp
+++ b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp
@@ -56,9 +56,6 @@ JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4355)
#ifndef WM_APPCOMMAND
#define WM_APPCOMMAND 0x0319
#endif
-
- extern "C" void _fpreset();
- extern "C" void _clearfp();
#elif ! JUCE_WINDOWS
static void _fpreset() {}
static void _clearfp() {}

+ 37
- 0
libs/juce-current/patches/no-linux-native-dialog-without-modal-loops.patch View File

@@ -0,0 +1,37 @@
diff --git a/modules/juce_gui_basics/native/juce_linux_FileChooser.cpp b/modules/juce_gui_basics/native/juce_linux_FileChooser.cpp
index 62a1e8454..778168fc7 100644
--- a/modules/juce_gui_basics/native/juce_linux_FileChooser.cpp
+++ b/modules/juce_gui_basics/native/juce_linux_FileChooser.cpp
@@ -19,6 +19,7 @@
namespace juce
{
+#if JUCE_MODAL_LOOPS_PERMITTED
static bool exeIsAvailable (const char* const executable)
{
ChildProcess child;
@@ -233,10 +234,11 @@ private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Native)
};
+#endif
bool FileChooser::isPlatformDialogAvailable()
{
- #if JUCE_DISABLE_NATIVE_FILECHOOSERS
+ #if JUCE_DISABLE_NATIVE_FILECHOOSERS || ! JUCE_MODAL_LOOPS_PERMITTED
return false;
#else
static bool canUseNativeBox = exeIsAvailable ("zenity") || exeIsAvailable ("kdialog");
@@ -246,7 +248,11 @@ bool FileChooser::isPlatformDialogAvailable()
FileChooser::Pimpl* FileChooser::showPlatformDialog (FileChooser& owner, int flags, FilePreviewComponent*)
{
+#if JUCE_MODAL_LOOPS_PERMITTED
return new Native (owner, flags);
+#else
+ return nullptr;
+#endif
}
} // namespace juce

+ 46
- 0
libs/juce-current/patches/proper-posix-getExecutableFile.patch View File

@@ -0,0 +1,46 @@
diff --git a/modules/juce_core/native/juce_posix_SharedCode.h b/modules/juce_core/native/juce_posix_SharedCode.h
index 1fc1f00b7..2b0e16844 100644
--- a/modules/juce_core/native/juce_posix_SharedCode.h
+++ b/modules/juce_core/native/juce_posix_SharedCode.h
@@ -590,12 +590,39 @@ File juce_getExecutableFile()
auto localSymbol = (void*) juce_getExecutableFile;
dladdr (localSymbol, &exeInfo);
- return CharPointer_UTF8 (exeInfo.dli_fname);
+
+ const CharPointer_UTF8 filename (exeInfo.dli_fname);
+
+ // if the filename is absolute simply return it
+ if (File::isAbsolutePath (filename))
+ return filename;
+
+ // if the filename is relative construct from CWD
+ if (filename[0] == '.')
+ return File::getCurrentWorkingDirectory().getChildFile (filename).getFullPathName();
+
+ // filename is abstract, look up in PATH
+ if (const char* const envpath = ::getenv ("PATH"))
+ {
+ StringArray paths (StringArray::fromTokens (envpath, ":", ""));
+
+ for (int i=paths.size(); --i>=0;)
+ {
+ const File filepath (File (paths[i]).getChildFile (filename));
+
+ if (filepath.existsAsFile())
+ return filepath.getFullPathName();
+ }
+ }
+
+ // if we reach this, we failed to find ourselves...
+ jassertfalse;
+ return filename;
}
};
static String filename = DLAddrReader::getFilename();
- return File::getCurrentWorkingDirectory().getChildFile (filename);
+ return filename;
}
//==============================================================================

+ 114
- 0
libs/juce-current/patches/to-delete/osx-ui-processors-utils-separate.patch View File

@@ -0,0 +1,114 @@
diff --git a/modules/juce_audio_processors/juce_audio_processors.cpp b/modules/juce_audio_processors/juce_audio_processors.cpp
index 20dee10..ca6dd27 100644
--- a/modules/juce_audio_processors/juce_audio_processors.cpp
+++ b/modules/juce_audio_processors/juce_audio_processors.cpp
@@ -86,24 +86,9 @@ static inline bool arrayContainsPlugin (const OwnedArray<PluginDescription>& lis
struct AutoResizingNSViewComponent : public ViewComponentBaseClass,
private AsyncUpdater
{
- AutoResizingNSViewComponent() : recursive (false) {}
-
- void childBoundsChanged (Component*) override
- {
- if (recursive)
- {
- triggerAsyncUpdate();
- }
- else
- {
- recursive = true;
- resizeToFitView();
- recursive = true;
- }
- }
-
- void handleAsyncUpdate() override { resizeToFitView(); }
-
+ AutoResizingNSViewComponent();
+ void childBoundsChanged (Component*) override;
+ void handleAsyncUpdate() override;
bool recursive;
};
@@ -111,33 +96,61 @@ struct AutoResizingNSViewComponent : public ViewComponentBaseClass,
struct AutoResizingNSViewComponentWithParent : public AutoResizingNSViewComponent,
private Timer
{
- AutoResizingNSViewComponentWithParent()
- {
- JUCE_IOS_MAC_VIEW* v = [[JUCE_IOS_MAC_VIEW alloc] init];
- setView (v);
- [v release];
+ AutoResizingNSViewComponentWithParent();
+ JUCE_IOS_MAC_VIEW* getChildView() const;
+ void timerCallback() override;
+};
- startTimer (30);
- }
+//==============================================================================
+AutoResizingNSViewComponent::AutoResizingNSViewComponent()
+ : recursive (false) {}
- JUCE_IOS_MAC_VIEW* getChildView() const
+void AutoResizingNSViewComponent::childBoundsChanged (Component*) override
+{
+ if (recursive)
{
- if (JUCE_IOS_MAC_VIEW* parent = (JUCE_IOS_MAC_VIEW*) getView())
- if ([[parent subviews] count] > 0)
- return [[parent subviews] objectAtIndex: 0];
-
- return nil;
+ triggerAsyncUpdate();
}
+ else
+ {
+ recursive = true;
+ resizeToFitView();
+ recursive = true;
+ }
+}
- void timerCallback() override
+void AutoResizingNSViewComponent::handleAsyncUpdate() override
+{
+ resizeToFitView();
+}
+
+//==============================================================================
+AutoResizingNSViewComponentWithParent::AutoResizingNSViewComponentWithParent()
+{
+ JUCE_IOS_MAC_VIEW* v = [[JUCE_IOS_MAC_VIEW alloc] init];
+ setView (v);
+ [v release];
+
+ startTimer (30);
+}
+
+JUCE_IOS_MAC_VIEW* AutoResizingNSViewComponentWithParent::getChildView() const
+{
+ if (JUCE_IOS_MAC_VIEW* parent = (JUCE_IOS_MAC_VIEW*) getView())
+ if ([[parent subviews] count] > 0)
+ return [[parent subviews] objectAtIndex: 0];
+
+ return nil;
+}
+
+void AutoResizingNSViewComponentWithParent::timerCallback() override
+{
+ if (JUCE_IOS_MAC_VIEW* child = getChildView())
{
- if (JUCE_IOS_MAC_VIEW* child = getChildView())
- {
- stopTimer();
- setView (child);
- }
+ stopTimer();
+ setView (child);
}
-};
+}
#endif
#if JUCE_CLANG

+ 244
- 0
libs/juce-current/patches/todo/juce_IIRFilterOld.cpp View File

@@ -0,0 +1,244 @@
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2013 - Raw Material Software Ltd.
Permission is granted to use this software under the terms of either:
a) the GPL v2 (or any later version)
b) the Affero GPL v3
Details of these licenses can be found at: www.gnu.org/licenses
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
------------------------------------------------------------------------------
To release a closed-source product which uses JUCE, commercial licenses are
available: visit www.juce.com for more information.
==============================================================================
*/
#if JUCE_INTEL
#define JUCE_SNAP_TO_ZERO(n) if (! (n < -1.0e-8 || n > 1.0e-8)) n = 0;
#else
#define JUCE_SNAP_TO_ZERO(n)
#endif
namespace juce
{
//==============================================================================
IIRFilterOld::IIRFilterOld()
: active (false), v1 (0), v2 (0)
{
zeromem (coefficients, sizeof (coefficients));
}
IIRFilterOld::IIRFilterOld (const IIRFilterOld& other)
: active (other.active), v1 (0), v2 (0)
{
const SpinLock::ScopedLockType sl (other.processLock);
memcpy (coefficients, other.coefficients, sizeof (coefficients));
}
IIRFilterOld::~IIRFilterOld()
{
}
//==============================================================================
void IIRFilterOld::reset() noexcept
{
const SpinLock::ScopedLockType sl (processLock);
v1 = v2 = 0;
}
float IIRFilterOld::processSingleSampleRaw (const float in) noexcept
{
float out = coefficients[0] * in + v1;
JUCE_SNAP_TO_ZERO (out);
v1 = coefficients[1] * in - coefficients[3] * out + v2;
v2 = coefficients[2] * in - coefficients[4] * out;
return out;
}
void IIRFilterOld::processSamples (float* const samples,
const int numSamples) noexcept
{
const SpinLock::ScopedLockType sl (processLock);
if (active)
{
const float c0 = coefficients[0];
const float c1 = coefficients[1];
const float c2 = coefficients[2];
const float c3 = coefficients[3];
const float c4 = coefficients[4];
float lv1 = v1, lv2 = v2;
for (int i = 0; i < numSamples; ++i)
{
const float in = samples[i];
const float out = c0 * in + lv1;
samples[i] = out;
lv1 = c1 * in - c3 * out + lv2;
lv2 = c2 * in - c4 * out;
}
JUCE_SNAP_TO_ZERO (lv1); v1 = lv1;
JUCE_SNAP_TO_ZERO (lv2); v2 = lv2;
}
}
//==============================================================================
void IIRFilterOld::makeLowPass (const double sampleRate,
const double frequency) noexcept
{
jassert (sampleRate > 0);
const double n = 1.0 / tan (double_Pi * frequency / sampleRate);
const double nSquared = n * n;
const double c1 = 1.0 / (1.0 + std::sqrt (2.0) * n + nSquared);
setCoefficients (c1,
c1 * 2.0f,
c1,
1.0,
c1 * 2.0 * (1.0 - nSquared),
c1 * (1.0 - std::sqrt (2.0) * n + nSquared));
}
void IIRFilterOld::makeHighPass (const double sampleRate,
const double frequency) noexcept
{
const double n = tan (double_Pi * frequency / sampleRate);
const double nSquared = n * n;
const double c1 = 1.0 / (1.0 + std::sqrt (2.0) * n + nSquared);
setCoefficients (c1,
c1 * -2.0f,
c1,
1.0,
c1 * 2.0 * (nSquared - 1.0),
c1 * (1.0 - std::sqrt (2.0) * n + nSquared));
}
void IIRFilterOld::makeLowShelf (const double sampleRate,
const double cutOffFrequency,
const double Q,
const float gainFactor) noexcept
{
jassert (sampleRate > 0);
jassert (Q > 0);
const double A = jmax (0.0f, gainFactor);
const double aminus1 = A - 1.0;
const double aplus1 = A + 1.0;
const double omega = (double_Pi * 2.0 * jmax (cutOffFrequency, 2.0)) / sampleRate;
const double coso = std::cos (omega);
const double beta = std::sin (omega) * std::sqrt (A) / Q;
const double aminus1TimesCoso = aminus1 * coso;
setCoefficients (A * (aplus1 - aminus1TimesCoso + beta),
A * 2.0 * (aminus1 - aplus1 * coso),
A * (aplus1 - aminus1TimesCoso - beta),
aplus1 + aminus1TimesCoso + beta,
-2.0 * (aminus1 + aplus1 * coso),
aplus1 + aminus1TimesCoso - beta);
}
void IIRFilterOld::makeHighShelf (const double sampleRate,
const double cutOffFrequency,
const double Q,
const float gainFactor) noexcept
{
jassert (sampleRate > 0);
jassert (Q > 0);
const double A = jmax (0.0f, gainFactor);
const double aminus1 = A - 1.0;
const double aplus1 = A + 1.0;
const double omega = (double_Pi * 2.0 * jmax (cutOffFrequency, 2.0)) / sampleRate;
const double coso = std::cos (omega);
const double beta = std::sin (omega) * std::sqrt (A) / Q;
const double aminus1TimesCoso = aminus1 * coso;
setCoefficients (A * (aplus1 + aminus1TimesCoso + beta),
A * -2.0 * (aminus1 + aplus1 * coso),
A * (aplus1 + aminus1TimesCoso - beta),
aplus1 - aminus1TimesCoso + beta,
2.0 * (aminus1 - aplus1 * coso),
aplus1 - aminus1TimesCoso - beta);
}
void IIRFilterOld::makeBandPass (const double sampleRate,
const double centreFrequency,
const double Q,
const float gainFactor) noexcept
{
jassert (sampleRate > 0);
jassert (Q > 0);
const double A = jmax (0.0f, gainFactor);
const double omega = (double_Pi * 2.0 * jmax (centreFrequency, 2.0)) / sampleRate;
const double alpha = 0.5 * std::sin (omega) / Q;
const double c2 = -2.0 * std::cos (omega);
const double alphaTimesA = alpha * A;
const double alphaOverA = alpha / A;
setCoefficients (1.0 + alphaTimesA,
c2,
1.0 - alphaTimesA,
1.0 + alphaOverA,
c2,
1.0 - alphaOverA);
}
void IIRFilterOld::makeInactive() noexcept
{
const SpinLock::ScopedLockType sl (processLock);
active = false;
}
//==============================================================================
void IIRFilterOld::copyCoefficientsFrom (const IIRFilterOld& other) noexcept
{
const SpinLock::ScopedLockType sl (processLock);
memcpy (coefficients, other.coefficients, sizeof (coefficients));
active = other.active;
}
//==============================================================================
void IIRFilterOld::setCoefficients (double c1, double c2, double c3,
double c4, double c5, double c6) noexcept
{
const double a = 1.0 / c4;
c1 *= a;
c2 *= a;
c3 *= a;
c5 *= a;
c6 *= a;
const SpinLock::ScopedLockType sl (processLock);
coefficients[0] = (float) c1;
coefficients[1] = (float) c2;
coefficients[2] = (float) c3;
coefficients[3] = (float) c5;
coefficients[4] = (float) c6;
active = true;
}
#undef JUCE_SNAP_TO_ZERO
} // namespace juce

+ 151
- 0
libs/juce-current/patches/todo/juce_IIRFilterOld.h View File

@@ -0,0 +1,151 @@
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2013 - Raw Material Software Ltd.
Permission is granted to use this software under the terms of either:
a) the GPL v2 (or any later version)
b) the Affero GPL v3
Details of these licenses can be found at: www.gnu.org/licenses
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
------------------------------------------------------------------------------
To release a closed-source product which uses JUCE, commercial licenses are
available: visit www.juce.com for more information.
==============================================================================
*/
#ifndef __JUCE_IIRFILTER_OLD_JUCEHEADER__
#define __JUCE_IIRFILTER_OLD_JUCEHEADER__
namespace juce
{
//==============================================================================
/**
An IIR filter that can perform low, high, or band-pass filtering on an
audio signal.
@see IIRFilterAudioSource
*/
class JUCE_API IIRFilterOld
{
public:
//==============================================================================
/** Creates a filter.
Initially the filter is inactive, so will have no effect on samples that
you process with it. Use the appropriate method to turn it into the type
of filter needed.
*/
IIRFilterOld();
/** Creates a copy of another filter. */
IIRFilterOld (const IIRFilterOld& other);
/** Destructor. */
~IIRFilterOld();
//==============================================================================
/** Resets the filter's processing pipeline, ready to start a new stream of data.
Note that this clears the processing state, but the type of filter and
its coefficients aren't changed. To put a filter into an inactive state, use
the makeInactive() method.
*/
void reset() noexcept;
/** Performs the filter operation on the given set of samples.
*/
void processSamples (float* samples,
int numSamples) noexcept;
/** Processes a single sample, without any locking or checking.
Use this if you need fast processing of a single value, but be aware that
this isn't thread-safe in the way that processSamples() is.
*/
float processSingleSampleRaw (float sample) noexcept;
//==============================================================================
/** Sets the filter up to act as a low-pass filter.
*/
void makeLowPass (double sampleRate,
double frequency) noexcept;
/** Sets the filter up to act as a high-pass filter.
*/
void makeHighPass (double sampleRate,
double frequency) noexcept;
//==============================================================================
/** Sets the filter up to act as a low-pass shelf filter with variable Q and gain.
The gain is a scale factor that the low frequencies are multiplied by, so values
greater than 1.0 will boost the low frequencies, values less than 1.0 will
attenuate them.
*/
void makeLowShelf (double sampleRate,
double cutOffFrequency,
double Q,
float gainFactor) noexcept;
/** Sets the filter up to act as a high-pass shelf filter with variable Q and gain.
The gain is a scale factor that the high frequencies are multiplied by, so values
greater than 1.0 will boost the high frequencies, values less than 1.0 will
attenuate them.
*/
void makeHighShelf (double sampleRate,
double cutOffFrequency,
double Q,
float gainFactor) noexcept;
/** Sets the filter up to act as a band pass filter centred around a
frequency, with a variable Q and gain.
The gain is a scale factor that the centre frequencies are multiplied by, so
values greater than 1.0 will boost the centre frequencies, values less than
1.0 will attenuate them.
*/
void makeBandPass (double sampleRate,
double centreFrequency,
double Q,
float gainFactor) noexcept;
/** Clears the filter's coefficients so that it becomes inactive.
*/
void makeInactive() noexcept;
//==============================================================================
/** Makes this filter duplicate the set-up of another one.
*/
void copyCoefficientsFrom (const IIRFilterOld& other) noexcept;
protected:
//==============================================================================
SpinLock processLock;
void setCoefficients (double c1, double c2, double c3,
double c4, double c5, double c6) noexcept;
bool active;
float coefficients[5];
float v1, v2;
// (use the copyCoefficientsFrom() method instead of this operator)
IIRFilterOld& operator= (const IIRFilterOld&);
JUCE_LEAK_DETECTOR (IIRFilterOld)
};
} // namespace juce
#endif // __JUCE_IIRFILTER_OLD_JUCEHEADER__

+ 24
- 0
libs/juce-current/patches/todo/juce_IIRFilterOld.patch View File

@@ -0,0 +1,24 @@
diff --git a/modules/juce_audio_basics/juce_audio_basics.cpp b/modules/juce_audio_basics/juce_audio_basics.cpp
index 258de8f..c5a6bfa 100644
--- a/modules/juce_audio_basics/juce_audio_basics.cpp
+++ b/modules/juce_audio_basics/juce_audio_basics.cpp
@@ -83,6 +83,7 @@ namespace juce
#include "buffers/juce_FloatVectorOperations.cpp"
#include "buffers/juce_AudioChannelSet.cpp"
#include "effects/juce_IIRFilter.cpp"
+#include "effects/juce_IIRFilterOld.cpp"
#include "effects/juce_LagrangeInterpolator.cpp"
#include "effects/juce_CatmullRomInterpolator.cpp"
#include "midi/juce_MidiBuffer.cpp"
diff --git a/modules/juce_audio_basics/juce_audio_basics.h b/modules/juce_audio_basics/juce_audio_basics.h
index feb2a6e..ce6c8f4 100644
--- a/modules/juce_audio_basics/juce_audio_basics.h
+++ b/modules/juce_audio_basics/juce_audio_basics.h
@@ -63,6 +63,7 @@ namespace juce
#include "buffers/juce_AudioChannelSet.h"
#include "effects/juce_Decibels.h"
#include "effects/juce_IIRFilter.h"
+#include "effects/juce_IIRFilterOld.h"
#include "effects/juce_LagrangeInterpolator.h"
#include "effects/juce_CatmullRomInterpolator.h"
#include "effects/juce_LinearSmoothedValue.h"

+ 15
- 0
libs/juce-current/patches/use-mingw-std-threads.patch View File

@@ -0,0 +1,15 @@
diff --git a/modules/juce_core/threads/juce_WaitableEvent.h b/modules/juce_core/threads/juce_WaitableEvent.h
index 3e31a9772..766d45f75 100644
--- a/modules/juce_core/threads/juce_WaitableEvent.h
+++ b/modules/juce_core/threads/juce_WaitableEvent.h
@@ -20,6 +20,10 @@
==============================================================================
*/
+#if JUCE_MINGW
+#include "mingw-std-threads/mingw.condition_variable.h"
+#endif
+
namespace juce
{

+ 119
- 0
libs/juce-current/patches/use-vfork+consistency.patch View File

@@ -0,0 +1,119 @@
diff --git a/modules/juce_core/native/juce_linux_Files.cpp b/modules/juce_core/native/juce_linux_Files.cpp
index e794447c3..4f8918375 100644
--- a/modules/juce_core/native/juce_linux_Files.cpp
+++ b/modules/juce_core/native/juce_linux_Files.cpp
@@ -211,15 +211,21 @@ bool Process::openDocument (const String& fileName, const String& parameters)
const char* const argv[4] = { "/bin/sh", "-c", cmdString.toUTF8(), nullptr };
- auto cpid = fork();
+#if JUCE_USE_VFORK
+ const auto cpid = vfork();
+#else
+ const auto cpid = fork();
+#endif
if (cpid == 0)
{
+#if ! JUCE_USE_VFORK
setsid();
+#endif
// Child process
- execve (argv[0], (char**) argv, environ);
- exit (0);
+ if (execvp (argv[0], (char**) argv) < 0)
+ _exit (0);
}
return cpid >= 0;
diff --git a/modules/juce_core/native/juce_mac_Files.mm b/modules/juce_core/native/juce_mac_Files.mm
index 73ed29f4e..d6c4fcf3e 100644
--- a/modules/juce_core/native/juce_mac_Files.mm
+++ b/modules/juce_core/native/juce_mac_Files.mm
@@ -92,23 +92,22 @@ namespace MacFileHelpers
#else
static bool launchExecutable (const String& pathAndArguments)
{
+ const char* const argv[4] = { "/bin/sh", "-c", pathAndArguments.toUTF8(), nullptr };
+
+#if JUCE_USE_VFORK
+ const auto cpid = vfork();
+#else
auto cpid = fork();
+#endif
if (cpid == 0)
{
- const char* const argv[4] = { "/bin/sh", "-c", pathAndArguments.toUTF8(), nullptr };
-
// Child process
- if (execve (argv[0], (char**) argv, nullptr) < 0)
- exit (0);
- }
- else
- {
- if (cpid < 0)
- return false;
+ if (execvp (argv[0], (char**) argv) < 0)
+ _exit (0);
}
- return true;
+ return cpid >= 0;
}
#endif
}
diff --git a/modules/juce_core/native/juce_posix_SharedCode.h b/modules/juce_core/native/juce_posix_SharedCode.h
index 2b0e16844..fc04da66a 100644
--- a/modules/juce_core/native/juce_posix_SharedCode.h
+++ b/modules/juce_core/native/juce_posix_SharedCode.h
@@ -1090,7 +1090,18 @@ public:
if (pipe (pipeHandles) == 0)
{
- auto result = fork();
+ Array<char*> argv;
+ for (auto& arg : arguments)
+ if (arg.isNotEmpty())
+ argv.add (const_cast<char*> (arg.toRawUTF8()));
+
+ argv.add (nullptr);
+
+#if JUCE_USE_VFORK
+ const pid_t result = vfork();
+#else
+ const pid_t result = fork();
+#endif
if (result < 0)
{
@@ -1099,6 +1110,7 @@ public:
}
else if (result == 0)
{
+#if ! JUCE_USE_VFORK
// we're the child process..
close (pipeHandles[0]); // close the read handle
@@ -1113,17 +1125,10 @@ public:
dup2 (open ("/dev/null", O_WRONLY), STDERR_FILENO);
close (pipeHandles[1]);
+#endif
- Array<char*> argv;
-
- for (auto& arg : arguments)
- if (arg.isNotEmpty())
- argv.add (const_cast<char*> (arg.toRawUTF8()));
-
- argv.add (nullptr);
-
- execvp (exe.toRawUTF8(), argv.getRawDataPointer());
- _exit (-1);
+ if (execvp (exe.toRawUTF8(), argv.getRawDataPointer()) < 0)
+ _exit (-1);
}
else
{

+ 13
- 0
libs/juce-current/patches/vst2-linux-fix-gui-init.patch View File

@@ -0,0 +1,13 @@
diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
index e3d277de2..e9a5c6cb1 100644
--- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
+++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
@@ -206,6 +206,8 @@ struct SharedMessageThread : public Thread
MessageManager::getInstance()->setCurrentThreadAsMessageThread();
initialised = true;
+ XWindowSystem::getInstance();
+
while ((! threadShouldExit()) && MessageManager::getInstance()->runDispatchLoopUntil (250))
{}
}

+ 76
- 0
libs/juce-current/patches/vst2-linux-fix-scale-factor.patch View File

@@ -0,0 +1,76 @@
diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
index e9a5c6cb1..712543ac7 100644
--- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
+++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
@@ -902,7 +902,7 @@ public:
if (auto* ed = processor->createEditorIfNeeded())
{
setHasEditorFlag (true);
- editorComp.reset (new EditorCompWrapper (*this, *ed));
+ editorComp.reset (new EditorCompWrapper (*this, *ed, lastScaleFactorReceived));
}
else
{
@@ -1026,11 +1026,14 @@ public:
, public Timer
#endif
{
- EditorCompWrapper (JuceVSTWrapper& w, AudioProcessorEditor& editor)
- : wrapper (w)
+ EditorCompWrapper (JuceVSTWrapper& w, AudioProcessorEditor& editor, float scaleFactor)
+ : wrapper (w),
+ editorScaleFactor (scaleFactor)
{
editor.setOpaque (true);
editor.setVisible (true);
+ editor.setScaleFactor (scaleFactor);
+
setOpaque (true);
setTopLeftPosition (editor.getPosition());
@@ -1064,6 +1067,24 @@ public:
{
auto b = getSizeToContainChild();
bounds = convertToHostBounds ({ 0, 0, (int16) b.getHeight(), (int16) b.getWidth() });
+
+ #if JUCE_LINUX
+ if (auto* ed = getEditorComp())
+ {
+ if (auto* peer = ed->getPeer())
+ {
+ auto scale = (float) peer->getPlatformScaleFactor();
+
+ if (approximatelyEqual (scale, 1.0f))
+ return;
+
+ bounds.upper *= scale;
+ bounds.leftmost *= scale;
+ bounds.lower *= scale;
+ bounds.rightmost *= scale;
+ }
+ }
+ #endif
}
void attachToHost (VstOpCodeArguments args)
@@ -1169,9 +1190,9 @@ public:
setTopLeftPosition (0, getHeight() - pos.getHeight());
#endif
+ #if ! JUCE_LINUX // setSize() on linux causes renoise and energyxt to fail.
resizeHostWindow (pos.getWidth(), pos.getHeight());
- #if ! JUCE_LINUX // setSize() on linux causes renoise and energyxt to fail.
if (! resizeEditor) // this is needed to prevent an infinite resizing loop due to coordinate rounding
shouldResizeEditor = false;
@@ -1186,6 +1207,9 @@ public:
if (auto* peer = ed->getPeer())
scale *= (float) peer->getPlatformScaleFactor();
+ resizeHostWindow (roundToInt (pos.getWidth() * scale),
+ roundToInt (pos.getHeight() * scale));
+
X11Symbols::getInstance()->xResizeWindow (display, (Window) getWindowHandle(),
static_cast<unsigned int> (roundToInt (pos.getWidth() * scale)),
static_cast<unsigned int> (roundToInt (pos.getHeight() * scale)));

+ 3178
- 0
libs/juce-current/patches/vst2-support.patch
File diff suppressed because it is too large
View File


+ 47
- 0
libs/juce-current/patches/vst2-support_pt2.patch View File

@@ -0,0 +1,47 @@
diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
index 159ab0c7c..e3d277de2 100644
--- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
+++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
@@ -1058,7 +1058,7 @@ public:
void paint (Graphics&) override {}
- void getEditorBounds (Vst2::ERect& bounds)
+ void getEditorBounds (Vst2::VstEditorBounds& bounds)
{
auto b = getSizeToContainChild();
bounds = convertToHostBounds ({ 0, 0, (int16) b.getHeight(), (int16) b.getWidth() });
@@ -1199,8 +1199,8 @@ public:
void resizeHostWindow (int newWidth, int newHeight)
{
auto rect = convertToHostBounds ({ 0, 0, (int16) newHeight, (int16) newWidth });
- newWidth = rect.right - rect.left;
- newHeight = rect.bottom - rect.top;
+ newWidth = rect.rightmost - rect.leftmost;
+ newHeight = rect.lower - rect.upper;
bool sizeWasSuccessful = false;
@@ -1329,17 +1329,17 @@ public:
#endif
//==============================================================================
- static Vst2::ERect convertToHostBounds (const Vst2::ERect& rect)
+ static Vst2::VstEditorBounds convertToHostBounds (const Vst2::VstEditorBounds& rect)
{
auto desktopScale = Desktop::getInstance().getGlobalScaleFactor();
if (approximatelyEqual (desktopScale, 1.0f))
return rect;
- return { (int16) roundToInt (rect.top * desktopScale),
- (int16) roundToInt (rect.left * desktopScale),
- (int16) roundToInt (rect.bottom * desktopScale),
- (int16) roundToInt (rect.right * desktopScale)};
+ return { (int16) roundToInt (rect.upper * desktopScale),
+ (int16) roundToInt (rect.leftmost * desktopScale),
+ (int16) roundToInt (rect.lower * desktopScale),
+ (int16) roundToInt (rect.rightmost * desktopScale)};
}
//==============================================================================

+ 53
- 0
libs/juce-current/patches/vst3-linux-fix-scale-factor.patch View File

@@ -0,0 +1,53 @@
diff --git a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp
index 4a62a262b..e00d02fbe 100644
--- a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp
+++ b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp
@@ -1177,8 +1177,26 @@ private:
if (size != nullptr && component != nullptr)
{
auto editorBounds = component->getSizeToContainChild();
+ auto width = editorBounds.getWidth();
+ auto height = editorBounds.getHeight();
- *size = convertToHostBounds ({ 0, 0, editorBounds.getWidth(), editorBounds.getHeight() });
+ #if JUCE_LINUX
+ if (component != nullptr)
+ {
+ if (auto* peer = component->getPeer())
+ {
+ auto scale = (float) peer->getPlatformScaleFactor();
+
+ if (! approximatelyEqual (scale, 1.0f))
+ {
+ width *= scale;
+ height *= scale;
+ }
+ }
+ }
+ #endif
+
+ *size = convertToHostBounds ({ 0, 0, width, height });
return kResultTrue;
}
@@ -1464,7 +1482,19 @@ private:
if (owner.plugFrame != nullptr)
{
- auto newSize = convertToHostBounds ({ 0, 0, b.getWidth(), b.getHeight() });
+ #if JUCE_LINUX
+ if (auto* peer = getPeer())
+ {
+ auto scale = (float) peer->getPlatformScaleFactor();
+
+ if (! approximatelyEqual (scale, 1.0f))
+ {
+ w *= scale;
+ h *= scale;
+ }
+ }
+ #endif
+ auto newSize = convertToHostBounds ({ 0, 0, w, h });
{
const ScopedValueSetter<bool> resizingParentSetter (resizingParent, true);

+ 34
- 0
libs/juce-current/patches/vstwrapper-fixes.patch View File

@@ -0,0 +1,34 @@
diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
index d0c1884db..c87b97d49 100644
--- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
+++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
@@ -210,9 +210,9 @@ struct SharedMessageThread : public Thread
void run() override
{
initialiseJuce_GUI();
- initialised = true;
MessageManager::getInstance()->setCurrentThreadAsMessageThread();
+ initialised = true;
while ((! threadShouldExit()) && MessageManager::getInstance()->runDispatchLoopUntil (250))
{}
@@ -300,9 +300,6 @@ public:
// You must at least have some channels
jassert (processor->isMidiEffect() || (maxNumInChannels > 0 || maxNumOutChannels > 0));
- if (processor->isMidiEffect())
- maxNumInChannels = maxNumOutChannels = 2;
-
#ifdef JucePlugin_PreferredChannelConfigurations
processor->setPlayConfigDetails (maxNumInChannels, maxNumOutChannels, 44100.0, 1024);
#endif
@@ -1827,7 +1824,7 @@ private:
pointer_sized_int handleGetPlugInName (VstOpCodeArguments args)
{
- String (JucePlugin_Name).copyToUTF8 ((char*) args.ptr, 64 + 1);
+ String (processor->getName()).copyToUTF8 ((char*) args.ptr, 64 + 1);
return 1;
}

Loading…
Cancel
Save