This file just lists the more notable headline features. For more detailed info\r
about minor changes and bugfixes, please see the git log!\r
\r
+Version 5.4.7\r
+ - Fixed a macOS focus bug causing Components to not receive mouse events\r
+ - Fixed a potential NullPointerException in the Android IAP code\r
+ - Fixed an entitlements file generation bug in the Projucer\r
+ - Send VST2 audioMasterUpdateDisplay opcode on the message thread to fix some hosts not updating\r
+ - Fixed some build errors and warnings when using Clang on Windows\r
+ - Changed the default architecture specified in Linux Makefiles generated by the Projucer\r
+\r
Version 5.4.6\r
- Fixed compatibility with macOS versions below 10.11\r
- Multiple thread safety improvements\r
add_library("cpufeatures" STATIC "${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c")
set_source_files_properties("${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c" PROPERTIES COMPILE_FLAGS "-Wno-sign-conversion -Wno-gnu-statement-expression")
-add_definitions("-DJUCE_ANDROID=1" "-DJUCE_ANDROID_API_VERSION=23" "-DJUCE_PUSH_NOTIFICATIONS=1" "-DJUCE_PUSH_NOTIFICATIONS_ACTIVITY=\"com/roli/juce/JuceActivity\"" "-DJUCE_ANDROID_GL_ES_VERSION_3_0=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_ANDROIDSTUDIO_7F0E4A25=1" "-DJUCE_APP_VERSION=5.4.6" "-DJUCE_APP_VERSION_HEX=0x50406")
+add_definitions("-DJUCE_ANDROID=1" "-DJUCE_ANDROID_API_VERSION=23" "-DJUCE_PUSH_NOTIFICATIONS=1" "-DJUCE_PUSH_NOTIFICATIONS_ACTIVITY=\"com/roli/juce/JuceActivity\"" "-DJUCE_ANDROID_GL_ES_VERSION_3_0=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_ANDROIDSTUDIO_7F0E4A25=1" "-DJUCE_APP_VERSION=5.4.7" "-DJUCE_APP_VERSION_HEX=0x50407")
include_directories( AFTER
"../../../JuceLibraryCode"
<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="5.4.6"
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="5.4.7"
package="com.juce.demorunner">
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
JUCE_OUTDIR := build
ifeq ($(TARGET_ARCH),)
- TARGET_ARCH := -march=native
+ TARGET_ARCH :=
endif
- JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_DEMO_RUNNER=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.6 -DJUCE_APP_VERSION_HEX=0x50406 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
+ JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_DEMO_RUNNER=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.7 -DJUCE_APP_VERSION_HEX=0x50407 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0
JUCE_TARGET_APP := DemoRunner
JUCE_OUTDIR := build
ifeq ($(TARGET_ARCH),)
- TARGET_ARCH := -march=native
+ TARGET_ARCH :=
endif
- JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_DEMO_RUNNER=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.6 -DJUCE_APP_VERSION_HEX=0x50406 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
+ JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_DEMO_RUNNER=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.7 -DJUCE_APP_VERSION_HEX=0x50407 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0
JUCE_TARGET_APP := DemoRunner
"JUCE_DEMO_RUNNER=1",
"JUCE_UNIT_TESTS=1",
"JUCER_XCODE_MAC_F6D2F4CF=1",
- "JUCE_APP_VERSION=5.4.6",
- "JUCE_APP_VERSION_HEX=0x50406",
+ "JUCE_APP_VERSION=5.4.7",
+ "JUCE_APP_VERSION_HEX=0x50407",
"JucePlugin_Build_VST=0",
"JucePlugin_Build_VST3=0",
"JucePlugin_Build_AU=0",
"JUCE_DEMO_RUNNER=1",
"JUCE_UNIT_TESTS=1",
"JUCER_XCODE_MAC_F6D2F4CF=1",
- "JUCE_APP_VERSION=5.4.6",
- "JUCE_APP_VERSION_HEX=0x50406",
+ "JUCE_APP_VERSION=5.4.7",
+ "JUCE_APP_VERSION_HEX=0x50407",
"JucePlugin_Build_VST=0",
"JucePlugin_Build_VST3=0",
"JucePlugin_Build_AU=0",
<key>CFBundleSignature</key>\r
<string>????</string>\r
<key>CFBundleShortVersionString</key>\r
- <string>5.4.6</string>\r
+ <string>5.4.7</string>\r
<key>CFBundleVersion</key>\r
- <string>5.4.6</string>\r
+ <string>5.4.7</string>\r
<key>NSHumanReadableCopyright</key>\r
<string>Copyright (c) 2018 - ROLI Ltd.</string>\r
<key>NSHighResolutionCapable</key>\r
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader/>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader/>\r
#include <windows.h>\r
\r
VS_VERSION_INFO VERSIONINFO\r
-FILEVERSION 5,4,6,0\r
+FILEVERSION 5,4,7,0\r
BEGIN\r
BLOCK "StringFileInfo"\r
BEGIN\r
VALUE "CompanyName", "ROLI Ltd.\0"\r
VALUE "LegalCopyright", "Copyright (c) 2018 - ROLI Ltd.\0"\r
VALUE "FileDescription", "DemoRunner\0"\r
- VALUE "FileVersion", "5.4.6\0"\r
+ VALUE "FileVersion", "5.4.7\0"\r
VALUE "ProductName", "DemoRunner\0"\r
- VALUE "ProductVersion", "5.4.6\0"\r
+ VALUE "ProductVersion", "5.4.7\0"\r
END\r
END\r
\r
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader/>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader/>\r
#include <windows.h>\r
\r
VS_VERSION_INFO VERSIONINFO\r
-FILEVERSION 5,4,6,0\r
+FILEVERSION 5,4,7,0\r
BEGIN\r
BLOCK "StringFileInfo"\r
BEGIN\r
VALUE "CompanyName", "ROLI Ltd.\0"\r
VALUE "LegalCopyright", "Copyright (c) 2018 - ROLI Ltd.\0"\r
VALUE "FileDescription", "DemoRunner\0"\r
- VALUE "FileVersion", "5.4.6\0"\r
+ VALUE "FileVersion", "5.4.7\0"\r
VALUE "ProductName", "DemoRunner\0"\r
- VALUE "ProductVersion", "5.4.6\0"\r
+ VALUE "ProductVersion", "5.4.7\0"\r
END\r
END\r
\r
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader/>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader/>\r
#include <windows.h>\r
\r
VS_VERSION_INFO VERSIONINFO\r
-FILEVERSION 5,4,6,0\r
+FILEVERSION 5,4,7,0\r
BEGIN\r
BLOCK "StringFileInfo"\r
BEGIN\r
VALUE "CompanyName", "ROLI Ltd.\0"\r
VALUE "LegalCopyright", "Copyright (c) 2018 - ROLI Ltd.\0"\r
VALUE "FileDescription", "DemoRunner\0"\r
- VALUE "FileVersion", "5.4.6\0"\r
+ VALUE "FileVersion", "5.4.7\0"\r
VALUE "ProductName", "DemoRunner\0"\r
- VALUE "ProductVersion", "5.4.6\0"\r
+ VALUE "ProductVersion", "5.4.7\0"\r
END\r
END\r
\r
"JUCE_DEMO_RUNNER=1",
"JUCE_UNIT_TESTS=1",
"JUCER_XCODE_IPHONE_5BC26AE3=1",
- "JUCE_APP_VERSION=5.4.6",
- "JUCE_APP_VERSION_HEX=0x50406",
+ "JUCE_APP_VERSION=5.4.7",
+ "JUCE_APP_VERSION_HEX=0x50407",
"JucePlugin_Build_VST=0",
"JucePlugin_Build_VST3=0",
"JucePlugin_Build_AU=0",
"JUCE_DEMO_RUNNER=1",
"JUCE_UNIT_TESTS=1",
"JUCER_XCODE_IPHONE_5BC26AE3=1",
- "JUCE_APP_VERSION=5.4.6",
- "JUCE_APP_VERSION_HEX=0x50406",
+ "JUCE_APP_VERSION=5.4.7",
+ "JUCE_APP_VERSION_HEX=0x50407",
"JucePlugin_Build_VST=0",
"JucePlugin_Build_VST3=0",
"JucePlugin_Build_AU=0",
<key>CFBundleSignature</key>\r
<string>????</string>\r
<key>CFBundleShortVersionString</key>\r
- <string>5.4.6</string>\r
+ <string>5.4.7</string>\r
<key>CFBundleVersion</key>\r
- <string>5.4.6</string>\r
+ <string>5.4.7</string>\r
<key>NSHumanReadableCopyright</key>\r
<string>Copyright (c) 2018 - ROLI Ltd.</string>\r
<key>NSHighResolutionCapable</key>\r
<?xml version="1.0" encoding="UTF-8"?>\r
\r
-<JUCERPROJECT name="DemoRunner" projectType="guiapp" jucerVersion="5.4.6" defines="JUCE_DEMO_RUNNER=1 JUCE_UNIT_TESTS=1"\r
- bundleIdentifier="com.juce.demorunner" version="5.4.6" companyName="ROLI Ltd."\r
+<JUCERPROJECT name="DemoRunner" projectType="guiapp" jucerVersion="5.4.7" defines="JUCE_DEMO_RUNNER=1 JUCE_UNIT_TESTS=1"\r
+ bundleIdentifier="com.juce.demorunner" version="5.4.7" companyName="ROLI Ltd."\r
companyCopyright="Copyright (c) 2018 - ROLI Ltd." companyWebsite="https://www.juce.com/"\r
- companyEmail="info@juce.com" id="yj7xMM" reportAppUsage="1">\r
+ companyEmail="info@juce.com" id="yj7xMM" reportAppUsage="0">\r
<MAINGROUP id="G8kbr7" name="DemoRunner">\r
<GROUP id="{20E3F84A-29E9-D5FF-4559-1A9E4A70CD60}" name="Source">\r
<GROUP id="{272A692A-6AFE-68BD-C8E8-63B3D62245B1}" name="Demos">\r
#endif\r
\r
#ifndef JUCE_REPORT_APP_USAGE\r
- #define JUCE_REPORT_APP_USAGE 1\r
+ #define JUCE_REPORT_APP_USAGE 0\r
#endif\r
\r
// END SECTION A\r
\r
#define JUCE_USE_DARK_SPLASH_SCREEN 1\r
\r
-#define JUCE_PROJUCER_VERSION 0x50406\r
+#define JUCE_PROJUCER_VERSION 0x50407\r
\r
//==============================================================================\r
#define JUCE_MODULE_AVAILABLE_juce_analytics 1\r
{\r
const char* const projectName = "DemoRunner";\r
const char* const companyName = "ROLI Ltd.";\r
- const char* const versionString = "5.4.6";\r
- const int versionNumber = 0x50406;\r
+ const char* const versionString = "5.4.7";\r
+ const int versionNumber = 0x50407;\r
}\r
#endif\r
<?xml version="1.0" encoding="UTF-8"?>\r
\r
<JUCERPROJECT id="AKfc5m" name="AudioPerformanceTest" projectType="guiapp"\r
- bundleIdentifier="com.juce.AudioPerformanceTest" jucerVersion="5.4.6"\r
+ bundleIdentifier="com.juce.AudioPerformanceTest" jucerVersion="5.4.7"\r
displaySplashScreen="0" reportAppUsage="0" companyName="ROLI Ltd."\r
companyCopyright="ROLI Ltd.">\r
<MAINGROUP id="b1eVTe" name="AudioPerformanceTest">\r
JUCE_OUTDIR := build
ifeq ($(TARGET_ARCH),)
- TARGET_ARCH := -march=native
+ TARGET_ARCH :=
endif
JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
JUCE_OUTDIR := build
ifeq ($(TARGET_ARCH),)
- TARGET_ARCH := -march=native
+ TARGET_ARCH :=
endif
JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
\r
#define JUCE_USE_DARK_SPLASH_SCREEN 1\r
\r
-#define JUCE_PROJUCER_VERSION 0x50406\r
+#define JUCE_PROJUCER_VERSION 0x50407\r
\r
//==============================================================================\r
#define JUCE_MODULE_AVAILABLE_juce_audio_basics 1\r
\r
<JUCERPROJECT id="NTe0XB0ij" name="AudioPluginHost" projectType="guiapp" version="1.0.0"\r
juceFolder="../../../juce" bundleIdentifier="com.roli.juce.pluginhost"\r
- jucerVersion="5.4.6" companyName="ROLI Ltd." displaySplashScreen="0"\r
+ jucerVersion="5.4.7" companyName="ROLI Ltd." displaySplashScreen="0"\r
reportAppUsage="0" companyCopyright="ROLI Ltd.">\r
<EXPORTFORMATS>\r
<XCODE_MAC targetFolder="Builds/MacOSX" rtasFolder="~/SDKs/PT_80_SDK" objCExtraSuffix="M73TRi"\r
JUCE_OUTDIR := build
ifeq ($(TARGET_ARCH),)
- TARGET_ARCH := -march=native
+ TARGET_ARCH :=
endif
JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
JUCE_OUTDIR := build
ifeq ($(TARGET_ARCH),)
- TARGET_ARCH := -march=native
+ TARGET_ARCH :=
endif
JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
\r
#define JUCE_USE_DARK_SPLASH_SCREEN 1\r
\r
-#define JUCE_PROJUCER_VERSION 0x50406\r
+#define JUCE_PROJUCER_VERSION 0x50407\r
\r
//==============================================================================\r
#define JUCE_MODULE_AVAILABLE_juce_audio_basics 1\r
<?xml version="1.0" encoding="UTF-8"?>\r
\r
<JUCERPROJECT id="3t6YqETY1" name="BinaryBuilder" projectType="consoleapp"\r
- juceFolder="../../../juce" jucerVersion="5.4.6" bundleIdentifier="com.roli.binarybuilder"\r
+ juceFolder="../../../juce" jucerVersion="5.4.7" bundleIdentifier="com.roli.binarybuilder"\r
displaySplashScreen="0" reportAppUsage="0" companyName="ROLI Ltd."\r
companyCopyright="ROLI Ltd.">\r
<EXPORTFORMATS>\r
JUCE_OUTDIR := build
ifeq ($(TARGET_ARCH),)
- TARGET_ARCH := -march=native
+ TARGET_ARCH :=
endif
JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
JUCE_OUTDIR := build
ifeq ($(TARGET_ARCH),)
- TARGET_ARCH := -march=native
+ TARGET_ARCH :=
endif
JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
\r
#define JUCE_USE_DARK_SPLASH_SCREEN 1\r
\r
-#define JUCE_PROJUCER_VERSION 0x50406\r
+#define JUCE_PROJUCER_VERSION 0x50407\r
\r
//==============================================================================\r
#define JUCE_MODULE_AVAILABLE_juce_core 1\r
JUCE_OUTDIR := build
ifeq ($(TARGET_ARCH),)
- TARGET_ARCH := -march=native
+ TARGET_ARCH :=
endif
JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
JUCE_OUTDIR := build
ifeq ($(TARGET_ARCH),)
- TARGET_ARCH := -march=native
+ TARGET_ARCH :=
endif
JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
\r
#define JUCE_USE_DARK_SPLASH_SCREEN 1\r
\r
-#define JUCE_PROJUCER_VERSION 0x50406\r
+#define JUCE_PROJUCER_VERSION 0x50407\r
\r
//==============================================================================\r
#define JUCE_MODULE_AVAILABLE_juce_audio_basics 1\r
<?xml version="1.0" encoding="UTF-8"?>\r
\r
<JUCERPROJECT id="gWI5Ir" name="NetworkGraphicsDemo" projectType="guiapp" bundleIdentifier="com.juce.NetworkGraphicsDemo"\r
- jucerVersion="5.4.6" displaySplashScreen="0" reportAppUsage="0"\r
+ jucerVersion="5.4.7" displaySplashScreen="0" reportAppUsage="0"\r
companyName="ROLI Ltd." companyCopyright="ROLI Ltd.">\r
<MAINGROUP id="OT9rJ2" name="NetworkGraphicsDemo">\r
<GROUP id="{48D54E6E-37F4-B20A-E038-C63E4EDFD4D9}" name="Source">\r
JUCE_OUTDIR := build
ifeq ($(TARGET_ARCH),)
- TARGET_ARCH := -march=native
+ TARGET_ARCH :=
endif
- JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.6 -DJUCE_APP_VERSION_HEX=0x50406 $(shell pkg-config --cflags x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
+ JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.7 -DJUCE_APP_VERSION_HEX=0x50407 $(shell pkg-config --cflags x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0
JUCE_TARGET_APP := Projucer
JUCE_OUTDIR := build
ifeq ($(TARGET_ARCH),)
- TARGET_ARCH := -march=native
+ TARGET_ARCH :=
endif
- JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.6 -DJUCE_APP_VERSION_HEX=0x50406 $(shell pkg-config --cflags x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
+ JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.7 -DJUCE_APP_VERSION_HEX=0x50407 $(shell pkg-config --cflags x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0
JUCE_TARGET_APP := Projucer
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\r
<plist>\r
<dict>\r
- <key>NSAppTransportSecurity</key>\r
- <dict>\r
- <key>NSAllowsArbitraryLoads</key>\r
- <true/>\r
- <key>NSExceptionDomains</key>\r
- <dict>\r
- <key>amazonaws.com</key>\r
- <dict>\r
- <key>NSExceptionAllowsInsecureHTTPLoads</key>\r
- <true/>\r
- <key>NSIncludesSubdomains</key>\r
- <true/>\r
- </dict>\r
- </dict>\r
- </dict>\r
<key>NSMicrophoneUsageDescription</key>\r
<string>This app requires audio input. If you do not have an audio interface connected it will use the built-in microphone.</string>\r
<key>NSCameraUsageDescription</key>\r
<key>CFBundleSignature</key>\r
<string>????</string>\r
<key>CFBundleShortVersionString</key>\r
- <string>5.4.6</string>\r
+ <string>5.4.7</string>\r
<key>CFBundleVersion</key>\r
- <string>5.4.6</string>\r
+ <string>5.4.7</string>\r
<key>NSHumanReadableCopyright</key>\r
<string>ROLI Ltd.</string>\r
<key>NSHighResolutionCapable</key>\r
"_DEBUG=1",
"DEBUG=1",
"JUCER_XCODE_MAC_F6D2F4CF=1",
- "JUCE_APP_VERSION=5.4.6",
- "JUCE_APP_VERSION_HEX=0x50406",
+ "JUCE_APP_VERSION=5.4.7",
+ "JUCE_APP_VERSION_HEX=0x50407",
"JucePlugin_Build_VST=0",
"JucePlugin_Build_VST3=0",
"JucePlugin_Build_AU=0",
"_NDEBUG=1",
"NDEBUG=1",
"JUCER_XCODE_MAC_F6D2F4CF=1",
- "JUCE_APP_VERSION=5.4.6",
- "JUCE_APP_VERSION_HEX=0x50406",
+ "JUCE_APP_VERSION=5.4.7",
+ "JUCE_APP_VERSION_HEX=0x50407",
"JucePlugin_Build_VST=0",
"JucePlugin_Build_VST3=0",
"JucePlugin_Build_AU=0",
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader/>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader/>\r
#include <windows.h>\r
\r
VS_VERSION_INFO VERSIONINFO\r
-FILEVERSION 5,4,6,0\r
+FILEVERSION 5,4,7,0\r
BEGIN\r
BLOCK "StringFileInfo"\r
BEGIN\r
VALUE "CompanyName", "ROLI Ltd.\0"\r
VALUE "LegalCopyright", "ROLI Ltd.\0"\r
VALUE "FileDescription", "Projucer\0"\r
- VALUE "FileVersion", "5.4.6\0"\r
+ VALUE "FileVersion", "5.4.7\0"\r
VALUE "ProductName", "Projucer\0"\r
- VALUE "ProductVersion", "5.4.6\0"\r
+ VALUE "ProductVersion", "5.4.7\0"\r
END\r
END\r
\r
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader/>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader/>\r
#include <windows.h>\r
\r
VS_VERSION_INFO VERSIONINFO\r
-FILEVERSION 5,4,6,0\r
+FILEVERSION 5,4,7,0\r
BEGIN\r
BLOCK "StringFileInfo"\r
BEGIN\r
VALUE "CompanyName", "ROLI Ltd.\0"\r
VALUE "LegalCopyright", "ROLI Ltd.\0"\r
VALUE "FileDescription", "Projucer\0"\r
- VALUE "FileVersion", "5.4.6\0"\r
+ VALUE "FileVersion", "5.4.7\0"\r
VALUE "ProductName", "Projucer\0"\r
- VALUE "ProductVersion", "5.4.6\0"\r
+ VALUE "ProductVersion", "5.4.7\0"\r
END\r
END\r
\r
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader/>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader/>\r
#include <windows.h>\r
\r
VS_VERSION_INFO VERSIONINFO\r
-FILEVERSION 5,4,6,0\r
+FILEVERSION 5,4,7,0\r
BEGIN\r
BLOCK "StringFileInfo"\r
BEGIN\r
VALUE "CompanyName", "ROLI Ltd.\0"\r
VALUE "LegalCopyright", "ROLI Ltd.\0"\r
VALUE "FileDescription", "Projucer\0"\r
- VALUE "FileVersion", "5.4.6\0"\r
+ VALUE "FileVersion", "5.4.7\0"\r
VALUE "ProductName", "Projucer\0"\r
- VALUE "ProductVersion", "5.4.6\0"\r
+ VALUE "ProductVersion", "5.4.7\0"\r
END\r
END\r
\r
\r
#define JUCE_USE_DARK_SPLASH_SCREEN 1\r
\r
-#define JUCE_PROJUCER_VERSION 0x50406\r
+#define JUCE_PROJUCER_VERSION 0x50407\r
\r
//==============================================================================\r
#define JUCE_MODULE_AVAILABLE_juce_analytics 1\r
{\r
const char* const projectName = "Projucer";\r
const char* const companyName = "ROLI Ltd.";\r
- const char* const versionString = "5.4.6";\r
- const int versionNumber = 0x50406;\r
+ const char* const versionString = "5.4.7";\r
+ const int versionNumber = 0x50407;\r
}\r
#endif\r
<?xml version="1.0" encoding="UTF-8"?>\r
\r
<JUCERPROJECT id="M70qfTRRk" name="Projucer" projectType="guiapp" juceFolder="../../juce"\r
- jucerVersion="5.4.6" version="5.4.6" bundleIdentifier="com.juce.theprojucer"\r
+ jucerVersion="5.4.7" version="5.4.7" bundleIdentifier="com.juce.theprojucer"\r
splashScreenColour="Dark" displaySplashScreen="0" reportAppUsage="0"\r
companyName="ROLI Ltd." companyCopyright="ROLI Ltd." cppLanguageStandard="11">\r
<EXPORTFORMATS>\r
<XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="~/SDKs/vstsdk2.4" rtasFolder="~/SDKs/PT_80_SDK"\r
documentExtensions=".jucer" objCExtraSuffix="zkVtji" bigIcon="rv1F4h"\r
- customPList="<plist> <dict> 	<key>NSAppTransportSecurity</key> 	<dict> 		<key>NSAllowsArbitraryLoads</key> 		<true/> 		<key>NSExceptionDomains</key> 		<dict> 			<key>amazonaws.com</key> 			<dict> 				<key>NSExceptionAllowsInsecureHTTPLoads</key> 				<true/> 				<key>NSIncludesSubdomains</key> 				<true/> 			</dict> 		</dict> 	</dict> </dict> </plist>"\r
extraFrameworks="AudioUnit; Accelerate; AVFoundation; CoreAudio; CoreAudioKit; CoreMIDI; DiscRecording; QuartzCore; AudioToolbox; OpenGL; QTKit; QuickTime"\r
microphonePermissionNeeded="1" cameraPermissionNeeded="1">\r
<CONFIGURATIONS>\r
auto juceValue = getAppSettings().getStoredPath (Ids::defaultJuceModulePath, TargetOS::getThisOS());\r
auto userValue = getAppSettings().getStoredPath (Ids::defaultUserModulePath, TargetOS::getThisOS());\r
\r
- auto jucePathNeedsScanning = (! juceValue.isUsingDefault() && juceValue.get() != lastJUCEModulePath);\r
- auto userPathNeedsScanning = (! userValue.isUsingDefault() && userValue.get() != lastUserModulePath);\r
-\r
- if (jucePathNeedsScanning)\r
- ProjucerApplication::getApp().rescanJUCEPathModules();\r
-\r
- if (userPathNeedsScanning)\r
- ProjucerApplication::getApp().rescanUserPathModules();\r
+ if (juceValue.get() != lastJUCEModulePath) ProjucerApplication::getApp().rescanJUCEPathModules();\r
+ if (userValue.get() != lastUserModulePath) ProjucerApplication::getApp().rescanUserPathModules();\r
}\r
\r
void paint (Graphics& g) override\r
build.setGlobalDefs (getGlobalDefs());\r
build.setCompileFlags (project.getCompileEngineSettings().getExtraCompilerFlagsString());\r
build.setExtraDLLs (getExtraDLLs());\r
- build.setJuceModulesFolder (EnabledModuleList::findDefaultModulesFolder (project).getFullPathName());\r
+ build.setJuceModulesFolder (project.getEnabledModules().getDefaultModulesFolder().getFullPathName());\r
\r
build.setUtilsCppInclude (project.getAppIncludeFile().getFullPathName());\r
\r
{\r
for (auto* m : modules)\r
{\r
- auto localModuleFolder = proj.getEnabledModules().shouldCopyModuleFilesLocally (m->moduleInfo.getID()).getValue()\r
- ? proj.getLocalModuleFolder (m->moduleInfo.getID())\r
- : m->moduleInfo.getFolder();\r
+ auto copyLocally = proj.getEnabledModules().shouldCopyModuleFilesLocally (m->moduleInfo.getID());\r
\r
+ auto localModuleFolder = copyLocally ? proj.getLocalModuleFolder (m->moduleInfo.getID())\r
+ : m->moduleInfo.getFolder();\r
\r
m->findAndAddCompiledUnits (*exporter, nullptr, compileUnits,\r
isPluginProject || isVSTHost ? ProjectType::Target::SharedCodeTarget\r
group.properties.clear();\r
exporterModulePathDefaultValues.clear();\r
exporterModulePathValues.clear();\r
+ globalPathValues.clear();\r
\r
for (Project::ExporterIterator exporter (project); exporter.next();)\r
{\r
"This can be an absolute path, or relative to the jucer project folder, but it "\r
"must be valid on the filesystem of the target machine that will be performing this build. If this "\r
"is empty then the global path will be used.");\r
+\r
+ globalPathValues.add (getAppSettings().getStoredPath (isJUCEModule (moduleID) ? Ids::defaultJuceModulePath : Ids::defaultUserModulePath,\r
+ exporter->getTargetOSForExporter()).getPropertyAsValue());\r
}\r
\r
for (int i = 0; i < exporterModulePathDefaultValues.size(); ++i)\r
{\r
exporterModulePathDefaultValues.getReference (i).onDefaultChange = [this] { startTimer (50); };\r
+\r
exporterModulePathValues.getReference (i).addListener (this);\r
+ globalPathValues.getReference (i).addListener (this);\r
}\r
\r
- globalPathValue.removeListener (this);\r
- globalPathValue.referTo (modules.getShouldUseGlobalPathValue (moduleID));\r
- globalPathValue.addListener (this);\r
+ useGlobalPathValue.removeListener (this);\r
+ useGlobalPathValue.referTo (modules.shouldUseGlobalPathValue (moduleID));\r
+ useGlobalPathValue.addListener (this);\r
\r
auto menuItemString = (TargetOS::getThisOS() == TargetOS::osx ? "\"Projucer->Global Paths...\""\r
: "\"File->Global Paths...\"");\r
\r
- props.add (new BooleanPropertyComponent (globalPathValue,\r
+ props.add (new BooleanPropertyComponent (useGlobalPathValue,\r
"Use global path", "Use global path for this module"),\r
String ("If this is enabled, then the locally-stored global path (set in the ") + menuItemString + " menu item) "\r
"will be used as the path to this module. "\r
"This means that if this Projucer project is opened on another machine it will use that machine's global path as the path to this module.");\r
\r
- props.add (new BooleanPropertyComponent (modules.shouldCopyModuleFilesLocally (moduleID),\r
+ props.add (new BooleanPropertyComponent (modules.shouldCopyModuleFilesLocallyValue (moduleID),\r
"Create local copy", "Copy the module into the project folder"),\r
"If this is enabled, then a local copy of the entire module will be made inside your project (in the auto-generated JuceLibraryFiles folder), "\r
"so that your project will be self-contained, and won't need to contain any references to files in other folders. "\r
"This also means that you can check the module into your source-control system to make sure it is always in sync with your own code.");\r
\r
- props.add (new BooleanPropertyComponent (modules.shouldShowAllModuleFilesInProject (moduleID),\r
+ props.add (new BooleanPropertyComponent (modules.shouldShowAllModuleFilesInProjectValue (moduleID),\r
"Add source to project", "Make module files browsable in projects"),\r
"If this is enabled, then the entire source tree from this module will be shown inside your project, "\r
"making it easy to browse/edit the module's classes. If disabled, then only the minimum number of files "\r
\r
//==============================================================================\r
Array<ValueWithDefault> exporterModulePathDefaultValues;\r
- Array<Value> exporterModulePathValues;\r
- Value globalPathValue;\r
+ Array<Value> exporterModulePathValues, globalPathValues;\r
+ Value useGlobalPathValue;\r
\r
OwnedArray <Project::ConfigFlag> configFlags;\r
\r
public:\r
EnabledModulesItem (Project& p)\r
: project (p),\r
- moduleListTree (p.getEnabledModules().state)\r
+ moduleListTree (project.getEnabledModules().getState())\r
{\r
moduleListTree.addListener (this);\r
\r
}\r
else if (resultCode > 0)\r
{\r
- std::vector<ModuleIDAndFolder> list;\r
+ std::vector<AvailableModuleList::ModuleIDAndFolder> list;\r
int offset = -1;\r
\r
if (resultCode < 200)\r
public:\r
ModulesInformationComponent (Project& p)\r
: project (p),\r
- modulesValueTree (p.getEnabledModules().state)\r
+ modulesValueTree (project.getEnabledModules().getState())\r
{\r
listHeader = new ListBoxHeader ( { "Module", "Version", "Make Local Copy", "Paths" },\r
{ 0.25f, 0.2f, 0.2f, 0.35f } );\r
g.drawFittedText (version, bounds.removeFromLeft (roundToInt (listHeader->getProportionAtIndex (1) * width)), Justification::centredLeft, 1);\r
\r
//==============================================================================\r
- auto copyLocally = project.getEnabledModules().shouldCopyModuleFilesLocally (moduleID).getValue() ? "Yes" : "No";\r
-\r
- g.drawFittedText (copyLocally, bounds.removeFromLeft (roundToInt (listHeader->getProportionAtIndex (2) * width)), Justification::centredLeft, 1);\r
+ g.drawFittedText (String (project.getEnabledModules().shouldCopyModuleFilesLocally (moduleID) ? "Yes" : "No"),\r
+ bounds.removeFromLeft (roundToInt (listHeader->getProportionAtIndex (2) * width)), Justification::centredLeft, 1);\r
\r
//==============================================================================\r
String pathText;\r
repaint();\r
}\r
\r
+ static void setLocalCopyModeForAllModules (Project& project, bool copyLocally)\r
+ {\r
+ auto& modules = project.getEnabledModules();\r
+\r
+ for (auto i = modules.getNumModules(); --i >= 0;)\r
+ modules.shouldCopyModuleFilesLocallyValue (modules.getModuleID (i)) = copyLocally;\r
+ }\r
+\r
void showCopyModeMenu()\r
{\r
PopupMenu m;\r
\r
m.addItem (PopupMenu::Item ("Set all modules to copy locally")\r
- .setAction ([&] { project.getEnabledModules().setLocalCopyModeForAllModules (true); }));\r
+ .setAction ([&] { setLocalCopyModeForAllModules (project, true); }));\r
\r
m.addItem (PopupMenu::Item ("Set all modules to not copy locally")\r
- .setAction ([&] { project.getEnabledModules().setLocalCopyModeForAllModules (false); }));\r
+ .setAction ([&] { setLocalCopyModeForAllModules (project, false); }));\r
\r
m.showMenuAsync (PopupMenu::Options().withTargetComponent (setCopyModeButton));\r
}\r
\r
static void setAllModulesToUseGlobalPaths (Project& project, bool useGlobal)\r
{\r
- auto& moduleList = project.getEnabledModules();\r
+ auto& modules = project.getEnabledModules();\r
\r
- for (auto id : moduleList.getAllModules())\r
- moduleList.getShouldUseGlobalPathValue (id).setValue (useGlobal);\r
+ for (auto moduleID : modules.getAllModules())\r
+ modules.shouldUseGlobalPathValue (moduleID) = useGlobal;\r
}\r
\r
static void setSelectedModulesToUseGlobalPaths (Project& project, SparseSet<int> selected, bool useGlobal)\r
{\r
- auto& moduleList = project.getEnabledModules();\r
+ auto& modules = project.getEnabledModules();\r
\r
for (int i = 0; i < selected.size(); ++i)\r
- moduleList.getShouldUseGlobalPathValue (moduleList.getModuleID (selected[i])).setValue (useGlobal);\r
+ modules.shouldUseGlobalPathValue (modules.getModuleID (selected[i])) = useGlobal;\r
}\r
\r
void showGlobalPathsMenu()\r
{\r
if (moduleFolder != File())\r
{\r
- const char* extensions[] = { ".h", ".hpp", ".hxx" };\r
+ static const char* extensions[] = { ".h", ".hpp", ".hxx" };\r
\r
for (auto e : extensions)\r
{\r
\r
StringArray ModuleDescription::getDependencies() const\r
{\r
- auto deps = StringArray::fromTokens (moduleInfo ["dependencies"].toString(), " \t;,", "\"'");\r
- deps.trim();\r
- deps.removeEmptyStrings();\r
- return deps;\r
+ auto moduleDependencies = StringArray::fromTokens (moduleInfo ["dependencies"].toString(), " \t;,", "\"'");\r
+ moduleDependencies.trim();\r
+ moduleDependencies.removeEmptyStrings();\r
+\r
+ return moduleDependencies;\r
}\r
\r
//==============================================================================\r
-static bool tryToAddModuleFromFolder (const File& path, ModuleIDAndFolderList& list)\r
+static bool tryToAddModuleFromFolder (const File& path, AvailableModuleList::ModuleIDAndFolderList& list)\r
{\r
ModuleDescription m (path);\r
\r
return false;\r
}\r
\r
-static void addAllModulesInSubfoldersRecursively (const File& path, int depth, ModuleIDAndFolderList& list)\r
+static void addAllModulesInSubfoldersRecursively (const File& path, int depth, AvailableModuleList::ModuleIDAndFolderList& list)\r
{\r
if (depth > 0)\r
{\r
}\r
}\r
\r
-static void addAllModulesInFolder (const File& path, ModuleIDAndFolderList& list)\r
+static void addAllModulesInFolder (const File& path, AvailableModuleList::ModuleIDAndFolderList& list)\r
{\r
if (! tryToAddModuleFromFolder (path, list))\r
{\r
- int subfolders = 3;\r
+ static constexpr int subfolders = 3;\r
addAllModulesInSubfoldersRecursively (path, subfolders, list);\r
}\r
}\r
\r
-static void sort (ModuleIDAndFolderList& listToSort)\r
-{\r
- std::sort (listToSort.begin(), listToSort.end(), [] (const ModuleIDAndFolder& m1, const ModuleIDAndFolder& m2)\r
- {\r
- return m1.first.compareIgnoreCase (m2.first) < 0;\r
- });\r
-}\r
-\r
-//==============================================================================\r
-struct ModuleScannerJob : public ThreadPoolJob\r
+struct ModuleScannerJob : public ThreadPoolJob\r
{\r
- ModuleScannerJob (const Array<File>& paths, std::function<void (const ModuleIDAndFolderList&)>&& callback)\r
+ ModuleScannerJob (const Array<File>& paths,\r
+ std::function<void (const AvailableModuleList::ModuleIDAndFolderList&)>&& callback)\r
: ThreadPoolJob ("ModuleScannerJob"),\r
pathsToScan (paths),\r
completionCallback (std::move (callback))\r
\r
JobStatus runJob() override\r
{\r
- ModuleIDAndFolderList list;\r
+ AvailableModuleList::ModuleIDAndFolderList list;\r
\r
for (auto& p : pathsToScan)\r
addAllModulesInFolder (p, list);\r
\r
if (! shouldExit())\r
{\r
- sort (list);\r
+ std::sort (list.begin(), list.end(), [] (const AvailableModuleList::ModuleIDAndFolder& m1,\r
+ const AvailableModuleList::ModuleIDAndFolder& m2)\r
+ {\r
+ return m1.first.compareIgnoreCase (m2.first) < 0;\r
+ });\r
+\r
completionCallback (list);\r
}\r
\r
}\r
\r
Array<File> pathsToScan;\r
- std::function<void (const ModuleIDAndFolderList&)> completionCallback;\r
+ std::function<void (const AvailableModuleList::ModuleIDAndFolderList&)> completionCallback;\r
};\r
\r
-AvailableModuleList::AvailableModuleList()\r
-{\r
-}\r
-\r
ThreadPoolJob* AvailableModuleList::createScannerJob (const Array<File>& paths)\r
{\r
- return new ModuleScannerJob (paths, [this] (ModuleIDAndFolderList scannedModuleList)\r
+ return new ModuleScannerJob (paths, [this] (AvailableModuleList::ModuleIDAndFolderList scannedModuleList)\r
{\r
{\r
const ScopedLock swapLock (lock);\r
removePendingAndAddJob (createScannerJob (paths));\r
}\r
\r
-ModuleIDAndFolderList AvailableModuleList::getAllModules() const\r
+AvailableModuleList::ModuleIDAndFolderList AvailableModuleList::getAllModules() const\r
{\r
const ScopedLock readLock (lock);\r
-\r
return moduleList;\r
}\r
\r
-ModuleIDAndFolder AvailableModuleList::getModuleWithID (const String& id) const\r
+AvailableModuleList::ModuleIDAndFolder AvailableModuleList::getModuleWithID (const String& id) const\r
{\r
const ScopedLock readLock (lock);\r
\r
{\r
}\r
\r
-//==============================================================================\r
void LibraryModule::writeIncludes (ProjectSaver& projectSaver, OutputStream& out)\r
{\r
auto& project = projectSaver.project;\r
auto& modules = project.getEnabledModules();\r
\r
- auto id = getID();\r
+ auto moduleID = getID();\r
\r
- if (modules.shouldCopyModuleFilesLocally (id).getValue())\r
+ if (modules.shouldCopyModuleFilesLocally (moduleID))\r
{\r
auto juceModuleFolder = moduleInfo.getFolder();\r
\r
- auto localModuleFolder = project.getLocalModuleFolder (id);\r
+ auto localModuleFolder = project.getLocalModuleFolder (moduleID);\r
localModuleFolder.createDirectory();\r
projectSaver.copyFolder (juceModuleFolder, localModuleFolder);\r
}\r
<< ">" << newLine;\r
}\r
\r
-//==============================================================================\r
-static void parseAndAddLibs (StringArray& libList, const String& libs)\r
-{\r
- libList.addTokens (libs, ", ", {});\r
- libList.trim();\r
- libList.removeDuplicates (false);\r
-}\r
-\r
-void LibraryModule::addSettingsForModuleToExporter (ProjectExporter& exporter, ProjectSaver& projectSaver) const\r
+void LibraryModule::addSearchPathsToExporter (ProjectExporter& exporter) const\r
{\r
- auto& project = exporter.getProject();\r
-\r
auto moduleRelativePath = exporter.getModuleFolderRelativeToProject (getID());\r
\r
exporter.addToExtraSearchPaths (moduleRelativePath.getParentDirectory());\r
\r
String libDirPlatform;\r
+\r
if (exporter.isLinux())\r
libDirPlatform = "Linux";\r
else if (exporter.isCodeBlocks() && exporter.isWindows())\r
libDirPlatform = exporter.getTargetFolder().getFileName();\r
\r
auto libSubdirPath = moduleRelativePath.toUnixStyle() + "/libs/" + libDirPlatform;\r
- auto moduleLibDir = File (project.getProjectFolder().getFullPathName() + "/" + libSubdirPath);\r
+ auto moduleLibDir = File (exporter.getProject().getProjectFolder().getFullPathName() + "/" + libSubdirPath);\r
\r
if (moduleLibDir.exists())\r
exporter.addToModuleLibPaths ({ libSubdirPath, moduleRelativePath.getRoot() });\r
for (auto& path : paths)\r
exporter.addToExtraSearchPaths (moduleRelativePath.getChildFile (path.unquoted()));\r
}\r
+}\r
\r
- {\r
- auto extraDefs = moduleInfo.getPreprocessorDefs().trim();\r
+void LibraryModule::addDefinesToExporter (ProjectExporter& exporter) const\r
+{\r
+ auto extraDefs = moduleInfo.getPreprocessorDefs().trim();\r
\r
- if (extraDefs.isNotEmpty())\r
- exporter.getExporterPreprocessorDefsValue() = exporter.getExporterPreprocessorDefsString() + "\n" + extraDefs;\r
- }\r
+ if (extraDefs.isNotEmpty())\r
+ exporter.getExporterPreprocessorDefsValue() = exporter.getExporterPreprocessorDefsString() + "\n" + extraDefs;\r
+}\r
\r
- {\r
- Array<File> compiled;\r
- auto& modules = project.getEnabledModules();\r
- auto id = getID();\r
+void LibraryModule::addCompileUnitsToExporter (ProjectExporter& exporter, ProjectSaver& projectSaver) const\r
+{\r
+ auto& project = exporter.getProject();\r
+ auto& modules = project.getEnabledModules();\r
\r
- auto localModuleFolder = modules.shouldCopyModuleFilesLocally (id).getValue() ? project.getLocalModuleFolder (id)\r
- : moduleInfo.getFolder();\r
+ auto moduleID = getID();\r
\r
- findAndAddCompiledUnits (exporter, &projectSaver, compiled);\r
+ auto localModuleFolder = modules.shouldCopyModuleFilesLocally (moduleID) ? project.getLocalModuleFolder (moduleID)\r
+ : moduleInfo.getFolder();\r
\r
- if (modules.shouldShowAllModuleFilesInProject (id).getValue())\r
- addBrowseableCode (exporter, compiled, localModuleFolder);\r
- }\r
+ Array<File> compiled;\r
+ findAndAddCompiledUnits (exporter, &projectSaver, compiled);\r
+\r
+ if (modules.shouldShowAllModuleFilesInProject (moduleID))\r
+ addBrowseableCode (exporter, compiled, localModuleFolder);\r
+}\r
+\r
+void LibraryModule::addLibsToExporter (ProjectExporter& exporter) const\r
+{\r
+ auto parseAndAddLibsToList = [] (StringArray& libList, const String& libs)\r
+ {\r
+ libList.addTokens (libs, ", ", {});\r
+ libList.trim();\r
+ libList.removeDuplicates (false);\r
+ };\r
+\r
+ auto& project = exporter.getProject();\r
\r
if (exporter.isXcode())\r
{\r
auto frameworks = moduleInfo.moduleInfo [xcodeExporter.isOSX() ? "OSXFrameworks" : "iOSFrameworks"].toString();\r
xcodeExporter.xcodeFrameworks.addTokens (frameworks, ", ", {});\r
\r
- parseAndAddLibs (xcodeExporter.xcodeLibs, moduleInfo.moduleInfo [exporter.isOSX() ? "OSXLibs" : "iOSLibs"].toString());\r
+ parseAndAddLibsToList (xcodeExporter.xcodeLibs, moduleInfo.moduleInfo [exporter.isOSX() ? "OSXLibs" : "iOSLibs"].toString());\r
}\r
else if (exporter.isLinux())\r
{\r
- parseAndAddLibs (exporter.linuxLibs, moduleInfo.moduleInfo ["linuxLibs"].toString());\r
- parseAndAddLibs (exporter.linuxPackages, moduleInfo.moduleInfo ["linuxPackages"].toString());\r
+ parseAndAddLibsToList (exporter.linuxLibs, moduleInfo.moduleInfo ["linuxLibs"].toString());\r
+ parseAndAddLibsToList (exporter.linuxPackages, moduleInfo.moduleInfo ["linuxPackages"].toString());\r
}\r
else if (exporter.isWindows())\r
{\r
if (exporter.isCodeBlocks())\r
- parseAndAddLibs (exporter.mingwLibs, moduleInfo.moduleInfo ["mingwLibs"].toString());\r
+ parseAndAddLibsToList (exporter.mingwLibs, moduleInfo.moduleInfo ["mingwLibs"].toString());\r
else\r
- parseAndAddLibs (exporter.windowsLibs, moduleInfo.moduleInfo ["windowsLibs"].toString());\r
+ parseAndAddLibsToList (exporter.windowsLibs, moduleInfo.moduleInfo ["windowsLibs"].toString());\r
}\r
else if (exporter.isAndroid())\r
{\r
- parseAndAddLibs (exporter.androidLibs, moduleInfo.moduleInfo ["androidLibs"].toString());\r
+ parseAndAddLibsToList (exporter.androidLibs, moduleInfo.moduleInfo ["androidLibs"].toString());\r
}\r
}\r
\r
+void LibraryModule::addSettingsForModuleToExporter (ProjectExporter& exporter, ProjectSaver& projectSaver) const\r
+{\r
+ addSearchPathsToExporter (exporter);\r
+ addDefinesToExporter (exporter);\r
+ addCompileUnitsToExporter (exporter, projectSaver);\r
+ addLibsToExporter (exporter);\r
+}\r
+\r
void LibraryModule::getConfigFlags (Project& project, OwnedArray<Project::ConfigFlag>& flags) const\r
{\r
auto header = moduleInfo.getHeader();\r
}\r
}\r
\r
-//==============================================================================\r
+static void addFileWithGroups (Project::Item& group, const RelativePath& file, const String& path)\r
+{\r
+ auto slash = path.indexOfChar (File::getSeparatorChar());\r
+\r
+ if (slash >= 0)\r
+ {\r
+ auto topLevelGroup = path.substring (0, slash);\r
+ auto remainingPath = path.substring (slash + 1);\r
+\r
+ auto newGroup = group.getOrCreateSubGroup (topLevelGroup);\r
+ addFileWithGroups (newGroup, file, remainingPath);\r
+ }\r
+ else\r
+ {\r
+ if (! group.containsChildForFile (file))\r
+ group.addRelativeFile (file, -1, false);\r
+ }\r
+}\r
+\r
struct FileSorter\r
{\r
static int compareElements (const File& f1, const File& f2)\r
}\r
};\r
\r
-bool LibraryModule::CompileUnit::hasSuffix (const File& f, const char* suffix)\r
+void LibraryModule::findBrowseableFiles (const File& folder, Array<File>& filesFound) const\r
{\r
- auto fileWithoutSuffix = f.getFileNameWithoutExtension() + ".";\r
+ Array<File> tempList;\r
+ FileSorter sorter;\r
\r
- return fileWithoutSuffix.containsIgnoreCase (suffix + String ("."))\r
- || fileWithoutSuffix.containsIgnoreCase (suffix + String ("_"));\r
-}\r
+ DirectoryIterator iter (folder, true, "*", File::findFiles);\r
+ bool isHiddenFile;\r
\r
-void LibraryModule::CompileUnit::writeInclude (MemoryOutputStream&) const\r
-{\r
+ while (iter.next (nullptr, &isHiddenFile, nullptr, nullptr, nullptr, nullptr))\r
+ if (! isHiddenFile && iter.getFile().hasFileExtension (browseableFileExtensions))\r
+ tempList.addSorted (sorter, iter.getFile());\r
+\r
+ filesFound.addArray (tempList);\r
}\r
\r
bool LibraryModule::CompileUnit::isNeededForExporter (ProjectExporter& exporter) const\r
return "include_" + file.getFileName();\r
}\r
\r
+bool LibraryModule::CompileUnit::hasSuffix (const File& f, const char* suffix)\r
+{\r
+ auto fileWithoutSuffix = f.getFileNameWithoutExtension() + ".";\r
+\r
+ return fileWithoutSuffix.containsIgnoreCase (suffix + String ("."))\r
+ || fileWithoutSuffix.containsIgnoreCase (suffix + String ("_"));\r
+}\r
+\r
Array<LibraryModule::CompileUnit> LibraryModule::getAllCompileUnits (ProjectType::Target::Type forTarget) const\r
{\r
auto files = getFolder().findChildFiles (File::findFiles, false);\r
}\r
}\r
\r
-static void addFileWithGroups (Project::Item& group, const RelativePath& file, const String& path)\r
-{\r
- auto slash = path.indexOfChar (File::getSeparatorChar());\r
-\r
- if (slash >= 0)\r
- {\r
- auto topLevelGroup = path.substring (0, slash);\r
- auto remainingPath = path.substring (slash + 1);\r
-\r
- auto newGroup = group.getOrCreateSubGroup (topLevelGroup);\r
- addFileWithGroups (newGroup, file, remainingPath);\r
- }\r
- else\r
- {\r
- if (! group.containsChildForFile (file))\r
- group.addRelativeFile (file, -1, false);\r
- }\r
-}\r
-\r
-void LibraryModule::findBrowseableFiles (const File& folder, Array<File>& filesFound) const\r
-{\r
- Array<File> tempList;\r
- FileSorter sorter;\r
-\r
- DirectoryIterator iter (folder, true, "*", File::findFiles);\r
- bool isHiddenFile;\r
-\r
- while (iter.next (nullptr, &isHiddenFile, nullptr, nullptr, nullptr, nullptr))\r
- if (! isHiddenFile && iter.getFile().hasFileExtension (browseableFileExtensions))\r
- tempList.addSorted (sorter, iter.getFile());\r
-\r
- filesFound.addArray (tempList);\r
-}\r
-\r
void LibraryModule::addBrowseableCode (ProjectExporter& exporter, const Array<File>& compiled, const File& localModuleFolder) const\r
{\r
if (sourceFiles.isEmpty())\r
\r
auto& project = exporter.getProject();\r
\r
- if (project.getEnabledModules().shouldCopyModuleFilesLocally (getID()).getValue())\r
+ if (project.getEnabledModules().shouldCopyModuleFilesLocally (getID()))\r
moduleHeader = project.getLocalModuleFolder (getID()).getChildFile (moduleHeader.getFileName());\r
\r
auto isModuleHeader = [&] (const File& f) { return f.getFileName() == moduleHeader.getFileName(); };\r
exporter.getModulesGroup().state.appendChild (sourceGroup.state.createCopy(), nullptr);\r
}\r
\r
-\r
//==============================================================================\r
EnabledModuleList::EnabledModuleList (Project& p, const ValueTree& s)\r
: project (p), state (s)\r
{\r
}\r
\r
-ModuleDescription EnabledModuleList::getModuleInfo (const String& moduleID)\r
-{\r
- return ModuleDescription (project.getModuleWithID (moduleID).second);\r
-}\r
-\r
-bool EnabledModuleList::isModuleEnabled (const String& moduleID) const\r
-{\r
- return state.getChildWithProperty (Ids::ID, moduleID).isValid();\r
-}\r
-\r
-bool EnabledModuleList::isAudioPluginModuleMissing() const\r
+StringArray EnabledModuleList::getAllModules() const\r
{\r
- return project.isAudioPluginProject()\r
- && ! isModuleEnabled ("juce_audio_plugin_client");\r
-}\r
+ StringArray moduleIDs;\r
\r
-bool EnabledModuleList::shouldUseGlobalPath (const String& moduleID) const\r
-{\r
- return static_cast<bool> (state.getChildWithProperty (Ids::ID, moduleID)\r
- .getProperty (Ids::useGlobalPath));\r
-}\r
+ for (int i = 0; i < getNumModules(); ++i)\r
+ moduleIDs.add (getModuleID (i));\r
\r
-Value EnabledModuleList::getShouldUseGlobalPathValue (const String& moduleID) const\r
-{\r
- return state.getChildWithProperty (Ids::ID, moduleID)\r
- .getPropertyAsValue (Ids::useGlobalPath, getUndoManager());\r
+ return moduleIDs;\r
}\r
\r
-Value EnabledModuleList::shouldShowAllModuleFilesInProject (const String& moduleID)\r
+void EnabledModuleList::createRequiredModules (OwnedArray<LibraryModule>& modules)\r
{\r
- return state.getChildWithProperty (Ids::ID, moduleID)\r
- .getPropertyAsValue (Ids::showAllCode, getUndoManager());\r
+ for (int i = 0; i < getNumModules(); ++i)\r
+ modules.add (new LibraryModule (getModuleInfo (getModuleID (i))));\r
}\r
\r
-struct ModuleTreeSorter\r
+void EnabledModuleList::sortAlphabetically()\r
{\r
- static int compareElements (const ValueTree& m1, const ValueTree& m2)\r
+ struct ModuleTreeSorter\r
{\r
- return m1[Ids::ID].toString().compareIgnoreCase (m2[Ids::ID]);\r
- }\r
-};\r
+ static int compareElements (const ValueTree& m1, const ValueTree& m2)\r
+ {\r
+ return m1[Ids::ID].toString().compareIgnoreCase (m2[Ids::ID]);\r
+ }\r
+ };\r
\r
-void EnabledModuleList::sortAlphabetically()\r
-{\r
ModuleTreeSorter sorter;\r
state.sort (sorter, getUndoManager(), false);\r
}\r
\r
-Value EnabledModuleList::shouldCopyModuleFilesLocally (const String& moduleID) const\r
+File EnabledModuleList::getDefaultModulesFolder() const\r
{\r
- return state.getChildWithProperty (Ids::ID, moduleID)\r
- .getPropertyAsValue (Ids::useLocalCopy, getUndoManager());\r
-}\r
+ File globalPath (getAppSettings().getStoredPath (Ids::defaultJuceModulePath, TargetOS::getThisOS()).get().toString());\r
\r
-void EnabledModuleList::addModule (const File& moduleFolder, bool copyLocally, bool useGlobalPath, bool sendAnalyticsEvent)\r
-{\r
- ModuleDescription info (moduleFolder);\r
+ if (globalPath.exists())\r
+ return globalPath;\r
\r
- if (info.isValid())\r
+ for (auto& exporterPathModule : project.getExporterPathsModuleList().getAllModules())\r
{\r
- auto moduleID = info.getID();\r
-\r
- if (! isModuleEnabled (moduleID))\r
- {\r
- ValueTree module (Ids::MODULE);\r
- module.setProperty (Ids::ID, moduleID, getUndoManager());\r
-\r
- state.appendChild (module, getUndoManager());\r
- sortAlphabetically();\r
-\r
- shouldShowAllModuleFilesInProject (moduleID) = true;\r
- shouldCopyModuleFilesLocally (moduleID) = copyLocally;\r
- getShouldUseGlobalPathValue (moduleID) = useGlobalPath;\r
-\r
- RelativePath path (moduleFolder.getParentDirectory(),\r
- project.getProjectFolder(), RelativePath::projectFolder);\r
-\r
- for (Project::ExporterIterator exporter (project); exporter.next();)\r
- exporter->getPathForModuleValue (moduleID) = path.toUnixStyle();\r
-\r
- if (! useGlobalPath)\r
- project.rescanExporterPathModules (false);\r
-\r
- if (sendAnalyticsEvent)\r
- {\r
- StringPairArray data;\r
- data.set ("label", moduleID);\r
+ auto f = exporterPathModule.second;\r
\r
- Analytics::getInstance()->logEvent ("Module Added", data, ProjucerAnalyticsEvent::projectEvent);\r
- }\r
- }\r
+ if (f.isDirectory())\r
+ return f.getParentDirectory();\r
}\r
-}\r
-\r
-void EnabledModuleList::removeModule (String moduleID) // must be pass-by-value, and not a const ref!\r
-{\r
- for (auto i = state.getNumChildren(); --i >= 0;)\r
- if (state.getChild(i) [Ids::ID] == moduleID)\r
- state.removeChild (i, getUndoManager());\r
\r
- for (Project::ExporterIterator exporter (project); exporter.next();)\r
- exporter->removePathForModule (moduleID);\r
+ return File::getCurrentWorkingDirectory();\r
}\r
\r
-void EnabledModuleList::createRequiredModules (OwnedArray<LibraryModule>& modules)\r
+ModuleDescription EnabledModuleList::getModuleInfo (const String& moduleID)\r
{\r
- for (int i = 0; i < getNumModules(); ++i)\r
- modules.add (new LibraryModule (getModuleInfo (getModuleID (i))));\r
+ return ModuleDescription (project.getModuleWithID (moduleID).second);\r
}\r
\r
-StringArray EnabledModuleList::getAllModules() const\r
+bool EnabledModuleList::isModuleEnabled (const String& moduleID) const\r
{\r
- StringArray moduleIDs;\r
-\r
- for (int i = 0; i < getNumModules(); ++i)\r
- moduleIDs.add (getModuleID (i));\r
-\r
- return moduleIDs;\r
+ return state.getChildWithProperty (Ids::ID, moduleID).isValid();\r
}\r
\r
static void getDependencies (Project& project, const String& moduleID, StringArray& dependencies)\r
return (moduleCppStandard.getIntValue() > projectCppStandard.getIntValue());\r
}\r
\r
+bool EnabledModuleList::shouldUseGlobalPath (const String& moduleID) const\r
+{\r
+ return (bool) shouldUseGlobalPathValue (moduleID).getValue();\r
+}\r
+\r
+Value EnabledModuleList::shouldUseGlobalPathValue (const String& moduleID) const\r
+{\r
+ return state.getChildWithProperty (Ids::ID, moduleID)\r
+ .getPropertyAsValue (Ids::useGlobalPath, getUndoManager());\r
+}\r
+\r
+bool EnabledModuleList::shouldShowAllModuleFilesInProject (const String& moduleID) const\r
+{\r
+ return (bool) shouldShowAllModuleFilesInProjectValue (moduleID).getValue();\r
+}\r
+\r
+Value EnabledModuleList::shouldShowAllModuleFilesInProjectValue (const String& moduleID) const\r
+{\r
+ return state.getChildWithProperty (Ids::ID, moduleID)\r
+ .getPropertyAsValue (Ids::showAllCode, getUndoManager());\r
+}\r
+\r
+bool EnabledModuleList::shouldCopyModuleFilesLocally (const String& moduleID) const\r
+{\r
+ return (bool) shouldCopyModuleFilesLocallyValue (moduleID).getValue();\r
+}\r
+\r
+Value EnabledModuleList::shouldCopyModuleFilesLocallyValue (const String& moduleID) const\r
+{\r
+ return state.getChildWithProperty (Ids::ID, moduleID)\r
+ .getPropertyAsValue (Ids::useLocalCopy, getUndoManager());\r
+}\r
+\r
bool EnabledModuleList::areMostModulesUsingGlobalPath() const\r
{\r
int numYes = 0, numNo = 0;\r
\r
for (auto i = getNumModules(); --i >= 0;)\r
{\r
- if (shouldCopyModuleFilesLocally (getModuleID (i)).getValue())\r
+ if (shouldCopyModuleFilesLocally (getModuleID (i)))\r
++numYes;\r
else\r
++numNo;\r
return numYes > numNo;\r
}\r
\r
-void EnabledModuleList::setLocalCopyModeForAllModules (bool copyLocally)\r
+void EnabledModuleList::addModule (const File& moduleFolder, bool copyLocally, bool useGlobalPath, bool sendAnalyticsEvent)\r
{\r
- for (auto i = getNumModules(); --i >= 0;)\r
- shouldCopyModuleFilesLocally (project.getEnabledModules().getModuleID (i)) = copyLocally;\r
-}\r
+ ModuleDescription info (moduleFolder);\r
\r
-File EnabledModuleList::findDefaultModulesFolder (Project& project)\r
-{\r
- File globalPath (getAppSettings().getStoredPath (Ids::defaultJuceModulePath, TargetOS::getThisOS()).get().toString());\r
+ if (info.isValid())\r
+ {\r
+ auto moduleID = info.getID();\r
\r
- if (globalPath.exists())\r
- return globalPath;\r
+ if (! isModuleEnabled (moduleID))\r
+ {\r
+ ValueTree module (Ids::MODULE);\r
+ module.setProperty (Ids::ID, moduleID, getUndoManager());\r
\r
- for (auto& exporterPathModule : project.getExporterPathsModuleList().getAllModules())\r
- {\r
- auto f = exporterPathModule.second;\r
+ state.appendChild (module, getUndoManager());\r
+ sortAlphabetically();\r
\r
- if (f.isDirectory())\r
- return f.getParentDirectory();\r
- }\r
+ shouldShowAllModuleFilesInProjectValue (moduleID) = true;\r
+ shouldCopyModuleFilesLocallyValue (moduleID) = copyLocally;\r
+ shouldUseGlobalPathValue (moduleID) = useGlobalPath;\r
\r
- return File::getCurrentWorkingDirectory();\r
-}\r
+ RelativePath path (moduleFolder.getParentDirectory(),\r
+ project.getProjectFolder(), RelativePath::projectFolder);\r
\r
-void EnabledModuleList::addModuleFromUserSelectedFile()\r
-{\r
- static auto lastLocation = findDefaultModulesFolder (project);\r
+ for (Project::ExporterIterator exporter (project); exporter.next();)\r
+ exporter->getPathForModuleValue (moduleID) = path.toUnixStyle();\r
\r
- FileChooser fc ("Select a module to add...", lastLocation, {});\r
+ if (! useGlobalPath)\r
+ project.rescanExporterPathModules (false);\r
\r
- if (fc.browseForDirectory())\r
- {\r
- lastLocation = fc.getResult();\r
- addModuleOfferingToCopy (lastLocation, true);\r
+ if (sendAnalyticsEvent)\r
+ {\r
+ StringPairArray data;\r
+ data.set ("label", moduleID);\r
+\r
+ Analytics::getInstance()->logEvent ("Module Added", data, ProjucerAnalyticsEvent::projectEvent);\r
+ }\r
+ }\r
}\r
}\r
\r
addModuleFromUserSelectedFile();\r
}\r
\r
+void EnabledModuleList::addModuleFromUserSelectedFile()\r
+{\r
+ auto lastLocation = getDefaultModulesFolder();\r
+\r
+ FileChooser fc ("Select a module to add...", lastLocation, {});\r
+\r
+ if (fc.browseForDirectory())\r
+ {\r
+ lastLocation = fc.getResult();\r
+ addModuleOfferingToCopy (lastLocation, true);\r
+ }\r
+}\r
+\r
void EnabledModuleList::addModuleOfferingToCopy (const File& f, bool isFromUserSpecifiedFolder)\r
{\r
ModuleDescription m (f);\r
true);\r
}\r
\r
-bool isJUCEFolder (const File& f)\r
+void EnabledModuleList::removeModule (String moduleID) // must be pass-by-value, and not a const ref!\r
{\r
- return isJUCEModulesFolder (f.getChildFile ("modules"));\r
-}\r
+ for (auto i = state.getNumChildren(); --i >= 0;)\r
+ if (state.getChild(i) [Ids::ID] == moduleID)\r
+ state.removeChild (i, getUndoManager());\r
\r
-bool isJUCEModulesFolder (const File& f)\r
-{\r
- return f.isDirectory() && f.getChildFile ("juce_core").isDirectory();\r
+ for (Project::ExporterIterator exporter (project); exporter.next();)\r
+ exporter->removePathForModule (moduleID);\r
}\r
class ProjectExporter;\r
class ProjectSaver;\r
\r
-//==============================================================================\r
-bool isJUCEModulesFolder (const File&);\r
-bool isJUCEFolder (const File&);\r
-\r
//==============================================================================\r
struct ModuleDescription\r
{\r
- ModuleDescription() {}\r
+ ModuleDescription() = default;\r
ModuleDescription (const File& folder);\r
- ModuleDescription (const var& info) : moduleInfo (info) {}\r
\r
bool isValid() const { return getID().isNotEmpty(); }\r
\r
File getFolder() const { jassert (moduleFolder != File()); return moduleFolder; }\r
File getHeader() const;\r
\r
- bool isPluginClient() const { return getID() == "juce_audio_plugin_client"; }\r
-\r
File moduleFolder;\r
var moduleInfo;\r
URL url;\r
File file;\r
bool isCompiledForObjC, isCompiledForNonObjC;\r
\r
- void writeInclude (MemoryOutputStream&) const;\r
bool isNeededForExporter (ProjectExporter&) const;\r
String getFilenameForProxyFile() const;\r
static bool hasSuffix (const File&, const char*);\r
ModuleDescription moduleInfo;\r
\r
private:\r
- mutable Array<File> sourceFiles;\r
- OwnedArray<Project::ConfigFlag> configFlags;\r
+ void addSearchPathsToExporter (ProjectExporter&) const;\r
+ void addDefinesToExporter (ProjectExporter&) const;\r
+ void addCompileUnitsToExporter (ProjectExporter&, ProjectSaver&) const;\r
+ void addLibsToExporter (ProjectExporter&) const;\r
\r
void addBrowseableCode (ProjectExporter&, const Array<File>& compiled, const File& localModuleFolder) const;\r
+\r
+ mutable Array<File> sourceFiles;\r
+ OwnedArray<Project::ConfigFlag> configFlags;\r
};\r
\r
//==============================================================================\r
-using ModuleIDAndFolder = std::pair<String, File>;\r
-using ModuleIDAndFolderList = std::vector<ModuleIDAndFolder>;\r
-\r
class AvailableModuleList\r
{\r
public:\r
- AvailableModuleList();\r
+ using ModuleIDAndFolder = std::pair<String, File>;\r
+ using ModuleIDAndFolderList = std::vector<ModuleIDAndFolder>;\r
+\r
+ AvailableModuleList() = default;\r
\r
void scanPaths (const Array<File>&);\r
void scanPathsAsync (const Array<File>&);\r
public:\r
EnabledModuleList (Project&, const ValueTree&);\r
\r
- static File findDefaultModulesFolder (Project&);\r
-\r
- bool isModuleEnabled (const String& moduleID) const;\r
+ //==============================================================================\r
+ ValueTree getState() const { return state; }\r
\r
- bool shouldUseGlobalPath (const String& moduleID) const;\r
- Value getShouldUseGlobalPathValue (const String& moduleID) const;\r
+ StringArray getAllModules() const;\r
+ void createRequiredModules (OwnedArray<LibraryModule>& modules);\r
+ void sortAlphabetically();\r
\r
- Value shouldShowAllModuleFilesInProject (const String& moduleID);\r
- Value shouldCopyModuleFilesLocally (const String& moduleID) const;\r
+ File getDefaultModulesFolder() const;\r
\r
- void removeModule (String moduleID);\r
- bool isAudioPluginModuleMissing() const;\r
+ int getNumModules() const { return state.getNumChildren(); }\r
+ String getModuleID (int index) const { return state.getChild (index) [Ids::ID].toString(); }\r
\r
ModuleDescription getModuleInfo (const String& moduleID);\r
\r
- void addModule (const File& moduleManifestFile, bool copyLocally, bool useGlobalPath, bool sendAnalyticsEvent);\r
- void addModuleInteractive (const String& moduleID);\r
- void addModuleFromUserSelectedFile();\r
- void addModuleOfferingToCopy (const File&, bool isFromUserSpecifiedFolder);\r
-\r
- StringArray getAllModules() const;\r
+ bool isModuleEnabled (const String& moduleID) const;\r
StringArray getExtraDependenciesNeeded (const String& moduleID) const;\r
bool doesModuleHaveHigherCppStandardThanProject (const String& moduleID);\r
- void createRequiredModules (OwnedArray<LibraryModule>& modules);\r
\r
- int getNumModules() const { return state.getNumChildren(); }\r
- String getModuleID (int index) const { return state.getChild (index) [Ids::ID].toString(); }\r
+ bool shouldUseGlobalPath (const String& moduleID) const;\r
+ Value shouldUseGlobalPathValue (const String& moduleID) const;\r
+\r
+ bool shouldShowAllModuleFilesInProject (const String& moduleID) const;\r
+ Value shouldShowAllModuleFilesInProjectValue (const String& moduleID) const;\r
+\r
+ bool shouldCopyModuleFilesLocally (const String& moduleID) const;\r
+ Value shouldCopyModuleFilesLocallyValue (const String& moduleID) const;\r
\r
bool areMostModulesUsingGlobalPath() const;\r
bool areMostModulesCopiedLocally() const;\r
\r
- void setLocalCopyModeForAllModules (bool copyLocally);\r
-\r
- void sortAlphabetically();\r
+ //==============================================================================\r
+ void addModule (const File& moduleManifestFile, bool copyLocally, bool useGlobalPath, bool sendAnalyticsEvent);\r
+ void addModuleInteractive (const String& moduleID);\r
+ void addModuleFromUserSelectedFile();\r
+ void addModuleOfferingToCopy (const File&, bool isFromUserSpecifiedFolder);\r
\r
- Project& project;\r
- ValueTree state;\r
+ void removeModule (String moduleID);\r
\r
private:\r
UndoManager* getUndoManager() const { return project.getUndoManagerFor (state); }\r
\r
+ Project& project;\r
+ ValueTree state;\r
+\r
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (EnabledModuleList)\r
};\r
exporterPathsModuleList->scanPaths (getExporterModulePathsToScan (*this));\r
}\r
\r
-ModuleIDAndFolder Project::getModuleWithID (const String& id)\r
+AvailableModuleList::ModuleIDAndFolder Project::getModuleWithID (const String& id)\r
{\r
if (! getEnabledModules().shouldUseGlobalPath (id))\r
{\r
public:\r
MakeBuildConfiguration (Project& p, const ValueTree& settings, const ProjectExporter& e)\r
: BuildConfiguration (p, settings, e),\r
- architectureTypeValue (config, Ids::linuxArchitecture, getUndoManager(), "-march=native")\r
+ architectureTypeValue (config, Ids::linuxArchitecture, getUndoManager(), String())\r
{\r
linkTimeOptimisationValue.setDefault (false);\r
optimisationLevelValue.setDefault (isDebug() ? gccO0 : gccO3);\r
void addFilesAndGroupsToProject (StringArray& topLevelGroupIDs) const\r
{\r
for (auto* target : targets)\r
- addEntitlementsFile (*target);\r
+ if (target->shouldAddEntitlements())\r
+ addEntitlementsFile (*target);\r
\r
for (auto& group : getAllGroups())\r
{\r
\r
void addEntitlementsFile (XcodeTarget& target) const\r
{\r
- auto entitlements = getEntitlements (target);\r
+ String content =\r
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"\r
+ "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"\r
+ "<plist version=\"1.0\">\n"\r
+ "<dict>\n";\r
\r
- if (entitlements.size() > 0)\r
- {\r
- String content =\r
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"\r
- "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"\r
- "<plist version=\"1.0\">\n"\r
- "<dict>\n";\r
+ auto entitlements = getEntitlements (target);\r
\r
- for (auto& key : entitlements.getAllKeys())\r
- content += "\t<key>" + key + "</key>\n"\r
- "\t" + entitlements[key] + "\n";\r
+ for (auto& key : entitlements.getAllKeys())\r
+ content += "\t<key>" + key + "</key>\n"\r
+ "\t" + entitlements[key] + "\n";\r
\r
- content += "</dict>\n"\r
- "</plist>\n";\r
+ content += "</dict>\n"\r
+ "</plist>\n";\r
\r
- auto entitlementsFile = getTargetFolder().getChildFile (target.getEntitlementsFilename());\r
- overwriteFileIfDifferentOrThrow (entitlementsFile, content);\r
+ auto entitlementsFile = getTargetFolder().getChildFile (target.getEntitlementsFilename());\r
+ overwriteFileIfDifferentOrThrow (entitlementsFile, content);\r
\r
- RelativePath entitlementsPath (entitlementsFile, getTargetFolder(), RelativePath::buildTargetFolder);\r
- addFile (entitlementsPath, false, false, false, false, nullptr, {});\r
- }\r
+ RelativePath entitlementsPath (entitlementsFile, getTargetFolder(), RelativePath::buildTargetFolder);\r
+ addFile (entitlementsPath, false, false, false, false, nullptr, {});\r
}\r
\r
String addProjectItem (const Project::Item& projectItem) const\r
\r
RelativePath ProjectExporter::getModuleFolderRelativeToProject (const String& moduleID) const\r
{\r
- if (project.getEnabledModules().shouldCopyModuleFilesLocally (moduleID).getValue())\r
+ if (project.getEnabledModules().shouldCopyModuleFilesLocally (moduleID))\r
return RelativePath (project.getRelativePathForFile (project.getLocalModuleFolder (moduleID)),\r
RelativePath::projectFolder);\r
\r
\r
RelativePath ProjectExporter::getLegacyModulePath (const String& moduleID) const\r
{\r
- if (project.getEnabledModules().state.getChildWithProperty (Ids::ID, moduleID) ["useLocalCopy"])\r
+ if (project.getEnabledModules().shouldCopyModuleFilesLocally (moduleID))\r
return RelativePath (project.getRelativePathForFile (project.getGeneratedCodeFolder()\r
.getChildFile ("modules")\r
.getChildFile (moduleID)), RelativePath::projectFolder);\r
return directory.getChildFile ("Assets").getChildFile ("juce_icon.png").existsAsFile();\r
}\r
\r
+bool isJUCEFolder (const File& f)\r
+{\r
+ return isJUCEModulesFolder (f.getChildFile ("modules"));\r
+}\r
+\r
+bool isJUCEModulesFolder (const File& f)\r
+{\r
+ return f.isDirectory() && f.getChildFile ("juce_core").isDirectory();\r
+}\r
+\r
//==============================================================================\r
static var parseJUCEHeaderMetadata (const StringArray& lines)\r
{\r
\r
bool isValidJUCEExamplesDirectory (const File&) noexcept;\r
\r
+bool isJUCEModulesFolder (const File&);\r
+bool isJUCEFolder (const File&);\r
+\r
//==============================================================================\r
int indexOfLineStartingWith (const StringArray& lines, const String& text, int startIndex);\r
\r
\r
void filesDropped (const StringArray& selectedFiles, int, int) override\r
{\r
-\r
setTo (selectedFiles[0]);\r
\r
highlightForDragAndDrop = false;\r
JUCE_OUTDIR := build
ifeq ($(TARGET_ARCH),)
- TARGET_ARCH := -march=native
+ TARGET_ARCH :=
endif
JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
JUCE_OUTDIR := build
ifeq ($(TARGET_ARCH),)
- TARGET_ARCH := -march=native
+ TARGET_ARCH :=
endif
JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
\r
#define JUCE_USE_DARK_SPLASH_SCREEN 1\r
\r
-#define JUCE_PROJUCER_VERSION 0x50406\r
+#define JUCE_PROJUCER_VERSION 0x50407\r
\r
//==============================================================================\r
#define JUCE_MODULE_AVAILABLE_juce_analytics 1\r
<?xml version="1.0" encoding="UTF-8"?>\r
\r
<JUCERPROJECT id="Z2Xzcp" name="UnitTestRunner" projectType="consoleapp" bundleIdentifier="com.roli.UnitTestRunner"\r
- jucerVersion="5.4.6" defines="JUCE_UNIT_TESTS=1" displaySplashScreen="0"\r
+ jucerVersion="5.4.7" defines="JUCE_UNIT_TESTS=1" displaySplashScreen="0"\r
reportAppUsage="0" companyName="ROLI Ltd." companyCopyright="ROLI Ltd.">\r
<MAINGROUP id="GZdWCU" name="UnitTestRunner">\r
<GROUP id="{22894462-E1A9-036F-ED94-B51A50C87552}" name="Source">\r
\r
#define JUCE_USE_DARK_SPLASH_SCREEN 1\r
\r
-#define JUCE_PROJUCER_VERSION 0x50406\r
+#define JUCE_PROJUCER_VERSION 0x50407\r
\r
//==============================================================================\r
#define JUCE_MODULE_AVAILABLE_juce_audio_basics 1\r
<?xml version="1.0" encoding="UTF-8"?>\r
\r
<JUCERPROJECT id="IvabE4" name="WindowsDLL" projectType="library" juceLinkage="none"\r
- bundleIdentifier="com.roli.jucedll" jucerVersion="5.4.6" defines="JUCE_DLL_BUILD=1"\r
+ bundleIdentifier="com.roli.jucedll" jucerVersion="5.4.7" defines="JUCE_DLL_BUILD=1"\r
displaySplashScreen="0" reportAppUsage="0" companyName="ROLI Ltd."\r
companyCopyright="ROLI Ltd.">\r
<EXPORTFORMATS>\r
\r
ID: juce_analytics\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE analytics classes\r
description: Classes to collect analytics and send to destinations\r
website: http://www.juce.com/juce\r
\r
ID: juce_audio_basics\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE audio and MIDI data classes\r
description: Classes for audio buffer manipulation, midi message handling, synthesis, etc.\r
website: http://www.juce.com/juce\r
\r
ID: juce_audio_devices\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE audio and MIDI I/O device classes\r
description: Classes to play and record from audio and MIDI I/O devices\r
website: http://www.juce.com/juce\r
IDirectSoundBuffer* pOutputBuffer;\r
DWORD writeOffset;\r
int totalBytesPerBuffer, bytesPerBuffer;\r
- unsigned int lastPlayCursor;\r
\r
bool firstPlayTime;\r
int64 lastPlayTime, ticksPerBuffer;\r
initialiseDSoundFunctions();\r
}\r
\r
- void scanForDevices()\r
+ void scanForDevices() override\r
{\r
hasScanned = true;\r
deviceList.scan();\r
}\r
\r
- StringArray getDeviceNames (bool wantInputNames) const\r
+ StringArray getDeviceNames (bool wantInputNames) const override\r
{\r
jassert (hasScanned); // need to call scanForDevices() before doing this\r
\r
: deviceList.outputDeviceNames;\r
}\r
\r
- int getDefaultDeviceIndex (bool /*forInput*/) const\r
+ int getDefaultDeviceIndex (bool /*forInput*/) const override\r
{\r
jassert (hasScanned); // need to call scanForDevices() before doing this\r
return 0;\r
}\r
\r
- int getIndexOfDevice (AudioIODevice* device, bool asInput) const\r
+ int getIndexOfDevice (AudioIODevice* device, bool asInput) const override\r
{\r
jassert (hasScanned); // need to call scanForDevices() before doing this\r
\r
return -1;\r
}\r
\r
- bool hasSeparateInputsAndOutputs() const { return true; }\r
+ bool hasSeparateInputsAndOutputs() const override { return true; }\r
\r
AudioIODevice* createDevice (const String& outputDeviceName,\r
- const String& inputDeviceName)\r
+ const String& inputDeviceName) override\r
{\r
jassert (hasScanned); // need to call scanForDevices() before doing this\r
\r
}\r
\r
//==============================================================================\r
- void scanForDevices()\r
+ void scanForDevices() override\r
{\r
hasScanned = true;\r
\r
outputDeviceIds, inputDeviceIds);\r
}\r
\r
- StringArray getDeviceNames (bool wantInputNames) const\r
+ StringArray getDeviceNames (bool wantInputNames) const override\r
{\r
jassert (hasScanned); // need to call scanForDevices() before doing this\r
\r
: outputDeviceNames;\r
}\r
\r
- int getDefaultDeviceIndex (bool /*forInput*/) const\r
+ int getDefaultDeviceIndex (bool /*forInput*/) const override\r
{\r
jassert (hasScanned); // need to call scanForDevices() before doing this\r
return 0;\r
}\r
\r
- int getIndexOfDevice (AudioIODevice* device, bool asInput) const\r
+ int getIndexOfDevice (AudioIODevice* device, bool asInput) const override\r
{\r
jassert (hasScanned); // need to call scanForDevices() before doing this\r
\r
return -1;\r
}\r
\r
- bool hasSeparateInputsAndOutputs() const { return true; }\r
+ bool hasSeparateInputsAndOutputs() const override { return true; }\r
\r
AudioIODevice* createDevice (const String& outputDeviceName,\r
- const String& inputDeviceName)\r
+ const String& inputDeviceName) override\r
{\r
jassert (hasScanned); // need to call scanForDevices() before doing this\r
\r
\r
ID: juce_audio_formats\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE audio file format codecs\r
description: Classes for reading and writing various audio file formats.\r
website: http://www.juce.com/juce\r
//==============================================================================\r
#define UNITY_AUDIO_PLUGIN_API_VERSION 0x010401\r
\r
-#if JUCE_WINDOWS\r
+#if JUCE_MSVC\r
#define UNITY_INTERFACE_API __stdcall\r
#define UNITY_INTERFACE_EXPORT __declspec(dllexport)\r
#else\r
void audioProcessorChanged (AudioProcessor*) override\r
{\r
vstEffect.initialDelay = processor->getLatencySamples();\r
-\r
- if (hostCallback != nullptr)\r
- hostCallback (&vstEffect, Vst2::audioMasterUpdateDisplay, 0, 0, nullptr, 0);\r
-\r
triggerAsyncUpdate();\r
}\r
\r
void handleAsyncUpdate() override\r
{\r
if (hostCallback != nullptr)\r
- hostCallback (&vstEffect, Vst2::audioMasterIOChanged, 0, 0, nullptr, 0);\r
+ {\r
+ hostCallback (&vstEffect, Vst2::audioMasterUpdateDisplay, 0, 0, nullptr, 0);\r
+ hostCallback (&vstEffect, Vst2::audioMasterIOChanged, 0, 0, nullptr, 0);\r
+ }\r
}\r
\r
bool getPinProperties (Vst2::VstPinProperties& properties, bool direction, int index) const\r
{\r
PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST3;\r
\r
- #if JUCE_WINDOWS\r
+ #if JUCE_MSVC\r
// Cunning trick to force this function to be exported. Life's too short to\r
// faff around creating .def files for this kind of thing.\r
#pragma comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__)\r
\r
ID: juce_audio_plugin_client\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE audio plugin wrapper classes\r
description: Classes for building VST, VST3, AudioUnit, AAX and RTAS plugins.\r
website: http://www.juce.com/juce\r
#define STRICT 1\r
#include <windows.h>\r
#include <float.h>\r
- #if ! JUCE_MINGW\r
+ #if JUCE_MSVC\r
#pragma warning (disable : 4312 4355)\r
#endif\r
#ifdef __INTEL_COMPILER\r
\r
ID: juce_audio_processors\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE audio processor classes\r
description: Classes for loading and playing VST, AU, LADSPA, or internally-generated audio processors.\r
website: http://www.juce.com/juce\r
\r
ID: juce_audio_utils\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE extra audio utility classes\r
description: Classes for audio-related GUI and miscellaneous tasks.\r
website: http://www.juce.com/juce\r
\r
ID: juce_blocks_basics\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: Provides low-level control over ROLI BLOCKS devices\r
description: JUCE wrapper for low-level control over ROLI BLOCKS devices.\r
website: http://developer.roli.com\r
\r
ID: juce_box2d\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE wrapper for the Box2D physics engine\r
description: The Box2D physics engine and some utility classes.\r
website: http://www.juce.com/juce\r
#if JUCE_WINDOWS\r
#include <ctime>\r
\r
- #if ! JUCE_MINGW\r
+ #if JUCE_MINGW\r
+ #include <ws2spi.h>\r
+ #include <cstdio>\r
+ #include <locale.h>\r
+ #else\r
#pragma warning (push)\r
#pragma warning (disable: 4091)\r
#include <Dbghelp.h>\r
#endif\r
#endif\r
\r
- #if JUCE_MINGW\r
- #include <ws2spi.h>\r
- #include <cstdio>\r
- #include <locale.h>\r
- #endif\r
-\r
#else\r
#if JUCE_LINUX || JUCE_ANDROID\r
#include <sys/types.h>\r
\r
ID: juce_core\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE core classes\r
description: The essential set of basic JUCE classes, as required by all the other JUCE modules. Includes text, container, memory, threading and i/o functionality.\r
website: http://www.juce.com/juce\r
//==============================================================================\r
/** Config: JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES\r
\r
- In a Visual C++ build, this can be used to stop the required system libs being\r
+ In a Windows build, this can be used to stop the required system libs being\r
automatically added to the link stage.\r
*/\r
#ifndef JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES\r
#pragma warning (4: 4511 4512 4100)\r
#endif\r
\r
- #if JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES\r
+ #if ! JUCE_MINGW && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES\r
#pragma comment (lib, "kernel32.lib")\r
#pragma comment (lib, "user32.lib")\r
#pragma comment (lib, "wininet.lib")\r
namespace juce\r
{\r
\r
-#if ! JUCE_MINGW\r
+#if JUCE_MSVC\r
#pragma intrinsic (__cpuid)\r
#pragma intrinsic (__rdtsc)\r
#endif\r
\r
//==============================================================================\r
\r
-#if JUCE_MINGW\r
+#if JUCE_MINGW || JUCE_CLANG\r
static void callCPUID (int result[4], uint32 type)\r
{\r
uint32 la = result[0], lb = result[1], lc = result[2], ld = result[3];\r
*/\r
#define JUCE_MAJOR_VERSION 5\r
#define JUCE_MINOR_VERSION 4\r
-#define JUCE_BUILDNUMBER 6\r
+#define JUCE_BUILDNUMBER 7\r
\r
/** Current JUCE version number.\r
\r
\r
ID: juce_cryptography\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE cryptography classes\r
description: Classes for various basic cryptography functions, including RSA, Blowfish, MD5, SHA, etc.\r
website: http://www.juce.com/juce\r
\r
ID: juce_data_structures\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE data model helper classes\r
description: Classes for undo/redo management, and smart data structures.\r
website: http://www.juce.com/juce\r
\r
ID: juce_dsp\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE DSP classes\r
description: Classes for audio buffer manipulation, digital audio processing, filtering, oversampling, fast math functions etc.\r
website: http://www.juce.com/juce\r
\r
ID: juce_events\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE message and event handling classes\r
description: Classes for running an application's main event loop and sending/receiving messages, timers, etc.\r
website: http://www.juce.com/juce\r
\r
ID: juce_graphics\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE graphics classes\r
description: Classes for 2D vector graphics, image loading/saving, font handling, etc.\r
website: http://www.juce.com/juce\r
CGColorSpaceRelease (colourSpace);\r
}\r
\r
- ~CoreGraphicsPixelData() override\r
- {\r
- freeCachedImageRef();\r
- CGContextRelease (context);\r
- }\r
+ ~CoreGraphicsPixelData() override;\r
\r
std::unique_ptr<LowLevelGraphicsContext> createLowLevelContext() override\r
{\r
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CoreGraphicsPixelData)\r
};\r
\r
+// The following implementation is outside of the class definition to avoid spurious\r
+// warning messages when dynamically loading libraries at runtime on macOS\r
+CoreGraphicsPixelData::~CoreGraphicsPixelData()\r
+{\r
+ freeCachedImageRef();\r
+ CGContextRelease (context);\r
+}\r
+\r
ImagePixelData::Ptr NativeImageType::create (Image::PixelFormat format, int width, int height, bool clearImage) const\r
{\r
return *new CoreGraphicsPixelData (format == Image::RGB ? Image::ARGB : format, width, height, clearImage);\r
return ComBaseClassHelper<IDWriteTextRenderer>::QueryInterface (refId, result);\r
}\r
\r
- JUCE_COMRESULT IsPixelSnappingDisabled (void* /*clientDrawingContext*/, BOOL* isDisabled) override\r
+ JUCE_COMRESULT IsPixelSnappingDisabled (void* /*clientDrawingContext*/, BOOL* isDisabled) noexcept override\r
{\r
*isDisabled = FALSE;\r
return S_OK;\r
}\r
\r
- JUCE_COMRESULT GetCurrentTransform (void*, DWRITE_MATRIX* matrix) override\r
+ JUCE_COMRESULT GetCurrentTransform (void*, DWRITE_MATRIX* matrix) noexcept override\r
{\r
matrix->m11 = 1.0f; matrix->m12 = 0.0f;\r
matrix->m21 = 0.0f; matrix->m22 = 1.0f;\r
return S_OK;\r
}\r
\r
- JUCE_COMRESULT GetPixelsPerDip (void*, FLOAT* pixelsPerDip) override\r
+ JUCE_COMRESULT GetPixelsPerDip (void*, FLOAT* pixelsPerDip) noexcept override\r
{\r
*pixelsPerDip = 1.0f;\r
return S_OK;\r
}\r
\r
- JUCE_COMRESULT DrawUnderline (void*, FLOAT, FLOAT, DWRITE_UNDERLINE const*, IUnknown*) override\r
+ JUCE_COMRESULT DrawUnderline (void*, FLOAT, FLOAT, DWRITE_UNDERLINE const*, IUnknown*) noexcept override\r
{\r
return E_NOTIMPL;\r
}\r
\r
- JUCE_COMRESULT DrawStrikethrough (void*, FLOAT, FLOAT, DWRITE_STRIKETHROUGH const*, IUnknown*) override\r
+ JUCE_COMRESULT DrawStrikethrough (void*, FLOAT, FLOAT, DWRITE_STRIKETHROUGH const*, IUnknown*) noexcept override\r
{\r
return E_NOTIMPL;\r
}\r
\r
- JUCE_COMRESULT DrawInlineObject (void*, FLOAT, FLOAT, IDWriteInlineObject*, BOOL, BOOL, IUnknown*) override\r
+ JUCE_COMRESULT DrawInlineObject (void*, FLOAT, FLOAT, IDWriteInlineObject*, BOOL, BOOL, IUnknown*) noexcept override\r
{\r
return E_NOTIMPL;\r
}\r
\r
JUCE_COMRESULT DrawGlyphRun (void* clientDrawingContext, FLOAT baselineOriginX, FLOAT baselineOriginY, DWRITE_MEASURING_MODE,\r
DWRITE_GLYPH_RUN const* glyphRun, DWRITE_GLYPH_RUN_DESCRIPTION const* runDescription,\r
- IUnknown* clientDrawingEffect) override\r
+ IUnknown* clientDrawingEffect) noexcept override\r
{\r
auto layout = static_cast<TextLayout*> (clientDrawingContext);\r
\r
DWRITE_FONT_METRICS dwFontMetrics;\r
dwFontFace->GetMetrics (&dwFontMetrics);\r
\r
- const float totalHeight = (float) (std::abs (dwFontMetrics.ascent) + std::abs (dwFontMetrics.descent));\r
+ const float totalHeight = (float) (dwFontMetrics.ascent + dwFontMetrics.descent);\r
return dwFontMetrics.designUnitsPerEm / totalHeight;\r
}\r
\r
{\r
PathGeometrySink() : ComBaseClassHelper<IDWriteGeometrySink> (0) {}\r
\r
- void __stdcall AddBeziers (const D2D1_BEZIER_SEGMENT* beziers, UINT beziersCount) override\r
+ void __stdcall AddBeziers (const D2D1_BEZIER_SEGMENT* beziers, UINT beziersCount) noexcept override\r
{\r
for (UINT i = 0; i < beziersCount; ++i)\r
path.cubicTo (convertPoint (beziers[i].point1),\r
convertPoint (beziers[i].point3));\r
}\r
\r
- void __stdcall AddLines (const D2D1_POINT_2F* points, UINT pointsCount) override\r
+ void __stdcall AddLines (const D2D1_POINT_2F* points, UINT pointsCount) noexcept override\r
{\r
for (UINT i = 0; i < pointsCount; ++i)\r
path.lineTo (convertPoint (points[i]));\r
}\r
\r
- void __stdcall BeginFigure (D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN) override\r
+ void __stdcall BeginFigure (D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN) noexcept override\r
{\r
path.startNewSubPath (convertPoint (startPoint));\r
}\r
\r
- void __stdcall EndFigure (D2D1_FIGURE_END figureEnd) override\r
+ void __stdcall EndFigure (D2D1_FIGURE_END figureEnd) noexcept override\r
{\r
if (figureEnd == D2D1_FIGURE_END_CLOSED)\r
path.closeSubPath();\r
}\r
\r
- void __stdcall SetFillMode (D2D1_FILL_MODE fillMode) override\r
+ void __stdcall SetFillMode (D2D1_FILL_MODE fillMode) noexcept override\r
{\r
path.setUsingNonZeroWinding (fillMode == D2D1_FILL_MODE_WINDING);\r
}\r
\r
- void __stdcall SetSegmentFlags (D2D1_PATH_SEGMENT) override {}\r
- JUCE_COMRESULT Close() override { return S_OK; }\r
+ void __stdcall SetSegmentFlags (D2D1_PATH_SEGMENT) noexcept override {}\r
+ JUCE_COMRESULT Close() noexcept override { return S_OK; }\r
\r
Path path;\r
\r
#include <exdispid.h>\r
#endif\r
\r
- #if JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES\r
+ #if JUCE_MINGW\r
+ #include <imm.h>\r
+ #elif ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES\r
#pragma comment(lib, "vfw32.lib")\r
#pragma comment(lib, "imm32.lib")\r
- #endif\r
\r
- #if JUCE_OPENGL\r
- #if JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES\r
+ #if JUCE_OPENGL\r
#pragma comment(lib, "OpenGL32.Lib")\r
#pragma comment(lib, "GlU32.Lib")\r
#endif\r
- #endif\r
\r
- #if JUCE_DIRECT2D && JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES\r
- #pragma comment (lib, "Dwrite.lib")\r
- #pragma comment (lib, "D2d1.lib")\r
- #endif\r
-\r
- #if JUCE_MINGW\r
- #include <imm.h>\r
+ #if JUCE_DIRECT2D\r
+ #pragma comment (lib, "Dwrite.lib")\r
+ #pragma comment (lib, "D2d1.lib")\r
+ #endif\r
#endif\r
\r
//==============================================================================\r
\r
ID: juce_gui_basics\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE GUI core classes\r
description: Basic user-interface components and related classes.\r
website: http://www.juce.com/juce\r
}\r
\r
//==============================================================================\r
- bool sendModalInputAttemptIfBlocked()\r
+ bool isBlockedByModalComponent()\r
{\r
if (auto* modal = Component::getCurrentlyModalComponent())\r
{\r
&& (! getComponent().isParentOf (modal))\r
&& getComponent().isCurrentlyBlockedByAnotherModalComponent())\r
{\r
- modal->inputAttemptWhenModal();\r
return true;\r
}\r
}\r
return false;\r
}\r
\r
+ void sendModalInputAttemptIfBlocked()\r
+ {\r
+ if (isBlockedByModalComponent())\r
+ if (auto* modal = Component::getCurrentlyModalComponent())\r
+ modal->inputAttemptWhenModal();\r
+ }\r
+\r
bool canBecomeKeyWindow()\r
{\r
return component.isVisible() && (getStyleFlags() & juce::ComponentPeer::windowIgnoresKeyPresses) == 0;\r
static BOOL becomeFirstResponder (id self, SEL)\r
{\r
if (auto* owner = getOwner (self))\r
- {\r
- if (owner->canBecomeKeyWindow())\r
- {\r
- owner->viewFocusGain();\r
- return YES;\r
- }\r
- }\r
+ owner->viewFocusGain();\r
\r
- return NO;\r
+ return YES;\r
}\r
\r
static BOOL resignFirstResponder (id self, SEL)\r
\r
return owner != nullptr\r
&& owner->canBecomeKeyWindow()\r
- && ! owner->sendModalInputAttemptIfBlocked();\r
+ && ! owner->isBlockedByModalComponent();\r
}\r
\r
static BOOL canBecomeMainWindow (id self, SEL)\r
\r
return owner != nullptr\r
&& owner->canBecomeMainWindow()\r
- && ! owner->sendModalInputAttemptIfBlocked();\r
+ && ! owner->isBlockedByModalComponent();\r
}\r
\r
static void becomeKeyWindow (id self, SEL)\r
class JuceDataObject : public ComBaseClassHelper <IDataObject>\r
{\r
public:\r
- JuceDataObject (JuceDropSource* s, const FORMATETC* f, const STGMEDIUM* m)\r
- : dropSource (s), format (f), medium (m)\r
+ JuceDataObject (const FORMATETC* f, const STGMEDIUM* m)\r
+ : format (f), medium (m)\r
{\r
}\r
\r
JUCE_COMRESULT EnumDAdvise (IEnumSTATDATA**) { return OLE_E_ADVISENOTSUPPORTED; }\r
\r
private:\r
- JuceDropSource* const dropSource;\r
const FORMATETC* const format;\r
const STGMEDIUM* const medium;\r
\r
OleInitialize (0);\r
\r
auto source = new JuceDropSource();\r
- auto data = new JuceDataObject (source, &format, &medium);\r
+ auto data = new JuceDataObject (&format, &medium);\r
\r
DWORD effect;\r
DoDragDrop (data, source, whatToDo, &effect);\r
}\r
}\r
\r
- void setIcon (const Image& newIcon)\r
+ void setIcon (const Image& newIcon) override\r
{\r
if (auto hicon = IconConverters::createHICONFromImage (newIcon, TRUE, 0, 0))\r
{\r
if (multiple)\r
selectRangeOfRows (lastRowSelected, lastRowSelected + 1);\r
else\r
- selectRow (jmin (totalItems - 1, jmax (0, lastRowSelected) + 1));\r
+ selectRow (jmin (totalItems - 1, jmax (0, lastRowSelected + 1)));\r
}\r
else if (key.isKeyCode (KeyPress::pageUpKey))\r
{\r
\r
ID: juce_gui_extra\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE extended GUI classes\r
description: Miscellaneous GUI classes for specialised tasks.\r
website: http://www.juce.com/juce\r
{\r
EventHandler (WebBrowserComponent& w) : ComponentMovementWatcher (&w), owner (w) {}\r
\r
- JUCE_COMRESULT GetTypeInfoCount (UINT*) { return E_NOTIMPL; }\r
- JUCE_COMRESULT GetTypeInfo (UINT, LCID, ITypeInfo**) { return E_NOTIMPL; }\r
- JUCE_COMRESULT GetIDsOfNames (REFIID, LPOLESTR*, UINT, LCID, DISPID*) { return E_NOTIMPL; }\r
+ JUCE_COMRESULT GetTypeInfoCount (UINT*) override { return E_NOTIMPL; }\r
+ JUCE_COMRESULT GetTypeInfo (UINT, LCID, ITypeInfo**) override { return E_NOTIMPL; }\r
+ JUCE_COMRESULT GetIDsOfNames (REFIID, LPOLESTR*, UINT, LCID, DISPID*) override { return E_NOTIMPL; }\r
\r
JUCE_COMRESULT Invoke (DISPID dispIdMember, REFIID /*riid*/, LCID /*lcid*/, WORD /*wFlags*/, DISPPARAMS* pDispParams,\r
- VARIANT* /*pVarResult*/, EXCEPINFO* /*pExcepInfo*/, UINT* /*puArgErr*/)\r
+ VARIANT* /*pVarResult*/, EXCEPINFO* /*pExcepInfo*/, UINT* /*puArgErr*/) override\r
{\r
if (dispIdMember == DISPID_BEFORENAVIGATE2)\r
{\r
#elif JUCE_WINDOWS\r
#include <windowsx.h>\r
\r
- #if JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES\r
+ #if ! JUCE_MINGW && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES\r
#pragma comment(lib, "OpenGL32.Lib")\r
#endif\r
\r
\r
ID: juce_opengl\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE OpenGL classes\r
description: Classes for rendering OpenGL in a JUCE window.\r
website: http://www.juce.com/juce\r
\r
ID: juce_osc\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE OSC classes\r
description: Open Sound Control implementation.\r
website: http://www.juce.com/juce\r
\r
An OSCBundle Element contains either one OSCMessage or one OSCBundle.\r
*/\r
- class Element\r
+ class JUCE_API Element\r
{\r
public:\r
//==============================================================================\r
\r
ID: juce_product_unlocking\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE Online marketplace support\r
description: Classes for online product authentication\r
website: http://www.juce.com/juce\r
\r
import com.android.billingclient.api.*;\r
\r
-public class JuceBillingClient implements PurchasesUpdatedListener {\r
+public class JuceBillingClient implements PurchasesUpdatedListener, BillingClientStateListener {\r
private native void skuDetailsQueryCallback(long host, java.util.List<SkuDetails> skuDetails);\r
private native void purchasesListQueryCallback(long host, java.util.List<Purchase> purchases);\r
private native void purchaseCompletedCallback(long host, Purchase purchase, int responseCode);\r
.setListener(this)\r
.build();\r
\r
- billingClient.startConnection(null);\r
+ billingClient.startConnection(this);\r
}\r
\r
public void endConnection() {\r
}\r
}\r
\r
+ @Override\r
+ public void onBillingServiceDisconnected()\r
+ {\r
+\r
+ }\r
+\r
+ @Override\r
+ public void onBillingSetupFinished(BillingResult billingResult)\r
+ {\r
+\r
+ }\r
+\r
private void executeOnBillingClientConnection(Runnable runnable) {\r
if (billingClient.isReady()) {\r
runnable.run();\r
@Override\r
public void run() {\r
AcknowledgePurchaseParams acknowledgePurchaseParams = AcknowledgePurchaseParams.newBuilder().setPurchaseToken(purchase.getPurchaseToken()).build();\r
- billingClient.acknowledgePurchase(acknowledgePurchaseParams, null);\r
+ billingClient.acknowledgePurchase(acknowledgePurchaseParams, new AcknowledgePurchaseResponseListener() {\r
+ @Override\r
+ public void onAcknowledgePurchaseResponse(BillingResult billingResult) {\r
+\r
+ }\r
+ });\r
}\r
});\r
}\r
#import <AVKit/AVKit.h>\r
\r
//==============================================================================\r
-#elif JUCE_MSVC\r
+#elif JUCE_WINDOWS && ! JUCE_MINGW\r
/* If you're using the camera classes, you'll need access to a few DirectShow headers.\r
These files are provided in the normal Windows SDK. */\r
#include <dshow.h>\r
#include <dshowasf.h>\r
#include <evr.h>\r
\r
- #if JUCE_USE_CAMERA && JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES\r
- #pragma comment (lib, "Strmiids.lib")\r
- #pragma comment (lib, "wmvcore.lib")\r
- #endif\r
+ #if ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES\r
+ #pragma comment (lib, "strmiids.lib")\r
\r
- #if JUCE_MEDIAFOUNDATION && JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES\r
- #pragma comment (lib, "mfuuid.lib")\r
- #endif\r
+ #if JUCE_USE_CAMERA\r
+ #pragma comment (lib, "Strmiids.lib")\r
+ #pragma comment (lib, "wmvcore.lib")\r
+ #endif\r
\r
- #if JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES\r
- #pragma comment (lib, "strmiids.lib")\r
+ #if JUCE_MEDIAFOUNDATION\r
+ #pragma comment (lib, "mfuuid.lib")\r
+ #endif\r
#endif\r
#endif\r
\r
\r
ID: juce_video\r
vendor: juce\r
- version: 5.4.6\r
+ version: 5.4.7\r
name: JUCE video playback and capture classes\r
description: Classes for playing video and capturing camera input.\r
website: http://www.juce.com/juce\r