JUCE breaking changes
=====================
-Version 7.0.2
+Version 7.0.3
=============
Change
cmake_minimum_required(VERSION 3.15)
-project(JUCE VERSION 7.0.3 LANGUAGES C CXX)
+project(JUCE VERSION 7.0.4 LANGUAGES C CXX)
include(CMakeDependentOption)
This file just lists the more notable headline features. For more detailed info\r
about changes and bugfixes please see the git log and BREAKING-CHANGES.txt.\r
\r
+Version 7.0.4\r
+ - Improved Metal device handling\r
+ - Adopted more C++17 features\r
+ - Improved input handling on macOS and iOS\r
+ - Fixed a GUI display issue on Linux\r
+ - Fixed some compiler warnings\r
+\r
Version 7.0.3\r
- Added a unique machine ID\r
- Added new threading classes\r
- Improved the performance of multiple OpenGL contexts\r
- Refactored AudioProcessorGraph\r
- - Improved AudioDeviceManager sample rate handling \r
+ - Improved AudioDeviceManager sample rate handling\r
- Fixed Studio One drawing performance\r
- Updated the FLAC library\r
\r
juce_modules = args.subdirs.split(",")
else:
juce_modules = []
- for item in os.listdir(args.source_dir):
+ for item in sorted(os.listdir(args.source_dir)):
if os.path.isdir(os.path.join(args.source_dir, item)):
juce_modules.append(item)
# Create a list of the directories in the module that we can use as
# subgroups and create the Doxygen group hierarchy string.
- dir_contents = os.listdir(module_path)
+ dir_contents = sorted(os.listdir(module_path))
# Ignore "native" folders as these are excluded by doxygen.
try:
dir_contents.remove("native")
struct DSPDemoParameterBase : public ChangeBroadcaster\r
{\r
DSPDemoParameterBase (const String& labelName) : name (labelName) {}\r
- virtual ~DSPDemoParameterBase() {}\r
+ virtual ~DSPDemoParameterBase() = default;\r
\r
virtual Component* getComponent() = 0;\r
\r
loadURL (u);\r
}\r
\r
- URL getCurrentURL() { return currentURL; }\r
+ URL getCurrentURL() const { return currentURL; }\r
\r
void setTransportSource (AudioTransportSource* newSource)\r
{\r
\r
currentURL = u;\r
\r
- InputSource* inputSource = nullptr;\r
-\r
- #if ! JUCE_IOS\r
- if (u.isLocalFile())\r
- {\r
- inputSource = new FileInputSource (u.getLocalFile());\r
- }\r
- else\r
- #endif\r
- {\r
- if (inputSource == nullptr)\r
- inputSource = new URLInputSource (u);\r
- }\r
-\r
- thumbnail.setSource (inputSource);\r
+ thumbnail.setSource (makeInputSource (u).release());\r
\r
if (notify)\r
sendChangeMessage();\r
transportSource.reset();\r
readerSource.reset();\r
\r
- AudioFormatReader* newReader = nullptr;\r
+ auto source = makeInputSource (fileToPlay);\r
\r
- #if ! JUCE_IOS\r
- if (fileToPlay.isLocalFile())\r
- {\r
- newReader = formatManager.createReaderFor (fileToPlay.getLocalFile());\r
- }\r
- else\r
- #endif\r
- {\r
- if (newReader == nullptr)\r
- newReader = formatManager.createReaderFor (fileToPlay.createInputStream (URL::InputStreamOptions (URL::ParameterHandling::inAddress)));\r
- }\r
+ if (source == nullptr)\r
+ return false;\r
\r
- reader.reset (newReader);\r
+ auto stream = rawToUniquePtr (source->createInputStream());\r
\r
- if (reader.get() != nullptr)\r
- {\r
- readerSource.reset (new AudioFormatReaderSource (reader.get(), false));\r
- readerSource->setLooping (loopState.getValue());\r
+ if (stream == nullptr)\r
+ return false;\r
\r
- init();\r
+ reader = rawToUniquePtr (formatManager.createReaderFor (std::move (stream)));\r
\r
- return true;\r
- }\r
+ if (reader == nullptr)\r
+ return false;\r
+\r
+ readerSource.reset (new AudioFormatReaderSource (reader.get(), false));\r
+ readerSource->setLooping (loopState.getValue());\r
+\r
+ init();\r
\r
- return false;\r
+ return true;\r
}\r
\r
void togglePlay()\r
{\r
if (fc.getURLResults().size() > 0)\r
{\r
- auto u = fc.getURLResult();\r
+ const auto u = fc.getURLResult();\r
\r
if (! audioFileReader.loadURL (u))\r
NativeMessageBox::showAsync (MessageBoxOptions()\r
}\r
};\r
\r
+inline std::unique_ptr<InputSource> makeInputSource (const URL& url)\r
+{\r
+ #if JUCE_ANDROID\r
+ if (auto doc = AndroidDocument::fromDocument (url))\r
+ return std::make_unique<AndroidDocumentInputSource> (doc);\r
+ #endif\r
+\r
+ #if ! JUCE_IOS\r
+ if (url.isLocalFile())\r
+ return std::make_unique<FileInputSource> (url.getLocalFile());\r
+ #endif\r
+\r
+ return std::make_unique<URLInputSource> (url);\r
+}\r
+\r
#endif // PIP_DEMO_UTILITIES_INCLUDED\r
\r
#include "../Assets/DemoUtilities.h"\r
\r
-inline std::unique_ptr<InputSource> makeInputSource (const URL& url)\r
-{\r
- #if JUCE_ANDROID\r
- if (auto doc = AndroidDocument::fromDocument (url))\r
- return std::make_unique<AndroidDocumentInputSource> (doc);\r
- #endif\r
-\r
- #if ! JUCE_IOS\r
- if (url.isLocalFile())\r
- return std::make_unique<FileInputSource> (url.getLocalFile());\r
- #endif\r
-\r
- return std::make_unique<URLInputSource> (url);\r
-}\r
-\r
-//==============================================================================\r
class DemoThumbnailComp : public Component,\r
public ChangeListener,\r
public FileDragAndDropTarget,\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/rmsl/juce/JuceActivity"]] [[-DJUCE_CONTENT_SHARING=1]] [[-DJUCE_ANDROID_GL_ES_VERSION_3_0=1]] [[-DJUCE_DEMO_RUNNER=1]] [[-DJUCE_UNIT_TESTS=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=7.0.3]] [[-DJUCE_APP_VERSION_HEX=0x70003]])
+add_definitions([[-DJUCE_ANDROID=1]] [[-DJUCE_ANDROID_API_VERSION=23]] [[-DJUCE_PUSH_NOTIFICATIONS=1]] [[-DJUCE_PUSH_NOTIFICATIONS_ACTIVITY="com/rmsl/juce/JuceActivity"]] [[-DJUCE_CONTENT_SHARING=1]] [[-DJUCE_ANDROID_GL_ES_VERSION_3_0=1]] [[-DJUCE_DEMO_RUNNER=1]] [[-DJUCE_UNIT_TESTS=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=7.0.4]] [[-DJUCE_APP_VERSION_HEX=0x70004]])
include_directories( AFTER
"../../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src"
enable_language(ASM)
if(JUCE_BUILD_CONFIGURATION MATCHES "DEBUG")
- add_definitions([[-DJUCE_DISPLAY_SPLASH_SCREEN=0]] [[-DJUCE_USE_DARK_SPLASH_SCREEN=1]] [[-DJUCE_PROJUCER_VERSION=0x70003]] [[-DJUCE_MODULE_AVAILABLE_juce_analytics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_box2d=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_cryptography=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_dsp=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_MODULE_AVAILABLE_juce_opengl=1]] [[-DJUCE_MODULE_AVAILABLE_juce_osc=1]] [[-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1]] [[-DJUCE_MODULE_AVAILABLE_juce_video=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_USE_MP3AUDIOFORMAT=1]] [[-DJUCE_PLUGINHOST_VST3=1]] [[-DJUCE_PLUGINHOST_LV2=1]] [[-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0]] [[-DJUCE_STRICT_REFCOUNTEDPOINTER=1]] [[-DJUCE_USE_CAMERA=1]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCE_DEMO_RUNNER=1]] [[-DJUCE_UNIT_TESTS=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=7.0.3]] [[-DJUCE_APP_VERSION_HEX=0x70003]] [[-DDEBUG=1]] [[-D_DEBUG=1]])
+ add_definitions([[-DJUCE_DISPLAY_SPLASH_SCREEN=0]] [[-DJUCE_USE_DARK_SPLASH_SCREEN=1]] [[-DJUCE_PROJUCER_VERSION=0x70004]] [[-DJUCE_MODULE_AVAILABLE_juce_analytics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_box2d=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_cryptography=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_dsp=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_MODULE_AVAILABLE_juce_opengl=1]] [[-DJUCE_MODULE_AVAILABLE_juce_osc=1]] [[-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1]] [[-DJUCE_MODULE_AVAILABLE_juce_video=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_USE_MP3AUDIOFORMAT=1]] [[-DJUCE_PLUGINHOST_VST3=1]] [[-DJUCE_PLUGINHOST_LV2=1]] [[-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0]] [[-DJUCE_STRICT_REFCOUNTEDPOINTER=1]] [[-DJUCE_USE_CAMERA=1]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCE_DEMO_RUNNER=1]] [[-DJUCE_UNIT_TESTS=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=7.0.4]] [[-DJUCE_APP_VERSION_HEX=0x70004]] [[-DDEBUG=1]] [[-D_DEBUG=1]])
elseif(JUCE_BUILD_CONFIGURATION MATCHES "RELEASE")
- add_definitions([[-DJUCE_DISPLAY_SPLASH_SCREEN=0]] [[-DJUCE_USE_DARK_SPLASH_SCREEN=1]] [[-DJUCE_PROJUCER_VERSION=0x70003]] [[-DJUCE_MODULE_AVAILABLE_juce_analytics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_box2d=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_cryptography=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_dsp=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_MODULE_AVAILABLE_juce_opengl=1]] [[-DJUCE_MODULE_AVAILABLE_juce_osc=1]] [[-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1]] [[-DJUCE_MODULE_AVAILABLE_juce_video=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_USE_MP3AUDIOFORMAT=1]] [[-DJUCE_PLUGINHOST_VST3=1]] [[-DJUCE_PLUGINHOST_LV2=1]] [[-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0]] [[-DJUCE_STRICT_REFCOUNTEDPOINTER=1]] [[-DJUCE_USE_CAMERA=1]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCE_DEMO_RUNNER=1]] [[-DJUCE_UNIT_TESTS=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=7.0.3]] [[-DJUCE_APP_VERSION_HEX=0x70003]] [[-DNDEBUG=1]])
+ add_definitions([[-DJUCE_DISPLAY_SPLASH_SCREEN=0]] [[-DJUCE_USE_DARK_SPLASH_SCREEN=1]] [[-DJUCE_PROJUCER_VERSION=0x70004]] [[-DJUCE_MODULE_AVAILABLE_juce_analytics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_box2d=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_cryptography=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_dsp=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_MODULE_AVAILABLE_juce_opengl=1]] [[-DJUCE_MODULE_AVAILABLE_juce_osc=1]] [[-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1]] [[-DJUCE_MODULE_AVAILABLE_juce_video=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_USE_MP3AUDIOFORMAT=1]] [[-DJUCE_PLUGINHOST_VST3=1]] [[-DJUCE_PLUGINHOST_LV2=1]] [[-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0]] [[-DJUCE_STRICT_REFCOUNTEDPOINTER=1]] [[-DJUCE_USE_CAMERA=1]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCE_DEMO_RUNNER=1]] [[-DJUCE_UNIT_TESTS=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=7.0.4]] [[-DJUCE_APP_VERSION_HEX=0x70004]] [[-DNDEBUG=1]])
else()
message( FATAL_ERROR "No matching build-configuration found." )
endif()
"../../../../../modules/juce_analytics/destinations/juce_ThreadedAnalyticsDestination.h"
"../../../../../modules/juce_analytics/juce_analytics.cpp"
"../../../../../modules/juce_analytics/juce_analytics.h"
+ "../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.cpp"
"../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.h"
"../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"
"../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConverters.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDispatcher.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.h"
+ "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.cpp"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPMidi1ToBytestreamTranslator.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPMidi1ToMidi2DefaultTranslator.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_MemoryAudioSource.h"
"../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.h"
+ "../../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.h"
"../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h"
"../../../../../modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.h"
"../../../../../modules/juce_audio_processors/juce_audio_processors.cpp"
"../../../../../modules/juce_audio_processors/juce_audio_processors.mm"
"../../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"
"../../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"
"../../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"
+ "../../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.cpp"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoManager.cpp"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoManager.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_UIAValueProvider.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_UIAWindowProvider.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_WindowsUIAWrapper.h"
+ "../../../../../modules/juce_gui_basics/native/x11/juce_linux_ScopedWindowAssociation.h"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_DragAndDrop.cpp"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.cpp"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.h"
"../../../../../modules/juce_gui_extra/misc/juce_SplashScreen.h"
"../../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp"
"../../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"
+ "../../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.cpp"
"../../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"
"../../../../../modules/juce_gui_extra/native/juce_android_PushNotifications.cpp"
"../../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"
"../../../../../modules/juce_analytics/destinations/juce_ThreadedAnalyticsDestination.h"
"../../../../../modules/juce_analytics/juce_analytics.cpp"
"../../../../../modules/juce_analytics/juce_analytics.h"
+ "../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.cpp"
"../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.h"
"../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"
"../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConverters.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDispatcher.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.h"
+ "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.cpp"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPMidi1ToBytestreamTranslator.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPMidi1ToMidi2DefaultTranslator.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_MemoryAudioSource.h"
"../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.h"
+ "../../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.h"
"../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h"
"../../../../../modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.h"
"../../../../../modules/juce_audio_processors/juce_audio_processors.cpp"
"../../../../../modules/juce_audio_processors/juce_audio_processors.mm"
"../../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"
"../../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"
"../../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"
+ "../../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.cpp"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoManager.cpp"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoManager.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_UIAValueProvider.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_UIAWindowProvider.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_WindowsUIAWrapper.h"
+ "../../../../../modules/juce_gui_basics/native/x11/juce_linux_ScopedWindowAssociation.h"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_DragAndDrop.cpp"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.cpp"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.h"
"../../../../../modules/juce_gui_extra/misc/juce_SplashScreen.h"
"../../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp"
"../../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"
+ "../../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.cpp"
"../../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"
"../../../../../modules/juce_gui_extra/native/juce_android_PushNotifications.cpp"
"../../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"
<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="7.0.3">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="7.0.4">
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true"
android:xlargeScreens="true"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/>
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>
+ <uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
+ <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
+ <uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
- <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
- <uses-permission android:name="android.permission.BLUETOOTH"/>
+ <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/>
+ <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30"/>
+ <uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
+ <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE"/>
+ <uses-permission android:name="android.permission.BLUETOOTH_SCAN"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-feature android:glEsVersion="0x00030000" android:required="true"/>
<application android:label="@string/app_name" android:name="com.rmsl.juce.JuceApp" android:icon="@drawable/icon" android:hardwareAccelerated="false">
- <activity android:name="com.rmsl.juce.JuceActivity" android:configChanges="keyboardHidden|orientation|screenSize"
+ <activity android:name="com.rmsl.juce.JuceActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|navigation"
android:screenOrientation="unspecified" android:launchMode="singleTask" android:hardwareAccelerated="true"
android:exported="true">
<intent-filter>
struct DSPDemoParameterBase : public ChangeBroadcaster\r
{\r
DSPDemoParameterBase (const String& labelName) : name (labelName) {}\r
- virtual ~DSPDemoParameterBase() {}\r
+ virtual ~DSPDemoParameterBase() = default;\r
\r
virtual Component* getComponent() = 0;\r
\r
loadURL (u);\r
}\r
\r
- URL getCurrentURL() { return currentURL; }\r
+ URL getCurrentURL() const { return currentURL; }\r
\r
void setTransportSource (AudioTransportSource* newSource)\r
{\r
\r
currentURL = u;\r
\r
- InputSource* inputSource = nullptr;\r
-\r
- #if ! JUCE_IOS\r
- if (u.isLocalFile())\r
- {\r
- inputSource = new FileInputSource (u.getLocalFile());\r
- }\r
- else\r
- #endif\r
- {\r
- if (inputSource == nullptr)\r
- inputSource = new URLInputSource (u);\r
- }\r
-\r
- thumbnail.setSource (inputSource);\r
+ thumbnail.setSource (makeInputSource (u).release());\r
\r
if (notify)\r
sendChangeMessage();\r
transportSource.reset();\r
readerSource.reset();\r
\r
- AudioFormatReader* newReader = nullptr;\r
+ auto source = makeInputSource (fileToPlay);\r
\r
- #if ! JUCE_IOS\r
- if (fileToPlay.isLocalFile())\r
- {\r
- newReader = formatManager.createReaderFor (fileToPlay.getLocalFile());\r
- }\r
- else\r
- #endif\r
- {\r
- if (newReader == nullptr)\r
- newReader = formatManager.createReaderFor (fileToPlay.createInputStream (URL::InputStreamOptions (URL::ParameterHandling::inAddress)));\r
- }\r
+ if (source == nullptr)\r
+ return false;\r
\r
- reader.reset (newReader);\r
+ auto stream = rawToUniquePtr (source->createInputStream());\r
\r
- if (reader.get() != nullptr)\r
- {\r
- readerSource.reset (new AudioFormatReaderSource (reader.get(), false));\r
- readerSource->setLooping (loopState.getValue());\r
+ if (stream == nullptr)\r
+ return false;\r
\r
- init();\r
+ reader = rawToUniquePtr (formatManager.createReaderFor (std::move (stream)));\r
\r
- return true;\r
- }\r
+ if (reader == nullptr)\r
+ return false;\r
+\r
+ readerSource.reset (new AudioFormatReaderSource (reader.get(), false));\r
+ readerSource->setLooping (loopState.getValue());\r
+\r
+ init();\r
\r
- return false;\r
+ return true;\r
}\r
\r
void togglePlay()\r
{\r
if (fc.getURLResults().size() > 0)\r
{\r
- auto u = fc.getURLResult();\r
+ const auto u = fc.getURLResult();\r
\r
if (! audioFileReader.loadURL (u))\r
NativeMessageBox::showAsync (MessageBoxOptions()\r
}\r
};\r
\r
+inline std::unique_ptr<InputSource> makeInputSource (const URL& url)\r
+{\r
+ #if JUCE_ANDROID\r
+ if (auto doc = AndroidDocument::fromDocument (url))\r
+ return std::make_unique<AndroidDocumentInputSource> (doc);\r
+ #endif\r
+\r
+ #if ! JUCE_IOS\r
+ if (url.isLocalFile())\r
+ return std::make_unique<FileInputSource> (url.getLocalFile());\r
+ #endif\r
+\r
+ return std::make_unique<URLInputSource> (url);\r
+}\r
+\r
#endif // PIP_DEMO_UTILITIES_INCLUDED\r
TARGET_ARCH :=
endif
- JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70003" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_box2d=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_USE_MP3AUDIOFORMAT=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_USE_CAMERA=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=7.0.3" "-DJUCE_APP_VERSION_HEX=0x70003" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
+ JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70004" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_box2d=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_USE_MP3AUDIOFORMAT=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_USE_CAMERA=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=7.0.4" "-DJUCE_APP_VERSION_HEX=0x70004" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -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_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := DemoRunner
TARGET_ARCH :=
endif
- JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70003" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_box2d=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_USE_MP3AUDIOFORMAT=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_USE_CAMERA=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=7.0.3" "-DJUCE_APP_VERSION_HEX=0x70003" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
+ JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70004" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_box2d=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_USE_MP3AUDIOFORMAT=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_USE_CAMERA=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=7.0.4" "-DJUCE_APP_VERSION_HEX=0x70004" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -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_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := DemoRunner
"NDEBUG=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_analytics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_DEMO_RUNNER=1",
"JUCE_UNIT_TESTS=1",
"JUCER_XCODE_MAC_F6D2F4CF=1",
- "JUCE_APP_VERSION=7.0.3",
- "JUCE_APP_VERSION_HEX=0x70003",
+ "JUCE_APP_VERSION=7.0.4",
+ "JUCE_APP_VERSION_HEX=0x70004",
"JucePlugin_Build_VST=0",
"JucePlugin_Build_VST3=0",
"JucePlugin_Build_AU=0",
"DEBUG=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_analytics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_DEMO_RUNNER=1",
"JUCE_UNIT_TESTS=1",
"JUCER_XCODE_MAC_F6D2F4CF=1",
- "JUCE_APP_VERSION=7.0.3",
- "JUCE_APP_VERSION_HEX=0x70003",
+ "JUCE_APP_VERSION=7.0.4",
+ "JUCE_APP_VERSION_HEX=0x70004",
"JucePlugin_Build_VST=0",
"JucePlugin_Build_VST3=0",
"JucePlugin_Build_AU=0",
<key>CFBundleSignature</key>\r
<string>????</string>\r
<key>CFBundleShortVersionString</key>\r
- <string>7.0.3</string>\r
+ <string>7.0.4</string>\r
<key>CFBundleVersion</key>\r
- <string>7.0.3</string>\r
+ <string>7.0.4</string>\r
<key>NSHumanReadableCopyright</key>\r
<string>Copyright (c) 2020 - Raw Material Software Limited</string>\r
<key>NSHighResolutionCapable</key>\r
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\DemoRunner.exe</OutputFile>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\DemoRunner.exe</OutputFile>\r
<ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAValueProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAWindowProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>\r
<ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp">\r
<Filter>JUCE Modules\juce_analytics</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\buffers</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<Filter>JUCE Modules\juce_audio_processors</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<Filter>JUCE Modules\juce_data_structures\app_properties</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\native</Filter>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\accessibility</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h">\r
+ <Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
</ClInclude>\r
#include <windows.h>\r
\r
VS_VERSION_INFO VERSIONINFO\r
-FILEVERSION 7,0,3,0\r
+FILEVERSION 7,0,4,0\r
BEGIN\r
BLOCK "StringFileInfo"\r
BEGIN\r
VALUE "CompanyName", "Raw Material Software Limited\0"\r
VALUE "LegalCopyright", "Copyright (c) 2020 - Raw Material Software Limited\0"\r
VALUE "FileDescription", "DemoRunner\0"\r
- VALUE "FileVersion", "7.0.3\0"\r
+ VALUE "FileVersion", "7.0.4\0"\r
VALUE "ProductName", "DemoRunner\0"\r
- VALUE "ProductVersion", "7.0.3\0"\r
+ VALUE "ProductVersion", "7.0.4\0"\r
END\r
END\r
\r
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\DemoRunner.exe</OutputFile>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\DemoRunner.exe</OutputFile>\r
<ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAValueProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAWindowProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>\r
<ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp">\r
<Filter>JUCE Modules\juce_analytics</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\buffers</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<Filter>JUCE Modules\juce_audio_processors</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<Filter>JUCE Modules\juce_data_structures\app_properties</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\native</Filter>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\accessibility</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h">\r
+ <Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
</ClInclude>\r
#include <windows.h>\r
\r
VS_VERSION_INFO VERSIONINFO\r
-FILEVERSION 7,0,3,0\r
+FILEVERSION 7,0,4,0\r
BEGIN\r
BLOCK "StringFileInfo"\r
BEGIN\r
VALUE "CompanyName", "Raw Material Software Limited\0"\r
VALUE "LegalCopyright", "Copyright (c) 2020 - Raw Material Software Limited\0"\r
VALUE "FileDescription", "DemoRunner\0"\r
- VALUE "FileVersion", "7.0.3\0"\r
+ VALUE "FileVersion", "7.0.4\0"\r
VALUE "ProductName", "DemoRunner\0"\r
- VALUE "ProductVersion", "7.0.3\0"\r
+ VALUE "ProductVersion", "7.0.4\0"\r
END\r
END\r
\r
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\DemoRunner.exe</OutputFile>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\DemoRunner.exe</OutputFile>\r
<ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAValueProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAWindowProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>\r
<ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp">\r
<Filter>JUCE Modules\juce_analytics</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\buffers</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<Filter>JUCE Modules\juce_audio_processors</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<Filter>JUCE Modules\juce_data_structures\app_properties</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\native</Filter>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\accessibility</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h">\r
+ <Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
</ClInclude>\r
#include <windows.h>\r
\r
VS_VERSION_INFO VERSIONINFO\r
-FILEVERSION 7,0,3,0\r
+FILEVERSION 7,0,4,0\r
BEGIN\r
BLOCK "StringFileInfo"\r
BEGIN\r
VALUE "CompanyName", "Raw Material Software Limited\0"\r
VALUE "LegalCopyright", "Copyright (c) 2020 - Raw Material Software Limited\0"\r
VALUE "FileDescription", "DemoRunner\0"\r
- VALUE "FileVersion", "7.0.3\0"\r
+ VALUE "FileVersion", "7.0.4\0"\r
VALUE "ProductName", "DemoRunner\0"\r
- VALUE "ProductVersion", "7.0.3\0"\r
+ VALUE "ProductVersion", "7.0.4\0"\r
END\r
END\r
\r
"JUCE_CONTENT_SHARING=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_analytics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_DEMO_RUNNER=1",
"JUCE_UNIT_TESTS=1",
"JUCER_XCODE_IPHONE_5BC26AE3=1",
- "JUCE_APP_VERSION=7.0.3",
- "JUCE_APP_VERSION_HEX=0x70003",
+ "JUCE_APP_VERSION=7.0.4",
+ "JUCE_APP_VERSION_HEX=0x70004",
"JucePlugin_Build_VST=0",
"JucePlugin_Build_VST3=0",
"JucePlugin_Build_AU=0",
"JUCE_CONTENT_SHARING=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_analytics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_DEMO_RUNNER=1",
"JUCE_UNIT_TESTS=1",
"JUCER_XCODE_IPHONE_5BC26AE3=1",
- "JUCE_APP_VERSION=7.0.3",
- "JUCE_APP_VERSION_HEX=0x70003",
+ "JUCE_APP_VERSION=7.0.4",
+ "JUCE_APP_VERSION_HEX=0x70004",
"JucePlugin_Build_VST=0",
"JucePlugin_Build_VST3=0",
"JucePlugin_Build_AU=0",
<key>CFBundleSignature</key>\r
<string>????</string>\r
<key>CFBundleShortVersionString</key>\r
- <string>7.0.3</string>\r
+ <string>7.0.4</string>\r
<key>CFBundleVersion</key>\r
- <string>7.0.3</string>\r
+ <string>7.0.4</string>\r
<key>NSHumanReadableCopyright</key>\r
<string>Copyright (c) 2020 - Raw Material Software Limited</string>\r
<key>NSHighResolutionCapable</key>\r
<?xml version="1.0" encoding="UTF-8"?>\r
\r
<JUCERPROJECT name="DemoRunner" projectType="guiapp" defines="JUCE_DEMO_RUNNER=1 JUCE_UNIT_TESTS=1"\r
- bundleIdentifier="com.rmsl.jucedemorunner" version="7.0.3" companyName="Raw Material Software Limited"\r
+ bundleIdentifier="com.rmsl.jucedemorunner" version="7.0.4" companyName="Raw Material Software Limited"\r
companyCopyright="Copyright (c) 2020 - Raw Material Software Limited"\r
companyWebsite="https://www.juce.com/" companyEmail="info@juce.com"\r
id="yj7xMM" reportAppUsage="0" useAppConfig="0" addUsingNamespaceToJuceHeader="1"\r
</MODULEPATHS>\r
</LINUX_MAKE>\r
<ANDROIDSTUDIO targetFolder="Builds/Android" androidMinimumSDK="23" microphonePermissionNeeded="1"\r
- androidBluetoothNeeded="1" androidExternalReadNeeded="1" androidExternalWriteNeeded="1"\r
- androidEnableContentSharing="1" androidExtraAssetsFolder="../Assets"\r
- smallIcon="YyqWd2" bigIcon="YyqWd2" cameraPermissionNeeded="1">\r
+ androidExternalWriteNeeded="1" androidEnableContentSharing="1"\r
+ androidExtraAssetsFolder="../Assets" smallIcon="YyqWd2" bigIcon="YyqWd2"\r
+ cameraPermissionNeeded="1" androidReadMediaAudioPermission="1"\r
+ androidReadMediaImagesPermission="1" androidReadMediaVideoPermission="1"\r
+ androidBluetoothScanNeeded="1" androidBluetoothAdvertiseNeeded="1"\r
+ androidBluetoothConnectNeeded="1">\r
<CONFIGURATIONS>\r
<CONFIGURATION isDebug="1" name="Debug" recommendedWarnings="LLVM"/>\r
<CONFIGURATION isDebug="0" name="Release" recommendedWarnings="LLVM"/>\r
{\r
const char* const projectName = "DemoRunner";\r
const char* const companyName = "Raw Material Software Limited";\r
- const char* const versionString = "7.0.3";\r
- const int versionNumber = 0x70003;\r
+ const char* const versionString = "7.0.4";\r
+ const int versionNumber = 0x70004;\r
}\r
#endif\r
attributes.reset();\r
uniforms .reset();\r
\r
- shader.reset (newShader.release());\r
+ shader = std::move (newShader);\r
shader->use();\r
\r
shape .reset (new Shape());\r
SpinLock processingFlag;\r
};\r
\r
+static void crossfade (const float* sourceA,\r
+ const float* sourceB,\r
+ float aProportionAtStart,\r
+ float aProportionAtFinish,\r
+ float* destinationBuffer,\r
+ int numSamples)\r
+{\r
+ AudioBuffer<float> destination { &destinationBuffer, 1, numSamples };\r
+ destination.copyFromWithRamp (0, 0, sourceA, numSamples, aProportionAtStart, aProportionAtFinish);\r
+ destination.addFromWithRamp (0, 0, sourceB, numSamples, 1.0f - aProportionAtStart, 1.0f - aProportionAtFinish);\r
+}\r
+\r
class Looper\r
{\r
public:\r
}\r
\r
const auto numChannelsToCopy = std::min (inputBuffer->getNumChannels(), buffer.getNumChannels());\r
+ const auto actualCrossfadeLengthSamples = std::min (loopRange.getLength() / 2, (int64) desiredCrossfadeLengthSamples);\r
\r
for (auto samplesCopied = 0; samplesCopied < buffer.getNumSamples();)\r
{\r
- const auto numSamplesToCopy =\r
- std::min (buffer.getNumSamples() - samplesCopied, (int) (loopRange.getEnd() - pos));\r
+ const auto [needsCrossfade, samplePosOfNextCrossfadeTransition] = [&]() -> std::pair<bool, int64>\r
+ {\r
+ if (const auto endOfFadeIn = loopRange.getStart() + actualCrossfadeLengthSamples; pos < endOfFadeIn)\r
+ return { true, endOfFadeIn };\r
+\r
+ return { false, loopRange.getEnd() - actualCrossfadeLengthSamples };\r
+ }();\r
+\r
+ const auto samplesToNextCrossfadeTransition = samplePosOfNextCrossfadeTransition - pos;\r
+ const auto numSamplesToCopy = std::min (buffer.getNumSamples() - samplesCopied,\r
+ (int) samplesToNextCrossfadeTransition);\r
+\r
+ const auto getFadeInGainAtPos = [this, actualCrossfadeLengthSamples] (auto p)\r
+ {\r
+ return jmap ((float) p, (float) loopRange.getStart(), (float) loopRange.getStart() + (float) actualCrossfadeLengthSamples - 1.0f, 0.0f, 1.0f);\r
+ };\r
\r
for (int i = 0; i < numChannelsToCopy; ++i)\r
{\r
- buffer.copyFrom (i, samplesCopied, *inputBuffer, i, (int) pos, numSamplesToCopy);\r
+ if (needsCrossfade)\r
+ {\r
+ const auto overlapStart = loopRange.getEnd() - actualCrossfadeLengthSamples\r
+ + (pos - loopRange.getStart());\r
+\r
+ crossfade (inputBuffer->getReadPointer (i, (int) pos),\r
+ inputBuffer->getReadPointer (i, (int) overlapStart),\r
+ getFadeInGainAtPos (pos),\r
+ getFadeInGainAtPos (pos + numSamplesToCopy),\r
+ buffer.getWritePointer (i, samplesCopied),\r
+ numSamplesToCopy);\r
+ }\r
+ else\r
+ {\r
+ buffer.copyFrom (i, samplesCopied, *inputBuffer, i, (int) pos, numSamplesToCopy);\r
+ }\r
}\r
\r
samplesCopied += numSamplesToCopy;\r
pos += numSamplesToCopy;\r
\r
- jassert (pos <= loopRange.getEnd());\r
+ jassert (pos <= loopRange.getEnd() - actualCrossfadeLengthSamples);\r
\r
- if (pos == loopRange.getEnd())\r
+ if (pos == loopRange.getEnd() - actualCrossfadeLengthSamples)\r
pos = loopRange.getStart();\r
}\r
}\r
\r
private:\r
+ static constexpr int desiredCrossfadeLengthSamples = 50;\r
+\r
const AudioBuffer<float>* inputBuffer;\r
Range<int64> loopRange;\r
int64 pos;\r
if (! locked)\r
return true;\r
\r
+ const auto fadeOutIfNecessary = [this, &buffer]\r
+ {\r
+ if (std::exchange (wasPreviewing, false))\r
+ {\r
+ previewLooper.writeInto (buffer);\r
+ const auto fadeOutStart = std::max (0, buffer.getNumSamples() - 50);\r
+ buffer.applyGainRamp (fadeOutStart, buffer.getNumSamples() - fadeOutStart, 1.0f, 0.0f);\r
+ }\r
+ };\r
+\r
if (positionInfo.getIsPlaying())\r
+ {\r
+ fadeOutIfNecessary();\r
return true;\r
+ }\r
\r
if (const auto previewedRegion = previewState->previewedRegion.load())\r
{\r
else\r
{\r
previewLooper.writeInto (buffer);\r
+\r
+ if (! std::exchange (wasPreviewing, true))\r
+ {\r
+ const auto fadeInLength = std::min (50, buffer.getNumSamples());\r
+ buffer.applyGainRamp (0, fadeInLength, 0.0f, 1.0f);\r
+ }\r
}\r
}\r
}\r
+ else\r
+ {\r
+ fadeOutIfNecessary();\r
+ }\r
\r
return true;\r
});\r
double lastPreviewTime = 0.0;\r
ARAPlaybackRegion* lastPlaybackRegion = nullptr;\r
bool lastPreviewDimmed = false;\r
+ bool wasPreviewing = false;\r
std::unique_ptr<AudioBuffer<float>> previewBuffer;\r
Looper previewLooper;\r
\r
const auto end = chordsReader.end();\r
auto it = begin;\r
\r
- while (it->position <= quarterPosition && it != end)\r
+ while (it != end && it->position <= quarterPosition)\r
++it;\r
\r
if (it != begin)\r
selectMusicalContext (musicalContext);\r
}\r
\r
- void willDestroyMusicalContext (ARAMusicalContext*) override\r
+ void willDestroyMusicalContext (ARAMusicalContext* musicalContext) override\r
{\r
- selectMusicalContext (nullptr);\r
+ if (selectedMusicalContext == musicalContext)\r
+ selectMusicalContext (nullptr);\r
}\r
\r
void didReorderRegionSequencesInDocument (ARADocument*) override\r
if (newSelectedMusicalContext != selectedMusicalContext)\r
selectMusicalContext (newSelectedMusicalContext);\r
\r
- // If no context is used yet and the selection does not yield a new one, the DocumentView\r
- // uses the first musical context in the document.\r
-\r
if (const auto timeRange = viewSelection.getTimeRange())\r
overlay.setSelectedTimeRange (*timeRange);\r
else\r
enable_language(ASM)
if(JUCE_BUILD_CONFIGURATION MATCHES "DEBUG")
- add_definitions([[-DJUCE_DISPLAY_SPLASH_SCREEN=0]] [[-DJUCE_USE_DARK_SPLASH_SCREEN=1]] [[-DJUCE_PROJUCER_VERSION=0x70003]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=1.0.0]] [[-DJUCE_APP_VERSION_HEX=0x10000]] [[-DDEBUG=1]] [[-D_DEBUG=1]])
+ add_definitions([[-DJUCE_DISPLAY_SPLASH_SCREEN=0]] [[-DJUCE_USE_DARK_SPLASH_SCREEN=1]] [[-DJUCE_PROJUCER_VERSION=0x70004]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=1.0.0]] [[-DJUCE_APP_VERSION_HEX=0x10000]] [[-DDEBUG=1]] [[-D_DEBUG=1]])
elseif(JUCE_BUILD_CONFIGURATION MATCHES "RELEASE")
- add_definitions([[-DJUCE_DISPLAY_SPLASH_SCREEN=0]] [[-DJUCE_USE_DARK_SPLASH_SCREEN=1]] [[-DJUCE_PROJUCER_VERSION=0x70003]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=1.0.0]] [[-DJUCE_APP_VERSION_HEX=0x10000]] [[-DNDEBUG=1]])
+ add_definitions([[-DJUCE_DISPLAY_SPLASH_SCREEN=0]] [[-DJUCE_USE_DARK_SPLASH_SCREEN=1]] [[-DJUCE_PROJUCER_VERSION=0x70004]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=1.0.0]] [[-DJUCE_APP_VERSION_HEX=0x10000]] [[-DNDEBUG=1]])
else()
message( FATAL_ERROR "No matching build-configuration found." )
endif()
"../../../Source/Main.cpp"
"../../../Source/MainComponent.h"
+ "../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.cpp"
"../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.h"
"../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"
"../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConverters.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDispatcher.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.h"
+ "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.cpp"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPMidi1ToBytestreamTranslator.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPMidi1ToMidi2DefaultTranslator.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_MemoryAudioSource.h"
"../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.h"
+ "../../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.h"
"../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h"
"../../../../../modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.h"
"../../../../../modules/juce_audio_processors/juce_audio_processors.cpp"
"../../../../../modules/juce_audio_processors/juce_audio_processors.mm"
"../../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"
"../../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"
"../../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"
+ "../../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.cpp"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoManager.cpp"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoManager.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_UIAValueProvider.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_UIAWindowProvider.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_WindowsUIAWrapper.h"
+ "../../../../../modules/juce_gui_basics/native/x11/juce_linux_ScopedWindowAssociation.h"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_DragAndDrop.cpp"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.cpp"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.h"
"../../../../../modules/juce_gui_extra/misc/juce_SplashScreen.h"
"../../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp"
"../../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"
+ "../../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.cpp"
"../../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"
"../../../../../modules/juce_gui_extra/native/juce_android_PushNotifications.cpp"
"../../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"
set_source_files_properties(
"../../../Source/MainComponent.h"
+ "../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.cpp"
"../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.h"
"../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"
"../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConverters.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDispatcher.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.h"
+ "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.cpp"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPMidi1ToBytestreamTranslator.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPMidi1ToMidi2DefaultTranslator.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_MemoryAudioSource.h"
"../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.h"
+ "../../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.h"
"../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h"
"../../../../../modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.h"
"../../../../../modules/juce_audio_processors/juce_audio_processors.cpp"
"../../../../../modules/juce_audio_processors/juce_audio_processors.mm"
"../../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"
"../../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"
"../../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"
+ "../../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.cpp"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoManager.cpp"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoManager.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_UIAValueProvider.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_UIAWindowProvider.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_WindowsUIAWrapper.h"
+ "../../../../../modules/juce_gui_basics/native/x11/juce_linux_ScopedWindowAssociation.h"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_DragAndDrop.cpp"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.cpp"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.h"
"../../../../../modules/juce_gui_extra/misc/juce_SplashScreen.h"
"../../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp"
"../../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"
+ "../../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.cpp"
"../../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"
"../../../../../modules/juce_gui_extra/native/juce_android_PushNotifications.cpp"
"../../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true"
android:xlargeScreens="true"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/>
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
- <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
- <uses-permission android:name="android.permission.BLUETOOTH"/>
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>
+ <uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
+ <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
+ <uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<application android:label="@string/app_name" android:name="com.rmsl.juce.JuceApp" android:hardwareAccelerated="false">
- <activity android:name="com.rmsl.juce.JuceActivity" android:configChanges="keyboardHidden|orientation|screenSize"
+ <activity android:name="com.rmsl.juce.JuceActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|navigation"
android:screenOrientation="unspecified" android:launchMode="singleTask" android:hardwareAccelerated="true"
android:exported="true">
<intent-filter>
TARGET_ARCH :=
endif
- JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70003" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
+ JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70004" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl 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_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := AudioPerformanceTest
TARGET_ARCH :=
endif
- JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70003" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
+ JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70004" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl 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_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := AudioPerformanceTest
"DEBUG=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
"NDEBUG=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\AudioPerformanceTest.exe</OutputFile>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\AudioPerformanceTest.exe</OutputFile>\r
</ItemDefinitionGroup>\r
<ItemGroup>\r
<ClCompile Include="..\..\Source\Main.cpp"/>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAValueProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAWindowProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>\r
<ClCompile Include="..\..\Source\Main.cpp">\r
<Filter>AudioPerformanceTest\Source</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\buffers</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<Filter>JUCE Modules\juce_audio_processors</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<Filter>JUCE Modules\juce_data_structures\app_properties</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\native</Filter>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\accessibility</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h">\r
+ <Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
</ClInclude>\r
"JUCE_CONTENT_SHARING=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
"JUCE_CONTENT_SHARING=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
: DocumentWindow (name, Colours::lightgrey, DocumentWindow::allButtons)\r
{\r
setUsingNativeTitleBar (true);\r
- setContentOwned (createMainContentComponent(), true);\r
+ setContentOwned (new MainContentComponent(), true);\r
setResizable (false, false);\r
\r
#if JUCE_IOS || JUCE_ANDROID\r
//==============================================================================\r
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainContentComponent)\r
};\r
-\r
-\r
-// (This function is called by the app startup code to create our main component)\r
-Component* createMainContentComponent() { return new MainContentComponent(); }\r
</MODULEPATHS>\r
</XCODE_IPHONE>\r
<ANDROIDSTUDIO targetFolder="Builds/Android" androidMinimumSDK="23" androidInternetNeeded="1"\r
- microphonePermissionNeeded="1" androidBluetoothNeeded="1" smallIcon="c97aUr"\r
- bigIcon="c97aUr" androidExtraAssetsFolder="../../examples/Assets">\r
+ microphonePermissionNeeded="1" smallIcon="c97aUr" bigIcon="c97aUr"\r
+ androidExtraAssetsFolder="../../examples/Assets" androidBluetoothScanNeeded="1"\r
+ androidBluetoothAdvertiseNeeded="1" androidBluetoothConnectNeeded="1">\r
<CONFIGURATIONS>\r
<CONFIGURATION name="Debug" isDebug="1" optimisation="1" linkTimeOptimisation="0"\r
targetName="Plugin Host" recommendedWarnings="LLVM"/>\r
enable_language(ASM)
if(JUCE_BUILD_CONFIGURATION MATCHES "DEBUG")
- add_definitions([[-DJUCE_DISPLAY_SPLASH_SCREEN=0]] [[-DJUCE_USE_DARK_SPLASH_SCREEN=1]] [[-DJUCE_PROJUCER_VERSION=0x70003]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_cryptography=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_dsp=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_MODULE_AVAILABLE_juce_opengl=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_WASAPI=1]] [[-DJUCE_DIRECTSOUND=1]] [[-DJUCE_ALSA=1]] [[-DJUCE_USE_FLAC=0]] [[-DJUCE_USE_OGGVORBIS=1]] [[-DJUCE_PLUGINHOST_VST3=1]] [[-DJUCE_PLUGINHOST_AU=1]] [[-DJUCE_PLUGINHOST_LADSPA=1]] [[-DJUCE_PLUGINHOST_LV2=1]] [[-DJUCE_USE_CDREADER=0]] [[-DJUCE_USE_CDBURNER=0]] [[-DJUCE_WEB_BROWSER=0]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=1.0.0]] [[-DJUCE_APP_VERSION_HEX=0x10000]] [[-DDEBUG=1]] [[-D_DEBUG=1]])
+ add_definitions([[-DJUCE_DISPLAY_SPLASH_SCREEN=0]] [[-DJUCE_USE_DARK_SPLASH_SCREEN=1]] [[-DJUCE_PROJUCER_VERSION=0x70004]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_cryptography=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_dsp=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_MODULE_AVAILABLE_juce_opengl=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_WASAPI=1]] [[-DJUCE_DIRECTSOUND=1]] [[-DJUCE_ALSA=1]] [[-DJUCE_USE_FLAC=0]] [[-DJUCE_USE_OGGVORBIS=1]] [[-DJUCE_PLUGINHOST_VST3=1]] [[-DJUCE_PLUGINHOST_AU=1]] [[-DJUCE_PLUGINHOST_LADSPA=1]] [[-DJUCE_PLUGINHOST_LV2=1]] [[-DJUCE_USE_CDREADER=0]] [[-DJUCE_USE_CDBURNER=0]] [[-DJUCE_WEB_BROWSER=0]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=1.0.0]] [[-DJUCE_APP_VERSION_HEX=0x10000]] [[-DDEBUG=1]] [[-D_DEBUG=1]])
elseif(JUCE_BUILD_CONFIGURATION MATCHES "RELEASE")
- add_definitions([[-DJUCE_DISPLAY_SPLASH_SCREEN=0]] [[-DJUCE_USE_DARK_SPLASH_SCREEN=1]] [[-DJUCE_PROJUCER_VERSION=0x70003]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_cryptography=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_dsp=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_MODULE_AVAILABLE_juce_opengl=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_WASAPI=1]] [[-DJUCE_DIRECTSOUND=1]] [[-DJUCE_ALSA=1]] [[-DJUCE_USE_FLAC=0]] [[-DJUCE_USE_OGGVORBIS=1]] [[-DJUCE_PLUGINHOST_VST3=1]] [[-DJUCE_PLUGINHOST_AU=1]] [[-DJUCE_PLUGINHOST_LADSPA=1]] [[-DJUCE_PLUGINHOST_LV2=1]] [[-DJUCE_USE_CDREADER=0]] [[-DJUCE_USE_CDBURNER=0]] [[-DJUCE_WEB_BROWSER=0]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=1.0.0]] [[-DJUCE_APP_VERSION_HEX=0x10000]] [[-DNDEBUG=1]])
+ add_definitions([[-DJUCE_DISPLAY_SPLASH_SCREEN=0]] [[-DJUCE_USE_DARK_SPLASH_SCREEN=1]] [[-DJUCE_PROJUCER_VERSION=0x70004]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_cryptography=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_dsp=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_MODULE_AVAILABLE_juce_opengl=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_WASAPI=1]] [[-DJUCE_DIRECTSOUND=1]] [[-DJUCE_ALSA=1]] [[-DJUCE_USE_FLAC=0]] [[-DJUCE_USE_OGGVORBIS=1]] [[-DJUCE_PLUGINHOST_VST3=1]] [[-DJUCE_PLUGINHOST_AU=1]] [[-DJUCE_PLUGINHOST_LADSPA=1]] [[-DJUCE_PLUGINHOST_LV2=1]] [[-DJUCE_USE_CDREADER=0]] [[-DJUCE_USE_CDBURNER=0]] [[-DJUCE_WEB_BROWSER=0]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=1.0.0]] [[-DJUCE_APP_VERSION_HEX=0x10000]] [[-DNDEBUG=1]])
if(NOT (ANDROID_ABI STREQUAL "mips" OR ANDROID_ABI STREQUAL "mips64"))
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -flto")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -flto")
"../../../../../examples/Assets/proaudio.path"
"../../../../../examples/Assets/reverb_ir.wav"
"../../../../../examples/Assets/singing.ogg"
+ "../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.cpp"
"../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.h"
"../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"
"../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConverters.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDispatcher.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.h"
+ "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.cpp"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPMidi1ToBytestreamTranslator.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPMidi1ToMidi2DefaultTranslator.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_MemoryAudioSource.h"
"../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.h"
+ "../../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.h"
"../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h"
"../../../../../modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.h"
"../../../../../modules/juce_audio_processors/juce_audio_processors.cpp"
"../../../../../modules/juce_audio_processors/juce_audio_processors.mm"
"../../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"
"../../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"
"../../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"
+ "../../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.cpp"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoManager.cpp"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoManager.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_UIAValueProvider.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_UIAWindowProvider.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_WindowsUIAWrapper.h"
+ "../../../../../modules/juce_gui_basics/native/x11/juce_linux_ScopedWindowAssociation.h"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_DragAndDrop.cpp"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.cpp"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.h"
"../../../../../modules/juce_gui_extra/misc/juce_SplashScreen.h"
"../../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp"
"../../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"
+ "../../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.cpp"
"../../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"
"../../../../../modules/juce_gui_extra/native/juce_android_PushNotifications.cpp"
"../../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"
"../../../../../examples/Assets/proaudio.path"
"../../../../../examples/Assets/reverb_ir.wav"
"../../../../../examples/Assets/singing.ogg"
+ "../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.cpp"
"../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.h"
"../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"
"../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConverters.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDispatcher.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.h"
+ "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.cpp"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPMidi1ToBytestreamTranslator.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPMidi1ToMidi2DefaultTranslator.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_MemoryAudioSource.h"
"../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.h"
+ "../../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.h"
"../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h"
"../../../../../modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.h"
"../../../../../modules/juce_audio_processors/juce_audio_processors.cpp"
"../../../../../modules/juce_audio_processors/juce_audio_processors.mm"
"../../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"
"../../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"
"../../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"
+ "../../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.cpp"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoManager.cpp"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoManager.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_UIAValueProvider.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_UIAWindowProvider.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_WindowsUIAWrapper.h"
+ "../../../../../modules/juce_gui_basics/native/x11/juce_linux_ScopedWindowAssociation.h"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_DragAndDrop.cpp"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.cpp"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.h"
"../../../../../modules/juce_gui_extra/misc/juce_SplashScreen.h"
"../../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp"
"../../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"
+ "../../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.cpp"
"../../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"
"../../../../../modules/juce_gui_extra/native/juce_android_PushNotifications.cpp"
"../../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true"
android:xlargeScreens="true"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/>
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>
+ <uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
+ <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
+ <uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
- <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
- <uses-permission android:name="android.permission.BLUETOOTH"/>
+ <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/>
+ <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30"/>
+ <uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
+ <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE"/>
+ <uses-permission android:name="android.permission.BLUETOOTH_SCAN"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-feature android:glEsVersion="0x00030000" android:required="true"/>
<application android:label="@string/app_name" android:name="com.rmsl.juce.JuceApp" android:icon="@drawable/icon" android:hardwareAccelerated="false">
- <activity android:name="com.rmsl.juce.JuceActivity" android:configChanges="keyboardHidden|orientation|screenSize"
+ <activity android:name="com.rmsl.juce.JuceActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|navigation"
android:screenOrientation="unspecified" android:launchMode="singleTask" android:hardwareAccelerated="true"
android:exported="true">
<intent-filter>
struct DSPDemoParameterBase : public ChangeBroadcaster\r
{\r
DSPDemoParameterBase (const String& labelName) : name (labelName) {}\r
- virtual ~DSPDemoParameterBase() {}\r
+ virtual ~DSPDemoParameterBase() = default;\r
\r
virtual Component* getComponent() = 0;\r
\r
loadURL (u);\r
}\r
\r
- URL getCurrentURL() { return currentURL; }\r
+ URL getCurrentURL() const { return currentURL; }\r
\r
void setTransportSource (AudioTransportSource* newSource)\r
{\r
\r
currentURL = u;\r
\r
- InputSource* inputSource = nullptr;\r
-\r
- #if ! JUCE_IOS\r
- if (u.isLocalFile())\r
- {\r
- inputSource = new FileInputSource (u.getLocalFile());\r
- }\r
- else\r
- #endif\r
- {\r
- if (inputSource == nullptr)\r
- inputSource = new URLInputSource (u);\r
- }\r
-\r
- thumbnail.setSource (inputSource);\r
+ thumbnail.setSource (makeInputSource (u).release());\r
\r
if (notify)\r
sendChangeMessage();\r
transportSource.reset();\r
readerSource.reset();\r
\r
- AudioFormatReader* newReader = nullptr;\r
+ auto source = makeInputSource (fileToPlay);\r
\r
- #if ! JUCE_IOS\r
- if (fileToPlay.isLocalFile())\r
- {\r
- newReader = formatManager.createReaderFor (fileToPlay.getLocalFile());\r
- }\r
- else\r
- #endif\r
- {\r
- if (newReader == nullptr)\r
- newReader = formatManager.createReaderFor (fileToPlay.createInputStream (URL::InputStreamOptions (URL::ParameterHandling::inAddress)));\r
- }\r
+ if (source == nullptr)\r
+ return false;\r
\r
- reader.reset (newReader);\r
+ auto stream = rawToUniquePtr (source->createInputStream());\r
\r
- if (reader.get() != nullptr)\r
- {\r
- readerSource.reset (new AudioFormatReaderSource (reader.get(), false));\r
- readerSource->setLooping (loopState.getValue());\r
+ if (stream == nullptr)\r
+ return false;\r
\r
- init();\r
+ reader = rawToUniquePtr (formatManager.createReaderFor (std::move (stream)));\r
\r
- return true;\r
- }\r
+ if (reader == nullptr)\r
+ return false;\r
+\r
+ readerSource.reset (new AudioFormatReaderSource (reader.get(), false));\r
+ readerSource->setLooping (loopState.getValue());\r
+\r
+ init();\r
\r
- return false;\r
+ return true;\r
}\r
\r
void togglePlay()\r
{\r
if (fc.getURLResults().size() > 0)\r
{\r
- auto u = fc.getURLResult();\r
+ const auto u = fc.getURLResult();\r
\r
if (! audioFileReader.loadURL (u))\r
NativeMessageBox::showAsync (MessageBoxOptions()\r
}\r
};\r
\r
+inline std::unique_ptr<InputSource> makeInputSource (const URL& url)\r
+{\r
+ #if JUCE_ANDROID\r
+ if (auto doc = AndroidDocument::fromDocument (url))\r
+ return std::make_unique<AndroidDocumentInputSource> (doc);\r
+ #endif\r
+\r
+ #if ! JUCE_IOS\r
+ if (url.isLocalFile())\r
+ return std::make_unique<FileInputSource> (url.getLocalFile());\r
+ #endif\r
+\r
+ return std::make_unique<URLInputSource> (url);\r
+}\r
+\r
#endif // PIP_DEMO_UTILITIES_INCLUDED\r
TARGET_ARCH :=
endif
- JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70003" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_WASAPI=1" "-DJUCE_DIRECTSOUND=1" "-DJUCE_ALSA=1" "-DJUCE_USE_FLAC=0" "-DJUCE_USE_OGGVORBIS=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_AU=1" "-DJUCE_PLUGINHOST_LADSPA=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_USE_CDREADER=0" "-DJUCE_USE_CDBURNER=0" "-DJUCE_WEB_BROWSER=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
+ JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70004" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_WASAPI=1" "-DJUCE_DIRECTSOUND=1" "-DJUCE_ALSA=1" "-DJUCE_USE_FLAC=0" "-DJUCE_USE_OGGVORBIS=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_AU=1" "-DJUCE_PLUGINHOST_LADSPA=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_USE_CDREADER=0" "-DJUCE_USE_CDBURNER=0" "-DJUCE_WEB_BROWSER=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -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_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := AudioPluginHost
TARGET_ARCH :=
endif
- JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70003" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_WASAPI=1" "-DJUCE_DIRECTSOUND=1" "-DJUCE_ALSA=1" "-DJUCE_USE_FLAC=0" "-DJUCE_USE_OGGVORBIS=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_AU=1" "-DJUCE_PLUGINHOST_LADSPA=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_USE_CDREADER=0" "-DJUCE_USE_CDBURNER=0" "-DJUCE_WEB_BROWSER=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
+ JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70004" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_WASAPI=1" "-DJUCE_DIRECTSOUND=1" "-DJUCE_ALSA=1" "-DJUCE_USE_FLAC=0" "-DJUCE_USE_OGGVORBIS=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_AU=1" "-DJUCE_PLUGINHOST_LADSPA=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_USE_CDREADER=0" "-DJUCE_USE_CDBURNER=0" "-DJUCE_WEB_BROWSER=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -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_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := AudioPluginHost
"NDEBUG=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
"DEBUG=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\AudioPluginHost.exe</OutputFile>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\AudioPluginHost.exe</OutputFile>\r
<ClCompile Include="..\..\Source\UI\GraphEditorPanel.cpp"/>\r
<ClCompile Include="..\..\Source\UI\MainHostWindow.cpp"/>\r
<ClCompile Include="..\..\Source\HostStartup.cpp"/>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAValueProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAWindowProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>\r
<ClCompile Include="..\..\Source\HostStartup.cpp">\r
<Filter>AudioPluginHost\Source</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\buffers</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<Filter>JUCE Modules\juce_audio_processors</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<Filter>JUCE Modules\juce_data_structures\app_properties</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\native</Filter>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\accessibility</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h">\r
+ <Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
</ClInclude>\r
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\AudioPluginHost.exe</OutputFile>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\AudioPluginHost.exe</OutputFile>\r
<ClCompile Include="..\..\Source\UI\GraphEditorPanel.cpp"/>\r
<ClCompile Include="..\..\Source\UI\MainHostWindow.cpp"/>\r
<ClCompile Include="..\..\Source\HostStartup.cpp"/>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAValueProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAWindowProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>\r
<ClCompile Include="..\..\Source\HostStartup.cpp">\r
<Filter>AudioPluginHost\Source</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\buffers</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<Filter>JUCE Modules\juce_audio_processors</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<Filter>JUCE Modules\juce_data_structures\app_properties</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\native</Filter>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\accessibility</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h">\r
+ <Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
</ClInclude>\r
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\AudioPluginHost.exe</OutputFile>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\AudioPluginHost.exe</OutputFile>\r
<ClCompile Include="..\..\Source\UI\GraphEditorPanel.cpp"/>\r
<ClCompile Include="..\..\Source\UI\MainHostWindow.cpp"/>\r
<ClCompile Include="..\..\Source\HostStartup.cpp"/>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAValueProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAWindowProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>\r
<ClCompile Include="..\..\Source\HostStartup.cpp">\r
<Filter>AudioPluginHost\Source</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\buffers</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<Filter>JUCE Modules\juce_audio_processors</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<Filter>JUCE Modules\juce_data_structures\app_properties</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\native</Filter>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\accessibility</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h">\r
+ <Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
</ClInclude>\r
"JUCE_CONTENT_SHARING=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
"JUCE_CONTENT_SHARING=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
TARGET_ARCH :=
endif
- JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70003" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=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_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70004" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=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_CPPFLAGS_CONSOLEAPP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_CONSOLEAPP := BinaryBuilder
TARGET_ARCH :=
endif
- JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70003" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=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_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70004" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=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_CPPFLAGS_CONSOLEAPP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_CONSOLEAPP := BinaryBuilder
"DEBUG=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_core=1",
"JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1",
"JUCE_STANDALONE_APPLICATION=1",
"NDEBUG=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_core=1",
"JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1",
"JUCE_STANDALONE_APPLICATION=1",
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\BinaryBuilder.exe</OutputFile>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\BinaryBuilder.exe</OutputFile>\r
set(source "${module_path}/juce_audio_plugin_client/LV2/juce_LV2TurtleDumpProgram.cpp")
add_executable(juce_lv2_helper "${source}")
add_executable(juce::juce_lv2_helper ALIAS juce_lv2_helper)
- target_compile_features(juce_lv2_helper PRIVATE cxx_std_14)
+ target_compile_features(juce_lv2_helper PRIVATE cxx_std_17)
set_target_properties(juce_lv2_helper PROPERTIES BUILD_WITH_INSTALL_RPATH ON)
target_link_libraries(juce_lv2_helper PRIVATE ${CMAKE_DL_LIBS})
endfunction()
\r
ID: juce_build_tools\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\r
name: JUCE Build Tools\r
description: Classes for generating intermediate files for JUCE projects.\r
website: http://www.juce.com/juce\r
enable_language(ASM)
if(JUCE_BUILD_CONFIGURATION MATCHES "DEBUG")
- add_definitions([[-DJUCE_DISPLAY_SPLASH_SCREEN=0]] [[-DJUCE_USE_DARK_SPLASH_SCREEN=1]] [[-DJUCE_PROJUCER_VERSION=0x70003]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_cryptography=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_MODULE_AVAILABLE_juce_opengl=1]] [[-DJUCE_MODULE_AVAILABLE_juce_osc=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCE_DEBUG=0]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=1.0.0]] [[-DJUCE_APP_VERSION_HEX=0x10000]] [[-DDEBUG=1]] [[-D_DEBUG=1]])
+ add_definitions([[-DJUCE_DISPLAY_SPLASH_SCREEN=0]] [[-DJUCE_USE_DARK_SPLASH_SCREEN=1]] [[-DJUCE_PROJUCER_VERSION=0x70004]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_cryptography=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_MODULE_AVAILABLE_juce_opengl=1]] [[-DJUCE_MODULE_AVAILABLE_juce_osc=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCE_DEBUG=0]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=1.0.0]] [[-DJUCE_APP_VERSION_HEX=0x10000]] [[-DDEBUG=1]] [[-D_DEBUG=1]])
elseif(JUCE_BUILD_CONFIGURATION MATCHES "RELEASE")
- add_definitions([[-DJUCE_DISPLAY_SPLASH_SCREEN=0]] [[-DJUCE_USE_DARK_SPLASH_SCREEN=1]] [[-DJUCE_PROJUCER_VERSION=0x70003]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_cryptography=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_MODULE_AVAILABLE_juce_opengl=1]] [[-DJUCE_MODULE_AVAILABLE_juce_osc=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=1.0.0]] [[-DJUCE_APP_VERSION_HEX=0x10000]] [[-DNDEBUG=1]])
+ add_definitions([[-DJUCE_DISPLAY_SPLASH_SCREEN=0]] [[-DJUCE_USE_DARK_SPLASH_SCREEN=1]] [[-DJUCE_PROJUCER_VERSION=0x70004]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_cryptography=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_MODULE_AVAILABLE_juce_opengl=1]] [[-DJUCE_MODULE_AVAILABLE_juce_osc=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=1.0.0]] [[-DJUCE_APP_VERSION_HEX=0x10000]] [[-DNDEBUG=1]])
else()
message( FATAL_ERROR "No matching build-configuration found." )
endif()
"../../../Source/ClientComponent.h"
"../../../Source/SharedCanvas.h"
"../../../Source/juce_icon.png"
+ "../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.cpp"
"../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.h"
"../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"
"../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConverters.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDispatcher.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.h"
+ "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.cpp"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPMidi1ToBytestreamTranslator.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPMidi1ToMidi2DefaultTranslator.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_MemoryAudioSource.h"
"../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.h"
+ "../../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.h"
"../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h"
"../../../../../modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.h"
"../../../../../modules/juce_audio_processors/juce_audio_processors.cpp"
"../../../../../modules/juce_audio_processors/juce_audio_processors.mm"
"../../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"
"../../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"
"../../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"
+ "../../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.cpp"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoManager.cpp"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoManager.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_UIAValueProvider.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_UIAWindowProvider.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_WindowsUIAWrapper.h"
+ "../../../../../modules/juce_gui_basics/native/x11/juce_linux_ScopedWindowAssociation.h"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_DragAndDrop.cpp"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.cpp"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.h"
"../../../../../modules/juce_gui_extra/misc/juce_SplashScreen.h"
"../../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp"
"../../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"
+ "../../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.cpp"
"../../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"
"../../../../../modules/juce_gui_extra/native/juce_android_PushNotifications.cpp"
"../../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"
"../../../Source/ClientComponent.h"
"../../../Source/SharedCanvas.h"
"../../../Source/juce_icon.png"
+ "../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.cpp"
"../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.h"
"../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"
"../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConverters.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDispatcher.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.h"
+ "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.cpp"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPMidi1ToBytestreamTranslator.h"
"../../../../../modules/juce_audio_basics/midi/ump/juce_UMPMidi1ToMidi2DefaultTranslator.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_MemoryAudioSource.h"
"../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.h"
+ "../../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.h"
"../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp"
"../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h"
"../../../../../modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.h"
"../../../../../modules/juce_audio_processors/juce_audio_processors.cpp"
"../../../../../modules/juce_audio_processors/juce_audio_processors.mm"
"../../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"
"../../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"
"../../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"
+ "../../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.cpp"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoManager.cpp"
"../../../../../modules/juce_data_structures/undomanager/juce_UndoManager.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_UIAValueProvider.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_UIAWindowProvider.h"
"../../../../../modules/juce_gui_basics/native/accessibility/juce_win32_WindowsUIAWrapper.h"
+ "../../../../../modules/juce_gui_basics/native/x11/juce_linux_ScopedWindowAssociation.h"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_DragAndDrop.cpp"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.cpp"
"../../../../../modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.h"
"../../../../../modules/juce_gui_extra/misc/juce_SplashScreen.h"
"../../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp"
"../../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"
+ "../../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.cpp"
"../../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"
"../../../../../modules/juce_gui_extra/native/juce_android_PushNotifications.cpp"
"../../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true"
android:xlargeScreens="true"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/>
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
- <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
- <uses-permission android:name="android.permission.BLUETOOTH"/>
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>
+ <uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
+ <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
+ <uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
<application android:label="@string/app_name" android:name="com.rmsl.juce.JuceApp" android:icon="@drawable/icon" android:hardwareAccelerated="false">
- <activity android:name="com.rmsl.juce.JuceActivity" android:configChanges="keyboardHidden|orientation|screenSize"
+ <activity android:name="com.rmsl.juce.JuceActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|navigation"
android:screenOrientation="unspecified" android:launchMode="singleTask" android:hardwareAccelerated="true"
android:exported="true">
<intent-filter>
TARGET_ARCH :=
endif
- JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70003" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
+ JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70004" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl 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_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := JUCE\ Network\ Graphics\ Demo
TARGET_ARCH :=
endif
- JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70003" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
+ JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70004" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl 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_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := JUCE\ Network\ Graphics\ Demo
"NDEBUG=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
"DEBUG=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\JUCE Network Graphics Demo.exe</OutputFile>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\JUCE Network Graphics Demo.exe</OutputFile>\r
</ItemDefinitionGroup>\r
<ItemGroup>\r
<ClCompile Include="..\..\Source\Main.cpp"/>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAValueProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAWindowProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>\r
<ClCompile Include="..\..\Source\Main.cpp">\r
<Filter>NetworkGraphicsDemo\Source</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\buffers</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<Filter>JUCE Modules\juce_audio_processors</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<Filter>JUCE Modules\juce_data_structures\app_properties</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\native</Filter>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\accessibility</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h">\r
+ <Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
</ClInclude>\r
"JUCE_CONTENT_SHARING=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
"JUCE_CONTENT_SHARING=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
};\r
\r
//==============================================================================\r
-void createAllDemos (OwnedArray<AnimatedContent>& demos)\r
+inline void createAllDemos (OwnedArray<AnimatedContent>& demos)\r
{\r
demos.add (new FlockDemo());\r
demos.add (new FlockWithText());\r
TARGET_ARCH :=
endif
- JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70003" "-DJUCE_MODULE_AVAILABLE_juce_build_tools=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_LOG_ASSERTIONS=1" "-DJUCE_USE_CURL=1" "-DJUCE_LOAD_CURL_SYMBOLS_LAZILY=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_WEB_BROWSER=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=7.0.3" "-DJUCE_APP_VERSION_HEX=0x70003" $(shell $(PKG_CONFIG) --cflags freetype2) -pthread -I../../JuceLibraryCode -I../../../Build -I../../../../modules $(CPPFLAGS)
+ JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70004" "-DJUCE_MODULE_AVAILABLE_juce_build_tools=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_LOG_ASSERTIONS=1" "-DJUCE_USE_CURL=1" "-DJUCE_LOAD_CURL_SYMBOLS_LAZILY=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_WEB_BROWSER=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=7.0.4" "-DJUCE_APP_VERSION_HEX=0x70004" $(shell $(PKG_CONFIG) --cflags freetype2) -pthread -I../../JuceLibraryCode -I../../../Build -I../../../../modules $(CPPFLAGS)
JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := Projucer
TARGET_ARCH :=
endif
- JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70003" "-DJUCE_MODULE_AVAILABLE_juce_build_tools=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_LOG_ASSERTIONS=1" "-DJUCE_USE_CURL=1" "-DJUCE_LOAD_CURL_SYMBOLS_LAZILY=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_WEB_BROWSER=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=7.0.3" "-DJUCE_APP_VERSION_HEX=0x70003" $(shell $(PKG_CONFIG) --cflags freetype2) -pthread -I../../JuceLibraryCode -I../../../Build -I../../../../modules $(CPPFLAGS)
+ JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70004" "-DJUCE_MODULE_AVAILABLE_juce_build_tools=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_LOG_ASSERTIONS=1" "-DJUCE_USE_CURL=1" "-DJUCE_LOAD_CURL_SYMBOLS_LAZILY=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_WEB_BROWSER=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=7.0.4" "-DJUCE_APP_VERSION_HEX=0x70004" $(shell $(PKG_CONFIG) --cflags freetype2) -pthread -I../../JuceLibraryCode -I../../../Build -I../../../../modules $(CPPFLAGS)
JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := Projucer
<key>CFBundleSignature</key>\r
<string>????</string>\r
<key>CFBundleShortVersionString</key>\r
- <string>7.0.3</string>\r
+ <string>7.0.4</string>\r
<key>CFBundleVersion</key>\r
- <string>7.0.3</string>\r
+ <string>7.0.4</string>\r
<key>NSHumanReadableCopyright</key>\r
<string>Raw Material Software Limited</string>\r
<key>NSHighResolutionCapable</key>\r
"NDEBUG=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_build_tools=1",
"JUCE_MODULE_AVAILABLE_juce_core=1",
"JUCE_MODULE_AVAILABLE_juce_cryptography=1",
"JUCE_WEB_BROWSER=0",
"JUCE_STANDALONE_APPLICATION=1",
"JUCER_XCODE_MAC_F6D2F4CF=1",
- "JUCE_APP_VERSION=7.0.3",
- "JUCE_APP_VERSION_HEX=0x70003",
+ "JUCE_APP_VERSION=7.0.4",
+ "JUCE_APP_VERSION_HEX=0x70004",
"JucePlugin_Build_VST=0",
"JucePlugin_Build_VST3=0",
"JucePlugin_Build_AU=0",
"DEBUG=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_build_tools=1",
"JUCE_MODULE_AVAILABLE_juce_core=1",
"JUCE_MODULE_AVAILABLE_juce_cryptography=1",
"JUCE_WEB_BROWSER=0",
"JUCE_STANDALONE_APPLICATION=1",
"JUCER_XCODE_MAC_F6D2F4CF=1",
- "JUCE_APP_VERSION=7.0.3",
- "JUCE_APP_VERSION_HEX=0x70003",
+ "JUCE_APP_VERSION=7.0.4",
+ "JUCE_APP_VERSION_HEX=0x70004",
"JucePlugin_Build_VST=0",
"JucePlugin_Build_VST3=0",
"JucePlugin_Build_AU=0",
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\Projucer.exe</OutputFile>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\Projucer.exe</OutputFile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAValueProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAWindowProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<Filter>JUCE Modules\juce_data_structures\app_properties</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\native</Filter>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\accessibility</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h">\r
+ <Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
</ClInclude>\r
#include <windows.h>\r
\r
VS_VERSION_INFO VERSIONINFO\r
-FILEVERSION 7,0,3,0\r
+FILEVERSION 7,0,4,0\r
BEGIN\r
BLOCK "StringFileInfo"\r
BEGIN\r
VALUE "CompanyName", "Raw Material Software Limited\0"\r
VALUE "LegalCopyright", "Raw Material Software Limited\0"\r
VALUE "FileDescription", "Projucer\0"\r
- VALUE "FileVersion", "7.0.3\0"\r
+ VALUE "FileVersion", "7.0.4\0"\r
VALUE "ProductName", "Projucer\0"\r
- VALUE "ProductVersion", "7.0.3\0"\r
+ VALUE "ProductVersion", "7.0.4\0"\r
END\r
END\r
\r
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\Projucer.exe</OutputFile>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\Projucer.exe</OutputFile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAValueProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAWindowProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<Filter>JUCE Modules\juce_data_structures\app_properties</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\native</Filter>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\accessibility</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h">\r
+ <Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
</ClInclude>\r
#include <windows.h>\r
\r
VS_VERSION_INFO VERSIONINFO\r
-FILEVERSION 7,0,3,0\r
+FILEVERSION 7,0,4,0\r
BEGIN\r
BLOCK "StringFileInfo"\r
BEGIN\r
VALUE "CompanyName", "Raw Material Software Limited\0"\r
VALUE "LegalCopyright", "Raw Material Software Limited\0"\r
VALUE "FileDescription", "Projucer\0"\r
- VALUE "FileVersion", "7.0.3\0"\r
+ VALUE "FileVersion", "7.0.4\0"\r
VALUE "ProductName", "Projucer\0"\r
- VALUE "ProductVersion", "7.0.3\0"\r
+ VALUE "ProductVersion", "7.0.4\0"\r
END\r
END\r
\r
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\Projucer.exe</OutputFile>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=7.0.3;JUCE_APP_VERSION_HEX=0x70003;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=7.0.4;JUCE_APP_VERSION_HEX=0x70004;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\Projucer.exe</OutputFile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAValueProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAWindowProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<Filter>JUCE Modules\juce_data_structures\app_properties</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\native</Filter>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\accessibility</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h">\r
+ <Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
</ClInclude>\r
#include <windows.h>\r
\r
VS_VERSION_INFO VERSIONINFO\r
-FILEVERSION 7,0,3,0\r
+FILEVERSION 7,0,4,0\r
BEGIN\r
BLOCK "StringFileInfo"\r
BEGIN\r
VALUE "CompanyName", "Raw Material Software Limited\0"\r
VALUE "LegalCopyright", "Raw Material Software Limited\0"\r
VALUE "FileDescription", "Projucer\0"\r
- VALUE "FileVersion", "7.0.3\0"\r
+ VALUE "FileVersion", "7.0.4\0"\r
VALUE "ProductName", "Projucer\0"\r
- VALUE "ProductVersion", "7.0.3\0"\r
+ VALUE "ProductVersion", "7.0.4\0"\r
END\r
END\r
\r
{\r
const char* const projectName = "Projucer";\r
const char* const companyName = "Raw Material Software Limited";\r
- const char* const versionString = "7.0.3";\r
- const int versionNumber = 0x70003;\r
+ const char* const versionString = "7.0.4";\r
+ const int versionNumber = 0x70004;\r
}\r
#endif\r
<?xml version="1.0" encoding="UTF-8"?>\r
\r
<JUCERPROJECT id="M70qfTRRk" name="Projucer" projectType="guiapp" juceFolder="../../juce"\r
- version="7.0.3" bundleIdentifier="com.juce.theprojucer" splashScreenColour="Dark"\r
+ version="7.0.4" bundleIdentifier="com.juce.theprojucer" splashScreenColour="Dark"\r
displaySplashScreen="0" reportAppUsage="0" companyName="Raw Material Software Limited"\r
companyCopyright="Raw Material Software Limited" useAppConfig="0"\r
addUsingNamespaceToJuceHeader="1" jucerFormatVersion="1">\r
if (currentXML != nullptr && currentXML->isEquivalentTo (newXML.get(), true))\r
return true;\r
\r
- currentXML.reset (newXML.release());\r
+ currentXML = std::move (newXML);\r
stopTimer();\r
\r
resources.loadFromCpp (getCppFile(), cppContent);\r
createOtherExporterProperties (props);\r
}\r
\r
+ void updateDeprecatedSettings() override\r
+ {\r
+ updateExternalReadPermission();\r
+ updateBluetoothPermission();\r
+ }\r
+\r
static String getDisplayName() { return "Android"; }\r
static String getValueTreeTypeName() { return "ANDROIDSTUDIO"; }\r
static String getTargetFolderName() { return "Android"; }\r
androidCustomActivityClass, androidCustomApplicationClass, androidManifestCustomXmlElements,\r
androidGradleSettingsContent, androidVersionCode, androidMinimumSDK, androidTargetSDK, androidTheme,\r
androidExtraAssetsFolder, androidOboeRepositoryPath, androidInternetNeeded, androidMicNeeded, androidCameraNeeded,\r
- androidBluetoothNeeded, androidExternalReadPermission, androidExternalWritePermission,\r
+ androidBluetoothScanNeeded, androidBluetoothAdvertiseNeeded, androidBluetoothConnectNeeded,\r
+ androidReadMediaAudioPermission, androidReadMediaImagesPermission,\r
+ androidReadMediaVideoPermission, androidExternalWritePermission,\r
androidInAppBillingPermission, androidVibratePermission, androidOtherPermissions, androidPushNotifications,\r
androidEnableRemoteNotifications, androidRemoteNotificationsConfigFile, androidEnableContentSharing, androidKeyStore,\r
androidKeyStorePass, androidKeyAlias, androidKeyAliasPass, gradleVersion, gradleToolchain, androidPluginVersion;\r
androidInternetNeeded (settings, Ids::androidInternetNeeded, getUndoManager(), true),\r
androidMicNeeded (settings, Ids::microphonePermissionNeeded, getUndoManager(), false),\r
androidCameraNeeded (settings, Ids::cameraPermissionNeeded, getUndoManager(), false),\r
- androidBluetoothNeeded (settings, Ids::androidBluetoothNeeded, getUndoManager(), true),\r
- androidExternalReadPermission (settings, Ids::androidExternalReadNeeded, getUndoManager(), true),\r
+ androidBluetoothScanNeeded (settings, Ids::androidBluetoothScanNeeded, getUndoManager(), false),\r
+ androidBluetoothAdvertiseNeeded (settings, Ids::androidBluetoothAdvertiseNeeded, getUndoManager(), false),\r
+ androidBluetoothConnectNeeded (settings, Ids::androidBluetoothConnectNeeded, getUndoManager(), false),\r
+ androidReadMediaAudioPermission (settings, Ids::androidReadMediaAudioPermission, getUndoManager(), true),\r
+ androidReadMediaImagesPermission (settings, Ids::androidReadMediaImagesPermission, getUndoManager(), true),\r
+ androidReadMediaVideoPermission (settings, Ids::androidReadMediaVideoPermission, getUndoManager(), true),\r
androidExternalWritePermission (settings, Ids::androidExternalWriteNeeded, getUndoManager(), true),\r
androidInAppBillingPermission (settings, Ids::androidInAppBilling, getUndoManager(), false),\r
androidVibratePermission (settings, Ids::androidVibratePermissionNeeded, getUndoManager(), false),\r
}\r
\r
private:\r
+ void updateExternalReadPermission()\r
+ {\r
+ const auto needsExternalRead = getSettingString (Ids::androidExternalReadNeeded);\r
+ settings.removeProperty (Ids::androidExternalReadNeeded, nullptr);\r
+\r
+ if (needsExternalRead.isEmpty())\r
+ return;\r
+\r
+ androidReadMediaAudioPermission .setValue (needsExternalRead, nullptr);\r
+ androidReadMediaImagesPermission.setValue (needsExternalRead, nullptr);\r
+ androidReadMediaVideoPermission .setValue (needsExternalRead, nullptr);\r
+ }\r
+\r
+ void updateBluetoothPermission()\r
+ {\r
+ const auto needsBluetooth = getSettingString (Ids::androidBluetoothNeeded);\r
+ settings.removeProperty (Ids::androidBluetoothNeeded, nullptr);\r
+\r
+ if (needsBluetooth.isEmpty())\r
+ return;\r
+\r
+ androidBluetoothScanNeeded .setValue (needsBluetooth, nullptr);\r
+ androidBluetoothAdvertiseNeeded.setValue (needsBluetooth, nullptr);\r
+ androidBluetoothConnectNeeded .setValue (needsBluetooth, nullptr);\r
+ }\r
+\r
void writeCmakeFile (const File& file) const\r
{\r
build_tools::writeStreamToFile (file, [&] (MemoryOutputStream& mo)\r
props.add (new ChoicePropertyComponent (androidCameraNeeded, "Camera Required"),\r
"If enabled, this will set the android.permission.CAMERA flag in the manifest.");\r
\r
- props.add (new ChoicePropertyComponent (androidBluetoothNeeded, "Bluetooth Permissions Required"),\r
- "If enabled, this will set the android.permission.BLUETOOTH and android.permission.BLUETOOTH_ADMIN flag in the manifest. This is required for Bluetooth MIDI on Android.");\r
+ props.add (new ChoicePropertyComponent (androidBluetoothScanNeeded, "Bluetooth Scan Required"),\r
+ "If enabled, this will set the android.permission.BLUETOOTH_SCAN, android.permission.BLUETOOTH and android.permission.BLUETOOTH_ADMIN flags in the manifest. This is required for Bluetooth MIDI on Android.");\r
+\r
+ props.add (new ChoicePropertyComponent (androidBluetoothAdvertiseNeeded, "Bluetooth Advertise Required"),\r
+ "If enabled, this will set the android.permission.BLUETOOTH_ADVERTISE, android.permission.BLUETOOTH and android.permission.BLUETOOTH_ADMIN flags in the manifest.");\r
\r
- props.add (new ChoicePropertyComponent (androidExternalReadPermission, "Read From External Storage"),\r
- "If enabled, this will set the android.permission.READ_EXTERNAL_STORAGE flag in the manifest.");\r
+ props.add (new ChoicePropertyComponent (androidBluetoothConnectNeeded, "Bluetooth Connect Required"),\r
+ "If enabled, this will set the android.permission.BLUETOOTH_CONNECT, android.permission.BLUETOOTH and android.permission.BLUETOOTH_ADMIN flags in the manifest. This is required for Bluetooth MIDI on Android.");\r
+\r
+ props.add (new ChoicePropertyComponent (androidReadMediaAudioPermission, "Read Audio From External Storage"),\r
+ "If enabled, this will set the android.permission.READ_MEDIA_AUDIO and android.permission.READ_EXTERNAL_STORAGE flags in the manifest.");\r
+\r
+ props.add (new ChoicePropertyComponent (androidReadMediaImagesPermission, "Read Images From External Storage"),\r
+ "If enabled, this will set the android.permission.READ_MEDIA_IMAGES and android.permission.READ_EXTERNAL_STORAGE flags in the manifest.");\r
+\r
+ props.add (new ChoicePropertyComponent (androidReadMediaVideoPermission, "Read Video From External Storage"),\r
+ "If enabled, this will set the android.permission.READ_MEDIA_VIDEO and android.permission.READ_EXTERNAL_STORAGE flags in the manifest.");\r
\r
props.add (new ChoicePropertyComponent (androidExternalWritePermission, "Write to External Storage"),\r
"If enabled, this will set the android.permission.WRITE_EXTERNAL_STORAGE flag in the manifest.");\r
// This permission only has an effect on SDK version 28 and lower\r
if (permission == "android.permission.WRITE_EXTERNAL_STORAGE")\r
usesPermission->setAttribute ("android:maxSdkVersion", "28");\r
+\r
+ // https://developer.android.com/training/data-storage/shared/documents-files\r
+ // If the SDK version is <= 28, READ_EXTERNAL_STORAGE is required to access any\r
+ // media file, including files created by the current app.\r
+ // If the SDK version is <= 32, READ_EXTERNAL_STORAGE is required to access other\r
+ // apps' media files.\r
+ // This permission has no effect on later Android versions.\r
+ if (permission == "android.permission.READ_EXTERNAL_STORAGE")\r
+ usesPermission->setAttribute ("android:maxSdkVersion", "32");\r
+\r
+ // These permissions are obsoleted by new more fine-grained permissions in API level 31\r
+ if (permission == "android.permission.BLUETOOTH"\r
+ || permission == "android.permission.BLUETOOTH_ADMIN")\r
+ {\r
+ usesPermission->setAttribute ("android:maxSdkVersion", "30");\r
+ }\r
}\r
}\r
\r
setAttributeIfNotPresent (*act, "android:name", getActivityClassString());\r
\r
if (! act->hasAttribute ("android:configChanges"))\r
- act->setAttribute ("android:configChanges", "keyboardHidden|orientation|screenSize");\r
+ act->setAttribute ("android:configChanges", "keyboard|keyboardHidden|orientation|screenSize|navigation");\r
\r
if (androidScreenOrientation.get() == "landscape")\r
{\r
if (androidCameraNeeded.get())\r
s.add ("android.permission.CAMERA");\r
\r
- if (androidBluetoothNeeded.get())\r
+ if (androidBluetoothScanNeeded.get())\r
+ s.add ("android.permission.BLUETOOTH_SCAN");\r
+\r
+ if (androidBluetoothAdvertiseNeeded.get())\r
+ s.add ("android.permission.BLUETOOTH_ADVERTISE");\r
+\r
+ if (androidBluetoothConnectNeeded.get())\r
+ s.add ("android.permission.BLUETOOTH_CONNECT");\r
+\r
+ if ( androidBluetoothScanNeeded.get()\r
+ || androidBluetoothAdvertiseNeeded.get()\r
+ || androidBluetoothConnectNeeded.get())\r
{\r
s.add ("android.permission.BLUETOOTH");\r
s.add ("android.permission.BLUETOOTH_ADMIN");\r
s.add ("android.permission.ACCESS_COARSE_LOCATION");\r
}\r
\r
- if (androidExternalReadPermission.get())\r
+ if (androidReadMediaAudioPermission.get())\r
+ s.add ("android.permission.READ_MEDIA_AUDIO");\r
+\r
+ if (androidReadMediaImagesPermission.get())\r
+ s.add ("android.permission.READ_MEDIA_IMAGES");\r
+\r
+ if (androidReadMediaVideoPermission.get())\r
+ s.add ("android.permission.READ_MEDIA_VIDEO");\r
+\r
+ if ( androidReadMediaAudioPermission.get()\r
+ || androidReadMediaImagesPermission.get()\r
+ || androidReadMediaVideoPermission.get())\r
+ {\r
s.add ("android.permission.READ_EXTERNAL_STORAGE");\r
+ }\r
\r
if (androidExternalWritePermission.get())\r
s.add ("android.permission.WRITE_EXTERNAL_STORAGE");\r
}\r
else if (type == LV2PlugIn)\r
{\r
- s.add ("JUCE_LV2DIR := " + targetName + ".lv2");\r
+ s.add ("JUCE_LV2DIR := " + escapeQuotesAndSpaces (targetName) + ".lv2");\r
targetName = "$(JUCE_LV2DIR)/" + targetName + ".so";\r
}\r
else if (type == LV2TurtleProgram)\r
}\r
else if (type == LV2PlugIn)\r
{\r
- out << "\t$(V_AT) $(JUCE_OUTDIR)/$(JUCE_TARGET_LV2_MANIFEST_HELPER) $(abspath $(JUCE_LV2_FULL_PATH))" << newLine\r
+ out << "\t$(V_AT) $(JUCE_OUTDIR)/$(JUCE_TARGET_LV2_MANIFEST_HELPER) $(JUCE_LV2_FULL_PATH)" << newLine\r
<< "\t-$(V_AT)[ ! \"$(JUCE_LV2DESTDIR)\" ] || (mkdir -p $(JUCE_LV2DESTDIR) && cp -R $(JUCE_COPYCMD_LV2_PLUGIN))" << newLine;\r
}\r
\r
DECLARE_ID (androidGradleSettingsContent);\r
DECLARE_ID (androidCustomStringXmlElements);\r
DECLARE_ID (androidBluetoothNeeded);\r
+ DECLARE_ID (androidBluetoothScanNeeded);\r
+ DECLARE_ID (androidBluetoothAdvertiseNeeded);\r
+ DECLARE_ID (androidBluetoothConnectNeeded);\r
DECLARE_ID (androidExternalReadNeeded);\r
+ DECLARE_ID (androidReadMediaAudioPermission);\r
+ DECLARE_ID (androidReadMediaImagesPermission);\r
+ DECLARE_ID (androidReadMediaVideoPermission);\r
DECLARE_ID (androidExternalWriteNeeded);\r
DECLARE_ID (androidInAppBilling);\r
DECLARE_ID (androidVibratePermissionNeeded);\r
\r
const StringArray& originalKeys (originalStrings.getAllKeys());\r
const StringArray& originalValues (originalStrings.getAllValues());\r
- int numRemoved = 0;\r
\r
for (int i = preStrings.size(); --i >= 0;)\r
{\r
{\r
preStrings.remove (i);\r
postStrings.remove (i);\r
- ++numRemoved;\r
}\r
}\r
\r
}\r
}\r
\r
+ if (exporterIdentifier.toString() == AndroidProjectExporter::getValueTreeTypeName())\r
+ exporter.setProperty (Ids::androidBluetoothNeeded, true, nullptr);\r
+\r
{\r
ValueTree configs (Ids::CONFIGURATIONS);\r
\r
TARGET_ARCH :=
endif
- JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70003" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_STANDALONE_APPLICATION=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 freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
+ JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70004" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_STANDALONE_APPLICATION=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 freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
JUCE_CPPFLAGS_CONSOLEAPP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_CONSOLEAPP := UnitTestRunner
TARGET_ARCH :=
endif
- JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70003" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_STANDALONE_APPLICATION=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 freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
+ JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70004" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_STANDALONE_APPLICATION=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 freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
JUCE_CPPFLAGS_CONSOLEAPP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_CONSOLEAPP := UnitTestRunner
"NDEBUG=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_analytics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"DEBUG=1",
"JUCE_DISPLAY_SPLASH_SCREEN=0",
"JUCE_USE_DARK_SPLASH_SCREEN=1",
- "JUCE_PROJUCER_VERSION=0x70003",
+ "JUCE_PROJUCER_VERSION=0x70004",
"JUCE_MODULE_AVAILABLE_juce_analytics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\UnitTestRunner.exe</OutputFile>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\UnitTestRunner.exe</OutputFile>\r
<ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAValueProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAWindowProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>\r
<ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp">\r
<Filter>JUCE Modules\juce_analytics</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\buffers</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<Filter>JUCE Modules\juce_audio_processors</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<Filter>JUCE Modules\juce_data_structures\app_properties</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\native</Filter>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\accessibility</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h">\r
+ <Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
</ClInclude>\r
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\UnitTestRunner.exe</OutputFile>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\UnitTestRunner.exe</OutputFile>\r
<ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAValueProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAWindowProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>\r
<ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp">\r
<Filter>JUCE Modules\juce_analytics</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\buffers</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<Filter>JUCE Modules\juce_audio_processors</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<Filter>JUCE Modules\juce_data_structures\app_properties</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\native</Filter>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\accessibility</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h">\r
+ <Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
</ClInclude>\r
<Optimization>Disabled</Optimization>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\UnitTestRunner.exe</OutputFile>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\UnitTestRunner.exe</OutputFile>\r
<ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAValueProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAWindowProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>\r
<ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp">\r
<Filter>JUCE Modules\juce_analytics</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\buffers</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<Filter>JUCE Modules\juce_audio_processors</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<Filter>JUCE Modules\juce_data_structures\app_properties</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\native</Filter>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\accessibility</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h">\r
+ <Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
</ClInclude>\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_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DLL_BUILD=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DLL_BUILD=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DLL_BUILD=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DLL_BUILD=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\juce_dll.lib</OutputFile>\r
<ClCompile>\r
<Optimization>Full</Optimization>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DLL_BUILD=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DLL_BUILD=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ResourceCompile>\r
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DLL_BUILD=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70004;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DLL_BUILD=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
</ResourceCompile>\r
<Link>\r
<OutputFile>$(OutDir)\juce_dll.lib</OutputFile>\r
<Lib/>\r
</ItemDefinitionGroup>\r
<ItemGroup>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <ExcludedFromBuild>true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<ExcludedFromBuild>true</ExcludedFromBuild>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAValueProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAWindowProvider.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>\r
</Filter>\r
</ItemGroup>\r
<ItemGroup>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\buffers</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPIterator.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\midi\ump</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_PositionableAudioSource.cpp">\r
+ <Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">\r
<Filter>JUCE Modules\juce_audio_basics\sources</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.cpp">\r
<Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_VSTCallbackHandler.cpp">\r
+ <Filter>JUCE Modules\juce_audio_processors\utilities</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">\r
<Filter>JUCE Modules\juce_audio_processors</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">\r
<Filter>JUCE Modules\juce_data_structures\app_properties</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoableAction.cpp">\r
+ <Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">\r
<Filter>JUCE Modules\juce_data_structures\undomanager</Filter>\r
</ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.cpp">\r
+ <Filter>JUCE Modules\juce_gui_extra\misc</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_android_PushNotifications.cpp">\r
<Filter>JUCE Modules\juce_gui_extra\native</Filter>\r
</ClCompile>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\accessibility</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_ScopedWindowAssociation.h">\r
+ <Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h">\r
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>\r
</ClInclude>\r
\r
ID: juce_analytics\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\r
name: JUCE analytics classes\r
description: Classes to collect analytics and send to destinations\r
website: http://www.juce.com/juce\r
--- /dev/null
+/*\r
+ ==============================================================================\r
+\r
+ This file is part of the JUCE library.\r
+ Copyright (c) 2022 - Raw Material Software Limited\r
+\r
+ JUCE is an open source library subject to commercial or open-source\r
+ licensing.\r
+\r
+ The code included in this file is provided under the terms of the ISC license\r
+ http://www.isc.org/downloads/software-support-policy/isc-license. Permission\r
+ To use, copy, modify, and/or distribute this software for any purpose with or\r
+ without fee is hereby granted provided that the above copyright notice and\r
+ this permission notice appear in all copies.\r
+\r
+ JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER\r
+ EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE\r
+ DISCLAIMED.\r
+\r
+ ==============================================================================\r
+*/\r
+\r
+namespace juce\r
+{\r
+\r
+bool AudioPlayHead::canControlTransport() { return false; }\r
+void AudioPlayHead::transportPlay ([[maybe_unused]] bool shouldStartPlaying) {}\r
+void AudioPlayHead::transportRecord ([[maybe_unused]] bool shouldStartRecording) {}\r
+void AudioPlayHead::transportRewind() {}\r
+\r
+} // namespace juce\r
virtual Optional<PositionInfo> getPosition() const = 0;\r
\r
/** Returns true if this object can control the transport. */\r
- virtual bool canControlTransport() { return false; }\r
+ virtual bool canControlTransport();\r
\r
/** Starts or stops the audio. */\r
- virtual void transportPlay (bool shouldStartPlaying) { ignoreUnused (shouldStartPlaying); }\r
+ virtual void transportPlay (bool shouldStartPlaying);\r
\r
/** Starts or stops recording the audio. */\r
- virtual void transportRecord (bool shouldStartRecording) { ignoreUnused (shouldStartRecording); }\r
+ virtual void transportRecord (bool shouldStartRecording);\r
\r
/** Rewinds the audio. */\r
- virtual void transportRewind() {}\r
+ virtual void transportRewind();\r
};\r
\r
} // namespace juce\r
if (! isClear)\r
{\r
for (int i = 0; i < numChannels; ++i)\r
+ {\r
+ JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4661)\r
FloatVectorOperations::clear (channels[i], size);\r
+ JUCE_END_IGNORE_WARNINGS_MSVC\r
+ }\r
\r
isClear = true;\r
}\r
auto* d = channels[destChannel] + destStartSample;\r
auto* s = source.channels[sourceChannel] + sourceStartSample;\r
\r
+ JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4661)\r
+\r
if (isClear)\r
{\r
isClear = false;\r
else\r
FloatVectorOperations::add (d, s, numSamples);\r
}\r
+\r
+ JUCE_END_IGNORE_WARNINGS_MSVC\r
}\r
}\r
\r
@param numSamples the number of samples to process\r
@param startGain the gain to apply to the first sample (this is multiplied with\r
the source samples before they are added to this buffer)\r
- @param endGain the gain to apply to the final sample. The gain is linearly\r
+ @param endGain The gain that would apply to the sample after the final sample.\r
+ The gain that applies to the final sample is\r
+ (numSamples - 1) / numSamples * (endGain - startGain). This\r
+ ensures a continuous ramp when supplying the same value in\r
+ endGain and startGain in subsequent blocks. The gain is linearly\r
interpolated between the first and last samples.\r
*/\r
void addFromWithRamp (int destChannel,\r
@param numSamples the number of samples to process\r
@param startGain the gain to apply to the first sample (this is multiplied with\r
the source samples before they are copied to this buffer)\r
- @param endGain the gain to apply to the final sample. The gain is linearly\r
+ @param endGain The gain that would apply to the sample after the final sample.\r
+ The gain that applies to the final sample is\r
+ (numSamples - 1) / numSamples * (endGain - startGain). This\r
+ ensures a continuous ramp when supplying the same value in\r
+ endGain and startGain in subsequent blocks. The gain is linearly\r
interpolated between the first and last samples.\r
\r
@see addFrom\r
#if JUCE_USE_VDSP_FRAMEWORK\r
vDSP_vabs ((float*) src, 1, dest, 1, (vDSP_Length) num);\r
#else\r
- FloatVectorHelpers::signMask32 signMask;\r
+ [[maybe_unused]] FloatVectorHelpers::signMask32 signMask;\r
signMask.i = 0x7fffffffUL;\r
JUCE_PERFORM_VEC_OP_SRC_DEST (dest[i] = std::abs (src[i]),\r
Mode::bit_and (s, mask),\r
JUCE_LOAD_SRC,\r
JUCE_INCREMENT_SRC_DEST,\r
const Mode::ParallelType mask = Mode::load1 (signMask.f);)\r
-\r
- ignoreUnused (signMask);\r
#endif\r
}\r
\r
#if JUCE_USE_VDSP_FRAMEWORK\r
vDSP_vabsD ((double*) src, 1, dest, 1, (vDSP_Length) num);\r
#else\r
- FloatVectorHelpers::signMask64 signMask;\r
+ [[maybe_unused]] FloatVectorHelpers::signMask64 signMask;\r
signMask.i = 0x7fffffffffffffffULL;\r
\r
JUCE_PERFORM_VEC_OP_SRC_DEST (dest[i] = std::abs (src[i]),\r
JUCE_LOAD_SRC,\r
JUCE_INCREMENT_SRC_DEST,\r
const Mode::ParallelType mask = Mode::load1 (signMask.d);)\r
-\r
- ignoreUnused (signMask);\r
#endif\r
}\r
\r
return fpsr;\r
}\r
\r
-void JUCE_CALLTYPE FloatVectorOperations::setFpStatusRegister (intptr_t fpsr) noexcept\r
+void JUCE_CALLTYPE FloatVectorOperations::setFpStatusRegister ([[maybe_unused]] intptr_t fpsr) noexcept\r
{\r
#if JUCE_INTEL && JUCE_USE_SSE_INTRINSICS\r
// the volatile keyword here is needed to workaround a bug in AppleClang 13.0\r
#if ! (defined (JUCE_INTEL) || defined (JUCE_ARM))\r
jassertfalse; // No support for getting the floating point status register for your platform\r
#endif\r
- ignoreUnused (fpsr);\r
#endif\r
}\r
\r
-void JUCE_CALLTYPE FloatVectorOperations::enableFlushToZeroMode (bool shouldEnable) noexcept\r
+void JUCE_CALLTYPE FloatVectorOperations::enableFlushToZeroMode ([[maybe_unused]] bool shouldEnable) noexcept\r
{\r
#if JUCE_USE_SSE_INTRINSICS || (JUCE_USE_ARM_NEON || (JUCE_64BIT && JUCE_ARM))\r
#if JUCE_USE_SSE_INTRINSICS\r
#if ! (defined (JUCE_INTEL) || defined (JUCE_ARM))\r
jassertfalse; // No support for flush to zero mode on your platform\r
#endif\r
- ignoreUnused (shouldEnable);\r
#endif\r
}\r
\r
-void JUCE_CALLTYPE FloatVectorOperations::disableDenormalisedNumberSupport (bool shouldDisable) noexcept\r
+void JUCE_CALLTYPE FloatVectorOperations::disableDenormalisedNumberSupport ([[maybe_unused]] bool shouldDisable) noexcept\r
{\r
#if JUCE_USE_SSE_INTRINSICS || (JUCE_USE_ARM_NEON || (JUCE_64BIT && JUCE_ARM))\r
#if JUCE_USE_SSE_INTRINSICS\r
\r
setFpStatusRegister ((getFpStatusRegister() & (~mask)) | (shouldDisable ? mask : 0));\r
#else\r
- ignoreUnused (shouldDisable);\r
\r
#if ! (defined (JUCE_INTEL) || defined (JUCE_ARM))\r
jassertfalse; // No support for disable denormals mode on your platform\r
namespace detail\r
{\r
\r
-template <typename...>\r
-struct NameForwarder;\r
-\r
-template <typename Head>\r
-struct NameForwarder<Head> : Head {};\r
-\r
-template <typename Head, typename... Tail>\r
-struct NameForwarder<Head, Tail...> : Head, NameForwarder<Tail...>\r
+template <typename... Bases>\r
+struct NameForwarder : public Bases...\r
{\r
- using Head::clear;\r
- using NameForwarder<Tail...>::clear;\r
-\r
- using Head::fill;\r
- using NameForwarder<Tail...>::fill;\r
-\r
- using Head::copy;\r
- using NameForwarder<Tail...>::copy;\r
-\r
- using Head::copyWithMultiply;\r
- using NameForwarder<Tail...>::copyWithMultiply;\r
-\r
- using Head::add;\r
- using NameForwarder<Tail...>::add;\r
-\r
- using Head::subtract;\r
- using NameForwarder<Tail...>::subtract;\r
-\r
- using Head::addWithMultiply;\r
- using NameForwarder<Tail...>::addWithMultiply;\r
-\r
- using Head::subtractWithMultiply;\r
- using NameForwarder<Tail...>::subtractWithMultiply;\r
-\r
- using Head::multiply;\r
- using NameForwarder<Tail...>::multiply;\r
-\r
- using Head::negate;\r
- using NameForwarder<Tail...>::negate;\r
-\r
- using Head::abs;\r
- using NameForwarder<Tail...>::abs;\r
-\r
- using Head::min;\r
- using NameForwarder<Tail...>::min;\r
-\r
- using Head::max;\r
- using NameForwarder<Tail...>::max;\r
-\r
- using Head::clip;\r
- using NameForwarder<Tail...>::clip;\r
-\r
- using Head::findMinAndMax;\r
- using NameForwarder<Tail...>::findMinAndMax;\r
-\r
- using Head::findMinimum;\r
- using NameForwarder<Tail...>::findMinimum;\r
-\r
- using Head::findMaximum;\r
- using NameForwarder<Tail...>::findMaximum;\r
+ using Bases::clear...,\r
+ Bases::fill...,\r
+ Bases::copy...,\r
+ Bases::copyWithMultiply...,\r
+ Bases::add...,\r
+ Bases::subtract...,\r
+ Bases::addWithMultiply...,\r
+ Bases::subtractWithMultiply...,\r
+ Bases::multiply...,\r
+ Bases::negate...,\r
+ Bases::abs...,\r
+ Bases::min...,\r
+ Bases::max...,\r
+ Bases::clip...,\r
+ Bases::findMinAndMax...,\r
+ Bases::findMinimum...,\r
+ Bases::findMaximum...;\r
};\r
\r
} // namespace detail\r
#include "sources/juce_ResamplingAudioSource.cpp"\r
#include "sources/juce_ReverbAudioSource.cpp"\r
#include "sources/juce_ToneGeneratorAudioSource.cpp"\r
+#include "sources/juce_PositionableAudioSource.cpp"\r
#include "synthesisers/juce_Synthesiser.cpp"\r
+#include "audio_play_head/juce_AudioPlayHead.cpp"\r
\r
#include "midi/ump/juce_UMP.h"\r
#include "midi/ump/juce_UMPUtils.cpp"\r
#include "midi/ump/juce_UMPView.cpp"\r
#include "midi/ump/juce_UMPSysEx7.cpp"\r
#include "midi/ump/juce_UMPMidi1ToMidi2DefaultTranslator.cpp"\r
+#include "midi/ump/juce_UMPIterator.cpp"\r
\r
#if JUCE_UNIT_TESTS\r
#include "utilities/juce_ADSR_test.cpp"\r
\r
ID: juce_audio_basics\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\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
//==============================================================================\r
#include "buffers/juce_AudioDataConverters.h"\r
+JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4661)\r
#include "buffers/juce_FloatVectorOperations.h"\r
+JUCE_END_IGNORE_WARNINGS_MSVC\r
#include "buffers/juce_AudioSampleBuffer.h"\r
#include "buffers/juce_AudioChannelSet.h"\r
#include "buffers/juce_AudioProcessLoadMeasurer.h"\r
--- /dev/null
+/*\r
+ ==============================================================================\r
+\r
+ This file is part of the JUCE library.\r
+ Copyright (c) 2022 - Raw Material Software Limited\r
+\r
+ JUCE is an open source library subject to commercial or open-source\r
+ licensing.\r
+\r
+ The code included in this file is provided under the terms of the ISC license\r
+ http://www.isc.org/downloads/software-support-policy/isc-license. Permission\r
+ To use, copy, modify, and/or distribute this software for any purpose with or\r
+ without fee is hereby granted provided that the above copyright notice and\r
+ this permission notice appear in all copies.\r
+\r
+ JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER\r
+ EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE\r
+ DISCLAIMED.\r
+\r
+ ==============================================================================\r
+*/\r
+\r
+namespace juce\r
+{\r
+namespace universal_midi_packets\r
+{\r
+\r
+Iterator::Iterator (const uint32_t* ptr, [[maybe_unused]] size_t bytes) noexcept\r
+ : view (ptr)\r
+ #if JUCE_DEBUG\r
+ , bytesRemaining (bytes)\r
+ #endif\r
+{\r
+}\r
+\r
+} // namespace universal_midi_packets\r
+} // namespace juce\r
Iterator() noexcept = default;\r
\r
/** Creates an iterator pointing at `ptr`. */\r
- explicit Iterator (const uint32_t* ptr, size_t bytes) noexcept\r
- : view (ptr)\r
- #if JUCE_DEBUG\r
- , bytesRemaining (bytes)\r
- #endif\r
- {\r
- ignoreUnused (bytes);\r
- }\r
+ explicit Iterator (const uint32_t* ptr, size_t bytes) noexcept;\r
\r
using difference_type = std::iterator_traits<const uint32_t*>::difference_type;\r
using value_type = View;\r
#endif\r
};\r
\r
-}\r
-}\r
+} // namespace universal_midi_packets\r
+} // namespace juce\r
\r
#endif\r
notes.clear();\r
}\r
\r
+//==============================================================================\r
+void MPEInstrument::Listener::noteAdded ([[maybe_unused]] MPENote newNote) {}\r
+void MPEInstrument::Listener::notePressureChanged ([[maybe_unused]] MPENote changedNote) {}\r
+void MPEInstrument::Listener::notePitchbendChanged ([[maybe_unused]] MPENote changedNote) {}\r
+void MPEInstrument::Listener::noteTimbreChanged ([[maybe_unused]] MPENote changedNote) {}\r
+void MPEInstrument::Listener::noteKeyStateChanged ([[maybe_unused]] MPENote changedNote) {}\r
+void MPEInstrument::Listener::noteReleased ([[maybe_unused]] MPENote finishedNote) {}\r
+void MPEInstrument::Listener::zoneLayoutChanged() {}\r
\r
//==============================================================================\r
//==============================================================================\r
/** Implement this callback to be informed whenever a new expressive MIDI\r
note is triggered.\r
*/\r
- virtual void noteAdded (MPENote newNote) { ignoreUnused (newNote); }\r
+ virtual void noteAdded (MPENote newNote);\r
\r
/** Implement this callback to be informed whenever a currently playing\r
MPE note's pressure value changes.\r
*/\r
- virtual void notePressureChanged (MPENote changedNote) { ignoreUnused (changedNote); }\r
+ virtual void notePressureChanged (MPENote changedNote);\r
\r
/** Implement this callback to be informed whenever a currently playing\r
MPE note's pitchbend value changes.\r
master channel pitchbend event, or if both occur simultaneously.\r
Call MPENote::getFrequencyInHertz to get the effective note frequency.\r
*/\r
- virtual void notePitchbendChanged (MPENote changedNote) { ignoreUnused (changedNote); }\r
+ virtual void notePitchbendChanged (MPENote changedNote);\r
\r
/** Implement this callback to be informed whenever a currently playing\r
MPE note's timbre value changes.\r
*/\r
- virtual void noteTimbreChanged (MPENote changedNote) { ignoreUnused (changedNote); }\r
+ virtual void noteTimbreChanged (MPENote changedNote);\r
\r
/** Implement this callback to be informed whether a currently playing\r
MPE note's key state (whether the key is down and/or the note is\r
Note: If the key state changes to MPENote::off, noteReleased is\r
called instead.\r
*/\r
- virtual void noteKeyStateChanged (MPENote changedNote) { ignoreUnused (changedNote); }\r
+ virtual void noteKeyStateChanged (MPENote changedNote);\r
\r
/** Implement this callback to be informed whenever an MPE note\r
is released (either by a note-off message, or by a sustain/sostenuto\r
pedal release for a note that already received a note-off),\r
and should therefore stop playing.\r
*/\r
- virtual void noteReleased (MPENote finishedNote) { ignoreUnused (finishedNote); }\r
+ virtual void noteReleased (MPENote finishedNote);\r
\r
/** Implement this callback to be informed whenever the MPE zone layout\r
or legacy mode settings of this instrument have been changed.\r
*/\r
- virtual void zoneLayoutChanged() {}\r
+ virtual void zoneLayoutChanged();\r
};\r
\r
//==============================================================================\r
--- /dev/null
+/*\r
+ ==============================================================================\r
+\r
+ This file is part of the JUCE library.\r
+ Copyright (c) 2022 - Raw Material Software Limited\r
+\r
+ JUCE is an open source library subject to commercial or open-source\r
+ licensing.\r
+\r
+ The code included in this file is provided under the terms of the ISC license\r
+ http://www.isc.org/downloads/software-support-policy/isc-license. Permission\r
+ To use, copy, modify, and/or distribute this software for any purpose with or\r
+ without fee is hereby granted provided that the above copyright notice and\r
+ this permission notice appear in all copies.\r
+\r
+ JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER\r
+ EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE\r
+ DISCLAIMED.\r
+\r
+ ==============================================================================\r
+*/\r
+\r
+namespace juce\r
+{\r
+\r
+void PositionableAudioSource::setLooping ([[maybe_unused]] bool shouldLoop) {}\r
+\r
+} // namespace juce\r
virtual bool isLooping() const = 0;\r
\r
/** Tells the source whether you'd like it to play in a loop. */\r
- virtual void setLooping (bool shouldLoop) { ignoreUnused (shouldLoop); }\r
+ virtual void setLooping (bool shouldLoop);\r
};\r
\r
} // namespace juce\r
}\r
}\r
\r
-void Synthesiser::handleSoftPedal (int midiChannel, bool /*isDown*/)\r
+void Synthesiser::handleSoftPedal ([[maybe_unused]] int midiChannel, bool /*isDown*/)\r
{\r
- ignoreUnused (midiChannel);\r
jassert (midiChannel > 0 && midiChannel <= 16);\r
}\r
\r
-void Synthesiser::handleProgramChange (int midiChannel, int programNumber)\r
+void Synthesiser::handleProgramChange ([[maybe_unused]] int midiChannel,\r
+ [[maybe_unused]] int programNumber)\r
{\r
- ignoreUnused (midiChannel, programNumber);\r
jassert (midiChannel > 0 && midiChannel <= 16);\r
}\r
\r
namespace juce\r
{\r
\r
+void AudioIODeviceCallback::audioDeviceIOCallbackWithContext ([[maybe_unused]] const float* const* inputChannelData,\r
+ [[maybe_unused]] int numInputChannels,\r
+ [[maybe_unused]] float* const* outputChannelData,\r
+ [[maybe_unused]] int numOutputChannels,\r
+ [[maybe_unused]] int numSamples,\r
+ [[maybe_unused]] const AudioIODeviceCallbackContext& context) {}\r
+\r
+//==============================================================================\r
AudioIODevice::AudioIODevice (const String& deviceName, const String& deviceTypeName)\r
: name (deviceName), typeName (deviceTypeName)\r
{\r
float* const* outputChannelData,\r
int numOutputChannels,\r
int numSamples,\r
- const AudioIODeviceCallbackContext& context)\r
- {\r
- ignoreUnused (inputChannelData, numInputChannels, outputChannelData, numOutputChannels, numSamples, context);\r
- }\r
+ const AudioIODeviceCallbackContext& context);\r
\r
/** Called to indicate that the device is about to start calling back.\r
\r
virtual void audioDeviceError (const String& errorMessage);\r
};\r
\r
-\r
//==============================================================================\r
/**\r
Base class for an audio device with synchronised input and output channels.\r
//==============================================================================\r
#elif JUCE_ANDROID\r
\r
- #include "native/juce_android_Audio.cpp"\r
+namespace juce\r
+{\r
+ using RealtimeThreadFactory = pthread_t (*) (void* (*) (void*), void*);\r
+ RealtimeThreadFactory getAndroidRealtimeThreadFactory();\r
+} // namespace juce\r
+\r
+#include "native/juce_android_Audio.cpp"\r
\r
#include <juce_audio_basics/midi/juce_MidiDataConcatenator.h>\r
#include "native/juce_android_Midi.cpp"\r
\r
#include "native/juce_android_Oboe.cpp"\r
#endif\r
+ #else\r
+// No audio library, so no way to create realtime threads.\r
+ namespace juce\r
+ {\r
+ RealtimeThreadFactory getAndroidRealtimeThreadFactory() { return nullptr; }\r
+ }\r
#endif\r
\r
#endif\r
\r
ID: juce_audio_devices\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\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
namespace juce\r
{\r
\r
+void MidiInputCallback::handlePartialSysexMessage ([[maybe_unused]] MidiInput* source,\r
+ [[maybe_unused]] const uint8* messageData,\r
+ [[maybe_unused]] int numBytesSoFar,\r
+ [[maybe_unused]] double timestamp) {}\r
+\r
+//==============================================================================\r
MidiOutput::MidiOutput (const String& deviceName, const String& deviceIdentifier)\r
: Thread ("midi out"), deviceInfo (deviceName, deviceIdentifier)\r
{\r
virtual void handlePartialSysexMessage (MidiInput* source,\r
const uint8* messageData,\r
int numBytesSoFar,\r
- double timestamp)\r
- {\r
- ignoreUnused (source, messageData, numBytesSoFar, timestamp);\r
- }\r
+ double timestamp);\r
};\r
\r
//==============================================================================\r
STATICMETHOD (getAndroidMidiDeviceManager, "getAndroidMidiDeviceManager", "(Landroid/content/Context;)Lcom/rmsl/juce/JuceMidiSupport$MidiDeviceManager;") \\r
STATICMETHOD (getAndroidBluetoothManager, "getAndroidBluetoothManager", "(Landroid/content/Context;)Lcom/rmsl/juce/JuceMidiSupport$BluetoothManager;")\r
\r
-DECLARE_JNI_CLASS_WITH_BYTECODE (JuceMidiSupport, "com/rmsl/juce/JuceMidiSupport", 23, javaMidiByteCode, sizeof (javaMidiByteCode))\r
+DECLARE_JNI_CLASS_WITH_BYTECODE (JuceMidiSupport, "com/rmsl/juce/JuceMidiSupport", 23, javaMidiByteCode)\r
#undef JNI_CLASS_MEMBERS\r
\r
#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \\r
{\r
if (stream != nullptr)\r
{\r
- oboe::Result result = stream->close();\r
- ignoreUnused (result);\r
+ [[maybe_unused]] oboe::Result result = stream->close();\r
JUCE_OBOE_LOG ("Requested Oboe stream close with result: " + getOboeString (result));\r
}\r
}\r
}\r
\r
// Not strictly required as these should not change, but recommended by Google anyway\r
- void checkStreamSetup (OboeStream* stream, int deviceId, int numChannels, int expectedSampleRate,\r
- int expectedBufferSize, oboe::AudioFormat format)\r
+ void checkStreamSetup (OboeStream* stream,\r
+ [[maybe_unused]] int deviceId,\r
+ [[maybe_unused]] int numChannels,\r
+ [[maybe_unused]] int expectedSampleRate,\r
+ [[maybe_unused]] int expectedBufferSize,\r
+ oboe::AudioFormat format)\r
{\r
- if (auto* nativeStream = stream != nullptr ? stream->getNativeStream() : nullptr)\r
+ if ([[maybe_unused]] auto* nativeStream = stream != nullptr ? stream->getNativeStream() : nullptr)\r
{\r
- ignoreUnused (deviceId, numChannels, sampleRate, expectedBufferSize);\r
- ignoreUnused (streamFormat, bitDepth);\r
-\r
jassert (numChannels == 0 || numChannels == nativeStream->getChannelCount());\r
jassert (expectedSampleRate == 0 || expectedSampleRate == nativeStream->getSampleRate());\r
jassert (format == nativeStream->getFormat());\r
return oboe::DataCallbackResult::Continue;\r
}\r
\r
- void printStreamDebugInfo (oboe::AudioStream* stream)\r
+ void printStreamDebugInfo ([[maybe_unused]] oboe::AudioStream* stream)\r
{\r
- ignoreUnused (stream);\r
-\r
JUCE_OBOE_LOG ("\nUses AAudio = " + (stream != nullptr ? String ((int) stream->usesAAudio()) : String ("?"))\r
+ "\nDirection = " + (stream != nullptr ? getOboeString (stream->getDirection()) : String ("?"))\r
+ "\nSharingMode = " + (stream != nullptr ? getOboeString (stream->getSharingMode()) : String ("?"))\r
return time.tv_sec * oboe::kNanosPerSecond + time.tv_nsec;\r
}\r
\r
- void onErrorBeforeClose (oboe::AudioStream* stream, oboe::Result error) override\r
+ void onErrorBeforeClose (oboe::AudioStream* stream, [[maybe_unused]] oboe::Result error) override\r
{\r
- ignoreUnused (error);\r
-\r
// only output stream should be the master stream receiving callbacks\r
jassert (stream->getDirection() == oboe::Direction::Output);\r
\r
\r
JUCE_OBOE_LOG ("-----InputDevices:");\r
\r
- for (auto& device : inputDevices)\r
+ for ([[maybe_unused]] auto& device : inputDevices)\r
{\r
- ignoreUnused (device);\r
-\r
JUCE_OBOE_LOG ("name = " << device.name);\r
JUCE_OBOE_LOG ("id = " << String (device.id));\r
JUCE_OBOE_LOG ("sample rates size = " << String (device.sampleRates.size()));\r
\r
JUCE_OBOE_LOG ("-----OutputDevices:");\r
\r
- for (auto& device : outputDevices)\r
+ for ([[maybe_unused]] auto& device : outputDevices)\r
{\r
- ignoreUnused (device);\r
-\r
JUCE_OBOE_LOG ("name = " << device.name);\r
JUCE_OBOE_LOG ("id = " << String (device.id));\r
JUCE_OBOE_LOG ("sample rates size = " << String (device.sampleRates.size()));\r
case 22: return "USB headset";\r
case 23: return "hearing aid";\r
case 24: return "built-in speaker safe";\r
- case 25: return {};\r
+ case 25: return "remote submix";\r
+ case 26: return "BLE headset";\r
+ case 27: return "BLE speaker";\r
+ case 28: return "echo reference";\r
+ case 29: return "HDMI eARC";\r
+ case 30: return "BLE broadcast";\r
default: jassertfalse; return {}; // type not supported yet, needs to be added!\r
}\r
}\r
return oboe::DataCallbackResult::Continue;\r
}\r
\r
- void onErrorBeforeClose (oboe::AudioStream*, oboe::Result error) override\r
+ void onErrorBeforeClose (oboe::AudioStream*, [[maybe_unused]] oboe::Result error) override\r
{\r
JUCE_OBOE_LOG ("OboeRealtimeThread: Oboe stream onErrorBeforeClose(): " + getOboeString (error));\r
- ignoreUnused (error);\r
jassertfalse; // Should never get here!\r
}\r
\r
- void onErrorAfterClose (oboe::AudioStream*, oboe::Result error) override\r
+ void onErrorAfterClose (oboe::AudioStream*, [[maybe_unused]] oboe::Result error) override\r
{\r
JUCE_OBOE_LOG ("OboeRealtimeThread: Oboe stream onErrorAfterClose(): " + getOboeString (error));\r
- ignoreUnused (error);\r
jassertfalse; // Should never get here!\r
}\r
\r
};\r
\r
//==============================================================================\r
-pthread_t juce_createRealtimeAudioThread (void* (*entry) (void*), void* userPtr);\r
-pthread_t juce_createRealtimeAudioThread (void* (*entry) (void*), void* userPtr)\r
+RealtimeThreadFactory getAndroidRealtimeThreadFactory()\r
{\r
- auto thread = std::make_unique<OboeRealtimeThread>();\r
+ return [] (void* (*entry) (void*), void* userPtr) -> pthread_t\r
+ {\r
+ auto thread = std::make_unique<OboeRealtimeThread>();\r
\r
- if (! thread->isOk())\r
- return {};\r
+ if (! thread->isOk())\r
+ return {};\r
\r
- auto threadID = thread->startThread (entry, userPtr);\r
+ auto threadID = thread->startThread (entry, userPtr);\r
\r
- // the thread will de-allocate itself\r
- thread.release();\r
+ // the thread will de-allocate itself\r
+ thread.release();\r
\r
- return threadID;\r
+ return threadID;\r
+ };\r
}\r
\r
} // namespace juce\r
}\r
}\r
\r
- void process (const float** inputChannelData, float** outputChannelData)\r
+ void process (const float* const* inputChannelData, float* const* outputChannelData)\r
{\r
if (auto* cb = callback.exchange (nullptr))\r
{\r
T* recorderBuffer = (inputChannels > 0 ? recorder->getNextBuffer() : nullptr);\r
T* playerBuffer = (outputChannels > 0 ? player->getNextBuffer() : nullptr);\r
\r
- const float** inputChannelData = nullptr;\r
- float** outputChannelData = nullptr;\r
+ const float* const* inputChannelData = nullptr;\r
+ float* const* outputChannelData = nullptr;\r
\r
if (recorderBuffer != nullptr)\r
{\r
};\r
\r
//==============================================================================\r
-pthread_t juce_createRealtimeAudioThread (void* (*entry) (void*), void* userPtr);\r
-pthread_t juce_createRealtimeAudioThread (void* (*entry) (void*), void* userPtr)\r
+RealtimeThreadFactory getAndroidRealtimeThreadFactory()\r
{\r
- auto thread = std::make_unique<SLRealtimeThread>();\r
+ return [] (void* (*entry) (void*), void* userPtr) -> pthread_t\r
+ {\r
+ auto thread = std::make_unique<SLRealtimeThread>();\r
\r
- if (! thread->isOk())\r
- return {};\r
+ if (! thread->isOk())\r
+ return {};\r
\r
- auto threadID = thread->startThread (entry, userPtr);\r
+ auto threadID = thread->startThread (entry, userPtr);\r
\r
- // the thread will de-allocate itself\r
- thread.release();\r
+ // the thread will de-allocate itself\r
+ thread.release();\r
\r
- return threadID;\r
+ return threadID;\r
+ };\r
}\r
\r
} // namespace juce\r
impl.fillHostCallbackInfo (callbackInfo);\r
\r
Boolean hostIsPlaying = NO;\r
- OSStatus err = callbackInfo.transportStateProc2 (callbackInfo.hostUserData,\r
- &hostIsPlaying,\r
- nullptr,\r
- nullptr,\r
- nullptr,\r
- nullptr,\r
- nullptr,\r
- nullptr);\r
+ [[maybe_unused]] OSStatus err = callbackInfo.transportStateProc2 (callbackInfo.hostUserData,\r
+ &hostIsPlaying,\r
+ nullptr,\r
+ nullptr,\r
+ nullptr,\r
+ nullptr,\r
+ nullptr,\r
+ nullptr);\r
\r
- ignoreUnused (err);\r
jassert (err == noErr);\r
\r
if (hostIsPlaying != shouldSartPlaying)\r
impl.fillHostCallbackInfo (callbackInfo);\r
\r
Boolean hostIsRecording = NO;\r
- OSStatus err = callbackInfo.transportStateProc2 (callbackInfo.hostUserData,\r
- nullptr,\r
- &hostIsRecording,\r
- nullptr,\r
- nullptr,\r
- nullptr,\r
- nullptr,\r
- nullptr);\r
- ignoreUnused (err);\r
+ [[maybe_unused]] OSStatus err = callbackInfo.transportStateProc2 (callbackInfo.hostUserData,\r
+ nullptr,\r
+ &hostIsRecording,\r
+ nullptr,\r
+ nullptr,\r
+ nullptr,\r
+ nullptr,\r
+ nullptr);\r
jassert (err == noErr);\r
\r
if (hostIsRecording != shouldStartRecording)\r
\r
void handleAudioUnitPropertyChange (AudioUnit,\r
AudioUnitPropertyID propertyID,\r
- AudioUnitScope scope,\r
- AudioUnitElement element)\r
+ [[maybe_unused]] AudioUnitScope scope,\r
+ [[maybe_unused]] AudioUnitElement element)\r
{\r
- ignoreUnused (scope);\r
- ignoreUnused (element);\r
JUCE_IOS_AUDIO_LOG ("handleAudioUnitPropertyChange: propertyID: " << String (propertyID)\r
<< " scope: " << String (scope)\r
<< " element: " << String (element));\r
{\r
UInt32 connected;\r
UInt32 dataSize = sizeof (connected);\r
- OSStatus err = AudioUnitGetProperty (audioUnit, kAudioUnitProperty_IsInterAppConnected,\r
- kAudioUnitScope_Global, 0, &connected, &dataSize);\r
- ignoreUnused (err);\r
+ [[maybe_unused]] OSStatus err = AudioUnitGetProperty (audioUnit, kAudioUnitProperty_IsInterAppConnected,\r
+ kAudioUnitScope_Global, 0, &connected, &dataSize);\r
jassert (err == noErr);\r
\r
JUCE_IOS_AUDIO_LOG ("handleInterAppAudioConnectionChange: " << (connected ? "connected"\r
{\r
zerostruct (callbackInfo);\r
UInt32 dataSize = sizeof (HostCallbackInfo);\r
- OSStatus err = AudioUnitGetProperty (audioUnit,\r
- kAudioUnitProperty_HostCallbacks,\r
- kAudioUnitScope_Global,\r
- 0,\r
- &callbackInfo,\r
- &dataSize);\r
- ignoreUnused (err);\r
+ [[maybe_unused]] OSStatus err = AudioUnitGetProperty (audioUnit,\r
+ kAudioUnitProperty_HostCallbacks,\r
+ kAudioUnitScope_Global,\r
+ 0,\r
+ &callbackInfo,\r
+ &dataSize);\r
jassert (err == noErr);\r
}\r
\r
void handleAudioTransportEvent (AudioUnitRemoteControlEvent event)\r
{\r
- OSStatus err = AudioUnitSetProperty (audioUnit, kAudioOutputUnitProperty_RemoteControlToHost,\r
- kAudioUnitScope_Global, 0, &event, sizeof (event));\r
- ignoreUnused (err);\r
+ [[maybe_unused]] OSStatus err = AudioUnitSetProperty (audioUnit, kAudioOutputUnitProperty_RemoteControlToHost,\r
+ kAudioUnitScope_Global, 0, &event, sizeof (event));\r
jassert (err == noErr);\r
}\r
\r
}\r
}\r
\r
- static void infoShutdownCallback (jack_status_t code, const char* reason, void* arg)\r
+ static void infoShutdownCallback (jack_status_t code, [[maybe_unused]] const char* reason, void* arg)\r
{\r
jassertquiet (code == 0);\r
\r
JUCE_JACK_LOG ("Shutting down with message:");\r
JUCE_JACK_LOG (reason);\r
- ignoreUnused (reason);\r
\r
shutdownCallback (arg);\r
}\r
\r
- static void errorCallback (const char* msg)\r
+ static void errorCallback ([[maybe_unused]] const char* msg)\r
{\r
JUCE_JACK_LOG ("JackAudioIODevice::errorCallback " + String (msg));\r
- ignoreUnused (msg);\r
}\r
\r
bool deviceIsOpen = false;\r
}\r
}\r
\r
- open (inputChannelsRequested, outputChannelsRequested,\r
- newSampleRate, newBufferSize);\r
+ open (inputChannelsRequested, outputChannelsRequested, newSampleRate, newBufferSize);\r
\r
start (cb);\r
}\r
CriticalSection closeLock;\r
int targetLatency = 0;\r
std::atomic<int> xruns { -1 };\r
+ std::atomic<uint64_t> lastValidReadPosition { invalidSampleTime };\r
\r
BigInteger inputChannelsRequested, outputChannelsRequested;\r
double sampleRateRequested = 44100;\r
}\r
\r
auto currentWritePos = writePos.load();\r
+ const auto nextWritePos = currentWritePos + static_cast<std::uint64_t> (n);\r
\r
- writePos.compare_exchange_strong (currentWritePos, currentWritePos + static_cast<std::uint64_t> (n));\r
+ writePos.compare_exchange_strong (currentWritePos, nextWritePos);\r
\r
if (currentWritePos == invalidSampleTime)\r
return;\r
scratchBuffer.getReadPointer (args.channel, args.inputPos),\r
args.nItems);\r
});\r
+\r
+ {\r
+ auto invalid = invalidSampleTime;\r
+ lastValidReadPosition.compare_exchange_strong (invalid, nextWritePos);\r
+ }\r
}\r
\r
void outputAudioCallback (float* const* channels, int numChannels, int n) noexcept\r
}\r
}\r
\r
- accessFifo (currentReadPos, numChannels, n, [&] (const auto& args)\r
+ // If there was an xrun, we want to output zeros until we're sure that there's some valid\r
+ // input for us to read.\r
+ const auto longN = static_cast<uint64_t> (n);\r
+ const auto nextReadPos = currentReadPos + longN;\r
+ const auto validReadPos = lastValidReadPosition.load();\r
+ const auto sanitisedValidReadPos = validReadPos != invalidSampleTime ? validReadPos : nextReadPos;\r
+ const auto numZerosToWrite = sanitisedValidReadPos <= currentReadPos\r
+ ? 0\r
+ : jmin (longN, sanitisedValidReadPos - currentReadPos);\r
+\r
+ for (auto i = 0; i < numChannels; ++i)\r
+ std::fill (channels[i], channels[i] + numZerosToWrite, 0.0f);\r
+\r
+ accessFifo (currentReadPos + numZerosToWrite, numChannels, static_cast<int> (longN - numZerosToWrite), [&] (const auto& args)\r
{\r
- FloatVectorOperations::copy (channels[args.channel] + args.inputPos,\r
+ FloatVectorOperations::copy (channels[args.channel] + args.inputPos + numZerosToWrite,\r
fifo.getReadPointer (args.channel, args.fifoPos),\r
args.nItems);\r
});\r
\r
// use compare exchange here as we need to avoid the case\r
// where we overwrite readPos being equal to invalidSampleTime\r
- readPos.compare_exchange_strong (currentReadPos, currentReadPos + static_cast<std::uint64_t> (n));\r
+ readPos.compare_exchange_strong (currentReadPos, nextReadPos);\r
}\r
\r
void xrun() noexcept\r
struct DeviceWrapper : public AudioIODeviceCallback\r
{\r
DeviceWrapper (AudioIODeviceCombiner& cd, std::unique_ptr<CoreAudioIODevice> d, bool shouldBeInput)\r
- : owner (cd), device (std::move (d)),\r
+ : owner (cd),\r
+ device (std::move (d)),\r
input (shouldBeInput)\r
{\r
device->setAsyncRestarter (&owner);\r
\r
std::uint64_t nsToSampleTime (std::uint64_t ns) const noexcept\r
{\r
- return static_cast<std::uint64_t> (std::round (static_cast<double> (ns) * owner.currentSampleRate * 1e-9));\r
+ return static_cast<std::uint64_t> (std::round (static_cast<double> (ns) * device->getCurrentSampleRate() * 1e-9));\r
}\r
\r
void updateSampleTimeFromContext (const AudioIODeviceCallbackContext& context) noexcept\r
auto copy = invalidSampleTime;\r
\r
if (sampleTime.compare_exchange_strong (copy, callbackSampleTime) && (! input))\r
- owner.fifo.clear();\r
+ owner.lastValidReadPosition = invalidSampleTime;\r
}\r
\r
bool isInput() const { return input; }\r
\r
namespace CoreMidiHelpers\r
{\r
- static bool checkError (OSStatus err, int lineNum)\r
+ static bool checkError (OSStatus err, [[maybe_unused]] int lineNum)\r
{\r
if (err == noErr)\r
return true;\r
Logger::writeToLog ("CoreMIDI error: " + String (lineNum) + " - " + String::toHexString ((int) err));\r
#endif\r
\r
- ignoreUnused (lineNum);\r
return false;\r
}\r
\r
if (pOutputBuffer != nullptr)\r
{\r
JUCE_DS_LOG ("closing output: " + name);\r
- HRESULT hr = pOutputBuffer->Stop();\r
- JUCE_DS_LOG_ERROR (hr); ignoreUnused (hr);\r
+ [[maybe_unused]] HRESULT hr = pOutputBuffer->Stop();\r
+ JUCE_DS_LOG_ERROR (hr);\r
\r
pOutputBuffer->Release();\r
pOutputBuffer = nullptr;\r
if (pInputBuffer != nullptr)\r
{\r
JUCE_DS_LOG ("closing input: " + name);\r
- HRESULT hr = pInputBuffer->Stop();\r
- JUCE_DS_LOG_ERROR (hr); ignoreUnused (hr);\r
+ [[maybe_unused]] HRESULT hr = pInputBuffer->Stop();\r
+ JUCE_DS_LOG_ERROR (hr);\r
\r
pInputBuffer->Release();\r
pInputBuffer = nullptr;\r
namespace WasapiClasses\r
{\r
\r
-static void logFailure (HRESULT hr)\r
+static void logFailure ([[maybe_unused]] HRESULT hr)\r
{\r
- ignoreUnused (hr);\r
jassert (hr != (HRESULT) 0x800401f0); // If you hit this, it means you're trying to call from\r
// a thread which hasn't been initialised with CoInitialize().\r
\r
float* const* outputChannelData,\r
int totalNumOutputChannels,\r
int numSamples,\r
- const AudioIODeviceCallbackContext& context)\r
+ [[maybe_unused]] const AudioIODeviceCallbackContext& context)\r
{\r
- ignoreUnused (context);\r
-\r
// these should have been prepared by audioDeviceAboutToStart()...\r
jassert (sampleRate > 0 && bufferSize > 0);\r
\r
{\r
using namespace AiffFileHelpers;\r
\r
- const bool couldSeekOk = output->setPosition (headerPosition);\r
- ignoreUnused (couldSeekOk);\r
+ [[maybe_unused]] const bool couldSeekOk = output->setPosition (headerPosition);\r
\r
// if this fails, you've given it an output stream that can't seek! It needs\r
// to be able to seek back to write the header\r
packUint32 ((FLAC__uint32) info.total_samples, buffer + 14, 4);\r
memcpy (buffer + 18, info.md5sum, 16);\r
\r
- const bool seekOk = output->setPosition (streamStartPos + 4);\r
- ignoreUnused (seekOk);\r
+ [[maybe_unused]] const bool seekOk = output->setPosition (streamStartPos + 4);\r
\r
// if this fails, you've given it an output stream that can't seek! It needs\r
// to be able to seek back to write the header\r
\r
if (cp.start (processArgs))\r
{\r
- auto childOutput = cp.readAllProcessOutput();\r
- DBG (childOutput); ignoreUnused (childOutput);\r
+ [[maybe_unused]] auto childOutput = cp.readAllProcessOutput();\r
+ DBG (childOutput);\r
\r
cp.waitForProcessToFinish (10000);\r
return tempMP3.getFile().getSize() > 0;\r
\r
void checkCoInitialiseCalled()\r
{\r
- ignoreUnused (CoInitialize (nullptr));\r
+ [[maybe_unused]] const auto result = CoInitialize (nullptr);\r
}\r
\r
void scanFileForDetails()\r
const auto destSize = (bitsPerSample / 8) * (size_t) numSamples;\r
const auto bufferOffset = (int) (bitsPerSample / 8) * startOffsetInDestBuffer;\r
\r
- if (isValid() && hostReader != nullptr)\r
+ if (isValid())\r
{\r
const ScopedTryReadLock readLock (lock);\r
\r
- if (readLock.isLocked())\r
+ if (readLock.isLocked() && hostReader != nullptr)\r
{\r
for (size_t i = 0; i < tmpPtrs.size(); ++i)\r
{\r
\r
ID: juce_audio_formats\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\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
#include <AAX_IFeatureInfo.h>\r
#include <AAX_UIDs.h>\r
\r
-#ifdef AAX_SDK_2p3p1_REVISION\r
- #if AAX_SDK_CURRENT_REVISION >= AAX_SDK_2p3p1_REVISION\r
- #include <AAX_Exception.h>\r
- #include <AAX_Assert.h>\r
- #endif\r
+#if defined (AAX_SDK_2p3p1_REVISION) && AAX_SDK_2p3p1_REVISION <= AAX_SDK_CURRENT_REVISION\r
+ #include <AAX_Exception.h>\r
+ #include <AAX_Assert.h>\r
+#endif\r
+\r
+#if defined (AAX_SDK_2p4p0_REVISION) && AAX_SDK_2p4p0_REVISION <= AAX_SDK_CURRENT_REVISION\r
+ #define JUCE_AAX_HAS_TRANSPORT_NOTIFICATION 1\r
+#else\r
+ #define JUCE_AAX_HAS_TRANSPORT_NOTIFICATION 0\r
+#endif\r
+\r
+#if JUCE_AAX_HAS_TRANSPORT_NOTIFICATION\r
+ #include <AAX_TransportTypes.h>\r
#endif\r
\r
JUCE_END_IGNORE_WARNINGS_MSVC\r
\r
static AAX_CEffectParameters* AAX_CALLBACK Create()\r
{\r
- PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_AAX;\r
-\r
if (PluginHostType::jucePlugInIsRunningInAudioSuiteFn == nullptr)\r
{\r
PluginHostType::jucePlugInIsRunningInAudioSuiteFn = [] (AudioProcessor& processor)\r
\r
case JUCEAlgorithmIDs::preparedFlag:\r
{\r
- const_cast<JuceAAX_Processor*>(this)->preparePlugin();\r
+ const_cast<JuceAAX_Processor*> (this)->preparePlugin();\r
\r
auto numObjects = dataSize / sizeof (uint32_t);\r
auto* objects = static_cast<uint32_t*> (data);\r
return transport.GetCurrentTempo (&bpm) == AAX_SUCCESS ? makeOptional (bpm) : nullopt;\r
}());\r
\r
- info.setTimeSignature ([&]\r
+ const auto signature = [&]\r
{\r
int32_t num = 4, den = 4;\r
\r
return transport.GetCurrentMeter (&num, &den) == AAX_SUCCESS\r
- ? makeOptional (TimeSignature { (int) num, (int) den })\r
- : nullopt;\r
- }());\r
+ ? makeOptional (TimeSignature { (int) num, (int) den })\r
+ : nullopt;\r
+ }();\r
+\r
+ info.setTimeSignature (signature);\r
\r
info.setIsPlaying ([&]\r
{\r
return transport.IsTransportPlaying (&isPlaying) == AAX_SUCCESS && isPlaying;\r
}());\r
\r
- info.setTimeInSamples ([&]\r
+ info.setIsRecording (recordingState.get().orFallback (false));\r
+\r
+ const auto optionalTimeInSamples = [&info, &transport]\r
{\r
int64_t timeInSamples = 0;\r
-\r
return ((! info.getIsPlaying() && transport.GetTimelineSelectionStartPosition (&timeInSamples) == AAX_SUCCESS)\r
- || transport.GetCurrentNativeSampleLocation (&timeInSamples) == AAX_SUCCESS)\r
- ? makeOptional (timeInSamples)\r
- : nullopt;\r
- }());\r
+ || transport.GetCurrentNativeSampleLocation (&timeInSamples) == AAX_SUCCESS)\r
+ ? makeOptional (timeInSamples)\r
+ : nullopt;\r
+ }();\r
\r
- info.setTimeInSeconds ((float) info.getTimeInSamples().orFallback (0) / sampleRate);\r
+ info.setTimeInSamples (optionalTimeInSamples);\r
+ info.setTimeInSeconds ((float) optionalTimeInSamples.orFallback (0) / sampleRate);\r
\r
- info.setPpqPosition ([&]\r
+ const auto tickPosition = [&]\r
{\r
int64_t ticks = 0;\r
\r
- return ((info.getIsPlaying() && transport.GetCustomTickPosition (&ticks, info.getTimeInSamples().orFallback (0))) == AAX_SUCCESS)\r
- || transport.GetCurrentTickPosition (&ticks) == AAX_SUCCESS\r
- ? makeOptional (ticks / 960000.0)\r
- : nullopt;\r
- }());\r
+ return ((info.getIsPlaying() && transport.GetCustomTickPosition (&ticks, optionalTimeInSamples.orFallback (0))) == AAX_SUCCESS)\r
+ || transport.GetCurrentTickPosition (&ticks) == AAX_SUCCESS\r
+ ? makeOptional (ticks)\r
+ : nullopt;\r
+ }();\r
+\r
+ info.setPpqPosition (tickPosition.hasValue() ? makeOptional (static_cast<double> (*tickPosition) / 960'000.0) : nullopt);\r
\r
bool isLooping = false;\r
int64_t loopStartTick = 0, loopEndTick = 0;\r
const auto effectiveRate = info.getFrameRate().hasValue() ? info.getFrameRate()->getEffectiveRate() : 0.0;\r
info.setEditOriginTime (makeOptional (effectiveRate != 0.0 ? offset / effectiveRate : offset));\r
\r
+ {\r
+ int32_t bars{}, beats{};\r
+ int64_t displayTicks{};\r
+\r
+ if (optionalTimeInSamples.hasValue()\r
+ && transport.GetBarBeatPosition (&bars, &beats, &displayTicks, *optionalTimeInSamples) == AAX_SUCCESS)\r
+ {\r
+ info.setBarCount (bars);\r
+\r
+ if (signature.hasValue())\r
+ {\r
+ const auto ticksSinceBar = static_cast<int64_t> (((beats - 1) * 4 * 960'000) / signature->denominator) + displayTicks;\r
+\r
+ if (tickPosition.hasValue() && ticksSinceBar <= tickPosition)\r
+ {\r
+ const auto barStartInTicks = static_cast<double> (*tickPosition - ticksSinceBar);\r
+ info.setPpqPositionOfLastBarStart (barStartInTicks / 960'000.0);\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
return info;\r
}\r
\r
updateSidechainState();\r
break;\r
}\r
+\r
+ #if JUCE_AAX_HAS_TRANSPORT_NOTIFICATION\r
+ case AAX_eNotificationEvent_TransportStateChanged:\r
+ if (data != nullptr)\r
+ {\r
+ const auto& info = *static_cast<const AAX_TransportStateInfo_V1*> (data);\r
+ recordingState.set (info.mIsRecording);\r
+ }\r
+ break;\r
+ #endif\r
}\r
\r
return AAX_CEffectParameters::NotificationReceived (type, data, size);\r
if (idx < mainNumIns)\r
return inputs[inputLayoutMap[idx]];\r
\r
- return (sidechain != -1 ? inputs[sidechain] : sideChainBuffer.getData());\r
+ return (sidechain != -1 ? inputs[sidechain] : sideChainBuffer.data());\r
}\r
\r
void process (const float* const* inputs, float* const* outputs, const int sideChainBufferIdx,\r
friend void AAX_CALLBACK AAXClasses::algorithmProcessCallback (JUCEAlgorithmContext* const instancesBegin[], const void* const instancesEnd);\r
\r
void process (float* const* channels, const int numChans, const int bufferSize,\r
- const bool bypass, AAX_IMIDINode* midiNodeIn, AAX_IMIDINode* midiNodesOut)\r
+ const bool bypass, [[maybe_unused]] AAX_IMIDINode* midiNodeIn, [[maybe_unused]] AAX_IMIDINode* midiNodesOut)\r
{\r
AudioBuffer<float> buffer (channels, numChans, bufferSize);\r
midiBuffer.clear();\r
- ignoreUnused (midiNodeIn, midiNodesOut);\r
\r
#if JucePlugin_WantsMidiInput || JucePlugin_IsMidiEffect\r
{\r
if (lastBufferSize != bufferSize)\r
{\r
lastBufferSize = bufferSize;\r
- pluginInstance->setRateAndBufferSizeDetails (sampleRate, bufferSize);\r
+ pluginInstance->setRateAndBufferSizeDetails (sampleRate, lastBufferSize);\r
\r
+ // we only call prepareToPlay here if the new buffer size is larger than\r
+ // the one used last time prepareToPlay was called.\r
+ // currently, this should never actually happen, because as of Pro Tools 12,\r
+ // the maximum possible value is 1024, and we call prepareToPlay with that\r
+ // value during initialisation.\r
if (bufferSize > maxBufferSize)\r
- {\r
- // we only call prepareToPlay here if the new buffer size is larger than\r
- // the one used last time prepareToPlay was called.\r
- // currently, this should never actually happen, because as of Pro Tools 12,\r
- // the maximum possible value is 1024, and we call prepareToPlay with that\r
- // value during initialisation.\r
- pluginInstance->prepareToPlay (sampleRate, bufferSize);\r
- maxBufferSize = bufferSize;\r
- sideChainBuffer.calloc (static_cast<size_t> (maxBufferSize));\r
- }\r
+ prepareProcessorWithSampleRateAndBufferSize (sampleRate, bufferSize);\r
}\r
\r
if (bypass && pluginInstance->getBypassParameter() == nullptr)\r
audioProcessor.releaseResources();\r
}\r
\r
- audioProcessor.setRateAndBufferSizeDetails (sampleRate, lastBufferSize);\r
- audioProcessor.prepareToPlay (sampleRate, lastBufferSize);\r
- maxBufferSize = lastBufferSize;\r
+ prepareProcessorWithSampleRateAndBufferSize (sampleRate, lastBufferSize);\r
\r
midiBuffer.ensureSize (2048);\r
midiBuffer.clear();\r
-\r
- sideChainBuffer.calloc (static_cast<size_t> (maxBufferSize));\r
}\r
\r
check (Controller()->SetSignalLatency (audioProcessor.getLatencySamples()));\r
}\r
}\r
\r
+ void prepareProcessorWithSampleRateAndBufferSize (double sr, int bs)\r
+ {\r
+ maxBufferSize = jmax (maxBufferSize, bs);\r
+\r
+ auto& audioProcessor = getPluginInstance();\r
+ audioProcessor.setRateAndBufferSizeDetails (sr, maxBufferSize);\r
+ audioProcessor.prepareToPlay (sr, maxBufferSize);\r
+ sideChainBuffer.resize (static_cast<size_t> (maxBufferSize));\r
+ }\r
+\r
//==============================================================================\r
void updateSidechainState()\r
{\r
return;\r
\r
auto& audioProcessor = getPluginInstance();\r
- bool sidechainActual = audioProcessor.getChannelCountOfBus (true, 1) > 0;\r
+ const auto sidechainActual = audioProcessor.getChannelCountOfBus (true, 1) > 0;\r
\r
if (hasSidechain && canDisableSidechain && sidechainDesired != sidechainActual)\r
{\r
bus->setCurrentLayout (lastSideChainState ? AudioChannelSet::mono()\r
: AudioChannelSet::disabled());\r
\r
- audioProcessor.prepareToPlay (audioProcessor.getSampleRate(), audioProcessor.getBlockSize());\r
+ prepareProcessorWithSampleRateAndBufferSize (audioProcessor.getSampleRate(), maxBufferSize);\r
isPrepared = true;\r
}\r
\r
\r
std::unique_ptr<AudioProcessor> pluginInstance;\r
\r
+ static constexpr auto maxSamplesPerBlock = 1 << AAX_eAudioBufferLength_Max;\r
+\r
bool isPrepared = false;\r
MidiBuffer midiBuffer;\r
Array<float*> channelList;\r
int32_t juceChunkIndex = 0, numSetDirtyCalls = 0;\r
AAX_CSampleRate sampleRate = 0;\r
- int lastBufferSize = 1024, maxBufferSize = 1024;\r
+ int lastBufferSize = maxSamplesPerBlock, maxBufferSize = maxSamplesPerBlock;\r
bool hasSidechain = false, canDisableSidechain = false, lastSideChainState = false;\r
\r
+ /* Pro Tools 2021 sends TransportStateChanged on the main thread, but we read\r
+ the recording state on the audio thread.\r
+ I'm not sure whether Pro Tools ensures that these calls are mutually\r
+ exclusive, so to ensure there are no data races, we store the recording\r
+ state in an atomic int and convert it to/from an Optional<bool> as necessary.\r
+ */\r
+ class RecordingState\r
+ {\r
+ public:\r
+ /* This uses Optional rather than std::optional for consistency with get() */\r
+ void set (const Optional<bool> newState)\r
+ {\r
+ state.store (newState.hasValue() ? (flagValid | (*newState ? flagActive : 0))\r
+ : 0,\r
+ std::memory_order_relaxed);\r
+ }\r
+\r
+ /* PositionInfo::setIsRecording takes an Optional<bool>, so we use that type rather\r
+ than std::optional to avoid having to convert.\r
+ */\r
+ Optional<bool> get() const\r
+ {\r
+ const auto loaded = state.load (std::memory_order_relaxed);\r
+ return ((loaded & flagValid) != 0) ? makeOptional ((loaded & flagActive) != 0)\r
+ : nullopt;\r
+ }\r
+\r
+ private:\r
+ enum RecordingFlags\r
+ {\r
+ flagValid = 1 << 0,\r
+ flagActive = 1 << 1\r
+ };\r
+\r
+ std::atomic<int> state { 0 };\r
+ };\r
+\r
+ RecordingState recordingState;\r
+\r
std::atomic<bool> processingSidechainChange, sidechainDesired;\r
\r
- HeapBlock<float> sideChainBuffer;\r
+ std::vector<float> sideChainBuffer;\r
Array<int> inputLayoutMap, outputLayoutMap;\r
\r
Array<String> aaxParamIDs;\r
properties->AddProperty (AAX_eProperty_SupportsSaveRestore, false);\r
#endif\r
\r
+ #if JUCE_AAX_HAS_TRANSPORT_NOTIFICATION\r
+ properties->AddProperty (AAX_eProperty_ObservesTransportState, true);\r
+ #endif\r
+\r
if (fullLayout.getChannelSet (true, 1) == AudioChannelSet::mono())\r
{\r
check (desc.AddSideChainIn (JUCEAlgorithmIDs::sideChainBuffers));\r
return (AAX_STEM_FORMAT_INDEX (stemFormat) <= 12);\r
}\r
\r
- static void getPlugInDescription (AAX_IEffectDescriptor& descriptor, const AAX_IFeatureInfo* featureInfo)\r
+ static void getPlugInDescription (AAX_IEffectDescriptor& descriptor, [[maybe_unused]] const AAX_IFeatureInfo* featureInfo)\r
{\r
- PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_AAX;\r
- std::unique_ptr<AudioProcessor> plugin (createPluginFilterOfType (AudioProcessor::wrapperType_AAX));\r
+ auto plugin = createPluginFilterOfType (AudioProcessor::wrapperType_AAX);\r
auto numInputBuses = plugin->getBusCount (true);\r
auto numOutputBuses = plugin->getBusCount (false);\r
\r
#if JucePlugin_IsMidiEffect\r
// MIDI effect plug-ins do not support any audio channels\r
jassert (numInputBuses == 0 && numOutputBuses == 0);\r
- ignoreUnused (featureInfo);\r
\r
if (auto* desc = descriptor.NewComponentDescriptor())\r
{\r
\r
#include <cstdint>\r
#include <cstdio>\r
+#include <cstring>\r
+#include <vector>\r
\r
#ifdef _WIN32\r
+ #undef UNICODE\r
+ #undef _UNICODE\r
+\r
+ #define UNICODE 1\r
+ #define _UNICODE 1\r
+\r
#include <windows.h>\r
#include <tchar.h>\r
- HMODULE dlopen (const char* filename, int) { return LoadLibrary (filename); }\r
+ HMODULE dlopen (const TCHAR* filename, int) { return LoadLibrary (filename); }\r
FARPROC dlsym (HMODULE handle, const char* name) { return GetProcAddress (handle, name); }\r
void printError()\r
{\r
numElements - 1,\r
nullptr);\r
\r
- _tprintf ("%s", messageBuffer);\r
+ _tprintf (_T ("%s"), messageBuffer);\r
}\r
+\r
enum { RTLD_LAZY = 0 };\r
+\r
+ class ArgList\r
+ {\r
+ public:\r
+ ArgList (int, const char**) {}\r
+ ArgList (const ArgList&) = delete;\r
+ ArgList (ArgList&&) = delete;\r
+ ArgList& operator= (const ArgList&) = delete;\r
+ ArgList& operator= (ArgList&&) = delete;\r
+ ~ArgList() { LocalFree (argv); }\r
+\r
+ LPWSTR get (int i) const { return argv[i]; }\r
+\r
+ int size() const { return argc; }\r
+\r
+ private:\r
+ int argc = 0;\r
+ LPWSTR* argv = CommandLineToArgvW (GetCommandLineW(), &argc);\r
+ };\r
+\r
+ std::vector<char> toUTF8 (const TCHAR* str)\r
+ {\r
+ const auto numBytes = WideCharToMultiByte (CP_UTF8, 0, str, -1, nullptr, 0, nullptr, nullptr);\r
+ std::vector<char> result (numBytes);\r
+ WideCharToMultiByte (CP_UTF8, 0, str, -1, result.data(), static_cast<int> (result.size()), nullptr, nullptr);\r
+ return result;\r
+ }\r
+\r
#else\r
#include <dlfcn.h>\r
void printError() { printf ("%s\n", dlerror()); }\r
+ class ArgList\r
+ {\r
+ public:\r
+ ArgList (int argcIn, const char** argvIn) : argc (argcIn), argv (argvIn) {}\r
+ ArgList (const ArgList&) = delete;\r
+ ArgList (ArgList&&) = delete;\r
+ ArgList& operator= (const ArgList&) = delete;\r
+ ArgList& operator= (ArgList&&) = delete;\r
+ ~ArgList() = default;\r
+\r
+ const char* get (int i) const { return argv[i]; }\r
+\r
+ int size() const { return argc; }\r
+\r
+ private:\r
+ int argc = 0;\r
+ const char** argv = nullptr;\r
+ };\r
+\r
+ std::vector<char> toUTF8 (const char* str) { return std::vector<char> (str, str + std::strlen (str) + 1); }\r
#endif\r
\r
// Replicating part of the LV2 header here so that we don't have to set up any\r
\r
int main (int argc, const char** argv)\r
{\r
- if (argc != 2)\r
+ const ArgList argList { argc, argv };\r
+\r
+ if (argList.size() != 2)\r
return 1;\r
\r
- const auto* libraryPath = argv[1];\r
+ const auto* libraryPath = argList.get (1);\r
\r
struct RecallFeature\r
{\r
if (auto* handle = dlopen (libraryPath, RTLD_LAZY))\r
{\r
if (auto* getDescriptor = reinterpret_cast<const LV2_Descriptor* (*) (uint32_t)> (dlsym (handle, "lv2_descriptor")))\r
+ {\r
if (auto* descriptor = getDescriptor (0))\r
+ {\r
if (auto* extensionData = descriptor->extension_data)\r
+ {\r
if (auto* recallFeature = reinterpret_cast<const RecallFeature*> (extensionData ("https://lv2-extensions.juce.com/turtle_recall")))\r
+ {\r
if (auto* doRecall = recallFeature->doRecall)\r
- return doRecall (libraryPath);\r
+ {\r
+ const auto converted = toUTF8 (libraryPath);\r
+ return doRecall (converted.data());\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
}\r
else\r
{\r
*/\r
static String getIri (const AudioProcessorParameter& param)\r
{\r
- return URL::addEscapeChars (LegacyAudioParameter::getParamID (¶m, false), true);\r
+ const auto urlSanitised = URL::addEscapeChars (LegacyAudioParameter::getParamID (¶m, false), true);\r
+ const auto ttlSanitised = lv2_shared::sanitiseStringAsTtlName (urlSanitised);\r
+\r
+ // If this is hit, the parameter ID could not be represented directly in the plugin ttl.\r
+ // We'll replace offending characters with '_'.\r
+ jassert (urlSanitised == ttlSanitised);\r
+\r
+ return ttlSanitised;\r
}\r
\r
void setValueFromHost (LV2_URID urid, float value) noexcept\r
result.push_back (urid);\r
}\r
\r
+ // If this is hit, some parameters have duplicate IDs.\r
+ // This may be because the IDs resolve to the same string when removing characters that\r
+ // are invalid in a TTL name.\r
+ jassert (std::set<LV2_URID> (result.begin(), result.end()).size() == result.size());\r
+\r
return result;\r
}();\r
const std::map<LV2_URID, size_t> uridToIndexMap = [&]\r
\r
void run (uint32_t numSteps)\r
{\r
+ // If this is hit, the host is trying to process more samples than it told us to prepare\r
+ jassert (static_cast<int> (numSteps) <= processor->getBlockSize());\r
+\r
midi.clear();\r
playHead.invalidate();\r
+ audio.setSize (audio.getNumChannels(), static_cast<int> (numSteps), true, false, true);\r
\r
ports.forEachInputEvent ([&] (const LV2_Atom_Event* event)\r
{\r
processor->setNonRealtime (ports.isFreeWheeling());\r
\r
for (auto i = 0, end = processor->getTotalNumInputChannels(); i < end; ++i)\r
- audio.copyFrom (i, 0, ports.getBufferForAudioInput (i), (int) numSteps);\r
+ audio.copyFrom (i, 0, ports.getBufferForAudioInput (i), audio.getNumSamples());\r
\r
jassert (countNaNs (audio) == 0);\r
\r
\r
static std::unique_ptr<AudioProcessor> createProcessorInstance()\r
{\r
- std::unique_ptr<AudioProcessor> result { createPluginFilterOfType (AudioProcessor::wrapperType_LV2) };\r
+ auto result = createPluginFilterOfType (AudioProcessor::wrapperType_LV2);\r
\r
#if defined (JucePlugin_PreferredChannelConfigurations)\r
constexpr short channelConfigurations[][2] { JucePlugin_PreferredChannelConfigurations };\r
{\r
const ScopedJuceInitialiser_GUI scope;\r
const auto processor = LV2PluginInstance::createProcessorInstance();\r
- const File absolutePath { CharPointer_UTF8 { libraryPath } };\r
+\r
+ const String pathString { CharPointer_UTF8 { libraryPath } };\r
+\r
+ const auto absolutePath = File::isAbsolutePath (pathString) ? File (pathString)\r
+ : File::getCurrentWorkingDirectory().getChildFile (pathString);\r
\r
const auto writers = { writeManifestTtl, writeDspTtl, writeUiTtl };\r
\r
return JucePlugin_LV2URI + String (uriSeparator) + "preset" + String (index + 1);\r
}\r
\r
- static std::ofstream openStream (const File& libraryPath, StringRef name)\r
+ static FileOutputStream openStream (const File& libraryPath, StringRef name)\r
{\r
- return std::ofstream { libraryPath.getSiblingFile (name + ".ttl").getFullPathName().toRawUTF8() };\r
+ return FileOutputStream { libraryPath.getSiblingFile (name + ".ttl") };\r
+ }\r
+\r
+ static Result prepareStream (FileOutputStream& stream)\r
+ {\r
+ if (const auto result = stream.getStatus(); ! result)\r
+ return result;\r
+\r
+ stream.setPosition (0);\r
+ stream.truncate();\r
+ return Result::ok();\r
}\r
\r
static Result writeManifestTtl (AudioProcessor& proc, const File& libraryPath)\r
{\r
auto os = openStream (libraryPath, "manifest");\r
\r
+ if (const auto result = prepareStream (os); ! result)\r
+ return result;\r
+\r
os << "@prefix lv2: <http://lv2plug.in/ns/lv2core#> .\n"\r
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n"\r
"@prefix pset: <http://lv2plug.in/ns/ext/presets#> .\n"\r
#define JUCE_LV2_UI_KIND "CocoaUI"\r
#elif JUCE_WINDOWS\r
#define JUCE_LV2_UI_KIND "WindowsUI"\r
- #elif JUCE_LINUX\r
+ #elif JUCE_LINUX || JUCE_BSD\r
#define JUCE_LV2_UI_KIND "X11UI"\r
#else\r
#error "LV2 UI is unsupported on this platform"\r
{\r
auto os = openStream (libraryPath, "dsp");\r
\r
+ if (const auto result = prepareStream (os); ! result)\r
+ return result;\r
+\r
os << "@prefix atom: <http://lv2plug.in/ns/ext/atom#> .\n"\r
"@prefix bufs: <http://lv2plug.in/ns/ext/buf-size#> .\n"\r
"@prefix doap: <http://usefulinc.com/ns/doap#> .\n"\r
\r
auto os = openStream (libraryPath, "ui");\r
\r
+ if (const auto result = prepareStream (os); ! result)\r
+ return result;\r
+\r
const auto editorInstance = rawToUniquePtr (proc.createEditor());\r
const auto resizeFeatureString = editorInstance->isResizable() ? "ui:resize" : "ui:noUserResize";\r
\r
//==============================================================================\r
LV2_SYMBOL_EXPORT const LV2_Descriptor* lv2_descriptor (uint32_t index)\r
{\r
- PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_LV2;\r
-\r
if (index != 0)\r
return nullptr;\r
\r
public:\r
StandaloneFilterApp()\r
{\r
- PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_Standalone;\r
-\r
PropertiesFile::Options options;\r
\r
options.applicationName = getApplicationName();\r
//==============================================================================\r
virtual void createPlugin()\r
{\r
- processor.reset (createPluginFilterOfType (AudioProcessor::wrapperType_Standalone));\r
+ processor = createPluginFilterOfType (AudioProcessor::wrapperType_Standalone);\r
processor->disableNonMainBuses();\r
processor->setRateAndBufferSizeDetails (44100, 512);\r
\r
return false;\r
}\r
\r
- Image getIAAHostIcon (int size)\r
+ Image getIAAHostIcon ([[maybe_unused]] int size)\r
{\r
#if JUCE_IOS && JucePlugin_Enable_IAA\r
if (auto device = dynamic_cast<iOSAudioIODevice*> (deviceManager.getCurrentAudioDevice()))\r
return device->getIcon (size);\r
#else\r
- ignoreUnused (size);\r
#endif\r
\r
return {};\r
return std::make_unique<LowLevelGraphicsSoftwareRenderer> (Image (this));\r
}\r
\r
- void initialiseBitmapData (Image::BitmapData& bitmap, int x, int y, Image::BitmapData::ReadWriteMode mode) override\r
+ void initialiseBitmapData (Image::BitmapData& bitmap, int x, int y, [[maybe_unused]] Image::BitmapData::ReadWriteMode mode) override\r
{\r
- ignoreUnused (mode);\r
-\r
const auto offset = (size_t) x * (size_t) pixelStride + (size_t) y * (size_t) lineStride;\r
bitmap.data = imageData + offset;\r
bitmap.size = (size_t) (lineStride * height) - offset;\r
public:\r
AudioProcessorUnityWrapper (bool isTemporary)\r
{\r
- pluginInstance.reset (createPluginFilterOfType (AudioProcessor::wrapperType_Unity));\r
+ pluginInstance = createPluginFilterOfType (AudioProcessor::wrapperType_Unity);\r
\r
if (! isTemporary && pluginInstance->hasEditor())\r
{\r
result.setPosition = [] (UnityAudioEffectState* state, unsigned int pos)\r
{\r
ignoreUnused (state, pos);\r
-\r
return 0;\r
};\r
\r
juce::initialiseJuce_GUI();\r
\r
static std::once_flag flag;\r
- std::call_once (flag, []\r
- {\r
- juce::PluginHostType::jucePlugInClientCurrentWrapperType = juce::AudioProcessor::wrapperType_Unity;\r
- juce::juce_createUnityPeerFn = juce::createUnityPeer;\r
- });\r
+ std::call_once (flag, [] { juce::juce_createUnityPeerFn = juce::createUnityPeer; });\r
\r
static auto definition = juce::getEffectDefinition();\r
static UnityAudioEffectDefinition* definitions[] { &definition };\r
, public Timer\r
#endif\r
{\r
- EditorCompWrapper (JuceVSTWrapper& w, AudioProcessorEditor& editor, float initialScale)\r
+ EditorCompWrapper (JuceVSTWrapper& w, AudioProcessorEditor& editor, [[maybe_unused]] float initialScale)\r
: wrapper (w)\r
{\r
editor.setOpaque (true);\r
#if ! JUCE_MAC\r
editor.setScaleFactor (initialScale);\r
- #else\r
- ignoreUnused (initialScale);\r
#endif\r
addAndMakeVisible (editor);\r
\r
return 0;\r
}\r
\r
- pointer_sized_int handlePreAudioProcessingEvents (VstOpCodeArguments args)\r
+ pointer_sized_int handlePreAudioProcessingEvents ([[maybe_unused]] VstOpCodeArguments args)\r
{\r
#if JucePlugin_WantsMidiInput || JucePlugin_IsMidiEffect\r
VSTMidiEventList::addEventsToMidiBuffer ((Vst2::VstEvents*) args.ptr, midiEvents);\r
return 1;\r
#else\r
- ignoreUnused (args);\r
return 0;\r
#endif\r
}\r
if (pluginHasSidechainsOrAuxs() || processor->isMidiEffect())\r
return false;\r
\r
- auto inputLayout = processor->getChannelLayoutOfBus (true, 0);\r
- auto outputLayout = processor->getChannelLayoutOfBus (false, 0);\r
+ auto inputLayout = processor->getChannelLayoutOfBus (true, 0);\r
+ auto outputLayout = processor->getChannelLayoutOfBus (false, 0);\r
\r
- auto speakerBaseSize = sizeof (Vst2::VstSpeakerArrangement) - (sizeof (Vst2::VstSpeakerProperties) * 8);\r
+ const auto speakerBaseSize = offsetof (Vst2::VstSpeakerArrangement, speakers);\r
\r
- cachedInArrangement .malloc (speakerBaseSize + (static_cast<std::size_t> (inputLayout. size()) * sizeof (Vst2::VstSpeakerArrangement)), 1);\r
- cachedOutArrangement.malloc (speakerBaseSize + (static_cast<std::size_t> (outputLayout.size()) * sizeof (Vst2::VstSpeakerArrangement)), 1);\r
+ cachedInArrangement .malloc (speakerBaseSize + (static_cast<std::size_t> (inputLayout. size()) * sizeof (Vst2::VstSpeakerProperties)), 1);\r
+ cachedOutArrangement.malloc (speakerBaseSize + (static_cast<std::size_t> (outputLayout.size()) * sizeof (Vst2::VstSpeakerProperties)), 1);\r
\r
*pluginInput = cachedInArrangement. getData();\r
*pluginOutput = cachedOutArrangement.getData();\r
return 0;\r
}\r
\r
- pointer_sized_int handleSetContentScaleFactor (float scale, bool force = false)\r
+ pointer_sized_int handleSetContentScaleFactor ([[maybe_unused]] float scale, [[maybe_unused]] bool force = false)\r
{\r
checkWhetherMessageThreadIsCorrect();\r
#if JUCE_LINUX || JUCE_BSD\r
if (editorComp != nullptr)\r
editorComp->setContentScaleFactor (editorScaleFactor);\r
}\r
-\r
- #else\r
- ignoreUnused (scale, force);\r
#endif\r
\r
return 1;\r
JUCE_EXPORTED_FUNCTION Vst2::AEffect* VSTPluginMain (Vst2::audioMasterCallback audioMaster);\r
JUCE_EXPORTED_FUNCTION Vst2::AEffect* VSTPluginMain (Vst2::audioMasterCallback audioMaster)\r
{\r
- PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
-\r
initialiseMacVST();\r
return pluginEntryPoint (audioMaster);\r
}\r
JUCE_EXPORTED_FUNCTION Vst2::AEffect* main_macho (Vst2::audioMasterCallback audioMaster);\r
JUCE_EXPORTED_FUNCTION Vst2::AEffect* main_macho (Vst2::audioMasterCallback audioMaster)\r
{\r
- PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
-\r
initialiseMacVST();\r
return pluginEntryPoint (audioMaster);\r
}\r
JUCE_EXPORTED_FUNCTION Vst2::AEffect* VSTPluginMain (Vst2::audioMasterCallback audioMaster);\r
JUCE_EXPORTED_FUNCTION Vst2::AEffect* VSTPluginMain (Vst2::audioMasterCallback audioMaster)\r
{\r
- PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
-\r
return pluginEntryPoint (audioMaster);\r
}\r
\r
JUCE_EXPORTED_FUNCTION Vst2::AEffect* main_plugin (Vst2::audioMasterCallback audioMaster) asm ("main");\r
JUCE_EXPORTED_FUNCTION Vst2::AEffect* main_plugin (Vst2::audioMasterCallback audioMaster)\r
{\r
- PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
-\r
return VSTPluginMain (audioMaster);\r
}\r
\r
\r
extern "C" __declspec (dllexport) Vst2::AEffect* VSTPluginMain (Vst2::audioMasterCallback audioMaster)\r
{\r
- PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
-\r
return pluginEntryPoint (audioMaster);\r
}\r
\r
#if ! defined (JUCE_64BIT) && JUCE_MSVC // (can't compile this on win64, but it's not needed anyway with VST2.4)\r
extern "C" __declspec (dllexport) int main (Vst2::audioMasterCallback audioMaster)\r
{\r
- PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
-\r
return (int) pluginEntryPoint (audioMaster);\r
}\r
#endif\r
}\r
\r
JUCE_API void* attachComponentToWindowRefVST (Component* comp, void* parentWindowOrView, bool isNSView);\r
-void* attachComponentToWindowRefVST (Component* comp, void* parentWindowOrView, bool isNSView)\r
+void* attachComponentToWindowRefVST (Component* comp, void* parentWindowOrView, [[maybe_unused]] bool isNSView)\r
{\r
JUCE_AUTORELEASEPOOL\r
{\r
}\r
#endif\r
\r
- ignoreUnused (isNSView);\r
NSView* parentView = [(NSView*) parentWindowOrView retain];\r
\r
#if JucePlugin_EditorRequiresKeyboardFocus\r
}\r
\r
JUCE_API void detachComponentFromWindowRefVST (Component* comp, void* window, bool isNSView);\r
-void detachComponentFromWindowRefVST (Component* comp, void* window, bool isNSView)\r
+void detachComponentFromWindowRefVST (Component* comp, void* window, [[maybe_unused]] bool isNSView)\r
{\r
JUCE_AUTORELEASEPOOL\r
{\r
}\r
#endif\r
\r
- ignoreUnused (isNSView);\r
comp->removeFromDesktop();\r
[(id) window release];\r
}\r
}\r
\r
JUCE_API void setNativeHostWindowSizeVST (void* window, Component* component, int newWidth, int newHeight, bool isNSView);\r
-void setNativeHostWindowSizeVST (void* window, Component* component, int newWidth, int newHeight, bool isNSView)\r
+void setNativeHostWindowSizeVST (void* window, Component* component, int newWidth, int newHeight, [[maybe_unused]] bool isNSView)\r
{\r
JUCE_AUTORELEASEPOOL\r
{\r
}\r
#endif\r
\r
- ignoreUnused (isNSView);\r
-\r
if (NSView* hostView = (NSView*) window)\r
{\r
const int dx = newWidth - component->getWidth();\r
}\r
\r
JUCE_API void checkWindowVisibilityVST (void* window, Component* comp, bool isNSView);\r
-void checkWindowVisibilityVST (void* window, Component* comp, bool isNSView)\r
+void checkWindowVisibilityVST ([[maybe_unused]] void* window,\r
+ [[maybe_unused]] Component* comp,\r
+ [[maybe_unused]] bool isNSView)\r
{\r
- ignoreUnused (window, comp, isNSView);\r
-\r
#if ! JUCE_64BIT\r
if (! isNSView)\r
comp->setVisible ([((NSWindow*) window) isVisible]);\r
}\r
\r
JUCE_API bool forwardCurrentKeyEventToHostVST (Component* comp, bool isNSView);\r
-bool forwardCurrentKeyEventToHostVST (Component* comp, bool isNSView)\r
+bool forwardCurrentKeyEventToHostVST ([[maybe_unused]] Component* comp, [[maybe_unused]] bool isNSView)\r
{\r
#if ! JUCE_64BIT\r
if (! isNSView)\r
}\r
#endif\r
\r
- ignoreUnused (comp, isNSView);\r
return false;\r
}\r
\r
}\r
\r
//==============================================================================\r
- tresult PLUGIN_API getMidiControllerAssignment (Steinberg::int32 /*busIndex*/, Steinberg::int16 channel,\r
- Vst::CtrlNumber midiControllerNumber, Vst::ParamID& resultID) override\r
+ tresult PLUGIN_API getMidiControllerAssignment ([[maybe_unused]] Steinberg::int32 busIndex,\r
+ [[maybe_unused]] Steinberg::int16 channel,\r
+ [[maybe_unused]] Vst::CtrlNumber midiControllerNumber,\r
+ [[maybe_unused]] Vst::ParamID& resultID) override\r
{\r
#if JUCE_VST3_EMULATE_MIDI_CC_WITH_PARAMETERS\r
resultID = midiControllerToParameter[channel][midiControllerNumber];\r
return kResultTrue; // Returning false makes some hosts stop asking for further MIDI Controller Assignments\r
#else\r
- ignoreUnused (channel, midiControllerNumber, resultID);\r
return kResultFalse;\r
#endif\r
}\r
return kResultFalse;\r
}\r
\r
- tresult PLUGIN_API setContentScaleFactor (const Steinberg::IPlugViewContentScaleSupport::ScaleFactor factor) override\r
+ tresult PLUGIN_API setContentScaleFactor ([[maybe_unused]] const Steinberg::IPlugViewContentScaleSupport::ScaleFactor factor) override\r
{\r
#if ! JUCE_MAC\r
const auto scaleToApply = [&]\r
\r
return kResultTrue;\r
#else\r
- ignoreUnused (factor);\r
return kResultFalse;\r
#endif\r
}\r
{\r
public:\r
JuceVST3Component (Vst::IHostApplication* h)\r
- : pluginInstance (createPluginFilterOfType (AudioProcessor::wrapperType_VST3)),\r
+ : pluginInstance (createPluginFilterOfType (AudioProcessor::wrapperType_VST3).release()),\r
host (h)\r
{\r
inParameterChangedCallback = false;\r
\r
#ifdef JucePlugin_PreferredChannelConfigurations\r
short configs[][2] = { JucePlugin_PreferredChannelConfigurations };\r
- const int numConfigs = numElementsInArray (configs);\r
+ [[maybe_unused]] const int numConfigs = numElementsInArray (configs);\r
\r
- ignoreUnused (numConfigs);\r
jassert (numConfigs > 0 && (configs[0][0] > 0 || configs[0][1] > 0));\r
\r
pluginInstance->setPlayConfigDetails (configs[0][0], configs[0][1], 44100.0, 1024);\r
//==============================================================================\r
tresult PLUGIN_API setActive (TBool state) override\r
{\r
- active = (state != 0);\r
+ const auto willBeActive = (state != 0);\r
\r
- if (! state)\r
- {\r
- getPluginInstance().releaseResources();\r
- }\r
- else\r
- {\r
- auto sampleRate = getPluginInstance().getSampleRate();\r
- auto bufferSize = getPluginInstance().getBlockSize();\r
+ active = false;\r
+ // Some hosts may call setBusArrangements in response to calls made during prepareToPlay\r
+ // or releaseResources. Specifically, Wavelab 11.1 calls setBusArrangements in the same\r
+ // call stack when the AudioProcessor calls setLatencySamples inside prepareToPlay.\r
+ // In order for setBusArrangements to return successfully, the plugin must not be activated\r
+ // until after prepareToPlay has completely finished.\r
+ const ScopeGuard scope { [&] { active = willBeActive; } };\r
\r
- sampleRate = processSetup.sampleRate > 0.0\r
- ? processSetup.sampleRate\r
- : sampleRate;\r
+ if (willBeActive)\r
+ {\r
+ const auto sampleRate = processSetup.sampleRate > 0.0\r
+ ? processSetup.sampleRate\r
+ : getPluginInstance().getSampleRate();\r
\r
- bufferSize = processSetup.maxSamplesPerBlock > 0\r
- ? (int) processSetup.maxSamplesPerBlock\r
- : bufferSize;\r
+ const auto bufferSize = processSetup.maxSamplesPerBlock > 0\r
+ ? (int) processSetup.maxSamplesPerBlock\r
+ : getPluginInstance().getBlockSize();\r
\r
preparePlugin (sampleRate, bufferSize, CallPrepareToPlay::yes);\r
}\r
+ else\r
+ {\r
+ getPluginInstance().releaseResources();\r
+ }\r
\r
return kResultOk;\r
}\r
// The VST3 plugin entry point.\r
extern "C" SMTG_EXPORT_SYMBOL IPluginFactory* PLUGIN_API GetPluginFactory()\r
{\r
- PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST3;\r
-\r
#if (JUCE_MSVC || (JUCE_WINDOWS && JUCE_CLANG)) && JUCE_32BIT\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
\r
ID: juce_audio_plugin_client\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\r
name: JUCE audio plugin wrapper classes\r
description: Classes for building VST, VST3, AU, AUv3 and AAX plugins.\r
website: http://www.juce.com/juce\r
JUCE_CREATE_APPLICATION_DEFINE(juce::StandaloneFilterApp)\r
#endif\r
\r
-JUCE_MAIN_FUNCTION_DEFINITION\r
+#if ! JUCE_USE_CUSTOM_PLUGIN_STANDALONE_ENTRYPOINT\r
+ JUCE_MAIN_FUNCTION_DEFINITION\r
+#endif\r
\r
#endif\r
namespace juce\r
{\r
\r
-inline AudioProcessor* JUCE_API JUCE_CALLTYPE createPluginFilterOfType (AudioProcessor::WrapperType type)\r
+inline std::unique_ptr<AudioProcessor> createPluginFilterOfType (AudioProcessor::WrapperType type)\r
{\r
+ PluginHostType::jucePlugInClientCurrentWrapperType = type;\r
AudioProcessor::setTypeOfNextNewPlugin (type);\r
- AudioProcessor* const pluginInstance = ::createPluginFilter();\r
+ auto pluginInstance = rawToUniquePtr (::createPluginFilter());\r
AudioProcessor::setTypeOfNextNewPlugin (AudioProcessor::wrapperType_Undefined);\r
\r
// your createPluginFilter() method must return an object!\r
jassert (pluginInstance != nullptr && pluginInstance->wrapperType == type);\r
\r
#if JucePlugin_Enable_ARA\r
- jassert (dynamic_cast<juce::AudioProcessorARAExtension*> (pluginInstance) != nullptr);\r
+ jassert (dynamic_cast<juce::AudioProcessorARAExtension*> (pluginInstance.get()) != nullptr);\r
#endif\r
\r
return pluginInstance;\r
const auto juce_strcat = [] (auto&& head, auto&&... tail) { strcat_s (head, numElementsInArray (head), tail...); };\r
const auto juce_sscanf = [] (auto&&... args) { sscanf_s (args...); };\r
#else\r
- const auto juce_sprintf = [] (auto&&... args) { sprintf (args...); };\r
+ const auto juce_sprintf = [] (auto&& head, auto&&... tail) { snprintf (head, (size_t) numElementsInArray (head), tail...); };\r
const auto juce_strcpy = [] (auto&&... args) { strcpy (args...); };\r
const auto juce_strcat = [] (auto&&... args) { strcat (args...); };\r
const auto juce_sscanf = [] (auto&&... args) { sscanf (args...); };\r
\r
#if JucePlugin_Build_VST\r
bool JUCE_API handleManufacturerSpecificVST2Opcode (int32 index, pointer_sized_int value, void* ptr, float);\r
- bool JUCE_API handleManufacturerSpecificVST2Opcode (int32 index, pointer_sized_int value, void* ptr, float)\r
+ bool JUCE_API handleManufacturerSpecificVST2Opcode ([[maybe_unused]] int32 index,\r
+ [[maybe_unused]] pointer_sized_int value,\r
+ [[maybe_unused]] void* ptr,\r
+ float)\r
{\r
#if VST3_REPLACEMENT_AVAILABLE\r
if ((index == (int32) ByteOrder::bigEndianInt ("stCA") || index == (int32) ByteOrder::bigEndianInt ("stCa"))\r
::memcpy (ptr, fuid, 16);\r
return true;\r
}\r
- #else\r
- ignoreUnused (index, value, ptr);\r
#endif\r
return false;\r
}\r
\r
#if JUCE_DEBUG\r
// you should only call this method once!\r
- for (auto* format : formats)\r
+ for (auto* format [[maybe_unused]] : formats)\r
{\r
- ignoreUnused (format);\r
-\r
#if HAS_VST\r
jassert (dynamic_cast<VSTPluginFormat*> (format) == nullptr);\r
#endif\r
return false;\r
}\r
\r
- static bool getComponentDescFromFile (const String& fileOrIdentifier, AudioComponentDescription& desc,\r
- String& name, String& version, String& manufacturer)\r
+ static bool getComponentDescFromFile ([[maybe_unused]] const String& fileOrIdentifier,\r
+ [[maybe_unused]] AudioComponentDescription& desc,\r
+ [[maybe_unused]] String& name,\r
+ [[maybe_unused]] String& version,\r
+ [[maybe_unused]] String& manufacturer)\r
{\r
zerostruct (desc);\r
\r
#if JUCE_IOS\r
- ignoreUnused (fileOrIdentifier, name, version, manufacturer);\r
-\r
return false;\r
#else\r
const File file (fileOrIdentifier);\r
}\r
}\r
\r
-static bool hasARAExtension (AudioUnit audioUnit)\r
+static bool hasARAExtension ([[maybe_unused]] AudioUnit audioUnit)\r
{\r
#if JUCE_PLUGINHOST_ARA\r
UInt32 propertySize = sizeof (ARA::ARAAudioUnitFactory);\r
\r
if ((status == noErr) && (propertySize == sizeof (ARA::ARAAudioUnitFactory)) && ! isWriteable)\r
return true;\r
- #else\r
- ignoreUnused (audioUnit);\r
#endif\r
\r
return false;\r
using AudioUnitSharedPtr = std::shared_ptr<std::remove_pointer_t<AudioUnit>>;\r
using AudioUnitWeakPtr = std::weak_ptr<std::remove_pointer_t<AudioUnit>>;\r
\r
-static std::shared_ptr<const ARA::ARAFactory> getARAFactory (AudioUnitSharedPtr audioUnit)\r
+static std::shared_ptr<const ARA::ARAFactory> getARAFactory ([[maybe_unused]] AudioUnitSharedPtr audioUnit)\r
{\r
#if JUCE_PLUGINHOST_ARA\r
jassert (audioUnit != nullptr);\r
[owningAuPtr = std::move (audioUnit)]() {});\r
}\r
}\r
- #else\r
- ignoreUnused (audioUnit);\r
#endif\r
\r
return {};\r
}\r
}\r
\r
- void embedViewController (JUCE_IOS_MAC_VIEW* pluginView, const CGSize& size)\r
+ void embedViewController (JUCE_IOS_MAC_VIEW* pluginView, [[maybe_unused]] const CGSize& size)\r
{\r
wrapper.setView (pluginView);\r
waitingForViewCallback = false;\r
\r
#if JUCE_MAC\r
- ignoreUnused (size);\r
if (pluginView != nil)\r
wrapper.resizeToFitView();\r
#else\r
\r
bool waitingForViewCallback = false;\r
\r
- bool createView (bool createGenericViewIfNeeded)\r
+ bool createView ([[maybe_unused]] bool createGenericViewIfNeeded)\r
{\r
JUCE_IOS_MAC_VIEW* pluginView = nil;\r
UInt32 dataSize = 0;\r
\r
pluginView = [[AUGenericView alloc] initWithAudioUnit: plugin.audioUnit];\r
}\r
- #else\r
- ignoreUnused (createGenericViewIfNeeded);\r
#endif\r
\r
wrapper.setView (pluginView);\r
void getCurrentProgramStateInformation (MemoryBlock& destData) override { getStateInformation (destData); }\r
void setCurrentProgramStateInformation (const void* data, int sizeInBytes) override { setStateInformation (data, sizeInBytes); }\r
\r
- void setStateInformation (const void* data, int sizeInBytes) override\r
+ void setStateInformation (const void* data, [[maybe_unused]] int sizeInBytes) override\r
{\r
- ignoreUnused (sizeInBytes);\r
-\r
auto* p = static_cast<const float*> (data);\r
\r
for (int i = 0; i < getParameters().size(); ++i)\r
return result;\r
}\r
\r
+/* See https://www.w3.org/TeamSubmission/turtle/#sec-grammar-grammar\r
+*/\r
+static inline bool isNameStartChar (juce_wchar input)\r
+{\r
+ return ('A' <= input && input <= 'Z')\r
+ || input == '_'\r
+ || ('a' <= input && input <= 'z')\r
+ || (0x000c0 <= input && input <= 0x000d6)\r
+ || (0x000d8 <= input && input <= 0x000f6)\r
+ || (0x000f8 <= input && input <= 0x000ff)\r
+ || (0x00370 <= input && input <= 0x0037d)\r
+ || (0x0037f <= input && input <= 0x01fff)\r
+ || (0x0200c <= input && input <= 0x0200d)\r
+ || (0x02070 <= input && input <= 0x0218f)\r
+ || (0x02c00 <= input && input <= 0x02fef)\r
+ || (0x03001 <= input && input <= 0x0d7ff)\r
+ || (0x0f900 <= input && input <= 0x0fdcf)\r
+ || (0x0fdf0 <= input && input <= 0x0fffd)\r
+ || (0x10000 <= input && input <= 0xeffff);\r
+}\r
+\r
+static inline bool isNameChar (juce_wchar input)\r
+{\r
+ return isNameStartChar (input)\r
+ || input == '-'\r
+ || ('0' <= input && input <= '9')\r
+ || input == 0x000b7\r
+ || (0x00300 <= input && input <= 0x0036f)\r
+ || (0x0203f <= input && input <= 0x02040);\r
+}\r
+\r
+static inline String sanitiseStringAsTtlName (const String& input)\r
+{\r
+ if (input.isEmpty())\r
+ return {};\r
+\r
+ std::vector<juce_wchar> sanitised;\r
+ sanitised.reserve (static_cast<size_t> (input.length()));\r
+\r
+ sanitised.push_back (isNameStartChar (input[0]) ? input[0] : '_');\r
+\r
+ std::for_each (std::begin (input) + 1, std::end (input), [&] (juce_wchar x)\r
+ {\r
+ sanitised.push_back (isNameChar (x) ? x : '_');\r
+ });\r
+\r
+ return String (CharPointer_UTF32 { sanitised.data() }, sanitised.size());\r
+}\r
+\r
}\r
}\r
\r
LV2_Options_Option* options,\r
LV2_Worker_Schedule* schedule,\r
LV2_Resize_Port_Resize* resize,\r
- LV2_Log_Log* log)\r
+ [[maybe_unused]] LV2_Log_Log* log)\r
{\r
- ignoreUnused (log);\r
-\r
return { LV2_Feature { LV2_STATE__loadDefaultState, nullptr },\r
LV2_Feature { LV2_BUF_SIZE__boundedBlockLength, nullptr },\r
LV2_Feature { LV2_URID__map, map },\r
\r
ports.forEachPort ([&] (const PortHeader& header)\r
{\r
- const auto emplaced = result.emplace (header.symbol, header.index);\r
+ [[maybe_unused]] const auto emplaced = result.emplace (header.symbol, header.index);\r
\r
// This will complain if there are duplicate port symbols.\r
jassert (emplaced.second);\r
- ignoreUnused (emplaced);\r
});\r
\r
return result;\r
: freeWheelingPort->info.min;\r
}\r
\r
- void pushMessage (MessageHeader header, uint32_t size, const void* data)\r
+ void pushMessage (MessageHeader header, [[maybe_unused]] uint32_t size, const void* data)\r
{\r
- ignoreUnused (size);\r
-\r
if (header.protocol == 0 || header.protocol == instance->urids.mLV2_UI__floatProtocol)\r
{\r
const auto value = readUnaligned<float> (data);\r
"-Wtype-limits",\r
"-Wcpp",\r
"-W#warnings",\r
- "-Wmaybe-uninitialized")\r
+ "-Wmaybe-uninitialized",\r
+ "-Wunused-but-set-variable")\r
\r
#undef DEVELOPMENT\r
#define DEVELOPMENT 0 // This avoids a Clang warning in Steinberg code about unused values\r
tresult PLUGIN_API setDirty (TBool) override;\r
\r
//==============================================================================\r
- tresult PLUGIN_API requestOpenEditor (FIDString name) override\r
+ tresult PLUGIN_API requestOpenEditor ([[maybe_unused]] FIDString name) override\r
{\r
- ignoreUnused (name);\r
jassertfalse;\r
return kResultFalse;\r
}\r
}\r
\r
template <typename Callback>\r
-static void forEachARAFactory (IPluginFactory* pluginFactory, Callback&& cb)\r
+static void forEachARAFactory ([[maybe_unused]] IPluginFactory* pluginFactory, [[maybe_unused]] Callback&& cb)\r
{\r
#if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX)\r
const auto numClasses = pluginFactory->countClasses();\r
break;\r
}\r
}\r
- #else\r
- ignoreUnused (pluginFactory, cb);\r
#endif\r
}\r
\r
-static std::shared_ptr<const ARA::ARAFactory> getARAFactory (Steinberg::IPluginFactory* pluginFactory, const String& pluginName)\r
+static std::shared_ptr<const ARA::ARAFactory> getARAFactory ([[maybe_unused]] Steinberg::IPluginFactory* pluginFactory,\r
+ [[maybe_unused]] const String& pluginName)\r
{\r
std::shared_ptr<const ARA::ARAFactory> factory;\r
\r
\r
return true;\r
});\r
- #else\r
- ignoreUnused (pluginFactory, pluginName);\r
#endif\r
\r
return factory;\r
return;\r
}\r
\r
- const auto attachedResult = view->attached ((void*) pluginHandle, defaultVST3WindowType);\r
- ignoreUnused (warnOnFailure (attachedResult));\r
+ [[maybe_unused]] const auto attachedResult = view->attached ((void*) pluginHandle, defaultVST3WindowType);\r
+ [[maybe_unused]] const auto warning = warnOnFailure (attachedResult);\r
\r
if (attachedResult == kResultOk)\r
attachedCalled = true;\r
{\r
if (scaleInterface != nullptr)\r
{\r
- const auto result = scaleInterface->setContentScaleFactor ((Steinberg::IPlugViewContentScaleSupport::ScaleFactor) getEffectiveScale());\r
- ignoreUnused (result);\r
+ [[maybe_unused]] const auto result = scaleInterface->setContentScaleFactor ((Steinberg::IPlugViewContentScaleSupport::ScaleFactor) getEffectiveScale());\r
\r
#if ! JUCE_MAC\r
- ignoreUnused (warnOnFailure (result));\r
+ [[maybe_unused]] const auto warning = warnOnFailure (result);\r
#endif\r
}\r
}\r
if (classIdx >= 0)\r
{\r
PClassInfo info;\r
- bool success = (factory->getClassInfo (classIdx, &info) == kResultOk);\r
- ignoreUnused (success);\r
+ [[maybe_unused]] bool success = (factory->getClassInfo (classIdx, &info) == kResultOk);\r
jassert (success);\r
\r
VSTComSmartPtr<IPluginFactory2> pf2;\r
\r
auto configureParameters = [this]\r
{\r
- refreshParameterList();\r
+ initialiseParameterList();\r
synchroniseStates();\r
syncProgramNames();\r
};\r
}\r
\r
/** @note Not applicable to VST3 */\r
- void setCurrentProgramStateInformation (const void* data, int sizeInBytes) override\r
+ void setCurrentProgramStateInformation ([[maybe_unused]] const void* data,\r
+ [[maybe_unused]] int sizeInBytes) override\r
{\r
- ignoreUnused (data, sizeInBytes);\r
}\r
\r
private:\r
}\r
}\r
\r
- void refreshParameterList() override\r
+ void initialiseParameterList()\r
{\r
AudioProcessorParameterGroup newParameterTree;\r
\r
}\r
\r
//==============================================================================\r
- void mouseDown (const MouseEvent& e) override\r
+ void mouseDown ([[maybe_unused]] const MouseEvent& e) override\r
{\r
- ignoreUnused (e);\r
-\r
#if JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD\r
toFront (true);\r
#endif\r
#endif\r
}\r
\r
-bool VSTPluginInstance::updateSizeFromEditor (int w, int h)\r
+bool VSTPluginInstance::updateSizeFromEditor ([[maybe_unused]] int w, [[maybe_unused]] int h)\r
{\r
#if ! JUCE_IOS && ! JUCE_ANDROID\r
if (auto* editor = dynamic_cast<VSTPluginWindow*> (getActiveEditor()))\r
namespace juce\r
{\r
\r
-#if JUCE_PLUGINHOST_VST || (JUCE_PLUGINHOST_LADSPA && JUCE_LINUX)\r
+#if JUCE_PLUGINHOST_VST || (JUCE_PLUGINHOST_LADSPA && (JUCE_LINUX || JUCE_BSD))\r
\r
static bool arrayContainsPlugin (const OwnedArray<PluginDescription>& list,\r
const PluginDescription& desc)\r
#include "utilities/juce_AudioProcessorValueTreeState.cpp"\r
#include "utilities/juce_PluginHostType.cpp"\r
#include "utilities/juce_NativeScaleFactorNotifier.cpp"\r
+#include "utilities/juce_VSTCallbackHandler.cpp"\r
#include "utilities/ARA/juce_ARA_utils.cpp"\r
\r
#include "format_types/juce_LV2PluginFormat.cpp"\r
\r
ID: juce_audio_processors\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\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
void AudioProcessor::setPlayConfigDetails (int newNumIns, int newNumOuts, double newSampleRate, int newBlockSize)\r
{\r
- bool success = true;\r
+ [[maybe_unused]] bool success = true;\r
\r
if (getTotalNumInputChannels() != newNumIns)\r
success &= setChannelLayoutOfBus (true, 0, AudioChannelSet::canonicalChannelSet (newNumIns));\r
jassert (success && newNumIns == getTotalNumInputChannels() && newNumOuts == getTotalNumOutputChannels());\r
\r
setRateAndBufferSizeDetails (newSampleRate, newBlockSize);\r
- ignoreUnused (success);\r
}\r
\r
void AudioProcessor::setRateAndBufferSizeDetails (double newSampleRate, int newBlockSize) noexcept\r
#endif\r
}\r
\r
-void AudioProcessor::checkForDuplicateTrimmedParamID (AudioProcessorParameter* param)\r
+void AudioProcessor::checkForDuplicateTrimmedParamID ([[maybe_unused]] AudioProcessorParameter* param)\r
{\r
- ignoreUnused (param);\r
-\r
#if JUCE_DEBUG && ! JUCE_DISABLE_CAUTIOUS_PARAMETER_ID_CHECKING\r
if (auto* withID = dynamic_cast<AudioProcessorParameterWithID*> (param))\r
{\r
#endif\r
}\r
\r
-void AudioProcessor::checkForDuplicateParamID (AudioProcessorParameter* param)\r
+void AudioProcessor::checkForDuplicateParamID ([[maybe_unused]] AudioProcessorParameter* param)\r
{\r
- ignoreUnused (param);\r
-\r
#if JUCE_DEBUG\r
if (auto* withID = dynamic_cast<AudioProcessorParameterWithID*> (param))\r
{\r
#endif\r
}\r
\r
-void AudioProcessor::checkForDuplicateGroupIDs (const AudioProcessorParameterGroup& newGroup)\r
+void AudioProcessor::checkForDuplicateGroupIDs ([[maybe_unused]] const AudioProcessorParameterGroup& newGroup)\r
{\r
- ignoreUnused (newGroup);\r
-\r
#if JUCE_DEBUG\r
auto groups = newGroup.getSubgroups (true);\r
groups.add (&newGroup);\r
void AudioProcessor::processBlockBypassed (AudioBuffer<float>& buffer, MidiBuffer& midi) { processBypassed (buffer, midi); }\r
void AudioProcessor::processBlockBypassed (AudioBuffer<double>& buffer, MidiBuffer& midi) { processBypassed (buffer, midi); }\r
\r
-void AudioProcessor::processBlock (AudioBuffer<double>& buffer, MidiBuffer& midiMessages)\r
+void AudioProcessor::processBlock ([[maybe_unused]] AudioBuffer<double>& buffer,\r
+ [[maybe_unused]] MidiBuffer& midiMessages)\r
{\r
- ignoreUnused (buffer, midiMessages);\r
-\r
// If you hit this assertion then either the caller called the double\r
// precision version of processBlock on a processor which does not support it\r
// (i.e. supportsDoublePrecisionProcessing() returns false), or the implementation\r
return p;\r
}\r
\r
+bool AudioProcessor::canAddBus ([[maybe_unused]] bool isInput) const { return false; }\r
+bool AudioProcessor::canRemoveBus ([[maybe_unused]] bool isInput) const { return false; }\r
+\r
JUCE_END_IGNORE_WARNINGS_GCC_LIKE\r
JUCE_END_IGNORE_WARNINGS_MSVC\r
\r
\r
@see addBus\r
*/\r
- virtual bool canAddBus (bool isInput) const { ignoreUnused (isInput); return false; }\r
+ virtual bool canAddBus (bool isInput) const;\r
\r
/** Callback to query if the last bus can currently be removed.\r
\r
\r
The default implementation will always return false.\r
*/\r
- virtual bool canRemoveBus (bool isInput) const { ignoreUnused (isInput); return false; }\r
+ virtual bool canRemoveBus (bool isInput) const;\r
\r
/** Dynamically request an additional bus.\r
\r
typedef ComponentPeer* (*createUnityPeerFunctionType) (Component&);\r
createUnityPeerFunctionType juce_createUnityPeerFn = nullptr;\r
\r
-ComponentPeer* AudioProcessorEditor::createNewPeer (int styleFlags, void* nativeWindow)\r
+ComponentPeer* AudioProcessorEditor::createNewPeer ([[maybe_unused]] int styleFlags,\r
+ [[maybe_unused]] void* nativeWindow)\r
{\r
if (juce_createUnityPeerFn != nullptr)\r
- {\r
- ignoreUnused (styleFlags, nativeWindow);\r
return juce_createUnityPeerFn (*this);\r
- }\r
\r
return Component::createNewPeer (styleFlags, nativeWindow);\r
}\r
currentAudioInputBuffer = nullptr;\r
}\r
\r
+ JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4661)\r
+\r
void addClearChannelOp (int index)\r
{\r
renderOps.push_back ([=] (const Context& c) { FloatVectorOperations::clear (c.audioBuffers[index], c.numSamples); });\r
renderOps.push_back ([=] (const Context& c) { FloatVectorOperations::add (c.audioBuffers[dstIndex], c.audioBuffers[srcIndex], c.numSamples); });\r
}\r
\r
+ JUCE_END_IGNORE_WARNINGS_MSVC\r
+\r
void addClearMidiBufferOp (int index)\r
{\r
renderOps.push_back ([=] (const Context& c) { c.midiBuffers[index].clear(); });\r
}\r
\r
//==============================================================================\r
-class AudioProcessorGraph::Pimpl : private AsyncUpdater\r
+class AudioProcessorGraph::Pimpl : public AsyncUpdater\r
{\r
public:\r
explicit Pimpl (AudioProcessorGraph& o) : owner (&o) {}\r
if (lastNodeID < idToUse)\r
lastNodeID = idToUse;\r
\r
- if (auto* ioProc = dynamic_cast<AudioGraphIOProcessor*> (added->getProcessor()))\r
- ioProc->setParentGraph (owner);\r
+ setParentGraph (added->getProcessor());\r
\r
topologyChanged (updateKind);\r
return added;\r
auto* getAudioThreadState() const { return renderSequenceExchange.getAudioThreadState(); }\r
\r
private:\r
+ void setParentGraph (AudioProcessor* p) const\r
+ {\r
+ if (auto* ioProc = dynamic_cast<AudioGraphIOProcessor*> (p))\r
+ ioProc->setParentGraph (owner);\r
+ }\r
+\r
void topologyChanged (UpdateKind updateKind)\r
{\r
owner->sendChangeMessage();\r
{\r
if (const auto newSettings = nodeStates.applySettings (nodes))\r
{\r
+ for (const auto node : nodes.getNodes())\r
+ setParentGraph (node->getProcessor());\r
+\r
auto sequence = std::make_unique<RenderSequence> (*newSettings, nodes, connections);\r
owner->setLatencySamples (sequence->getLatencySamples());\r
renderSequenceExchange.set (std::move (sequence));\r
{\r
public:\r
using ParameterListener::ParameterListener;\r
+\r
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ParameterComponent)\r
};\r
\r
//==============================================================================\r
\r
@tags{Audio}\r
*/\r
-struct HostedAudioProcessorParameter : public AudioProcessorParameter\r
+struct JUCE_API HostedAudioProcessorParameter : public AudioProcessorParameter\r
{\r
using AudioProcessorParameter::AudioProcessorParameter;\r
\r
return new ARAEditorView (getDocumentController());\r
}\r
\r
-bool ARADocumentControllerSpecialisation::doIsAudioSourceContentAvailable (const ARA::PlugIn::AudioSource* audioSource,\r
- ARA::ARAContentType type)\r
+bool ARADocumentControllerSpecialisation::doIsAudioSourceContentAvailable ([[maybe_unused]] const ARA::PlugIn::AudioSource* audioSource,\r
+ [[maybe_unused]] ARA::ARAContentType type)\r
{\r
- juce::ignoreUnused (audioSource, type);\r
return false;\r
}\r
\r
-ARA::ARAContentGrade ARADocumentControllerSpecialisation::doGetAudioSourceContentGrade (const ARA::PlugIn::AudioSource* audioSource,\r
- ARA::ARAContentType type)\r
+ARA::ARAContentGrade ARADocumentControllerSpecialisation::doGetAudioSourceContentGrade ([[maybe_unused]] const ARA::PlugIn::AudioSource* audioSource,\r
+ [[maybe_unused]] ARA::ARAContentType type)\r
{\r
// Overriding doIsAudioSourceContentAvailable() requires overriding\r
// doGetAudioSourceContentGrade() accordingly!\r
jassertfalse;\r
\r
- juce::ignoreUnused (audioSource, type);\r
return ARA::kARAContentGradeInitial;\r
}\r
\r
-ARA::PlugIn::ContentReader* ARADocumentControllerSpecialisation::doCreateAudioSourceContentReader (ARA::PlugIn::AudioSource* audioSource,\r
- ARA::ARAContentType type,\r
- const ARA::ARAContentTimeRange* range)\r
+ARA::PlugIn::ContentReader* ARADocumentControllerSpecialisation::doCreateAudioSourceContentReader ([[maybe_unused]] ARA::PlugIn::AudioSource* audioSource,\r
+ [[maybe_unused]] ARA::ARAContentType type,\r
+ [[maybe_unused]] const ARA::ARAContentTimeRange* range)\r
{\r
// Overriding doIsAudioSourceContentAvailable() requires overriding\r
// doCreateAudioSourceContentReader() accordingly!\r
jassertfalse;\r
\r
- juce::ignoreUnused (audioSource, type, range);\r
return nullptr;\r
}\r
\r
-bool ARADocumentControllerSpecialisation::doIsAudioModificationContentAvailable (const ARA::PlugIn::AudioModification* audioModification,\r
- ARA::ARAContentType type)\r
+bool ARADocumentControllerSpecialisation::doIsAudioModificationContentAvailable ([[maybe_unused]] const ARA::PlugIn::AudioModification* audioModification,\r
+ [[maybe_unused]] ARA::ARAContentType type)\r
{\r
- juce::ignoreUnused (audioModification, type);\r
return false;\r
}\r
\r
-ARA::ARAContentGrade ARADocumentControllerSpecialisation::doGetAudioModificationContentGrade (const ARA::PlugIn::AudioModification* audioModification,\r
- ARA::ARAContentType type)\r
+ARA::ARAContentGrade ARADocumentControllerSpecialisation::doGetAudioModificationContentGrade ([[maybe_unused]] const ARA::PlugIn::AudioModification* audioModification,\r
+ [[maybe_unused]] ARA::ARAContentType type)\r
{\r
// Overriding doIsAudioModificationContentAvailable() requires overriding\r
// doGetAudioModificationContentGrade() accordingly!\r
jassertfalse;\r
\r
- juce::ignoreUnused (audioModification, type);\r
return ARA::kARAContentGradeInitial;\r
}\r
\r
-ARA::PlugIn::ContentReader* ARADocumentControllerSpecialisation::doCreateAudioModificationContentReader (ARA::PlugIn::AudioModification* audioModification,\r
- ARA::ARAContentType type,\r
- const ARA::ARAContentTimeRange* range)\r
+ARA::PlugIn::ContentReader* ARADocumentControllerSpecialisation::doCreateAudioModificationContentReader ([[maybe_unused]] ARA::PlugIn::AudioModification* audioModification,\r
+ [[maybe_unused]] ARA::ARAContentType type,\r
+ [[maybe_unused]] const ARA::ARAContentTimeRange* range)\r
{\r
// Overriding doIsAudioModificationContentAvailable() requires overriding\r
// doCreateAudioModificationContentReader() accordingly!\r
jassertfalse;\r
\r
- juce::ignoreUnused (audioModification, type, range);\r
return nullptr;\r
}\r
\r
-bool ARADocumentControllerSpecialisation::doIsPlaybackRegionContentAvailable (const ARA::PlugIn::PlaybackRegion* playbackRegion,\r
- ARA::ARAContentType type)\r
+bool ARADocumentControllerSpecialisation::doIsPlaybackRegionContentAvailable ([[maybe_unused]] const ARA::PlugIn::PlaybackRegion* playbackRegion,\r
+ [[maybe_unused]] ARA::ARAContentType type)\r
{\r
- juce::ignoreUnused (playbackRegion, type);\r
return false;\r
}\r
\r
-ARA::ARAContentGrade ARADocumentControllerSpecialisation::doGetPlaybackRegionContentGrade (const ARA::PlugIn::PlaybackRegion* playbackRegion,\r
- ARA::ARAContentType type)\r
+ARA::ARAContentGrade ARADocumentControllerSpecialisation::doGetPlaybackRegionContentGrade ([[maybe_unused]] const ARA::PlugIn::PlaybackRegion* playbackRegion,\r
+ [[maybe_unused]] ARA::ARAContentType type)\r
{\r
// Overriding doIsPlaybackRegionContentAvailable() requires overriding\r
// doGetPlaybackRegionContentGrade() accordingly!\r
jassertfalse;\r
\r
- juce::ignoreUnused (playbackRegion, type);\r
return ARA::kARAContentGradeInitial;\r
}\r
\r
-ARA::PlugIn::ContentReader* ARADocumentControllerSpecialisation::doCreatePlaybackRegionContentReader (ARA::PlugIn::PlaybackRegion* playbackRegion,\r
- ARA::ARAContentType type,\r
- const ARA::ARAContentTimeRange* range)\r
+ARA::PlugIn::ContentReader* ARADocumentControllerSpecialisation::doCreatePlaybackRegionContentReader ([[maybe_unused]] ARA::PlugIn::PlaybackRegion* playbackRegion,\r
+ [[maybe_unused]] ARA::ARAContentType type,\r
+ [[maybe_unused]] const ARA::ARAContentTimeRange* range)\r
{\r
// Overriding doIsPlaybackRegionContentAvailable() requires overriding\r
// doCreatePlaybackRegionContentReader() accordingly!\r
jassertfalse;\r
\r
- juce::ignoreUnused (playbackRegion, type, range);\r
return nullptr;\r
}\r
\r
-bool ARADocumentControllerSpecialisation::doIsAudioSourceContentAnalysisIncomplete (const ARA::PlugIn::AudioSource* audioSource,\r
- ARA::ARAContentType type)\r
+bool ARADocumentControllerSpecialisation::doIsAudioSourceContentAnalysisIncomplete ([[maybe_unused]] const ARA::PlugIn::AudioSource* audioSource,\r
+ [[maybe_unused]] ARA::ARAContentType type)\r
{\r
- juce::ignoreUnused (audioSource, type);\r
return false;\r
}\r
\r
-void ARADocumentControllerSpecialisation::doRequestAudioSourceContentAnalysis (ARA::PlugIn::AudioSource* audioSource,\r
- std::vector<ARA::ARAContentType> const& contentTypes)\r
+void ARADocumentControllerSpecialisation::doRequestAudioSourceContentAnalysis ([[maybe_unused]] ARA::PlugIn::AudioSource* audioSource,\r
+ [[maybe_unused]] std::vector<ARA::ARAContentType> const& contentTypes)\r
{\r
- juce::ignoreUnused (audioSource, contentTypes);\r
}\r
\r
ARA::ARAInt32 ARADocumentControllerSpecialisation::doGetProcessingAlgorithmsCount() { return 0; }\r
\r
const ARA::ARAProcessingAlgorithmProperties*\r
- ARADocumentControllerSpecialisation::doGetProcessingAlgorithmProperties (ARA::ARAInt32 algorithmIndex)\r
+ ARADocumentControllerSpecialisation::doGetProcessingAlgorithmProperties ([[maybe_unused]] ARA::ARAInt32 algorithmIndex)\r
{\r
- juce::ignoreUnused (algorithmIndex);\r
return nullptr;\r
}\r
\r
-ARA::ARAInt32 ARADocumentControllerSpecialisation::doGetProcessingAlgorithmForAudioSource (const ARA::PlugIn::AudioSource* audioSource)\r
+ARA::ARAInt32 ARADocumentControllerSpecialisation::doGetProcessingAlgorithmForAudioSource ([[maybe_unused]] const ARA::PlugIn::AudioSource* audioSource)\r
{\r
// doGetProcessingAlgorithmForAudioSource() must be implemented if the supported\r
// algorithm count is greater than zero.\r
if (getDocumentController()->getProcessingAlgorithmsCount() > 0)\r
jassertfalse;\r
\r
- juce::ignoreUnused (audioSource);\r
return 0;\r
}\r
\r
-void ARADocumentControllerSpecialisation::doRequestProcessingAlgorithmForAudioSource (ARA::PlugIn::AudioSource* audioSource,\r
- ARA::ARAInt32 algorithmIndex)\r
+void ARADocumentControllerSpecialisation::doRequestProcessingAlgorithmForAudioSource ([[maybe_unused]] ARA::PlugIn::AudioSource* audioSource,\r
+ [[maybe_unused]] ARA::ARAInt32 algorithmIndex)\r
{\r
// doRequestProcessingAlgorithmForAudioSource() must be implemented if the supported\r
// algorithm count is greater than zero.\r
- if (getDocumentController()->getProcessingAlgorithmsCount() > 0)\r
- jassertfalse;\r
-\r
- juce::ignoreUnused (audioSource, algorithmIndex);\r
+ jassert (getDocumentController()->getProcessingAlgorithmsCount() <= 0);\r
}\r
\r
} // namespace juce\r
notifyARAHost);\r
}\r
\r
+//==============================================================================\r
+void ARADocumentListener::willBeginEditing ([[maybe_unused]] ARADocument* document) {}\r
+void ARADocumentListener::didEndEditing ([[maybe_unused]] ARADocument* document) {}\r
+void ARADocumentListener::willNotifyModelUpdates ([[maybe_unused]] ARADocument* document) {}\r
+void ARADocumentListener::didNotifyModelUpdates ([[maybe_unused]] ARADocument* document) {}\r
+void ARADocumentListener::willUpdateDocumentProperties ([[maybe_unused]] ARADocument* document,\r
+ [[maybe_unused]] ARA::PlugIn::PropertiesPtr<ARA::ARADocumentProperties> newProperties) {}\r
+void ARADocumentListener::didUpdateDocumentProperties ([[maybe_unused]] ARADocument* document) {}\r
+void ARADocumentListener::didAddMusicalContextToDocument ([[maybe_unused]] ARADocument* document,\r
+ [[maybe_unused]] ARAMusicalContext* musicalContext) {}\r
+void ARADocumentListener::willRemoveMusicalContextFromDocument ([[maybe_unused]] ARADocument* document,\r
+ [[maybe_unused]] ARAMusicalContext* musicalContext) {}\r
+void ARADocumentListener::didReorderMusicalContextsInDocument ([[maybe_unused]] ARADocument* document) {}\r
+void ARADocumentListener::didAddRegionSequenceToDocument ([[maybe_unused]] ARADocument* document,\r
+ [[maybe_unused]] ARARegionSequence* regionSequence) {}\r
+void ARADocumentListener::willRemoveRegionSequenceFromDocument ([[maybe_unused]] ARADocument* document,\r
+ [[maybe_unused]] ARARegionSequence* regionSequence) {}\r
+void ARADocumentListener::didReorderRegionSequencesInDocument ([[maybe_unused]] ARADocument* document) {}\r
+void ARADocumentListener::didAddAudioSourceToDocument ([[maybe_unused]] ARADocument* document,\r
+ [[maybe_unused]] ARAAudioSource* audioSource) {}\r
+void ARADocumentListener::willRemoveAudioSourceFromDocument ([[maybe_unused]] ARADocument* document,\r
+ [[maybe_unused]] ARAAudioSource* audioSource) {}\r
+void ARADocumentListener::willDestroyDocument ([[maybe_unused]] ARADocument* document) {}\r
+\r
+//==============================================================================\r
+void ARAMusicalContextListener::willUpdateMusicalContextProperties ([[maybe_unused]] ARAMusicalContext* musicalContext,\r
+ [[maybe_unused]] ARA::PlugIn::PropertiesPtr<ARA::ARAMusicalContextProperties> newProperties) {}\r
+void ARAMusicalContextListener::didUpdateMusicalContextProperties ([[maybe_unused]] ARAMusicalContext* musicalContext) {}\r
+void ARAMusicalContextListener::doUpdateMusicalContextContent ([[maybe_unused]] ARAMusicalContext* musicalContext,\r
+ [[maybe_unused]] ARAContentUpdateScopes scopeFlags) {}\r
+void ARAMusicalContextListener::didAddRegionSequenceToMusicalContext ([[maybe_unused]] ARAMusicalContext* musicalContext,\r
+ [[maybe_unused]] ARARegionSequence* regionSequence) {}\r
+void ARAMusicalContextListener::willRemoveRegionSequenceFromMusicalContext ([[maybe_unused]] ARAMusicalContext* musicalContext,\r
+ [[maybe_unused]] ARARegionSequence* regionSequence) {}\r
+void ARAMusicalContextListener::didReorderRegionSequencesInMusicalContext ([[maybe_unused]] ARAMusicalContext* musicalContext) {}\r
+void ARAMusicalContextListener::willDestroyMusicalContext ([[maybe_unused]] ARAMusicalContext* musicalContext) {}\r
+\r
+//==============================================================================\r
+void ARAPlaybackRegionListener::willUpdatePlaybackRegionProperties ([[maybe_unused]] ARAPlaybackRegion* playbackRegion,\r
+ [[maybe_unused]] ARA::PlugIn::PropertiesPtr<ARA::ARAPlaybackRegionProperties> newProperties) {}\r
+void ARAPlaybackRegionListener::didUpdatePlaybackRegionProperties ([[maybe_unused]] ARAPlaybackRegion* playbackRegion) {}\r
+void ARAPlaybackRegionListener::didUpdatePlaybackRegionContent ([[maybe_unused]] ARAPlaybackRegion* playbackRegion,\r
+ [[maybe_unused]] ARAContentUpdateScopes scopeFlags) {}\r
+void ARAPlaybackRegionListener::willDestroyPlaybackRegion ([[maybe_unused]] ARAPlaybackRegion* playbackRegion) {}\r
+\r
+//==============================================================================\r
+void ARARegionSequenceListener::willUpdateRegionSequenceProperties ([[maybe_unused]] ARARegionSequence* regionSequence,\r
+ [[maybe_unused]] ARA::PlugIn::PropertiesPtr<ARA::ARARegionSequenceProperties> newProperties) {}\r
+void ARARegionSequenceListener::didUpdateRegionSequenceProperties ([[maybe_unused]] ARARegionSequence* regionSequence) {}\r
+void ARARegionSequenceListener::willRemovePlaybackRegionFromRegionSequence ([[maybe_unused]] ARARegionSequence* regionSequence,\r
+ [[maybe_unused]] ARAPlaybackRegion* playbackRegion) {}\r
+void ARARegionSequenceListener::didAddPlaybackRegionToRegionSequence ([[maybe_unused]] ARARegionSequence* regionSequence,\r
+ [[maybe_unused]] ARAPlaybackRegion* playbackRegion) {}\r
+void ARARegionSequenceListener::willDestroyRegionSequence ([[maybe_unused]] ARARegionSequence* regionSequence) {}\r
+\r
+//==============================================================================\r
+void ARAAudioSourceListener::willUpdateAudioSourceProperties ([[maybe_unused]] ARAAudioSource* audioSource,\r
+ [[maybe_unused]] ARA::PlugIn::PropertiesPtr<ARA::ARAAudioSourceProperties> newProperties) {}\r
+void ARAAudioSourceListener::didUpdateAudioSourceProperties ([[maybe_unused]] ARAAudioSource* audioSource) {}\r
+void ARAAudioSourceListener::doUpdateAudioSourceContent ([[maybe_unused]] ARAAudioSource* audioSource,\r
+ [[maybe_unused]] ARAContentUpdateScopes scopeFlags) {}\r
+void ARAAudioSourceListener::didUpdateAudioSourceAnalysisProgress ([[maybe_unused]] ARAAudioSource* audioSource,\r
+ [[maybe_unused]] ARA::ARAAnalysisProgressState state,\r
+ [[maybe_unused]] float progress) {}\r
+void ARAAudioSourceListener::willEnableAudioSourceSamplesAccess ([[maybe_unused]] ARAAudioSource* audioSource,\r
+ [[maybe_unused]] bool enable) {}\r
+void ARAAudioSourceListener::didEnableAudioSourceSamplesAccess ([[maybe_unused]] ARAAudioSource* audioSource,\r
+ [[maybe_unused]] bool enable) {}\r
+void ARAAudioSourceListener::willDeactivateAudioSourceForUndoHistory ([[maybe_unused]] ARAAudioSource* audioSource,\r
+ [[maybe_unused]] bool deactivate) {}\r
+void ARAAudioSourceListener::didDeactivateAudioSourceForUndoHistory ([[maybe_unused]] ARAAudioSource* audioSource,\r
+ [[maybe_unused]] bool deactivate) {}\r
+void ARAAudioSourceListener::didAddAudioModificationToAudioSource ([[maybe_unused]] ARAAudioSource* audioSource,\r
+ [[maybe_unused]] ARAAudioModification* audioModification) {}\r
+void ARAAudioSourceListener::willRemoveAudioModificationFromAudioSource ([[maybe_unused]] ARAAudioSource* audioSource,\r
+ [[maybe_unused]] ARAAudioModification* audioModification) {}\r
+void ARAAudioSourceListener::willDestroyAudioSource ([[maybe_unused]] ARAAudioSource* audioSource) {}\r
+\r
+//==============================================================================\r
+void ARAAudioModificationListener::willUpdateAudioModificationProperties ([[maybe_unused]] ARAAudioModification* audioModification,\r
+ [[maybe_unused]] ARA::PlugIn::PropertiesPtr<ARA::ARAAudioModificationProperties> newProperties) {}\r
+void ARAAudioModificationListener::didUpdateAudioModificationProperties ([[maybe_unused]] ARAAudioModification* audioModification) {}\r
+void ARAAudioModificationListener::didUpdateAudioModificationContent ([[maybe_unused]] ARAAudioModification* audioModification,\r
+ [[maybe_unused]] ARAContentUpdateScopes scopeFlags) {}\r
+void ARAAudioModificationListener::willDeactivateAudioModificationForUndoHistory ([[maybe_unused]] ARAAudioModification* audioModification,\r
+ [[maybe_unused]] bool deactivate) {}\r
+void ARAAudioModificationListener::didDeactivateAudioModificationForUndoHistory ([[maybe_unused]] ARAAudioModification* audioModification,\r
+ [[maybe_unused]] bool deactivate) {}\r
+void ARAAudioModificationListener::didAddPlaybackRegionToAudioModification ([[maybe_unused]] ARAAudioModification* audioModification,\r
+ [[maybe_unused]] ARAPlaybackRegion* playbackRegion) {}\r
+void ARAAudioModificationListener::willRemovePlaybackRegionFromAudioModification ([[maybe_unused]] ARAAudioModification* audioModification,\r
+ [[maybe_unused]] ARAPlaybackRegion* playbackRegion) {}\r
+void ARAAudioModificationListener::willDestroyAudioModification ([[maybe_unused]] ARAAudioModification* audioModification) {}\r
+\r
} // namespace juce\r
/** Destructor */\r
virtual ~ARADocumentListener() = default;\r
\r
- ARA_DISABLE_UNREFERENCED_PARAMETER_WARNING_BEGIN\r
-\r
/** Called before the document enters an editing state.\r
@param document The document about to enter an editing state.\r
*/\r
- virtual void willBeginEditing (ARADocument* document)\r
- {\r
- ignoreUnused (document);\r
- }\r
+ virtual void willBeginEditing (ARADocument* document);\r
\r
/** Called after the document exits an editing state.\r
@param document The document about exit an editing state.\r
*/\r
- virtual void didEndEditing (ARADocument* document)\r
- {\r
- ignoreUnused (document);\r
- }\r
+ virtual void didEndEditing (ARADocument* document);\r
\r
/** Called before sending model updates do the host.\r
@param document The document whose model updates are about to be sent.\r
*/\r
- virtual void willNotifyModelUpdates (ARADocument* document)\r
- {\r
- ignoreUnused (document);\r
- }\r
+ virtual void willNotifyModelUpdates (ARADocument* document);\r
\r
/** Called after sending model updates do the host.\r
@param document The document whose model updates have just been sent.\r
*/\r
- virtual void didNotifyModelUpdates (ARADocument* document)\r
- {\r
- ignoreUnused (document);\r
- }\r
+ virtual void didNotifyModelUpdates (ARADocument* document);\r
\r
/** Called before the document's properties are updated.\r
@param document The document whose properties will be updated.\r
@param newProperties The document properties that will be assigned to \p document.\r
*/\r
virtual void willUpdateDocumentProperties (ARADocument* document,\r
- ARA::PlugIn::PropertiesPtr<ARA::ARADocumentProperties> newProperties)\r
- {\r
- ignoreUnused (document, newProperties);\r
- }\r
+ ARA::PlugIn::PropertiesPtr<ARA::ARADocumentProperties> newProperties);\r
\r
/** Called after the document's properties are updated.\r
@param document The document whose properties were updated.\r
*/\r
- virtual void didUpdateDocumentProperties (ARADocument* document)\r
- {\r
- ignoreUnused (document);\r
- }\r
+ virtual void didUpdateDocumentProperties (ARADocument* document);\r
\r
/** Called after a musical context is added to the document.\r
@param document The document that \p musicalContext was added to.\r
@param musicalContext The musical context that was added to \p document.\r
*/\r
- virtual void didAddMusicalContextToDocument (ARADocument* document, ARAMusicalContext* musicalContext)\r
- {\r
- ignoreUnused (document, musicalContext);\r
- }\r
+ virtual void didAddMusicalContextToDocument (ARADocument* document, ARAMusicalContext* musicalContext);\r
\r
/** Called before a musical context is removed from the document.\r
@param document The document that \p musicalContext will be removed from.\r
@param musicalContext The musical context that will be removed from \p document.\r
*/\r
- virtual void willRemoveMusicalContextFromDocument (ARADocument* document,\r
- ARAMusicalContext* musicalContext)\r
- {\r
- ignoreUnused (document, musicalContext);\r
- }\r
+ virtual void willRemoveMusicalContextFromDocument (ARADocument* document, ARAMusicalContext* musicalContext);\r
\r
/** Called after the musical contexts are reordered in an ARA document\r
\r
\r
@param document The document with reordered musical contexts.\r
*/\r
- virtual void didReorderMusicalContextsInDocument (ARADocument* document)\r
- {\r
- ignoreUnused (document);\r
- }\r
+ virtual void didReorderMusicalContextsInDocument (ARADocument* document);\r
\r
/** Called after a region sequence is added to the document.\r
@param document The document that \p regionSequence was added to.\r
@param regionSequence The region sequence that was added to \p document.\r
*/\r
- virtual void didAddRegionSequenceToDocument (ARADocument* document, ARARegionSequence* regionSequence)\r
- {\r
- ignoreUnused (document, regionSequence);\r
- }\r
+ virtual void didAddRegionSequenceToDocument (ARADocument* document, ARARegionSequence* regionSequence);\r
\r
/** Called before a region sequence is removed from the document.\r
@param document The document that \p regionSequence will be removed from.\r
@param regionSequence The region sequence that will be removed from \p document.\r
*/\r
- virtual void willRemoveRegionSequenceFromDocument (ARADocument* document,\r
- ARARegionSequence* regionSequence)\r
- {\r
- ignoreUnused (document, regionSequence);\r
- }\r
+ virtual void willRemoveRegionSequenceFromDocument (ARADocument* document, ARARegionSequence* regionSequence);\r
\r
/** Called after the region sequences are reordered in an ARA document\r
\r
\r
@param document The document with reordered region sequences.\r
*/\r
- virtual void didReorderRegionSequencesInDocument (ARADocument* document)\r
- {\r
- ignoreUnused (document);\r
- }\r
+ virtual void didReorderRegionSequencesInDocument (ARADocument* document);\r
\r
/** Called after an audio source is added to the document.\r
@param document The document that \p audioSource was added to.\r
@param audioSource The audio source that was added to \p document.\r
*/\r
- virtual void didAddAudioSourceToDocument (ARADocument* document, ARAAudioSource* audioSource)\r
- {\r
- ignoreUnused (document, audioSource);\r
- }\r
+ virtual void didAddAudioSourceToDocument (ARADocument* document, ARAAudioSource* audioSource);\r
\r
/** Called before an audio source is removed from the document.\r
@param document The document that \p audioSource will be removed from .\r
@param audioSource The audio source that will be removed from \p document.\r
*/\r
- virtual void willRemoveAudioSourceFromDocument (ARADocument* document, ARAAudioSource* audioSource)\r
- {\r
- ignoreUnused (document, audioSource);\r
- }\r
+ virtual void willRemoveAudioSourceFromDocument (ARADocument* document, ARAAudioSource* audioSource);\r
\r
/** Called before the document is destroyed by the ARA host.\r
@param document The document that will be destroyed.\r
*/\r
- virtual void willDestroyDocument (ARADocument* document)\r
- {\r
- ignoreUnused (document);\r
- }\r
-\r
- ARA_DISABLE_UNREFERENCED_PARAMETER_WARNING_END\r
+ virtual void willDestroyDocument (ARADocument* document);\r
};\r
\r
//==============================================================================\r
public:\r
virtual ~ARAMusicalContextListener() = default;\r
\r
- ARA_DISABLE_UNREFERENCED_PARAMETER_WARNING_BEGIN\r
-\r
/** Called before the musical context's properties are updated.\r
@param musicalContext The musical context whose properties will be updated.\r
@param newProperties The musical context properties that will be assigned to \p musicalContext.\r
*/\r
virtual void willUpdateMusicalContextProperties (ARAMusicalContext* musicalContext,\r
- ARA::PlugIn::PropertiesPtr<ARA::ARAMusicalContextProperties> newProperties)\r
- {\r
- ignoreUnused (musicalContext, newProperties);\r
- }\r
+ ARA::PlugIn::PropertiesPtr<ARA::ARAMusicalContextProperties> newProperties);\r
\r
/** Called after the musical context's properties are updated by the host.\r
@param musicalContext The musical context whose properties were updated.\r
*/\r
- virtual void didUpdateMusicalContextProperties (ARAMusicalContext* musicalContext)\r
- {\r
- ignoreUnused (musicalContext);\r
- }\r
+ virtual void didUpdateMusicalContextProperties (ARAMusicalContext* musicalContext);\r
\r
/** Called when the musical context's content (i.e tempo entries or chords) changes.\r
@param musicalContext The musical context with updated content.\r
@param scopeFlags The scope of the content update indicating what has changed.\r
*/\r
- virtual void doUpdateMusicalContextContent (ARAMusicalContext* musicalContext,\r
- ARAContentUpdateScopes scopeFlags)\r
- {\r
- ignoreUnused (musicalContext, scopeFlags);\r
- }\r
+ virtual void doUpdateMusicalContextContent (ARAMusicalContext* musicalContext, ARAContentUpdateScopes scopeFlags);\r
\r
/** Called after a region sequence is added to the musical context.\r
@param musicalContext The musical context that \p regionSequence was added to.\r
@param regionSequence The region sequence that was added to \p musicalContext.\r
*/\r
- virtual void didAddRegionSequenceToMusicalContext (ARAMusicalContext* musicalContext,\r
- ARARegionSequence* regionSequence)\r
- {\r
- ignoreUnused (musicalContext, regionSequence);\r
- }\r
+ virtual void didAddRegionSequenceToMusicalContext (ARAMusicalContext* musicalContext, ARARegionSequence* regionSequence);\r
\r
/** Called before a region sequence is removed from the musical context.\r
@param musicalContext The musical context that \p regionSequence will be removed from.\r
@param regionSequence The region sequence that will be removed from \p musicalContext.\r
*/\r
virtual void willRemoveRegionSequenceFromMusicalContext (ARAMusicalContext* musicalContext,\r
- ARARegionSequence* regionSequence)\r
- {\r
- ignoreUnused (musicalContext, regionSequence);\r
- }\r
+ ARARegionSequence* regionSequence);\r
\r
/** Called after the region sequences are reordered in an ARA MusicalContext\r
\r
\r
@param musicalContext The musical context with reordered region sequences.\r
*/\r
- virtual void didReorderRegionSequencesInMusicalContext (ARAMusicalContext* musicalContext)\r
- {\r
- ignoreUnused (musicalContext);\r
- }\r
+ virtual void didReorderRegionSequencesInMusicalContext (ARAMusicalContext* musicalContext);\r
\r
/** Called before the musical context is destroyed.\r
@param musicalContext The musical context that will be destroyed.\r
*/\r
- virtual void willDestroyMusicalContext (ARAMusicalContext* musicalContext)\r
- {\r
- ignoreUnused (musicalContext);\r
- }\r
-\r
- ARA_DISABLE_UNREFERENCED_PARAMETER_WARNING_END\r
+ virtual void willDestroyMusicalContext (ARAMusicalContext* musicalContext);\r
};\r
\r
//==============================================================================\r
/** Destructor. */\r
virtual ~ARAPlaybackRegionListener() = default;\r
\r
- ARA_DISABLE_UNREFERENCED_PARAMETER_WARNING_BEGIN\r
-\r
/** Called before the playback region's properties are updated.\r
@param playbackRegion The playback region whose properties will be updated.\r
@param newProperties The playback region properties that will be assigned to \p playbackRegion.\r
*/\r
virtual void willUpdatePlaybackRegionProperties (ARAPlaybackRegion* playbackRegion,\r
- ARA::PlugIn::PropertiesPtr<ARA::ARAPlaybackRegionProperties> newProperties)\r
- {\r
- ignoreUnused (playbackRegion, newProperties);\r
- }\r
+ ARA::PlugIn::PropertiesPtr<ARA::ARAPlaybackRegionProperties> newProperties);\r
\r
/** Called after the playback region's properties are updated.\r
@param playbackRegion The playback region whose properties were updated.\r
*/\r
- virtual void didUpdatePlaybackRegionProperties (ARAPlaybackRegion* playbackRegion)\r
- {\r
- ignoreUnused (playbackRegion);\r
- }\r
+ virtual void didUpdatePlaybackRegionProperties (ARAPlaybackRegion* playbackRegion);\r
\r
/** Called when the playback region's content (i.e. samples or notes) changes.\r
@param playbackRegion The playback region with updated content.\r
@param scopeFlags The scope of the content update.\r
*/\r
virtual void didUpdatePlaybackRegionContent (ARAPlaybackRegion* playbackRegion,\r
- ARAContentUpdateScopes scopeFlags)\r
- {\r
- ignoreUnused (playbackRegion, scopeFlags);\r
- }\r
+ ARAContentUpdateScopes scopeFlags);\r
\r
/** Called before the playback region is destroyed.\r
@param playbackRegion The playback region that will be destroyed.\r
*/\r
- virtual void willDestroyPlaybackRegion (ARAPlaybackRegion* playbackRegion)\r
- {\r
- ignoreUnused (playbackRegion);\r
- }\r
-\r
- ARA_DISABLE_UNREFERENCED_PARAMETER_WARNING_END\r
+ virtual void willDestroyPlaybackRegion (ARAPlaybackRegion* playbackRegion);\r
};\r
\r
//==============================================================================\r
/** Destructor. */\r
virtual ~ARARegionSequenceListener() = default;\r
\r
- ARA_DISABLE_UNREFERENCED_PARAMETER_WARNING_BEGIN\r
-\r
/** Called before the region sequence's properties are updated.\r
@param regionSequence The region sequence whose properties will be updated.\r
@param newProperties The region sequence properties that will be assigned to \p regionSequence.\r
*/\r
virtual void willUpdateRegionSequenceProperties (ARARegionSequence* regionSequence,\r
- ARA::PlugIn::PropertiesPtr<ARA::ARARegionSequenceProperties> newProperties)\r
- {\r
- ignoreUnused (regionSequence, newProperties);\r
- }\r
+ ARA::PlugIn::PropertiesPtr<ARA::ARARegionSequenceProperties> newProperties);\r
\r
/** Called after the region sequence's properties are updated.\r
@param regionSequence The region sequence whose properties were updated.\r
*/\r
- virtual void didUpdateRegionSequenceProperties (ARARegionSequence* regionSequence)\r
- {\r
- ignoreUnused (regionSequence);\r
- }\r
+ virtual void didUpdateRegionSequenceProperties (ARARegionSequence* regionSequence);\r
\r
/** Called before a playback region is removed from the region sequence.\r
@param regionSequence The region sequence that \p playbackRegion will be removed from.\r
@param playbackRegion The playback region that will be removed from \p regionSequence.\r
*/\r
virtual void willRemovePlaybackRegionFromRegionSequence (ARARegionSequence* regionSequence,\r
- ARAPlaybackRegion* playbackRegion)\r
- {\r
- ignoreUnused (regionSequence, playbackRegion);\r
- }\r
+ ARAPlaybackRegion* playbackRegion);\r
\r
/** Called after a playback region is added to the region sequence.\r
@param regionSequence The region sequence that \p playbackRegion was added to.\r
@param playbackRegion The playback region that was added to \p regionSequence.\r
*/\r
virtual void didAddPlaybackRegionToRegionSequence (ARARegionSequence* regionSequence,\r
- ARAPlaybackRegion* playbackRegion)\r
- {\r
- ignoreUnused (regionSequence, playbackRegion);\r
- }\r
+ ARAPlaybackRegion* playbackRegion);\r
\r
/** Called before the region sequence is destroyed.\r
@param regionSequence The region sequence that will be destroyed.\r
*/\r
- virtual void willDestroyRegionSequence (ARARegionSequence* regionSequence)\r
- {\r
- ignoreUnused (regionSequence);\r
- }\r
-\r
- ARA_DISABLE_UNREFERENCED_PARAMETER_WARNING_END\r
+ virtual void willDestroyRegionSequence (ARARegionSequence* regionSequence);\r
};\r
\r
//==============================================================================\r
/** Destructor. */\r
virtual ~ARAAudioSourceListener() = default;\r
\r
- ARA_DISABLE_UNREFERENCED_PARAMETER_WARNING_BEGIN\r
-\r
/** Called before the audio source's properties are updated.\r
@param audioSource The audio source whose properties will be updated.\r
@param newProperties The audio source properties that will be assigned to \p audioSource.\r
*/\r
virtual void willUpdateAudioSourceProperties (ARAAudioSource* audioSource,\r
- ARA::PlugIn::PropertiesPtr<ARA::ARAAudioSourceProperties> newProperties)\r
- {\r
- ignoreUnused (audioSource, newProperties);\r
- }\r
+ ARA::PlugIn::PropertiesPtr<ARA::ARAAudioSourceProperties> newProperties);\r
\r
/** Called after the audio source's properties are updated.\r
@param audioSource The audio source whose properties were updated.\r
*/\r
- virtual void didUpdateAudioSourceProperties (ARAAudioSource* audioSource)\r
- {\r
- ignoreUnused (audioSource);\r
- }\r
+ virtual void didUpdateAudioSourceProperties (ARAAudioSource* audioSource);\r
\r
/** Called when the audio source's content (i.e. samples or notes) changes.\r
@param audioSource The audio source with updated content.\r
@param scopeFlags The scope of the content update.\r
*/\r
- virtual void doUpdateAudioSourceContent (ARAAudioSource* audioSource, ARAContentUpdateScopes scopeFlags)\r
- {\r
- ignoreUnused (audioSource, scopeFlags);\r
- }\r
+ virtual void doUpdateAudioSourceContent (ARAAudioSource* audioSource, ARAContentUpdateScopes scopeFlags);\r
\r
/** Called to notify progress when an audio source is being analyzed.\r
@param audioSource The audio source being analyzed.\r
*/\r
virtual void didUpdateAudioSourceAnalysisProgress (ARAAudioSource* audioSource,\r
ARA::ARAAnalysisProgressState state,\r
- float progress)\r
- {\r
- ignoreUnused (audioSource, state, progress);\r
- }\r
+ float progress);\r
\r
/** Called before access to an audio source's samples is enabled or disabled.\r
@param audioSource The audio source whose sample access state will be changed.\r
@param enable A bool indicating whether or not sample access will be enabled or disabled.\r
*/\r
- virtual void willEnableAudioSourceSamplesAccess (ARAAudioSource* audioSource, bool enable)\r
- {\r
- ignoreUnused (audioSource, enable);\r
- }\r
+ virtual void willEnableAudioSourceSamplesAccess (ARAAudioSource* audioSource,\r
+ bool enable);\r
\r
/** Called after access to an audio source's samples is enabled or disabled.\r
@param audioSource The audio source whose sample access state was changed.\r
@param enable A bool indicating whether or not sample access was enabled or disabled.\r
*/\r
- virtual void didEnableAudioSourceSamplesAccess (ARAAudioSource* audioSource, bool enable)\r
- {\r
- ignoreUnused (audioSource, enable);\r
- }\r
+ virtual void didEnableAudioSourceSamplesAccess (ARAAudioSource* audioSource,\r
+ bool enable);\r
\r
/** Called before an audio source is activated or deactivated when being removed / added from the host's undo history.\r
@param audioSource The audio source that will be activated or deactivated\r
@param deactivate A bool indicating whether \p audioSource was deactivated or activated.\r
*/\r
- virtual void willDeactivateAudioSourceForUndoHistory (ARAAudioSource* audioSource, bool deactivate)\r
- {\r
- ignoreUnused (audioSource, deactivate);\r
- }\r
+ virtual void willDeactivateAudioSourceForUndoHistory (ARAAudioSource* audioSource,\r
+ bool deactivate);\r
\r
/** Called after an audio source is activated or deactivated when being removed / added from the host's undo history.\r
@param audioSource The audio source that was activated or deactivated\r
@param deactivate A bool indicating whether \p audioSource was deactivated or activated.\r
*/\r
- virtual void didDeactivateAudioSourceForUndoHistory (ARAAudioSource* audioSource, bool deactivate)\r
- {\r
- ignoreUnused (audioSource, deactivate);\r
- }\r
+ virtual void didDeactivateAudioSourceForUndoHistory (ARAAudioSource* audioSource,\r
+ bool deactivate);\r
\r
/** Called after an audio modification is added to the audio source.\r
@param audioSource The region sequence that \p audioModification was added to.\r
@param audioModification The playback region that was added to \p audioSource.\r
*/\r
virtual void didAddAudioModificationToAudioSource (ARAAudioSource* audioSource,\r
- ARAAudioModification* audioModification)\r
- {\r
- ignoreUnused (audioSource, audioModification);\r
- }\r
+ ARAAudioModification* audioModification);\r
\r
/** Called before an audio modification is removed from the audio source.\r
@param audioSource The audio source that \p audioModification will be removed from.\r
@param audioModification The audio modification that will be removed from \p audioSource.\r
*/\r
virtual void willRemoveAudioModificationFromAudioSource (ARAAudioSource* audioSource,\r
- ARAAudioModification* audioModification)\r
- {\r
- ignoreUnused (audioSource, audioModification);\r
- }\r
+ ARAAudioModification* audioModification);\r
\r
/** Called before the audio source is destroyed.\r
@param audioSource The audio source that will be destroyed.\r
*/\r
- virtual void willDestroyAudioSource (ARAAudioSource* audioSource)\r
- {\r
- ignoreUnused (audioSource);\r
- }\r
-\r
- ARA_DISABLE_UNREFERENCED_PARAMETER_WARNING_END\r
+ virtual void willDestroyAudioSource (ARAAudioSource* audioSource);\r
};\r
\r
//==============================================================================\r
/** Destructor. */\r
virtual ~ARAAudioModificationListener() = default;\r
\r
- ARA_DISABLE_UNREFERENCED_PARAMETER_WARNING_BEGIN\r
-\r
/** Called before the audio modification's properties are updated.\r
@param audioModification The audio modification whose properties will be updated.\r
@param newProperties The audio modification properties that will be assigned to \p audioModification.\r
*/\r
virtual void willUpdateAudioModificationProperties (ARAAudioModification* audioModification,\r
- ARA::PlugIn::PropertiesPtr<ARA::ARAAudioModificationProperties> newProperties)\r
- {\r
- ignoreUnused (audioModification, newProperties);\r
- }\r
+ ARA::PlugIn::PropertiesPtr<ARA::ARAAudioModificationProperties> newProperties);\r
\r
/** Called after the audio modification's properties are updated.\r
@param audioModification The audio modification whose properties were updated.\r
*/\r
- virtual void didUpdateAudioModificationProperties (ARAAudioModification* audioModification)\r
- {\r
- ignoreUnused (audioModification);\r
- }\r
+ virtual void didUpdateAudioModificationProperties (ARAAudioModification* audioModification);\r
\r
/** Called when the audio modification's content (i.e. samples or notes) changes.\r
@param audioModification The audio modification with updated content.\r
@param scopeFlags The scope of the content update.\r
*/\r
- virtual void didUpdateAudioModificationContent (ARAAudioModification* audioModification, ARAContentUpdateScopes scopeFlags)\r
- {\r
- ignoreUnused (audioModification, scopeFlags);\r
- }\r
+ virtual void didUpdateAudioModificationContent (ARAAudioModification* audioModification,\r
+ ARAContentUpdateScopes scopeFlags);\r
\r
/** Called before an audio modification is activated or deactivated when being removed / added from the host's undo history.\r
@param audioModification The audio modification that was activated or deactivated\r
@param deactivate A bool indicating whether \p audioModification was deactivated or activated.\r
*/\r
- virtual void willDeactivateAudioModificationForUndoHistory (ARAAudioModification* audioModification, bool deactivate)\r
- {\r
- ignoreUnused (audioModification, deactivate);\r
- }\r
+ virtual void willDeactivateAudioModificationForUndoHistory (ARAAudioModification* audioModification,\r
+ bool deactivate);\r
\r
/** Called after an audio modification is activated or deactivated when being removed / added from the host's undo history.\r
@param audioModification The audio modification that was activated or deactivated\r
@param deactivate A bool indicating whether \p audioModification was deactivated or activated.\r
*/\r
- virtual void didDeactivateAudioModificationForUndoHistory (ARAAudioModification* audioModification, bool deactivate)\r
- {\r
- ignoreUnused (audioModification, deactivate);\r
- }\r
+ virtual void didDeactivateAudioModificationForUndoHistory (ARAAudioModification* audioModification,\r
+ bool deactivate);\r
\r
/** Called after a playback region is added to the audio modification.\r
@param audioModification The audio modification that \p playbackRegion was added to.\r
@param playbackRegion The playback region that was added to \p audioModification.\r
*/\r
virtual void didAddPlaybackRegionToAudioModification (ARAAudioModification* audioModification,\r
- ARAPlaybackRegion* playbackRegion)\r
- {\r
- ignoreUnused (audioModification, playbackRegion);\r
- }\r
+ ARAPlaybackRegion* playbackRegion);\r
\r
/** Called before a playback region is removed from the audio modification.\r
@param audioModification The audio modification that \p playbackRegion will be removed from.\r
@param playbackRegion The playback region that will be removed from \p audioModification.\r
*/\r
virtual void willRemovePlaybackRegionFromAudioModification (ARAAudioModification* audioModification,\r
- ARAPlaybackRegion* playbackRegion)\r
- {\r
- ignoreUnused (audioModification, playbackRegion);\r
- }\r
+ ARAPlaybackRegion* playbackRegion);\r
\r
/** Called before the audio modification is destroyed.\r
@param audioModification The audio modification that will be destroyed.\r
*/\r
- virtual void willDestroyAudioModification (ARAAudioModification* audioModification)\r
- {\r
- ignoreUnused (audioModification);\r
- }\r
-\r
- ARA_DISABLE_UNREFERENCED_PARAMETER_WARNING_END\r
+ virtual void willDestroyAudioModification (ARAAudioModification* audioModification);\r
};\r
\r
//==============================================================================\r
namespace juce\r
{\r
\r
-bool ARARenderer::processBlock (AudioBuffer<double>& buffer,\r
- AudioProcessor::Realtime realtime,\r
- const AudioPlayHead::PositionInfo& positionInfo) noexcept\r
+bool ARARenderer::processBlock ([[maybe_unused]] AudioBuffer<double>& buffer,\r
+ [[maybe_unused]] AudioProcessor::Realtime realtime,\r
+ [[maybe_unused]] const AudioPlayHead::PositionInfo& positionInfo) noexcept\r
{\r
- ignoreUnused (buffer, realtime, positionInfo);\r
-\r
// If you hit this assertion then either the caller called the double\r
// precision version of processBlock on a processor which does not support it\r
// (i.e. supportsDoublePrecisionProcessing() returns false), or the implementation\r
return false;\r
}\r
\r
+void ARARenderer::prepareToPlay ([[maybe_unused]] double sampleRate,\r
+ [[maybe_unused]] int maximumSamplesPerBlock,\r
+ [[maybe_unused]] int numChannels,\r
+ [[maybe_unused]] AudioProcessor::ProcessingPrecision precision,\r
+ [[maybe_unused]] AlwaysNonRealtime alwaysNonRealtime) {}\r
+\r
//==============================================================================\r
#if ARA_VALIDATE_API_CALLS\r
void ARAPlaybackRenderer::addPlaybackRegion (ARA::ARAPlaybackRegionRef playbackRegionRef) noexcept\r
}\r
#endif\r
\r
+bool ARAPlaybackRenderer::processBlock ([[maybe_unused]] AudioBuffer<float>& buffer,\r
+ [[maybe_unused]] AudioProcessor::Realtime realtime,\r
+ [[maybe_unused]] const AudioPlayHead::PositionInfo& positionInfo) noexcept\r
+{\r
+ return false;\r
+}\r
+\r
+//==============================================================================\r
+bool ARAEditorRenderer::processBlock ([[maybe_unused]] AudioBuffer<float>& buffer,\r
+ [[maybe_unused]] AudioProcessor::Realtime isNonRealtime,\r
+ [[maybe_unused]] const AudioPlayHead::PositionInfo& positionInfo) noexcept\r
+{\r
+ return true;\r
+}\r
+\r
//==============================================================================\r
void ARAEditorView::doNotifySelection (const ARA::PlugIn::ViewSelection* viewSelection) noexcept\r
{\r
listeners.remove (l);\r
}\r
\r
+void ARAEditorView::Listener::onNewSelection ([[maybe_unused]] const ARAViewSelection& viewSelection) {}\r
+void ARAEditorView::Listener::onHideRegionSequences ([[maybe_unused]] const std::vector<ARARegionSequence*>& regionSequences) {}\r
+\r
} // namespace juce\r
int maximumSamplesPerBlock,\r
int numChannels,\r
AudioProcessor::ProcessingPrecision precision,\r
- AlwaysNonRealtime alwaysNonRealtime = AlwaysNonRealtime::no)\r
- {\r
- ignoreUnused (sampleRate, maximumSamplesPerBlock, numChannels, precision, alwaysNonRealtime);\r
- }\r
+ AlwaysNonRealtime alwaysNonRealtime = AlwaysNonRealtime::no);\r
\r
/** Frees render resources allocated in prepareToPlay(). */\r
virtual void releaseResources() {}\r
\r
bool processBlock (AudioBuffer<float>& buffer,\r
AudioProcessor::Realtime realtime,\r
- const AudioPlayHead::PositionInfo& positionInfo) noexcept override\r
- {\r
- ignoreUnused (buffer, realtime, positionInfo);\r
- return false;\r
- }\r
+ const AudioPlayHead::PositionInfo& positionInfo) noexcept override;\r
\r
using ARARenderer::processBlock;\r
\r
// isNonRealtime of the process context - typically preview is limited to realtime.\r
bool processBlock (AudioBuffer<float>& buffer,\r
AudioProcessor::Realtime isNonRealtime,\r
- const AudioPlayHead::PositionInfo& positionInfo) noexcept override\r
- {\r
- ignoreUnused (buffer, isNonRealtime, positionInfo);\r
- return true;\r
- }\r
+ const AudioPlayHead::PositionInfo& positionInfo) noexcept override;\r
\r
using ARARenderer::processBlock;\r
\r
\r
// Shadowing templated getters to default to JUCE versions of the returned classes\r
template <typename RegionSequence_t = ARARegionSequence>\r
- std::vector<RegionSequence_t*> const& getHiddenRegionSequences() const noexcept\r
+ const std::vector<RegionSequence_t*>& getHiddenRegionSequences() const noexcept\r
{\r
return ARA::PlugIn::EditorView::getHiddenRegionSequences<RegionSequence_t>();\r
}\r
void doNotifySelection (const ARA::PlugIn::ViewSelection* currentSelection) noexcept override;\r
\r
// Base class implementation must be called if overridden\r
- void doNotifyHideRegionSequences (std::vector<ARA::PlugIn::RegionSequence*> const& regionSequences) noexcept override;\r
+ void doNotifyHideRegionSequences (const std::vector<ARA::PlugIn::RegionSequence*>& regionSequences) noexcept override;\r
\r
/** A base class for listeners that want to know about changes to an ARAEditorView object.\r
\r
/** Destructor. */\r
virtual ~Listener() = default;\r
\r
- ARA_DISABLE_UNREFERENCED_PARAMETER_WARNING_BEGIN\r
-\r
/** Called when the editor view's selection changes.\r
@param viewSelection The current selection state\r
*/\r
- virtual void onNewSelection (const ARAViewSelection& viewSelection)\r
- {\r
- ignoreUnused (viewSelection);\r
- }\r
+ virtual void onNewSelection (const ARAViewSelection& viewSelection);\r
\r
/** Called when region sequences are flagged as hidden in the host UI.\r
@param regionSequences A vector containing all hidden region sequences.\r
*/\r
- virtual void onHideRegionSequences (std::vector<ARARegionSequence*> const& regionSequences)\r
- {\r
- ignoreUnused (regionSequences);\r
- }\r
-\r
- ARA_DISABLE_UNREFERENCED_PARAMETER_WARNING_END\r
+ virtual void onHideRegionSequences (const std::vector<ARARegionSequence*>& regionSequences);\r
};\r
\r
/** \copydoc ARAListenableModelClass::addListener */\r
void add (std::unique_ptr<Items>... items)\r
{\r
parameters.reserve (parameters.size() + sizeof... (items));\r
-\r
- // We can replace this with some nicer code once generic lambdas become available. A\r
- // sequential context like an array initialiser is required to ensure we get the correct\r
- // order from the parameter pack.\r
- int unused[] { (parameters.emplace_back (MakeContents() (std::move (items))), 0)... };\r
- ignoreUnused (unused);\r
+ (parameters.push_back (makeParameterStorage (std::move (items))), ...);\r
}\r
\r
template <typename It, typename = ValidIfIterator<It>>\r
std::transform (std::make_move_iterator (begin),\r
std::make_move_iterator (end),\r
std::back_inserter (parameters),\r
- MakeContents());\r
+ [] (auto item) { return makeParameterStorage (std::move (item)); });\r
}\r
\r
ParameterLayout (const ParameterLayout& other) = delete;\r
std::unique_ptr<Contents> contents;\r
};\r
\r
- struct MakeContents final\r
+ template <typename Contents>\r
+ static std::unique_ptr<ParameterStorage<Contents>> makeParameterStorage (std::unique_ptr<Contents> contents)\r
{\r
- template <typename Item>\r
- std::unique_ptr<ParameterStorageBase> operator() (std::unique_ptr<Item> item) const\r
- {\r
- return std::unique_ptr<ParameterStorageBase> (new ParameterStorage<Item> (std::move (item)));\r
- }\r
- };\r
+ return std::make_unique<ParameterStorage<Contents>> (std::move (contents));\r
+ }\r
\r
void add() {}\r
\r
#endif\r
}\r
\r
-bool PluginHostType::isInAAXAudioSuite (AudioProcessor& processor)\r
+bool PluginHostType::isInAAXAudioSuite ([[maybe_unused]] AudioProcessor& processor)\r
{\r
#if JucePlugin_Build_AAX\r
if (PluginHostType::getPluginLoadedAs() == AudioProcessor::wrapperType_AAX\r
}\r
#endif\r
\r
- ignoreUnused (processor);\r
return false;\r
}\r
\r
-Image PluginHostType::getHostIcon (int size) const\r
+Image PluginHostType::getHostIcon ([[maybe_unused]] int size) const\r
{\r
- ignoreUnused (size);\r
-\r
#if JucePlugin_Enable_IAA && JucePlugin_Build_Standalone && JUCE_IOS && (! JUCE_USE_CUSTOM_PLUGIN_STANDALONE_APP)\r
if (isInterAppAudioConnected())\r
return juce_getIAAHostIcon (size);\r
case AdobeAudition: return "Adobe Audition";\r
case AdobePremierePro: return "Adobe Premiere";\r
case AppleGarageBand: return "Apple GarageBand";\r
+ case AppleInfoHelper: return "com.apple.audio.InfoHelper";\r
case AppleLogic: return "Apple Logic";\r
case AppleMainStage: return "Apple MainStage";\r
case Ardour: return "Ardour";\r
case AULab: return "AU Lab";\r
+ case AUVal: return "auval";\r
case AvidProTools: return "ProTools";\r
case BitwigStudio: return "Bitwig Studio";\r
case CakewalkSonar8: return "Cakewalk Sonar 8";\r
if (hostFilename.containsIgnoreCase ("pluginval")) return pluginval;\r
if (hostFilename.containsIgnoreCase ("AudioPluginHost")) return JUCEPluginHost;\r
if (hostFilename.containsIgnoreCase ("Vienna Ensemble Pro")) return ViennaEnsemblePro;\r
+ if (hostFilename.containsIgnoreCase ("auvaltool")) return AUVal;\r
+ if (hostFilename.containsIgnoreCase ("com.apple.audio.infohelper")) return AppleInfoHelper;\r
\r
if (hostIdReportedByWrapper == "com.apple.logic.pro") return AppleLogic;\r
if (hostIdReportedByWrapper == "com.apple.garageband") return AppleGarageBand;\r
AdobeAudition, /**< Represents Adobe Audition. */\r
AdobePremierePro, /**< Represents Adobe Premiere Pro. */\r
AppleGarageBand, /**< Represents Apple GarageBand. */\r
+ AppleInfoHelper, /**< Represents Apple com.apple.audio.InfoHelper. */\r
AppleLogic, /**< Represents Apple Logic Pro. */\r
AppleMainStage, /**< Represents Apple Main Stage. */\r
Ardour, /**< Represents Ardour. */\r
AULab, /**< Represents AU Lab. */\r
+ AUVal, /**< Represents Apple AU validator. */\r
AvidProTools, /**< Represents Avid Pro Tools. */\r
BitwigStudio, /**< Represents Bitwig Studio. */\r
CakewalkSonar8, /**< Represents Cakewalk Sonar 8. */\r
|| type == AbletonLiveGeneric; }\r
/** Returns true if the host is Adobe Audition. */\r
bool isAdobeAudition() const noexcept { return type == AdobeAudition; }\r
+ /** Returns true if the host is com.apple.audio.InfoHelper. */\r
+ bool isAppleInfoHelper() const noexcept { return type == AppleInfoHelper; }\r
/** Returns true if the host is Ardour. */\r
bool isArdour() const noexcept { return type == Ardour; }\r
/** Returns true if the host is AU Lab. */\r
bool isAULab() const noexcept { return type == AULab; }\r
+ /** Returns true if the host is auval. */\r
+ bool isAUVal() const noexcept { return type == AUVal; }\r
/** Returns true if the host is Bitwig Studio. */\r
bool isBitwigStudio() const noexcept { return type == BitwigStudio; }\r
/** Returns true if the host is any version of Steinberg Cubase. */\r
--- /dev/null
+/*\r
+ ==============================================================================\r
+\r
+ This file is part of the JUCE library.\r
+ Copyright (c) 2022 - Raw Material Software Limited\r
+\r
+ JUCE is an open source library subject to commercial or open-source\r
+ licensing.\r
+\r
+ By using JUCE, you agree to the terms of both the JUCE 7 End-User License\r
+ Agreement and JUCE Privacy Policy.\r
+\r
+ End User License Agreement: www.juce.com/juce-7-licence\r
+ Privacy Policy: www.juce.com/juce-privacy-policy\r
+\r
+ Or: You may also use this code under the terms of the GPL v3 (see\r
+ www.gnu.org/licenses).\r
+\r
+ JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER\r
+ EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE\r
+ DISCLAIMED.\r
+\r
+ ==============================================================================\r
+*/\r
+\r
+namespace juce\r
+{\r
+\r
+pointer_sized_int VSTCallbackHandler::handleVstPluginCanDo ([[maybe_unused]] int32 index,\r
+ [[maybe_unused]] pointer_sized_int value,\r
+ [[maybe_unused]] void* ptr,\r
+ [[maybe_unused]] float opt)\r
+{\r
+ return 0;\r
+}\r
+\r
+void VSTCallbackHandler::handleVstHostCallbackAvailable ([[maybe_unused]] std::function<VstHostCallbackType>&& callback) {}\r
+\r
+} // namespace juce\r
virtual pointer_sized_int handleVstPluginCanDo (int32 index,\r
pointer_sized_int value,\r
void* ptr,\r
- float opt)\r
- {\r
- ignoreUnused (index, value, ptr, opt);\r
- return 0;\r
- }\r
+ float opt);\r
\r
/** This is called by the VST plug-in wrapper when it receives unhandled\r
vendor specific calls from the host.\r
/** This is called once by the VST plug-in wrapper after its constructor.\r
You can use the supplied function to query the VST host.\r
*/\r
- virtual void handleVstHostCallbackAvailable (std::function<VstHostCallbackType>&& callback)\r
- {\r
- ignoreUnused (callback);\r
- }\r
+ virtual void handleVstHostCallbackAvailable (std::function<VstHostCallbackType>&& callback);\r
};\r
\r
} // namespace juce\r
\r
void AudioDeviceSelectorComponent::handleBluetoothButton()\r
{\r
- if (! RuntimePermissions::isGranted (RuntimePermissions::bluetoothMidi))\r
- RuntimePermissions::request (RuntimePermissions::bluetoothMidi, nullptr);\r
-\r
if (RuntimePermissions::isGranted (RuntimePermissions::bluetoothMidi))\r
+ {\r
BluetoothMidiDevicePairingDialogue::open();\r
+ }\r
+ else\r
+ {\r
+ RuntimePermissions::request (RuntimePermissions::bluetoothMidi, [] (auto)\r
+ {\r
+ if (RuntimePermissions::isGranted (RuntimePermissions::bluetoothMidi))\r
+ BluetoothMidiDevicePairingDialogue::open();\r
+ });\r
+ }\r
}\r
\r
ListBox* AudioDeviceSelectorComponent::getMidiInputSelectorListBox() const noexcept\r
noPendingUpdates.store (false);\r
}\r
\r
+//==============================================================================\r
+bool MidiKeyboardComponent::mouseDownOnKey ([[maybe_unused]] int midiNoteNumber, [[maybe_unused]] const MouseEvent& e) { return true; }\r
+bool MidiKeyboardComponent::mouseDraggedToKey ([[maybe_unused]] int midiNoteNumber, [[maybe_unused]] const MouseEvent& e) { return true; }\r
+void MidiKeyboardComponent::mouseUpOnKey ([[maybe_unused]] int midiNoteNumber, [[maybe_unused]] const MouseEvent& e) {}\r
+\r
} // namespace juce\r
\r
@see mouseDraggedToKey\r
*/\r
- virtual bool mouseDownOnKey (int midiNoteNumber, const MouseEvent& e) { ignoreUnused (midiNoteNumber, e); return true; }\r
+ virtual bool mouseDownOnKey (int midiNoteNumber, const MouseEvent& e);\r
\r
/** Callback when the mouse is dragged from one key onto another.\r
\r
\r
@see mouseDownOnKey\r
*/\r
- virtual bool mouseDraggedToKey (int midiNoteNumber, const MouseEvent& e) { ignoreUnused (midiNoteNumber, e); return true; }\r
+ virtual bool mouseDraggedToKey (int midiNoteNumber, const MouseEvent& e);\r
\r
/** Callback when the mouse is released from a key.\r
\r
@see mouseDownOnKey\r
*/\r
- virtual void mouseUpOnKey (int midiNoteNumber, const MouseEvent& e) { ignoreUnused (midiNoteNumber, e); }\r
+ virtual void mouseUpOnKey (int midiNoteNumber, const MouseEvent& e);\r
\r
/** Allows text to be drawn on the white notes.\r
\r
\r
ID: juce_audio_utils\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\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
if (toc.exists())\r
{\r
XmlDocument doc (toc);\r
- const char* error = CDReaderHelpers::getTrackOffsets (doc, trackStartSamples);\r
- ignoreUnused (error); // could be logged..\r
+ [[maybe_unused]] const char* error = CDReaderHelpers::getTrackOffsets (doc, trackStartSamples);\r
\r
lengthInSamples = trackStartSamples.getLast() - trackStartSamples.getFirst();\r
}\r
\r
ID: juce_box2d\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\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
@see addSorted, sort\r
*/\r
template <typename ElementComparator, typename TargetValueType>\r
- int indexOfSorted (ElementComparator& comparator, TargetValueType elementToLookFor) const\r
- {\r
- ignoreUnused (comparator); // if you pass in an object with a static compareElements() method, this\r
- // avoids getting warning messages about the parameter being unused\r
-\r
- const ScopedLockType lock (getLock());\r
-\r
- for (int s = 0, e = values.size();;)\r
- {\r
- if (s >= e)\r
- return -1;\r
-\r
- if (comparator.compareElements (elementToLookFor, values[s]) == 0)\r
- return s;\r
-\r
- auto halfway = (s + e) / 2;\r
-\r
- if (halfway == s)\r
- return -1;\r
-\r
- if (comparator.compareElements (elementToLookFor, values[halfway]) >= 0)\r
- s = halfway;\r
- else\r
- e = halfway;\r
- }\r
- }\r
+ int indexOfSorted (ElementComparator& comparator, TargetValueType elementToLookFor) const;\r
\r
//==============================================================================\r
/** Removes an element from the array.\r
@see addSorted, indexOfSorted, sortArray\r
*/\r
template <class ElementComparator>\r
- void sort (ElementComparator& comparator,\r
- bool retainOrderOfEquivalentItems = false)\r
- {\r
- const ScopedLockType lock (getLock());\r
- ignoreUnused (comparator); // if you pass in an object with a static compareElements() method, this\r
- // avoids getting warning messages about the parameter being unused\r
- sortArray (comparator, values.begin(), 0, size() - 1, retainOrderOfEquivalentItems);\r
- }\r
+ void sort (ElementComparator& comparator, bool retainOrderOfEquivalentItems = false);\r
\r
//==============================================================================\r
/** Returns the CriticalSection that locks this array.\r
}\r
};\r
\r
+//==============================================================================\r
+template <typename ElementType, typename TypeOfCriticalSectionToUse, int minimumAllocatedSize>\r
+template <typename ElementComparator, typename TargetValueType>\r
+int Array<ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize>::indexOfSorted (\r
+ [[maybe_unused]] ElementComparator& comparator,\r
+ TargetValueType elementToLookFor) const\r
+{\r
+ const ScopedLockType lock (getLock());\r
+\r
+ for (int s = 0, e = values.size();;)\r
+ {\r
+ if (s >= e)\r
+ return -1;\r
+\r
+ if (comparator.compareElements (elementToLookFor, values[s]) == 0)\r
+ return s;\r
+\r
+ auto halfway = (s + e) / 2;\r
+\r
+ if (halfway == s)\r
+ return -1;\r
+\r
+ if (comparator.compareElements (elementToLookFor, values[halfway]) >= 0)\r
+ s = halfway;\r
+ else\r
+ e = halfway;\r
+ }\r
+}\r
+\r
+template <typename ElementType, typename TypeOfCriticalSectionToUse, int minimumAllocatedSize>\r
+template <class ElementComparator>\r
+void Array<ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize>::sort (\r
+ [[maybe_unused]] ElementComparator& comparator,\r
+ bool retainOrderOfEquivalentItems)\r
+{\r
+ const ScopedLockType lock (getLock());\r
+ sortArray (comparator, values.begin(), 0, size() - 1, retainOrderOfEquivalentItems);\r
+}\r
+\r
} // namespace juce\r
template <typename... Elements>\r
void addImpl (Elements&&... toAdd)\r
{\r
- ignoreUnused (std::initializer_list<int> { (((void) checkSourceIsNotAMember (toAdd)), 0)... });\r
+ (checkSourceIsNotAMember (toAdd), ...);\r
ensureAllocatedSize (numUsed + (int) sizeof... (toAdd));\r
addAssumingCapacityIsReady (std::forward<Elements> (toAdd)...);\r
}\r
template <typename... Elements>\r
void addAssumingCapacityIsReady (Elements&&... toAdd)\r
{\r
- ignoreUnused (std::initializer_list<int> { ((void) (new (elements + numUsed++) ElementType (std::forward<Elements> (toAdd))), 0)... });\r
+ (new (elements + numUsed++) ElementType (std::forward<Elements> (toAdd)), ...);\r
}\r
\r
//==============================================================================\r
@param lastElement the index of the last element in the range (this is non-inclusive)\r
*/\r
template <class ElementType, class ElementComparator>\r
-static int findInsertIndexInSortedArray (ElementComparator& comparator,\r
+static int findInsertIndexInSortedArray ([[maybe_unused]] ElementComparator& comparator,\r
ElementType* const array,\r
const ElementType newElement,\r
int firstElement,\r
{\r
jassert (firstElement <= lastElement);\r
\r
- ignoreUnused (comparator); // if you pass in an object with a static compareElements() method, this\r
- // avoids getting warning messages about the parameter being unused\r
-\r
while (firstElement < lastElement)\r
{\r
if (comparator.compareElements (newElement, array [firstElement]) == 0)\r
decltype (auto) operator* () { return opt.operator* (); }\r
decltype (auto) operator* () const { return opt.operator* (); }\r
\r
- operator bool() const noexcept { return opt.has_value(); }\r
+ explicit operator bool() const noexcept { return opt.has_value(); }\r
bool hasValue() const noexcept { return opt.has_value(); }\r
\r
template <typename U>\r
*/\r
template <class ObjectClass,\r
class TypeOfCriticalSectionToUse = DummyCriticalSection>\r
-\r
class OwnedArray\r
{\r
public:\r
@see add, sort, indexOfSorted\r
*/\r
template <class ElementComparator>\r
- int addSorted (ElementComparator& comparator, ObjectClass* newObject) noexcept\r
- {\r
- // If you pass in an object with a static compareElements() method, this\r
- // avoids getting warning messages about the parameter being unused\r
- ignoreUnused (comparator);\r
-\r
- const ScopedLockType lock (getLock());\r
- auto index = findInsertIndexInSortedArray (comparator, values.begin(), newObject, 0, values.size());\r
- insert (index, newObject);\r
- return index;\r
- }\r
+ int addSorted (ElementComparator& comparator, ObjectClass* newObject) noexcept;\r
\r
/** Finds the index of an object in the array, assuming that the array is sorted.\r
\r
@see addSorted, sort\r
*/\r
template <typename ElementComparator>\r
- int indexOfSorted (ElementComparator& comparator, const ObjectClass* objectToLookFor) const noexcept\r
- {\r
- // If you pass in an object with a static compareElements() method, this\r
- // avoids getting warning messages about the parameter being unused\r
- ignoreUnused (comparator);\r
-\r
- const ScopedLockType lock (getLock());\r
- int s = 0, e = values.size();\r
-\r
- while (s < e)\r
- {\r
- if (comparator.compareElements (objectToLookFor, values[s]) == 0)\r
- return s;\r
-\r
- auto halfway = (s + e) / 2;\r
-\r
- if (halfway == s)\r
- break;\r
-\r
- if (comparator.compareElements (objectToLookFor, values[halfway]) >= 0)\r
- s = halfway;\r
- else\r
- e = halfway;\r
- }\r
-\r
- return -1;\r
- }\r
+ int indexOfSorted (ElementComparator& comparator, const ObjectClass* objectToLookFor) const noexcept;\r
\r
//==============================================================================\r
/** Removes an object from the array.\r
@see sortArray, indexOfSorted\r
*/\r
template <class ElementComparator>\r
- void sort (ElementComparator& comparator,\r
- bool retainOrderOfEquivalentItems = false) noexcept\r
- {\r
- // If you pass in an object with a static compareElements() method, this\r
- // avoids getting warning messages about the parameter being unused\r
- ignoreUnused (comparator);\r
-\r
- const ScopedLockType lock (getLock());\r
-\r
- if (size() > 1)\r
- sortArray (comparator, values.begin(), 0, size() - 1, retainOrderOfEquivalentItems);\r
- }\r
+ void sort (ElementComparator& comparator, bool retainOrderOfEquivalentItems = false) noexcept;\r
\r
//==============================================================================\r
/** Returns the CriticalSection that locks this array.\r
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OwnedArray)\r
};\r
\r
+//==============================================================================\r
+template <class ObjectClass, class TypeOfCriticalSectionToUse>\r
+template <class ElementComparator>\r
+int OwnedArray<ObjectClass, TypeOfCriticalSectionToUse>::addSorted (\r
+ [[maybe_unused]] ElementComparator& comparator,\r
+ ObjectClass* newObject) noexcept\r
+{\r
+ const ScopedLockType lock (getLock());\r
+ auto index = findInsertIndexInSortedArray (comparator, values.begin(), newObject, 0, values.size());\r
+ insert (index, newObject);\r
+ return index;\r
+}\r
+\r
+template <class ObjectClass, class TypeOfCriticalSectionToUse>\r
+template <typename ElementComparator>\r
+int OwnedArray<ObjectClass, TypeOfCriticalSectionToUse>::indexOfSorted (\r
+ [[maybe_unused]] ElementComparator& comparator,\r
+ const ObjectClass* objectToLookFor) const noexcept\r
+{\r
+ const ScopedLockType lock (getLock());\r
+ int s = 0, e = values.size();\r
+\r
+ while (s < e)\r
+ {\r
+ if (comparator.compareElements (objectToLookFor, values[s]) == 0)\r
+ return s;\r
+\r
+ auto halfway = (s + e) / 2;\r
+\r
+ if (halfway == s)\r
+ break;\r
+\r
+ if (comparator.compareElements (objectToLookFor, values[halfway]) >= 0)\r
+ s = halfway;\r
+ else\r
+ e = halfway;\r
+ }\r
+\r
+ return -1;\r
+}\r
+\r
+template <class ObjectClass, class TypeOfCriticalSectionToUse>\r
+template <typename ElementComparator>\r
+void OwnedArray<ObjectClass, TypeOfCriticalSectionToUse>::sort (\r
+ [[maybe_unused]] ElementComparator& comparator,\r
+ bool retainOrderOfEquivalentItems) noexcept\r
+{\r
+ const ScopedLockType lock (getLock());\r
+\r
+ if (size() > 1)\r
+ sortArray (comparator, values.begin(), 0, size() - 1, retainOrderOfEquivalentItems);\r
+}\r
+\r
} // namespace juce\r
@see addSorted, sort\r
*/\r
template <class ElementComparator>\r
- int indexOfSorted (ElementComparator& comparator,\r
- const ObjectClass* objectToLookFor) const noexcept\r
- {\r
- ignoreUnused (comparator);\r
- const ScopedLockType lock (getLock());\r
- int s = 0, e = values.size();\r
-\r
- while (s < e)\r
- {\r
- if (comparator.compareElements (objectToLookFor, values[s]) == 0)\r
- return s;\r
-\r
- auto halfway = (s + e) / 2;\r
-\r
- if (halfway == s)\r
- break;\r
-\r
- if (comparator.compareElements (objectToLookFor, values[halfway]) >= 0)\r
- s = halfway;\r
- else\r
- e = halfway;\r
- }\r
-\r
- return -1;\r
- }\r
+ int indexOfSorted (ElementComparator& comparator, const ObjectClass* objectToLookFor) const noexcept;\r
\r
//==============================================================================\r
/** Removes an object from the array.\r
@see sortArray\r
*/\r
template <class ElementComparator>\r
- void sort (ElementComparator& comparator,\r
- bool retainOrderOfEquivalentItems = false) noexcept\r
- {\r
- // If you pass in an object with a static compareElements() method, this\r
- // avoids getting warning messages about the parameter being unused\r
- ignoreUnused (comparator);\r
-\r
- const ScopedLockType lock (getLock());\r
- sortArray (comparator, values.begin(), 0, values.size() - 1, retainOrderOfEquivalentItems);\r
- }\r
+ void sort (ElementComparator& comparator, bool retainOrderOfEquivalentItems = false) noexcept;\r
\r
//==============================================================================\r
/** Reduces the amount of storage being used by the array.\r
}\r
};\r
\r
+//==============================================================================\r
+template <class ObjectClass, class TypeOfCriticalSectionToUse>\r
+template <class ElementComparator>\r
+int ReferenceCountedArray<ObjectClass, TypeOfCriticalSectionToUse>::indexOfSorted (\r
+ [[maybe_unused]] ElementComparator& comparator,\r
+ const ObjectClass* objectToLookFor) const noexcept\r
+{\r
+ const ScopedLockType lock (getLock());\r
+ int s = 0, e = values.size();\r
+\r
+ while (s < e)\r
+ {\r
+ if (comparator.compareElements (objectToLookFor, values[s]) == 0)\r
+ return s;\r
+\r
+ auto halfway = (s + e) / 2;\r
+\r
+ if (halfway == s)\r
+ break;\r
+\r
+ if (comparator.compareElements (objectToLookFor, values[halfway]) >= 0)\r
+ s = halfway;\r
+ else\r
+ e = halfway;\r
+ }\r
+\r
+ return -1;\r
+}\r
+\r
+template <class ObjectClass, class TypeOfCriticalSectionToUse>\r
+template <class ElementComparator>\r
+void ReferenceCountedArray<ObjectClass, TypeOfCriticalSectionToUse>::sort (\r
+ [[maybe_unused]] ElementComparator& comparator,\r
+ bool retainOrderOfEquivalentItems) noexcept\r
+{\r
+ const ScopedLockType lock (getLock());\r
+ sortArray (comparator, values.begin(), 0, values.size() - 1, retainOrderOfEquivalentItems);\r
+}\r
+\r
} // namespace juce\r
static constexpr VariantType attributesObject { VariantType::ObjectTag{} };\r
};\r
\r
-constexpr var::VariantType var::Instance::attributesVoid;\r
-constexpr var::VariantType var::Instance::attributesUndefined;\r
-constexpr var::VariantType var::Instance::attributesInt;\r
-constexpr var::VariantType var::Instance::attributesInt64;\r
-constexpr var::VariantType var::Instance::attributesBool;\r
-constexpr var::VariantType var::Instance::attributesDouble;\r
-constexpr var::VariantType var::Instance::attributesMethod;\r
-constexpr var::VariantType var::Instance::attributesArray;\r
-constexpr var::VariantType var::Instance::attributesString;\r
-constexpr var::VariantType var::Instance::attributesBinary;\r
-constexpr var::VariantType var::Instance::attributesObject;\r
-\r
//==============================================================================\r
var::var() noexcept : type (&Instance::attributesVoid) {}\r
var::var (const VariantType& t) noexcept : type (&t) {}\r
}\r
\r
bool File::createSymbolicLink (const File& linkFileToCreate,\r
- const String& nativePathOfTarget,\r
+ [[maybe_unused]] const String& nativePathOfTarget,\r
bool overwriteExisting)\r
{\r
if (linkFileToCreate.exists())\r
nativePathOfTarget.toWideCharPointer(),\r
targetFile.isDirectory() ? SYMBOLIC_LINK_FLAG_DIRECTORY : 0) != FALSE;\r
#else\r
- ignoreUnused (nativePathOfTarget);\r
jassertfalse; // symbolic links not supported on this platform!\r
return false;\r
#endif\r
Expression* parseFunctionCall (FunctionCall* call, ExpPtr& function)\r
{\r
std::unique_ptr<FunctionCall> s (call);\r
- s->object.reset (function.release());\r
+ s->object = std::move (function);\r
match (TokenTypes::openParen);\r
\r
while (currentType != TokenTypes::closeParen)\r
if (matchIf (TokenTypes::openBracket))\r
{\r
std::unique_ptr<ArraySubscript> s (new ArraySubscript (location));\r
- s->object.reset (input.release());\r
+ s->object = std::move (input);\r
s->index.reset (parseExpression());\r
match (TokenTypes::closeBracket);\r
return parseSuffixes (s.release());\r
Expression* parseTernaryOperator (ExpPtr& condition)\r
{\r
std::unique_ptr<ConditionalOp> e (new ConditionalOp (location));\r
- e->condition.reset (condition.release());\r
+ e->condition = std::move (condition);\r
e->trueBranch.reset (parseExpression());\r
match (TokenTypes::colon);\r
e->falseBranch.reset (parseExpression());\r
setMethod ("clone", cloneFn);\r
}\r
\r
- static Identifier getClassName() { static const Identifier i ("Object"); return i; }\r
- static var dump (Args a) { DBG (JSON::toString (a.thisObject)); ignoreUnused (a); return var::undefined(); }\r
- static var cloneFn (Args a) { return a.thisObject.clone(); }\r
+ static Identifier getClassName() { static const Identifier i ("Object"); return i; }\r
+ static var dump ([[maybe_unused]] Args a) { DBG (JSON::toString (a.thisObject)); return var::undefined(); }\r
+ static var cloneFn (Args a) { return a.thisObject.clone(); }\r
};\r
\r
//==============================================================================\r
\r
ID: juce_core\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\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
String getName() const { return "-"; }\r
TermPtr negated() { return input; }\r
\r
- TermPtr createTermToEvaluateInput (const Scope& scope, const Term* t, double overallTarget, Term* topLevelTerm) const\r
+ TermPtr createTermToEvaluateInput (const Scope& scope, [[maybe_unused]] const Term* t, double overallTarget, Term* topLevelTerm) const\r
{\r
- ignoreUnused (t);\r
jassert (t == input);\r
\r
const Term* const dest = findDestinationFor (topLevelTerm, this);\r
// implementation of all methods trying to use the OwnedArray (e.g. the destructor\r
// of the class owning it) into cpp files where they can see to the definition\r
// of ObjectType. This should fix the error.\r
- ignoreUnused (sizeof (ObjectType));\r
+ [[maybe_unused]] constexpr auto size = sizeof (ObjectType);\r
\r
delete object;\r
}\r
template <typename Fn> struct ScopeGuard : Fn { ~ScopeGuard() { Fn::operator()(); } };\r
template <typename Fn> ScopeGuard (Fn) -> ScopeGuard<Fn>;\r
\r
+#ifndef DOXYGEN\r
+namespace detail\r
+{\r
+template <typename Functor, typename Return, typename... Args>\r
+static constexpr auto toFnPtr (Functor functor, Return (Functor::*) (Args...) const)\r
+{\r
+ return static_cast<Return (*) (Args...)> (functor);\r
+}\r
+} // namespace detail\r
+#endif\r
+\r
+/** Converts a captureless lambda to its equivalent function pointer type. */\r
+template <typename Functor>\r
+static constexpr auto toFnPtr (Functor functor) { return detail::toFnPtr (functor, &Functor::operator()); }\r
+\r
} // namespace juce\r
writeExternalStorage = 4,\r
\r
/** Permission to use camera */\r
- camera = 5\r
+ camera = 5,\r
+\r
+ /** Permission to read audio files that your app didn't create.\r
+ Has the same effect as readExternalStorage on iOS and Android versions before 33.\r
+ */\r
+ readMediaAudio = 6,\r
+\r
+ /** Permission to read image files that your app didn't create.\r
+ Has the same effect as readExternalStorage on iOS and Android versions before 33.\r
+ */\r
+ readMediaImages = 7,\r
+\r
+ /** Permission to read video files that your app didn't create.\r
+ Has the same effect as readExternalStorage on iOS and Android versions before 33.\r
+ */\r
+ readMediaVideo = 8\r
};\r
\r
//==============================================================================\r
auto* env = getEnv();\r
LocalRef<jobjectArray> array { env->NewObjectArray (sizeof... (args), JavaString, nullptr) };\r
\r
- int unused[] { (env->SetObjectArrayElement (array.get(), Ix, args.get()), 0)... };\r
- ignoreUnused (unused);\r
+ (env->SetObjectArrayElement (array.get(), Ix, args.get()), ...);\r
\r
return array;\r
}\r
};\r
\r
//==============================================================================\r
-void AndroidDocumentPermission::takePersistentReadWriteAccess (const URL& url)\r
+void AndroidDocumentPermission::takePersistentReadWriteAccess ([[maybe_unused]] const URL& url)\r
{\r
#if JUCE_ANDROID\r
AndroidDocumentDetail::setPermissions (url, ContentResolver19.takePersistableUriPermission);\r
- #else\r
- ignoreUnused (url);\r
#endif\r
}\r
\r
-void AndroidDocumentPermission::releasePersistentReadWriteAccess (const URL& url)\r
+void AndroidDocumentPermission::releasePersistentReadWriteAccess ([[maybe_unused]] const URL& url)\r
{\r
#if JUCE_ANDROID\r
AndroidDocumentDetail::setPermissions (url, ContentResolver19.releasePersistableUriPermission);\r
- #else\r
- ignoreUnused (url);\r
#endif\r
}\r
\r
: nullptr };\r
}\r
\r
-AndroidDocument AndroidDocument::fromDocument (const URL& documentUrl)\r
+AndroidDocument AndroidDocument::fromDocument ([[maybe_unused]] const URL& documentUrl)\r
{\r
#if JUCE_ANDROID\r
if (getAndroidSDKVersion() < 19)\r
\r
return AndroidDocument { Utils::createPimplForSdk (javaUri) };\r
#else\r
- ignoreUnused (documentUrl);\r
return AndroidDocument{};\r
#endif\r
}\r
\r
-AndroidDocument AndroidDocument::fromTree (const URL& treeUrl)\r
+AndroidDocument AndroidDocument::fromTree ([[maybe_unused]] const URL& treeUrl)\r
{\r
#if JUCE_ANDROID\r
if (getAndroidSDKVersion() < 21)\r
\r
return AndroidDocument { Utils::createPimplForSdk (documentUri) };\r
#else\r
- ignoreUnused (treeUrl);\r
return AndroidDocument{};\r
#endif\r
}\r
CALLBACK (juce_invokeImplementer, "dispatchInvoke", "(JLjava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;") \\r
CALLBACK (juce_dispatchDelete, "dispatchFinalize", "(J)V")\r
\r
- DECLARE_JNI_CLASS_WITH_BYTECODE (JuceInvocationHandler, "com/rmsl/juce/JuceInvocationHandler", 10, invocationHandleByteCode, sizeof (invocationHandleByteCode))\r
+ DECLARE_JNI_CLASS_WITH_BYTECODE (JuceInvocationHandler, "com/rmsl/juce/JuceInvocationHandler", 10, invocationHandleByteCode)\r
#undef JNI_CLASS_MEMBERS\r
\r
#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \\r
};\r
\r
//==============================================================================\r
-JNIClassBase::JNIClassBase (const char* cp, int classMinSDK, const void* bc, size_t n)\r
+JNIClassBase::JNIClassBase (const char* cp, int classMinSDK, const uint8* bc, size_t n)\r
: classPath (cp), byteCode (bc), byteCodeSize (n), minSDK (classMinSDK), classRef (nullptr)\r
{\r
SystemJavaClassComparator comparator;\r
#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \\r
METHOD (construct, "<init>", "()V") \\r
METHOD (close, "close", "()V") \\r
- CALLBACK (FragmentOverlay::onActivityResultNative, "onActivityResultNative", "(JIILandroid/content/Intent;)V") \\r
- CALLBACK (FragmentOverlay::onCreateNative, "onCreateNative", "(JLandroid/os/Bundle;)V") \\r
- CALLBACK (FragmentOverlay::onStartNative, "onStartNative", "(J)V") \\r
- CALLBACK (FragmentOverlay::onRequestPermissionsResultNative, "onRequestPermissionsResultNative", "(JI[Ljava/lang/String;[I)V")\r
+ CALLBACK (generatedCallback<&FragmentOverlay::onActivityResultCallback>, "onActivityResultNative", "(JIILandroid/content/Intent;)V") \\r
+ CALLBACK (generatedCallback<&FragmentOverlay::onCreatedCallback>, "onCreateNative", "(JLandroid/os/Bundle;)V") \\r
+ CALLBACK (generatedCallback<&FragmentOverlay::onStartCallback>, "onStartNative", "(J)V") \\r
+ CALLBACK (generatedCallback<&FragmentOverlay::onRequestPermissionsResultCallback>, "onRequestPermissionsResultNative", "(JI[Ljava/lang/String;[I)V")\r
\r
- DECLARE_JNI_CLASS_WITH_BYTECODE (JuceFragmentOverlay, "com/rmsl/juce/FragmentOverlay", 16, javaFragmentOverlay, sizeof(javaFragmentOverlay))\r
+ DECLARE_JNI_CLASS_WITH_BYTECODE (JuceFragmentOverlay, "com/rmsl/juce/FragmentOverlay", 16, javaFragmentOverlay)\r
#undef JNI_CLASS_MEMBERS\r
\r
#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \\r
env->CallVoidMethod (native.get(), AndroidDialogFragment.show, fm.get(), javaString ("FragmentOverlay").get());\r
}\r
\r
-void FragmentOverlay::onActivityResultNative (JNIEnv* env, jobject, jlong host,\r
- jint requestCode, jint resultCode, jobject data)\r
+void FragmentOverlay::onCreatedCallback (JNIEnv* env, FragmentOverlay& t, jobject obj)\r
{\r
- if (auto* myself = reinterpret_cast<FragmentOverlay*> (host))\r
- myself->onActivityResult (requestCode, resultCode, LocalRef<jobject> (env->NewLocalRef (data)));\r
+ t.onCreated (LocalRef<jobject> { env->NewLocalRef (obj) });\r
}\r
\r
-void FragmentOverlay::onCreateNative (JNIEnv* env, jobject, jlong host, jobject bundle)\r
+void FragmentOverlay::onStartCallback (JNIEnv*, FragmentOverlay& t)\r
{\r
- if (auto* myself = reinterpret_cast<FragmentOverlay*> (host))\r
- myself->onCreated (LocalRef<jobject> (env->NewLocalRef (bundle)));\r
+ t.onStart();\r
}\r
\r
-void FragmentOverlay::onStartNative (JNIEnv*, jobject, jlong host)\r
+void FragmentOverlay::onRequestPermissionsResultCallback (JNIEnv* env, FragmentOverlay& t, jint requestCode, jobjectArray jPermissions, jintArray jGrantResults)\r
{\r
- if (auto* myself = reinterpret_cast<FragmentOverlay*> (host))\r
- myself->onStart();\r
-}\r
+ Array<int> grantResults;\r
+ int n = (jGrantResults != nullptr ? env->GetArrayLength (jGrantResults) : 0);\r
\r
-void FragmentOverlay::onRequestPermissionsResultNative (JNIEnv* env, jobject, jlong host, jint requestCode,\r
- jobjectArray jPermissions, jintArray jGrantResults)\r
-{\r
- if (auto* myself = reinterpret_cast<FragmentOverlay*> (host))\r
+ if (n > 0)\r
{\r
- Array<int> grantResults;\r
- int n = (jGrantResults != nullptr ? env->GetArrayLength (jGrantResults) : 0);\r
+ auto* data = env->GetIntArrayElements (jGrantResults, nullptr);\r
\r
- if (n > 0)\r
- {\r
- auto* data = env->GetIntArrayElements (jGrantResults, nullptr);\r
+ for (int i = 0; i < n; ++i)\r
+ grantResults.add (data[i]);\r
\r
- for (int i = 0; i < n; ++i)\r
- grantResults.add (data[i]);\r
+ env->ReleaseIntArrayElements (jGrantResults, data, 0);\r
+ }\r
\r
- env->ReleaseIntArrayElements (jGrantResults, data, 0);\r
- }\r
+ t.onRequestPermissionsResult (requestCode,\r
+ javaStringArrayToJuce (LocalRef<jobjectArray> (jPermissions)),\r
+ grantResults);\r
+}\r
\r
- myself->onRequestPermissionsResult (requestCode,\r
- javaStringArrayToJuce (LocalRef<jobjectArray> (jPermissions)),\r
- grantResults);\r
- }\r
+void FragmentOverlay::onActivityResultCallback (JNIEnv* env, FragmentOverlay& t, jint requestCode, jint resultCode, jobject data)\r
+{\r
+ t.onActivityResult (requestCode, resultCode, LocalRef<jobject> (env->NewLocalRef (data)));\r
}\r
\r
jobject FragmentOverlay::getNativeHandle()\r
class JNIClassBase\r
{\r
public:\r
- JNIClassBase (const char* classPath, int minSDK, const void* byteCode, size_t byteCodeSize);\r
+ JNIClassBase (const char* classPath, int minSDK, const uint8* byteCode, size_t byteCodeSize);\r
virtual ~JNIClassBase();\r
\r
operator jclass() const noexcept { return classRef; }\r
};\r
\r
//==============================================================================\r
+template <typename T, size_t N> constexpr auto numBytes (const T (&) [N]) { return N; }\r
+ constexpr auto numBytes (std::nullptr_t) { return static_cast<size_t> (0); }\r
+\r
#define CREATE_JNI_METHOD(methodID, stringName, params) methodID = resolveMethod (env, stringName, params);\r
#define CREATE_JNI_STATICMETHOD(methodID, stringName, params) methodID = resolveStaticMethod (env, stringName, params);\r
#define CREATE_JNI_FIELD(fieldID, stringName, signature) fieldID = resolveField (env, stringName, signature);\r
#define DECLARE_JNI_FIELD(fieldID, stringName, signature) jfieldID fieldID;\r
#define DECLARE_JNI_CALLBACK(fieldID, stringName, signature)\r
\r
-#define DECLARE_JNI_CLASS_WITH_BYTECODE(CppClassName, javaPath, minSDK, byteCodeData, byteCodeSize) \\r
- class CppClassName ## _Class : public JNIClassBase \\r
- { \\r
- public: \\r
- CppClassName ## _Class() : JNIClassBase (javaPath, minSDK, byteCodeData, byteCodeSize) {} \\r
- \\r
- void initialiseFields (JNIEnv* env) \\r
- { \\r
- Array<JNINativeMethod> callbacks; \\r
- JNI_CLASS_MEMBERS (CREATE_JNI_METHOD, CREATE_JNI_STATICMETHOD, CREATE_JNI_FIELD, CREATE_JNI_STATICFIELD, CREATE_JNI_CALLBACK); \\r
- resolveCallbacks (env, callbacks); \\r
- } \\r
- \\r
- JNI_CLASS_MEMBERS (DECLARE_JNI_METHOD, DECLARE_JNI_METHOD, DECLARE_JNI_FIELD, DECLARE_JNI_FIELD, DECLARE_JNI_CALLBACK) \\r
- }; \\r
- static CppClassName ## _Class CppClassName;\r
+#define DECLARE_JNI_CLASS_WITH_BYTECODE(CppClassName, javaPath, minSDK, byteCodeData) \\r
+ class CppClassName ## _Class : public JNIClassBase \\r
+ { \\r
+ public: \\r
+ CppClassName ## _Class() : JNIClassBase (javaPath, minSDK, byteCodeData, numBytes (byteCodeData)) {} \\r
+ \\r
+ void initialiseFields (JNIEnv* env) \\r
+ { \\r
+ Array<JNINativeMethod> callbacks; \\r
+ JNI_CLASS_MEMBERS (CREATE_JNI_METHOD, CREATE_JNI_STATICMETHOD, CREATE_JNI_FIELD, CREATE_JNI_STATICFIELD, CREATE_JNI_CALLBACK); \\r
+ resolveCallbacks (env, callbacks); \\r
+ } \\r
+ \\r
+ JNI_CLASS_MEMBERS (DECLARE_JNI_METHOD, DECLARE_JNI_METHOD, DECLARE_JNI_FIELD, DECLARE_JNI_FIELD, DECLARE_JNI_CALLBACK) \\r
+ }; \\r
+ static inline const CppClassName ## _Class CppClassName;\r
\r
//==============================================================================\r
#define DECLARE_JNI_CLASS_WITH_MIN_SDK(CppClassName, javaPath, minSDK) \\r
- DECLARE_JNI_CLASS_WITH_BYTECODE (CppClassName, javaPath, minSDK, nullptr, 0)\r
+ DECLARE_JNI_CLASS_WITH_BYTECODE (CppClassName, javaPath, minSDK, nullptr)\r
\r
//==============================================================================\r
#define DECLARE_JNI_CLASS(CppClassName, javaPath) \\r
const Array<int>& /*grantResults*/) {}\r
virtual void onActivityResult (int /*requestCode*/, int /*resultCode*/, LocalRef<jobject> /*data*/) {}\r
\r
+ /** @internal */\r
+ static void onCreatedCallback (JNIEnv*, FragmentOverlay&, jobject obj);\r
+ /** @internal */\r
+ static void onStartCallback (JNIEnv*, FragmentOverlay&);\r
+ /** @internal */\r
+ static void onRequestPermissionsResultCallback (JNIEnv*, FragmentOverlay&, jint requestCode, jobjectArray jPermissions, jintArray jGrantResults);\r
+ /** @internal */\r
+ static void onActivityResultCallback (JNIEnv*, FragmentOverlay&, jint requestCode, jint resultCode, jobject data);\r
+\r
protected:\r
jobject getNativeHandle();\r
\r
private:\r
-\r
GlobalRef native;\r
-\r
-public:\r
- /* internal: do not use */\r
- static void onActivityResultNative (JNIEnv*, jobject, jlong, jint, jint, jobject);\r
- static void onCreateNative (JNIEnv*, jobject, jlong, jobject);\r
- static void onStartNative (JNIEnv*, jobject, jlong);\r
- static void onRequestPermissionsResultNative (JNIEnv*, jobject, jlong, jint,\r
- jobjectArray, jintArray);\r
};\r
\r
//==============================================================================\r
bool androidHasSystemFeature (const String& property);\r
String audioManagerGetProperty (const String& property);\r
\r
+namespace detail\r
+{\r
+\r
+template <auto Fn, typename Result, typename Class, typename... Args>\r
+inline constexpr auto generatedCallbackImpl =\r
+ juce::toFnPtr (JNICALL [] (JNIEnv* env, jobject, jlong host, Args... args) -> Result\r
+ {\r
+ if (auto* object = reinterpret_cast<Class*> (host))\r
+ return Fn (env, *object, args...);\r
+\r
+ return {};\r
+ });\r
+\r
+template <auto Fn, typename Result, typename Class, typename... Args>\r
+constexpr auto generateCallbackImpl (Result (*) (JNIEnv*, Class&, Args...)) { return generatedCallbackImpl<Fn, Result, Class, Args...>; }\r
+\r
+template <auto Fn, typename Result, typename Class, typename... Args>\r
+constexpr auto generateCallbackImpl (Result (*) (JNIEnv*, const Class&, Args...)) { return generatedCallbackImpl<Fn, Result, Class, Args...>; }\r
+\r
+} // namespace detail\r
+\r
+// Evaluates to a static function that forwards to the provided Fn, assuming that the\r
+// 'host' argument points to an object on which it is valid to call Fn\r
+template <auto Fn>\r
+inline constexpr auto generatedCallback = detail::generateCallbackImpl<Fn> (Fn);\r
+\r
} // namespace juce\r
METHOD (isExhausted, "isExhausted", "()Z") \\r
METHOD (setPosition, "setPosition", "(J)Z") \\r
\r
-DECLARE_JNI_CLASS_WITH_BYTECODE (HTTPStream, "com/rmsl/juce/JuceHTTPStream", 16, javaJuceHttpStream, sizeof(javaJuceHttpStream))\r
+DECLARE_JNI_CLASS_WITH_BYTECODE (HTTPStream, "com/rmsl/juce/JuceHTTPStream", 16, javaJuceHttpStream)\r
#undef JNI_CLASS_MEMBERS\r
\r
//==============================================================================\r
{\r
\r
//==============================================================================\r
-static String jucePermissionToAndroidPermission (RuntimePermissions::PermissionID permission)\r
+static StringArray jucePermissionToAndroidPermissions (RuntimePermissions::PermissionID permission)\r
{\r
+ const auto externalStorageOrMedia = [] (const auto* newPermission)\r
+ {\r
+ return getAndroidSDKVersion() < 33 ? "android.permission.READ_EXTERNAL_STORAGE" : newPermission;\r
+ };\r
+\r
switch (permission)\r
{\r
- case RuntimePermissions::recordAudio: return "android.permission.RECORD_AUDIO";\r
- case RuntimePermissions::bluetoothMidi: return "android.permission.ACCESS_FINE_LOCATION";\r
- case RuntimePermissions::readExternalStorage: return "android.permission.READ_EXTERNAL_STORAGE";\r
- case RuntimePermissions::writeExternalStorage: return "android.permission.WRITE_EXTERNAL_STORAGE";\r
- case RuntimePermissions::camera: return "android.permission.CAMERA";\r
+ case RuntimePermissions::recordAudio: return { "android.permission.RECORD_AUDIO" };\r
+ case RuntimePermissions::bluetoothMidi:\r
+ {\r
+ if (getAndroidSDKVersion() < 31)\r
+ return { "android.permission.ACCESS_FINE_LOCATION" };\r
+\r
+ return { "android.permission.BLUETOOTH_SCAN",\r
+ "android.permission.BLUETOOTH_CONNECT" };\r
+ }\r
+\r
+ case RuntimePermissions::writeExternalStorage: return { "android.permission.WRITE_EXTERNAL_STORAGE" };\r
+ case RuntimePermissions::camera: return { "android.permission.CAMERA" };\r
+\r
+ case RuntimePermissions::readExternalStorage:\r
+ {\r
+ // See: https://developer.android.com/reference/android/Manifest.permission#READ_EXTERNAL_STORAGE\r
+ if (getAndroidSDKVersion() < 33)\r
+ return { "android.permission.READ_EXTERNAL_STORAGE" };\r
+\r
+ return { "android.permission.READ_MEDIA_AUDIO",\r
+ "android.permission.READ_MEDIA_IMAGES",\r
+ "android.permission.READ_MEDIA_VIDEO" };\r
+ }\r
+\r
+ case RuntimePermissions::readMediaAudio:\r
+ return { externalStorageOrMedia ("android.permission.READ_MEDIA_AUDIO") };\r
+\r
+ case RuntimePermissions::readMediaImages:\r
+ return { externalStorageOrMedia ("android.permission.READ_MEDIA_IMAGES") };\r
+\r
+ case RuntimePermissions::readMediaVideo:\r
+ return { externalStorageOrMedia ("android.permission.READ_MEDIA_VIDEO") };\r
}\r
\r
// invalid permission\r
\r
static RuntimePermissions::PermissionID androidPermissionToJucePermission (const String& permission)\r
{\r
- if (permission == "android.permission.RECORD_AUDIO") return RuntimePermissions::recordAudio;\r
- else if (permission == "android.permission.ACCESS_FINE_LOCATION") return RuntimePermissions::bluetoothMidi;\r
- else if (permission == "android.permission.READ_EXTERNAL_STORAGE") return RuntimePermissions::readExternalStorage;\r
- else if (permission == "android.permission.WRITE_EXTERNAL_STORAGE") return RuntimePermissions::writeExternalStorage;\r
- else if (permission == "android.permission.CAMERA") return RuntimePermissions::camera;\r
+ static const std::map<String, RuntimePermissions::PermissionID> map\r
+ {\r
+ { "android.permission.RECORD_AUDIO", RuntimePermissions::recordAudio },\r
+ { "android.permission.ACCESS_FINE_LOCATION", RuntimePermissions::bluetoothMidi },\r
+ { "android.permission.READ_EXTERNAL_STORAGE", RuntimePermissions::readExternalStorage },\r
+ { "android.permission.WRITE_EXTERNAL_STORAGE", RuntimePermissions::writeExternalStorage },\r
+ { "android.permission.CAMERA", RuntimePermissions::camera },\r
+ { "android.permission.READ_MEDIA_AUDIO", RuntimePermissions::readMediaAudio },\r
+ { "android.permission.READ_MEDIA_IMAGES", RuntimePermissions::readMediaImages },\r
+ { "android.permission.READ_MEDIA_VIDEO", RuntimePermissions::readMediaVideo },\r
+ { "android.permission.BLUETOOTH_SCAN", RuntimePermissions::bluetoothMidi },\r
+ };\r
\r
- return static_cast<RuntimePermissions::PermissionID> (-1);\r
+ const auto iter = map.find (permission);\r
+ return iter != map.cend() ? iter->second\r
+ : static_cast<RuntimePermissions::PermissionID> (-1);\r
}\r
\r
//==============================================================================\r
struct PermissionsRequest\r
{\r
- PermissionsRequest() {}\r
-\r
- // using "= default" on the following method triggers an internal compiler error\r
- // in Android NDK 17\r
- PermissionsRequest (const PermissionsRequest& o)\r
- : callback (o.callback), permission (o.permission)\r
- {}\r
-\r
- PermissionsRequest (PermissionsRequest&& o)\r
- : callback (std::move (o.callback)), permission (o.permission)\r
- {\r
- o.permission = static_cast<RuntimePermissions::PermissionID> (-1);\r
- }\r
-\r
- PermissionsRequest (RuntimePermissions::Callback && callbackToUse,\r
- RuntimePermissions::PermissionID permissionToRequest)\r
- : callback (std::move (callbackToUse)), permission (permissionToRequest)\r
- {}\r
-\r
- PermissionsRequest& operator= (const PermissionsRequest & o)\r
- {\r
- callback = o.callback;\r
- permission = o.permission;\r
- return *this;\r
- }\r
-\r
- PermissionsRequest& operator= (PermissionsRequest && o)\r
- {\r
- callback = std::move (o.callback);\r
- permission = o.permission;\r
- return *this;\r
- }\r
-\r
RuntimePermissions::Callback callback;\r
- RuntimePermissions::PermissionID permission;\r
+ RuntimePermissions::PermissionID permission = static_cast<RuntimePermissions::PermissionID> (-1);\r
};\r
\r
//==============================================================================\r
{\r
auto &request = requests.front();\r
\r
- StringArray permissionsArray{\r
- jucePermissionToAndroidPermission (request.permission)};\r
+ auto permissionsArray = jucePermissionToAndroidPermissions (request.permission);\r
auto jPermissionsArray = juceStringArrayToJava (permissionsArray);\r
\r
\r
//==============================================================================\r
void RuntimePermissions::request (PermissionID permission, Callback callback)\r
{\r
- auto requestedPermission = jucePermissionToAndroidPermission (permission);\r
+ const auto requestedPermissions = jucePermissionToAndroidPermissions (permission);\r
+\r
+ const auto allPermissionsInManifest = std::all_of (requestedPermissions.begin(),\r
+ requestedPermissions.end(),\r
+ [] (const auto& p)\r
+ {\r
+ return isPermissionDeclaredInManifest (p);\r
+ });\r
\r
- if (! isPermissionDeclaredInManifest (requestedPermission))\r
+ if (! allPermissionsInManifest)\r
{\r
// Error! If you want to be able to request this runtime permission, you\r
// also need to declare it in your app's manifest. You can do so via\r
return;\r
}\r
\r
- PermissionsRequest request (std::move (callback), permission);\r
+ PermissionsRequest request { std::move (callback), permission };\r
\r
static CriticalSection overlayGuard;\r
ScopedLock lock (overlayGuard);\r
{\r
auto* env = getEnv();\r
\r
- auto requestedPermission = jucePermissionToAndroidPermission (permission);\r
- int result = env->CallIntMethod (getAppContext().get(), AndroidContext.checkCallingOrSelfPermission,\r
- javaString (requestedPermission).get());\r
+ const auto requestedPermissions = jucePermissionToAndroidPermissions (permission);\r
\r
+ return std::all_of (requestedPermissions.begin(), requestedPermissions.end(), [env] (const auto& p)\r
+ {\r
+ return 0 == env->CallIntMethod (getAppContext().get(),\r
+ AndroidContext.checkCallingOrSelfPermission,\r
+ javaString (p).get());\r
+ });\r
\r
- return result == 0 /* PERMISSION_GRANTED */;\r
}\r
\r
} // namespace juce\r
}\r
\r
//==============================================================================\r
-#if JUCE_ANDROID && JUCE_MODULE_AVAILABLE_juce_audio_devices && (JUCE_USE_ANDROID_OPENSLES || JUCE_USE_ANDROID_OBOE)\r
- #define JUCE_ANDROID_REALTIME_THREAD_AVAILABLE 1\r
-#endif\r
+using RealtimeThreadFactory = pthread_t (*) (void* (*entry) (void*), void* userPtr);\r
+// This is defined in the juce_audio_devices module, with different definitions depending on\r
+// whether OpenSL/Oboe are enabled.\r
+RealtimeThreadFactory getAndroidRealtimeThreadFactory();\r
\r
-#if JUCE_ANDROID_REALTIME_THREAD_AVAILABLE\r
-pthread_t juce_createRealtimeAudioThread (void* (*entry) (void*), void* userPtr);\r
+#if ! JUCE_MODULE_AVAILABLE_juce_audio_devices\r
+RealtimeThreadFactory getAndroidRealtimeThreadFactory() { return nullptr; }\r
#endif\r
\r
extern JavaVM* androidJNIJavaVM;\r
\r
-bool Thread::createNativeThread (Priority)\r
+static auto setPriorityOfThisThread (Thread::Priority p)\r
{\r
- if (isRealtime())\r
- {\r
- #if JUCE_ANDROID_REALTIME_THREAD_AVAILABLE\r
- threadHandle = (void*) juce_createRealtimeAudioThread (threadEntryProc, this);\r
- threadId = (ThreadID) threadHandle.get();\r
- return threadId != nullptr;\r
- #else\r
- jassertfalse;\r
- #endif\r
- }\r
+ return setpriority (PRIO_PROCESS,\r
+ (id_t) gettid(),\r
+ ThreadPriorities::getNativePriority (p)) == 0;\r
+}\r
\r
- PosixThreadAttribute attr { threadStackSize };\r
- threadId = threadHandle = makeThreadHandle (attr, this, [] (void* userData) -> void*\r
+bool Thread::createNativeThread (Priority)\r
+{\r
+ const auto threadEntryProc = [] (void* userData) -> void*\r
{\r
auto* myself = static_cast<Thread*> (userData);\r
\r
+ setPriorityOfThisThread (myself->priority);\r
+\r
juce_threadEntryPoint (myself);\r
\r
if (androidJNIJavaVM != nullptr)\r
}\r
\r
return nullptr;\r
- });\r
+ };\r
+\r
+ if (isRealtime())\r
+ {\r
+ if (const auto factory = getAndroidRealtimeThreadFactory())\r
+ {\r
+ threadHandle = (void*) factory (threadEntryProc, this);\r
+ threadId = (ThreadID) threadHandle.load();\r
+ return threadId != nullptr;\r
+ }\r
+ else\r
+ {\r
+ jassertfalse;\r
+ }\r
+ }\r
+\r
+ PosixThreadAttribute attr { threadStackSize };\r
+ threadId = threadHandle = makeThreadHandle (attr, this, threadEntryProc);\r
\r
return threadId != nullptr;\r
}\r
return ThreadPriorities::getJucePriority (native);\r
}\r
\r
-bool Thread::setPriority (Priority)\r
+bool Thread::setPriority (Priority priorityIn)\r
{\r
jassert (Thread::getCurrentThreadId() == getThreadId());\r
\r
if (isRealtime())\r
return false;\r
\r
- return setpriority (PRIO_PROCESS, (id_t) gettid(), ThreadPriorities::getNativePriority (priority)) == 0;\r
+ const auto priorityToUse = priority = priorityIn;\r
+ return setPriorityOfThisThread (priorityToUse) == 0;\r
}\r
\r
//==============================================================================\r
\r
\r
//==============================================================================\r
-bool JUCE_CALLTYPE Process::openDocument (const String& fileName, const String& parameters)\r
+bool JUCE_CALLTYPE Process::openDocument (const String& fileName, [[maybe_unused]] const String& parameters)\r
{\r
JUCE_AUTORELEASEPOOL\r
{\r
: [NSURL URLWithString: fileNameAsNS];\r
\r
#if JUCE_IOS\r
- ignoreUnused (parameters);\r
-\r
if (@available (iOS 10.0, *))\r
{\r
[[UIApplication sharedApplication] openURL: filenameAsURL\r
}\r
\r
//==============================================================================\r
-bool JUCE_CALLTYPE Process::openEmailWithAttachments (const String& targetEmailAddress,\r
- const String& emailSubject,\r
- const String& bodyText,\r
- const StringArray& filesToAttach)\r
+bool JUCE_CALLTYPE Process::openEmailWithAttachments ([[maybe_unused]] const String& targetEmailAddress,\r
+ [[maybe_unused]] const String& emailSubject,\r
+ [[maybe_unused]] const String& bodyText,\r
+ [[maybe_unused]] const StringArray& filesToAttach)\r
{\r
#if JUCE_IOS\r
- ignoreUnused (targetEmailAddress, emailSubject, bodyText, filesToAttach);\r
-\r
//xxx probably need to use MFMailComposeViewController\r
jassertfalse;\r
return false;\r
return newRequest;\r
}\r
\r
- void didFailWithError (NSError* error)\r
+ void didFailWithError ([[maybe_unused]] NSError* error)\r
{\r
- DBG (nsStringToJuce ([error description])); ignoreUnused (error);\r
+ DBG (nsStringToJuce ([error description]));\r
nsUrlErrorCode = [error code];\r
hasFailed = true;\r
initialised = true;\r
connection.reset();\r
}\r
\r
- bool connect (WebInputStream::Listener* webInputListener, int numRetries = 0)\r
+ bool connect (WebInputStream::Listener* webInputListener, [[maybe_unused]] int numRetries = 0)\r
{\r
- ignoreUnused (numRetries);\r
-\r
{\r
const ScopedLock lock (createConnectionLock);\r
\r
{\r
return joinCompileTimeStr (v, makeCompileTimeStr (others...));\r
}\r
-\r
- template <typename Functor, typename Return, typename... Args>\r
- static constexpr auto toFnPtr (Functor functor, Return (Functor::*) (Args...) const)\r
- {\r
- return static_cast<Return (*) (Args...)> (functor);\r
- }\r
-\r
- template <typename Functor>\r
- static constexpr auto toFnPtr (Functor functor) { return toFnPtr (functor, &Functor::operator()); }\r
} // namespace detail\r
\r
//==============================================================================\r
template <typename Type>\r
void addIvar (const char* name)\r
{\r
- BOOL b = class_addIvar (cls, name, sizeof (Type), (uint8_t) rint (log2 (sizeof (Type))), @encode (Type));\r
- jassert (b); ignoreUnused (b);\r
+ [[maybe_unused]] BOOL b = class_addIvar (cls, name, sizeof (Type), (uint8_t) rint (log2 (sizeof (Type))), @encode (Type));\r
+ jassert (b);\r
}\r
\r
template <typename Fn>\r
- void addMethod (SEL selector, Fn callbackFn) { addMethod (selector, detail::toFnPtr (callbackFn)); }\r
+ void addMethod (SEL selector, Fn callbackFn) { addMethod (selector, toFnPtr (callbackFn)); }\r
\r
template <typename Result, typename... Args>\r
void addMethod (SEL selector, Result (*callbackFn) (id, SEL, Args...))\r
\r
void addProtocol (Protocol* protocol)\r
{\r
- BOOL b = class_addProtocol (cls, protocol);\r
- jassert (b); ignoreUnused (b);\r
+ [[maybe_unused]] BOOL b = class_addProtocol (cls, protocol);\r
+ jassert (b);\r
}\r
\r
template <typename ReturnType, typename... Params>\r
\r
String SystemStats::getDeviceDescription()\r
{\r
+ if (auto* userInfo = [[NSProcessInfo processInfo] environment])\r
+ if (auto* simDeviceName = [userInfo objectForKey: @"SIMULATOR_MODEL_IDENTIFIER"])\r
+ return nsStringToJuce (simDeviceName);\r
+\r
#if JUCE_IOS\r
const char* name = "hw.machine";\r
#else\r
HeapBlock<char> model (size);\r
\r
if (sysctlbyname (name, model, &size, nullptr, 0) >= 0)\r
- {\r
- String description (model.get());\r
-\r
- #if JUCE_IOS\r
- if (description == "x86_64") // running in the simulator\r
- {\r
- if (auto* userInfo = [[NSProcessInfo processInfo] environment])\r
- {\r
- if (auto* simDeviceName = [userInfo objectForKey: @"SIMULATOR_DEVICE_NAME"])\r
- return nsStringToJuce (simDeviceName);\r
- }\r
- }\r
- #endif\r
-\r
- return description;\r
- }\r
+ return String (model.get());\r
}\r
\r
return {};\r
pimpl->stopReadOperation = true;\r
\r
const char buffer[] { 0 };\r
- const auto done = ::write (pimpl->pipeIn.get(), buffer, numElementsInArray (buffer));\r
- ignoreUnused (done);\r
+ [[maybe_unused]] const auto done = ::write (pimpl->pipeIn.get(), buffer, numElementsInArray (buffer));\r
}\r
}\r
\r
\r
//==============================================================================\r
// The unix siginterrupt function is deprecated - this does the same job.\r
-int juce_siginterrupt (int sig, int flag)\r
+int juce_siginterrupt ([[maybe_unused]] int sig, [[maybe_unused]] int flag)\r
{\r
#if JUCE_WASM\r
- ignoreUnused (sig, flag);\r
return 0;\r
#else\r
#if JUCE_ANDROID\r
void juce_runSystemCommand (const String&);\r
void juce_runSystemCommand (const String& command)\r
{\r
- int result = system (command.toUTF8());\r
- ignoreUnused (result);\r
+ [[maybe_unused]] int result = system (command.toUTF8());\r
}\r
\r
String juce_getOutputFromCommand (const String&);\r
#define SUPPORT_AFFINITIES 1\r
#endif\r
\r
-void JUCE_CALLTYPE Thread::setCurrentThreadAffinityMask (uint32 affinityMask)\r
+void JUCE_CALLTYPE Thread::setCurrentThreadAffinityMask ([[maybe_unused]] uint32 affinityMask)\r
{\r
#if SUPPORT_AFFINITIES\r
cpu_set_t affinity;\r
// affinities aren't supported because either the appropriate header files weren't found,\r
// or the SUPPORT_AFFINITIES macro was turned off\r
jassertfalse;\r
- ignoreUnused (affinityMask);\r
#endif\r
}\r
\r
ComSmartPtr<IShellLink> shellLink;\r
ComSmartPtr<IPersistFile> persistFile;\r
\r
- ignoreUnused (CoInitialize (nullptr));\r
+ [[maybe_unused]] const auto result = CoInitialize (nullptr);\r
\r
return SUCCEEDED (shellLink.CoCreateInstance (CLSID_ShellLink))\r
&& SUCCEEDED (shellLink->SetPath (getFullPathName().toWideCharPointer()))\r
#endif\r
\r
#if JUCE_WIN32_TIMER_PERIOD > 0\r
- auto res = timeBeginPeriod (JUCE_WIN32_TIMER_PERIOD);\r
- ignoreUnused (res);\r
+ [[maybe_unused]] auto res = timeBeginPeriod (JUCE_WIN32_TIMER_PERIOD);\r
jassert (res == TIMERR_NOERROR);\r
#endif\r
\r
}\r
}\r
\r
-void JUCE_CALLTYPE Thread::setCurrentThreadName (const String& name)\r
+void JUCE_CALLTYPE Thread::setCurrentThreadName ([[maybe_unused]] const String& name)\r
{\r
#if JUCE_DEBUG && JUCE_MSVC\r
struct\r
{\r
OutputDebugStringA ("** Warning - Encountered noncontinuable exception **\n");\r
}\r
- #else\r
- ignoreUnused (name);\r
#endif\r
}\r
\r
: setOption (handle, IPPROTO_TCP, TCP_NODELAY, (int) 1));\r
}\r
\r
- static void closeSocket (std::atomic<int>& handle, CriticalSection& readLock,\r
- bool isListener, int portNumber, std::atomic<bool>& connected) noexcept\r
+ static void closeSocket (std::atomic<int>& handle,\r
+ [[maybe_unused]] CriticalSection& readLock,\r
+ [[maybe_unused]] bool isListener,\r
+ [[maybe_unused]] int portNumber,\r
+ std::atomic<bool>& connected) noexcept\r
{\r
const auto h = (SocketHandle) handle.load();\r
handle = -1;\r
\r
#if JUCE_WINDOWS\r
- ignoreUnused (portNumber, isListener, readLock);\r
-\r
if (h != invalidSocket || connected)\r
closesocket (h);\r
\r
return SocketHelpers::setOption<bool> ((SocketHandle) handle.load(), IPPROTO_IP, IP_MULTICAST_LOOP, enable);\r
}\r
\r
-bool DatagramSocket::setEnablePortReuse (bool enabled)\r
+bool DatagramSocket::setEnablePortReuse ([[maybe_unused]] bool enabled)\r
{\r
- #if JUCE_ANDROID\r
- ignoreUnused (enabled);\r
- #else\r
+ #if ! JUCE_ANDROID\r
if (handle >= 0)\r
return SocketHelpers::setOption ((SocketHandle) handle.load(),\r
#if JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD\r
}\r
else\r
{\r
- auto desc = [error localizedDescription];\r
- ignoreUnused (desc);\r
+ [[maybe_unused]] auto desc = [error localizedDescription];\r
jassertfalse;\r
}\r
}\r
return urlToUse.getLocalFile();\r
}\r
\r
- auto desc = [error localizedDescription];\r
- ignoreUnused (desc);\r
+ [[maybe_unused]] auto desc = [error localizedDescription];\r
jassertfalse;\r
}\r
\r
aURL.createHeadersAndPostData (headers, data, addParametersToBody);\r
}\r
\r
+bool WebInputStream::Listener::postDataSendProgress ([[maybe_unused]] WebInputStream& request,\r
+ [[maybe_unused]] int bytesSent,\r
+ [[maybe_unused]] int totalBytes)\r
+{\r
+ return true;\r
+}\r
+\r
} // namespace juce\r
\r
@returns true to continue or false to cancel the upload\r
*/\r
- virtual bool postDataSendProgress (WebInputStream& request, int bytesSent, int totalBytes)\r
- {\r
- ignoreUnused (request, bytesSent, totalBytes);\r
- return true;\r
- }\r
+ virtual bool postDataSendProgress (WebInputStream& request, int bytesSent, int totalBytes);\r
};\r
\r
/** Wait until the first byte is ready for reading.\r
\r
if (availableData > 0)\r
{\r
- if (maxNumBytesToWrite > availableData || maxNumBytesToWrite < 0)\r
+ if (maxNumBytesToWrite < 0 || availableData < maxNumBytesToWrite)\r
maxNumBytesToWrite = availableData;\r
\r
if (blockToUse != nullptr)\r
- preallocate (position + (size_t) availableData);\r
+ preallocate (position + (size_t) maxNumBytesToWrite);\r
}\r
\r
return OutputStream::writeFromInputStream (source, maxNumBytesToWrite);\r
*/\r
#define JUCE_MAJOR_VERSION 7\r
#define JUCE_MINOR_VERSION 0\r
-#define JUCE_BUILDNUMBER 3\r
+#define JUCE_BUILDNUMBER 4\r
\r
/** Current JUCE version number.\r
\r
\r
#if ! DOXYGEN\r
#define JUCE_VERSION_ID \\r
- volatile auto juceVersionId = "juce_version_" JUCE_STRINGIFY(JUCE_MAJOR_VERSION) "_" JUCE_STRINGIFY(JUCE_MINOR_VERSION) "_" JUCE_STRINGIFY(JUCE_BUILDNUMBER); \\r
- ignoreUnused (juceVersionId);\r
+ [[maybe_unused]] volatile auto juceVersionId = "juce_version_" JUCE_STRINGIFY(JUCE_MAJOR_VERSION) "_" JUCE_STRINGIFY(JUCE_MINOR_VERSION) "_" JUCE_STRINGIFY(JUCE_BUILDNUMBER);\r
#endif\r
\r
//==============================================================================\r
namespace juce\r
{\r
\r
-class HighResolutionTimer::Pimpl : private Thread\r
+class HighResolutionTimer::Pimpl : public Thread\r
{\r
using steady_clock = std::chrono::steady_clock;\r
using milliseconds = std::chrono::milliseconds;\r
nextTickTime = steady_clock::now() + milliseconds (periodMillis);\r
}\r
\r
+ waitEvent.notify_one();\r
+\r
if (! isThreadRunning())\r
startThread (Thread::Priority::high);\r
}\r
const CurrentThreadHolder::Ptr currentThreadHolder (getCurrentThreadHolder());\r
currentThreadHolder->value = this;\r
\r
- #if JUCE_ANDROID\r
- setPriority (priority);\r
- #endif\r
-\r
if (threadName.isNotEmpty())\r
setCurrentThreadName (threadName);\r
\r
shouldExit = false;\r
\r
// 'priority' is essentially useless on Linux as only realtime\r
- // has any options but we need to set this here to satsify\r
+ // has any options but we need to set this here to satisfy\r
// later queries, otherwise we get inconsistent results across\r
// platforms.\r
- #if JUCE_LINUX || JUCE_BSD\r
+ #if JUCE_ANDROID || JUCE_LINUX || JUCE_BSD\r
priority = threadPriority;\r
#endif\r
\r
/** Linux only: A value with a range of 0-10, where 10 is the highest priority. */\r
int priority = 5;\r
\r
- /* iOS/macOS only: A millisecond value representing the estimated time between each\r
- 'Thread::run' call. Your thread may be penalised if you frequently\r
- overrun this.\r
+ /** iOS/macOS only: A millisecond value representing the estimated time between each\r
+ 'Thread::run' call. Your thread may be penalised if you frequently\r
+ overrun this.\r
*/\r
uint32_t workDurationMs = 0;\r
};\r
if (weeks > 8) return describeMonths ((weeks * 12) / 52);\r
if (weeks > 1) return describeWeeks (weeks);\r
\r
- auto days = (int) inWeeks();\r
+ auto days = (int) inDays();\r
\r
if (days > 1)\r
return describeDays (days);\r
auto size = data.getSize();\r
data.setSize (size + (8u - (size % 8u)));\r
\r
- auto success = encrypt (data.getData(), size, data.getSize());\r
+ [[maybe_unused]] auto success = encrypt (data.getData(), size, data.getSize());\r
\r
- ignoreUnused (success);\r
jassert (success >= 0);\r
}\r
\r
\r
ID: juce_cryptography\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\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
#include "values/juce_ValueTreeSynchroniser.cpp"\r
#include "values/juce_CachedValue.cpp"\r
#include "undomanager/juce_UndoManager.cpp"\r
+#include "undomanager/juce_UndoableAction.cpp"\r
#include "app_properties/juce_ApplicationProperties.cpp"\r
#include "app_properties/juce_PropertiesFile.cpp"\r
\r
\r
ID: juce_data_structures\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\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
--- /dev/null
+/*\r
+ ==============================================================================\r
+\r
+ This file is part of the JUCE library.\r
+ Copyright (c) 2022 - Raw Material Software Limited\r
+\r
+ JUCE is an open source library subject to commercial or open-source\r
+ licensing.\r
+\r
+ By using JUCE, you agree to the terms of both the JUCE 7 End-User License\r
+ Agreement and JUCE Privacy Policy.\r
+\r
+ End User License Agreement: www.juce.com/juce-7-licence\r
+ Privacy Policy: www.juce.com/juce-privacy-policy\r
+\r
+ Or: You may also use this code under the terms of the GPL v3 (see\r
+ www.gnu.org/licenses).\r
+\r
+ JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER\r
+ EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE\r
+ DISCLAIMED.\r
+\r
+ ==============================================================================\r
+*/\r
+\r
+namespace juce\r
+{\r
+\r
+UndoableAction* UndoableAction::createCoalescedAction ([[maybe_unused]] UndoableAction* nextAction) { return nullptr; }\r
+\r
+} // namespace juce\r
\r
If it's not possible to merge the two actions, the method should return a nullptr.\r
*/\r
- virtual UndoableAction* createCoalescedAction (UndoableAction* nextAction) { ignoreUnused (nextAction); return nullptr; }\r
+ virtual UndoableAction* createCoalescedAction (UndoableAction* nextAction);\r
};\r
\r
} // namespace juce\r
template <typename Fn>\r
void clear (void* s)\r
{\r
- auto& fn = *reinterpret_cast<Fn*> (s);\r
- fn.~Fn();\r
// I know this looks insane, for some reason MSVC 14 sometimes thinks fn is unreferenced\r
- ignoreUnused (fn);\r
+ [[maybe_unused]] auto& fn = *reinterpret_cast<Fn*> (s);\r
+ fn.~Fn();\r
}\r
\r
template <typename Fn, typename Ret, typename... Args>\r
bool smallCalled = false;\r
bool largeCalled = false;\r
\r
- SmallFn small = [&smallCalled, a = std::array<char, 8>{}] { smallCalled = true; juce::ignoreUnused (a); };\r
- LargeFn large = [&largeCalled, a = std::array<char, 8>{}] { largeCalled = true; juce::ignoreUnused (a); };\r
+ SmallFn small = [&smallCalled, a = std::array<char, 8>{}] { smallCalled = true; ignoreUnused (a); };\r
+ LargeFn large = [&largeCalled, a = std::array<char, 8>{}] { largeCalled = true; ignoreUnused (a); };\r
\r
large = std::move (small);\r
\r
\r
ID: juce_dsp\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\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
inline void snapToZero (long double& x) noexcept { JUCE_SNAP_TO_ZERO (x); }\r
#endif\r
#else\r
- inline void snapToZero (float& x) noexcept { ignoreUnused (x); }\r
+ inline void snapToZero ([[maybe_unused]] float& x) noexcept {}\r
#ifndef DOXYGEN\r
- inline void snapToZero (double& x) noexcept { ignoreUnused (x); }\r
- inline void snapToZero (long double& x) noexcept { ignoreUnused (x); }\r
+ inline void snapToZero ([[maybe_unused]] double& x) noexcept {}\r
+ inline void snapToZero ([[maybe_unused]] long double& x) noexcept {}\r
#endif\r
#endif\r
}\r
\r
ID: juce_events\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\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
String argString;\r
\r
- for (int i = 1; i < juce_argc; ++i)\r
+ for (const auto& arg : getCommandLineParameterArray())\r
{\r
- String arg { CharPointer_UTF8 (juce_argv[i]) };\r
-\r
- if (arg.containsChar (' ') && ! arg.isQuotedString())\r
- arg = arg.quoted ('"');\r
-\r
- argString << arg << ' ';\r
+ const auto withQuotes = arg.containsChar (' ') && ! arg.isQuotedString()\r
+ ? arg.quoted ('"')\r
+ : arg;\r
+ argString << withQuotes << ' ';\r
}\r
\r
return argString.trim();\r
\r
StringArray JUCEApplicationBase::getCommandLineParameterArray()\r
{\r
- return StringArray (juce_argv + 1, juce_argc - 1);\r
+ StringArray result;\r
+\r
+ for (int i = 1; i < juce_argc; ++i)\r
+ result.add (CharPointer_UTF8 (juce_argv[i]));\r
+\r
+ return result;\r
}\r
\r
int JUCEApplicationBase::main (int argc, const char* argv[])\r
\r
ScopedUnlock ul (lock);\r
unsigned char x = 0xff;\r
- auto numBytes = write (getWriteHandle(), &x, 1);\r
- ignoreUnused (numBytes);\r
+ [[maybe_unused]] auto numBytes = write (getWriteHandle(), &x, 1);\r
}\r
}\r
\r
\r
ScopedUnlock ul (lock);\r
unsigned char x;\r
- auto numBytes = read (fd, &x, 1);\r
- ignoreUnused (numBytes);\r
+ [[maybe_unused]] auto numBytes = read (fd, &x, 1);\r
}\r
\r
return queue.removeAndReturn (0);\r
//==============================================================================\r
void MessageManager::doPlatformSpecificInitialisation()\r
{\r
- ignoreUnused (OleInitialize (nullptr));\r
+ [[maybe_unused]] const auto result = OleInitialize (nullptr);\r
InternalMessageQueue::getInstance();\r
}\r
\r
~WinRTWrapper();\r
bool isInitialised() const noexcept { return initialised; }\r
\r
- JUCE_DECLARE_SINGLETON (WinRTWrapper, true)\r
+ JUCE_DECLARE_SINGLETON (WinRTWrapper, false)\r
\r
//==============================================================================\r
template <class ComClass>\r
Any rectangles in the list which overlap this will be clipped and subdivided\r
if necessary.\r
*/\r
- void subtract (RectangleType rect)\r
+ void subtract (const RectangleType rect)\r
{\r
if (auto numRects = rects.size())\r
{\r
- auto x1 = rect.getX();\r
- auto y1 = rect.getY();\r
- auto x2 = x1 + rect.getWidth();\r
- auto y2 = y1 + rect.getHeight();\r
+ const auto x1 = rect.getX();\r
+ const auto y1 = rect.getY();\r
+ const auto x2 = x1 + rect.getWidth();\r
+ const auto y2 = y1 + rect.getHeight();\r
\r
for (int i = numRects; --i >= 0;)\r
{\r
auto& r = rects.getReference (i);\r
\r
- auto rx1 = r.getX();\r
- auto ry1 = r.getY();\r
- auto rx2 = rx1 + r.getWidth();\r
- auto ry2 = ry1 + r.getHeight();\r
+ const auto rx1 = r.getX();\r
+ const auto ry1 = r.getY();\r
+ const auto rx2 = rx1 + r.getWidth();\r
+ const auto ry2 = ry1 + r.getHeight();\r
\r
- if (! (x2 <= rx1 || x1 >= rx2 || y2 <= ry1 || y1 >= ry2))\r
+ const auto isNotEqual = [&] (const RectangleType newRect)\r
{\r
- if (x1 > rx1 && x1 < rx2)\r
+ // When subtracting tiny slices from relatively large rectangles, the\r
+ // subtraction may have no effect (due to limited-precision floating point\r
+ // maths) and the original rectangle may remain unchanged.\r
+ // We check that any 'new' rectangle has different dimensions to the rectangle\r
+ // being tested before adding it to the rects array.\r
+ // Integer arithmetic is not susceptible to this problem, so there's no need\r
+ // for this additional equality check when working with integral rectangles.\r
+ if constexpr (std::is_floating_point_v<ValueType>)\r
{\r
- if (y1 <= ry1 && y2 >= ry2 && x2 >= rx2)\r
+ return newRect != r;\r
+ }\r
+ else\r
+ {\r
+ ignoreUnused (newRect);\r
+ return true;\r
+ }\r
+ };\r
+\r
+ if (rx1 < x2 && x1 < rx2 && ry1 < y2 && y1 < ry2)\r
+ {\r
+ if (rx1 < x1 && x1 < rx2)\r
+ {\r
+ if (y1 <= ry1 && ry2 <= y2 && rx2 <= x2)\r
{\r
r.setWidth (x1 - rx1);\r
}\r
else\r
{\r
- r.setX (x1);\r
- r.setWidth (rx2 - x1);\r
-\r
- rects.insert (++i, RectangleType (rx1, ry1, x1 - rx1, ry2 - ry1));\r
- ++i;\r
+ if (const RectangleType newRect (rx1, ry1, x1 - rx1, ry2 - ry1); isNotEqual (newRect))\r
+ {\r
+ r.setX (x1);\r
+ r.setWidth (rx2 - x1);\r
+\r
+ rects.insert (++i, newRect);\r
+ ++i;\r
+ }\r
}\r
}\r
- else if (x2 > rx1 && x2 < rx2)\r
+ else if (rx1 < x2 && x2 < rx2)\r
{\r
r.setX (x2);\r
r.setWidth (rx2 - x2);\r
\r
- if (y1 > ry1 || y2 < ry2 || x1 > rx1)\r
+ if (ry1 < y1 || y2 < ry2 || rx1 < x1)\r
{\r
- rects.insert (++i, RectangleType (rx1, ry1, x2 - rx1, ry2 - ry1));\r
- ++i;\r
+ if (const RectangleType newRect (rx1, ry1, x2 - rx1, ry2 - ry1); isNotEqual (newRect))\r
+ {\r
+ rects.insert (++i, newRect);\r
+ ++i;\r
+ }\r
}\r
}\r
- else if (y1 > ry1 && y1 < ry2)\r
+ else if (ry1 < y1 && y1 < ry2)\r
{\r
- if (x1 <= rx1 && x2 >= rx2 && y2 >= ry2)\r
+ if (x1 <= rx1 && rx2 <= x2 && ry2 <= y2)\r
{\r
r.setHeight (y1 - ry1);\r
}\r
else\r
{\r
- r.setY (y1);\r
- r.setHeight (ry2 - y1);\r
-\r
- rects.insert (++i, RectangleType (rx1, ry1, rx2 - rx1, y1 - ry1));\r
- ++i;\r
+ if (const RectangleType newRect (rx1, ry1, rx2 - rx1, y1 - ry1); isNotEqual (newRect))\r
+ {\r
+ r.setY (y1);\r
+ r.setHeight (ry2 - y1);\r
+\r
+ rects.insert (++i, newRect);\r
+ ++i;\r
+ }\r
}\r
}\r
- else if (y2 > ry1 && y2 < ry2)\r
+ else if (ry1 < y2 && y2 < ry2)\r
{\r
r.setY (y2);\r
r.setHeight (ry2 - y2);\r
\r
- if (x1 > rx1 || x2 < rx2 || y1 > ry1)\r
+ if (rx1 < x1 || x2 < rx2 || ry1 < y1)\r
{\r
- rects.insert (++i, RectangleType (rx1, ry1, rx2 - rx1, y2 - ry1));\r
- ++i;\r
+ if (const RectangleType newRect (rx1, ry1, rx2 - rx1, y2 - ry1); isNotEqual (newRect))\r
+ {\r
+ rects.insert (++i, newRect);\r
+ ++i;\r
+ }\r
}\r
}\r
else\r
\r
ID: juce_graphics\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\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
\r
if (pimpl->factories->d2dFactory != nullptr)\r
{\r
- auto hr = pimpl->factories->d2dFactory->CreateHwndRenderTarget ({}, { hwnd, size }, pimpl->renderingTarget.resetAndGetPointerAddress());\r
- jassert (SUCCEEDED (hr)); ignoreUnused (hr);\r
+ [[maybe_unused]] auto hr = pimpl->factories->d2dFactory->CreateHwndRenderTarget ({}, { hwnd, size }, pimpl->renderingTarget.resetAndGetPointerAddress());\r
+ jassert (SUCCEEDED (hr));\r
hr = pimpl->renderingTarget->CreateSolidColorBrush (D2D1::ColorF::ColorF (0.0f, 0.0f, 0.0f, 1.0f), pimpl->colourBrush.resetAndGetPointerAddress());\r
}\r
}\r
}\r
\r
ComSmartPtr<IDWriteFont> dwFont;\r
- auto hr = fontCollection.GetFontFromFontFace (glyphRun.fontFace, dwFont.resetAndGetPointerAddress());\r
- ignoreUnused (hr);\r
+ [[maybe_unused]] auto hr = fontCollection.GetFontFromFontFace (glyphRun.fontFace, dwFont.resetAndGetPointerAddress());\r
jassert (dwFont != nullptr);\r
\r
ComSmartPtr<IDWriteFontFamily> dwFontFamily;\r
fontIndex = 0;\r
\r
ComSmartPtr<IDWriteFontFamily> fontFamily;\r
- auto hr = fontCollection.GetFontFamily (fontIndex, fontFamily.resetAndGetPointerAddress());\r
- ignoreUnused (hr);\r
+ [[maybe_unused]] auto hr = fontCollection.GetFontFamily (fontIndex, fontFamily.resetAndGetPointerAddress());\r
\r
ComSmartPtr<IDWriteFont> dwFont;\r
uint32 fontFacesCount = 0;\r
return;\r
\r
UINT32 actualLineCount = 0;\r
- auto hr = dwTextLayout->GetLineMetrics (nullptr, 0, &actualLineCount);\r
- ignoreUnused (hr);\r
+ [[maybe_unused]] auto hr = dwTextLayout->GetLineMetrics (nullptr, 0, &actualLineCount);\r
\r
layout.ensureStorageAllocated ((int) actualLineCount);\r
\r
\r
#endif\r
\r
-bool TextLayout::createNativeLayout (const AttributedString& text)\r
+bool TextLayout::createNativeLayout ([[maybe_unused]] const AttributedString& text)\r
{\r
#if JUCE_USE_DIRECTWRITE\r
if (! canAllTypefacesAndFontsBeUsedInLayout (text))\r
\r
return true;\r
}\r
- #else\r
- ignoreUnused (text);\r
#endif\r
\r
return false;\r
\r
uint32 index = 0;\r
BOOL exists = false;\r
- auto hr = names->FindLocaleName (L"en-us", &index, &exists);\r
- ignoreUnused (hr);\r
+ [[maybe_unused]] auto hr = names->FindLocaleName (L"en-us", &index, &exists);\r
\r
if (! exists)\r
index = 0;\r
jassert (fontCollection != nullptr);\r
\r
uint32 fontIndex = 0;\r
- auto hr = fontCollection->FindFamilyName (font.getTypefaceName().toWideCharPointer(), &fontIndex, &fontFound);\r
- ignoreUnused (hr);\r
+ [[maybe_unused]] auto hr = fontCollection->FindFamilyName (font.getTypefaceName().toWideCharPointer(), &fontIndex, &fontFound);\r
\r
if (! fontFound)\r
fontIndex = 0;\r
{\r
BOOL fontFound = false;\r
uint32 fontIndex = 0;\r
- auto hr = factories->systemFonts->FindFamilyName (family.toWideCharPointer(), &fontIndex, &fontFound);\r
- ignoreUnused (hr);\r
+ [[maybe_unused]] auto hr = factories->systemFonts->FindFamilyName (family.toWideCharPointer(), &fontIndex, &fontFound);\r
\r
if (! fontFound)\r
fontIndex = 0;\r
template <typename EventMethod, typename... Params>\r
static void sendMouseEvent (HierarchyChecker& checker, EventMethod&& eventMethod, Params&&... params)\r
{\r
- auto* parent = checker.nearestNonNullParent();\r
-\r
- if (parent == nullptr)\r
- return;\r
-\r
- if (auto* list = parent->mouseListeners.get())\r
+ const auto callListeners = [&] (auto& parentComp, const auto findNumListeners)\r
{\r
- for (int i = list->listeners.size(); --i >= 0;)\r
+ if (auto* list = parentComp.mouseListeners.get())\r
{\r
- (list->listeners.getUnchecked (i)->*eventMethod) (checker.eventWithNearestParent(), params...);\r
+ const WeakReference safePointer { &parentComp };\r
\r
- if (checker.shouldBailOut())\r
- return;\r
+ for (int i = findNumListeners (*list); --i >= 0; i = jmin (i, findNumListeners (*list)))\r
+ {\r
+ (list->listeners.getUnchecked (i)->*eventMethod) (checker.eventWithNearestParent(), params...);\r
\r
- i = jmin (i, list->listeners.size());\r
+ if (checker.shouldBailOut() || safePointer == nullptr)\r
+ return false;\r
+ }\r
}\r
- }\r
-\r
- for (Component* p = checker.nearestNonNullParent()->parentComponent; p != nullptr; p = p->parentComponent)\r
- {\r
- if (auto* list = p->mouseListeners.get())\r
- {\r
- if (list->numDeepMouseListeners > 0)\r
- {\r
- const auto shouldBailOut = [&checker, safePointer = WeakReference { p }]\r
- {\r
- return checker.shouldBailOut() || safePointer == nullptr;\r
- };\r
\r
- for (int i = list->numDeepMouseListeners; --i >= 0;)\r
- {\r
- (list->listeners.getUnchecked(i)->*eventMethod) (checker.eventWithNearestParent(), params...);\r
+ return true;\r
+ };\r
\r
- if (shouldBailOut())\r
- return;\r
+ if (auto* parent = checker.nearestNonNullParent())\r
+ if (! callListeners (*parent, [] (auto& list) { return list.listeners.size(); }))\r
+ return;\r
\r
- i = jmin (i, list->numDeepMouseListeners);\r
- }\r
- }\r
- }\r
- }\r
+ if (auto* parent = checker.nearestNonNullParent())\r
+ for (Component* p = parent->parentComponent; p != nullptr; p = p->parentComponent)\r
+ if (! callListeners (*p, [] (auto& list) { return list.numDeepMouseListeners; }))\r
+ return;\r
}\r
\r
private:\r
// check for double-click\r
if (me.getNumberOfClicks() >= 2)\r
{\r
- mouseDoubleClick (checker.eventWithNearestParent());\r
+ if (checker.nearestNonNullParent() == this)\r
+ mouseDoubleClick (checker.eventWithNearestParent());\r
\r
if (checker.shouldBailOut())\r
return;\r
\r
@see runModalLoop, enterModalState, isCurrentlyModal\r
*/\r
- void exitModalState (int returnValue);\r
+ void exitModalState (int returnValue = 0);\r
\r
/** Returns true if this component is the modal one.\r
\r
ContentSharer::ContentSharer() {}\r
ContentSharer::~ContentSharer() { clearSingletonInstance(); }\r
\r
-void ContentSharer::shareFiles (const Array<URL>& files,\r
+void ContentSharer::shareFiles ([[maybe_unused]] const Array<URL>& files,\r
std::function<void (bool, const String&)> callbackToUse)\r
{\r
#if JUCE_CONTENT_SHARING\r
startNewShare (callbackToUse);\r
pimpl->shareFiles (files);\r
#else\r
- ignoreUnused (files);\r
-\r
// Content sharing is not available on this platform!\r
jassertfalse;\r
\r
}\r
#endif\r
\r
-void ContentSharer::shareText (const String& text,\r
+void ContentSharer::shareText ([[maybe_unused]] const String& text,\r
std::function<void (bool, const String&)> callbackToUse)\r
{\r
#if JUCE_CONTENT_SHARING\r
startNewShare (callbackToUse);\r
pimpl->shareText (text);\r
#else\r
- ignoreUnused (text);\r
-\r
// Content sharing is not available on this platform!\r
jassertfalse;\r
\r
#endif\r
}\r
\r
-void ContentSharer::shareImages (const Array<Image>& images,\r
+void ContentSharer::shareImages ([[maybe_unused]] const Array<Image>& images,\r
std::function<void (bool, const String&)> callbackToUse,\r
- ImageFileFormat* imageFileFormatToUse)\r
+ [[maybe_unused]] ImageFileFormat* imageFileFormatToUse)\r
{\r
#if JUCE_CONTENT_SHARING\r
startNewShare (callbackToUse);\r
prepareImagesThread.reset (new PrepareImagesThread (*this, images, imageFileFormatToUse));\r
#else\r
- ignoreUnused (images, imageFileFormatToUse);\r
-\r
// Content sharing is not available on this platform!\r
jassertfalse;\r
\r
}\r
#endif\r
\r
-void ContentSharer::shareData (const MemoryBlock& mb,\r
+void ContentSharer::shareData ([[maybe_unused]] const MemoryBlock& mb,\r
std::function<void (bool, const String&)> callbackToUse)\r
{\r
#if JUCE_CONTENT_SHARING\r
startNewShare (callbackToUse);\r
prepareDataThread.reset (new PrepareDataThread (*this, mb));\r
#else\r
- ignoreUnused (mb);\r
-\r
if (callbackToUse)\r
callbackToUse (false, "Content sharing not available on this platform!");\r
#endif\r
\r
void FileBrowserComponent::browserRootChanged (const File&) {}\r
\r
-bool FileBrowserComponent::keyPressed (const KeyPress& key)\r
+bool FileBrowserComponent::keyPressed ([[maybe_unused]] const KeyPress& key)\r
{\r
#if JUCE_LINUX || JUCE_BSD || JUCE_WINDOWS\r
if (key.getModifiers().isCommandDown()\r
}\r
#endif\r
\r
- ignoreUnused (key);\r
return false;\r
}\r
\r
\r
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wzero-as-null-pointer-constant")\r
\r
+ #include "native/x11/juce_linux_ScopedWindowAssociation.h"\r
#include "native/juce_linux_Windowing.cpp"\r
#include "native/x11/juce_linux_XWindowSystem.cpp"\r
\r
#include "native/juce_linux_FileChooser.cpp"\r
\r
#elif JUCE_ANDROID\r
+\r
+namespace juce\r
+{\r
+static jobject makeAndroidRect (Rectangle<int> r)\r
+{\r
+ return getEnv()->NewObject (AndroidRect,\r
+ AndroidRect.constructor,\r
+ r.getX(),\r
+ r.getY(),\r
+ r.getRight(),\r
+ r.getBottom());\r
+}\r
+\r
+static jobject makeAndroidPoint (Point<int> p)\r
+{\r
+ return getEnv()->NewObject (AndroidPoint,\r
+ AndroidPoint.create,\r
+ p.getX(),\r
+ p.getY());\r
+}\r
+} // namespace juce\r
+\r
#include "juce_core/files/juce_common_MimeTypes.h"\r
#include "native/accessibility/juce_android_Accessibility.cpp"\r
#include "native/juce_android_Windowing.cpp"\r
\r
ID: juce_gui_basics\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\r
name: JUCE GUI core classes\r
description: Basic user-interface components and related classes.\r
website: http://www.juce.com/juce\r
namespace juce\r
{\r
\r
-//==============================================================================\r
/**\r
An abstract base class which can be implemented by components that function as\r
text editors.\r
decimalKeyboard,\r
urlKeyboard,\r
emailAddressKeyboard,\r
- phoneNumberKeyboard\r
+ phoneNumberKeyboard,\r
+ passwordKeyboard\r
};\r
\r
/** Returns the target's preference for the type of keyboard that would be most appropriate.\r
: shadowArea.getTopLeft()).toFloat(), false));\r
g.fillRect (shadowArea);\r
\r
- g.excludeClipRegion (shadowArea);\r
+ g.reduceClipRegion (getLocalBounds().withTrimmedRight (shadowArea.getWidth())\r
+ .withX (isOnLeft ? 0 : shadowArea.getWidth()));\r
g.fillAll (bgColour);\r
}\r
\r
titleLabel.setJustificationType (lf.getSidePanelTitleJustification (*this));\r
}\r
\r
-void SidePanel::componentMovedOrResized (Component& component, bool wasMoved, bool wasResized)\r
+void SidePanel::componentMovedOrResized (Component& component, [[maybe_unused]] bool wasMoved, bool wasResized)\r
{\r
- ignoreUnused (wasMoved);\r
-\r
if (wasResized && (&component == parent))\r
setBounds (calculateBoundsInParent (component));\r
}\r
g.strokePath (indent, PathStrokeType (0.5f));\r
}\r
\r
-void LookAndFeel_V3::drawPopupMenuBackground (Graphics& g, int width, int height)\r
+void LookAndFeel_V3::drawPopupMenuBackground (Graphics& g, [[maybe_unused]] int width, [[maybe_unused]] int height)\r
{\r
g.fillAll (findColour (PopupMenu::backgroundColourId));\r
- ignoreUnused (width, height);\r
\r
#if ! JUCE_MAC\r
g.setColour (findColour (PopupMenu::textColourId).withAlpha (0.6f));\r
void LookAndFeel_V4::drawTickBox (Graphics& g, Component& component,\r
float x, float y, float w, float h,\r
const bool ticked,\r
- const bool isEnabled,\r
- const bool shouldDrawButtonAsHighlighted,\r
- const bool shouldDrawButtonAsDown)\r
+ [[maybe_unused]] const bool isEnabled,\r
+ [[maybe_unused]] const bool shouldDrawButtonAsHighlighted,\r
+ [[maybe_unused]] const bool shouldDrawButtonAsDown)\r
{\r
- ignoreUnused (isEnabled, shouldDrawButtonAsHighlighted, shouldDrawButtonAsDown);\r
-\r
Rectangle<float> tickBounds (x, y, w, h);\r
\r
g.setColour (component.findColour (ToggleButton::tickDisabledColourId));\r
}\r
\r
void LookAndFeel_V4::drawScrollbar (Graphics& g, ScrollBar& scrollbar, int x, int y, int width, int height,\r
- bool isScrollbarVertical, int thumbStartPosition, int thumbSize, bool isMouseOver, bool isMouseDown)\r
+ bool isScrollbarVertical, int thumbStartPosition, int thumbSize, bool isMouseOver, [[maybe_unused]] bool isMouseDown)\r
{\r
- ignoreUnused (isMouseDown);\r
-\r
Rectangle<int> thumbBounds;\r
\r
if (isScrollbarVertical)\r
g.fillRect (0, 0, width, height - 1);\r
}\r
\r
-void LookAndFeel_V4::drawPropertyComponentLabel (Graphics& g, int width, int height, PropertyComponent& component)\r
+void LookAndFeel_V4::drawPropertyComponentLabel (Graphics& g, [[maybe_unused]] int width, int height, PropertyComponent& component)\r
{\r
- ignoreUnused (width);\r
-\r
auto indent = getPropertyComponentIndent (component);\r
\r
g.setColour (component.findColour (PropertyComponent::labelTextColourId)\r
//==============================================================================\r
struct MenuWindow : public Component\r
{\r
- MenuWindow (const PopupMenu& menu, MenuWindow* parentWindow,\r
- Options opts, bool alignToRectangle, bool shouldDismissOnMouseUp,\r
- ApplicationCommandManager** manager, float parentScaleFactor = 1.0f)\r
+ MenuWindow (const PopupMenu& menu,\r
+ MenuWindow* parentWindow,\r
+ Options opts,\r
+ bool alignToRectangle,\r
+ bool shouldDismissOnMouseUp,\r
+ ApplicationCommandManager** manager,\r
+ float parentScaleFactor = 1.0f)\r
: Component ("menu"),\r
parent (parentWindow),\r
- options (opts.withParentComponent (getLookAndFeel().getParentComponentForMenuOptions (opts))),\r
+ options (opts.withParentComponent (findLookAndFeel (menu, parentWindow)->getParentComponentForMenuOptions (opts))),\r
managerOfChosenCommand (manager),\r
componentAttachedTo (options.getTargetComponent()),\r
dismissOnMouseUp (shouldDismissOnMouseUp),\r
setAlwaysOnTop (true);\r
setFocusContainerType (FocusContainerType::focusContainer);\r
\r
- setLookAndFeel (parent != nullptr ? &(parent->getLookAndFeel())\r
- : menu.lookAndFeel.get());\r
+ setLookAndFeel (findLookAndFeel (menu, parentWindow));\r
\r
auto& lf = getLookAndFeel();\r
\r
}));\r
}\r
\r
+ LookAndFeel* findLookAndFeel (const PopupMenu& menu, MenuWindow* parentWindow) const\r
+ {\r
+ if (parentWindow != nullptr)\r
+ return &(parentWindow->getLookAndFeel());\r
+\r
+ if (auto* lnf = menu.lookAndFeel.get())\r
+ return lnf;\r
+\r
+ return &getLookAndFeel();\r
+ }\r
+\r
//==============================================================================\r
MenuWindow* parent;\r
const Options options;\r
\r
int PopupMenu::showWithOptionalCallback (const Options& options,\r
ModalComponentManager::Callback* userCallback,\r
- bool canBeModal)\r
+ [[maybe_unused]] bool canBeModal)\r
{\r
std::unique_ptr<ModalComponentManager::Callback> userCallbackDeleter (userCallback);\r
std::unique_ptr<PopupMenuCompletionCallback> callback (new PopupMenuCompletionCallback());\r
if (userCallback == nullptr && canBeModal)\r
return window->runModalLoop();\r
#else\r
- ignoreUnused (canBeModal);\r
jassert (! (userCallback == nullptr && canBeModal));\r
#endif\r
}\r
}\r
\r
//==============================================================================\r
-JUCESplashScreen::JUCESplashScreen (Component& parent)\r
+JUCESplashScreen::JUCESplashScreen ([[maybe_unused]] Component& parent)\r
{\r
- ignoreUnused (parent);\r
-\r
#if JUCE_DISPLAY_SPLASH_SCREEN\r
if (splashDisplayTime == 0\r
|| Time::getMillisecondCounter() < splashDisplayTime + (uint32) millisecondsToDisplaySplash)\r
return lastPeer;\r
}\r
\r
- Component* findComponentAt (Point<float> screenPos)\r
+ static Component* findComponentAt (Point<float> screenPos, ComponentPeer* peer)\r
{\r
- if (auto* peer = getPeer())\r
- {\r
- auto relativePos = ScalingHelpers::unscaledScreenPosToScaled (peer->getComponent(),\r
- peer->globalToLocal (screenPos));\r
- auto& comp = peer->getComponent();\r
+ if (! ComponentPeer::isValidPeer (peer))\r
+ return nullptr;\r
\r
- // (the contains() call is needed to test for overlapping desktop windows)\r
- if (comp.contains (relativePos))\r
- return comp.getComponentAt (relativePos);\r
- }\r
+ auto relativePos = ScalingHelpers::unscaledScreenPosToScaled (peer->getComponent(),\r
+ peer->globalToLocal (screenPos));\r
+ auto& comp = peer->getComponent();\r
+\r
+ // (the contains() call is needed to test for overlapping desktop windows)\r
+ if (comp.contains (relativePos))\r
+ return comp.getComponentAt (relativePos);\r
\r
return nullptr;\r
}\r
\r
void setPeer (ComponentPeer& newPeer, const PointerState& pointerState, Time time)\r
{\r
- if (&newPeer != lastPeer)\r
+ if (&newPeer != lastPeer && ( findComponentAt (pointerState.position, &newPeer) != nullptr\r
+ || findComponentAt (pointerState.position, lastPeer) == nullptr))\r
{\r
setComponentUnderMouse (nullptr, pointerState, time);\r
lastPeer = &newPeer;\r
- setComponentUnderMouse (findComponentAt (pointerState.position), pointerState, time);\r
+ setComponentUnderMouse (findComponentAt (pointerState.position, getPeer()), pointerState, time);\r
}\r
}\r
\r
const auto& newScreenPos = newPointerState.position;\r
\r
if (! isDragging())\r
- setComponentUnderMouse (findComponentAt (newScreenPos), newPointerState, time);\r
+ setComponentUnderMouse (findComponentAt (newScreenPos, getPeer()), newPointerState, time);\r
\r
if ((newPointerState != lastPointerState) || forceUpdate)\r
{\r
as a base class and calling setTooltip().\r
\r
Many of the JUCE widgets already use this as a base class to implement their\r
+ tooltips. See the TooltipWindow docs for more information about implementing\r
tooltips.\r
\r
@see TooltipClient, TooltipWindow\r
{\r
const auto scale = Desktop::getInstance().getDisplays().getPrimaryDisplay()->scale;\r
\r
- const auto screenBounds = accessibilityHandler.getComponent().getScreenBounds() * scale;\r
+ LocalRef<jobject> screenBounds (makeAndroidRect (accessibilityHandler.getComponent().getScreenBounds() * scale));\r
\r
- LocalRef<jobject> rect (env->NewObject (AndroidRect, AndroidRect.constructor,\r
- screenBounds.getX(), screenBounds.getY(),\r
- screenBounds.getRight(), screenBounds.getBottom()));\r
+ env->CallVoidMethod (info, AndroidAccessibilityNodeInfo.setBoundsInScreen, screenBounds.get());\r
\r
- env->CallVoidMethod (info, AndroidAccessibilityNodeInfo.setBoundsInScreen, rect.get());\r
+ LocalRef<jobject> boundsInParent (makeAndroidRect (accessibilityHandler.getComponent().getBoundsInParent() * scale));\r
\r
- const auto boundsInParent = accessibilityHandler.getComponent().getBoundsInParent() * scale;\r
-\r
- rect = LocalRef<jobject> (env->NewObject (AndroidRect, AndroidRect.constructor,\r
- boundsInParent.getX(), boundsInParent.getY(),\r
- boundsInParent.getRight(), boundsInParent.getBottom()));\r
-\r
- env->CallVoidMethod (info, AndroidAccessibilityNodeInfo.setBoundsInParent, rect.get());\r
+ env->CallVoidMethod (info, AndroidAccessibilityNodeInfo.setBoundsInParent, boundsInParent.get());\r
}\r
\r
const auto state = accessibilityHandler.getCurrentState();\r
import android.graphics.ColorMatrix;\r
import android.graphics.ColorMatrixColorFilter;\r
import android.graphics.Paint;\r
+import android.graphics.Point;\r
import android.graphics.Rect;\r
+import android.os.Build;\r
+import android.text.Selection;\r
+import android.text.SpanWatcher;\r
+import android.text.Spannable;\r
+import android.text.Spanned;\r
+import android.text.TextWatcher;\r
+import android.util.Pair;\r
import android.os.Bundle;\r
+import android.text.Editable;\r
import android.text.InputType;\r
+import android.text.SpannableStringBuilder;\r
import android.view.Choreographer;\r
import android.view.KeyEvent;\r
import android.view.MotionEvent;\r
\r
import java.lang.reflect.Method;\r
import java.util.ArrayList;\r
+\r
import java.util.List;\r
\r
public final class ComponentPeerView extends ViewGroup\r
if (Application.class.isInstance (context))\r
{\r
((Application) context).registerActivityLifecycleCallbacks (this);\r
- } else\r
+ }\r
+ else\r
{\r
- ((Application) context.getApplicationContext ()).registerActivityLifecycleCallbacks (this);\r
+ ((Application) context.getApplicationContext()).registerActivityLifecycleCallbacks (this);\r
}\r
\r
this.host = host;\r
setOnFocusChangeListener (this);\r
\r
// swap red and blue colours to match internal opengl texture format\r
- ColorMatrix colorMatrix = new ColorMatrix ();\r
+ ColorMatrix colorMatrix = new ColorMatrix();\r
\r
float[] colorTransform = {0, 0, 1.0f, 0, 0,\r
0, 1.0f, 0, 0, 0,\r
\r
try\r
{\r
- method = getClass ().getMethod ("setLayerType", int.class, Paint.class);\r
- } catch (SecurityException e)\r
+ method = getClass().getMethod ("setLayerType", int.class, Paint.class);\r
+ }\r
+ catch (SecurityException e)\r
{\r
- } catch (NoSuchMethodException e)\r
+ }\r
+ catch (NoSuchMethodException e)\r
{\r
}\r
\r
{\r
int layerTypeNone = 0;\r
method.invoke (this, layerTypeNone, null);\r
- } catch (java.lang.IllegalArgumentException e)\r
+ }\r
+ catch (java.lang.IllegalArgumentException e)\r
{\r
- } catch (java.lang.IllegalAccessException e)\r
+ }\r
+ catch (java.lang.IllegalAccessException e)\r
{\r
- } catch (java.lang.reflect.InvocationTargetException e)\r
+ }\r
+ catch (java.lang.reflect.InvocationTargetException e)\r
{\r
}\r
}\r
Choreographer.getInstance().postFrameCallback (this);\r
}\r
\r
- public void clear ()\r
+ public void clear()\r
{\r
host = 0;\r
}\r
}\r
\r
@Override\r
- public boolean isOpaque ()\r
+ public boolean isOpaque()\r
{\r
return opaque;\r
}\r
\r
private final boolean opaque;\r
private long host;\r
- private final Paint paint = new Paint ();\r
+ private final Paint paint = new Paint();\r
\r
//==============================================================================\r
private native void handleMouseDown (long host, int index, float x, float y, long time);\r
if (host == 0)\r
return false;\r
\r
- int action = event.getAction ();\r
- long time = event.getEventTime ();\r
+ int action = event.getAction();\r
+ long time = event.getEventTime();\r
\r
switch (action & MotionEvent.ACTION_MASK)\r
{\r
case MotionEvent.ACTION_DOWN:\r
- handleMouseDown (host, event.getPointerId (0), event.getRawX (), event.getRawY (), time);\r
+ handleMouseDown (host, event.getPointerId (0), event.getRawX(), event.getRawY(), time);\r
return true;\r
\r
case MotionEvent.ACTION_CANCEL:\r
case MotionEvent.ACTION_UP:\r
- handleMouseUp (host, event.getPointerId (0), event.getRawX (), event.getRawY (), time);\r
+ handleMouseUp (host, event.getPointerId (0), event.getRawX(), event.getRawY(), time);\r
return true;\r
\r
case MotionEvent.ACTION_MOVE:\r
{\r
- handleMouseDrag (host, event.getPointerId (0), event.getRawX (), event.getRawY (), time);\r
+ handleMouseDrag (host, event.getPointerId (0), event.getRawX(), event.getRawY(), time);\r
\r
- int n = event.getPointerCount ();\r
+ int n = event.getPointerCount();\r
\r
if (n > 1)\r
{\r
\r
if (i == 0)\r
{\r
- handleMouseUp (host, event.getPointerId (0), event.getRawX (), event.getRawY (), time);\r
- } else\r
+ handleMouseUp (host, event.getPointerId (0), event.getRawX(), event.getRawY(), time);\r
+ }\r
+ else\r
{\r
int point[] = new int[2];\r
getLocationOnScreen (point);\r
\r
if (i == 0)\r
{\r
- handleMouseDown (host, event.getPointerId (0), event.getRawX (), event.getRawY (), time);\r
- } else\r
+ handleMouseDown (host, event.getPointerId (0), event.getRawX(), event.getRawY(), time);\r
+ }\r
+ else\r
{\r
int point[] = new int[2];\r
getLocationOnScreen (point);\r
return false;\r
}\r
\r
+ //==============================================================================\r
+ public static class TextInputTarget\r
+ {\r
+ public TextInputTarget (long owner) { host = owner; }\r
+\r
+ public boolean isTextInputActive() { return ComponentPeerView.textInputTargetIsTextInputActive (host); }\r
+ public int getHighlightedRegionBegin() { return ComponentPeerView.textInputTargetGetHighlightedRegionBegin (host); }\r
+ public int getHighlightedRegionEnd() { return ComponentPeerView.textInputTargetGetHighlightedRegionEnd (host); }\r
+ public void setHighlightedRegion (int b, int e) { ComponentPeerView.textInputTargetSetHighlightedRegion (host, b, e); }\r
+ public String getTextInRange (int b, int e) { return ComponentPeerView.textInputTargetGetTextInRange (host, b, e); }\r
+ public void insertTextAtCaret (String text) { ComponentPeerView.textInputTargetInsertTextAtCaret (host, text); }\r
+ public int getCaretPosition() { return ComponentPeerView.textInputTargetGetCaretPosition (host); }\r
+ public int getTotalNumChars() { return ComponentPeerView.textInputTargetGetTotalNumChars (host); }\r
+ public int getCharIndexForPoint (Point point) { return ComponentPeerView.textInputTargetGetCharIndexForPoint (host, point); }\r
+ public int getKeyboardType() { return ComponentPeerView.textInputTargetGetKeyboardType (host); }\r
+ public void setTemporaryUnderlining (List<Pair<Integer, Integer>> list) { ComponentPeerView.textInputTargetSetTemporaryUnderlining (host, list); }\r
+\r
+ //==============================================================================\r
+ private final long host;\r
+ }\r
+\r
+ private native static boolean textInputTargetIsTextInputActive (long host);\r
+ private native static int textInputTargetGetHighlightedRegionBegin (long host);\r
+ private native static int textInputTargetGetHighlightedRegionEnd (long host);\r
+ private native static void textInputTargetSetHighlightedRegion (long host, int begin, int end);\r
+ private native static String textInputTargetGetTextInRange (long host, int begin, int end);\r
+ private native static void textInputTargetInsertTextAtCaret (long host, String text);\r
+ private native static int textInputTargetGetCaretPosition (long host);\r
+ private native static int textInputTargetGetTotalNumChars (long host);\r
+ private native static int textInputTargetGetCharIndexForPoint (long host, Point point);\r
+ private native static int textInputTargetGetKeyboardType (long host);\r
+ private native static void textInputTargetSetTemporaryUnderlining (long host, List<Pair<Integer, Integer>> list);\r
+\r
+ private native long getFocusedTextInputTargetPointer (long host);\r
+\r
+ private TextInputTarget getFocusedTextInputTarget (long host)\r
+ {\r
+ final long ptr = getFocusedTextInputTargetPointer (host);\r
+ return ptr != 0 ? new TextInputTarget (ptr) : null;\r
+ }\r
+\r
//==============================================================================\r
private native void handleKeyDown (long host, int keycode, int textchar, int kbFlags);\r
private native void handleKeyUp (long host, int keycode, int textchar);\r
private native void handleBackButton (long host);\r
private native void handleKeyboardHidden (long host);\r
\r
- public void showKeyboard (String type)\r
+ private static int getInputTypeForJuceVirtualKeyboardType (int type)\r
{\r
- InputMethodManager imm = (InputMethodManager) getContext ().getSystemService (Context.INPUT_METHOD_SERVICE);\r
-\r
- if (imm != null)\r
+ switch (type)\r
{\r
- if (type.length () > 0)\r
- {\r
- imm.showSoftInput (this, android.view.inputmethod.InputMethodManager.SHOW_IMPLICIT);\r
- imm.setInputMethod (getWindowToken (), type);\r
- keyboardDismissListener.startListening ();\r
- } else\r
- {\r
- imm.hideSoftInputFromWindow (getWindowToken (), 0);\r
- keyboardDismissListener.stopListening ();\r
- }\r
+ case 0: // textKeyboard\r
+ return InputType.TYPE_CLASS_TEXT\r
+ | InputType.TYPE_TEXT_VARIATION_NORMAL\r
+ | InputType.TYPE_TEXT_FLAG_MULTI_LINE\r
+ | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;\r
+ case 1: // numericKeyboard\r
+ return InputType.TYPE_CLASS_NUMBER\r
+ | InputType.TYPE_NUMBER_VARIATION_NORMAL;\r
+ case 2: // decimalKeyboard\r
+ return InputType.TYPE_CLASS_NUMBER\r
+ | InputType.TYPE_NUMBER_VARIATION_NORMAL\r
+ | InputType.TYPE_NUMBER_FLAG_DECIMAL;\r
+ case 3: // urlKeyboard\r
+ return InputType.TYPE_CLASS_TEXT\r
+ | InputType.TYPE_TEXT_VARIATION_URI\r
+ | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;\r
+ case 4: // emailAddressKeyboard\r
+ return InputType.TYPE_CLASS_TEXT\r
+ | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS\r
+ | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;\r
+ case 5: // phoneNumberKeyboard\r
+ return InputType.TYPE_CLASS_PHONE;\r
+ case 6: // passwordKeyboard\r
+ return InputType.TYPE_CLASS_TEXT\r
+ | InputType.TYPE_TEXT_VARIATION_PASSWORD\r
+ | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;\r
}\r
+\r
+ return 0;\r
+ }\r
+\r
+ InputMethodManager getInputMethodManager()\r
+ {\r
+ return (InputMethodManager) getContext().getSystemService (Context.INPUT_METHOD_SERVICE);\r
+ }\r
+\r
+ public void closeInputMethodContext()\r
+ {\r
+ InputMethodManager imm = getInputMethodManager();\r
+\r
+ if (imm == null)\r
+ return;\r
+\r
+ if (cachedConnection != null)\r
+ cachedConnection.closeConnection();\r
+\r
+ imm.restartInput (this);\r
+ }\r
+\r
+ public void showKeyboard (int virtualKeyboardType, int selectionStart, int selectionEnd)\r
+ {\r
+ InputMethodManager imm = getInputMethodManager();\r
+\r
+ if (imm == null)\r
+ return;\r
+\r
+ // restartingInput causes a call back to onCreateInputConnection, where we'll pick\r
+ // up the correct keyboard characteristics to use for the focused TextInputTarget.\r
+ imm.restartInput (this);\r
+ imm.showSoftInput (this, 0);\r
+ keyboardDismissListener.startListening();\r
}\r
\r
- public void backButtonPressed ()\r
+ public void hideKeyboard()\r
+ {\r
+ InputMethodManager imm = getInputMethodManager();\r
+\r
+ if (imm == null)\r
+ return;\r
+\r
+ imm.hideSoftInputFromWindow (getWindowToken(), 0);\r
+ keyboardDismissListener.stopListening();\r
+ }\r
+\r
+ public void backButtonPressed()\r
{\r
if (host == 0)\r
return;\r
if (host == 0)\r
return false;\r
\r
+ // The key event may move the cursor, or in some cases it might enter characters (e.g.\r
+ // digits). In this case, we need to reset the IME so that it's aware of the new contents\r
+ // of the TextInputTarget.\r
+ closeInputMethodContext();\r
+\r
switch (keyCode)\r
{\r
case KeyEvent.KEYCODE_VOLUME_UP:\r
return super.onKeyDown (keyCode, event);\r
case KeyEvent.KEYCODE_BACK:\r
{\r
- backButtonPressed ();\r
+ backButtonPressed();\r
return true;\r
}\r
\r
\r
handleKeyDown (host,\r
keyCode,\r
- event.getUnicodeChar (),\r
- event.getMetaState ());\r
+ event.getUnicodeChar(),\r
+ event.getMetaState());\r
+\r
return true;\r
}\r
\r
if (host == 0)\r
return false;\r
\r
- handleKeyUp (host, keyCode, event.getUnicodeChar ());\r
+ handleKeyUp (host, keyCode, event.getUnicodeChar());\r
return true;\r
}\r
\r
if (host == 0)\r
return false;\r
\r
- if (keyCode != KeyEvent.KEYCODE_UNKNOWN || event.getAction () != KeyEvent.ACTION_MULTIPLE)\r
+ if (keyCode != KeyEvent.KEYCODE_UNKNOWN || (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q && event.getAction() != KeyEvent.ACTION_MULTIPLE))\r
return super.onKeyMultiple (keyCode, count, event);\r
\r
- if (event.getCharacters () != null)\r
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q && event.getCharacters() != null)\r
{\r
- int utf8Char = event.getCharacters ().codePointAt (0);\r
+ int utf8Char = event.getCharacters().codePointAt (0);\r
\r
handleKeyDown (host,\r
keyCode,\r
utf8Char,\r
- event.getMetaState ());\r
+ event.getMetaState());\r
return true;\r
}\r
\r
view = viewToUse;\r
}\r
\r
- private void startListening ()\r
+ private void startListening()\r
{\r
- view.getViewTreeObserver ().addOnGlobalLayoutListener (viewTreeObserver);\r
+ view.getViewTreeObserver().addOnGlobalLayoutListener (viewTreeObserver);\r
}\r
\r
- private void stopListening ()\r
+ private void stopListening()\r
{\r
- view.getViewTreeObserver ().removeGlobalOnLayoutListener (viewTreeObserver);\r
+ view.getViewTreeObserver().removeOnGlobalLayoutListener (viewTreeObserver);\r
}\r
\r
private class TreeObserver implements ViewTreeObserver.OnGlobalLayoutListener\r
{\r
- TreeObserver ()\r
+ TreeObserver()\r
{\r
keyboardShown = false;\r
}\r
\r
@Override\r
- public void onGlobalLayout ()\r
+ public void onGlobalLayout()\r
{\r
- Rect r = new Rect ();\r
+ Rect r = new Rect();\r
\r
- View parentView = getRootView ();\r
+ View parentView = getRootView();\r
int diff;\r
\r
if (parentView == null)\r
{\r
getWindowVisibleDisplayFrame (r);\r
- diff = getHeight () - (r.bottom - r.top);\r
- } else\r
+ diff = getHeight() - (r.bottom - r.top);\r
+ }\r
+ else\r
{\r
parentView.getWindowVisibleDisplayFrame (r);\r
- diff = parentView.getHeight () - (r.bottom - r.top);\r
+ diff = parentView.getHeight() - (r.bottom - r.top);\r
}\r
\r
// Arbitrary threshold, surely keyboard would take more than 20 pix.\r
handleKeyboardHidden (view.host);\r
}\r
\r
- if (!keyboardShown && diff > 20)\r
+ if (! keyboardShown && diff > 20)\r
keyboardShown = true;\r
}\r
\r
}\r
\r
private final ComponentPeerView view;\r
- private final TreeObserver viewTreeObserver = new TreeObserver ();\r
+ private final TreeObserver viewTreeObserver = new TreeObserver();\r
}\r
\r
private final KeyboardDismissListener keyboardDismissListener = new KeyboardDismissListener (this);\r
\r
- // this is here to make keyboard entry work on a Galaxy Tab2 10.1\r
+ //==============================================================================\r
+ // This implementation is quite similar to the ChangeListener in Android's built-in TextView.\r
+ private static final class ChangeWatcher implements SpanWatcher, TextWatcher\r
+ {\r
+ public ChangeWatcher (ComponentPeerView viewIn, Editable editableIn, TextInputTarget targetIn)\r
+ {\r
+ view = viewIn;\r
+ editable = editableIn;\r
+ target = targetIn;\r
+\r
+ updateEditableSelectionFromTarget (editable, target);\r
+ }\r
+\r
+ @Override\r
+ public void onSpanAdded (Spannable text, Object what, int start, int end)\r
+ {\r
+ updateTargetRangesFromEditable (editable, target);\r
+ }\r
+\r
+ @Override\r
+ public void onSpanRemoved (Spannable text, Object what, int start, int end)\r
+ {\r
+ updateTargetRangesFromEditable (editable, target);\r
+ }\r
+\r
+ @Override\r
+ public void onSpanChanged (Spannable text, Object what, int ostart, int oend, int nstart, int nend)\r
+ {\r
+ updateTargetRangesFromEditable (editable, target);\r
+ }\r
+\r
+ @Override\r
+ public void afterTextChanged (Editable s)\r
+ {\r
+ }\r
+\r
+ @Override\r
+ public void beforeTextChanged (CharSequence s, int start, int count, int after)\r
+ {\r
+ contentsBeforeChange = s.toString();\r
+ }\r
+\r
+ @Override\r
+ public void onTextChanged (CharSequence s, int start, int before, int count)\r
+ {\r
+ if (editable != s || contentsBeforeChange == null)\r
+ return;\r
+\r
+ final String newText = s.subSequence (start, start + count).toString();\r
+\r
+ int code = 0;\r
+\r
+ if (newText.endsWith ("\n") || newText.endsWith ("\r"))\r
+ code = KeyEvent.KEYCODE_ENTER;\r
+\r
+ if (newText.endsWith ("\t"))\r
+ code = KeyEvent.KEYCODE_TAB;\r
+\r
+ target.setHighlightedRegion (contentsBeforeChange.codePointCount (0, start),\r
+ contentsBeforeChange.codePointCount (0, start + before));\r
+ target.insertTextAtCaret (code != 0 ? newText.substring (0, newText.length() - 1)\r
+ : newText);\r
+\r
+ // Treating return/tab as individual keypresses rather than part of the composition\r
+ // sequence allows TextEditor onReturn and onTab to work as expected.\r
+ if (code != 0)\r
+ view.onKeyDown (code, new KeyEvent (KeyEvent.ACTION_DOWN, code));\r
+\r
+ updateTargetRangesFromEditable (editable, target);\r
+ contentsBeforeChange = null;\r
+ }\r
+\r
+ private static void updateEditableSelectionFromTarget (Editable editable, TextInputTarget text)\r
+ {\r
+ final int start = text.getHighlightedRegionBegin();\r
+ final int end = text.getHighlightedRegionEnd();\r
+\r
+ if (start < 0 || end < 0)\r
+ return;\r
+\r
+ final String string = editable.toString();\r
+ Selection.setSelection (editable,\r
+ string.offsetByCodePoints (0, start),\r
+ string.offsetByCodePoints (0, end));\r
+ }\r
+\r
+ private static void updateTargetSelectionFromEditable (Editable editable, TextInputTarget target)\r
+ {\r
+ final int start = Selection.getSelectionStart (editable);\r
+ final int end = Selection.getSelectionEnd (editable);\r
+\r
+ if (start < 0 || end < 0)\r
+ return;\r
+\r
+ final String string = editable.toString();\r
+ target.setHighlightedRegion (string.codePointCount (0, start),\r
+ string.codePointCount (0, end));\r
+ }\r
+\r
+ private static List<Pair<Integer, Integer>> getUnderlinedRanges (Editable editable)\r
+ {\r
+ final int start = BaseInputConnection.getComposingSpanStart (editable);\r
+ final int end = BaseInputConnection.getComposingSpanEnd (editable);\r
+\r
+ if (start < 0 || end < 0)\r
+ return null;\r
+\r
+ final String string = editable.toString();\r
+\r
+ final ArrayList<Pair<Integer, Integer>> pairs = new ArrayList<>();\r
+ pairs.add (new Pair<> (string.codePointCount (0, start), string.codePointCount (0, end)));\r
+ return pairs;\r
+ }\r
+\r
+ private static void updateTargetCompositionRangesFromEditable (Editable editable, TextInputTarget target)\r
+ {\r
+ target.setTemporaryUnderlining (getUnderlinedRanges (editable));\r
+ }\r
+\r
+ private static void updateTargetRangesFromEditable (Editable editable, TextInputTarget target)\r
+ {\r
+ updateTargetSelectionFromEditable (editable, target);\r
+ updateTargetCompositionRangesFromEditable (editable, target);\r
+ }\r
+\r
+ private final ComponentPeerView view;\r
+ private final TextInputTarget target;\r
+ private final Editable editable;\r
+ private String contentsBeforeChange;\r
+ }\r
+\r
+ private static final class Connection extends BaseInputConnection\r
+ {\r
+ Connection (ComponentPeerView viewIn, boolean fullEditor, TextInputTarget targetIn)\r
+ {\r
+ super (viewIn, fullEditor);\r
+ view = viewIn;\r
+ target = targetIn;\r
+ }\r
+\r
+ @Override\r
+ public Editable getEditable()\r
+ {\r
+ if (cached != null)\r
+ return cached;\r
+\r
+ if (target == null)\r
+ return cached = super.getEditable();\r
+\r
+ int length = target.getTotalNumChars();\r
+ String initialText = target.getTextInRange (0, length);\r
+ cached = new SpannableStringBuilder (initialText);\r
+ // Span the entire range of text, so that we pick up changes at any location.\r
+ // Use cached.length rather than target.getTotalNumChars here, because this\r
+ // range is in UTF-16 code units, rather than code points.\r
+ changeWatcher = new ChangeWatcher (view, cached, target);\r
+ cached.setSpan (changeWatcher, 0, cached.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);\r
+ return cached;\r
+ }\r
+\r
+ /** Call this to stop listening for selection/composition updates.\r
+\r
+ We do this before closing the current input method context (e.g. when the user\r
+ taps on a text view to move the cursor), because otherwise the input system\r
+ might send another round of notifications *during* the restartInput call, after we've\r
+ requested that the input session should end.\r
+ */\r
+ @Override\r
+ public void closeConnection()\r
+ {\r
+ if (cached != null && changeWatcher != null)\r
+ cached.removeSpan (changeWatcher);\r
+\r
+ cached = null;\r
+ target = null;\r
+\r
+ super.closeConnection();\r
+ }\r
+\r
+ private ComponentPeerView view;\r
+ private TextInputTarget target;\r
+ private Editable cached;\r
+ private ChangeWatcher changeWatcher;\r
+ }\r
+\r
@Override\r
public InputConnection onCreateInputConnection (EditorInfo outAttrs)\r
{\r
+ TextInputTarget focused = getFocusedTextInputTarget (host);\r
+\r
outAttrs.actionLabel = "";\r
outAttrs.hintText = "";\r
outAttrs.initialCapsMode = 0;\r
- outAttrs.initialSelEnd = outAttrs.initialSelStart = -1;\r
+ outAttrs.initialSelStart = focused != null ? focused.getHighlightedRegionBegin() : -1;\r
+ outAttrs.initialSelEnd = focused != null ? focused.getHighlightedRegionEnd() : -1;\r
outAttrs.label = "";\r
- outAttrs.imeOptions = EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI;\r
- outAttrs.inputType = InputType.TYPE_NULL;\r
-\r
- return new BaseInputConnection (this, false);\r
+ outAttrs.imeOptions = EditorInfo.IME_ACTION_UNSPECIFIED\r
+ | EditorInfo.IME_FLAG_NO_EXTRACT_UI\r
+ | EditorInfo.IME_FLAG_NO_ENTER_ACTION;\r
+ outAttrs.inputType = focused != null ? getInputTypeForJuceVirtualKeyboardType (focused.getKeyboardType())\r
+ : 0;\r
+\r
+ cachedConnection = new Connection (this, true, focused);\r
+ return cachedConnection;\r
}\r
\r
+ private Connection cachedConnection;\r
+\r
//==============================================================================\r
@Override\r
protected void onSizeChanged (int w, int h, int oldw, int oldh)\r
Method systemUIVisibilityMethod = null;\r
try\r
{\r
- systemUIVisibilityMethod = this.getClass ().getMethod ("setSystemUiVisibility", int.class);\r
- } catch (SecurityException e)\r
+ systemUIVisibilityMethod = this.getClass().getMethod ("setSystemUiVisibility", int.class);\r
+ }\r
+ catch (SecurityException e)\r
{\r
return;\r
- } catch (NoSuchMethodException e)\r
+ }\r
+ catch (NoSuchMethodException e)\r
{\r
return;\r
}\r
try\r
{\r
systemUIVisibilityMethod.invoke (this, visibility);\r
- } catch (java.lang.IllegalArgumentException e)\r
+ }\r
+ catch (java.lang.IllegalArgumentException e)\r
{\r
- } catch (java.lang.IllegalAccessException e)\r
+ }\r
+ catch (java.lang.IllegalAccessException e)\r
{\r
- } catch (java.lang.reflect.InvocationTargetException e)\r
+ }\r
+ catch (java.lang.reflect.InvocationTargetException e)\r
{\r
}\r
}\r
\r
- public boolean isVisible ()\r
+ public boolean isVisible()\r
{\r
- return getVisibility () == VISIBLE;\r
+ return getVisibility() == VISIBLE;\r
}\r
\r
public void setVisible (boolean b)\r
if (host == 0)\r
return null;\r
\r
- final AccessibilityNodeInfo nodeInfo = AccessibilityNodeInfo.obtain (view, virtualViewId);\r
+ final AccessibilityNodeInfo nodeInfo;\r
+\r
+ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)\r
+ {\r
+ nodeInfo = new AccessibilityNodeInfo (view, virtualViewId);\r
+ }\r
+ else\r
+ {\r
+ nodeInfo = AccessibilityNodeInfo.obtain (view, virtualViewId);\r
+ }\r
\r
if (! populateAccessibilityNodeInfo (host, virtualViewId, nodeInfo))\r
{\r
- nodeInfo.recycle();\r
+ if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.R)\r
+ nodeInfo.recycle();\r
+\r
return null;\r
}\r
\r
}\r
\r
private final JuceAccessibilityNodeProvider nodeProvider = new JuceAccessibilityNodeProvider (this);\r
- private final AccessibilityManager accessibilityManager = (AccessibilityManager) getContext ().getSystemService (Context.ACCESSIBILITY_SERVICE);\r
+ private final AccessibilityManager accessibilityManager = (AccessibilityManager) getContext().getSystemService (Context.ACCESSIBILITY_SERVICE);\r
\r
@Override\r
- public AccessibilityNodeProvider getAccessibilityNodeProvider ()\r
+ public AccessibilityNodeProvider getAccessibilityNodeProvider()\r
{\r
return nodeProvider;\r
}\r
public JuceContentProviderFileObserver (long hostToUse, String path, int mask)\r
{\r
super (path, mask);\r
-\r
host = hostToUse;\r
}\r
\r
class Owner\r
{\r
public:\r
- virtual ~Owner() {}\r
+ virtual ~Owner() = default;\r
\r
virtual void cursorClosed (const AndroidContentSharerCursor&) = 0;\r
};\r
\r
jobject getNativeCursor() { return cursor.get(); }\r
\r
- void cursorClosed()\r
+ static void cursorClosed (JNIEnv*, AndroidContentSharerCursor& t)\r
{\r
- MessageManager::callAsync ([this] { owner.cursorClosed (*this); });\r
+ MessageManager::callAsync ([&t] { t.owner.cursorClosed (t); });\r
}\r
\r
void addRow (LocalRef<jobjectArray>& values)\r
#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \\r
METHOD (addRow, "addRow", "([Ljava/lang/Object;)V") \\r
METHOD (constructor, "<init>", "(J[Ljava/lang/String;)V") \\r
- CALLBACK (contentSharerCursorClosed, "contentSharerCursorClosed", "(J)V") \\r
+ CALLBACK (generatedCallback<&AndroidContentSharerCursor::cursorClosed>, "contentSharerCursorClosed", "(J)V") \\r
\r
- DECLARE_JNI_CLASS_WITH_BYTECODE (JuceContentProviderCursor, "com/rmsl/juce/JuceContentProviderCursor", 16, javaJuceContentProviderCursor, sizeof (javaJuceContentProviderCursor))\r
+ DECLARE_JNI_CLASS_WITH_BYTECODE (JuceContentProviderCursor, "com/rmsl/juce/JuceContentProviderCursor", 16, javaJuceContentProviderCursor)\r
#undef JNI_CLASS_MEMBERS\r
-\r
- static void JNICALL contentSharerCursorClosed (JNIEnv*, jobject, jlong host)\r
- {\r
- if (auto* myself = reinterpret_cast<AndroidContentSharerCursor*> (host))\r
- myself->cursorClosed();\r
- }\r
};\r
\r
-AndroidContentSharerCursor::JuceContentProviderCursor_Class AndroidContentSharerCursor::JuceContentProviderCursor;\r
-\r
//==============================================================================\r
class AndroidContentSharerFileObserver\r
{\r
env->CallVoidMethod (fileObserver, JuceContentProviderFileObserver.startWatching);\r
}\r
\r
- void onFileEvent (int event, const LocalRef<jstring>& path)\r
+ void onFileEvent (int event, [[maybe_unused]] const LocalRef<jstring>& path)\r
{\r
- ignoreUnused (path);\r
-\r
if (event == open)\r
{\r
++numOpenedHandles;\r
METHOD (constructor, "<init>", "(JLjava/lang/String;I)V") \\r
METHOD (startWatching, "startWatching", "()V") \\r
METHOD (stopWatching, "stopWatching", "()V") \\r
- CALLBACK (contentSharerFileObserverEvent, "contentSharerFileObserverEvent", "(JILjava/lang/String;)V") \\r
+ CALLBACK (generatedCallback<&AndroidContentSharerFileObserver::onFileEventCallback>, "contentSharerFileObserverEvent", "(JILjava/lang/String;)V") \\r
\r
- DECLARE_JNI_CLASS_WITH_BYTECODE (JuceContentProviderFileObserver, "com/rmsl/juce/JuceContentProviderFileObserver", 16, javaJuceContentProviderFileObserver, sizeof (javaJuceContentProviderFileObserver))\r
+ DECLARE_JNI_CLASS_WITH_BYTECODE (JuceContentProviderFileObserver, "com/rmsl/juce/JuceContentProviderFileObserver", 16, javaJuceContentProviderFileObserver)\r
#undef JNI_CLASS_MEMBERS\r
\r
- static void JNICALL contentSharerFileObserverEvent (JNIEnv*, jobject /*fileObserver*/, jlong host, int event, jstring path)\r
+ static void onFileEventCallback (JNIEnv*, AndroidContentSharerFileObserver& t, jint event, jstring path)\r
{\r
- if (auto* myself = reinterpret_cast<AndroidContentSharerFileObserver*> (host))\r
- myself->onFileEvent (event, LocalRef<jstring> (path));\r
+ t.onFileEvent (event, LocalRef<jstring> (path));\r
}\r
};\r
\r
-AndroidContentSharerFileObserver::JuceContentProviderFileObserver_Class AndroidContentSharerFileObserver::JuceContentProviderFileObserver;\r
-\r
//==============================================================================\r
class AndroidContentSharerPrepareFilesThread : private Thread\r
{\r
\r
//==============================================================================\r
jobject openFile (const LocalRef<jobject>& contentProvider,\r
- const LocalRef<jobject>& uri, const LocalRef<jstring>& mode)\r
+ const LocalRef<jobject>& uri, [[maybe_unused]] const LocalRef<jstring>& mode)\r
{\r
- ignoreUnused (mode);\r
-\r
WeakReference<ContentSharerNativeImpl> weakRef (this);\r
\r
if (weakRef == nullptr)\r
return new ContentSharerNativeImpl (*this);\r
}\r
\r
-ContentSharer::ContentSharerNativeImpl::JuceSharingContentProvider_Class ContentSharer::ContentSharerNativeImpl::JuceSharingContentProvider;\r
-\r
} // namespace juce\r
\r
namespace juce\r
{\r
+\r
// This byte-code is generated from native/java/com/rmsl/juce/ComponentPeerView.java with min sdk version 16\r
// See juce_core/native/java/README.txt on how to generate this byte-code.\r
-static const uint8 javaComponentPeerView[] =\r
-{ 31,139,8,8,136,16,72,99,0,3,74,97,118,97,68,101,120,66,121,116,101,67,111,100,101,46,100,101,120,0,165,155,11,124,220,85,149,199,207,253,255,255,51,147,76,38,201,100,242,108,155,180,147,52,208,36,52,201,36,233,35,33,45,180,77,90,154,52,109,98,51,13,52,\r
- 97,23,38,201,36,153,118,242,159,233,204,36,77,4,165,101,89,169,110,113,1,43,139,80,21,177,160,235,11,84,240,193,178,187,40,42,174,136,128,143,69,87,101,169,139,90,21,92,20,20,151,5,187,191,115,239,157,201,164,15,89,119,147,207,119,206,185,231,62,254,\r
- 247,113,238,185,247,159,199,120,120,206,29,104,91,75,23,61,245,207,167,202,99,239,248,192,190,187,191,252,216,84,255,10,199,175,90,191,95,180,235,111,191,112,251,209,245,68,113,34,154,27,90,227,35,253,245,240,58,162,181,66,217,59,65,183,131,104,27,100,\r
- 192,73,180,156,203,230,18,93,15,57,229,38,114,112,186,128,40,85,71,84,81,72,244,53,20,248,58,120,28,124,27,124,15,252,24,156,4,191,1,111,128,194,21,68,171,64,19,104,1,107,193,70,176,9,116,131,237,96,7,232,7,54,184,17,188,11,188,27,220,10,110,3,119,130,\r
- 187,192,61,224,31,193,203,160,192,79,84,15,186,193,56,184,1,220,7,254,5,252,4,188,10,242,171,137,58,192,229,32,14,142,130,207,131,111,130,159,129,229,53,68,151,130,4,184,23,60,11,10,86,162,143,32,4,110,6,79,131,37,181,68,65,112,16,188,31,124,9,156,4,\r
- 214,5,68,43,193,70,48,0,82,224,14,112,31,248,54,248,25,112,92,136,250,96,59,24,7,215,128,163,224,3,224,4,248,12,120,16,60,10,158,6,223,3,63,2,207,129,83,224,215,224,119,224,53,64,171,208,30,200,5,5,160,24,84,128,229,160,6,52,128,70,208,10,218,193,70,\r
- 208,13,122,193,46,48,8,70,192,40,152,0,251,192,219,193,123,192,7,193,199,193,231,193,163,224,73,240,67,240,115,240,50,56,13,60,88,247,101,160,5,116,128,109,96,0,236,7,179,96,30,28,5,199,192,113,112,2,124,18,60,0,190,4,190,5,158,5,191,7,142,122,140,1,\r
- 148,130,86,208,14,54,131,110,176,3,76,131,57,112,29,184,9,220,1,62,6,30,3,63,5,47,1,209,128,241,131,85,160,5,108,4,59,192,16,216,15,230,192,77,224,78,112,47,248,60,248,42,248,22,120,6,60,15,126,15,156,23,97,92,160,1,92,12,174,0,127,9,198,193,36,56,12,\r
- 110,5,39,192,231,192,87,193,119,193,73,240,42,200,89,141,53,6,117,96,45,232,5,65,48,13,14,130,183,129,67,224,40,184,5,220,13,62,13,190,12,158,0,63,4,63,5,47,130,255,2,102,35,214,20,212,131,86,176,3,12,131,16,136,131,89,240,118,240,14,240,78,240,183,224,\r
- 118,112,55,184,31,124,1,252,19,248,10,120,6,188,0,254,8,138,154,176,15,193,102,16,4,211,96,6,220,0,142,129,187,193,39,193,195,224,171,224,73,240,44,120,1,188,2,222,0,174,102,172,27,88,10,234,65,0,244,131,81,16,6,54,184,21,220,9,238,1,143,130,111,128,\r
- 39,193,191,131,23,129,51,64,84,6,106,193,37,96,15,72,128,235,192,187,193,29,224,99,224,11,224,49,240,12,248,25,160,22,212,5,30,80,2,42,65,13,88,5,26,193,122,112,49,216,12,122,193,0,8,129,40,120,59,184,9,188,15,28,7,31,4,31,6,31,1,31,7,247,129,207,130,\r
- 60,60,6,33,142,138,64,37,168,34,21,7,17,114,8,33,133,16,54,8,97,130,16,22,8,33,128,176,197,73,111,77,130,91,19,220,146,224,82,4,183,32,44,37,97,218,9,211,70,205,28,83,213,16,168,21,180,129,53,96,45,64,8,38,132,102,106,7,29,224,98,29,139,55,128,141,224,\r
- 18,112,41,216,4,54,131,45,160,139,99,53,216,74,42,94,95,6,182,131,30,208,11,118,128,62,176,11,188,5,140,3,27,196,72,197,250,3,164,198,154,254,242,104,233,173,82,227,23,233,180,214,217,206,115,98,104,187,79,235,21,176,151,66,58,181,189,2,228,240,92,105,\r
- 123,129,182,151,234,182,210,122,73,150,94,174,245,50,176,68,63,107,137,214,235,116,59,75,179,218,231,53,9,84,41,157,215,162,93,151,169,207,106,103,181,110,167,92,235,155,170,84,27,172,111,135,190,76,175,203,128,110,135,245,43,116,59,1,221,14,151,225,\r
- 181,186,90,247,135,215,107,170,74,205,231,90,93,38,168,117,126,214,30,173,199,161,15,105,157,159,123,185,214,175,133,126,133,214,143,66,223,171,245,219,161,15,107,253,4,244,17,173,127,2,250,149,90,255,2,244,191,208,250,35,208,175,210,250,215,179,236,\r
- 79,101,233,223,135,30,210,250,115,89,246,23,178,244,87,178,244,215,179,218,180,150,47,216,61,89,122,9,244,171,181,94,153,101,127,189,114,65,231,181,248,75,173,111,207,106,179,54,171,60,207,243,168,214,87,195,62,166,245,53,89,101,186,179,244,190,229,202,\r
- 127,215,233,57,15,107,61,8,251,132,214,175,204,210,167,160,79,106,61,5,125,74,235,215,66,143,104,253,8,244,253,90,63,6,125,159,214,143,103,217,217,247,162,90,63,1,251,180,214,31,200,42,255,200,114,222,59,130,254,154,148,172,22,28,55,234,232,58,82,242,\r
- 235,82,10,122,92,203,39,180,252,150,150,79,106,249,148,46,255,67,226,88,83,67,203,133,146,171,4,199,157,117,244,111,196,178,154,86,8,142,65,42,191,90,231,87,35,167,65,240,94,168,160,183,17,75,131,254,69,202,106,250,129,148,43,232,121,41,215,209,107,82,\r
- 230,209,27,196,49,44,32,247,45,75,151,148,235,200,173,211,249,82,10,218,173,211,131,188,86,216,97,253,196,247,192,11,201,33,120,207,59,233,46,98,89,70,247,67,230,98,135,89,82,174,39,55,242,221,136,132,156,206,211,246,60,60,37,79,240,60,169,180,23,37,\r
- 63,34,101,35,25,130,227,139,65,31,32,150,229,244,33,82,233,191,215,242,211,196,49,71,229,179,252,160,148,22,157,208,233,143,75,105,210,39,72,197,166,79,106,249,41,41,5,125,78,203,207,179,31,163,252,61,82,94,68,15,18,239,249,85,178,63,165,136,182,175,\r
- 72,185,129,126,39,101,37,253,129,56,134,4,232,176,150,57,130,227,69,7,253,43,113,76,200,167,159,74,137,241,8,142,47,106,92,203,16,237,89,46,71,196,126,76,202,213,84,32,88,110,161,10,185,174,109,50,127,5,102,226,22,41,151,208,109,58,253,119,82,118,210,\r
- 105,185,222,45,178,156,31,237,254,150,120,157,85,189,106,216,19,90,38,165,244,82,74,202,165,180,68,40,185,84,250,67,157,44,95,131,21,155,145,178,149,102,165,236,166,131,82,150,208,156,150,243,82,118,209,91,165,92,74,55,104,249,78,41,47,166,119,75,89,\r
- 69,239,145,114,37,189,79,202,98,58,46,101,1,189,95,74,39,125,88,251,223,61,58,255,94,41,219,233,163,82,186,233,62,237,127,159,209,229,62,43,101,14,61,32,165,90,15,120,55,125,81,63,239,33,45,255,65,203,135,181,95,255,163,148,126,250,39,237,223,255,172,\r
- 243,31,209,245,191,164,229,151,181,124,84,202,26,250,138,148,151,208,87,165,236,160,239,105,249,140,148,23,208,41,41,107,233,23,90,254,82,203,95,233,252,23,116,250,69,45,127,45,101,33,253,167,148,245,244,146,148,205,244,27,41,55,211,203,82,42,191,170,\r
- 209,126,197,233,223,235,253,248,170,148,202,207,184,252,127,73,121,41,9,185,126,107,201,163,101,190,148,77,228,149,114,25,249,164,92,67,197,58,93,162,203,149,106,89,166,243,203,133,154,151,58,193,251,88,249,103,61,60,248,99,82,110,165,239,202,125,109,\r
- 208,183,165,244,209,133,130,207,66,85,174,9,59,239,110,226,243,208,164,119,73,105,208,179,196,103,98,41,125,135,248,14,179,84,251,177,58,219,211,103,52,94,25,233,1,156,9,87,235,67,210,175,237,124,198,242,89,193,249,223,132,188,78,231,87,235,250,77,89,\r
- 245,127,132,252,91,117,62,159,241,69,164,206,102,171,74,229,191,128,252,135,116,254,74,157,159,174,159,163,229,189,8,208,187,215,170,123,202,27,56,188,173,181,234,46,83,160,109,43,33,27,128,169,243,215,64,191,68,151,185,76,218,77,169,127,174,69,181,57,\r
- 34,220,20,247,242,211,70,140,60,248,124,14,90,225,119,226,47,181,168,187,159,79,4,71,221,116,192,187,14,246,60,163,12,83,211,98,24,86,135,97,145,203,91,68,193,209,60,58,224,175,198,206,245,16,151,11,142,169,178,38,229,89,7,6,218,105,203,140,219,232,48,\r
- 94,60,109,123,121,188,46,111,221,207,45,253,252,103,90,212,253,170,6,51,30,247,30,150,163,229,103,115,191,79,182,168,51,242,124,207,54,169,72,248,124,109,171,150,156,253,204,64,7,109,113,120,176,55,95,194,51,121,223,187,133,237,175,71,44,247,136,186,\r
- 159,157,93,250,98,89,186,238,23,28,199,45,217,159,87,91,212,221,56,24,87,229,56,167,204,144,119,92,163,3,101,124,216,23,193,3,238,236,124,67,220,32,222,235,186,247,160,179,19,35,115,83,221,75,38,250,203,99,180,90,213,186,142,248,242,49,198,107,97,243,\r
- 209,149,94,143,188,63,230,32,197,99,205,111,85,247,164,98,103,9,213,24,30,148,227,89,8,38,243,41,216,86,64,182,247,50,148,242,136,14,177,97,193,230,223,1,239,88,40,209,141,18,110,115,55,46,238,187,47,16,244,233,224,45,100,90,107,175,94,74,123,146,152,\r
- 7,179,140,124,230,149,208,210,229,131,169,124,244,187,21,35,241,88,220,127,75,206,195,122,234,114,112,249,14,211,69,235,175,118,144,175,152,235,240,179,150,192,147,109,111,5,143,236,140,103,212,125,139,215,146,125,174,29,99,40,148,227,44,208,227,228,\r
- 40,22,247,55,98,7,140,120,65,113,161,190,127,11,57,47,219,81,158,247,88,220,203,111,12,5,25,251,64,198,190,70,218,13,125,99,191,162,85,249,115,208,91,40,247,4,123,16,63,247,234,86,117,199,15,250,11,209,71,126,83,192,56,171,189,232,245,114,60,185,32,83,\r
- 110,242,188,229,86,200,114,5,240,120,30,137,141,114,28,51,124,46,95,89,220,191,20,231,116,141,149,135,222,56,209,171,145,99,101,72,85,83,28,47,135,199,114,71,142,21,35,181,2,169,58,153,42,65,187,93,88,107,143,181,212,113,45,218,197,10,66,95,97,85,160,\r
- 94,17,85,90,14,216,230,113,174,187,173,118,107,156,86,184,57,141,119,66,26,62,238,131,150,194,73,117,229,157,165,208,166,113,151,179,253,182,252,140,225,60,170,65,155,113,47,143,189,216,42,161,149,155,215,35,150,241,109,219,246,91,232,121,144,251,228,\r
- 192,254,245,59,136,91,116,225,169,62,211,246,190,77,247,164,80,248,46,92,57,209,129,241,140,230,84,209,206,28,167,203,87,94,153,147,39,53,59,48,71,65,167,199,108,55,75,200,103,248,106,87,118,95,76,62,199,1,239,53,152,7,143,115,167,211,114,248,74,125,\r
- 82,218,129,67,244,30,235,128,244,100,143,101,251,221,116,140,61,195,203,190,206,99,84,99,57,70,117,119,228,91,117,47,130,95,129,95,128,239,128,167,225,40,153,247,34,245,117,232,82,250,179,210,103,126,169,124,190,131,151,97,111,242,30,247,242,58,155,23,\r
- 221,37,26,62,32,90,142,11,163,249,132,104,188,91,144,142,52,68,63,214,254,51,232,247,201,152,108,201,40,72,244,124,218,223,2,131,84,109,22,96,255,59,100,236,123,177,85,253,92,48,190,39,74,213,93,110,233,219,233,58,175,165,243,2,91,81,199,35,253,49,157,\r
- 103,182,165,243,54,103,242,92,242,70,137,153,211,121,179,206,43,100,148,224,54,29,58,6,44,107,83,251,103,112,147,47,43,214,152,152,101,182,196,3,253,184,137,213,189,182,48,158,149,186,45,126,39,28,198,152,10,116,31,248,171,190,77,157,3,62,236,149,28,\r
- 216,184,92,91,155,42,59,56,112,86,251,176,196,47,31,32,71,72,175,47,241,250,14,80,221,203,233,189,119,73,91,122,239,149,232,119,101,101,239,214,246,61,222,82,217,119,67,239,225,222,54,146,247,109,219,219,35,199,41,99,38,250,226,163,186,63,154,186,143,\r
- 3,109,250,204,146,245,212,219,247,112,150,205,169,207,129,209,55,153,151,157,122,94,210,229,163,111,82,126,87,102,30,85,63,102,207,209,143,67,231,176,29,201,178,89,250,89,55,183,169,51,222,39,248,134,48,18,48,72,73,147,246,182,32,126,190,180,55,224,162,\r
- 189,1,167,182,230,98,15,192,11,188,123,3,22,242,115,228,237,38,30,168,37,191,40,210,227,229,117,250,96,155,58,243,207,221,255,224,150,50,138,239,190,156,172,183,212,253,129,253,202,148,190,251,247,231,173,211,182,245,244,105,57,238,77,155,200,10,113,\r
- 29,55,158,195,103,254,231,218,212,253,35,120,168,8,235,228,39,206,105,71,79,7,15,35,26,121,249,13,198,141,40,82,194,210,178,177,190,144,14,27,167,125,46,229,57,93,135,102,115,250,180,127,241,154,186,241,44,246,239,71,219,212,187,163,207,59,152,64,79,\r
- 248,172,22,56,171,133,58,49,87,231,240,207,55,56,199,246,22,232,246,242,89,58,93,7,196,13,179,206,183,96,126,235,94,140,5,150,209,141,185,56,65,79,217,222,13,24,97,29,191,224,25,106,156,252,243,140,37,90,22,107,60,250,204,62,217,166,126,246,228,163,193,\r
- 235,241,108,167,124,182,179,67,152,120,114,71,110,46,158,153,135,72,225,22,190,154,214,106,23,197,54,85,210,237,15,225,41,191,181,113,22,231,225,116,109,23,124,67,81,186,237,127,59,251,173,131,91,226,62,230,113,31,15,139,99,170,143,62,111,221,51,106,\r
- 238,121,189,78,183,169,251,219,226,185,87,35,102,27,143,213,73,110,35,190,123,55,86,13,117,127,71,58,26,224,220,95,179,224,83,185,58,238,84,173,81,107,25,187,162,138,130,179,217,173,182,227,153,202,135,103,225,195,92,167,80,175,101,19,234,84,162,161,\r
- 193,167,81,218,228,145,11,83,206,186,40,20,182,151,207,93,119,46,175,93,1,229,185,190,119,203,105,186,72,252,94,122,109,221,111,6,191,237,131,180,253,197,184,239,240,58,151,112,89,7,175,119,1,143,249,233,217,156,32,143,184,168,238,71,111,94,114,72,149,\r
- 124,236,205,75,238,65,73,219,203,49,203,157,231,43,90,191,172,129,124,213,43,43,219,17,119,182,209,19,228,91,186,246,161,106,226,86,184,141,79,113,27,254,50,150,194,231,232,118,120,28,215,239,249,90,169,237,47,87,150,178,110,167,199,121,253,196,215,202,\r
- 210,237,126,223,237,22,117,207,161,31,127,133,55,7,188,108,62,120,203,73,183,200,233,112,87,208,255,118,4,245,52,113,58,187,63,255,151,158,112,75,117,63,252,243,123,16,212,61,184,224,255,221,131,160,236,1,150,89,184,164,175,177,111,113,28,106,214,146,\r
- 227,23,191,155,38,165,239,25,242,238,115,207,26,245,174,129,62,226,254,224,34,143,177,212,196,45,187,100,101,55,238,15,142,81,39,238,15,242,46,48,71,173,22,223,71,93,232,119,62,246,63,120,221,231,91,89,131,219,131,201,183,135,28,220,9,118,90,134,201,\r
- 183,134,3,70,221,175,243,141,186,23,192,47,193,41,246,247,34,244,109,153,220,187,136,122,70,115,89,99,133,121,81,93,195,106,254,85,71,38,222,62,157,181,55,76,109,253,193,26,117,151,110,55,92,196,51,146,64,137,2,242,109,170,251,111,30,159,138,201,255,\r
- 177,70,197,1,190,139,241,173,121,169,241,180,188,139,85,227,105,43,48,239,237,136,30,182,247,58,236,80,183,216,40,138,49,219,118,96,21,5,48,226,94,89,222,14,92,72,94,43,216,82,140,27,114,64,182,159,206,241,25,118,224,2,242,26,42,175,133,231,247,183,11,\r
- 247,217,63,172,73,223,91,175,149,189,230,223,35,242,87,250,231,205,60,182,90,216,86,107,123,250,171,253,140,244,246,51,210,92,191,76,175,87,49,158,80,168,109,105,106,180,204,33,117,230,151,232,254,84,106,123,181,150,134,166,70,207,101,19,93,44,237,1,\r
- 109,15,224,148,86,82,200,113,8,253,237,160,133,243,222,208,253,72,159,243,86,70,23,186,125,67,231,187,228,207,224,149,109,157,44,107,102,234,231,103,234,178,116,234,60,39,173,147,249,108,115,105,153,171,165,71,215,45,144,189,163,204,28,20,103,198,188,\r
- 78,143,173,70,218,249,12,114,72,153,30,133,42,191,94,203,118,93,79,232,187,23,203,124,221,15,214,139,50,249,69,89,99,204,207,140,125,73,166,63,170,109,159,126,94,77,166,36,233,159,79,169,210,130,212,190,18,117,228,104,105,10,52,97,20,27,200,185,33,98,\r
- 71,82,151,144,113,73,39,21,108,30,24,232,235,233,218,28,236,233,223,117,85,79,55,185,183,236,233,233,235,190,42,184,119,96,43,121,183,204,68,162,227,93,49,123,34,50,217,180,47,52,27,162,178,174,216,116,60,102,135,237,212,64,56,156,24,138,132,15,42,187,\r
- 163,123,235,150,61,151,145,216,70,198,182,30,114,110,235,219,60,212,191,155,68,15,25,61,245,0,119,177,94,50,122,251,168,170,119,102,44,188,121,108,44,156,76,70,70,35,209,72,106,126,87,108,60,60,144,136,205,70,198,195,9,42,223,17,158,31,141,133,18,227,\r
- 221,145,228,116,36,153,236,139,36,83,97,27,25,162,143,140,62,180,214,135,102,250,250,200,236,67,2,31,189,252,209,71,101,125,33,123,60,17,139,140,55,135,226,241,230,205,99,169,200,44,90,238,164,53,139,237,241,120,52,50,22,74,69,98,118,109,186,76,95,100,\r
- 34,60,54,63,22,13,119,133,162,209,209,208,216,254,100,39,45,57,95,173,236,172,177,152,141,158,165,154,187,88,206,165,178,179,38,19,161,248,84,100,44,217,220,21,178,103,67,104,112,249,57,178,98,209,88,98,91,36,154,10,39,206,159,191,51,148,74,68,230,58,\r
- 169,254,79,230,47,106,170,226,236,162,3,161,136,141,254,149,159,157,179,59,60,134,140,226,76,70,44,217,188,101,198,30,143,134,59,169,36,219,216,179,37,98,143,115,235,13,25,235,44,86,190,185,107,42,150,8,199,100,115,225,68,237,182,68,104,58,51,141,157,\r
- 84,249,39,202,102,247,70,230,98,217,183,206,134,185,155,75,23,103,236,140,241,196,235,188,250,197,121,236,125,181,253,246,182,216,216,76,178,107,42,100,79,134,211,238,146,61,168,76,209,236,201,201,24,47,75,196,102,226,157,180,238,236,156,96,34,28,238,\r
- 31,77,134,19,179,24,91,191,125,89,52,54,26,138,246,133,230,99,51,169,133,199,172,248,211,245,58,169,101,113,129,80,182,231,55,47,218,7,59,67,118,104,146,171,180,254,175,171,240,214,233,177,39,98,103,245,255,77,234,164,183,91,39,53,45,174,23,177,227,51,\r
- 169,233,112,106,42,54,222,188,37,148,68,227,72,195,195,109,56,138,244,255,11,206,95,126,235,120,36,21,75,168,238,52,156,191,216,89,77,54,190,73,217,157,82,207,204,206,165,125,99,177,233,230,196,116,50,218,188,15,161,164,249,172,120,84,251,39,35,76,39,\r
- 109,123,211,6,206,19,131,106,23,175,108,199,255,181,157,78,170,126,179,170,157,84,43,139,192,217,18,144,241,144,61,223,60,59,26,13,217,251,155,179,34,114,39,213,244,141,135,162,179,145,253,205,33,219,142,165,100,140,106,222,106,143,69,99,201,136,61,217,\r
- 21,13,37,101,240,57,187,76,15,166,63,161,243,171,207,145,191,51,60,61,170,11,132,81,164,234,28,69,6,35,147,118,40,53,147,8,243,182,226,35,160,25,221,155,196,54,15,37,6,195,7,102,194,246,24,114,138,178,115,212,227,106,178,76,61,209,104,120,50,20,85,139,\r
- 181,117,110,44,28,87,46,81,123,142,50,137,201,153,105,204,80,86,169,226,236,82,8,194,147,106,106,23,140,187,98,131,51,99,83,202,127,178,234,249,178,138,244,143,238,147,49,176,42,203,54,24,30,155,73,192,109,206,83,101,16,49,215,158,100,191,93,176,37,194,\r
- 19,81,180,131,110,204,198,212,81,17,12,37,38,195,217,189,93,122,142,226,170,107,157,84,170,242,102,82,145,104,243,230,68,34,52,207,174,210,73,133,89,102,182,144,247,12,67,39,89,242,152,246,100,123,38,137,33,242,12,109,221,61,200,231,121,87,127,247,214,\r
- 133,212,174,205,59,183,146,49,212,67,142,161,30,124,65,237,37,231,80,111,207,182,109,189,100,65,114,70,47,103,152,67,189,210,194,39,237,80,239,48,10,178,194,167,237,144,52,245,13,35,183,111,24,103,241,208,48,90,24,150,173,137,97,50,161,145,133,143,62,\r
- 86,251,200,49,220,203,186,5,129,243,123,152,173,56,183,157,195,125,210,236,96,9,251,8,46,13,35,61,228,27,57,219,91,138,71,206,177,88,110,21,222,106,3,129,64,70,111,201,210,91,179,244,182,44,125,77,150,190,54,75,95,151,165,175,207,210,219,161,231,41,125,\r
- 91,52,52,153,164,252,69,113,149,74,66,231,136,223,228,12,201,192,198,53,89,246,133,70,195,81,202,9,233,251,6,45,9,141,143,159,251,52,161,220,144,118,242,36,137,81,42,226,99,116,203,76,42,21,179,7,18,120,76,120,156,156,163,49,36,167,33,229,41,77,206,49,\r
- 121,193,32,215,152,60,253,198,201,129,139,76,40,65,121,99,28,241,98,56,246,55,167,56,145,185,42,80,129,76,4,19,33,59,57,17,75,76,83,25,162,75,83,86,148,105,82,81,134,242,249,122,131,123,67,82,182,130,7,168,91,14,30,16,155,65,122,217,88,34,28,74,157,29,\r
- 101,57,250,147,53,30,153,152,32,215,120,76,94,8,72,132,201,17,230,243,155,252,19,184,70,156,179,78,114,203,124,144,155,207,229,18,242,60,39,199,132,20,158,137,133,211,125,156,242,100,138,35,100,207,56,21,76,112,251,193,200,116,120,87,200,142,37,105,25,\r
- 54,220,162,214,183,101,21,174,60,51,115,209,181,51,87,230,202,101,43,204,168,59,67,201,253,120,102,41,27,22,238,128,250,190,71,249,48,115,176,195,194,134,19,73,202,225,36,251,44,185,89,211,133,60,28,3,120,236,220,75,249,148,237,225,200,228,84,138,138,\r
- 161,202,211,45,187,143,121,210,152,76,133,16,59,101,137,62,29,76,250,237,65,76,120,216,150,237,33,104,132,6,17,132,85,123,42,132,200,94,203,165,66,212,150,43,228,89,48,160,101,23,82,187,67,7,175,72,43,123,229,179,118,199,98,41,126,52,121,145,24,156,135,\r
- 23,78,15,34,132,68,240,244,2,88,246,216,17,246,35,30,164,236,205,153,151,27,57,5,67,145,204,118,224,58,151,99,253,98,7,131,177,253,232,108,101,38,45,11,69,195,56,7,227,209,208,188,114,11,11,185,87,200,207,189,36,166,168,2,43,12,151,94,180,68,219,99,252,\r
- 148,66,157,19,143,15,132,102,120,23,120,51,134,221,225,36,246,75,198,178,37,179,97,40,95,89,186,181,15,234,36,14,228,238,216,65,108,205,76,114,79,156,74,50,9,121,88,111,143,140,143,163,243,250,169,59,99,120,164,172,179,200,144,8,77,166,219,148,6,52,163,\r
- 219,148,151,109,42,214,137,112,130,119,153,246,172,156,169,80,82,249,118,249,20,188,110,48,54,161,93,32,17,155,86,243,132,34,168,45,119,130,53,21,67,192,23,17,114,195,115,250,229,25,146,36,51,50,61,77,133,252,234,22,9,69,187,66,241,228,78,172,15,229,\r
- 107,195,96,56,186,213,30,207,228,35,9,55,73,96,83,201,43,85,112,62,30,38,143,84,175,82,215,43,202,193,195,134,66,209,25,4,146,8,14,174,253,97,60,44,153,113,192,156,72,178,63,30,194,73,78,75,34,201,96,12,39,233,214,185,56,130,135,244,200,173,118,8,11,\r
- 58,142,182,147,122,113,201,181,63,60,223,197,253,41,223,127,158,119,184,252,116,198,224,20,207,168,35,42,67,99,62,92,34,156,224,238,237,194,29,136,172,104,120,34,69,206,104,216,158,76,77,145,83,119,85,216,100,217,188,146,46,59,124,112,23,43,57,118,58,\r
- 222,120,236,236,173,236,140,141,114,224,34,43,22,29,159,146,159,7,169,40,102,167,223,247,186,100,224,26,167,226,5,83,119,56,153,74,196,230,217,143,22,140,218,215,178,106,166,157,109,217,130,105,48,52,27,78,207,151,218,146,89,229,229,228,47,110,98,48,\r
- 21,139,199,97,42,71,24,145,253,56,227,50,140,206,219,240,173,131,148,31,203,126,171,161,130,216,162,3,131,60,49,91,238,13,25,90,40,55,102,167,29,59,95,170,59,103,162,169,72,156,151,68,38,225,156,57,124,14,201,170,40,49,24,121,107,56,29,80,209,146,90,\r
- 90,217,146,51,166,22,220,165,228,85,168,55,131,35,36,133,248,230,136,75,199,118,199,67,9,148,148,81,35,63,190,200,189,29,113,121,84,84,197,99,241,153,232,121,15,135,162,56,252,122,209,155,34,137,4,185,18,234,37,156,106,18,225,73,118,151,196,249,223,207,\r
- 185,48,78,185,36,92,64,43,87,81,101,34,60,141,9,81,147,212,111,159,113,174,58,18,50,230,154,201,112,138,10,146,28,157,51,47,204,228,65,90,78,53,251,51,149,103,167,122,212,212,200,61,198,213,178,222,70,100,181,190,180,223,82,5,82,231,124,15,165,210,100,\r
- 58,178,238,137,100,133,202,101,231,52,243,107,64,8,7,118,82,197,90,233,230,249,201,69,49,214,157,78,70,85,159,46,143,68,163,187,98,41,233,52,158,36,182,85,58,140,161,34,82,153,24,131,194,236,142,170,95,184,190,34,27,190,184,144,172,72,170,222,244,44,\r
- 60,75,143,212,146,7,153,149,154,138,36,201,201,159,181,1,45,91,96,229,99,205,68,75,80,121,34,114,102,82,19,237,242,192,16,179,228,152,149,177,197,37,69,255,4,89,252,126,71,133,252,153,237,130,185,108,8,198,246,96,65,189,179,103,29,49,179,145,68,106,38,\r
- 20,213,39,164,123,118,97,42,196,65,18,115,100,204,5,64,11,104,5,109,96,13,137,121,122,208,50,232,99,134,171,96,184,145,30,182,196,39,12,87,149,145,247,180,49,87,181,207,164,231,197,210,159,236,160,39,44,227,253,6,236,5,244,29,75,188,79,184,170,30,55,\r
- 222,90,245,91,147,238,20,141,141,183,58,136,126,98,153,159,48,174,251,43,225,42,120,116,5,189,108,8,66,91,27,232,53,131,92,171,71,76,227,6,35,255,157,166,56,45,74,155,230,94,53,233,61,194,216,183,65,20,21,69,54,24,201,42,7,109,16,121,78,52,96,168,30,\r
- 24,235,246,26,59,14,54,210,191,27,226,126,126,220,153,242,20,154,44,120,128,94,84,98,163,121,179,120,93,124,67,184,86,27,207,81,167,241,71,113,208,120,74,28,156,51,190,115,205,115,71,132,225,112,111,110,220,208,180,97,195,37,35,38,29,21,238,107,77,113,\r
- 147,104,223,112,111,181,105,62,39,218,68,121,105,96,185,105,252,88,24,162,168,194,97,204,25,253,232,139,67,56,76,167,219,184,232,132,195,237,36,167,112,26,78,179,161,193,152,93,237,48,26,140,228,106,106,87,125,104,55,238,55,62,45,21,139,149,207,24,159,\r
- 93,108,205,40,142,116,246,3,156,188,147,251,252,174,74,154,135,216,65,175,152,198,125,198,131,108,191,73,136,227,152,184,163,75,71,232,55,22,242,232,118,158,62,250,165,201,159,119,88,198,97,113,35,178,233,152,37,14,179,252,163,41,37,26,186,71,89,254,\r
- 166,146,222,157,41,117,151,46,117,68,203,15,153,226,13,44,215,142,29,141,195,59,134,155,232,122,33,142,168,202,143,152,198,61,198,99,92,125,89,35,189,42,196,109,80,143,136,178,66,63,157,48,140,31,112,178,234,70,163,180,202,152,174,50,10,59,155,118,132,\r
- 141,153,222,43,141,249,94,250,134,97,254,64,220,34,243,141,162,119,24,137,170,219,70,246,29,49,29,168,212,28,190,148,30,209,117,11,110,244,87,222,70,95,52,29,239,20,207,138,187,141,119,25,239,224,206,220,111,90,159,50,190,40,78,137,159,35,181,241,198,\r
- 97,250,168,122,238,141,198,215,169,202,120,232,186,170,29,102,238,117,70,159,233,250,144,97,26,143,210,94,99,211,106,81,92,24,80,120,251,204,188,147,194,216,184,193,244,28,54,58,54,10,97,186,31,23,70,163,168,204,191,212,225,118,120,90,28,121,251,156,\r
- 238,38,81,92,102,92,211,185,193,233,217,40,170,74,217,190,216,104,108,19,85,5,244,164,41,62,137,153,247,155,226,184,209,38,124,101,134,103,53,198,185,194,164,247,138,192,114,7,73,165,105,165,131,78,6,26,232,113,83,252,7,247,253,63,77,113,3,100,164,146,\r
- 142,24,226,195,168,253,21,147,158,16,43,154,246,237,152,187,122,201,141,228,228,197,50,106,197,61,70,69,141,113,129,113,141,229,59,41,202,139,141,85,48,84,186,202,69,121,79,121,97,249,206,114,179,188,181,220,161,74,85,203,82,6,74,13,100,202,151,24,23,\r
- 114,121,81,225,87,138,81,177,162,162,218,89,126,211,122,167,88,177,222,37,44,81,110,144,33,44,247,205,126,225,171,59,124,200,122,106,121,189,120,105,185,16,79,173,16,226,5,112,202,143,108,225,49,196,205,254,198,67,135,172,7,170,155,196,247,171,201,116,\r
- 82,1,215,16,190,102,212,57,190,82,28,241,127,147,63,158,231,143,215,87,10,227,88,173,48,30,174,37,231,146,202,34,31,182,131,79,125,175,69,225,231,107,81,228,225,58,124,124,151,63,94,224,143,35,245,248,56,193,31,143,212,59,174,55,72,0,11,184,180,254,231,\r
- 80,2,220,96,131,248,81,189,16,71,27,132,248,40,120,184,193,20,127,104,40,23,55,95,132,52,248,38,120,14,188,2,78,172,22,226,187,224,20,120,29,220,220,40,196,243,224,246,38,148,3,119,53,99,55,5,132,56,214,34,172,167,192,243,45,200,107,117,136,231,214,97,\r
- 138,214,27,226,80,187,33,78,180,59,73,80,249,18,145,249,62,200,19,211,81,148,245,123,156,180,76,255,95,26,255,14,33,253,191,105,252,187,133,244,255,167,169,191,177,85,255,163,198,191,87,72,255,159,154,147,22,254,87,205,244,42,157,127,207,36,252,234,255,\r
- 47,6,160,59,253,170,62,255,157,162,240,42,59,255,109,162,225,87,207,229,255,109,51,117,121,254,251,63,203,175,126,119,196,127,39,232,240,171,254,241,223,22,242,31,55,114,251,242,111,29,189,202,206,255,83,247,63,73,81,207,80,140,55,0,0,0,0 };\r
+static const uint8 javaComponentPeerView[]\r
+{\r
+ 0x1f, 0x8b, 0x08, 0x08, 0x16, 0x5e, 0x87, 0x63, 0x00, 0x03, 0x63, 0x6c,\r
+ 0x61, 0x73, 0x73, 0x65, 0x73, 0x2e, 0x64, 0x65, 0x78, 0x00, 0xad, 0x7c,\r
+ 0x0b, 0x7c, 0x94, 0xd5, 0xb5, 0xef, 0xda, 0xdf, 0x3c, 0x33, 0x79, 0xcd,\r
+ 0x4c, 0x02, 0xe1, 0xcd, 0x24, 0xa0, 0xe4, 0x9d, 0x21, 0xbc, 0x12, 0x12,\r
+ 0x20, 0x21, 0x04, 0x4c, 0x08, 0x10, 0xc8, 0x10, 0x24, 0xa1, 0xca, 0x90,\r
+ 0x0c, 0x64, 0x64, 0x98, 0x19, 0x66, 0x26, 0x01, 0x7c, 0x15, 0x29, 0x0a,\r
+ 0xf5, 0x51, 0xb1, 0xda, 0x4a, 0xd5, 0xf6, 0x58, 0xaf, 0x2f, 0x3c, 0xea,\r
+ 0x41, 0xc5, 0xfa, 0xa8, 0xb6, 0xd6, 0xaa, 0xd5, 0xa3, 0xa7, 0xea, 0x39,\r
+ 0xf6, 0x96, 0xdb, 0x63, 0xab, 0x1e, 0xb5, 0xad, 0xad, 0x57, 0xed, 0xa9,\r
+ 0xad, 0x7a, 0x8f, 0x3d, 0xde, 0xff, 0xda, 0x7b, 0xcf, 0xe4, 0x1b, 0x12,\r
+ 0xd4, 0xde, 0xdf, 0x4d, 0xf8, 0x7f, 0x6b, 0xed, 0xb5, 0xd6, 0x7e, 0xaf,\r
+ 0xbd, 0xf6, 0xde, 0xdf, 0x84, 0x19, 0x0c, 0xed, 0x75, 0xf9, 0xe7, 0x2d,\r
+ 0xa0, 0xee, 0xef, 0xbf, 0xfb, 0xe4, 0x77, 0xef, 0x38, 0xfe, 0xef, 0xe7,\r
+ 0xdc, 0x31, 0xe9, 0xf1, 0x87, 0x7e, 0x3c, 0xf2, 0xe2, 0x88, 0x38, 0x74,\r
+ 0xe6, 0xbc, 0x07, 0xde, 0xff, 0xaa, 0xbf, 0x8b, 0x28, 0x4e, 0x44, 0x7b,\r
+ 0x7b, 0xe7, 0x7b, 0x49, 0xff, 0x44, 0x56, 0x13, 0x85, 0x84, 0x92, 0xaf,\r
+ 0x04, 0xac, 0x76, 0xa2, 0x21, 0xd0, 0x69, 0x0e, 0xa2, 0x59, 0xa0, 0x9f,\r
+ 0xe6, 0x12, 0xfd, 0x1c, 0xb4, 0x38, 0x9f, 0x08, 0x22, 0x3a, 0x58, 0x44,\r
+ 0xf4, 0xc2, 0x22, 0xa2, 0xc1, 0x62, 0x22, 0x5f, 0x2d, 0x51, 0x19, 0x70,\r
+ 0x06, 0x50, 0x0e, 0x54, 0x01, 0xb5, 0x40, 0x3d, 0xb0, 0x00, 0x58, 0x02,\r
+ 0xb4, 0x02, 0xab, 0x80, 0x75, 0xc0, 0x39, 0xc0, 0x08, 0x70, 0x00, 0xb8,\r
+ 0x14, 0xf8, 0x3a, 0x70, 0x25, 0x70, 0x04, 0xb8, 0x0e, 0xf8, 0x0e, 0xf0,\r
+ 0x5d, 0xe0, 0x16, 0xe0, 0x76, 0xe0, 0x18, 0x70, 0x0f, 0x70, 0x1f, 0xf0,\r
+ 0x12, 0xf0, 0x0e, 0xf0, 0x2e, 0xf0, 0x01, 0xf0, 0x17, 0xe0, 0x13, 0xe0,\r
+ 0x33, 0xc0, 0x52, 0x47, 0xe4, 0x04, 0xf2, 0x01, 0x2f, 0x50, 0x09, 0x6c,\r
+ 0x05, 0x2e, 0x00, 0xbe, 0x0d, 0xdc, 0x07, 0xbc, 0x0c, 0xfc, 0x09, 0x98,\r
+ 0xe6, 0x27, 0x5a, 0x08, 0x74, 0x03, 0x61, 0xe0, 0x52, 0xe0, 0x06, 0xe0,\r
+ 0x38, 0xf0, 0x1c, 0xf0, 0x26, 0xf0, 0x19, 0x30, 0x79, 0x2e, 0x51, 0x0b,\r
+ 0xb0, 0x05, 0xd8, 0x0d, 0x5c, 0x06, 0xdc, 0x0f, 0xbc, 0x04, 0xbc, 0x03,\r
+ 0xd8, 0xea, 0x89, 0xfc, 0x40, 0x3b, 0x70, 0x2e, 0x70, 0x3d, 0xf0, 0x30,\r
+ 0xf0, 0x47, 0x60, 0xe6, 0x3c, 0xa2, 0x4d, 0xc0, 0x21, 0xe0, 0x5e, 0xe0,\r
+ 0x57, 0x40, 0xce, 0x7c, 0xa2, 0xc5, 0xc0, 0x10, 0x70, 0x0c, 0xf8, 0x13,\r
+ 0x50, 0xbd, 0x00, 0x79, 0x81, 0x03, 0xc0, 0xed, 0xc0, 0x33, 0xc0, 0x3b,\r
+ 0x80, 0x73, 0x21, 0xc6, 0x15, 0x58, 0x00, 0x6c, 0x06, 0xbe, 0x0a, 0x5c,\r
+ 0x07, 0x3c, 0x04, 0x3c, 0x0f, 0xfc, 0x01, 0xf8, 0x6f, 0xa0, 0x06, 0xf3,\r
+ 0xd0, 0x01, 0x6c, 0x05, 0x12, 0xc0, 0x41, 0xe0, 0x2a, 0xe0, 0x5a, 0xe0,\r
+ 0x56, 0xe0, 0x7e, 0xe0, 0x41, 0xe0, 0x11, 0xe0, 0x47, 0xc0, 0x53, 0xc0,\r
+ 0xf3, 0xc0, 0x8b, 0xc0, 0x2f, 0x81, 0x5f, 0x03, 0x6f, 0x01, 0xef, 0x00,\r
+ 0xef, 0x01, 0x1f, 0x02, 0x9f, 0x00, 0x7f, 0x03, 0x8c, 0x06, 0xb4, 0x03,\r
+ 0x28, 0x04, 0x8a, 0x81, 0xc9, 0x80, 0x0f, 0xa8, 0x00, 0xea, 0x80, 0xf9,\r
+ 0xc0, 0x62, 0xa0, 0x05, 0x58, 0x01, 0x74, 0x01, 0xeb, 0x80, 0x00, 0xd0,\r
+ 0x07, 0x9c, 0x0b, 0x0c, 0x00, 0xe7, 0x01, 0x71, 0x20, 0x05, 0xec, 0x03,\r
+ 0x2e, 0x01, 0x0e, 0x03, 0x57, 0x02, 0x47, 0x80, 0x5b, 0x81, 0x47, 0x80,\r
+ 0xa7, 0x81, 0x97, 0x81, 0xdf, 0x00, 0x7f, 0x04, 0x3e, 0x06, 0x6c, 0x8d,\r
+ 0x98, 0x4f, 0x60, 0x26, 0x50, 0x0d, 0x34, 0x02, 0x2b, 0x81, 0x1e, 0xe0,\r
+ 0x5c, 0x60, 0x27, 0xb0, 0x07, 0xf8, 0x1a, 0x70, 0x35, 0x70, 0x23, 0x70,\r
+ 0x07, 0xf0, 0x00, 0xf0, 0x04, 0xf0, 0x22, 0xf0, 0x36, 0xf0, 0x9f, 0xc0,\r
+ 0x47, 0x5c, 0xd6, 0x62, 0xa2, 0xd9, 0xc0, 0x22, 0xa0, 0x13, 0xd8, 0x00,\r
+ 0xf4, 0x01, 0x11, 0xe0, 0x02, 0xe0, 0x00, 0x70, 0x2d, 0x70, 0x37, 0xf0,\r
+ 0x08, 0xf0, 0x1c, 0x70, 0x12, 0x78, 0x0f, 0xc8, 0x6d, 0xc2, 0x38, 0x00,\r
+ 0x33, 0x80, 0x72, 0xa0, 0x13, 0xd8, 0x08, 0x0c, 0x00, 0xfb, 0x81, 0xef,\r
+ 0x01, 0xc7, 0x80, 0x47, 0x81, 0x97, 0x81, 0x37, 0x81, 0x4f, 0x00, 0x67,\r
+ 0x33, 0xea, 0x05, 0xe6, 0x00, 0x4b, 0x81, 0x4e, 0x60, 0x13, 0x10, 0x02,\r
+ 0xf6, 0x03, 0xb7, 0x00, 0xf7, 0x00, 0xcf, 0x02, 0x6f, 0x00, 0x7f, 0x05,\r
+ 0xf2, 0x97, 0x60, 0xee, 0x81, 0xe5, 0x40, 0x0f, 0x30, 0x04, 0x8c, 0x00,\r
+ 0x97, 0x00, 0xdf, 0x04, 0x6e, 0x06, 0x8e, 0x01, 0xf7, 0x03, 0x3f, 0x06,\r
+ 0x5e, 0x02, 0xde, 0x04, 0xfe, 0x02, 0xd8, 0x96, 0x12, 0x95, 0x00, 0xd5,\r
+ 0x40, 0x33, 0xb0, 0x1e, 0xd8, 0x0a, 0xc4, 0x81, 0x6f, 0x00, 0xd7, 0x01,\r
+ 0x37, 0x00, 0x27, 0x80, 0xa7, 0x81, 0x5f, 0x02, 0xef, 0x00, 0x1f, 0x03,\r
+ 0x8e, 0x65, 0xe8, 0x23, 0x50, 0x09, 0x34, 0x01, 0x5d, 0x40, 0x3f, 0x30,\r
+ 0x04, 0x5c, 0x04, 0x5c, 0x01, 0xdc, 0x0a, 0xdc, 0x0b, 0x9c, 0x00, 0x9e,\r
+ 0x00, 0x5e, 0x06, 0x5e, 0x07, 0xfe, 0x04, 0x7c, 0x0a, 0xb8, 0x5a, 0x88,\r
+ 0xa6, 0x03, 0x73, 0x80, 0x3a, 0xa0, 0x09, 0x68, 0x07, 0xce, 0x06, 0x92,\r
+ 0xc0, 0xc5, 0xc0, 0xf5, 0xc0, 0xed, 0xc0, 0x3d, 0xc0, 0x83, 0xc0, 0x0f,\r
+ 0x81, 0xe7, 0x80, 0x97, 0x81, 0xb7, 0x81, 0x8f, 0x81, 0xfc, 0x56, 0xcc,\r
+ 0x3b, 0x50, 0x0f, 0xac, 0x03, 0xb6, 0x01, 0xc3, 0xc0, 0x37, 0x80, 0x6f,\r
+ 0x03, 0xb7, 0x01, 0x0f, 0x02, 0x3f, 0x05, 0x7e, 0x0e, 0xfc, 0x1a, 0xf8,\r
+ 0x2d, 0xf0, 0x01, 0xf0, 0x19, 0x90, 0xb7, 0x9c, 0x68, 0x2a, 0x50, 0x09,\r
+ 0x34, 0x02, 0xab, 0x80, 0x75, 0x40, 0x2f, 0x10, 0x02, 0x0e, 0x02, 0xd7,\r
+ 0x03, 0x37, 0x03, 0x4f, 0x01, 0xff, 0x01, 0xbc, 0x07, 0x7c, 0x0a, 0x88,\r
+ 0x36, 0x22, 0x0f, 0x30, 0x13, 0x68, 0x00, 0xd6, 0x02, 0x5b, 0x80, 0x11,\r
+ 0xe0, 0x20, 0x70, 0x15, 0x70, 0x2b, 0xf0, 0x13, 0xe0, 0x57, 0xc0, 0xef,\r
+ 0x80, 0xbf, 0x02, 0xc6, 0x0a, 0xcc, 0x35, 0xe0, 0x03, 0xea, 0x80, 0x65,\r
+ 0xc0, 0x5a, 0xa0, 0x1f, 0xd8, 0x0e, 0x44, 0x81, 0xab, 0x81, 0x13, 0xc0,\r
+ 0x6f, 0x00, 0x7b, 0x3b, 0xd1, 0x99, 0x40, 0x3b, 0xb0, 0x1d, 0x38, 0x0c,\r
+ 0xdc, 0x05, 0xbc, 0x08, 0x7c, 0x04, 0x7c, 0x06, 0x38, 0x10, 0x94, 0x3d,\r
+ 0xc0, 0x44, 0xa0, 0x11, 0x18, 0x04, 0x0e, 0x02, 0x77, 0x00, 0xf7, 0x02,\r
+ 0x0f, 0x01, 0x8f, 0x03, 0x3f, 0x07, 0x5e, 0x07, 0x0a, 0x10, 0xa3, 0xdd,\r
+ 0x40, 0x09, 0x70, 0x06, 0x70, 0x26, 0x30, 0x07, 0x28, 0x07, 0x2a, 0x80,\r
+ 0x4a, 0xa0, 0x0a, 0xa8, 0x06, 0x6a, 0x00, 0x84, 0x4f, 0x42, 0x58, 0x24,\r
+ 0x84, 0x3c, 0x42, 0x58, 0x23, 0x84, 0x2f, 0x42, 0xb8, 0x22, 0x84, 0x27,\r
+ 0x42, 0x28, 0x22, 0x84, 0x19, 0x42, 0x38, 0x20, 0x2c, 0x47, 0xc2, 0x12,\r
+ 0x22, 0xb8, 0x34, 0xc1, 0x45, 0x09, 0xae, 0x46, 0x70, 0x19, 0xc2, 0x94,\r
+ 0x13, 0xa6, 0x8b, 0x30, 0xe4, 0x84, 0xa1, 0x23, 0x0c, 0x03, 0xa1, 0x6b,\r
+ 0xd4, 0xae, 0xf7, 0x93, 0x55, 0xc0, 0x59, 0x40, 0x07, 0xd0, 0x09, 0x60,\r
+ 0xbb, 0x21, 0x6c, 0x43, 0xb4, 0x06, 0x58, 0x0b, 0xac, 0x03, 0xba, 0x81,\r
+ 0xf5, 0xc0, 0x06, 0xa0, 0x07, 0x08, 0x00, 0x1b, 0x81, 0x5e, 0x60, 0x13,\r
+ 0x70, 0x36, 0xb0, 0x19, 0xe8, 0x03, 0xfa, 0x81, 0x2d, 0xc0, 0x57, 0x80,\r
+ 0x73, 0x80, 0x73, 0x81, 0xad, 0x40, 0x10, 0xd8, 0x46, 0x6a, 0xef, 0xfa,\r
+ 0x1a, 0xf0, 0x0d, 0xe0, 0x6a, 0xe0, 0x08, 0x70, 0x0d, 0xa9, 0x71, 0x49,\r
+ 0xff, 0x14, 0x6a, 0x7a, 0xa2, 0x4a, 0x8d, 0x95, 0xd0, 0x69, 0xaf, 0xe6,\r
+ 0x59, 0x5e, 0xa4, 0xf9, 0xc7, 0xc0, 0x17, 0x6b, 0xfe, 0x29, 0xf0, 0x13,\r
+ 0x34, 0xff, 0x02, 0xf8, 0x89, 0x9a, 0x7f, 0xc5, 0xc4, 0xbf, 0x6a, 0xe2,\r
+ 0xdf, 0xaa, 0x52, 0xf3, 0x60, 0xe8, 0xf2, 0x27, 0x69, 0x9e, 0xcb, 0x99,\r
+ 0xac, 0xf9, 0x77, 0xc1, 0x4f, 0x03, 0xb5, 0x6b, 0x9b, 0x52, 0xc0, 0x09,\r
+ 0x7c, 0xa8, 0xe5, 0x6e, 0x2d, 0x67, 0xde, 0x63, 0xe2, 0x27, 0x9b, 0xf8,\r
+ 0xe9, 0x26, 0xde, 0xa7, 0x79, 0x96, 0x95, 0xe9, 0xbe, 0x94, 0x69, 0xfe,\r
+ 0x53, 0x5d, 0xe6, 0x2c, 0x53, 0x5d, 0xec, 0x1f, 0xd6, 0x6a, 0x25, 0x9f,\r
+ 0xa3, 0xe5, 0x33, 0x49, 0xf9, 0x06, 0xb7, 0x93, 0x6d, 0xd8, 0x47, 0xf2,\r
+ 0x60, 0x33, 0x83, 0x94, 0x6f, 0x3c, 0xa6, 0xcb, 0x99, 0x6f, 0xaa, 0x6b,\r
+ 0x91, 0xae, 0x6b, 0xa6, 0xe6, 0x39, 0xef, 0x2c, 0xcd, 0x17, 0x23, 0xef,\r
+ 0x6c, 0x52, 0xfe, 0x33, 0xad, 0x5a, 0x95, 0xc9, 0xfc, 0x6c, 0x5d, 0x6f,\r
+ 0x93, 0x2e, 0x67, 0x86, 0xe6, 0xb9, 0x7c, 0x9f, 0xe6, 0xab, 0x75, 0x5e,\r
+ 0xf6, 0xb7, 0x06, 0x9d, 0x57, 0xfa, 0x5c, 0xb5, 0xea, 0x13, 0xf3, 0x67,\r
+ 0x55, 0xab, 0x79, 0x6f, 0xd1, 0xe5, 0x84, 0x35, 0xcf, 0xed, 0x39, 0x4f,\r
+ 0xf3, 0x5c, 0xe6, 0x4e, 0xcd, 0x77, 0xc3, 0x3e, 0xa2, 0xf9, 0x2d, 0xe0,\r
+ 0x77, 0x69, 0x9e, 0xdb, 0x1c, 0xd5, 0xfc, 0x10, 0xe4, 0x31, 0xcd, 0x73,\r
+ 0x1b, 0xe2, 0x9a, 0xdf, 0x0b, 0x7e, 0xb7, 0xe6, 0x0f, 0x82, 0x4f, 0x6a,\r
+ 0xfe, 0x4a, 0xf0, 0x09, 0xcd, 0x1f, 0x35, 0xf1, 0x37, 0x83, 0x4f, 0x69,\r
+ 0xfe, 0x4e, 0xf0, 0xc3, 0x9a, 0x3f, 0x0e, 0xfe, 0x7c, 0xcd, 0x3f, 0x6c,\r
+ 0x92, 0x3f, 0x61, 0xe2, 0x9f, 0x05, 0xff, 0x55, 0xcd, 0xbf, 0x64, 0x92,\r
+ 0xbf, 0x6a, 0xe2, 0xdf, 0x32, 0xf1, 0xef, 0x9a, 0xf8, 0x16, 0x53, 0xf9,\r
+ 0x1f, 0x82, 0xdf, 0xa3, 0xf9, 0x4f, 0xc1, 0x5f, 0xa0, 0x79, 0x27, 0x26,\r
+ 0xf9, 0x42, 0xcd, 0x17, 0xd7, 0x8c, 0xe6, 0x9d, 0x6d, 0xe2, 0xab, 0x4d,\r
+ 0xfc, 0x7c, 0xf0, 0x23, 0xe9, 0x72, 0x30, 0x56, 0x17, 0x6b, 0xbe, 0xd9,\r
+ 0x64, 0x73, 0x73, 0xd5, 0x28, 0xcf, 0x3e, 0xb3, 0x2f, 0x5d, 0x3e, 0xf8,\r
+ 0x8b, 0x34, 0xbf, 0xa2, 0x66, 0xb4, 0x6d, 0xdd, 0xe0, 0xf7, 0x6b, 0xfe,\r
+ 0x6c, 0x53, 0x39, 0xbc, 0x76, 0xf6, 0x6a, 0x7e, 0xd0, 0x24, 0x8f, 0xd7,\r
+ 0x8c, 0xca, 0xf7, 0x9a, 0xca, 0x39, 0x68, 0x6e, 0xbf, 0x69, 0x1c, 0xae,\r
+ 0x84, 0xfc, 0x12, 0xcd, 0x5f, 0x07, 0xfe, 0x80, 0xe6, 0x6f, 0x32, 0xd9,\r
+ 0xdf, 0x6d, 0xe2, 0x4f, 0xd4, 0xa8, 0xf8, 0xc1, 0xf1, 0x8c, 0x7f, 0x0e,\r
+ 0x6a, 0x9e, 0xfd, 0xe7, 0xd2, 0x34, 0x5f, 0x33, 0xca, 0x3f, 0x0b, 0xfe,\r
+ 0x32, 0xcd, 0xbf, 0x02, 0xfe, 0x90, 0xe6, 0xd9, 0x97, 0x0e, 0x6b, 0xfe,\r
+ 0x55, 0xc8, 0xbf, 0xae, 0xf9, 0xdf, 0x83, 0xbf, 0x42, 0xf3, 0x1f, 0x82,\r
+ 0xbf, 0x5c, 0xf3, 0x9f, 0x9a, 0xe4, 0x3c, 0xb6, 0x57, 0x6a, 0xde, 0x8a,\r
+ 0xc5, 0x77, 0x95, 0xe6, 0x8b, 0x6b, 0x47, 0xed, 0xe3, 0xa6, 0xbc, 0xdc,\r
+ 0xdf, 0x7c, 0x44, 0x9c, 0x7f, 0x22, 0x45, 0xfb, 0x04, 0xc7, 0x3b, 0x41,\r
+ 0x83, 0xc4, 0x7b, 0xc0, 0x3c, 0x3a, 0xa6, 0xe9, 0xdf, 0x24, 0x15, 0xf4,\r
+ 0x99, 0xa6, 0xfc, 0x8f, 0xa9, 0xd0, 0xd4, 0xd0, 0xd4, 0x22, 0x94, 0x7d,\r
+ 0xa1, 0xe0, 0x7d, 0xa3, 0x89, 0x1e, 0x21, 0xa6, 0x1e, 0x7a, 0x4c, 0xd2,\r
+ 0x1a, 0x5a, 0x2d, 0xe5, 0xb5, 0x14, 0x14, 0xbc, 0xa7, 0x78, 0xe8, 0x38,\r
+ 0x31, 0x2d, 0xa7, 0xfb, 0x25, 0x55, 0xfa, 0x0a, 0xad, 0xaf, 0x04, 0xdd,\r
+ 0xa4, 0x29, 0xa7, 0xab, 0xd0, 0xe2, 0x02, 0x49, 0xab, 0xe9, 0x6c, 0xc1,\r
+ 0xfb, 0x90, 0xd2, 0x57, 0x6b, 0x7d, 0x35, 0x34, 0x03, 0x82, 0xe3, 0x8f,\r
+ 0x41, 0xff, 0x4d, 0x1c, 0x7b, 0x4a, 0xe9, 0x4e, 0x49, 0x2b, 0xe8, 0x3e,\r
+ 0x49, 0xd3, 0xf2, 0x6a, 0xca, 0x17, 0x4c, 0x2b, 0xc9, 0x2b, 0x69, 0x2b,\r
+ 0x55, 0x49, 0x9a, 0x4b, 0xd5, 0x82, 0xe3, 0xce, 0x7c, 0x0a, 0xc1, 0xce,\r
+ 0x86, 0x9d, 0x6b, 0xae, 0xe0, 0xf8, 0x9a, 0x4f, 0x4f, 0x13, 0xd3, 0x52,\r
+ 0x7a, 0x13, 0x34, 0x07, 0xed, 0x75, 0x48, 0xba, 0x89, 0x16, 0x40, 0xef,\r
+ 0xc2, 0xae, 0xc6, 0xe9, 0x5c, 0x2d, 0xcf, 0xc5, 0x08, 0x2e, 0x14, 0x3c,\r
+ 0x9e, 0x2a, 0xed, 0x41, 0xbd, 0x6e, 0xc1, 0xb4, 0x9b, 0xe6, 0x49, 0xba,\r
+ 0x9e, 0x96, 0x08, 0xde, 0x33, 0x72, 0xe8, 0x0d, 0x52, 0xf4, 0x3f, 0x24,\r
+ 0x6d, 0xa1, 0x66, 0xc1, 0xfb, 0xc4, 0x5a, 0x99, 0xaf, 0x04, 0xbb, 0x1a,\r
+ 0xd3, 0xc9, 0xc8, 0xf1, 0x4b, 0x49, 0xdb, 0xa8, 0x0e, 0xfa, 0x29, 0x68,\r
+ 0x37, 0xcb, 0xa7, 0xa0, 0xdc, 0x9f, 0x4a, 0x5a, 0x46, 0xcf, 0xea, 0xf4,\r
+ 0xaf, 0x34, 0xfd, 0x1d, 0xe8, 0x54, 0xad, 0x67, 0xfa, 0x94, 0xa4, 0x2e,\r
+ 0x79, 0x1f, 0xe3, 0xf4, 0xab, 0x92, 0x5a, 0xe8, 0xd7, 0x92, 0xe2, 0x4c,\r
+ 0xa1, 0xe9, 0x6b, 0x92, 0x0a, 0x7a, 0x57, 0xd3, 0xff, 0x4d, 0x1c, 0xa3,\r
+ 0x0d, 0x7a, 0x59, 0xd2, 0x25, 0xf4, 0x47, 0xe2, 0x58, 0xdb, 0x28, 0xeb,\r
+ 0x9f, 0x81, 0x9d, 0xb4, 0x54, 0x30, 0xdd, 0x42, 0x65, 0x92, 0x56, 0xd3,\r
+ 0x19, 0x82, 0xe3, 0xef, 0x59, 0xf4, 0x8f, 0xa4, 0x68, 0xbd, 0xe0, 0xb8,\r
+ 0xbb, 0x99, 0x72, 0x05, 0xc7, 0xdc, 0x95, 0x32, 0x5f, 0x19, 0x7a, 0x58,\r
+ 0x24, 0xd3, 0xe5, 0xe4, 0x17, 0x1c, 0xeb, 0xd5, 0x38, 0xcd, 0xc6, 0x8e,\r
+ 0xaf, 0x68, 0x39, 0x9d, 0x90, 0xd4, 0x49, 0xff, 0xac, 0xe9, 0xf3, 0x92,\r
+ 0xba, 0xe9, 0x5f, 0x88, 0xf7, 0x9a, 0x20, 0x7d, 0x2a, 0x69, 0x3b, 0xcd,\r
+ 0x17, 0x4c, 0x07, 0x68, 0xa5, 0xf4, 0xab, 0xd5, 0x32, 0x7f, 0x39, 0x4e,\r
+ 0x17, 0x77, 0x4b, 0xba, 0x8e, 0xee, 0x95, 0xf4, 0x4c, 0xfa, 0xad, 0xa4,\r
+ 0xad, 0x74, 0xa6, 0xb4, 0x5b, 0x4e, 0x73, 0x84, 0x4a, 0x97, 0x0b, 0x65,\r
+ 0x57, 0x21, 0xe9, 0x32, 0xea, 0xd7, 0x74, 0x8b, 0xa6, 0x5f, 0xd1, 0xf4,\r
+ 0x1c, 0xe9, 0x97, 0x6b, 0x64, 0xf9, 0x15, 0xba, 0x7d, 0x15, 0xba, 0x3d,\r
+ 0x95, 0x38, 0x95, 0x38, 0x24, 0x2d, 0xa6, 0x47, 0x25, 0x9d, 0x43, 0x3f,\r
+ 0xd2, 0xe9, 0x1f, 0x4b, 0xda, 0x4f, 0x35, 0xd2, 0x6f, 0x3b, 0xa4, 0x5d,\r
+ 0x15, 0xf2, 0xcf, 0x94, 0xfe, 0xaa, 0xf2, 0x55, 0x43, 0xfe, 0x2d, 0x4d,\r
+ 0xbf, 0x2d, 0xe9, 0x14, 0xba, 0x5e, 0xd2, 0x72, 0x5a, 0x25, 0x14, 0x3d,\r
+ 0x4b, 0xfa, 0x75, 0x8d, 0xb4, 0x67, 0xff, 0x7e, 0x46, 0x52, 0x07, 0xfd,\r
+ 0x4c, 0xa7, 0xff, 0x55, 0xd3, 0x7f, 0xd3, 0xf4, 0xa4, 0xa4, 0xb3, 0xe8,\r
+ 0x2d, 0x9d, 0x7e, 0x5b, 0xd2, 0x1e, 0xb2, 0xc9, 0x72, 0x36, 0x93, 0x4b,\r
+ 0xd2, 0x4a, 0x6a, 0x94, 0x34, 0x40, 0x2d, 0xd2, 0xff, 0x17, 0xcb, 0xf2,\r
+ 0x6b, 0x71, 0x3a, 0xfa, 0xa6, 0xa4, 0x36, 0xba, 0x56, 0xd2, 0xf9, 0x74,\r
+ 0x9d, 0xa4, 0x79, 0x74, 0x54, 0xd2, 0x4e, 0xfa, 0x8e, 0xa4, 0x21, 0xba,\r
+ 0x41, 0xd2, 0x99, 0x74, 0xa3, 0xa6, 0x37, 0x49, 0x3a, 0x48, 0xdf, 0xd5,\r
+ 0xf9, 0xbf, 0x27, 0x69, 0x1d, 0xfd, 0x83, 0xa4, 0xb3, 0xe9, 0x66, 0x49,\r
+ 0xe7, 0xd1, 0xf7, 0xb5, 0xfe, 0x16, 0x4d, 0xff, 0x87, 0xa4, 0x76, 0xba,\r
+ 0x55, 0xa7, 0x6f, 0x93, 0xb4, 0x9c, 0xee, 0xd1, 0xf4, 0x01, 0x4d, 0x1f,\r
+ 0x94, 0xb4, 0x8f, 0x1e, 0x96, 0xb4, 0x86, 0x7e, 0x28, 0xe9, 0x02, 0x7a,\r
+ 0x42, 0xd2, 0x19, 0xf4, 0x13, 0x49, 0x27, 0xd2, 0x93, 0x92, 0xe6, 0xd3,\r
+ 0x0b, 0x92, 0x4e, 0xa6, 0x17, 0x49, 0xad, 0xef, 0x97, 0x74, 0x1c, 0x78,\r
+ 0x59, 0xdb, 0xbf, 0x22, 0xe9, 0x24, 0xfa, 0x85, 0xa4, 0x16, 0xfa, 0x9f,\r
+ 0x92, 0x9e, 0x4d, 0xff, 0x4b, 0x52, 0x2f, 0xbd, 0x2e, 0x69, 0x11, 0xfd,\r
+ 0x5e, 0xe7, 0x7b, 0x47, 0xd2, 0x42, 0xfa, 0x83, 0xa4, 0x6a, 0x3d, 0xd4,\r
+ 0xe2, 0xf7, 0x3d, 0xdd, 0x9e, 0xf7, 0x35, 0xfd, 0x40, 0xd3, 0x3f, 0x49,\r
+ 0x3a, 0x97, 0xfe, 0x53, 0x52, 0x3f, 0xfd, 0x59, 0x8f, 0xc7, 0x87, 0x5a,\r
+ 0xff, 0x17, 0x9d, 0xff, 0xaf, 0x9a, 0x7e, 0xa4, 0xe9, 0xc7, 0x92, 0xd6,\r
+ 0xd3, 0x27, 0x92, 0x9e, 0x4b, 0xff, 0x47, 0xf7, 0xff, 0xbf, 0x24, 0xdd,\r
+ 0x4c, 0x39, 0x42, 0xd1, 0x3c, 0x49, 0x17, 0xd1, 0x04, 0x49, 0x17, 0xd2,\r
+ 0x44, 0x4d, 0x4b, 0x34, 0x9d, 0xa4, 0xf5, 0x93, 0x75, 0x7a, 0x8a, 0xa6,\r
+ 0x53, 0x25, 0x2d, 0xa1, 0x69, 0x92, 0x36, 0xd1, 0x74, 0x49, 0x57, 0xd1,\r
+ 0x0c, 0x49, 0xb7, 0x91, 0x4f, 0x52, 0xb5, 0xbe, 0x6b, 0xf5, 0xfa, 0xe6,\r
+ 0xf4, 0x2c, 0x49, 0x7b, 0x69, 0xb6, 0x50, 0x71, 0xf4, 0x0c, 0x6d, 0x5f,\r
+ 0x29, 0xe9, 0x56, 0xaa, 0x95, 0x74, 0x23, 0x2d, 0xd2, 0xb4, 0x41, 0xd2,\r
+ 0x15, 0xd4, 0x24, 0x54, 0x1c, 0x5e, 0x26, 0x69, 0x0f, 0xb5, 0xea, 0xf4,\r
+ 0x72, 0x6d, 0xd7, 0xa6, 0xe9, 0x0a, 0x49, 0xab, 0xa8, 0x5d, 0x28, 0x3f,\r
+ 0xe8, 0x12, 0xca, 0x2f, 0xd6, 0xe8, 0xf4, 0x5a, 0x4d, 0xd7, 0x69, 0xda,\r
+ 0x2d, 0x94, 0x5f, 0xad, 0xd7, 0xe9, 0x0d, 0x42, 0xf9, 0x57, 0x8f, 0x50,\r
+ 0x7e, 0x1c, 0x10, 0x6a, 0xbc, 0x37, 0x0a, 0xe5, 0xc7, 0xbd, 0x42, 0x8d,\r
+ 0xfb, 0x36, 0xc1, 0xe7, 0xd1, 0xa9, 0xd4, 0x21, 0x69, 0x19, 0x6d, 0x16,\r
+ 0x7c, 0x26, 0x3d, 0x83, 0xfe, 0x9d, 0x98, 0x6e, 0x27, 0xa7, 0xdc, 0x07,\r
+ 0x0c, 0xb2, 0x4b, 0x3a, 0x9d, 0xb6, 0x0a, 0x3e, 0x77, 0xaa, 0x38, 0xd5,\r
+ 0x88, 0x93, 0xe7, 0x73, 0x92, 0xaa, 0x7c, 0x4d, 0xf0, 0x9b, 0x1f, 0x10,\r
+ 0x53, 0x2b, 0x3d, 0x24, 0xe9, 0x0e, 0x7a, 0x5c, 0x52, 0x15, 0xf7, 0x59,\r
+ 0x5e, 0x2c, 0xe9, 0x2c, 0xea, 0x14, 0x7c, 0x1e, 0xf5, 0x91, 0x43, 0xf0,\r
+ 0x1d, 0x48, 0x95, 0xb7, 0x14, 0xf5, 0xdd, 0x45, 0xea, 0x9e, 0xe5, 0x26,\r
+ 0x75, 0xbe, 0x3d, 0x8a, 0x7d, 0x3c, 0x0f, 0xf4, 0x55, 0x5c, 0x7c, 0x0a,\r
+ 0xf8, 0x12, 0x44, 0xea, 0x0e, 0xe6, 0x26, 0x75, 0xa6, 0xe5, 0x1f, 0xd6,\r
+ 0x7f, 0x08, 0x7d, 0x97, 0xd6, 0x57, 0x6a, 0xfd, 0x2c, 0x93, 0xde, 0x8a,\r
+ 0x4b, 0xd3, 0x76, 0xad, 0xaf, 0xd2, 0x72, 0x2e, 0xff, 0x66, 0x5d, 0xfe,\r
+ 0x34, 0xe8, 0x2f, 0xd5, 0xfa, 0x6a, 0x53, 0xfd, 0xe9, 0xfc, 0xd5, 0xd0,\r
+ 0x1f, 0xd5, 0x7a, 0x3e, 0xd7, 0x8b, 0x53, 0xf4, 0xcd, 0xd0, 0x3f, 0xa1,\r
+ 0xf5, 0x7c, 0xd6, 0xe7, 0x7b, 0x06, 0x9f, 0xc5, 0xef, 0xd4, 0xe5, 0x07,\r
+ 0xa0, 0xff, 0x58, 0xeb, 0xed, 0x7c, 0x3e, 0x00, 0x2d, 0xae, 0x50, 0x77,\r
+ 0xc5, 0xdd, 0xee, 0xb9, 0x98, 0x31, 0x17, 0xa8, 0x9f, 0xa9, 0x58, 0xcc,\r
+ 0x27, 0x06, 0x61, 0xa1, 0xf2, 0xd9, 0x51, 0xf7, 0x53, 0x90, 0xe4, 0xd9,\r
+ 0xca, 0x8c, 0xa5, 0x14, 0x77, 0xbf, 0x80, 0x71, 0x2c, 0xb3, 0x94, 0x90,\r
+ 0xd7, 0x1a, 0xf5, 0x3f, 0x83, 0x98, 0xcf, 0x39, 0x7e, 0x22, 0xeb, 0x97,\r
+ 0x69, 0xe1, 0xb2, 0x71, 0x9a, 0xed, 0xe3, 0x7e, 0x37, 0x59, 0x6c, 0x51,\r
+ 0xdf, 0xbf, 0xa0, 0x7c, 0x8f, 0xe1, 0xb5, 0x79, 0x6c, 0x56, 0x8c, 0x3d,\r
+ 0xdf, 0x95, 0x66, 0x54, 0xf0, 0x7e, 0x8c, 0xb3, 0x8f, 0x9b, 0x23, 0x43,\r
+ 0xbf, 0x28, 0xa0, 0x7e, 0x23, 0x8f, 0xfa, 0x2d, 0xf9, 0xb4, 0xdb, 0xb7,\r
+ 0x14, 0xd6, 0x7c, 0xc7, 0x33, 0x32, 0xb7, 0x2d, 0xd5, 0x4f, 0x96, 0xd9,\r
+ 0xf0, 0xcb, 0x7c, 0x65, 0x85, 0x7a, 0x87, 0x99, 0x70, 0x3f, 0x8e, 0x74,\r
+ 0x9e, 0xe8, 0x17, 0xb9, 0x19, 0x3d, 0xe7, 0x9a, 0x57, 0xa1, 0xee, 0x5e,\r
+ 0x01, 0x91, 0x47, 0x01, 0x83, 0x4b, 0x6d, 0xc1, 0xbe, 0x57, 0x80, 0x3c,\r
+ 0x0e, 0xa9, 0x6f, 0x3e, 0x8d, 0x3e, 0x9d, 0x7f, 0xd5, 0x69, 0xf4, 0x39,\r
+ 0xd0, 0xf3, 0x98, 0x75, 0x57, 0xa8, 0x7b, 0x47, 0xa0, 0x25, 0x8f, 0xe6,\r
+ 0x75, 0x87, 0x41, 0x73, 0x31, 0x0f, 0x18, 0xab, 0x81, 0xe3, 0x43, 0x09,\r
+ 0xff, 0x63, 0x14, 0x72, 0xe6, 0xd9, 0xb8, 0x6d, 0x3c, 0x0a, 0x53, 0x9c,\r
+ 0x06, 0x45, 0x7d, 0x3f, 0xc3, 0x39, 0xd3, 0xe5, 0xf4, 0x52, 0xa3, 0x33,\r
+ 0x9f, 0xa6, 0x38, 0x2d, 0x19, 0x49, 0x03, 0xf8, 0x72, 0x8b, 0xd7, 0x59,\r
+ 0x6e, 0x29, 0x72, 0x2e, 0x47, 0x3c, 0x10, 0x52, 0x33, 0x01, 0xe3, 0xdf,\r
+ 0x20, 0xac, 0x54, 0xe4, 0x5c, 0x42, 0x81, 0xd6, 0x7c, 0x0a, 0x2c, 0xcf,\r
+ 0x95, 0xa3, 0x6b, 0xd8, 0x5d, 0x46, 0xa0, 0x2d, 0x97, 0x8e, 0x8f, 0x70,\r
+ 0xca, 0x62, 0x77, 0xd9, 0xa3, 0xfe, 0x2d, 0x54, 0x6a, 0x0f, 0xac, 0xcc,\r
+ 0xa7, 0x06, 0x27, 0x66, 0xc0, 0xfd, 0x2c, 0xcf, 0x9d, 0xe3, 0xa4, 0xc3,\r
+ 0xf1, 0x59, 0xd4, 0xff, 0xcf, 0x64, 0x73, 0xe4, 0x61, 0xfc, 0xfb, 0x10,\r
+ 0x21, 0x58, 0x1b, 0x68, 0x2f, 0xa0, 0x32, 0xfb, 0x14, 0x8a, 0xfb, 0x8b,\r
+ 0xc8, 0xee, 0x8c, 0xfa, 0x6f, 0xa6, 0x4b, 0xed, 0x81, 0x76, 0xc8, 0x57,\r
+ 0xaa, 0x1e, 0x86, 0xc8, 0x6b, 0xeb, 0x6f, 0xcf, 0x95, 0xe3, 0x60, 0xc8,\r
+ 0x7e, 0xee, 0xa8, 0x50, 0xfe, 0x13, 0x75, 0x6f, 0xc4, 0xcc, 0xb9, 0x40,\r
+ 0x7b, 0x99, 0x5a, 0x17, 0xa3, 0x85, 0x4d, 0x56, 0xb4, 0xdc, 0xc3, 0xbe,\r
+ 0x61, 0xc1, 0x0c, 0x78, 0x8d, 0xa8, 0xff, 0x39, 0x8c, 0x11, 0x6c, 0x98,\r
+ 0x5a, 0x5d, 0xd6, 0xdd, 0xfe, 0x02, 0xb2, 0x58, 0x0b, 0xe4, 0x3c, 0xf2,\r
+ 0x98, 0x26, 0xf5, 0x98, 0xee, 0x76, 0x37, 0x2a, 0x6f, 0xf1, 0x7d, 0x05,\r
+ 0x73, 0x37, 0xaa, 0x3f, 0x5f, 0xcf, 0xe9, 0x6e, 0x5f, 0x2b, 0xfc, 0x7e,\r
+ 0xb7, 0x6f, 0x19, 0x9e, 0x6a, 0x4e, 0x55, 0x5b, 0x0e, 0xe8, 0xb6, 0xec,\r
+ 0x76, 0xe7, 0x23, 0xcd, 0x5e, 0x97, 0xc7, 0x54, 0xc8, 0xb6, 0x08, 0x53,\r
+ 0x5b, 0x2c, 0xdc, 0x96, 0x67, 0xb0, 0xee, 0x5c, 0x72, 0xcc, 0x66, 0x09,\r
+ 0x97, 0x85, 0x47, 0xc9, 0x6a, 0x29, 0x90, 0x3e, 0x6f, 0x43, 0x19, 0xdf,\r
+ 0xa8, 0x50, 0x77, 0xd2, 0x40, 0x77, 0x21, 0x4e, 0x95, 0x16, 0xac, 0x93,\r
+ 0x40, 0xb7, 0x07, 0x33, 0x98, 0x43, 0x31, 0x77, 0x3d, 0xcf, 0x1a, 0xf5,\r
+ 0x43, 0xe3, 0x41, 0x7f, 0xf9, 0x6d, 0x85, 0x8b, 0x02, 0xeb, 0x3d, 0xc4,\r
+ 0xa5, 0x9e, 0x8d, 0x1e, 0xe6, 0x21, 0xfa, 0x4e, 0xa0, 0xb8, 0xaf, 0x10,\r
+ 0x65, 0xf5, 0xaf, 0x2f, 0x94, 0xe7, 0xa6, 0x40, 0x8f, 0x97, 0x02, 0x01,\r
+ 0x0f, 0xc5, 0x5b, 0x16, 0x92, 0xbf, 0xb5, 0xbf, 0xdb, 0x8d, 0x1c, 0x85,\r
+ 0xf0, 0xce, 0x1c, 0xd8, 0xb8, 0x2c, 0x45, 0x56, 0x2f, 0x25, 0x02, 0xb9,\r
+ 0x24, 0xea, 0x03, 0xb2, 0x54, 0xc4, 0x01, 0xfc, 0x72, 0x9f, 0x6e, 0xd4,\r
+ 0x63, 0x12, 0xf7, 0xd7, 0x92, 0xdb, 0xe8, 0x17, 0x5e, 0xac, 0x01, 0x0f,\r
+ 0x7a, 0x6d, 0xe1, 0x33, 0x3c, 0xe4, 0xb7, 0x55, 0xa8, 0x77, 0x16, 0x01,\r
+ 0x1f, 0xb7, 0x33, 0x87, 0x02, 0xa5, 0x6e, 0xc4, 0x70, 0x1b, 0x25, 0x7c,\r
+ 0x2e, 0x8c, 0x0e, 0xac, 0x21, 0xef, 0xf7, 0x79, 0xd0, 0xea, 0x3a, 0xd8,\r
+ 0x17, 0xa0, 0x2c, 0x43, 0xf6, 0xef, 0xde, 0x0a, 0x75, 0x5f, 0x0f, 0x6c,\r
+ 0x2d, 0xc2, 0x38, 0xf1, 0xdb, 0x94, 0x5c, 0xb4, 0x7f, 0x22, 0xaa, 0x9c,\r
+ 0x0b, 0x07, 0x6e, 0xb4, 0xa1, 0xc7, 0xc6, 0x56, 0xd8, 0x16, 0x89, 0x19,\r
+ 0x34, 0xdf, 0xed, 0x42, 0x1f, 0xca, 0x28, 0x30, 0x50, 0x8c, 0x76, 0x54,\r
+ 0x92, 0xdf, 0x51, 0xee, 0x08, 0x6c, 0x2d, 0xc6, 0x0c, 0x54, 0xe1, 0xae,\r
+ 0x0c, 0xef, 0x18, 0x50, 0x65, 0x58, 0x28, 0xd7, 0xba, 0xbb, 0x7b, 0x90,\r
+ 0xda, 0x86, 0x5d, 0x8e, 0x46, 0x87, 0x8b, 0xb6, 0x3a, 0x0c, 0x5a, 0x50,\r
+ 0x62, 0xc3, 0x18, 0x71, 0xa4, 0xf2, 0x18, 0xdc, 0x2f, 0xa7, 0x9e, 0xab,\r
+ 0x47, 0x75, 0x4c, 0xf9, 0xbc, 0xfa, 0xbd, 0xee, 0x79, 0x0e, 0x78, 0xf6,\r
+ 0x0e, 0x65, 0xe1, 0x80, 0xc5, 0x6e, 0x7f, 0x08, 0x91, 0x38, 0xcf, 0x51,\r
+ 0x9e, 0x9b, 0x2d, 0xdd, 0x2e, 0xa5, 0x0d, 0x0e, 0xac, 0x01, 0xf7, 0x13,\r
+ 0x90, 0xb9, 0x1c, 0x51, 0xdf, 0x4a, 0xdc, 0x5f, 0xf3, 0x1c, 0x1e, 0x87,\r
+ 0xc7, 0x70, 0x61, 0x2c, 0xf9, 0x9d, 0xcb, 0xd3, 0x15, 0xea, 0x1d, 0x84,\r
+ 0xb9, 0xce, 0x89, 0x18, 0xc4, 0xb9, 0x08, 0x39, 0x8d, 0x56, 0x2b, 0x79,\r
+ 0x1d, 0x85, 0x0e, 0x93, 0x4e, 0x88, 0xa4, 0x38, 0xe8, 0xf8, 0xd6, 0x1e,\r
+ 0xfb, 0x0e, 0x9e, 0x61, 0xe8, 0x2c, 0x72, 0xd4, 0x89, 0x7e, 0x5e, 0xa1,\r
+ 0xde, 0xe1, 0x94, 0x09, 0x15, 0xed, 0x04, 0x79, 0x44, 0x5a, 0xf7, 0x0b,\r
+ 0x3d, 0x5f, 0xfd, 0xa2, 0x08, 0x3a, 0x8e, 0xc0, 0xfd, 0x46, 0xb1, 0xf6,\r
+ 0x61, 0xd6, 0xff, 0xba, 0x82, 0xef, 0x21, 0xac, 0x9f, 0xa8, 0x63, 0x9b,\r
+ 0x57, 0x6c, 0x81, 0xb7, 0x14, 0x98, 0xe2, 0xed, 0x5b, 0x15, 0xea, 0x7d,\r
+ 0x58, 0x19, 0x22, 0x60, 0xdc, 0x2d, 0xa3, 0xcc, 0xfa, 0x89, 0x14, 0xf0,\r
+ 0x94, 0xa0, 0x77, 0xfb, 0x65, 0x34, 0x6b, 0x44, 0xee, 0x8c, 0xcc, 0x77,\r
+ 0x10, 0xb2, 0x51, 0x8b, 0x0b, 0xd8, 0xa3, 0xc4, 0x06, 0x83, 0xdf, 0xb1,\r
+ 0x09, 0x2a, 0xcf, 0x8b, 0xfa, 0xca, 0x40, 0xa3, 0xee, 0xd2, 0x2c, 0xf9,\r
+ 0x7d, 0xc6, 0x7d, 0xa5, 0x45, 0xf0, 0x9c, 0x05, 0x62, 0x0a, 0x6d, 0xdc,\r
+ 0x30, 0x81, 0x1a, 0x8c, 0x89, 0x18, 0xff, 0x2d, 0xe0, 0x02, 0x1b, 0x50,\r
+ 0x52, 0x59, 0x09, 0x3c, 0x76, 0x22, 0x46, 0x62, 0x9d, 0x5c, 0x2f, 0x7a,\r
+ 0x76, 0x2d, 0xbb, 0xfd, 0x03, 0x54, 0x6f, 0x65, 0xfb, 0x46, 0xc3, 0x81,\r
+ 0x33, 0x83, 0x8d, 0xbc, 0xee, 0x2d, 0xdd, 0x13, 0xe4, 0x0d, 0x54, 0xc8,\r
+ 0x38, 0xfc, 0x17, 0xb4, 0x9d, 0xfb, 0x10, 0xc0, 0x19, 0x8d, 0xe7, 0x9b,\r
+ 0xc7, 0x85, 0xfd, 0xf4, 0xbf, 0x2a, 0xd4, 0xbb, 0xb8, 0x7e, 0x51, 0xa2,\r
+ 0xfb, 0x5d, 0x26, 0xe0, 0x3d, 0xbe, 0x4e, 0x5e, 0x23, 0x62, 0x32, 0x46,\r
+ 0x69, 0x92, 0x1c, 0x03, 0xa1, 0x4b, 0xe2, 0x72, 0xac, 0x32, 0xfe, 0x77,\r
+ 0x13, 0xe9, 0xf2, 0xb3, 0xe5, 0xeb, 0xa5, 0x3c, 0xbd, 0x0e, 0x9c, 0x95,\r
+ 0x7a, 0xff, 0xf2, 0x4d, 0x42, 0x5f, 0x2f, 0x91, 0xf1, 0x23, 0x50, 0x3a,\r
+ 0x19, 0xa3, 0x33, 0x47, 0x46, 0x89, 0xb4, 0x5d, 0xfe, 0x69, 0xed, 0xca,\r
+ 0xb3, 0xec, 0xbc, 0x95, 0x2a, 0xd6, 0xf4, 0xf8, 0xa6, 0xc0, 0xcf, 0xcf,\r
+ 0x85, 0xce, 0x25, 0xdb, 0x9f, 0xd6, 0x97, 0x64, 0xe9, 0x23, 0x19, 0xbd,\r
+ 0x55, 0xfb, 0xf7, 0x34, 0xb3, 0xde, 0x1f, 0x25, 0xb7, 0xc5, 0x65, 0x29,\r
+ 0xb4, 0x8c, 0xe6, 0x2f, 0xcb, 0xca, 0xbf, 0x75, 0x4c, 0xf9, 0x73, 0xb2,\r
+ 0xf4, 0x43, 0x63, 0xf4, 0xd5, 0x59, 0xfa, 0xd8, 0x18, 0xfd, 0xdc, 0x2c,\r
+ 0xfd, 0xae, 0x8c, 0x9e, 0x77, 0x27, 0x1e, 0xbf, 0x85, 0x66, 0x7d, 0xcb,\r
+ 0x79, 0xe4, 0x6e, 0xcb, 0xb3, 0x78, 0x2c, 0x6a, 0xbe, 0x78, 0x9c, 0x97,\r
+ 0x54, 0x2a, 0x1f, 0x57, 0x73, 0xd5, 0x07, 0x2f, 0x29, 0xc8, 0xf4, 0xad,\r
+ 0x4d, 0xeb, 0x54, 0xdf, 0x76, 0xa2, 0x6f, 0x05, 0x99, 0x72, 0x3b, 0xcc,\r
+ 0xba, 0x96, 0x30, 0xca, 0x1d, 0xcd, 0xd7, 0x9d, 0x95, 0x2f, 0x28, 0xf3,\r
+ 0x19, 0xda, 0x6f, 0x7a, 0x2b, 0xb5, 0xdf, 0xb8, 0x67, 0x4a, 0xbf, 0xe1,\r
+ 0x5d, 0x98, 0xcb, 0xeb, 0xaf, 0x54, 0xef, 0x03, 0x7b, 0xba, 0xa7, 0x23,\r
+ 0xf6, 0xec, 0xc3, 0x7d, 0x28, 0x4f, 0x9e, 0x89, 0xfb, 0x83, 0x16, 0x00,\r
+ 0x6b, 0xd6, 0xd8, 0xbc, 0xcd, 0x4e, 0xde, 0x3f, 0x37, 0x20, 0x07, 0xef,\r
+ 0x41, 0x58, 0xa9, 0xd6, 0x72, 0xc3, 0xfb, 0xe1, 0xe6, 0x41, 0x27, 0xe2,\r
+ 0xa1, 0x5d, 0xee, 0x47, 0x90, 0x59, 0x36, 0x0f, 0x38, 0x60, 0xef, 0xe2,\r
+ 0x73, 0x77, 0xf7, 0xe6, 0x20, 0xbf, 0x29, 0xe0, 0xbd, 0x8a, 0xdf, 0x38,\r
+ 0xbb, 0xc4, 0x6e, 0xf7, 0xc5, 0xbc, 0x36, 0x50, 0x52, 0x0e, 0x76, 0xbf,\r
+ 0x0a, 0xf2, 0x7a, 0xe2, 0x2d, 0xcb, 0x71, 0xf2, 0xec, 0xef, 0x9d, 0x46,\r
+ 0x1e, 0xfb, 0xe8, 0x98, 0xee, 0xac, 0x54, 0x67, 0x92, 0xa8, 0x7b, 0x2f,\r
+ 0xd2, 0xdc, 0x0e, 0xab, 0x88, 0xfa, 0x70, 0x66, 0x04, 0x3f, 0x13, 0x77,\r
+ 0x48, 0x8f, 0x3e, 0x93, 0xb0, 0x6d, 0xbc, 0x92, 0x64, 0x9c, 0xdd, 0xed,\r
+ 0x7b, 0xd8, 0x34, 0xf6, 0x36, 0x29, 0x1b, 0xd6, 0xba, 0x78, 0xe0, 0x76,\r
+ 0x72, 0xd7, 0x2b, 0x9d, 0x5d, 0xfe, 0x12, 0x5d, 0xa4, 0x75, 0x23, 0xf6,\r
+ 0x6b, 0xe4, 0xbe, 0x52, 0xa8, 0xd7, 0x50, 0xfa, 0x47, 0xfa, 0xa6, 0xa7,\r
+ 0x50, 0xa4, 0xc7, 0xed, 0x32, 0x3d, 0x6e, 0x1b, 0xdd, 0x3e, 0x69, 0x6b,\r
+ 0xe8, 0x75, 0x72, 0x45, 0x25, 0xe7, 0xe6, 0xb6, 0x1e, 0xe0, 0xbe, 0x61,\r
+ 0xe7, 0xc2, 0x58, 0xb9, 0x31, 0x32, 0xb0, 0xca, 0x85, 0x15, 0x47, 0x95,\r
+ 0x23, 0x95, 0xea, 0xbd, 0x6a, 0xe0, 0xc8, 0x54, 0xd8, 0x55, 0xc8, 0xfa,\r
+ 0x1a, 0x70, 0x97, 0xed, 0xf9, 0xe6, 0x74, 0xa4, 0x27, 0x23, 0xe5, 0xb2,\r
+ 0x46, 0xdd, 0xd3, 0x99, 0xda, 0xa2, 0xee, 0x19, 0x4c, 0xed, 0x51, 0xf7,\r
+ 0x14, 0xd0, 0x5c, 0x87, 0xe3, 0x9a, 0x11, 0xe7, 0xa5, 0x28, 0xd9, 0x3b,\r
+ 0xa5, 0xd0, 0xe5, 0x75, 0x15, 0xba, 0x72, 0xd1, 0x0a, 0x6e, 0xff, 0xf5,\r
+ 0x95, 0x2a, 0xae, 0xf7, 0xec, 0x9f, 0x9e, 0x1d, 0x5b, 0x73, 0x0a, 0x73,\r
+ 0xa2, 0xee, 0x04, 0xea, 0xf5, 0xb6, 0x78, 0x3d, 0xf5, 0x39, 0x33, 0x71,\r
+ 0x47, 0x9b, 0x44, 0xf5, 0x39, 0x13, 0x41, 0x27, 0x83, 0x7a, 0xa9, 0xe7,\r
+ 0x6b, 0x5c, 0x6b, 0x89, 0xae, 0x65, 0x22, 0x53, 0x87, 0xe3, 0x80, 0xf8,\r
+ 0xd6, 0x88, 0xfd, 0x72, 0xb4, 0xb7, 0x50, 0xc4, 0xfc, 0xb3, 0xe9, 0xa8,\r
+ 0xcb, 0x25, 0xcb, 0x89, 0xa3, 0x9c, 0x42, 0x91, 0xaf, 0xe3, 0xfa, 0xb1,\r
+ 0x4a, 0xf5, 0x6e, 0xb8, 0xe7, 0xc8, 0xf4, 0x53, 0xf6, 0x90, 0x42, 0xa3,\r
+ 0xd1, 0xe5, 0x27, 0xb5, 0x8f, 0x4d, 0xa7, 0x05, 0x6e, 0x9e, 0xf3, 0x62,\r
+ 0xcc, 0x96, 0x8b, 0xbc, 0xb3, 0xea, 0xfd, 0x38, 0x11, 0x94, 0x6e, 0xcd,\r
+ 0xc5, 0x1e, 0x35, 0x95, 0x6b, 0x9e, 0x00, 0x79, 0x5e, 0x6e, 0x43, 0x6e,\r
+ 0x49, 0x86, 0x8f, 0xfa, 0x9e, 0xc6, 0x19, 0xdc, 0xe5, 0xe8, 0xb9, 0x8e,\r
+ 0xf5, 0x13, 0x39, 0x9f, 0xd3, 0x71, 0xad, 0xb8, 0x9d, 0x5b, 0x64, 0x91,\r
+ 0x3d, 0x2f, 0x34, 0x62, 0x2d, 0x67, 0xd0, 0xb1, 0xe7, 0x5d, 0x18, 0x01,\r
+ 0x8e, 0xfb, 0x16, 0x39, 0x77, 0x8f, 0x56, 0xaa, 0xcf, 0x14, 0xd8, 0x67,\r
+ 0xb3, 0xc6, 0xc0, 0x5e, 0x68, 0xe7, 0x1e, 0xf2, 0xfe, 0x14, 0xdf, 0x74,\r
+ 0x05, 0xd9, 0x82, 0xde, 0x89, 0x85, 0x76, 0xb6, 0x55, 0xf3, 0xf1, 0x24,\r
+ 0xf2, 0xf1, 0xbd, 0xce, 0xe9, 0xf4, 0x90, 0x93, 0x47, 0x04, 0x63, 0xe8,\r
+ 0x75, 0x8d, 0x96, 0x80, 0xfe, 0xb8, 0x52, 0x62, 0x12, 0x76, 0x75, 0x17,\r
+ 0xa5, 0xb0, 0x22, 0xbd, 0x94, 0x9b, 0xfb, 0x0b, 0xf1, 0x19, 0x79, 0xa7,\r
+ 0x37, 0x88, 0xf7, 0xa9, 0xfe, 0xe5, 0x93, 0xe4, 0xad, 0xad, 0x7f, 0xe3,\r
+ 0x1a, 0xf2, 0xd6, 0xd7, 0x97, 0xfe, 0x2b, 0x79, 0x37, 0x14, 0x5b, 0xf8,\r
+ 0xf5, 0x5f, 0x7d, 0xe9, 0x2a, 0xf2, 0x6e, 0xab, 0x2f, 0xe5, 0xdc, 0x0f,\r
+ 0xfa, 0xdf, 0x40, 0xf1, 0x8d, 0xb8, 0x47, 0xf6, 0x5c, 0x82, 0x3e, 0xf9,\r
+ 0xa6, 0xd1, 0x31, 0xac, 0x8d, 0x14, 0xc6, 0x06, 0x65, 0x5a, 0x53, 0xd8,\r
+ 0xeb, 0x41, 0x6d, 0x4e, 0x78, 0xb2, 0xf5, 0x07, 0x23, 0x4e, 0xfe, 0x4c,\r
+ 0xa5, 0x7c, 0xce, 0xac, 0x37, 0xda, 0x60, 0xf9, 0x55, 0xcc, 0x56, 0xcf,\r
+ 0x01, 0x95, 0x27, 0x87, 0xfd, 0xc2, 0x37, 0x93, 0xa9, 0x6d, 0x85, 0x5d,\r
+ 0xb8, 0x0e, 0x6c, 0x7f, 0x26, 0x14, 0xf5, 0xf9, 0x38, 0x8d, 0xfb, 0xa0,\r
+ 0xc8, 0x3f, 0xe0, 0xb9, 0x1d, 0x5b, 0x99, 0x2c, 0xa5, 0x54, 0xb4, 0x89,\r
+ 0x80, 0x08, 0xa5, 0x4b, 0x2b, 0xcc, 0xff, 0xfb, 0x5a, 0x70, 0xd5, 0xff,\r
+ 0xd7, 0x16, 0x5c, 0x25, 0x5b, 0xf0, 0x65, 0xea, 0xe5, 0x4f, 0x94, 0x52,\r
+ 0x62, 0x2a, 0xcb, 0x0a, 0x17, 0xbd, 0x56, 0x45, 0xb3, 0xde, 0x53, 0x2d,\r
+ 0xf8, 0x3d, 0x79, 0x27, 0x2e, 0xf8, 0xeb, 0xac, 0x4c, 0xdb, 0xc3, 0x28,\r
+ 0x83, 0xdb, 0x11, 0xe6, 0x7a, 0xad, 0x05, 0xae, 0x03, 0x2b, 0x9e, 0xb1,\r
+ 0x72, 0x3b, 0x64, 0xda, 0x56, 0x90, 0x7f, 0x60, 0xe3, 0x33, 0xb2, 0x4c,\r
+ 0xc3, 0x6d, 0xcf, 0x94, 0x7b, 0xd2, 0xee, 0x16, 0xe5, 0xbf, 0xf9, 0x72,\r
+ 0xed, 0xb8, 0xfa, 0x4b, 0xb7, 0x58, 0xf5, 0x8d, 0xe3, 0x88, 0x8a, 0x16,\r
+ 0x1f, 0x54, 0xaa, 0xcf, 0xb8, 0xe2, 0xfe, 0xf3, 0xa9, 0xcd, 0x96, 0x6b,\r
+ 0xe5, 0xcf, 0xa9, 0xe6, 0x1a, 0x56, 0xec, 0xf3, 0x4e, 0xac, 0xf9, 0x1a,\r
+ 0xc8, 0x37, 0x50, 0x8b, 0x8d, 0xe3, 0x81, 0x67, 0x9c, 0x98, 0x75, 0x7f,\r
+ 0x26, 0x66, 0x8d, 0xd5, 0x3d, 0xf0, 0x39, 0xba, 0xe3, 0x9f, 0xa3, 0xfb,\r
+ 0x81, 0x69, 0x8f, 0x52, 0x6d, 0xfc, 0x28, 0xad, 0xf3, 0xdf, 0x87, 0xb3,\r
+ 0xed, 0xe9, 0xf2, 0x9d, 0xc8, 0xe4, 0x4b, 0x9f, 0x31, 0xf8, 0x87, 0xef,\r
+ 0xae, 0x55, 0xf2, 0x34, 0xc7, 0x11, 0xad, 0x98, 0x2e, 0xe1, 0x88, 0x40,\r
+ 0x5e, 0x3f, 0xf3, 0xa5, 0x92, 0x2f, 0x46, 0xcf, 0x98, 0x62, 0x75, 0xe1,\r
+ 0x0c, 0xec, 0xf5, 0xb1, 0x44, 0xa8, 0x92, 0x84, 0x43, 0x96, 0xc1, 0x9f,\r
+ 0xd1, 0xf1, 0xb8, 0xf0, 0x5a, 0xe5, 0xf2, 0x73, 0x49, 0x9d, 0xcd, 0x6c,\r
+ 0xe3, 0xb4, 0x31, 0xee, 0xbf, 0x10, 0x6d, 0xcc, 0xcb, 0x9c, 0x69, 0xb2,\r
+ 0x75, 0x23, 0x19, 0x9d, 0x55, 0xfe, 0x12, 0xfd, 0x2d, 0xdd, 0xfe, 0x96,\r
+ 0x07, 0x11, 0xe3, 0xd3, 0xf9, 0x54, 0xfb, 0xe3, 0x3a, 0x66, 0xf7, 0xf8,\r
+ 0xa6, 0xcb, 0xfb, 0xbb, 0xba, 0x33, 0x62, 0xbf, 0xc3, 0x1d, 0x9c, 0x77,\r
+ 0xdb, 0xb8, 0x6f, 0x16, 0xce, 0x4f, 0x65, 0x68, 0x4f, 0xdc, 0xcd, 0xf1,\r
+ 0xad, 0xbf, 0xa5, 0x14, 0xa7, 0xa5, 0x6a, 0xd4, 0xd3, 0x45, 0xad, 0xd6,\r
+ 0xfe, 0xd6, 0x19, 0x48, 0x55, 0x22, 0xd5, 0x2e, 0x53, 0x33, 0xe5, 0x7e,\r
+ 0x64, 0xc5, 0xa9, 0x70, 0x8a, 0x71, 0x07, 0xf1, 0x7e, 0x84, 0x1b, 0x88,\r
+ 0x98, 0x29, 0x4a, 0xa9, 0xbf, 0x75, 0x2a, 0x4d, 0xc3, 0x19, 0x2d, 0xea,\r
+ 0xfb, 0x31, 0xad, 0x97, 0xf7, 0x45, 0x27, 0xcd, 0xb4, 0x71, 0x9a, 0x3f,\r
+ 0xb3, 0x2d, 0x77, 0x45, 0xdd, 0x42, 0xde, 0x3f, 0x47, 0x65, 0x7d, 0xab,\r
+ 0xe0, 0x5d, 0xb8, 0x0f, 0xde, 0x8b, 0xfa, 0xb7, 0xac, 0xf4, 0xc1, 0xdb,\r
+ 0xa3, 0xbe, 0x3b, 0x68, 0x10, 0xda, 0x3b, 0xe5, 0xf3, 0x18, 0xad, 0xa0,\r
+ 0x32, 0x47, 0x0e, 0xda, 0x65, 0x41, 0x14, 0x2b, 0x72, 0x16, 0xd3, 0xac,\r
+ 0xc3, 0xcb, 0xe9, 0x4c, 0x27, 0x7f, 0x3a, 0x1c, 0xf5, 0x59, 0xe9, 0x10,\r
+ 0x95, 0x39, 0x5d, 0x68, 0xbf, 0x8d, 0xf6, 0x22, 0xed, 0xa0, 0xfd, 0xe4,\r
+ 0x9d, 0xe3, 0x75, 0x46, 0xdd, 0x3f, 0xe5, 0xf6, 0x61, 0xbf, 0x5c, 0x2c,\r
+ 0x66, 0x25, 0x56, 0xd0, 0x36, 0x4b, 0x19, 0xad, 0xb1, 0x18, 0xb6, 0x69,\r
+ 0x96, 0x5c, 0xa6, 0xb8, 0xa1, 0xfe, 0x48, 0x8e, 0x5f, 0xb9, 0xe1, 0xd8,\r
+ 0xdf, 0x80, 0x99, 0x98, 0xb5, 0xa7, 0x9d, 0xf4, 0x1b, 0x02, 0xb1, 0x46,\r
+ 0x38, 0x6c, 0x6b, 0x9c, 0x0e, 0xd8, 0x3c, 0x4f, 0x2d, 0x8e, 0xdd, 0x72,\r
+ 0x1c, 0xf9, 0xc6, 0xea, 0x45, 0x6b, 0xe5, 0xe7, 0xbc, 0x16, 0xab, 0xbc,\r
+ 0xff, 0x8c, 0xfe, 0xec, 0x5f, 0x46, 0x7f, 0x57, 0xfa, 0xd4, 0x1f, 0xa5,\r
+ 0xe7, 0xcf, 0x18, 0xd9, 0x5f, 0xf6, 0x13, 0xef, 0xf9, 0x76, 0x32, 0x8c,\r
+ 0xc5, 0x17, 0x35, 0x5c, 0x64, 0x59, 0x78, 0x95, 0x58, 0x70, 0x95, 0x68,\r
+ 0xbe, 0x4a, 0x98, 0x7d, 0xc0, 0x2a, 0x7d, 0xf8, 0x51, 0xf4, 0xa1, 0x80,\r
+ 0x4e, 0x95, 0xc7, 0xfd, 0x57, 0x4a, 0xb9, 0xd9, 0x2f, 0xa4, 0x7d, 0xcb,\r
+ 0x23, 0xf0, 0x8b, 0xb1, 0xf6, 0xbb, 0xfd, 0x0f, 0x49, 0xfb, 0xf4, 0x5d,\r
+ 0x60, 0x6e, 0x95, 0x3a, 0x73, 0x64, 0xef, 0x25, 0x16, 0xf4, 0x3d, 0xee,\r
+ 0x3f, 0x8c, 0xd3, 0x50, 0x81, 0xc9, 0xaf, 0x16, 0x55, 0x29, 0x9f, 0x63,\r
+ 0x9f, 0xee, 0x83, 0x6f, 0xa5, 0x75, 0xf2, 0x7d, 0x46, 0x95, 0x8a, 0x07,\r
+ 0x51, 0xf7, 0x45, 0xf2, 0xec, 0xc2, 0xef, 0x22, 0x0a, 0x70, 0xf2, 0x9d,\r
+ 0x26, 0x6f, 0x8b, 0x51, 0x77, 0x1b, 0xdf, 0x11, 0x7c, 0xf3, 0xc9, 0x27,\r
+ 0xef, 0x88, 0x6a, 0x1f, 0x5b, 0xa1, 0x3f, 0x0f, 0x1f, 0xa7, 0xee, 0x4d,\r
+ 0x5f, 0xc7, 0xee, 0xa5, 0x67, 0xc3, 0xce, 0xb3, 0xd1, 0x2b, 0xcf, 0x87,\r
+ 0xaa, 0xcd, 0x5d, 0xfa, 0xb3, 0x73, 0xae, 0xcb, 0x92, 0xa9, 0x2b, 0xea,\r
+ 0xfe, 0x5a, 0xe6, 0x3d, 0xc0, 0x3c, 0xf4, 0x31, 0xe0, 0x9f, 0x81, 0x59,\r
+ 0xe6, 0xbf, 0x0b, 0x28, 0xa0, 0xec, 0x33, 0x4e, 0xfa, 0x5d, 0xce, 0x78,\r
+ 0xef, 0x77, 0xec, 0xfa, 0x2c, 0xd9, 0x93, 0x1e, 0x97, 0x16, 0xdd, 0x36,\r
+ 0x1b, 0xda, 0x66, 0x53, 0xe3, 0x72, 0x19, 0x59, 0x85, 0xd9, 0xb6, 0xef,\r
+ 0x73, 0x6c, 0x0f, 0x69, 0xdb, 0x2f, 0x5b, 0xff, 0x78, 0x32, 0x87, 0xbe,\r
+ 0x53, 0x07, 0xab, 0x54, 0x1c, 0x19, 0x3b, 0x5e, 0x81, 0x0d, 0xa5, 0x14,\r
+ 0xdf, 0x70, 0x04, 0x63, 0xc6, 0xf6, 0x4e, 0x7d, 0x56, 0x1e, 0x3a, 0xad,\r
+ 0xfd, 0xbc, 0x5e, 0x1b, 0xc5, 0x5b, 0x86, 0xc9, 0xb6, 0x5b, 0xf5, 0xc3,\r
+ 0x3e, 0xa6, 0x4e, 0xbb, 0x3e, 0x4b, 0xc6, 0x75, 0x19, 0xb1, 0x8d, 0x67,\r
+ 0x52, 0x69, 0x5b, 0x8f, 0x17, 0x25, 0x59, 0xf9, 0xaf, 0x3b, 0x0c, 0x6b,\r
+ 0x03, 0xf4, 0x71, 0xff, 0x0f, 0xa9, 0xd4, 0xa2, 0xea, 0x34, 0x64, 0x8c,\r
+ 0xb9, 0x40, 0x7f, 0xce, 0xcf, 0x6b, 0xd2, 0x2e, 0xd7, 0xe4, 0x52, 0xe1,\r
+ 0xf5, 0xce, 0x9a, 0x85, 0x55, 0x69, 0x2d, 0xc3, 0xda, 0x5f, 0x63, 0xb5,\r
+ 0xd8, 0xe4, 0x7a, 0xb4, 0xa4, 0xe7, 0x6d, 0x56, 0xa9, 0x5a, 0x8d, 0x0e,\r
+ 0xdc, 0xa6, 0xd7, 0x38, 0x84, 0x8d, 0x57, 0xe2, 0x56, 0x91, 0xfe, 0x1b,\r
+ 0x0b, 0x2f, 0x5a, 0xc4, 0x73, 0x9d, 0xab, 0xd6, 0x88, 0xaf, 0xc1, 0x67,\r
+ 0x59, 0xe8, 0x5b, 0xe0, 0x6b, 0xf6, 0x7d, 0xce, 0xf8, 0xb1, 0xf4, 0xb2,\r
+ 0x2a, 0x15, 0x6b, 0xf9, 0x1d, 0x96, 0x57, 0x60, 0x1f, 0x6a, 0x8d, 0xfa,\r
+ 0xee, 0xd6, 0xef, 0x73, 0xd2, 0xef, 0x3e, 0xae, 0xd4, 0xfe, 0xc7, 0x7e,\r
+ 0x44, 0xf2, 0xd6, 0x2b, 0xfd, 0x08, 0x5e, 0x2a, 0xe4, 0xbb, 0x96, 0x05,\r
+ 0x24, 0x8c, 0x80, 0x60, 0x2f, 0x5a, 0x23, 0xdf, 0x13, 0xed, 0xb7, 0xe1,\r
+ 0xb9, 0xfa, 0x86, 0xae, 0x3e, 0xba, 0xd9, 0xca, 0xf9, 0x0b, 0x9a, 0x6b,\r
+ 0x6a, 0x6a, 0xe9, 0x49, 0x2b, 0x8f, 0x35, 0xd4, 0xff, 0x98, 0x66, 0x1e,\r
+ 0xb2, 0xea, 0xf1, 0x2c, 0xa0, 0xfb, 0xd2, 0xb2, 0x67, 0x35, 0x73, 0xc7,\r
+ 0x9d, 0x62, 0xa2, 0xe7, 0xeb, 0x27, 0x3a, 0x96, 0x88, 0xa2, 0xe2, 0xdb,\r
+ 0x0f, 0xd1, 0xdb, 0x56, 0x34, 0x16, 0x65, 0xf6, 0xaf, 0x3e, 0x8b, 0xae,\r
+ 0xb6, 0x31, 0x4f, 0xd7, 0x49, 0xd2, 0x4c, 0x7f, 0xd6, 0xaa, 0xbe, 0xd5,\r
+ 0x1d, 0x74, 0x97, 0x8d, 0x0a, 0xb6, 0xac, 0xde, 0xb7, 0x7a, 0xef, 0x05,\r
+ 0x27, 0x4e, 0xd0, 0x2d, 0x36, 0x5d, 0x39, 0x3d, 0x0d, 0xf1, 0xa1, 0x2e,\r
+ 0xb4, 0x61, 0xbf, 0x03, 0x2d, 0x7b, 0xfb, 0xbc, 0xcb, 0x77, 0x3e, 0xb5,\r
+ 0x9a, 0x6e, 0x61, 0x5e, 0x78, 0x3c, 0x27, 0x9e, 0xa6, 0xfb, 0x1c, 0xd2,\r
+ 0xf2, 0x4d, 0xba, 0xc9, 0x21, 0x8b, 0xfe, 0xc4, 0xce, 0xa4, 0x8f, 0x3e,\r
+ 0xb0, 0xc0, 0x24, 0x4c, 0x1f, 0xa1, 0xbb, 0xfd, 0xc7, 0xf6, 0xfe, 0xa2,\r
+ 0xf9, 0xad, 0xfe, 0x1a, 0x64, 0xd8, 0x4b, 0xaf, 0xb2, 0x9c, 0x5e, 0xb3,\r
+ 0xb0, 0x95, 0xb1, 0x68, 0xb3, 0xd1, 0xb9, 0x87, 0xde, 0xe6, 0x21, 0xf9,\r
+ 0x03, 0x3f, 0x8e, 0xf2, 0xeb, 0x9d, 0xef, 0xf1, 0xe3, 0x66, 0x83, 0xcd,\r
+ 0xbe, 0xc3, 0xec, 0x0d, 0xfc, 0xf8, 0x3e, 0x3f, 0xfe, 0x81, 0x1f, 0x37,\r
+ 0x19, 0xb2, 0x9e, 0x6f, 0x4b, 0x83, 0xef, 0xca, 0xe7, 0x8d, 0x4a, 0x74,\r
+ 0x8b, 0x4c, 0x3c, 0xe1, 0xc0, 0xe3, 0x97, 0x3c, 0x8c, 0x87, 0x6b, 0x9a,\r
+ 0xfb, 0x6e, 0x0b, 0xaf, 0x5e, 0x73, 0xa8, 0x96, 0x7e, 0xc7, 0x39, 0xdb,\r
+ 0x58, 0xdd, 0xa6, 0x07, 0xab, 0xcd, 0xa6, 0x87, 0xef, 0x18, 0x4b, 0xef,\r
+ 0xb5, 0xe3, 0x71, 0x39, 0xe7, 0x3f, 0x4c, 0x37, 0xca, 0xb6, 0xdd, 0x65,\r
+ 0x78, 0xde, 0xaf, 0x5d, 0x1d, 0x32, 0x86, 0x3b, 0xb7, 0xd0, 0xcf, 0x2c,\r
+ 0xb2, 0x8f, 0x4f, 0xbf, 0x79, 0xfb, 0xe1, 0xba, 0x90, 0x71, 0xfe, 0x10,\r
+ 0x3d, 0x2e, 0x4d, 0xee, 0xa0, 0x47, 0x84, 0xa0, 0xce, 0x3b, 0x56, 0x1b,\r
+ 0x67, 0x08, 0x5f, 0x81, 0x28, 0x29, 0x5a, 0x62, 0xe4, 0x8a, 0x39, 0x8a,\r
+ 0x59, 0x2f, 0xca, 0x0a, 0x44, 0xb1, 0xfb, 0x8a, 0x9d, 0xc6, 0x6e, 0x70,\r
+ 0xc6, 0x05, 0x62, 0x42, 0x01, 0x3d, 0xcc, 0xe5, 0xdf, 0x46, 0x6d, 0xb2,\r
+ 0xb1, 0x6d, 0xb2, 0x48, 0x3a, 0x4b, 0x12, 0xe3, 0xb7, 0xd4, 0x64, 0xfc,\r
+ 0xd1, 0xd8, 0x63, 0x7c, 0xdf, 0xb2, 0x67, 0xaf, 0x71, 0xf5, 0xbe, 0xd7,\r
+ 0x0f, 0x47, 0x8e, 0x36, 0x37, 0x2f, 0x69, 0x6e, 0x5e, 0x7a, 0x7d, 0x4b,\r
+ 0xf3, 0x5d, 0x46, 0x81, 0x98, 0x52, 0x60, 0xe4, 0x3f, 0x40, 0xdf, 0xc4,\r
+ 0x18, 0x1d, 0xa5, 0xcb, 0x05, 0x55, 0xd3, 0xbb, 0xe8, 0xd0, 0x85, 0xab,\r
+ 0x97, 0xd0, 0xf7, 0xd0, 0x82, 0x82, 0xa3, 0x4b, 0xe8, 0x10, 0x54, 0x17,\r
+ 0x1e, 0xa2, 0x27, 0xed, 0x9c, 0xa4, 0x77, 0x98, 0x7c, 0x87, 0xae, 0x95,\r
+ 0x4a, 0xfa, 0x4c, 0xce, 0xf6, 0x43, 0xf4, 0xbe, 0x4d, 0xf5, 0x7d, 0xc9,\r
+ 0x21, 0xba, 0x86, 0x0d, 0x50, 0x6e, 0x49, 0x01, 0x3d, 0x00, 0x76, 0x33,\r
+ 0x7d, 0x62, 0xc8, 0x86, 0x5c, 0xbc, 0xba, 0x59, 0xdd, 0xcf, 0x8a, 0x10,\r
+ 0x81, 0xd9, 0xdf, 0x67, 0x92, 0xda, 0xe7, 0xa7, 0xc1, 0x9f, 0x27, 0xe9,\r
+ 0x35, 0x20, 0x48, 0xd9, 0xa4, 0xdf, 0x67, 0x18, 0x19, 0xe4, 0xc9, 0x74,\r
+ 0x9e, 0xb6, 0x49, 0xff, 0x1d, 0xd2, 0x3c, 0x4d, 0x6b, 0x35, 0x75, 0x6a,\r
+ 0xfb, 0xe9, 0x3a, 0xff, 0x19, 0x5a, 0x5e, 0xad, 0xe5, 0xb5, 0x7a, 0x7d,\r
+ 0x35, 0x62, 0x7f, 0x64, 0x79, 0x93, 0x6e, 0x83, 0x61, 0xaa, 0xaf, 0x09,\r
+ 0xbb, 0x38, 0xf3, 0x9e, 0x4c, 0x5a, 0xc5, 0xed, 0x74, 0x9b, 0xac, 0x19,\r
+ 0x5e, 0xbd, 0x0b, 0x4d, 0xdf, 0x35, 0x0d, 0xad, 0x33, 0xb4, 0xce, 0xd0,\r
+ 0xeb, 0x59, 0x95, 0xef, 0x90, 0xe7, 0x27, 0x25, 0x6b, 0xd2, 0x74, 0x99,\r
+ 0xa6, 0xad, 0xb2, 0x04, 0x8b, 0xd6, 0xe3, 0x26, 0x62, 0xaa, 0x47, 0xbd,\r
+ 0x13, 0xb0, 0x48, 0xda, 0xaa, 0xc7, 0x46, 0xbd, 0x9b, 0x60, 0x9a, 0xa3,\r
+ 0x69, 0xbe, 0xce, 0xeb, 0xc1, 0xd9, 0x55, 0x7e, 0x26, 0x61, 0x6a, 0x6b,\r
+ 0x31, 0x7a, 0xcb, 0x29, 0xbb, 0x89, 0x4f, 0xf7, 0x25, 0x3d, 0xee, 0xd3,\r
+ 0x34, 0x9d, 0x9e, 0x19, 0xbf, 0x56, 0x59, 0x4e, 0xad, 0x2c, 0x31, 0x3d,\r
+ 0x76, 0xb5, 0x5a, 0xd6, 0x2a, 0x65, 0x56, 0x39, 0xfe, 0xa3, 0x65, 0x35,\r
+ 0x6a, 0x59, 0xa3, 0xa9, 0xff, 0x8d, 0x32, 0xa5, 0xee, 0x9f, 0x4c, 0x5b,\r
+ 0x49, 0xed, 0xc1, 0xad, 0xa6, 0x7c, 0x8c, 0xe5, 0x9a, 0xb6, 0xe9, 0xbe,\r
+ 0xb2, 0xa6, 0xd0, 0xc4, 0x4f, 0xc9, 0xf8, 0xc5, 0x14, 0xd3, 0x18, 0x17,\r
+ 0x66, 0xe6, 0xae, 0x4c, 0xeb, 0xdd, 0xba, 0xcc, 0xa9, 0xba, 0x9e, 0xda,\r
+ 0x8c, 0xa5, 0x6a, 0x5b, 0x6d, 0xc6, 0x5a, 0xe4, 0x90, 0x70, 0x11, 0x2e,\r
+ 0xc9, 0xa2, 0x9c, 0x8c, 0xf2, 0x4e, 0x12, 0x15, 0x64, 0x6f, 0x0e, 0x47,\r
+ 0xc3, 0xa9, 0xa5, 0x64, 0x2c, 0x6d, 0x22, 0xeb, 0xd2, 0x26, 0x3c, 0xed,\r
+ 0xfc, 0xac, 0xe8, 0xa5, 0xfc, 0xb6, 0xa1, 0x60, 0x74, 0x47, 0x68, 0x53,\r
+ 0x30, 0x35, 0x30, 0x14, 0x4a, 0xd0, 0xc4, 0xb6, 0xd8, 0xae, 0x78, 0x2c,\r
+ 0x1a, 0x8a, 0xa6, 0xba, 0x43, 0xa1, 0x44, 0x6f, 0x38, 0xb4, 0xa7, 0xf6,\r
+ 0xbc, 0xe0, 0x48, 0x90, 0x5c, 0x6d, 0xb1, 0x68, 0x34, 0x34, 0x90, 0x0a,\r
+ 0xc7, 0xa2, 0x24, 0x56, 0x92, 0xb1, 0xb2, 0x83, 0x44, 0x07, 0x19, 0x1d,\r
+ 0x15, 0x40, 0x07, 0x59, 0x3a, 0x3a, 0x38, 0xd1, 0x09, 0xa6, 0xb3, 0x0b,\r
+ 0x4c, 0x17, 0x89, 0x4e, 0x32, 0x3a, 0x19, 0x5d, 0x34, 0xbd, 0x73, 0x78,\r
+ 0x20, 0xd4, 0x3a, 0x30, 0x10, 0x4a, 0x26, 0xc3, 0xdb, 0xc2, 0x91, 0x70,\r
+ 0x6a, 0xdf, 0xda, 0xd8, 0x60, 0xa8, 0x3b, 0x11, 0x1b, 0x09, 0x0f, 0xa2,\r
+ 0xc6, 0x92, 0xd5, 0xa1, 0x7d, 0xdb, 0x62, 0xc1, 0xc4, 0xe0, 0x8a, 0x70,\r
+ 0x72, 0x57, 0x38, 0x99, 0xec, 0x0a, 0x27, 0x53, 0xa1, 0x28, 0x14, 0x02,\r
+ 0x25, 0x75, 0xa1, 0xec, 0x2e, 0x2e, 0xbb, 0xab, 0x93, 0xac, 0x5d, 0x9d,\r
+ 0x92, 0xeb, 0x82, 0x48, 0xca, 0x21, 0xc3, 0xa3, 0x8b, 0x26, 0x76, 0x05,\r
+ 0xa3, 0x83, 0x89, 0x58, 0x78, 0xb0, 0x2e, 0x18, 0x8f, 0xd7, 0xb5, 0xa2,\r
+ 0x91, 0x23, 0xa8, 0xa4, 0x89, 0xe6, 0x67, 0xcb, 0xe3, 0xf1, 0x48, 0x78,\r
+ 0x20, 0xc8, 0x3d, 0x98, 0x9d, 0xb6, 0xe9, 0x0a, 0x6f, 0x0f, 0x0d, 0xec,\r
+ 0x1b, 0x88, 0x84, 0xda, 0x82, 0x91, 0xc8, 0xb6, 0xe0, 0xc0, 0xce, 0x64,\r
+ 0x13, 0x4d, 0x3e, 0x5d, 0x2e, 0xb3, 0x6a, 0x20, 0x16, 0x45, 0x23, 0x53,\r
+ 0x75, 0x6d, 0x4c, 0xf7, 0xa6, 0xcc, 0xaa, 0x1d, 0x89, 0x60, 0x7c, 0x28,\r
+ 0x3c, 0x90, 0xac, 0x6b, 0x0b, 0x46, 0x47, 0x82, 0x28, 0x70, 0xc6, 0x38,\r
+ 0xaa, 0x58, 0x24, 0x96, 0x58, 0x19, 0x8e, 0xa4, 0x42, 0x89, 0xd3, 0xeb,\r
+ 0xd7, 0x04, 0x53, 0x89, 0xf0, 0xde, 0x26, 0xaa, 0xf8, 0x5c, 0x7d, 0x56,\r
+ 0x51, 0x93, 0xc6, 0x9a, 0x76, 0x07, 0xc3, 0xd1, 0xd4, 0xf8, 0x9a, 0x98,\r
+ 0xd4, 0x94, 0x8c, 0xd5, 0x6c, 0xc0, 0x44, 0x37, 0xd1, 0x94, 0x8c, 0x22,\r
+ 0x96, 0xac, 0x5b, 0x3e, 0x1c, 0x8e, 0x0c, 0xce, 0xee, 0x6d, 0xdf, 0xd0,\r
+ 0xd3, 0xb1, 0x6e, 0x6d, 0x13, 0x15, 0x65, 0xeb, 0xa2, 0x83, 0x91, 0x50,\r
+ 0x13, 0x15, 0x9b, 0x85, 0x1d, 0xcb, 0xc3, 0xd1, 0x41, 0x6e, 0xd3, 0x68,\r
+ 0xf9, 0x3c, 0x52, 0x75, 0xed, 0x83, 0xe1, 0x54, 0x70, 0x1b, 0x9b, 0x4f,\r
+ 0xca, 0x56, 0xf4, 0x84, 0x22, 0xca, 0xbf, 0xcc, 0x35, 0x2b, 0x4d, 0x3c,\r
+ 0x18, 0xd5, 0xfe, 0x39, 0x36, 0x17, 0x74, 0x51, 0x55, 0xde, 0x19, 0xa7,\r
+ 0xd1, 0xf4, 0x60, 0x98, 0xa2, 0x3b, 0x64, 0x07, 0xb8, 0x80, 0x53, 0x0a,\r
+ 0x0f, 0xe0, 0x91, 0x29, 0x7c, 0xb4, 0x5b, 0xc3, 0xa9, 0x70, 0x84, 0xc7,\r
+ 0x6e, 0x7c, 0x61, 0x33, 0x55, 0x66, 0x84, 0x23, 0x58, 0x23, 0x75, 0x6d,\r
+ 0x43, 0xb1, 0x44, 0x28, 0x26, 0x07, 0x30, 0x94, 0x98, 0xbd, 0x32, 0x11,\r
+ 0xdc, 0x95, 0x71, 0xa9, 0x26, 0x9a, 0xf6, 0x39, 0xb6, 0xe6, 0xf1, 0x91,\r
+ 0x5a, 0xac, 0x86, 0xf6, 0x91, 0x50, 0x34, 0x6b, 0xfc, 0xa5, 0x62, 0x4d,\r
+ 0x8c, 0x07, 0x47, 0xeb, 0x2a, 0xb2, 0x75, 0xbc, 0x4e, 0x67, 0xaf, 0x8b,\r
+ 0xae, 0x8c, 0x0d, 0x0c, 0x27, 0xd5, 0x7a, 0x4e, 0xaf, 0x22, 0x73, 0xf3,\r
+ 0x33, 0xa6, 0xe6, 0x51, 0xcc, 0x08, 0x57, 0x25, 0x62, 0xc3, 0xf1, 0x26,\r
+ 0x5a, 0x38, 0x56, 0x13, 0x48, 0x84, 0x42, 0xeb, 0xb6, 0x25, 0x43, 0x89,\r
+ 0x11, 0xf4, 0x6d, 0x5d, 0x74, 0x55, 0x24, 0xb6, 0x2d, 0x18, 0xe9, 0x0a,\r
+ 0xee, 0x8b, 0x0d, 0xa7, 0x46, 0xab, 0x99, 0xf9, 0xf9, 0xf9, 0x9a, 0x68,\r
+ 0x6e, 0xb6, 0x41, 0xd0, 0x1c, 0x10, 0xea, 0xb2, 0xc2, 0xc3, 0x9a, 0x60,\r
+ 0x34, 0xb8, 0x83, 0xb3, 0xd4, 0x7f, 0xe9, 0x2c, 0x1c, 0x51, 0x3a, 0xa2,\r
+ 0xdb, 0x63, 0x63, 0xda, 0xff, 0x05, 0x79, 0xd2, 0x51, 0xa8, 0x89, 0x6a,\r
+ 0xb3, 0xf3, 0x85, 0xa3, 0xf1, 0xe1, 0xd4, 0xae, 0x50, 0x6a, 0x28, 0x36,\r
+ 0x58, 0xb7, 0x3c, 0x98, 0x44, 0xe1, 0x48, 0x8f, 0xc6, 0x40, 0xb3, 0xb7,\r
+ 0x8d, 0xb1, 0x67, 0x17, 0x8f, 0x25, 0x54, 0x73, 0x2a, 0x4f, 0x6f, 0x36,\r
+ 0xa6, 0xc8, 0x9a, 0x2f, 0xb0, 0x5d, 0x23, 0xf9, 0xcc, 0xe8, 0xd4, 0x75,\r
+ 0x0d, 0xc4, 0x76, 0xd5, 0x25, 0x76, 0x25, 0x23, 0x75, 0xe7, 0x21, 0xc2,\r
+ 0xd6, 0x8d, 0x89, 0xdc, 0xb3, 0xb3, 0x42, 0x7b, 0x13, 0x55, 0x7f, 0x71,\r
+ 0x06, 0x53, 0x6b, 0x96, 0x7d, 0xa1, 0xf5, 0xe7, 0xc6, 0xf5, 0x26, 0x5a,\r
+ 0xf9, 0x85, 0x05, 0x9c, 0x26, 0xf2, 0xcf, 0xce, 0x76, 0x9c, 0xc6, 0xff,\r
+ 0xd7, 0x72, 0xd8, 0xe7, 0xbe, 0x28, 0x2b, 0x2f, 0x7f, 0x39, 0xb8, 0x81,\r
+ 0x60, 0x62, 0x47, 0x08, 0x2b, 0xab, 0xf4, 0x8b, 0xb2, 0x34, 0x51, 0x59,\r
+ 0xd7, 0x60, 0x30, 0x32, 0x12, 0xde, 0x59, 0x87, 0x00, 0x13, 0x4b, 0xc9,\r
+ 0xbd, 0xa1, 0xae, 0x3d, 0x3a, 0x10, 0x89, 0x25, 0x11, 0x67, 0xda, 0x22,\r
+ 0xc1, 0xa4, 0x0c, 0xfa, 0x63, 0x6d, 0x3a, 0x30, 0xb8, 0x09, 0xad, 0x2f,\r
+ 0x1d, 0x47, 0xbf, 0x26, 0xb4, 0x6b, 0x9b, 0x36, 0x08, 0xc1, 0x64, 0xfa,\r
+ 0x38, 0x26, 0x3d, 0xe1, 0x1d, 0xd1, 0x60, 0x6a, 0x38, 0x21, 0xc3, 0x27,\r
+ 0x6f, 0xcc, 0x75, 0x11, 0x4c, 0x31, 0x42, 0x4a, 0x30, 0xd1, 0x13, 0xda,\r
+ 0x3d, 0x1c, 0x8a, 0x0e, 0x40, 0xe3, 0x31, 0x6b, 0x54, 0x75, 0x65, 0x26,\r
+ 0x51, 0x47, 0x24, 0x12, 0xda, 0x11, 0x8c, 0xa8, 0x99, 0x6b, 0xdf, 0x3b,\r
+ 0x10, 0x8a, 0xab, 0x09, 0x9f, 0x3d, 0x8e, 0x4d, 0x62, 0xc7, 0xf0, 0x2e,\r
+ 0xf4, 0xdd, 0x64, 0x55, 0x64, 0xb6, 0xc2, 0xe6, 0x27, 0x5d, 0xb1, 0xd4,\r
+ 0x24, 0x5c, 0x1b, 0xeb, 0x19, 0x1e, 0x18, 0x52, 0xbe, 0x6a, 0xca, 0xe7,\r
+ 0x35, 0x99, 0xac, 0xdb, 0x76, 0x9e, 0xdc, 0x61, 0xa6, 0x9b, 0x64, 0x3d,\r
+ 0xa1, 0x81, 0xe1, 0x04, 0x7c, 0xe8, 0x34, 0x59, 0x54, 0x10, 0xe7, 0x35,\r
+ 0x32, 0x2a, 0x4b, 0x84, 0xb6, 0xf3, 0x96, 0x81, 0x66, 0x8c, 0xc4, 0xd4,\r
+ 0x16, 0xad, 0x26, 0xd1, 0x54, 0xc4, 0x94, 0x71, 0xcc, 0x55, 0xd3, 0x9a,\r
+ 0x68, 0x82, 0xd2, 0xc9, 0xa0, 0xde, 0x9a, 0x48, 0x04, 0xf7, 0xb1, 0xdf,\r
+ 0x34, 0x91, 0xdb, 0x24, 0x1e, 0x5f, 0xd2, 0x4c, 0x8e, 0x9e, 0x15, 0xab,\r
+ 0xcf, 0xed, 0x58, 0x1b, 0x20, 0x6b, 0x60, 0x73, 0x77, 0x3b, 0x15, 0x9e,\r
+ 0xe2, 0x45, 0x94, 0x67, 0xf6, 0x60, 0x12, 0xbd, 0x64, 0xf4, 0xe2, 0xc0,\r
+ 0xd2, 0x8b, 0xe3, 0x8b, 0xb5, 0x97, 0x8f, 0x4a, 0x36, 0x7e, 0xe2, 0x2c,\r
+ 0xd3, 0xdb, 0x49, 0xf6, 0xde, 0xce, 0x8e, 0x95, 0x2b, 0x71, 0xba, 0xe9,\r
+ 0xed, 0x94, 0x8a, 0x4e, 0x56, 0x58, 0x7a, 0x71, 0x76, 0xc2, 0xa3, 0x8b,\r
+ 0xc5, 0x7c, 0xe0, 0xe9, 0xed, 0xec, 0x83, 0x35, 0x33, 0x5d, 0x5c, 0x46,\r
+ 0x97, 0x34, 0xed, 0x52, 0xa6, 0x7c, 0x0c, 0xea, 0x85, 0x11, 0x04, 0x2c,\r
+ 0x77, 0x48, 0x22, 0xab, 0xea, 0x92, 0x59, 0x71, 0x2b, 0x06, 0xdb, 0xd7,\r
+ 0x29, 0x9f, 0x38, 0x53, 0xf5, 0xf6, 0xa1, 0xd2, 0x3e, 0x69, 0x22, 0xfa,\r
+ 0xc8, 0xd2, 0xc7, 0xa6, 0x78, 0x74, 0x31, 0x0b, 0x35, 0x0c, 0x6d, 0x7d,\r
+ 0x9d, 0x9c, 0xb6, 0x82, 0xb0, 0x80, 0x35, 0xa8, 0xd6, 0xde, 0xd7, 0x25,\r
+ 0xc5, 0x36, 0xa6, 0x90, 0xf7, 0xe3, 0x18, 0xd8, 0xdf, 0x41, 0xde, 0xfe,\r
+ 0xb1, 0xee, 0x56, 0xd4, 0x3f, 0xce, 0x6c, 0xbb, 0x54, 0x2c, 0x9e, 0xed,\r
+ 0xf7, 0xfb, 0x33, 0xfc, 0x5c, 0xf0, 0xb9, 0xa3, 0xbc, 0x29, 0x91, 0xa5,\r
+ 0xa9, 0x37, 0x27, 0xe6, 0x99, 0x13, 0xf3, 0xcd, 0x89, 0x05, 0xe6, 0xc4,\r
+ 0x42, 0x73, 0x62, 0x91, 0x39, 0xd1, 0x60, 0x4e, 0x34, 0x9a, 0x5a, 0x53,\r
+ 0x6f, 0xe2, 0xe7, 0x99, 0xf8, 0xf9, 0x26, 0x7e, 0x81, 0x89, 0x5f, 0x68,\r
+ 0xe2, 0x17, 0x99, 0xf8, 0x06, 0x13, 0xdf, 0x38, 0x5a, 0xd9, 0xca, 0x48,\r
+ 0x70, 0x47, 0x92, 0xf2, 0xb3, 0xb6, 0x24, 0x2a, 0x0e, 0x8e, 0xb3, 0xf5,\r
+ 0x71, 0x0e, 0x76, 0xe0, 0xae, 0xe0, 0xb6, 0x50, 0x84, 0x2c, 0xc1, 0xc1,\r
+ 0x41, 0x9a, 0x8c, 0xc7, 0xf8, 0x7b, 0x2f, 0xb9, 0x83, 0xdb, 0x71, 0xfa,\r
+ 0x63, 0x1f, 0x54, 0x01, 0x7f, 0x90, 0x3c, 0x7c, 0xf0, 0x58, 0x3e, 0x9c,\r
+ 0x4a, 0xc5, 0xa2, 0xdd, 0x09, 0x94, 0x2e, 0x45, 0xa1, 0xed, 0x38, 0x77,\r
+ 0x98, 0xad, 0xec, 0xdb, 0x62, 0xb0, 0xd8, 0x45, 0xf6, 0x81, 0x20, 0x36,\r
+ 0x88, 0x41, 0x72, 0x2b, 0x6a, 0x3a, 0xe9, 0xe7, 0x0f, 0x64, 0x5d, 0x0e,\r
+ 0x6c, 0x38, 0x29, 0x07, 0x13, 0x54, 0xc8, 0xa1, 0x2e, 0x64, 0x32, 0x2b,\r
+ 0x91, 0x02, 0xd3, 0x1e, 0xa5, 0x8f, 0xc5, 0x94, 0x3b, 0xc0, 0x3b, 0x02,\r
+ 0x9f, 0x33, 0x5b, 0x53, 0x54, 0x90, 0x49, 0xb4, 0xc5, 0x86, 0xa3, 0x29,\r
+ 0x14, 0x0e, 0x2b, 0x9c, 0x4e, 0x93, 0x52, 0x46, 0xc5, 0xfa, 0x4c, 0x9d,\r
+ 0x5c, 0x2e, 0x1b, 0xaa, 0x1a, 0x49, 0x53, 0x07, 0x12, 0xa1, 0x60, 0x6a,\r
+ 0xec, 0x36, 0xc3, 0xbb, 0x2b, 0x39, 0x06, 0x63, 0xf2, 0xa8, 0x45, 0xce,\r
+ 0x90, 0x3e, 0x55, 0x82, 0x8b, 0x0e, 0x26, 0x37, 0x85, 0x53, 0x43, 0xe4,\r
+ 0xdb, 0x8e, 0x03, 0xe8, 0xb8, 0xf9, 0x92, 0xcb, 0xf7, 0xf1, 0x30, 0x50,\r
+ 0x0e, 0x5b, 0xc8, 0x33, 0x13, 0xe5, 0x6d, 0x1f, 0x3d, 0x3a, 0x0d, 0xd2,\r
+ 0x54, 0xac, 0xe1, 0xac, 0x9c, 0xd2, 0x88, 0x83, 0x7f, 0xc7, 0x20, 0x4d,\r
+ 0x3b, 0x55, 0x99, 0x75, 0x9b, 0xc9, 0x91, 0x5a, 0x39, 0x2a, 0x85, 0x19,\r
+ 0x76, 0x4d, 0x30, 0xb9, 0x13, 0xc5, 0x4e, 0x60, 0xc1, 0xe8, 0x7d, 0x22,\r
+ 0x3d, 0x48, 0x6e, 0x88, 0xdb, 0x82, 0x89, 0x50, 0xaa, 0x1b, 0x1b, 0x88,\r
+ 0xcc, 0x59, 0xcc, 0x12, 0x84, 0xf4, 0x0e, 0x9c, 0xa0, 0xf7, 0xae, 0x8c,\r
+ 0x25, 0xd4, 0x00, 0xe5, 0x6b, 0x29, 0x5c, 0x23, 0x94, 0x48, 0x92, 0x93,\r
+ 0x93, 0xbc, 0xdc, 0xa8, 0x88, 0x39, 0xde, 0xa6, 0x78, 0xff, 0xe1, 0x63,\r
+ 0x6f, 0x7b, 0x54, 0x55, 0x96, 0x25, 0xec, 0x49, 0x05, 0x13, 0x29, 0x72,\r
+ 0x49, 0xb1, 0x9e, 0x1d, 0x8e, 0x95, 0xe9, 0x81, 0xcb, 0xe3, 0x04, 0x1f,\r
+ 0x2e, 0x03, 0x61, 0x0c, 0xe8, 0x64, 0xa4, 0x64, 0xa7, 0x43, 0x83, 0xa7,\r
+ 0xc6, 0x36, 0xdf, 0x69, 0x55, 0xb2, 0x99, 0x7a, 0x0c, 0xce, 0x0a, 0x85,\r
+ 0x77, 0x0c, 0xa5, 0x64, 0x39, 0x67, 0x81, 0x8b, 0x70, 0x2a, 0x34, 0xb8,\r
+ 0x21, 0xb4, 0x03, 0xfd, 0x5b, 0x8e, 0x27, 0x9c, 0x66, 0x3c, 0x15, 0xb7,\r
+ 0x9c, 0xbb, 0x23, 0x4b, 0x35, 0x8f, 0xfa, 0x84, 0xb4, 0x30, 0xeb, 0x10,\r
+ 0x44, 0x67, 0xa6, 0xc5, 0x81, 0x7d, 0xf1, 0x10, 0x46, 0x8a, 0x8f, 0x24,\r
+ 0xbd, 0xe1, 0x44, 0x6a, 0x38, 0x18, 0x49, 0x1f, 0x0a, 0x58, 0x23, 0xbb,\r
+ 0xda, 0x11, 0x4d, 0xa6, 0x82, 0xd8, 0x20, 0xe5, 0xc4, 0x64, 0x69, 0xb9,\r
+ 0xc6, 0x2e, 0xbd, 0x85, 0xac, 0x8b, 0xf6, 0xc0, 0xe5, 0x42, 0x51, 0x39,\r
+ 0x20, 0xa8, 0x2c, 0x88, 0x71, 0x4b, 0x85, 0x64, 0x9f, 0x54, 0xd5, 0x32,\r
+ 0xbb, 0xee, 0xaa, 0x72, 0xe4, 0xbc, 0x51, 0x01, 0x5a, 0xea, 0x40, 0x6a,\r
+ 0x43, 0x70, 0xcf, 0xd9, 0x69, 0x66, 0xb3, 0xac, 0x7c, 0x43, 0x2c, 0x96,\r
+ 0xe2, 0xae, 0xc8, 0xdc, 0x99, 0xab, 0x0e, 0x77, 0xd7, 0x63, 0x16, 0xa8,\r
+ 0x49, 0x62, 0x8f, 0xe8, 0xd9, 0x87, 0xd5, 0xbd, 0xab, 0x07, 0x3b, 0x48,\r
+ 0x18, 0x4d, 0x2e, 0x80, 0x44, 0x8d, 0xf6, 0x06, 0xb9, 0x2c, 0xd8, 0x22,\r
+ 0x80, 0x43, 0x41, 0x64, 0xed, 0xf0, 0x2e, 0xf6, 0x09, 0xe5, 0x04, 0x1b,\r
+ 0xf9, 0xc6, 0x15, 0x09, 0x47, 0x31, 0x9a, 0x6c, 0x95, 0x94, 0xd9, 0x36,\r
+ 0x46, 0xc3, 0xbc, 0xf0, 0xd8, 0x4a, 0x1a, 0x9d, 0x7a, 0x32, 0x97, 0x7e,\r
+ 0xd5, 0x1b, 0xce, 0x04, 0x24, 0xce, 0xb3, 0x09, 0x0b, 0x23, 0xb6, 0x27,\r
+ 0x10, 0xdb, 0x89, 0x71, 0x98, 0x96, 0x49, 0x4b, 0xa3, 0x48, 0x08, 0xa7,\r
+ 0xac, 0x78, 0x24, 0xb8, 0x4f, 0xad, 0x3c, 0x2b, 0xb4, 0x67, 0xcb, 0xe7,\r
+ 0x66, 0x9a, 0x84, 0xe5, 0x83, 0x8b, 0x60, 0xd6, 0xe2, 0x38, 0x2b, 0xc6,\r
+ 0x55, 0x14, 0x6a, 0x4d, 0x3c, 0xde, 0x1d, 0x64, 0xc7, 0x21, 0x77, 0x46,\r
+ 0xb0, 0x21, 0x94, 0xc4, 0x11, 0x23, 0x23, 0x59, 0x9e, 0x09, 0x5c, 0x94,\r
+ 0xaf, 0x24, 0x2b, 0xf4, 0x1a, 0xd7, 0x49, 0x4c, 0xdc, 0x8a, 0xd8, 0x9e,\r
+ 0x28, 0xe5, 0x66, 0x92, 0x1b, 0xe3, 0x54, 0x9c, 0x49, 0xc8, 0x49, 0x3d,\r
+ 0x2b, 0x3c, 0x38, 0x88, 0x96, 0xeb, 0x5a, 0xd7, 0xc4, 0x50, 0xa5, 0xcc,\r
+ 0x93, 0x25, 0x48, 0x04, 0x77, 0xa4, 0xcb, 0x94, 0x02, 0x14, 0xa3, 0xcb,\r
+ 0x94, 0x57, 0x66, 0x2a, 0xd2, 0x89, 0x50, 0x02, 0xe1, 0x68, 0x97, 0x5e,\r
+ 0xd3, 0x79, 0x43, 0x58, 0xe5, 0xe9, 0x6a, 0xa8, 0x84, 0x53, 0x3d, 0xb1,\r
+ 0xed, 0xda, 0x5d, 0x13, 0xb1, 0x5d, 0x6a, 0xa0, 0xc8, 0x39, 0x84, 0x12,\r
+ 0x64, 0x8c, 0xb1, 0x0e, 0xc5, 0x92, 0x58, 0x75, 0x58, 0x53, 0xeb, 0xe4,\r
+ 0x91, 0x24, 0x49, 0x85, 0xfc, 0x26, 0x26, 0x1c, 0x8c, 0xb4, 0x05, 0xe3,\r
+ 0xc9, 0x35, 0x98, 0x18, 0xca, 0xd7, 0x02, 0x38, 0x01, 0xfb, 0x43, 0xe1,\r
+ 0x68, 0x52, 0x79, 0x43, 0x4e, 0x38, 0xed, 0xe0, 0x94, 0x27, 0xd9, 0x73,\r
+ 0xd5, 0xa5, 0x80, 0x3c, 0x88, 0x9d, 0xa1, 0x84, 0xac, 0xa7, 0x55, 0x45,\r
+ 0x10, 0x72, 0xa2, 0xde, 0xde, 0x60, 0x64, 0x38, 0x44, 0xf6, 0x30, 0x4e,\r
+ 0x45, 0x3b, 0x43, 0xa8, 0x3a, 0x99, 0x71, 0x7c, 0x67, 0x38, 0xb9, 0x2e,\r
+ 0x1e, 0xc4, 0x31, 0x11, 0x59, 0x93, 0x99, 0xc5, 0x2b, 0x5f, 0x86, 0x60,\r
+ 0xc9, 0x43, 0x14, 0xc3, 0xc9, 0xad, 0x7d, 0x6f, 0x3c, 0x12, 0x4b, 0x04,\r
+ 0x95, 0x7b, 0x72, 0x68, 0x18, 0x44, 0x0b, 0x92, 0x7a, 0xee, 0xa9, 0x64,\r
+ 0xe7, 0x69, 0xde, 0xd6, 0xe4, 0xa7, 0x15, 0x3d, 0x43, 0x3c, 0xd4, 0xb6,\r
+ 0x88, 0xdc, 0xba, 0xec, 0x91, 0x50, 0x74, 0x07, 0x82, 0xb1, 0x35, 0xca,\r
+ 0x53, 0x98, 0x17, 0x35, 0x87, 0x4a, 0x7b, 0x6c, 0x1b, 0x87, 0x7f, 0xf2,\r
+ 0xc6, 0xb6, 0x6f, 0x4f, 0x86, 0x52, 0xcb, 0xf7, 0xb5, 0xa5, 0xf7, 0x87,\r
+ 0x24, 0x79, 0x62, 0xd1, 0xf4, 0x3b, 0x9a, 0x36, 0xb9, 0x01, 0x20, 0x2c,\r
+ 0x8c, 0x8a, 0x56, 0x84, 0x92, 0xa9, 0x44, 0x6c, 0x1f, 0x7b, 0xcd, 0xa8,\r
+ 0x50, 0x7b, 0x96, 0x29, 0x67, 0xda, 0xb5, 0xa6, 0x8e, 0x8a, 0x7a, 0x82,\r
+ 0x23, 0xa1, 0xf4, 0x70, 0xa8, 0x85, 0x6d, 0xb2, 0x97, 0xc3, 0x9d, 0x5d,\r
+ 0x44, 0x4f, 0x2a, 0x16, 0x8f, 0x43, 0x54, 0x82, 0x70, 0x2d, 0xdb, 0x71,\r
+ 0xca, 0xa5, 0x0d, 0x9d, 0x88, 0xc2, 0x93, 0xf6, 0x50, 0x7e, 0xcc, 0x7c,\r
+ 0xfb, 0xa6, 0x82, 0x58, 0xd6, 0x56, 0x4d, 0x79, 0xb1, 0xa8, 0x5c, 0x09,\r
+ 0x32, 0xc2, 0x52, 0x4e, 0x2c, 0x9a, 0x76, 0xe3, 0x7c, 0xc9, 0xae, 0x19,\r
+ 0x8e, 0xa4, 0xc2, 0x71, 0x0c, 0xaf, 0x43, 0x26, 0xe1, 0x8a, 0x4e, 0xde,\r
+ 0xfc, 0x65, 0x56, 0x58, 0xf4, 0x84, 0xcf, 0x0f, 0xa5, 0xf7, 0xa6, 0x5c,\r
+ 0x24, 0x11, 0xcd, 0x5b, 0xe1, 0xe1, 0x83, 0x52, 0x87, 0x44, 0x5a, 0xa7,\r
+ 0x93, 0x1b, 0x42, 0xbb, 0x50, 0x97, 0x4c, 0x9a, 0xb7, 0x7b, 0xb4, 0x41,\r
+ 0x4d, 0xb0, 0x6c, 0x83, 0x3d, 0xa6, 0x3c, 0xc1, 0x16, 0x97, 0xde, 0x9e,\r
+ 0x1f, 0xcf, 0xf2, 0xf3, 0xe9, 0xf1, 0x58, 0x7c, 0x38, 0x72, 0xda, 0x8d,\r
+ 0xd7, 0x83, 0x6d, 0x25, 0x95, 0xf5, 0x96, 0x83, 0x1c, 0x09, 0xf5, 0x26,\r
+ 0x8d, 0xca, 0x12, 0x88, 0xe4, 0x70, 0x8a, 0xc4, 0xe9, 0x5f, 0xb2, 0xd1,\r
+ 0xb4, 0x84, 0x6c, 0xe2, 0x69, 0xce, 0x33, 0x2e, 0xa5, 0xe5, 0xae, 0x50,\r
+ 0x1e, 0x8e, 0x2f, 0x3c, 0x2d, 0x72, 0xdc, 0xc9, 0x02, 0x3f, 0xa1, 0x82,\r
+ 0x24, 0x6f, 0x61, 0x99, 0xb7, 0x5e, 0x94, 0x97, 0xd4, 0x1b, 0x92, 0xdc,\r
+ 0xc7, 0x4a, 0xcc, 0xa9, 0x0e, 0xd5, 0x63, 0xb9, 0xcc, 0x8a, 0x93, 0xe3,\r
+ 0xec, 0x37, 0x32, 0x33, 0xaa, 0xc7, 0xf1, 0x89, 0xd7, 0xd7, 0x24, 0xa4,\r
+ 0xc6, 0x7d, 0x8d, 0x22, 0xed, 0x32, 0x51, 0x9a, 0x1c, 0x9c, 0xe2, 0xe6,\r
+ 0x4d, 0x48, 0xa6, 0x23, 0xf5, 0xc6, 0xb0, 0x29, 0x86, 0x4e, 0x1d, 0x57,\r
+ 0xcc, 0xdb, 0x71, 0x30, 0x25, 0x5b, 0x18, 0x08, 0x61, 0x67, 0x4e, 0x04,\r
+ 0x13, 0xfb, 0xd2, 0x21, 0x1b, 0x9b, 0x34, 0xe5, 0x26, 0x55, 0x74, 0x5e,\r
+ 0x2b, 0xc3, 0x5d, 0x32, 0x2b, 0x2a, 0xbb, 0xd2, 0x49, 0x74, 0x91, 0x07,\r
+ 0x60, 0x53, 0x38, 0x12, 0x59, 0x1b, 0x4b, 0x49, 0xdf, 0xcb, 0x4b, 0x62,\r
+ 0xc9, 0x65, 0x82, 0x52, 0x3e, 0xa7, 0x32, 0x41, 0x09, 0xc6, 0x3c, 0x7c,\r
+ 0xaa, 0x1f, 0x5c, 0x49, 0x7e, 0x12, 0x2e, 0x3d, 0x9a, 0xcc, 0x4d, 0x0e,\r
+ 0x6f, 0x4b, 0xdf, 0x1c, 0x29, 0x07, 0x89, 0xa4, 0xbc, 0x68, 0x91, 0x3d,\r
+ 0xa5, 0x76, 0xfb, 0x99, 0xa9, 0xec, 0x3d, 0x7e, 0xd5, 0xa9, 0x67, 0x95,\r
+ 0x59, 0xe3, 0x18, 0x8c, 0x39, 0xba, 0x94, 0x8f, 0x35, 0x3a, 0xcd, 0xa9,\r
+ 0xe0, 0xcc, 0x2f, 0x61, 0xc9, 0x51, 0x72, 0xc6, 0x58, 0xbb, 0xac, 0x2d,\r
+ 0x7d, 0xfa, 0x58, 0xbd, 0x79, 0xff, 0x1c, 0xa7, 0x5b, 0xd9, 0xdb, 0xa9,\r
+ 0xef, 0x14, 0x83, 0x8e, 0x31, 0xa1, 0x76, 0x8c, 0xc5, 0x98, 0x88, 0x7a,\r
+ 0xea, 0xd0, 0xf4, 0x8c, 0xe7, 0x80, 0xa7, 0x76, 0xb8, 0xe7, 0x34, 0xce,\r
+ 0x61, 0x4f, 0x0d, 0x85, 0x71, 0x77, 0xd2, 0x74, 0x2e, 0x39, 0x53, 0x31,\r
+ 0x75, 0x27, 0x26, 0x0b, 0x26, 0x94, 0x4a, 0x87, 0xe3, 0x83, 0x58, 0xae,\r
+ 0xe9, 0xe3, 0x5c, 0xc6, 0x55, 0x79, 0x53, 0xd2, 0x07, 0xb7, 0x0a, 0x65,\r
+ 0xa2, 0x52, 0xfa, 0x68, 0xc8, 0x26, 0xea, 0xac, 0xc0, 0x86, 0x99, 0xc3,\r
+ 0xe0, 0x0c, 0xb3, 0xe9, 0x38, 0xfa, 0x52, 0xb3, 0x3e, 0xab, 0xae, 0x8c,\r
+ 0x89, 0x6d, 0x44, 0x6e, 0x43, 0x0e, 0x49, 0xd6, 0x6d, 0x27, 0xeb, 0x88,\r
+ 0x3c, 0xfd, 0xf0, 0xd3, 0x1c, 0xce, 0xdc, 0x23, 0xa7, 0x1e, 0x47, 0x12,\r
+ 0x17, 0x5f, 0xbc, 0xa2, 0xe1, 0x82, 0x32, 0x0e, 0x14, 0x38, 0xcb, 0x97,\r
+ 0x2d, 0x2e, 0x83, 0x23, 0x95, 0x55, 0x97, 0x0d, 0xa0, 0xc1, 0xe1, 0x88,\r
+ 0xdc, 0x96, 0x6a, 0x76, 0x61, 0x3d, 0x43, 0x91, 0x40, 0xc5, 0xc1, 0x64,\r
+ 0x08, 0xca, 0xa1, 0x60, 0xb2, 0x06, 0x37, 0x14, 0x84, 0x96, 0xe1, 0x5d,\r
+ 0xc9, 0xb2, 0xc5, 0xdb, 0x83, 0x91, 0x64, 0xa8, 0xba, 0x6c, 0x57, 0x38,\r
+ 0x5a, 0x13, 0x8c, 0x87, 0xcb, 0x16, 0xcf, 0x5d, 0x58, 0x5d, 0x86, 0xa2,\r
+ 0x93, 0xc8, 0x8b, 0x6c, 0xf3, 0x6a, 0xe7, 0xd5, 0xd6, 0xfb, 0x6b, 0x06,\r
+ 0x43, 0x23, 0x55, 0xc1, 0x58, 0x32, 0xbe, 0xa0, 0xec, 0x22, 0x32, 0xea,\r
+ 0xc5, 0x6b, 0xc6, 0x34, 0x67, 0x89, 0xb5, 0x64, 0x5e, 0x89, 0xbd, 0x64,\r
+ 0xa0, 0x64, 0x71, 0x49, 0x1f, 0x7e, 0x73, 0x8c, 0x3a, 0x88, 0x27, 0xd5,\r
+ 0x1a, 0x7e, 0xe3, 0x76, 0x61, 0x9d, 0x72, 0x8d, 0x51, 0x92, 0x3b, 0xca,\r
+ 0xe6, 0xab, 0x3c, 0x76, 0xe4, 0x39, 0xa7, 0xc4, 0x83, 0x3c, 0xed, 0x25,\r
+ 0x4e, 0xa5, 0xf5, 0x42, 0x3b, 0x45, 0x65, 0xad, 0x56, 0x12, 0x03, 0x92,\r
+ 0x1d, 0xa3, 0xca, 0xa9, 0xc6, 0x5c, 0xce, 0x2a, 0x26, 0x55, 0x8d, 0x96,\r
+ 0x91, 0xae, 0xd3, 0xa5, 0xcc, 0x72, 0x60, 0xb6, 0x3d, 0xad, 0xb5, 0x99,\r
+ 0xb4, 0x32, 0xa7, 0x6d, 0x52, 0xe5, 0xa4, 0x8a, 0x49, 0xe5, 0x93, 0xaa,\r
+ 0x27, 0xd5, 0x90, 0xd5, 0x6e, 0xcf, 0x35, 0x84, 0x97, 0x7f, 0x17, 0x5e,\r
+ 0xb2, 0xdf, 0x7a, 0xb2, 0xc2, 0xe2, 0x7a, 0xab, 0xdc, 0xe6, 0xda, 0x5f,\r
+ 0x23, 0x5c, 0x2f, 0x00, 0xef, 0x02, 0x57, 0xd6, 0x2e, 0x12, 0x07, 0x2b,\r
+ 0x85, 0x38, 0x5a, 0x69, 0x88, 0x87, 0x41, 0x4f, 0x02, 0x1f, 0x73, 0xba,\r
+ 0x8a, 0xac, 0xc2, 0x28, 0x34, 0x84, 0xfc, 0x5d, 0xbe, 0x7f, 0xbf, 0xf5,\r
+ 0xf5, 0xba, 0x36, 0xb1, 0xdf, 0x0f, 0x8b, 0x5a, 0x32, 0x84, 0xb5, 0xe8,\r
+ 0x88, 0x4f, 0x78, 0xdb, 0x51, 0xe8, 0x91, 0x79, 0x2b, 0xc5, 0xc3, 0x10,\r
+ 0x7f, 0x58, 0x2f, 0xc4, 0xc3, 0x73, 0x85, 0xb8, 0xbb, 0x1e, 0x6a, 0x31,\r
+ 0xc1, 0x10, 0x47, 0x7c, 0x9d, 0xc8, 0x75, 0x7c, 0xde, 0x6a, 0xf1, 0xca,\r
+ 0x3c, 0xb2, 0xd8, 0xa9, 0x84, 0x73, 0x08, 0x6f, 0x17, 0xf2, 0xdc, 0xb9,\r
+ 0x40, 0x1c, 0xf6, 0x9d, 0xe4, 0xc7, 0x07, 0xfc, 0x38, 0xb2, 0x40, 0x18,\r
+ 0x87, 0x17, 0x0a, 0xe3, 0xf8, 0x42, 0x12, 0x22, 0x77, 0x8a, 0x77, 0x03,\r
+ 0xb7, 0xb5, 0xa1, 0x47, 0x7c, 0xbc, 0x10, 0xed, 0x58, 0x84, 0x62, 0x81,\r
+ 0x93, 0xc0, 0xc7, 0xcc, 0x37, 0x40, 0x06, 0x7c, 0x08, 0x9c, 0x84, 0xfe,\r
+ 0x48, 0x23, 0xaa, 0x6c, 0x24, 0x47, 0xfd, 0xcc, 0xa9, 0x5e, 0xd9, 0x56,\r
+ 0xaf, 0xfa, 0x3d, 0x07, 0x65, 0xbc, 0xb0, 0x0a, 0x85, 0x1f, 0x6d, 0xc2,\r
+ 0xe3, 0x85, 0x15, 0x78, 0xec, 0x5f, 0x8d, 0xc7, 0x09, 0x29, 0x93, 0x1c,\r
+ 0x2b, 0x5e, 0x5f, 0x89, 0xc7, 0xa7, 0xfc, 0x78, 0x89, 0x93, 0xbf, 0x67,\r
+ 0xbb, 0xe3, 0xac, 0x3d, 0xca, 0x76, 0xcf, 0x32, 0x77, 0xb0, 0x1d, 0x8f,\r
+ 0x9b, 0xf9, 0xf1, 0x18, 0x3f, 0x4e, 0xb6, 0xdb, 0x0f, 0x18, 0x24, 0x00,\r
+ 0x8b, 0x71, 0x74, 0x05, 0x53, 0x83, 0xe1, 0xfa, 0xb0, 0xdd, 0xa1, 0xe5,\r
+ 0x7f, 0x0f, 0x26, 0x00, 0xae, 0xcb, 0xc1, 0x7f, 0x59, 0xc0, 0x3e, 0x2e,\r
+ 0x5e, 0x5f, 0x2d, 0xc4, 0x95, 0x5d, 0x42, 0xdc, 0x09, 0xbc, 0xdb, 0x24,\r
+ 0xc4, 0xab, 0x5d, 0x16, 0xf1, 0x6c, 0xa3, 0x9d, 0xde, 0x5d, 0x3c, 0x41,\r
+ 0x5c, 0xb7, 0x46, 0x88, 0xfd, 0xcd, 0x18, 0x24, 0xe0, 0x25, 0xf0, 0x6f,\r
+ 0x01, 0x1f, 0x03, 0xb7, 0xae, 0x45, 0x1a, 0x78, 0x0b, 0xf8, 0x18, 0x78,\r
+ 0x1d, 0x03, 0x77, 0xe5, 0x3a, 0x21, 0x1e, 0x63, 0xc0, 0xf6, 0xc8, 0x12,\r
+ 0x21, 0x0e, 0x2e, 0x15, 0xe2, 0xba, 0x65, 0xc2, 0xfa, 0xee, 0x3a, 0x61,\r
+ 0xdd, 0xdf, 0x2d, 0xc4, 0x0b, 0xcb, 0x6c, 0xe2, 0x38, 0xe8, 0xad, 0xeb,\r
+ 0xe1, 0x1c, 0xc0, 0xab, 0xeb, 0x49, 0xfd, 0xf0, 0x67, 0x8d, 0x81, 0x55,\r
+ 0xea, 0xb3, 0xc7, 0x9d, 0xa0, 0x09, 0x13, 0x7f, 0xd1, 0x2a, 0xa5, 0x3f,\r
+ 0x6c, 0x92, 0xdd, 0xa8, 0xf9, 0xdb, 0x41, 0xef, 0x59, 0xa5, 0x3e, 0xdf,\r
+ 0x64, 0xf9, 0xc3, 0xc0, 0x4f, 0xb5, 0xfd, 0x0b, 0x26, 0xfb, 0xd7, 0xb4,\r
+ 0xec, 0x0f, 0x9a, 0xfe, 0x0d, 0x34, 0xde, 0x39, 0x5a, 0x37, 0xe9, 0xcf,\r
+ 0x5d, 0x87, 0x20, 0xbb, 0x50, 0xcb, 0xd3, 0x3f, 0x47, 0x4e, 0xb1, 0xe3,\r
+ 0xef, 0x1f, 0x39, 0x0c, 0xd9, 0x4d, 0xa7, 0xd8, 0xdd, 0x79, 0x4a, 0xfa,\r
+ 0x89, 0x53, 0xf2, 0xf1, 0xf7, 0x8b, 0x3c, 0x0c, 0xd9, 0x2b, 0xa7, 0xc8,\r
+ 0xf9, 0xff, 0x06, 0xbf, 0xd0, 0x39, 0xfa, 0xbd, 0x1c, 0xc2, 0x44, 0xd3,\r
+ 0xdf, 0xa3, 0xc5, 0xfd, 0x48, 0x7f, 0x97, 0x16, 0xf7, 0x35, 0xfd, 0x7d,\r
+ 0x5a, 0xfc, 0x59, 0x6c, 0xfa, 0x3b, 0xb5, 0xf8, 0x73, 0xda, 0xf4, 0xf7,\r
+ 0x6a, 0xf1, 0x67, 0xd4, 0xe9, 0xef, 0xd6, 0x12, 0x3e, 0xf5, 0x1d, 0x27,\r
+ 0xfc, 0xfd, 0x5a, 0x16, 0x9f, 0xfa, 0x6c, 0x98, 0xff, 0xaf, 0x9d, 0x70,\r
+ 0xab, 0xef, 0x55, 0xe1, 0xff, 0x53, 0x68, 0xf8, 0x54, 0x5d, 0xbe, 0x5a,\r
+ 0x94, 0xe9, 0x53, 0x7f, 0x43, 0xc3, 0xf3, 0x41, 0x3e, 0x55, 0x0e, 0xff,\r
+ 0x5f, 0x43, 0x8b, 0x5b, 0xfd, 0xdd, 0xc0, 0x20, 0xda, 0x6a, 0xd7, 0x72,\r
+ 0xfe, 0x7f, 0x88, 0xdc, 0x70, 0x6e, 0x2b, 0x7f, 0xef, 0xd7, 0xff, 0x05,\r
+ 0xf3, 0x27, 0x9b, 0x95, 0x30, 0x4c, 0x00, 0x00\r
+};\r
\r
//==============================================================================\r
#if JUCE_PUSH_NOTIFICATIONS && JUCE_MODULE_AVAILABLE_juce_gui_extra\r
DECLARE_JNI_CLASS_WITH_MIN_SDK (AndroidWindowInsetsType, "android/view/WindowInsets$Type", 30)\r
#undef JNI_CLASS_MEMBERS\r
\r
+#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \\r
+ FIELD (first, "first", "Ljava/lang/Object;") \\r
+ FIELD (second, "second", "Ljava/lang/Object;") \\r
+\r
+ DECLARE_JNI_CLASS (AndroidPair, "android/util/Pair")\r
+#undef JNI_CLASS_MEMBERS\r
+\r
//==============================================================================\r
namespace\r
{\r
}\r
}\r
\r
- void handleKeyDownCallback (int k, int kc, int kbFlags)\r
+ static void handleKeyDownCallback (JNIEnv*, AndroidComponentPeer& t, int k, int kc, int kbFlags)\r
{\r
ModifierKeys::currentModifiers = ModifierKeys::currentModifiers.withOnlyMouseButtons()\r
.withFlags (translateAndroidKeyboardFlags (kbFlags));\r
- handleKeyPress (translateAndroidKeyCode (k), static_cast<juce_wchar> (kc));\r
+ t.handleKeyPress (translateAndroidKeyCode (k), static_cast<juce_wchar> (kc));\r
}\r
\r
- void handleKeyUpCallback (int /*k*/, int /*kc*/)\r
+ static void handleKeyUpCallback (JNIEnv*, [[maybe_unused]] AndroidComponentPeer& t, [[maybe_unused]] int k, [[maybe_unused]] int kc)\r
{\r
}\r
\r
- void handleBackButtonCallback()\r
+ static void handleBackButtonCallback (JNIEnv* env, AndroidComponentPeer& t)\r
{\r
bool handled = false;\r
\r
if (auto* app = JUCEApplicationBase::getInstance())\r
handled = app->backButtonPressed();\r
\r
- if (isKioskModeComponent())\r
- setNavBarsHidden (navBarsHidden);\r
+ if (t.isKioskModeComponent())\r
+ t.setNavBarsHidden (t.navBarsHidden);\r
\r
if (! handled)\r
{\r
- auto* env = getEnv();\r
LocalRef<jobject> activity (getCurrentActivity());\r
\r
if (activity != nullptr)\r
}\r
}\r
\r
- void handleKeyboardHiddenCallback()\r
+ static void handleKeyboardHiddenCallback (JNIEnv*, [[maybe_unused]] AndroidComponentPeer& t)\r
{\r
Component::unfocusAllComponents();\r
}\r
\r
- void handleAppPausedCallback() {}\r
+ static void handleAppPausedCallback (JNIEnv*, [[maybe_unused]] AndroidComponentPeer& t) {}\r
+\r
+ static void handleAppResumedCallback (JNIEnv*, AndroidComponentPeer& t)\r
+ {\r
+ if (t.isKioskModeComponent())\r
+ t.setNavBarsHidden (t.navBarsHidden);\r
+ }\r
+\r
+ static jlong handleGetFocusedTextInputTargetCallback (JNIEnv*, AndroidComponentPeer& t)\r
+ {\r
+ return reinterpret_cast<jlong> (t.findCurrentTextInputTarget());\r
+ }\r
\r
- void handleAppResumedCallback()\r
+ static void handleMovedOrResizedCallback (JNIEnv*, AndroidComponentPeer& t)\r
{\r
- if (isKioskModeComponent())\r
- setNavBarsHidden (navBarsHidden);\r
+ t.handleMovedOrResized();\r
}\r
\r
//==============================================================================\r
return nullptr;\r
}\r
\r
- jboolean populateAccessibilityNodeInfoCallback (jint virtualViewId, jobject info) const\r
+ static jboolean populateAccessibilityNodeInfoCallback (JNIEnv*, const AndroidComponentPeer& t, jint virtualViewId, jobject info)\r
{\r
- if (auto* handle = getNativeHandleForViewId (virtualViewId))\r
+ if (auto* handle = t.getNativeHandleForViewId (virtualViewId))\r
{\r
handle->populateNodeInfo (info);\r
return true;\r
return false;\r
}\r
\r
- jboolean handlePerformActionCallback (jint virtualViewId, jint action, jobject arguments) const\r
+ static jboolean handlePerformActionCallback (JNIEnv*, const AndroidComponentPeer& t, jint virtualViewId, jint action, jobject arguments)\r
{\r
- if (auto* handle = getNativeHandleForViewId (virtualViewId))\r
+ if (auto* handle = t.getNativeHandleForViewId (virtualViewId))\r
return handle->performAction (action, arguments);\r
\r
return false;\r
}\r
\r
- static jobject getFocusViewIdForHandler (const AccessibilityHandler* handler)\r
+ static jobject getFocusViewIdForHandler (JNIEnv* env, const AccessibilityHandler* handler)\r
{\r
if (handler != nullptr)\r
- return getEnv()->NewObject (JavaInteger,\r
- JavaInteger.constructor,\r
- handler->getNativeImplementation()->getVirtualViewId());\r
+ return env->NewObject (JavaInteger,\r
+ JavaInteger.constructor,\r
+ handler->getNativeImplementation()->getVirtualViewId());\r
\r
return nullptr;\r
}\r
\r
- jobject getInputFocusViewIdCallback()\r
+ static jobject getInputFocusViewIdCallback (JNIEnv* env, AndroidComponentPeer& t)\r
{\r
- if (auto* comp = dynamic_cast<Component*> (findCurrentTextInputTarget()))\r
- return getFocusViewIdForHandler (comp->getAccessibilityHandler());\r
+ if (auto* comp = dynamic_cast<Component*> (t.findCurrentTextInputTarget()))\r
+ return getFocusViewIdForHandler (env, comp->getAccessibilityHandler());\r
\r
return nullptr;\r
}\r
\r
- jobject getAccessibilityFocusViewIdCallback() const\r
+ static jobject getAccessibilityFocusViewIdCallback (JNIEnv* env, const AndroidComponentPeer& t)\r
{\r
- if (auto* handler = component.getAccessibilityHandler())\r
+ if (auto* handler = t.component.getAccessibilityHandler())\r
{\r
if (auto* modal = Component::getCurrentlyModalComponent())\r
{\r
- if (! component.isParentOf (modal)\r
- && component.isCurrentlyBlockedByAnotherModalComponent())\r
+ if (! t.component.isParentOf (modal)\r
+ && t.component.isCurrentlyBlockedByAnotherModalComponent())\r
{\r
if (auto* modalHandler = modal->getAccessibilityHandler())\r
{\r
if (auto* focusChild = modalHandler->getChildFocus())\r
- return getFocusViewIdForHandler (focusChild);\r
+ return getFocusViewIdForHandler (env, focusChild);\r
\r
- return getFocusViewIdForHandler (modalHandler);\r
+ return getFocusViewIdForHandler (env, modalHandler);\r
}\r
}\r
}\r
\r
if (auto* focusChild = handler->getChildFocus())\r
- return getFocusViewIdForHandler (focusChild);\r
+ return getFocusViewIdForHandler (env, focusChild);\r
}\r
\r
return nullptr;\r
view.callBooleanMethod (AndroidView.requestFocus);\r
}\r
\r
- void handleFocusChangeCallback (bool hasFocus)\r
+ static void handleFocusChangeCallback (JNIEnv*, AndroidComponentPeer& t, bool hasFocus)\r
{\r
- if (isFullScreen())\r
- setFullScreen (true);\r
+ if (t.isFullScreen())\r
+ t.setFullScreen (true);\r
\r
if (hasFocus)\r
- handleFocusGain();\r
+ t.handleFocusGain();\r
else\r
- handleFocusLoss();\r
+ t.handleFocusLoss();\r
}\r
\r
- static const char* getVirtualKeyboardType (TextInputTarget::VirtualKeyboardType type) noexcept\r
+ void textInputRequired (Point<int>, TextInputTarget& target) override\r
{\r
- switch (type)\r
- {\r
- case TextInputTarget::textKeyboard: return "text";\r
- case TextInputTarget::numericKeyboard: return "number";\r
- case TextInputTarget::decimalKeyboard: return "numberDecimal";\r
- case TextInputTarget::urlKeyboard: return "textUri";\r
- case TextInputTarget::emailAddressKeyboard: return "textEmailAddress";\r
- case TextInputTarget::phoneNumberKeyboard: return "phone";\r
- default: jassertfalse; break;\r
- }\r
-\r
- return "text";\r
+ const auto region = target.getHighlightedRegion();\r
+ view.callVoidMethod (ComponentPeerView.showKeyboard,\r
+ static_cast<jint> (target.getKeyboardType()),\r
+ static_cast<jint> (region.getStart()),\r
+ static_cast<jint> (region.getEnd()));\r
}\r
\r
- void textInputRequired (Point<int>, TextInputTarget& target) override\r
+ void closeInputMethodContext() override\r
{\r
- view.callVoidMethod (ComponentPeerView.showKeyboard,\r
- javaString (getVirtualKeyboardType (target.getKeyboardType())).get());\r
+ getEnv()->CallVoidMethod (view, ComponentPeerView.closeInputMethodContext);\r
}\r
\r
void dismissPendingTextInput() override\r
{\r
closeInputMethodContext();\r
\r
- view.callVoidMethod (ComponentPeerView.showKeyboard, javaString ("").get());\r
+ view.callVoidMethod (ComponentPeerView.hideKeyboard);\r
\r
if (! isTimerRunning())\r
startTimer (500);\r
}\r
\r
//==============================================================================\r
- void handleDoFrameCallback ([[maybe_unused]] int64 frameTimeNanos)\r
+ static void handleDoFrameCallback (JNIEnv*, AndroidComponentPeer& t, [[maybe_unused]] int64 frameTimeNanos)\r
{\r
- vBlankListeners.call ([] (auto& l) { l.onVBlank(); });\r
+ t.vBlankListeners.call ([] (auto& l) { l.onVBlank(); });\r
}\r
\r
- void handlePaintCallback (jobject canvas, jobject paint)\r
+ static void handlePaintCallback (JNIEnv* env, AndroidComponentPeer& t, jobject canvas, jobject paint)\r
{\r
- auto* env = getEnv();\r
-\r
jobject rect = env->CallObjectMethod (canvas, AndroidCanvas.getClipBounds);\r
auto left = env->GetIntField (rect, AndroidRect.left);\r
auto top = env->GetIntField (rect, AndroidRect.top);\r
\r
auto sizeNeeded = clip.getWidth() * clip.getHeight();\r
\r
- if (sizeAllocated < sizeNeeded)\r
+ if (t.sizeAllocated < sizeNeeded)\r
{\r
- buffer.clear();\r
- sizeAllocated = sizeNeeded;\r
- buffer = GlobalRef (LocalRef<jobject> ((jobject) env->NewIntArray (sizeNeeded)));\r
+ t.buffer.clear();\r
+ t.sizeAllocated = sizeNeeded;\r
+ t.buffer = GlobalRef (LocalRef<jobject> ((jobject) env->NewIntArray (sizeNeeded)));\r
}\r
\r
- if (jint* dest = env->GetIntArrayElements ((jintArray) buffer.get(), nullptr))\r
+ if (jint* dest = env->GetIntArrayElements ((jintArray) t.buffer.get(), nullptr))\r
{\r
{\r
Image temp (new PreallocatedImage (clip.getWidth(), clip.getHeight(),\r
- dest, ! component.isOpaque()));\r
+ dest, ! t.component.isOpaque()));\r
\r
{\r
LowLevelGraphicsSoftwareRenderer g (temp);\r
g.setOrigin (-clip.getPosition());\r
- g.addTransform (AffineTransform::scale (scale));\r
- handlePaint (g);\r
+ g.addTransform (AffineTransform::scale (t.scale));\r
+ t.handlePaint (g);\r
}\r
}\r
\r
- env->ReleaseIntArrayElements ((jintArray) buffer.get(), dest, 0);\r
+ env->ReleaseIntArrayElements ((jintArray) t.buffer.get(), dest, 0);\r
\r
- env->CallVoidMethod (canvas, AndroidCanvas.drawBitmap, (jintArray) buffer.get(), 0, clip.getWidth(),\r
+ env->CallVoidMethod (canvas, AndroidCanvas.drawBitmap, (jintArray) t.buffer.get(), 0, clip.getWidth(),\r
(jfloat) clip.getX(), (jfloat) clip.getY(),\r
clip.getWidth(), clip.getHeight(), true, paint);\r
}\r
};\r
\r
private:\r
+ template <auto Member>\r
+ static void mouseCallbackWrapper (JNIEnv*, AndroidComponentPeer& t, jint i, jfloat x, jfloat y, jlong time) { return (t.*Member) (i, Point<float> { x, y }, time); }\r
+\r
//==============================================================================\r
- #define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \\r
- METHOD (create, "<init>", "(Landroid/content/Context;ZJ)V") \\r
- METHOD (clear, "clear", "()V") \\r
- METHOD (setViewName, "setViewName", "(Ljava/lang/String;)V") \\r
- METHOD (setVisible, "setVisible", "(Z)V") \\r
- METHOD (isVisible, "isVisible", "()Z") \\r
- METHOD (containsPoint, "containsPoint", "(II)Z") \\r
- METHOD (showKeyboard, "showKeyboard", "(Ljava/lang/String;)V") \\r
- METHOD (setSystemUiVisibilityCompat, "setSystemUiVisibilityCompat", "(I)V") \\r
- CALLBACK (handleDoFrameJni, "handleDoFrame", "(JJ)V") \\r
- CALLBACK (handlePaintJni, "handlePaint", "(JLandroid/graphics/Canvas;Landroid/graphics/Paint;)V") \\r
- CALLBACK (handleMouseDownJni, "handleMouseDown", "(JIFFJ)V") \\r
- CALLBACK (handleMouseDragJni, "handleMouseDrag", "(JIFFJ)V") \\r
- CALLBACK (handleMouseUpJni, "handleMouseUp", "(JIFFJ)V") \\r
- CALLBACK (handleAccessibleHoverJni, "handleAccessibilityHover", "(JIFFJ)V") \\r
- CALLBACK (handleKeyDownJni, "handleKeyDown", "(JIII)V") \\r
- CALLBACK (handleKeyUpJni, "handleKeyUp", "(JII)V") \\r
- CALLBACK (handleBackButtonJni, "handleBackButton", "(J)V") \\r
- CALLBACK (handleKeyboardHiddenJni, "handleKeyboardHidden", "(J)V") \\r
- CALLBACK (viewSizeChangedJni, "viewSizeChanged", "(J)V") \\r
- CALLBACK (focusChangedJni, "focusChanged", "(JZ)V") \\r
- CALLBACK (handleAppPausedJni, "handleAppPaused", "(J)V") \\r
- CALLBACK (handleAppResumedJni, "handleAppResumed", "(J)V") \\r
- CALLBACK (populateAccessibilityNodeInfoJni, "populateAccessibilityNodeInfo", "(JILandroid/view/accessibility/AccessibilityNodeInfo;)Z") \\r
- CALLBACK (handlePerformActionJni, "handlePerformAction", "(JIILandroid/os/Bundle;)Z") \\r
- CALLBACK (getInputFocusViewIdJni, "getInputFocusViewId", "(J)Ljava/lang/Integer;") \\r
- CALLBACK (getAccessibilityFocusViewIdJni, "getAccessibilityFocusViewId", "(J)Ljava/lang/Integer;") \\r
-\r
- DECLARE_JNI_CLASS_WITH_BYTECODE (ComponentPeerView, "com/rmsl/juce/ComponentPeerView", 16, javaComponentPeerView, sizeof (javaComponentPeerView))\r
- #undef JNI_CLASS_MEMBERS\r
-\r
- static void JNICALL handleDoFrameJni (JNIEnv*, jobject /*view*/, jlong host, jlong frameTimeNanos) { if (auto* myself = reinterpret_cast<AndroidComponentPeer*> (host)) myself->handleDoFrameCallback (frameTimeNanos); }\r
- static void JNICALL handlePaintJni (JNIEnv*, jobject /*view*/, jlong host, jobject canvas, jobject paint) { if (auto* myself = reinterpret_cast<AndroidComponentPeer*> (host)) myself->handlePaintCallback (canvas, paint); }\r
- static void JNICALL handleMouseDownJni (JNIEnv*, jobject /*view*/, jlong host, jint i, jfloat x, jfloat y, jlong time) { if (auto* myself = reinterpret_cast<AndroidComponentPeer*> (host)) myself->handleMouseDownCallback (i, Point<float> ((float) x, (float) y), (int64) time); }\r
- static void JNICALL handleMouseDragJni (JNIEnv*, jobject /*view*/, jlong host, jint i, jfloat x, jfloat y, jlong time) { if (auto* myself = reinterpret_cast<AndroidComponentPeer*> (host)) myself->handleMouseDragCallback (i, Point<float> ((float) x, (float) y), (int64) time); }\r
- static void JNICALL handleMouseUpJni (JNIEnv*, jobject /*view*/, jlong host, jint i, jfloat x, jfloat y, jlong time) { if (auto* myself = reinterpret_cast<AndroidComponentPeer*> (host)) myself->handleMouseUpCallback (i, Point<float> ((float) x, (float) y), (int64) time); }\r
- static void JNICALL handleAccessibleHoverJni(JNIEnv*, jobject /*view*/, jlong host, jint c, jfloat x, jfloat y, jlong time) { if (auto* myself = reinterpret_cast<AndroidComponentPeer*> (host)) myself->handleAccessibilityHoverCallback ((int) c, Point<float> ((float) x, (float) y), (int64) time); }\r
- static void JNICALL viewSizeChangedJni (JNIEnv*, jobject /*view*/, jlong host) { if (auto* myself = reinterpret_cast<AndroidComponentPeer*> (host)) myself->handleMovedOrResized(); }\r
- static void JNICALL focusChangedJni (JNIEnv*, jobject /*view*/, jlong host, jboolean hasFocus) { if (auto* myself = reinterpret_cast<AndroidComponentPeer*> (host)) myself->handleFocusChangeCallback (hasFocus); }\r
- static void JNICALL handleKeyDownJni (JNIEnv*, jobject /*view*/, jlong host, jint k, jint kc, jint kbFlags) { if (auto* myself = reinterpret_cast<AndroidComponentPeer*> (host)) myself->handleKeyDownCallback ((int) k, (int) kc, (int) kbFlags); }\r
- static void JNICALL handleKeyUpJni (JNIEnv*, jobject /*view*/, jlong host, jint k, jint kc) { if (auto* myself = reinterpret_cast<AndroidComponentPeer*> (host)) myself->handleKeyUpCallback ((int) k, (int) kc); }\r
- static void JNICALL handleBackButtonJni (JNIEnv*, jobject /*view*/, jlong host) { if (auto* myself = reinterpret_cast<AndroidComponentPeer*> (host)) myself->handleBackButtonCallback(); }\r
- static void JNICALL handleKeyboardHiddenJni (JNIEnv*, jobject /*view*/, jlong host) { if (auto* myself = reinterpret_cast<AndroidComponentPeer*> (host)) myself->handleKeyboardHiddenCallback(); }\r
- static void JNICALL handleAppPausedJni (JNIEnv*, jobject /*view*/, jlong host) { if (auto* myself = reinterpret_cast<AndroidComponentPeer*> (host)) myself->handleAppPausedCallback(); }\r
- static void JNICALL handleAppResumedJni (JNIEnv*, jobject /*view*/, jlong host) { if (auto* myself = reinterpret_cast<AndroidComponentPeer*> (host)) myself->handleAppResumedCallback(); }\r
-\r
- static jboolean JNICALL populateAccessibilityNodeInfoJni (JNIEnv*, jobject /*view*/, jlong host, jint virtualViewId, jobject info)\r
- {\r
- if (auto* myself = reinterpret_cast<AndroidComponentPeer*> (host))\r
- return myself->populateAccessibilityNodeInfoCallback (virtualViewId, info);\r
+ #define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \\r
+ METHOD (create, "<init>", "(Landroid/content/Context;ZJ)V") \\r
+ METHOD (clear, "clear", "()V") \\r
+ METHOD (setViewName, "setViewName", "(Ljava/lang/String;)V") \\r
+ METHOD (setVisible, "setVisible", "(Z)V") \\r
+ METHOD (isVisible, "isVisible", "()Z") \\r
+ METHOD (containsPoint, "containsPoint", "(II)Z") \\r
+ METHOD (showKeyboard, "showKeyboard", "(III)V") \\r
+ METHOD (hideKeyboard, "hideKeyboard", "()V") \\r
+ METHOD (closeInputMethodContext, "closeInputMethodContext", "()V") \\r
+ METHOD (setSystemUiVisibilityCompat, "setSystemUiVisibilityCompat", "(I)V") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::handleDoFrameCallback>, "handleDoFrame", "(JJ)V") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::handlePaintCallback>, "handlePaint", "(JLandroid/graphics/Canvas;Landroid/graphics/Paint;)V") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::handleKeyDownCallback>, "handleKeyDown", "(JIII)V") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::handleKeyUpCallback>, "handleKeyUp", "(JII)V") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::handleBackButtonCallback>, "handleBackButton", "(J)V") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::handleKeyboardHiddenCallback>, "handleKeyboardHidden", "(J)V") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::handleGetFocusedTextInputTargetCallback>, "getFocusedTextInputTargetPointer", "(J)J") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::handleMovedOrResizedCallback>, "viewSizeChanged", "(J)V") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::handleFocusChangeCallback>, "focusChanged", "(JZ)V") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::handleAppPausedCallback>, "handleAppPaused", "(J)V") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::handleAppResumedCallback>, "handleAppResumed", "(J)V") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::populateAccessibilityNodeInfoCallback>, "populateAccessibilityNodeInfo", "(JILandroid/view/accessibility/AccessibilityNodeInfo;)Z") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::handlePerformActionCallback>, "handlePerformAction", "(JIILandroid/os/Bundle;)Z") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::getInputFocusViewIdCallback>, "getInputFocusViewId", "(J)Ljava/lang/Integer;") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::getAccessibilityFocusViewIdCallback>, "getAccessibilityFocusViewId", "(J)Ljava/lang/Integer;") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::textInputTargetIsTextInputActive>, "textInputTargetIsTextInputActive", "(J)Z") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::textInputTargetGetHighlightedRegionBegin>, "textInputTargetGetHighlightedRegionBegin", "(J)I") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::textInputTargetGetHighlightedRegionEnd>, "textInputTargetGetHighlightedRegionEnd", "(J)I") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::textInputTargetSetHighlightedRegion>, "textInputTargetSetHighlightedRegion", "(JII)V") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::textInputTargetGetTextInRange>, "textInputTargetGetTextInRange", "(JII)Ljava/lang/String;") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::textInputTargetInsertTextAtCaret>, "textInputTargetInsertTextAtCaret", "(JLjava/lang/String;)V") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::textInputTargetGetCaretPosition>, "textInputTargetGetCaretPosition", "(J)I") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::textInputTargetGetTotalNumChars>, "textInputTargetGetTotalNumChars", "(J)I") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::textInputTargetGetCharIndexForPoint>, "textInputTargetGetCharIndexForPoint", "(JLandroid/graphics/Point;)I") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::textInputTargetGetKeyboardType>, "textInputTargetGetKeyboardType", "(J)I") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::textInputTargetSetTemporaryUnderlining>, "textInputTargetSetTemporaryUnderlining", "(JLjava/util/List;)V") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::mouseCallbackWrapper<&AndroidComponentPeer::handleMouseDownCallback>>, "handleMouseDown", "(JIFFJ)V") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::mouseCallbackWrapper<&AndroidComponentPeer::handleMouseDragCallback>>, "handleMouseDrag", "(JIFFJ)V") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::mouseCallbackWrapper<&AndroidComponentPeer::handleMouseUpCallback>>, "handleMouseUp", "(JIFFJ)V") \\r
+ CALLBACK (generatedCallback<&AndroidComponentPeer::mouseCallbackWrapper<&AndroidComponentPeer::handleAccessibilityHoverCallback>>, "handleAccessibilityHover", "(JIFFJ)V") \\r
\r
- return false;\r
+ DECLARE_JNI_CLASS_WITH_BYTECODE (ComponentPeerView, "com/rmsl/juce/ComponentPeerView", 16, javaComponentPeerView)\r
+ #undef JNI_CLASS_MEMBERS\r
+\r
+ static jboolean textInputTargetIsTextInputActive (JNIEnv*, const TextInputTarget& t)\r
+ {\r
+ return t.isTextInputActive();\r
}\r
\r
- static jboolean JNICALL handlePerformActionJni (JNIEnv*, jobject /*view*/, jlong host, jint virtualViewId, jint action, jobject arguments)\r
+ static jint textInputTargetGetHighlightedRegionBegin (JNIEnv*, const TextInputTarget& t)\r
{\r
- if (auto* myself = reinterpret_cast<AndroidComponentPeer*> (host))\r
- return myself->handlePerformActionCallback (virtualViewId, action, arguments);\r
+ return t.getHighlightedRegion().getStart();\r
+ }\r
\r
- return false;\r
+ static jint textInputTargetGetHighlightedRegionEnd (JNIEnv*, const TextInputTarget& t)\r
+ {\r
+ return t.getHighlightedRegion().getEnd();\r
}\r
\r
- static jobject JNICALL getInputFocusViewIdJni (JNIEnv*, jobject /*view*/, jlong host)\r
+ static void textInputTargetSetHighlightedRegion (JNIEnv*, TextInputTarget& t, jint b, jint e)\r
{\r
- if (auto* myself = reinterpret_cast<AndroidComponentPeer*> (host))\r
- return myself->getInputFocusViewIdCallback();\r
+ t.setHighlightedRegion ({ b, e });\r
+ }\r
\r
- return nullptr;\r
+ static jstring textInputTargetGetTextInRange (JNIEnv* env, const TextInputTarget& t, jint b, jint e)\r
+ {\r
+ return env->NewStringUTF (t.getTextInRange ({ b, e }).toUTF8());\r
}\r
\r
- static jobject JNICALL getAccessibilityFocusViewIdJni (JNIEnv*, jobject /*view*/, jlong host)\r
+ static void textInputTargetInsertTextAtCaret (JNIEnv*, TextInputTarget& t, jstring text)\r
{\r
- if (auto* myself = reinterpret_cast<AndroidComponentPeer*> (host))\r
- return myself->getAccessibilityFocusViewIdCallback();\r
+ t.insertTextAtCaret (juceString (text));\r
+ }\r
\r
- return nullptr;\r
+ static jint textInputTargetGetCaretPosition (JNIEnv*, const TextInputTarget& t)\r
+ {\r
+ return t.getCaretPosition();\r
+ }\r
+\r
+ static jint textInputTargetGetTotalNumChars (JNIEnv*, const TextInputTarget& t)\r
+ {\r
+ return t.getTotalNumChars();\r
+ }\r
+\r
+ static jint textInputTargetGetCharIndexForPoint (JNIEnv* env, const TextInputTarget& t, jobject point)\r
+ {\r
+ return t.getCharIndexForPoint ({ env->GetIntField (point, AndroidPoint.x),\r
+ env->GetIntField (point, AndroidPoint.y) });\r
+ }\r
+\r
+ static jint textInputTargetGetKeyboardType (JNIEnv*, TextInputTarget& t)\r
+ {\r
+ return t.getKeyboardType();\r
+ }\r
+\r
+ static std::optional<Range<int>> getRangeFromPair (JNIEnv* env, jobject pair)\r
+ {\r
+ if (pair == nullptr)\r
+ return {};\r
+\r
+ const auto first = env->GetObjectField (pair, AndroidPair.first);\r
+ const auto second = env->GetObjectField (pair, AndroidPair.second);\r
+\r
+ if (first == nullptr || second == nullptr)\r
+ return {};\r
+\r
+ const auto begin = env->CallIntMethod (first, JavaInteger.intValue);\r
+ const auto end = env->CallIntMethod (second, JavaInteger.intValue);\r
+\r
+ return Range<int> { begin, end };\r
+ }\r
+\r
+ static Array<Range<int>> javaListOfPairToArrayOfRange (JNIEnv* env, jobject list)\r
+ {\r
+ if (list == nullptr)\r
+ return {};\r
+\r
+ Array<Range<int>> result;\r
+\r
+ for (jint i = 0; i < env->CallIntMethod (list, JavaList.size); ++i)\r
+ if (const auto range = getRangeFromPair (env, env->CallObjectMethod (list, JavaList.get, i)))\r
+ result.add (*range);\r
+\r
+ return result;\r
+ }\r
+\r
+ static void textInputTargetSetTemporaryUnderlining (JNIEnv* env, TextInputTarget& t, jobject list)\r
+ {\r
+ t.setTemporaryUnderlining (javaListOfPairToArrayOfRange (env, list));\r
}\r
\r
//==============================================================================\r
int64 AndroidComponentPeer::touchesDown = 0;\r
AndroidComponentPeer* AndroidComponentPeer::frontWindow = nullptr;\r
GlobalRef AndroidComponentPeer::activityCallbackListener;\r
-AndroidComponentPeer::ComponentPeerView_Class AndroidComponentPeer::ComponentPeerView;\r
\r
//==============================================================================\r
ComponentPeer* Component::createNewPeer (int styleFlags, void* nativeWindow)\r
}\r
\r
//==============================================================================\r
-void Desktop::setKioskComponent (Component* kioskComp, bool enableOrDisable, bool allowMenusAndBars)\r
+void Desktop::setKioskComponent (Component* kioskComp, bool enableOrDisable, [[maybe_unused]] bool allowMenusAndBars)\r
{\r
- ignoreUnused (allowMenusAndBars);\r
-\r
if (AndroidComponentPeer* peer = dynamic_cast<AndroidComponentPeer*> (kioskComp->getPeer()))\r
peer->setFullScreen (enableOrDisable);\r
else\r
{\r
auto* env = getEnv();\r
\r
- LocalRef<jobject> usableSize (env->NewObject (AndroidPoint, AndroidPoint.create, 0, 0));\r
+ LocalRef<jobject> usableSize (makeAndroidPoint ({}));\r
LocalRef<jstring> windowServiceString (javaString ("window"));\r
LocalRef<jobject> displayMetrics (env->NewObject (AndroidDisplayMetrics, AndroidDisplayMetrics.create));\r
LocalRef<jobject> windowManager (env->CallObjectMethod (getAppContext().get(), AndroidContext.getSystemService, windowServiceString.get()));\r
juce_handleOnResume();\r
}\r
};\r
-\r
- JuceActivityNewIntentListener::JavaActivity_Class JuceActivityNewIntentListener::JavaActivity;\r
#endif\r
\r
} // namespace juce\r
\r
controller.get().excludedActivityTypes = nil;\r
\r
- controller.get().completionWithItemsHandler = ^ (UIActivityType type, BOOL completed,\r
- NSArray* returnedItems, NSError* error)\r
+ controller.get().completionWithItemsHandler = ^([[maybe_unused]] UIActivityType type, BOOL completed,\r
+ [[maybe_unused]] NSArray* returnedItems, NSError* error)\r
{\r
- ignoreUnused (type);\r
- ignoreUnused (returnedItems);\r
-\r
succeeded = completed;\r
\r
if (error != nil)\r
{\r
if (err != nil)\r
{\r
- auto desc = [err localizedDescription];\r
- ignoreUnused (desc);\r
+ [[maybe_unused]] auto desc = [err localizedDescription];\r
jassertfalse;\r
return;\r
}\r
}\r
else\r
{\r
- auto desc = [error localizedDescription];\r
- ignoreUnused (desc);\r
+ [[maybe_unused]] auto desc = [error localizedDescription];\r
jassertfalse;\r
}\r
\r
#define JUCE_HAS_IOS_POINTER_SUPPORT 0\r
#endif\r
\r
+#if defined (__IPHONE_13_4) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_4\r
+ #define JUCE_HAS_IOS_HARDWARE_KEYBOARD_SUPPORT 1\r
+#else\r
+ #define JUCE_HAS_IOS_HARDWARE_KEYBOARD_SUPPORT 0\r
+#endif\r
+\r
namespace juce\r
{\r
\r
\r
class UIViewComponentPeer;\r
\r
+namespace iOSGlobals\r
+{\r
+#if JUCE_HAS_IOS_HARDWARE_KEYBOARD_SUPPORT\r
+class KeysCurrentlyDown\r
+{\r
+public:\r
+ bool isDown (int x) const { return down.find (x) != down.cend(); }\r
+\r
+ void setDown (int x, bool b)\r
+ {\r
+ if (b)\r
+ down.insert (x);\r
+ else\r
+ down.erase (x);\r
+ }\r
+\r
+private:\r
+ std::set<int> down;\r
+};\r
+static KeysCurrentlyDown keysCurrentlyDown;\r
+#endif\r
+static UIViewComponentPeer* currentlyFocusedPeer = nullptr;\r
+} // namespace iOSGlobals\r
+\r
static UIInterfaceOrientation getWindowOrientation()\r
{\r
UIApplication* sharedApplication = [UIApplication sharedApplication];\r
void dismissPendingTextInput() override;\r
void closeInputMethodContext() override;\r
\r
- BOOL textViewReplaceCharacters (Range<int>, const String&);\r
-\r
void updateScreenBounds();\r
\r
void handleTouches (UIEvent*, MouseEventFlags);\r
void onScroll (UIPanGestureRecognizer*);\r
#endif\r
\r
+ Range<int> getMarkedTextRange() const\r
+ {\r
+ return Range<int>::withStartAndLength (startOfMarkedTextInTextInputTarget,\r
+ stringBeingComposed.length());\r
+ }\r
+\r
+ void replaceMarkedRangeWithText (TextInputTarget* target, const String& text)\r
+ {\r
+ if (stringBeingComposed.isNotEmpty())\r
+ target->setHighlightedRegion (getMarkedTextRange());\r
+\r
+ target->insertTextAtCaret (text);\r
+ target->setTemporaryUnderlining ({ Range<int>::withStartAndLength (startOfMarkedTextInTextInputTarget,\r
+ text.length()) });\r
+ stringBeingComposed = text;\r
+ }\r
+\r
//==============================================================================\r
void repaint (const Rectangle<int>& area) override;\r
void performAnyPendingRepaintsNow() override;\r
UIViewController* controller = nil;\r
const bool isSharedWindow, isAppex;\r
String stringBeingComposed;\r
+ int startOfMarkedTextInTextInputTarget = 0;\r
bool fullScreen = false, insideDrawRect = false;\r
NSUniquePtr<JuceTextView> hiddenTextInput { [[JuceTextView alloc] initWithOwner: this] };\r
NSUniquePtr<JuceTextInputTokenizer> tokenizer { [[JuceTextInputTokenizer alloc] initWithPeer: this] };\r
case TextInputTarget::urlKeyboard: return UIKeyboardTypeURL;\r
case TextInputTarget::emailAddressKeyboard: return UIKeyboardTypeEmailAddress;\r
case TextInputTarget::phoneNumberKeyboard: return UIKeyboardTypePhonePad;\r
- default: jassertfalse; break;\r
+ case TextInputTarget::passwordKeyboard: return UIKeyboardTypeASCIICapable;\r
}\r
\r
+ jassertfalse;\r
return UIKeyboardTypeDefault;\r
}\r
\r
}\r
#endif\r
\r
+static std::optional<int> getKeyCodeForSpecialCharacterString (StringRef characters)\r
+{\r
+ static const auto map = [&]\r
+ {\r
+ std::map<String, int> result { { nsStringToJuce (UIKeyInputUpArrow), KeyPress::upKey },\r
+ { nsStringToJuce (UIKeyInputDownArrow), KeyPress::downKey },\r
+ { nsStringToJuce (UIKeyInputLeftArrow), KeyPress::leftKey },\r
+ { nsStringToJuce (UIKeyInputRightArrow), KeyPress::rightKey },\r
+ { nsStringToJuce (UIKeyInputEscape), KeyPress::escapeKey },\r
+ { nsStringToJuce (UIKeyInputPageUp), KeyPress::pageUpKey },\r
+ { nsStringToJuce (UIKeyInputPageDown), KeyPress::pageDownKey } };\r
+\r
+ #if JUCE_HAS_IOS_HARDWARE_KEYBOARD_SUPPORT\r
+ if (@available (iOS 13.4, *))\r
+ {\r
+ result.insert ({ { nsStringToJuce (UIKeyInputHome), KeyPress::homeKey },\r
+ { nsStringToJuce (UIKeyInputEnd), KeyPress::endKey },\r
+ { nsStringToJuce (UIKeyInputF1), KeyPress::F1Key },\r
+ { nsStringToJuce (UIKeyInputF2), KeyPress::F2Key },\r
+ { nsStringToJuce (UIKeyInputF3), KeyPress::F3Key },\r
+ { nsStringToJuce (UIKeyInputF4), KeyPress::F4Key },\r
+ { nsStringToJuce (UIKeyInputF5), KeyPress::F5Key },\r
+ { nsStringToJuce (UIKeyInputF6), KeyPress::F6Key },\r
+ { nsStringToJuce (UIKeyInputF7), KeyPress::F7Key },\r
+ { nsStringToJuce (UIKeyInputF8), KeyPress::F8Key },\r
+ { nsStringToJuce (UIKeyInputF9), KeyPress::F9Key },\r
+ { nsStringToJuce (UIKeyInputF10), KeyPress::F10Key },\r
+ { nsStringToJuce (UIKeyInputF11), KeyPress::F11Key },\r
+ { nsStringToJuce (UIKeyInputF12), KeyPress::F12Key } });\r
+ }\r
+ #endif\r
+\r
+ #if defined (__IPHONE_15_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_15_0\r
+ if (@available (iOS 15.0, *))\r
+ {\r
+ result.insert ({ { nsStringToJuce (UIKeyInputDelete), KeyPress::deleteKey } });\r
+ }\r
+ #endif\r
+\r
+ return result;\r
+ }();\r
+\r
+ const auto iter = map.find (characters);\r
+ return iter != map.cend() ? std::make_optional (iter->second) : std::nullopt;\r
+}\r
+\r
+#if JUCE_HAS_IOS_HARDWARE_KEYBOARD_SUPPORT\r
+static int getKeyCodeForCharacters (StringRef unmodified)\r
+{\r
+ return getKeyCodeForSpecialCharacterString (unmodified).value_or (unmodified[0]);\r
+}\r
+\r
+static int getKeyCodeForCharacters (NSString* characters)\r
+{\r
+ return getKeyCodeForCharacters (nsStringToJuce (characters));\r
+}\r
+\r
+static void updateModifiers (const UIKeyModifierFlags flags)\r
+{\r
+ const auto convert = [&flags] (UIKeyModifierFlags f, int result) { return (flags & f) != 0 ? result : 0; };\r
+ const auto juceFlags = convert (UIKeyModifierAlphaShift, 0) // capslock modifier currently not implemented\r
+ | convert (UIKeyModifierShift, ModifierKeys::shiftModifier)\r
+ | convert (UIKeyModifierControl, ModifierKeys::ctrlModifier)\r
+ | convert (UIKeyModifierAlternate, ModifierKeys::altModifier)\r
+ | convert (UIKeyModifierCommand, ModifierKeys::commandModifier)\r
+ | convert (UIKeyModifierNumericPad, 0); // numpad modifier currently not implemented\r
+\r
+ ModifierKeys::currentModifiers = ModifierKeys::currentModifiers.withOnlyMouseButtons().withFlags (juceFlags);\r
+}\r
+\r
+API_AVAILABLE (ios(13.4))\r
+static int getKeyCodeForKey (UIKey* key)\r
+{\r
+ return getKeyCodeForCharacters ([key charactersIgnoringModifiers]);\r
+}\r
+\r
+API_AVAILABLE (ios(13.4))\r
+static bool attemptToConsumeKeys (JuceUIView* view, NSSet<UIPress*>* presses)\r
+{\r
+ auto used = false;\r
+\r
+ for (UIPress* press in presses)\r
+ {\r
+ if (auto* key = [press key])\r
+ {\r
+ const auto code = getKeyCodeForKey (key);\r
+ const auto handleCodepoint = [view, &used, code] (juce_wchar codepoint)\r
+ {\r
+ // These both need to fire; no short-circuiting!\r
+ used |= view->owner->handleKeyUpOrDown (true);\r
+ used |= view->owner->handleKeyPress (code, codepoint);\r
+ };\r
+\r
+ if (getKeyCodeForSpecialCharacterString (nsStringToJuce ([key charactersIgnoringModifiers])).has_value())\r
+ handleCodepoint (0);\r
+ else\r
+ for (const auto codepoint : nsStringToJuce ([key characters]))\r
+ handleCodepoint (codepoint);\r
+ }\r
+ }\r
+\r
+ return used;\r
+}\r
+\r
+- (void) pressesBegan:(NSSet<UIPress*>*) presses withEvent:(UIPressesEvent*) event\r
+{\r
+ const auto handledEvent = [&]\r
+ {\r
+ if (@available (iOS 13.4, *))\r
+ {\r
+ auto isEscape = false;\r
+\r
+ updateModifiers ([event modifierFlags]);\r
+\r
+ for (UIPress* press in presses)\r
+ {\r
+ if (auto* key = [press key])\r
+ {\r
+ const auto code = getKeyCodeForKey (key);\r
+ isEscape |= code == KeyPress::escapeKey;\r
+ iOSGlobals::keysCurrentlyDown.setDown (code, true);\r
+ }\r
+ }\r
+\r
+ return ((isEscape && owner->stringBeingComposed.isEmpty())\r
+ || owner->findCurrentTextInputTarget() == nullptr)\r
+ && attemptToConsumeKeys (self, presses);\r
+ }\r
+\r
+ return false;\r
+ }();\r
+\r
+ if (! handledEvent)\r
+ [super pressesBegan: presses withEvent: event];\r
+}\r
+\r
+/* Returns true if we handled the event. */\r
+static bool doKeysUp (UIViewComponentPeer* owner, NSSet<UIPress*>* presses, UIPressesEvent* event)\r
+{\r
+ if (@available (iOS 13.4, *))\r
+ {\r
+ updateModifiers ([event modifierFlags]);\r
+\r
+ for (UIPress* press in presses)\r
+ if (auto* key = [press key])\r
+ iOSGlobals::keysCurrentlyDown.setDown (getKeyCodeForKey (key), false);\r
+\r
+ return owner->findCurrentTextInputTarget() == nullptr && owner->handleKeyUpOrDown (false);\r
+ }\r
+\r
+ return false;\r
+}\r
+\r
+- (void) pressesEnded:(NSSet<UIPress*>*) presses withEvent:(UIPressesEvent*) event\r
+{\r
+ if (! doKeysUp (owner, presses, event))\r
+ [super pressesEnded: presses withEvent: event];\r
+}\r
+\r
+- (void) pressesCancelled:(NSSet<UIPress*>*) presses withEvent:(UIPressesEvent*) event\r
+{\r
+ if (! doKeysUp (owner, presses, event))\r
+ [super pressesCancelled: presses withEvent: event];\r
+}\r
+#endif\r
+\r
//==============================================================================\r
- (BOOL) becomeFirstResponder\r
{\r
if (owner == nullptr)\r
return;\r
\r
- owner->stringBeingComposed.clear();\r
-\r
if (auto* target = owner->findCurrentTextInputTarget())\r
- target->insertTextAtCaret (nsStringToJuce (text));\r
+ {\r
+ // If we're in insertText, it's because there's a focused TextInputTarget,\r
+ // and key presses from pressesBegan and pressesEnded have been composed\r
+ // into a string that is now ready for insertion.\r
+ // Because JUCE has been passing key events to the system for composition, it\r
+ // won't have been processing those key presses itself, so it may not have had\r
+ // a chance to process keys like return/tab/etc.\r
+ // It's not possible to filter out these keys during pressesBegan, because they\r
+ // may form part of a longer composition sequence.\r
+ // e.g. when entering Japanese text, the return key may be used to select an option\r
+ // from the IME menu, and in this situation the return key should not be propagated\r
+ // to the JUCE view.\r
+ // If we receive a special character (return/tab/etc.) in insertText, it can\r
+ // only be because the composition has finished, so we can turn the event into\r
+ // a KeyPress and trust the current TextInputTarget to process it correctly.\r
+ const auto redirectKeyPresses = [&] (juce_wchar codepoint)\r
+ {\r
+ // Simulate a key down\r
+ const auto code = getKeyCodeForCharacters (String::charToString (codepoint));\r
+ iOSGlobals::keysCurrentlyDown.setDown (code, true);\r
+ owner->handleKeyUpOrDown (true);\r
+\r
+ owner->handleKeyPress (code, codepoint);\r
+\r
+ // Simulate a key up\r
+ iOSGlobals::keysCurrentlyDown.setDown (code, false);\r
+ owner->handleKeyUpOrDown (false);\r
+ };\r
+\r
+ if ([text isEqual: @"\n"] || [text isEqual: @"\r"])\r
+ redirectKeyPresses ('\r');\r
+ else if ([text isEqual: @"\t"])\r
+ redirectKeyPresses ('\t');\r
+ else\r
+ owner->replaceMarkedRangeWithText (target, nsStringToJuce (text));\r
+\r
+ target->setTemporaryUnderlining ({});\r
+ }\r
+\r
+ owner->stringBeingComposed.clear();\r
+ owner->startOfMarkedTextInTextInputTarget = 0;\r
}\r
\r
- (BOOL) hasText\r
{\r
if (owner != nullptr && owner->stringBeingComposed.isNotEmpty())\r
if (auto* target = owner->findCurrentTextInputTarget())\r
- return [JuceUITextRange withRange: target->getHighlightedRegion()];\r
+ return [JuceUITextRange withRange: owner->getMarkedTextRange()];\r
\r
return nil;\r
}\r
- (void) setMarkedText: (NSString*) markedText\r
selectedRange: (NSRange) selectedRange\r
{\r
- ignoreUnused (selectedRange);\r
-\r
if (owner == nullptr)\r
return;\r
\r
- owner->stringBeingComposed = nsStringToJuce (markedText);\r
+ const auto newMarkedText = nsStringToJuce (markedText);\r
+ const ScopeGuard scope { [&] { owner->stringBeingComposed = newMarkedText; } };\r
\r
auto* target = owner->findCurrentTextInputTarget();\r
\r
if (target == nullptr)\r
return;\r
\r
- const auto currentHighlight = target->getHighlightedRegion();\r
- target->insertTextAtCaret (owner->stringBeingComposed);\r
- target->setHighlightedRegion (currentHighlight.withLength (0));\r
- target->setHighlightedRegion (currentHighlight.withLength (owner->stringBeingComposed.length()));\r
+ if (owner->stringBeingComposed.isEmpty())\r
+ owner->startOfMarkedTextInTextInputTarget = target->getHighlightedRegion().getStart();\r
+\r
+ owner->replaceMarkedRangeWithText (target, newMarkedText);\r
+\r
+ const auto newSelection = nsRangeToJuce (selectedRange) + owner->startOfMarkedTextInTextInputTarget;\r
+ target->setHighlightedRegion (newSelection);\r
}\r
\r
- (void) unmarkText\r
if (target == nullptr)\r
return;\r
\r
- target->insertTextAtCaret (owner->stringBeingComposed);\r
+ owner->replaceMarkedRangeWithText (target, owner->stringBeingComposed);\r
+ target->setTemporaryUnderlining ({});\r
owner->stringBeingComposed.clear();\r
+ owner->startOfMarkedTextInTextInputTarget = 0;\r
}\r
\r
- (NSDictionary<NSAttributedStringKey, id>*) markedTextStyle\r
namespace juce\r
{\r
\r
-bool KeyPress::isKeyCurrentlyDown (int)\r
+bool KeyPress::isKeyCurrentlyDown (int keyCode)\r
{\r
+ #if JUCE_HAS_IOS_HARDWARE_KEYBOARD_SUPPORT\r
+ return iOSGlobals::keysCurrentlyDown.isDown (keyCode)\r
+ || ('A' <= keyCode && keyCode <= 'Z' && iOSGlobals::keysCurrentlyDown.isDown ((int) CharacterFunctions::toLowerCase ((juce_wchar) keyCode)))\r
+ || ('a' <= keyCode && keyCode <= 'z' && iOSGlobals::keysCurrentlyDown.isDown ((int) CharacterFunctions::toUpperCase ((juce_wchar) keyCode)));\r
+ #else\r
return false;\r
+ #endif\r
}\r
\r
Point<float> juce_lastMousePos;\r
\r
#if JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS\r
if (@available (iOS 13, *))\r
- metalRenderer = std::make_unique<CoreGraphicsMetalLayerRenderer<UIView>> (view, comp.isOpaque());\r
+ {\r
+ metalRenderer = CoreGraphicsMetalLayerRenderer<UIView>::create (view, comp.isOpaque());\r
+ jassert (metalRenderer != nullptr);\r
+ }\r
#endif\r
\r
if ((windowStyleFlags & ComponentPeer::windowRequiresSynchronousCoreGraphicsRendering) == 0)\r
setVisible (component.isVisible());\r
}\r
\r
-static UIViewComponentPeer* currentlyFocusedPeer = nullptr;\r
-\r
UIViewComponentPeer::~UIViewComponentPeer()\r
{\r
- if (currentlyFocusedPeer == this)\r
- currentlyFocusedPeer = nullptr;\r
+ if (iOSGlobals::currentlyFocusedPeer == this)\r
+ iOSGlobals::currentlyFocusedPeer = nullptr;\r
\r
currentTouches.deleteAllTouchesForPeer (this);\r
\r
if (event == nullptr)\r
return;\r
\r
+ if (@available (iOS 13.4, *))\r
+ {\r
+ updateModifiers ([event modifierFlags]);\r
+ }\r
+\r
NSArray* touches = [[event touchesForView: view] allObjects];\r
\r
for (unsigned int i = 0; i < [touches count]; ++i)\r
//==============================================================================\r
void UIViewComponentPeer::viewFocusGain()\r
{\r
- if (currentlyFocusedPeer != this)\r
+ if (iOSGlobals::currentlyFocusedPeer != this)\r
{\r
- if (ComponentPeer::isValidPeer (currentlyFocusedPeer))\r
- currentlyFocusedPeer->handleFocusLoss();\r
+ if (ComponentPeer::isValidPeer (iOSGlobals::currentlyFocusedPeer))\r
+ iOSGlobals::currentlyFocusedPeer->handleFocusLoss();\r
\r
- currentlyFocusedPeer = this;\r
+ iOSGlobals::currentlyFocusedPeer = this;\r
\r
handleFocusGain();\r
}\r
\r
void UIViewComponentPeer::viewFocusLoss()\r
{\r
- if (currentlyFocusedPeer == this)\r
+ if (iOSGlobals::currentlyFocusedPeer == this)\r
{\r
- currentlyFocusedPeer = nullptr;\r
+ iOSGlobals::currentlyFocusedPeer = nullptr;\r
handleFocusLoss();\r
}\r
}\r
if (isAppex)\r
return true;\r
\r
- return isSharedWindow ? this == currentlyFocusedPeer\r
+ return isSharedWindow ? this == iOSGlobals::currentlyFocusedPeer\r
: (window != nil && [window isKeyWindow]);\r
}\r
\r
\r
void UIViewComponentPeer::textInputRequired (Point<int>, TextInputTarget&)\r
{\r
+ // We need to restart the text input session so that the keyboard can change types if necessary.\r
+ if ([hiddenTextInput.get() isFirstResponder])\r
+ [hiddenTextInput.get() resignFirstResponder];\r
+\r
[hiddenTextInput.get() becomeFirstResponder];\r
}\r
\r
[hiddenTextInput.get() resignFirstResponder];\r
}\r
\r
-BOOL UIViewComponentPeer::textViewReplaceCharacters (Range<int> range, const String& text)\r
-{\r
- if (auto* target = findCurrentTextInputTarget())\r
- {\r
- auto currentSelection = target->getHighlightedRegion();\r
-\r
- if (range.getLength() == 1 && text.isEmpty()) // (detect backspace)\r
- if (currentSelection.isEmpty())\r
- target->setHighlightedRegion (currentSelection.withStart (currentSelection.getStart() - 1));\r
-\r
- WeakReference<Component> deletionChecker (dynamic_cast<Component*> (target));\r
-\r
- if (text == "\r" || text == "\n" || text == "\r\n")\r
- handleKeyPress (KeyPress::returnKey, text[0]);\r
- else\r
- target->insertTextAtCaret (text);\r
- }\r
-\r
- return NO;\r
-}\r
-\r
//==============================================================================\r
void UIViewComponentPeer::displayLinkCallback()\r
{\r
: callback (std::move (cb)),\r
shouldDeleteThis (deleteOnCompletion)\r
{\r
- if (currentlyFocusedPeer != nullptr)\r
+ if (iOSGlobals::currentlyFocusedPeer != nullptr)\r
{\r
UIAlertController* alert = [UIAlertController alertControllerWithTitle: juceStringToNS (opts.getTitle())\r
message: juceStringToNS (opts.getMessage())\r
addButton (alert, opts.getButtonText (1));\r
addButton (alert, opts.getButtonText (2));\r
\r
- [currentlyFocusedPeer->controller presentViewController: alert\r
- animated: YES\r
- completion: nil];\r
+ [iOSGlobals::currentlyFocusedPeer->controller presentViewController: alert\r
+ animated: YES\r
+ completion: nil];\r
}\r
else\r
{\r
xSettings->addListener (this);\r
\r
getNativeRealtimeModifiers = []() -> ModifierKeys { return XWindowSystem::getInstance()->getNativeRealtimeModifiers(); };\r
+\r
+ updateVBlankTimer();\r
}\r
\r
~LinuxComponentPeer() override\r
}\r
}\r
\r
+ bool setWindowAssociation (::Window windowIn)\r
+ {\r
+ clearWindowAssociation();\r
+ association = { this, windowIn };\r
+ return association.isValid();\r
+ }\r
+\r
+ void clearWindowAssociation() { association = {}; }\r
+\r
//==============================================================================\r
static bool isActiveApplication;\r
bool focused = false;\r
{\r
if (auto* display = Desktop::getInstance().getDisplays().getDisplayForRect (bounds))\r
{\r
- if (display->verticalFrequencyHz)\r
- {\r
- const auto newIntFrequencyHz = roundToInt (*display->verticalFrequencyHz);\r
+ // Some systems fail to set an explicit refresh rate, or ask for a refresh rate of 0\r
+ // (observed on Raspbian Bullseye over VNC). In these situations, use a fallback value.\r
+ const auto newIntFrequencyHz = roundToInt (display->verticalFrequencyHz.value_or (0.0));\r
+ const auto frequencyToUse = newIntFrequencyHz != 0 ? newIntFrequencyHz : 100;\r
\r
- if (vBlankManager.getTimerInterval() != newIntFrequencyHz)\r
- vBlankManager.startTimerHz (newIntFrequencyHz);\r
- }\r
+ if (vBlankManager.getTimerInterval() != frequencyToUse)\r
+ vBlankManager.startTimerHz (frequencyToUse);\r
}\r
}\r
\r
bool fullScreen = false, isAlwaysOnTop = false;\r
double currentScaleFactor = 1.0;\r
Array<Component*> glRepaintListeners;\r
+ ScopedWindowAssociation association;\r
\r
//==============================================================================\r
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LinuxComponentPeer)\r
{\r
public:\r
//==============================================================================\r
- CoreGraphicsMetalLayerRenderer (ViewType* view, bool isOpaque)\r
+ static auto create (ViewType* view, bool isOpaque)\r
{\r
- device.reset (MTLCreateSystemDefaultDevice());\r
- commandQueue.reset ([device.get() newCommandQueue]);\r
-\r
- attach (view, isOpaque);\r
+ ObjCObjectHandle<id<MTLDevice>> device { MTLCreateSystemDefaultDevice() };\r
+ return rawToUniquePtr (device != nullptr ? new CoreGraphicsMetalLayerRenderer (device, view, isOpaque)\r
+ : nullptr);\r
}\r
\r
~CoreGraphicsMetalLayerRenderer()\r
}\r
\r
private:\r
+ //==============================================================================\r
+ CoreGraphicsMetalLayerRenderer (ObjCObjectHandle<id<MTLDevice>> mtlDevice,\r
+ ViewType* view,\r
+ bool isOpaque)\r
+ : device (mtlDevice),\r
+ commandQueue ([device.get() newCommandQueue])\r
+ {\r
+ attach (view, isOpaque);\r
+ }\r
+\r
//==============================================================================\r
static auto alignTo (size_t n, size_t alignment)\r
{\r
&& ! [[NSWorkspace sharedWorkspace] isFilePackageAtPath: juceStringToNS (f.getFullPathName())];\r
}\r
\r
- void panelSelectionDidChange (id sender)\r
+ void panelSelectionDidChange ([[maybe_unused]] id sender)\r
{\r
jassert (sender == panel);\r
- ignoreUnused (sender);\r
\r
// NB: would need to extend FilePreviewComponent to handle the full list rather than just the first one\r
if (preview != nullptr)\r
{\r
ValidatorClass() : ObjCClass ("JUCEMenuValidator_")\r
{\r
- addMethod (menuItemInvokedSelector, menuItemInvoked);\r
- addMethod (@selector (validateMenuItem:), validateMenuItem);\r
+ addMethod (menuItemInvokedSelector, [] (id, SEL, NSMenuItem*) {});\r
+ addMethod (@selector (validateMenuItem:), [] (id, SEL, NSMenuItem*) { return YES; });\r
addProtocol (@protocol (NSMenuItemValidation));\r
\r
registerClass();\r
}\r
-\r
- private:\r
- static BOOL validateMenuItem (id, SEL, NSMenuItem*) { return YES; }\r
- static void menuItemInvoked (id, SEL, NSMenuItem*) {}\r
};\r
\r
static ValidatorClass validatorClass;\r
return m;\r
}\r
\r
- // Apple Bug: For some reason [NSMenu removeAllItems] seems to leak it's objects\r
+ // Apple Bug: For some reason [NSMenu removeAllItems] seems to leak its objects\r
// on shutdown, so we need this method to release the items one-by-one manually\r
static void removeItemRecursive (NSMenu* parentMenu, int menuItemIndex)\r
{\r
{\r
addIvar<JuceMainMenuHandler*> ("owner");\r
\r
- addMethod (menuItemInvokedSelector, menuItemInvoked);\r
- addMethod (@selector (menuNeedsUpdate:), menuNeedsUpdate);\r
- addMethod (@selector (validateMenuItem:), validateMenuItem);\r
+ addMethod (menuItemInvokedSelector, [] (id self, SEL, NSMenuItem* item)\r
+ {\r
+ if (auto* juceItem = getPopupMenuItem (item))\r
+ getOwner (self)->invoke (*juceItem, static_cast<int> ([item tag]));\r
+ });\r
+\r
+ addMethod (@selector (menuNeedsUpdate:), [] (id self, SEL, NSMenu* menu)\r
+ {\r
+ getOwner (self)->updateTopLevelMenu (menu);\r
+ });\r
+\r
+ addMethod (@selector (validateMenuItem:), [] (id, SEL, NSMenuItem* item) -> BOOL\r
+ {\r
+ if (auto* juceItem = getPopupMenuItem (item))\r
+ return juceItem->isEnabled;\r
+\r
+ return YES;\r
+ });\r
\r
addProtocol (@protocol (NSMenuDelegate));\r
addProtocol (@protocol (NSMenuItemValidation));\r
}\r
\r
private:\r
- static auto* getPopupMenuItem (NSMenuItem* item)\r
+ static PopupMenu::Item* getPopupMenuItem (NSMenuItem* item)\r
{\r
return getJuceClassFromNSObject<PopupMenu::Item> ([item representedObject]);\r
}\r
\r
- static auto* getOwner (id self)\r
+ static JuceMainMenuHandler* getOwner (id self)\r
{\r
return getIvar<JuceMainMenuHandler*> (self, "owner");\r
}\r
-\r
- static void menuItemInvoked (id self, SEL, NSMenuItem* item)\r
- {\r
- if (auto* juceItem = getPopupMenuItem (item))\r
- getOwner (self)->invoke (*juceItem, static_cast<int> ([item tag]));\r
- }\r
-\r
- static void menuNeedsUpdate (id self, SEL, NSMenu* menu)\r
- {\r
- getOwner (self)->updateTopLevelMenu (menu);\r
- }\r
-\r
- static BOOL validateMenuItem (id, SEL, NSMenuItem* item)\r
- {\r
- if (auto* juceItem = getPopupMenuItem (item))\r
- return juceItem->isEnabled;\r
-\r
- return YES;\r
- }\r
};\r
};\r
\r
#if USE_COREGRAPHICS_RENDERING\r
#if JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS\r
if (@available (macOS 10.14, *))\r
- metalRenderer = std::make_unique<CoreGraphicsMetalLayerRenderer<NSView>> (view, getComponent().isOpaque());\r
+ metalRenderer = CoreGraphicsMetalLayerRenderer<NSView>::create (view, getComponent().isOpaque());\r
#endif\r
if ((windowStyleFlags & ComponentPeer::windowRequiresSynchronousCoreGraphicsRendering) == 0)\r
{\r
if (forceFullScreen)\r
return NSWindowCollectionBehaviorFullScreenPrimary;\r
\r
- // Some SDK versions don't define NSWindowCollectionBehaviorFullScreenNone\r
- constexpr auto fullScreenNone = (NSUInteger) (1 << 9);\r
+ // Some SDK versions don't define NSWindowCollectionBehaviorFullScreenAuxiliary\r
+ constexpr auto fullScreenAux = (NSUInteger) (1 << 8);\r
\r
return (getStyleFlags() & (windowHasMaximiseButton | windowIsResizable)) == (windowHasMaximiseButton | windowIsResizable)\r
? NSWindowCollectionBehaviorFullScreenPrimary\r
- : fullScreenNone;\r
+ : fullScreenAux;\r
}\r
\r
void setCollectionBehaviour (bool forceFullScreen) const\r
return usingCoreGraphics ? 1 : 0;\r
}\r
\r
- void setCurrentRenderingEngine (int index) override\r
+ void setCurrentRenderingEngine ([[maybe_unused]] int index) override\r
{\r
#if USE_COREGRAPHICS_RENDERING\r
if (usingCoreGraphics != (index > 0))\r
usingCoreGraphics = index > 0;\r
[view setNeedsDisplay: true];\r
}\r
- #else\r
- ignoreUnused (index);\r
#endif\r
}\r
\r
{\r
bool used = false;\r
\r
- for (auto u = unicode.getCharPointer(); ! u.isEmpty();)\r
+ for (auto textCharacter : unicode)\r
{\r
- auto textCharacter = u.getAndAdvance();\r
-\r
switch (keyCode)\r
{\r
case NSLeftArrowFunctionKey:\r
break;\r
}\r
\r
- used = handleKeyUpOrDown (true) || used;\r
- used = handleKeyPress (keyCode, textCharacter) || used;\r
+ used |= handleKeyUpOrDown (true);\r
+ used |= handleKeyPress (keyCode, textCharacter);\r
}\r
\r
return used;\r
void closeInputMethodContext() override\r
{\r
stringBeingComposed.clear();\r
- const auto* inputContext = [NSTextInputContext currentInputContext];\r
\r
- if (inputContext != nil)\r
+ if (const auto* inputContext = [view inputContext])\r
[inputContext discardMarkedText];\r
}\r
\r
[window setDocumentEdited: b];\r
}\r
\r
+ bool sendEventToInputContextOrComponent (NSEvent* ev)\r
+ {\r
+ // We assume that the event will be handled by the IME.\r
+ // Occasionally, the inputContext may be sent key events like cmd+Q, which it will turn\r
+ // into a noop: call and forward to doCommandBySelector:.\r
+ // In this case, the event will be extracted from keyEventBeingHandled and passed to the\r
+ // focused component, and viewCannotHandleEvent will be set depending on whether the event\r
+ // was handled by the component.\r
+ // If the event was *not* handled by the component, and was also not consumed completely by\r
+ // the IME, it's important to return the event to the system for further handling, so that\r
+ // the main menu works as expected.\r
+ viewCannotHandleEvent = false;\r
+ keyEventBeingHandled.reset ([ev retain]);\r
+ const WeakReference ref { this };\r
+ // redirectKeyDown may delete this peer!\r
+ const ScopeGuard scope { [&ref] { if (ref != nullptr) ref->keyEventBeingHandled = nullptr; } };\r
+\r
+ const auto handled = [&]() -> bool\r
+ {\r
+ if (auto* target = findCurrentTextInputTarget())\r
+ if (const auto* inputContext = [view inputContext])\r
+ return [inputContext handleEvent: ev] && ! viewCannotHandleEvent;\r
+\r
+ return false;\r
+ }();\r
+\r
+ if (handled)\r
+ return true;\r
+\r
+ stringBeingComposed.clear();\r
+ return redirectKeyDown (ev);\r
+ }\r
+\r
//==============================================================================\r
NSWindow* window = nil;\r
NSView* view = nil;\r
#else\r
bool usingCoreGraphics = false;\r
#endif\r
- bool textWasInserted = false, isFirstLiveResize = false;\r
+ NSUniquePtr<NSEvent> keyEventBeingHandled;\r
+ bool isFirstLiveResize = false, viewCannotHandleEvent = false;\r
bool isStretchingTop = false, isStretchingLeft = false, isStretchingBottom = false, isStretchingRight = false;\r
bool windowRepresentsFile = false;\r
bool isAlwaysOnTop = false, wasAlwaysOnTop = false;\r
String stringBeingComposed;\r
+ int startOfMarkedTextInTextInputTarget = 0;\r
\r
Rectangle<float> lastSizeBeforeZoom;\r
RectangleList<float> deferredRepaints;\r
\r
addMethod (@selector (keyDown:), [] (id self, SEL, NSEvent* ev)\r
{\r
- if (auto* owner = getOwner (self))\r
+ const auto handled = [&]\r
{\r
- owner->textWasInserted = false;\r
+ if (auto* owner = getOwner (self))\r
+ return owner->sendEventToInputContextOrComponent (ev);\r
\r
- if (auto* target = owner->findCurrentTextInputTarget())\r
- [(NSView*) self interpretKeyEvents: [NSArray arrayWithObject: ev]];\r
- else\r
- owner->stringBeingComposed.clear();\r
+ return false;\r
+ }();\r
\r
- if (! (owner->textWasInserted || owner->stringBeingComposed.isNotEmpty() || owner->redirectKeyDown (ev)))\r
- sendSuperclassMessage<void> (self, @selector (keyDown:), ev);\r
- }\r
+ if (! handled)\r
+ sendSuperclassMessage<void> (self, @selector (keyDown:), ev);\r
});\r
\r
addMethod (@selector (keyUp:), [] (id self, SEL, NSEvent* ev)\r
sendSuperclassMessage<void> (self, @selector (keyUp:), ev);\r
});\r
\r
- addMethod (@selector (insertText:), [] (id self, SEL, id aString)\r
+ // See "The Path of Key Events" on this page:\r
+ // https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html\r
+ // Normally, 'special' key presses (cursor keys, shortcuts, return, delete etc.) will be\r
+ // sent down the view hierarchy to this function before any of the other keyboard handling\r
+ // functions.\r
+ // If any object returns YES from performKeyEquivalent, then the event is consumed.\r
+ // If no object handles the key equivalent, then the event will be sent to the main menu.\r
+ // If the menu is also unable to respond to the event, then the event will be sent\r
+ // to keyDown:/keyUp: via sendEvent:, but this time the event will be sent to the first\r
+ // responder and propagated back up the responder chain.\r
+ // This architecture presents some issues in JUCE apps, which always expect the focused\r
+ // Component to be sent all key presses *including* special keys.\r
+ // There are also some slightly pathological cases that JUCE needs to support, for example\r
+ // the situation where one of the cursor keys is bound to a main menu item. By default,\r
+ // macOS would send the cursor event to performKeyEquivalent on each NSResponder, then send\r
+ // the event to the main menu if no responder handled it. This would mean that the focused\r
+ // Component would never see the event, which would break widgets like the TextEditor, which\r
+ // expect to take precedence over menu items when they have focus.\r
+ // Another layer of subtlety is that some IMEs require cursor key input. When long-pressing\r
+ // the 'e' key to bring up the accent menu, the popup menu should receive cursor events\r
+ // before the focused component.\r
+ // To fulfil all of these requirements, we handle special keys ('key equivalents') like any\r
+ // other key event, and send these events firstly to the NSTextInputContext (if there's an\r
+ // active TextInputTarget), and then on to the focused Component in the case that the\r
+ // input handler is unable to use the keypress. If the event still hasn't been used, then\r
+ // it will be sent to the superclass's performKeyEquivalent: function, which will give the\r
+ // OS a chance to handle events like cmd+Q, cmd+`, cmd+H etc.\r
+ addMethod (@selector (performKeyEquivalent:), [] (id self, SEL s, NSEvent* ev) -> BOOL\r
{\r
- // This commits multi-byte text when return is pressed, or after every keypress for western keyboards\r
if (auto* owner = getOwner (self))\r
- {\r
- NSString* newText = [aString isKindOfClass: [NSAttributedString class]] ? [aString string] : aString;\r
+ return owner->sendEventToInputContextOrComponent (ev);\r
\r
- if ([newText length] > 0)\r
+ return sendSuperclassMessage<BOOL> (self, s, ev);\r
+ });\r
+\r
+ addMethod (@selector (insertText:replacementRange:), [] (id self, SEL, id aString, NSRange replacementRange)\r
+ {\r
+ // This commits multi-byte text when using an IME, or after every keypress for western keyboards\r
+ if (auto* owner = getOwner (self))\r
+ {\r
+ if (auto* target = owner->findCurrentTextInputTarget())\r
{\r
- if (auto* target = owner->findCurrentTextInputTarget())\r
+ const auto newText = nsStringToJuce ([aString isKindOfClass: [NSAttributedString class]] ? [aString string] : aString);\r
+\r
+ if (newText.isNotEmpty())\r
{\r
- target->insertTextAtCaret (nsStringToJuce (newText));\r
- owner->textWasInserted = true;\r
+ target->setHighlightedRegion ([&]\r
+ {\r
+ // To test this, try long-pressing 'e' to bring up the accent popup,\r
+ // then select one of the accented options.\r
+ if (replacementRange.location != NSNotFound)\r
+ return nsRangeToJuce (replacementRange);\r
+\r
+ // To test this, try entering the characters 'a b <esc>' with the 2-Set\r
+ // Korean IME. The input client should receive three calls to setMarkedText:\r
+ // followed by a call to insertText:\r
+ // The final call to insertText should overwrite the currently-marked\r
+ // text, and reset the composition string.\r
+ if (owner->stringBeingComposed.isNotEmpty())\r
+ return Range<int>::withStartAndLength (owner->startOfMarkedTextInTextInputTarget,\r
+ owner->stringBeingComposed.length());\r
+\r
+ return target->getHighlightedRegion();\r
+ }());\r
+\r
+ target->insertTextAtCaret (newText);\r
+ target->setTemporaryUnderlining ({});\r
}\r
}\r
+ else\r
+ jassertfalse; // The system should not attempt to insert text when there is no active TextInputTarget\r
\r
owner->stringBeingComposed.clear();\r
}\r
});\r
\r
- addMethod (@selector (doCommandBySelector:), [] (id, SEL, SEL) {});\r
+ addMethod (@selector (doCommandBySelector:), [] (id self, SEL, SEL sel)\r
+ {\r
+ const auto handled = [&]\r
+ {\r
+ // 'Special' keys, like backspace, return, tab, and escape, are converted to commands by the system.\r
+ // Components still expect to receive these events as key presses, so we send the currently-processed\r
+ // key event (if any).\r
+ if (auto* owner = getOwner (self))\r
+ {\r
+ owner->viewCannotHandleEvent = [&]\r
+ {\r
+ if (auto* e = owner->keyEventBeingHandled.get())\r
+ {\r
+ if ([e type] != NSEventTypeKeyDown && [e type] != NSEventTypeKeyUp)\r
+ return true;\r
+\r
+ return ! ([e type] == NSEventTypeKeyDown ? owner->redirectKeyDown (e)\r
+ : owner->redirectKeyUp (e));\r
+ }\r
+\r
+ return true;\r
+ }();\r
+\r
+ return ! owner->viewCannotHandleEvent;\r
+ }\r
+\r
+ return false;\r
+ }();\r
+\r
+ if (! handled)\r
+ sendSuperclassMessage<void> (self, @selector (doCommandBySelector:), sel);\r
+ });\r
\r
- addMethod (@selector (setMarkedText:selectedRange:), [] (id self, SEL, id aString, NSRange)\r
+ addMethod (@selector (setMarkedText:selectedRange:replacementRange:), [] (id self,\r
+ SEL,\r
+ id aString,\r
+ const NSRange selectedRange,\r
+ const NSRange replacementRange)\r
{\r
if (auto* owner = getOwner (self))\r
{\r
- owner->stringBeingComposed = nsStringToJuce ([aString isKindOfClass: [NSAttributedString class]]\r
- ? [aString string] : aString);\r
-\r
if (auto* target = owner->findCurrentTextInputTarget())\r
{\r
- auto currentHighlight = target->getHighlightedRegion();\r
- target->insertTextAtCaret (owner->stringBeingComposed);\r
- target->setHighlightedRegion (currentHighlight.withLength (owner->stringBeingComposed.length()));\r
- owner->textWasInserted = true;\r
+ const auto toInsert = nsStringToJuce ([aString isKindOfClass: [NSAttributedString class]] ? [aString string] : aString);\r
+ const auto [initialHighlight, marked, finalHighlight] = [&]\r
+ {\r
+ if (owner->stringBeingComposed.isNotEmpty())\r
+ {\r
+ const auto toReplace = Range<int>::withStartAndLength (owner->startOfMarkedTextInTextInputTarget,\r
+ owner->stringBeingComposed.length());\r
+\r
+ return replacementRange.location != NSNotFound\r
+ // There's a composition underway, so replacementRange is relative to the marked text,\r
+ // and selectedRange is relative to the inserted string.\r
+ ? std::tuple (toReplace,\r
+ owner->stringBeingComposed.replaceSection (static_cast<int> (replacementRange.location),\r
+ static_cast<int> (replacementRange.length),\r
+ toInsert),\r
+ nsRangeToJuce (selectedRange) + static_cast<int> (replacementRange.location))\r
+ // The replacementRange is invalid, so replace all the marked text.\r
+ : std::tuple (toReplace, toInsert, nsRangeToJuce (selectedRange));\r
+ }\r
+\r
+ if (replacementRange.location != NSNotFound)\r
+ // There's no string composition in progress, so replacementRange is relative to the start\r
+ // of the document.\r
+ return std::tuple (nsRangeToJuce (replacementRange), toInsert, nsRangeToJuce (selectedRange));\r
+\r
+ return std::tuple (target->getHighlightedRegion(), toInsert, nsRangeToJuce (selectedRange));\r
+ }();\r
+\r
+ owner->stringBeingComposed = marked;\r
+ owner->startOfMarkedTextInTextInputTarget = initialHighlight.getStart();\r
+\r
+ target->setHighlightedRegion (initialHighlight);\r
+ target->insertTextAtCaret (marked);\r
+ target->setTemporaryUnderlining ({ Range<int>::withStartAndLength (initialHighlight.getStart(), marked.length()) });\r
+ target->setHighlightedRegion (finalHighlight + owner->startOfMarkedTextInTextInputTarget);\r
}\r
}\r
});\r
if (auto* target = owner->findCurrentTextInputTarget())\r
{\r
target->insertTextAtCaret (owner->stringBeingComposed);\r
- owner->textWasInserted = true;\r
+ target->setTemporaryUnderlining ({});\r
}\r
\r
owner->stringBeingComposed.clear();\r
return owner != nullptr && owner->stringBeingComposed.isNotEmpty();\r
});\r
\r
- addMethod (@selector (conversationIdentifier), [] (id self, SEL)\r
+ addMethod (@selector (attributedSubstringForProposedRange:actualRange:), [] (id self, SEL, NSRange theRange, NSRangePointer actualRange) -> NSAttributedString*\r
{\r
- return (long) (pointer_sized_int) self;\r
- });\r
+ jassert (theRange.location != NSNotFound);\r
\r
- addMethod (@selector (attributedSubstringFromRange:), [] (id self, SEL, NSRange theRange) -> NSAttributedString*\r
- {\r
if (auto* owner = getOwner (self))\r
{\r
if (auto* target = owner->findCurrentTextInputTarget())\r
{\r
- Range<int> r ((int) theRange.location,\r
- (int) (theRange.location + theRange.length));\r
+ const auto clamped = Range<int> { 0, target->getTotalNumChars() }.constrainRange (nsRangeToJuce (theRange));\r
+\r
+ if (actualRange != nullptr)\r
+ *actualRange = juceRangeToNS (clamped);\r
\r
- return [[[NSAttributedString alloc] initWithString: juceStringToNS (target->getTextInRange (r))] autorelease];\r
+ return [[[NSAttributedString alloc] initWithString: juceStringToNS (target->getTextInRange (clamped))] autorelease];\r
}\r
}\r
\r
{\r
if (auto* owner = getOwner (self))\r
if (owner->stringBeingComposed.isNotEmpty())\r
- return NSMakeRange (0, (NSUInteger) owner->stringBeingComposed.length());\r
+ return NSMakeRange (static_cast<NSUInteger> (owner->startOfMarkedTextInTextInputTarget),\r
+ static_cast<NSUInteger> (owner->stringBeingComposed.length()));\r
\r
return NSMakeRange (NSNotFound, 0);\r
});\r
{\r
if (auto* target = owner->findCurrentTextInputTarget())\r
{\r
- auto highlight = target->getHighlightedRegion();\r
+ const auto highlight = target->getHighlightedRegion();\r
\r
- if (! highlight.isEmpty())\r
- return NSMakeRange ((NSUInteger) highlight.getStart(),\r
- (NSUInteger) highlight.getLength());\r
+ // The accent-selector popup does not show if the selectedRange location is NSNotFound!\r
+ return NSMakeRange ((NSUInteger) highlight.getStart(),\r
+ (NSUInteger) highlight.getLength());\r
}\r
}\r
\r
return NSMakeRange (NSNotFound, 0);\r
});\r
\r
- addMethod (@selector (firstRectForCharacterRange:), [] (id self, SEL, NSRange)\r
+ addMethod (@selector (firstRectForCharacterRange:actualRange:), [] (id self, SEL, NSRange range, NSRangePointer actualRange)\r
{\r
if (auto* owner = getOwner (self))\r
- if (auto* comp = dynamic_cast<Component*> (owner->findCurrentTextInputTarget()))\r
- return flippedScreenRect (makeNSRect (comp->getScreenBounds()));\r
+ {\r
+ if (auto* target = owner->findCurrentTextInputTarget())\r
+ {\r
+ if (auto* comp = dynamic_cast<Component*> (target))\r
+ {\r
+ const auto codePointRange = range.location == NSNotFound ? Range<int>::emptyRange (target->getCaretPosition())\r
+ : nsRangeToJuce (range);\r
+ const auto clamped = Range<int> { 0, target->getTotalNumChars() }.constrainRange (codePointRange);\r
+\r
+ if (actualRange != nullptr)\r
+ *actualRange = juceRangeToNS (clamped);\r
+\r
+ const auto rect = codePointRange.isEmpty() ? target->getCaretRectangleForCharIndex (codePointRange.getStart())\r
+ : target->getTextBounds (codePointRange).getRectangle (0);\r
+ const auto areaOnDesktop = comp->localAreaToGlobal (rect);\r
+\r
+ return flippedScreenRect (makeNSRect (ScalingHelpers::scaledScreenPosToUnscaled (areaOnDesktop)));\r
+ }\r
+ }\r
+ }\r
\r
return NSZeroRect;\r
});\r
\r
addMethod (@selector (isFlipped), [] (id, SEL) { return true; });\r
\r
- addMethod (@selector (performKeyEquivalent:), [] (id self, SEL s, NSEvent* event)\r
- {\r
- // We try passing shortcut keys to the currently focused component first.\r
- // If the component doesn't want the event, we'll fall back to the superclass\r
- // implementation, which will pass the event to the main menu.\r
- if (tryPassingKeyEventToPeer (event))\r
- return YES;\r
-\r
- return sendSuperclassMessage<BOOL> (self, s, event);\r
- });\r
-\r
- addProtocol (@protocol (NSTextInput));\r
+ addProtocol (@protocol (NSTextInputClient));\r
\r
registerClass();\r
}\r
\r
private:\r
- static void updateTrackingAreas (id self, SEL)\r
- {\r
- sendSuperclassMessage<void> (self, @selector (updateTrackingAreas));\r
-\r
- resetTrackingArea (static_cast<NSView*> (self));\r
- }\r
-\r
- static bool tryPassingKeyEventToPeer (NSEvent* e)\r
- {\r
- if ([e type] != NSEventTypeKeyDown && [e type] != NSEventTypeKeyUp)\r
- return false;\r
-\r
- if (auto* focused = Component::getCurrentlyFocusedComponent())\r
- {\r
- if (auto* peer = dynamic_cast<NSViewComponentPeer*> (focused->getPeer()))\r
- {\r
- return [e type] == NSEventTypeKeyDown ? peer->redirectKeyDown (e)\r
- : peer->redirectKeyUp (e);\r
- }\r
- }\r
-\r
- return false;\r
- }\r
-\r
template <typename Func, typename... Args>\r
static void callOnOwner (id self, Func&& func, Args&&... args)\r
{\r
return nil;\r
});\r
\r
- // Key events will be processed by the peer's component.\r
- // If the component is unable to use the event, it will be re-sent\r
- // to performKeyEquivalent.\r
- // performKeyEquivalent will send the event to the view's superclass,\r
- // which will try passing the event to the main menu.\r
- // If the event still hasn't been processed, it will be passed to the\r
- // next responder in the chain, which will be the NSWindow for a peer\r
- // that is on the desktop.\r
- // If the NSWindow still doesn't handle the event, the Apple docs imply\r
- // that the event should be sent to the NSApp for processing, but this\r
- // doesn't seem to happen for keyDown events.\r
- // Instead, the NSWindow attempts to process the event, fails, and\r
- // triggers an annoying NSBeep.\r
- // Overriding keyDown to "handle" the event seems to suppress the beep.\r
- addMethod (@selector (keyDown:), [] (id, SEL, NSEvent* ev)\r
- {\r
- ignoreUnused (ev);\r
-\r
- #if JUCE_DEBUG_UNHANDLED_KEYPRESSES\r
- DBG ("unhandled key down event with keycode: " << [ev keyCode]);\r
- #endif\r
- });\r
-\r
addMethod (@selector (window:shouldDragDocumentWithEvent:from:withPasteboard:), [] (id self, SEL, id /*window*/, NSEvent*, NSPoint, NSPasteboard*)\r
{\r
if (auto* owner = getOwner (self))\r
}\r
}\r
\r
+static ComponentPeer* findPeerContainingPoint (Point<float> globalPos)\r
+{\r
+ for (int i = 0; i < juce::ComponentPeer::getNumPeers(); ++i)\r
+ {\r
+ auto* peer = juce::ComponentPeer::getPeer (i);\r
+\r
+ if (peer->contains (peer->globalToLocal (globalPos).toInt(), false))\r
+ return peer;\r
+ }\r
+\r
+ return nullptr;\r
+}\r
+\r
void MouseInputSource::setRawMousePosition (Point<float> newPosition)\r
{\r
+ const auto oldPosition = Desktop::getInstance().getMainMouseSource().getRawScreenPosition();\r
+\r
// this rubbish needs to be done around the warp call, to avoid causing a\r
// bizarre glitch..\r
CGAssociateMouseAndMouseCursorPosition (false);\r
CGWarpMouseCursorPosition (convertToCGPoint (newPosition));\r
CGAssociateMouseAndMouseCursorPosition (true);\r
+\r
+ // Mouse enter and exit events seem to be always generated as a consequence of programmatically\r
+ // moving the mouse. However, when the mouse stays within the same peer no mouse move event is\r
+ // generated, and we lose track of the correct Component under the mouse. Hence, we need to\r
+ // generate this missing event here.\r
+ if (auto* peer = findPeerContainingPoint (newPosition); peer != nullptr\r
+ && peer == findPeerContainingPoint (oldPosition))\r
+ {\r
+ peer->handleMouseEvent (MouseInputSource::InputSourceType::mouse,\r
+ peer->globalToLocal (newPosition),\r
+ ModifierKeys::currentModifiers,\r
+ 0.0f,\r
+ 0.0f,\r
+ Time::currentTimeMillis());\r
+ }\r
}\r
\r
double Desktop::getDefaultMasterScale()\r
{\r
PMAssertion() : assertionID (kIOPMNullAssertionID)\r
{\r
- IOReturn res = IOPMAssertionCreateWithName (kIOPMAssertionTypePreventUserIdleDisplaySleep,\r
- kIOPMAssertionLevelOn,\r
- CFSTR ("JUCE Playback"),\r
- &assertionID);\r
- jassert (res == kIOReturnSuccess); ignoreUnused (res);\r
+ [[maybe_unused]] IOReturn res = IOPMAssertionCreateWithName (kIOPMAssertionTypePreventUserIdleDisplaySleep,\r
+ kIOPMAssertionLevelOn,\r
+ CFSTR ("JUCE Playback"),\r
+ &assertionID);\r
+ jassert (res == kIOReturnSuccess);\r
}\r
\r
~PMAssertion()\r
{\r
ProcessSerialNumber psn { 0, kCurrentProcess };\r
\r
- OSStatus err = TransformProcessType (&psn, isVisible ? kProcessTransformToForegroundApplication\r
- : kProcessTransformToUIElementApplication);\r
+ [[maybe_unused]] OSStatus err = TransformProcessType (&psn, isVisible ? kProcessTransformToForegroundApplication\r
+ : kProcessTransformToUIElementApplication);\r
jassert (err == 0);\r
- ignoreUnused (err);\r
}\r
\r
} // namespace juce\r
\r
JobStatus runJob() override\r
{\r
- ignoreUnused (OleInitialize (nullptr));\r
+ [[maybe_unused]] const auto result = OleInitialize (nullptr);\r
\r
auto* source = new JuceDropSource();\r
auto* data = new JuceDataObject (&format, &medium);\r
struct ScopedCoInitialize\r
{\r
// IUnknown_GetWindow will only succeed when instantiated in a single-thread apartment\r
- ScopedCoInitialize() { ignoreUnused (CoInitializeEx (nullptr, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)); }\r
+ ScopedCoInitialize() { [[maybe_unused]] const auto result = CoInitializeEx (nullptr, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); }\r
~ScopedCoInitialize() { CoUninitialize(); }\r
};\r
\r
#endif\r
}\r
\r
-static bool isPerMonitorDPIAwareWindow (HWND nativeWindow)\r
+static bool isPerMonitorDPIAwareWindow ([[maybe_unused]] HWND nativeWindow)\r
{\r
#if ! JUCE_WIN_PER_MONITOR_DPI_AWARE\r
- ignoreUnused (nativeWindow);\r
return false;\r
#else\r
setDPIAwareness();\r
}\r
\r
//==============================================================================\r
-class ScopedThreadDPIAwarenessSetter::NativeImpl\r
+class ScopedSuspendResumeNotificationRegistration\r
{\r
public:\r
- explicit NativeImpl (HWND nativeWindow)\r
+ ScopedSuspendResumeNotificationRegistration() = default;\r
+\r
+ explicit ScopedSuspendResumeNotificationRegistration (HWND window)\r
+ : handle (SystemStats::getOperatingSystemType() >= SystemStats::Windows8_0\r
+ ? RegisterSuspendResumeNotification (window, DEVICE_NOTIFY_WINDOW_HANDLE)\r
+ : nullptr)\r
+ {}\r
+\r
+private:\r
+ struct Destructor\r
{\r
- ignoreUnused (nativeWindow);\r
+ void operator() (HPOWERNOTIFY ptr) const\r
+ {\r
+ if (ptr != nullptr)\r
+ UnregisterSuspendResumeNotification (ptr);\r
+ }\r
+ };\r
+\r
+ std::unique_ptr<std::remove_pointer_t<HPOWERNOTIFY>, Destructor> handle;\r
+};\r
\r
+//==============================================================================\r
+class ScopedThreadDPIAwarenessSetter::NativeImpl\r
+{\r
+public:\r
+ explicit NativeImpl (HWND nativeWindow [[maybe_unused]])\r
+ {\r
#if JUCE_WIN_PER_MONITOR_DPI_AWARE\r
if (auto* functionSingleton = FunctionSingleton::getInstance())\r
{\r
\r
JUCE_IMPLEMENT_SINGLETON (VBlankDispatcher)\r
\r
+//==============================================================================\r
+class SimpleTimer : private Timer\r
+{\r
+public:\r
+ SimpleTimer (int intervalMs, std::function<void()> callbackIn)\r
+ : callback (std::move (callbackIn))\r
+ {\r
+ jassert (callback);\r
+ startTimer (intervalMs);\r
+ }\r
+\r
+ ~SimpleTimer() override\r
+ {\r
+ stopTimer();\r
+ }\r
+\r
+private:\r
+ void timerCallback() override\r
+ {\r
+ callback();\r
+ }\r
+\r
+ std::function<void()> callback;\r
+};\r
+\r
//==============================================================================\r
class HWNDComponentPeer : public ComponentPeer,\r
private VBlankListener,\r
return ModifierKeys::currentModifiers;\r
};\r
\r
- if (updateCurrentMonitor())\r
- VBlankDispatcher::getInstance()->updateDisplay (*this, currentMonitor);\r
+ updateCurrentMonitorAndRefreshVBlankDispatcher();\r
+\r
+ if (parentToAddTo != nullptr)\r
+ monitorUpdateTimer.emplace (1000, [this] { updateCurrentMonitorAndRefreshVBlankDispatcher(); });\r
+\r
+ suspendResumeRegistration = ScopedSuspendResumeNotificationRegistration { hwnd };\r
}\r
\r
~HWNDComponentPeer() override\r
{\r
+ suspendResumeRegistration = {};\r
+\r
VBlankDispatcher::getInstance()->removeListener (*this);\r
\r
// do this first to avoid messages arriving for this window before it's destroyed\r
nameBuffer.clear();\r
nameBuffer.resize (bufferSize + 1, 0); // + 1 for the null terminator\r
\r
- const auto readCharacters = DragQueryFile (dropFiles, i, nameBuffer.data(), (UINT) nameBuffer.size());\r
- ignoreUnused (readCharacters);\r
+ [[maybe_unused]] const auto readCharacters = DragQueryFile (dropFiles, i, nameBuffer.data(), (UINT) nameBuffer.size());\r
jassert (readCharacters == bufferSize);\r
\r
dragInfo.files.add (String (nameBuffer.data()));\r
}\r
#endif\r
\r
- void setCurrentRenderingEngine (int index) override\r
+ void setCurrentRenderingEngine ([[maybe_unused]] int index) override\r
{\r
- ignoreUnused (index);\r
-\r
#if JUCE_DIRECT2D\r
if (getAvailableRenderingEngines().size() > 1)\r
{\r
const UINT keyChar = MapVirtualKey ((UINT) key, 2);\r
const UINT scanCode = MapVirtualKey ((UINT) key, 0);\r
BYTE keyState[256];\r
- ignoreUnused (GetKeyboardState (keyState));\r
+ [[maybe_unused]] const auto state = GetKeyboardState (keyState);\r
\r
WCHAR text[16] = { 0 };\r
if (ToUnicode ((UINT) key, scanCode, keyState, text, 8, 0) != 1)\r
return 0;\r
}\r
\r
- bool updateCurrentMonitor()\r
+ enum class ForceRefreshDispatcher\r
+ {\r
+ no,\r
+ yes\r
+ };\r
+\r
+ void updateCurrentMonitorAndRefreshVBlankDispatcher (ForceRefreshDispatcher force = ForceRefreshDispatcher::no)\r
{\r
auto monitor = MonitorFromWindow (hwnd, MONITOR_DEFAULTTONULL);\r
- return std::exchange (currentMonitor, monitor) != monitor;\r
+\r
+ if (std::exchange (currentMonitor, monitor) != monitor || force == ForceRefreshDispatcher::yes)\r
+ VBlankDispatcher::getInstance()->updateDisplay (*this, currentMonitor);\r
}\r
\r
bool handlePositionChanged()\r
}\r
\r
handleMovedOrResized();\r
-\r
- if (updateCurrentMonitor())\r
- VBlankDispatcher::getInstance()->updateDisplay (*this, currentMonitor);\r
+ updateCurrentMonitorAndRefreshVBlankDispatcher();\r
\r
return ! dontRepaint; // to allow non-accelerated openGL windows to draw themselves correctly.\r
}\r
\r
auto* dispatcher = VBlankDispatcher::getInstance();\r
dispatcher->reconfigureDisplays();\r
- updateCurrentMonitor();\r
- dispatcher->updateDisplay (*this, currentMonitor);\r
+ updateCurrentMonitorAndRefreshVBlankDispatcher (ForceRefreshDispatcher::yes);\r
}\r
\r
//==============================================================================\r
bool shouldIgnoreModalDismiss = false;\r
\r
RectangleList<int> deferredRepaints;\r
+ ScopedSuspendResumeNotificationRegistration suspendResumeRegistration;\r
+ std::optional<SimpleTimer> monitorUpdateTimer;\r
\r
//==============================================================================\r
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (HWNDComponentPeer)\r
--- /dev/null
+/*\r
+ ==============================================================================\r
+\r
+ This file is part of the JUCE library.\r
+ Copyright (c) 2022 - Raw Material Software Limited\r
+\r
+ JUCE is an open source library subject to commercial or open-source\r
+ licensing.\r
+\r
+ By using JUCE, you agree to the terms of both the JUCE 7 End-User License\r
+ Agreement and JUCE Privacy Policy.\r
+\r
+ End User License Agreement: www.juce.com/juce-7-licence\r
+ Privacy Policy: www.juce.com/juce-privacy-policy\r
+\r
+ Or: You may also use this code under the terms of the GPL v3 (see\r
+ www.gnu.org/licenses).\r
+\r
+ JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER\r
+ EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE\r
+ DISCLAIMED.\r
+\r
+ ==============================================================================\r
+*/\r
+\r
+namespace juce\r
+{\r
+\r
+extern XContext windowHandleXContext;\r
+\r
+/* Attaches a pointer to a given window, so that it can be retrieved with XFindContext on\r
+ the windowHandleXContext.\r
+*/\r
+class ScopedWindowAssociation\r
+{\r
+public:\r
+ ScopedWindowAssociation() = default;\r
+\r
+ ScopedWindowAssociation (void* associatedIn, Window windowIn)\r
+ : associatedPointer ([&]() -> void*\r
+ {\r
+ if (associatedIn == nullptr)\r
+ return nullptr;\r
+\r
+ // If you hit this, there's already a pointer associated with this window.\r
+ const auto display = XWindowSystem::getInstance()->getDisplay();\r
+ jassert (! getAssociatedPointer (display, windowIn).has_value());\r
+\r
+ if (X11Symbols::getInstance()->xSaveContext (display,\r
+ static_cast<XID> (windowIn),\r
+ windowHandleXContext,\r
+ unalignedPointerCast<XPointer> (associatedIn)) != 0)\r
+ {\r
+ jassertfalse;\r
+ return nullptr;\r
+ }\r
+\r
+ return associatedIn;\r
+ }()),\r
+ window (static_cast<XID> (windowIn)) {}\r
+\r
+ ScopedWindowAssociation (const ScopedWindowAssociation&) = delete;\r
+ ScopedWindowAssociation& operator= (const ScopedWindowAssociation&) = delete;\r
+\r
+ ScopedWindowAssociation (ScopedWindowAssociation&& other) noexcept\r
+ : associatedPointer (std::exchange (other.associatedPointer, nullptr)), window (other.window) {}\r
+\r
+ ScopedWindowAssociation& operator= (ScopedWindowAssociation&& other) noexcept\r
+ {\r
+ ScopedWindowAssociation { std::move (other) }.swap (*this);\r
+ return *this;\r
+ }\r
+\r
+ ~ScopedWindowAssociation() noexcept\r
+ {\r
+ if (associatedPointer == nullptr)\r
+ return;\r
+\r
+ const auto display = XWindowSystem::getInstance()->getDisplay();\r
+ const auto ptr = getAssociatedPointer (display, window);\r
+\r
+ if (! ptr.has_value())\r
+ {\r
+ // If you hit this, something else has cleared this association before we were able to.\r
+ jassertfalse;\r
+ return;\r
+ }\r
+\r
+ jassert (unalignedPointerCast<XPointer> (associatedPointer) == *ptr);\r
+\r
+ if (X11Symbols::getInstance()->xDeleteContext (display, window, windowHandleXContext) != 0)\r
+ jassertfalse;\r
+ }\r
+\r
+ bool isValid() const { return associatedPointer != nullptr; }\r
+\r
+private:\r
+ static std::optional<XPointer> getAssociatedPointer (Display* display, Window window)\r
+ {\r
+ XPointer ptr{};\r
+\r
+ if (X11Symbols::getInstance()->xFindContext (display, window, windowHandleXContext, &ptr) != 0)\r
+ return std::nullopt;\r
+\r
+ return ptr;\r
+ }\r
+\r
+ void swap (ScopedWindowAssociation& other) noexcept\r
+ {\r
+ std::swap (other.associatedPointer, associatedPointer);\r
+ std::swap (other.window, window);\r
+ }\r
+\r
+ void* associatedPointer = nullptr;\r
+ XID window{};\r
+};\r
+\r
+} // namespace juce\r
return 0;\r
}\r
\r
- static int errorHandler (::Display* display, XErrorEvent* event)\r
+ static int errorHandler ([[maybe_unused]] ::Display* display, [[maybe_unused]] XErrorEvent* event)\r
{\r
- ignoreUnused (display, event);\r
-\r
#if JUCE_DEBUG_XERRORS\r
char errorStr[64] = { 0 };\r
char requestStr[64] = { 0 };\r
if (windowH == 0)\r
return nullptr;\r
\r
- XPointer peer = nullptr;\r
-\r
if (auto* display = XWindowSystem::getInstance()->getDisplay())\r
{\r
XWindowSystemUtilities::ScopedXLock xLock;\r
- X11Symbols::getInstance()->xFindContext (display, (XID) windowH, windowHandleXContext, &peer);\r
+\r
+ if (XPointer peer = nullptr;\r
+ X11Symbols::getInstance()->xFindContext (display,\r
+ static_cast<XID> (windowH),\r
+ windowHandleXContext,\r
+ &peer) == 0)\r
+ {\r
+ return unalignedPointerCast<ComponentPeer*> (peer);\r
+ }\r
}\r
\r
- return unalignedPointerCast<ComponentPeer*> (peer);\r
+ return nullptr;\r
}\r
\r
//==============================================================================\r
&swa);\r
\r
// Set the window context to identify the window handle object\r
- if (X11Symbols::getInstance()->xSaveContext (display, (XID) windowH, windowHandleXContext, (XPointer) peer))\r
+ if (! peer->setWindowAssociation (windowH))\r
{\r
// Failed\r
jassertfalse;\r
\r
XWindowSystemUtilities::ScopedXLock xLock;\r
\r
- XPointer handlePointer;\r
-\r
- if (! X11Symbols::getInstance()->xFindContext (display, (XID) windowH, windowHandleXContext, &handlePointer))\r
- X11Symbols::getInstance()->xDeleteContext (display, (XID) windowH, windowHandleXContext);\r
+ peer->clearWindowAssociation();\r
\r
X11Symbols::getInstance()->xDestroyWindow (display, windowH);\r
\r
return displays;\r
}\r
\r
-::Window XWindowSystem::createKeyProxy (::Window windowH) const\r
+::Window XWindowSystem::createKeyProxy (::Window windowH)\r
{\r
jassert (windowH != 0);\r
\r
&swa);\r
\r
X11Symbols::getInstance()->xMapWindow (display, keyProxy);\r
- X11Symbols::getInstance()->xSaveContext (display, (XID) keyProxy, windowHandleXContext, (XPointer) this);\r
\r
return keyProxy;\r
}\r
{\r
jassert (keyProxy != 0);\r
\r
- XPointer handlePointer;\r
-\r
- if (! X11Symbols::getInstance()->xFindContext (display, (XID) keyProxy, windowHandleXContext, &handlePointer))\r
- X11Symbols::getInstance()->xDeleteContext (display, (XID) keyProxy, windowHandleXContext);\r
-\r
X11Symbols::getInstance()->xDestroyWindow (display, keyProxy);\r
X11Symbols::getInstance()->xSync (display, false);\r
\r
\r
Array<Displays::Display> findDisplays (float masterScale) const;\r
\r
- ::Window createKeyProxy (::Window) const;\r
+ ::Window createKeyProxy (::Window);\r
void deleteKeyProxy (::Window) const;\r
\r
bool externalDragFileInit (LinuxComponentPeer*, const StringArray& files, bool canMove, std::function<void()>&& callback) const;\r
}\r
\r
//==============================================================================\r
-Component* ListBoxModel::refreshComponentForRow (int, bool, Component* existingComponentToUpdate)\r
+Component* ListBoxModel::refreshComponentForRow (int, bool, [[maybe_unused]] Component* existingComponentToUpdate)\r
{\r
- ignoreUnused (existingComponentToUpdate);\r
jassert (existingComponentToUpdate == nullptr); // indicates a failure in the code that recycles the components\r
return nullptr;\r
}\r
setColumnVisible (menuReturnId, ! isColumnVisible (menuReturnId));\r
}\r
\r
+void TableHeaderComponent::drawColumnHeader (Graphics& g, LookAndFeel& lf, const ColumnInfo& ci)\r
+{\r
+ // Only paint columns that are visible\r
+ if (! ci.isVisible())\r
+ return;\r
+\r
+ // If this column is being dragged, it shouldn't be drawn in the table header\r
+ if (ci.id == columnIdBeingDragged && dragOverlayComp != nullptr && dragOverlayComp->isVisible())\r
+ return;\r
+\r
+ // There's no point drawing this column header if no part of it is visible\r
+ if (! g.getClipBounds()\r
+ .getHorizontalRange()\r
+ .intersects (Range<int>::withStartAndLength (ci.getX(), ci.width)))\r
+ return;\r
+\r
+ Graphics::ScopedSaveState ss (g);\r
+\r
+ g.setOrigin (ci.getX(), ci.getY());\r
+ g.reduceClipRegion (0, 0, ci.width, ci.getHeight());\r
+\r
+ lf.drawTableHeaderColumn (g, *this, ci.getTitle(), ci.id, ci.width, getHeight(),\r
+ ci.id == columnIdUnderMouse,\r
+ ci.id == columnIdUnderMouse && isMouseButtonDown(),\r
+ ci.propertyFlags);\r
+}\r
+\r
void TableHeaderComponent::paint (Graphics& g)\r
{\r
auto& lf = getLookAndFeel();\r
lf.drawTableHeaderBackground (g, *this);\r
\r
for (auto* ci : columns)\r
- {\r
- if (ci->isVisible() && ci->getWidth() > 0)\r
- {\r
- Graphics::ScopedSaveState ss (g);\r
-\r
- g.setOrigin (ci->getX(), ci->getY());\r
- g.reduceClipRegion (0, 0, ci->getWidth(), ci->getHeight());\r
-\r
- lf.drawTableHeaderColumn (g, *this, ci->getTitle(), ci->id, ci->width, getHeight(),\r
- ci->id == columnIdUnderMouse,\r
- ci->id == columnIdUnderMouse && isMouseButtonDown(),\r
- ci->propertyFlags);\r
- }\r
- }\r
+ drawColumnHeader (g, lf, *ci);\r
}\r
\r
void TableHeaderComponent::resized()\r
{\r
- auto clip = getBounds();\r
-\r
int x = 0;\r
\r
- for (auto* ci : columns)\r
- ci->setBounds (0, 0, 0, 0);\r
-\r
for (auto* ci : columns)\r
{\r
- if (ci->isVisible())\r
- {\r
- if (x + ci->width > clip.getX()\r
- && (ci->id != columnIdBeingDragged\r
- || dragOverlayComp == nullptr\r
- || ! dragOverlayComp->isVisible()))\r
- {\r
- ci->setBounds (x, 0, ci->width, getHeight());\r
- }\r
-\r
- x += ci->width;\r
-\r
- if (x >= clip.getRight())\r
- break;\r
- }\r
+ const auto widthToUse = ci->isVisible() ? ci->width : 0;\r
+ ci->setBounds (x, 0, widthToUse, getHeight());\r
+ x += widthToUse;\r
}\r
}\r
\r
void updateColumnUnderMouse (const MouseEvent&);\r
void setColumnUnderMouse (int columnId);\r
void resizeColumnsToFit (int firstColumnIndex, int targetTotalWidth);\r
+ void drawColumnHeader (Graphics&, LookAndFeel&, const ColumnInfo&);\r
\r
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TableHeaderComponent)\r
};\r
String TableListBoxModel::getCellTooltip (int /*rowNumber*/, int /*columnId*/) { return {}; }\r
var TableListBoxModel::getDragSourceDescription (const SparseSet<int>&) { return {}; }\r
\r
-Component* TableListBoxModel::refreshComponentForCell (int, int, bool, Component* existingComponentToUpdate)\r
+Component* TableListBoxModel::refreshComponentForCell (int, int, bool, [[maybe_unused]] Component* existingComponentToUpdate)\r
{\r
- ignoreUnused (existingComponentToUpdate);\r
jassert (existingComponentToUpdate == nullptr); // indicates a failure in the code that recycles the components\r
return nullptr;\r
}\r
\r
TextEditor::~TextEditor()\r
{\r
+ giveAwayKeyboardFocus();\r
+\r
+ if (auto* peer = getPeer())\r
+ peer->refreshTextInputTarget();\r
+\r
textValue.removeListener (textHolder);\r
textValue.referTo (Value());\r
\r
textValue = newText;\r
\r
auto oldCursorPos = caretPosition;\r
- bool cursorWasAtEnd = oldCursorPos >= getTotalNumChars();\r
+ auto cursorWasAtEnd = oldCursorPos >= getTotalNumChars();\r
\r
clearInternal (nullptr);\r
insert (newText, 0, currentFont, findColour (textColourId), nullptr, caretPosition);\r
}\r
\r
//==============================================================================\r
-void TextEditor::moveCaret (int newCaretPos)\r
+void TextEditor::moveCaret (const int newCaretPos)\r
{\r
- if (newCaretPos < 0)\r
- newCaretPos = 0;\r
- else\r
- newCaretPos = jmin (newCaretPos, getTotalNumChars());\r
+ const auto clamped = std::clamp (newCaretPos, 0, getTotalNumChars());\r
\r
- if (newCaretPos != getCaretPosition())\r
- {\r
- caretPosition = newCaretPos;\r
+ if (clamped == getCaretPosition())\r
+ return;\r
\r
- if (hasKeyboardFocus (false))\r
- textHolder->restartTimer();\r
+ caretPosition = clamped;\r
\r
- scrollToMakeSureCursorIsVisible();\r
- updateCaretPosition();\r
+ if (hasKeyboardFocus (false))\r
+ textHolder->restartTimer();\r
\r
- if (auto* handler = getAccessibilityHandler())\r
- handler->notifyAccessibilityEvent (AccessibilityEvent::textChanged);\r
- }\r
+ scrollToMakeSureCursorIsVisible();\r
+ updateCaretPosition();\r
+\r
+ if (auto* handler = getAccessibilityHandler())\r
+ handler->notifyAccessibilityEvent (AccessibilityEvent::textChanged);\r
}\r
\r
int TextEditor::getCaretPosition() const\r
repaint();\r
}\r
\r
+TextInputTarget::VirtualKeyboardType TextEditor::getKeyboardType()\r
+{\r
+ return passwordCharacter != 0 ? passwordKeyboard : keyboardType;\r
+}\r
+\r
//==============================================================================\r
UndoManager* TextEditor::getUndoManager() noexcept\r
{\r
/** @internal */\r
void setTemporaryUnderlining (const Array<Range<int>>&) override;\r
/** @internal */\r
- VirtualKeyboardType getKeyboardType() override { return keyboardType; }\r
+ VirtualKeyboardType getKeyboardType() override;\r
\r
protected:\r
//==============================================================================\r
textCharacter));\r
}\r
\r
-\r
bool ComponentPeer::handleKeyPress (const KeyPress& keyInfo)\r
{\r
bool keyWasUsed = false;\r
}\r
\r
//==============================================================================\r
-int ComponentPeer::getCurrentRenderingEngine() const { return 0; }\r
-void ComponentPeer::setCurrentRenderingEngine (int index) { jassert (index == 0); ignoreUnused (index); }\r
+int ComponentPeer::getCurrentRenderingEngine() const { return 0; }\r
+void ComponentPeer::setCurrentRenderingEngine ([[maybe_unused]] int index) { jassert (index == 0); }\r
\r
//==============================================================================\r
std::function<ModifierKeys()> ComponentPeer::getNativeRealtimeModifiers = nullptr;\r
Desktop::getInstance().displays->refresh();\r
}\r
\r
-void ComponentPeer::globalFocusChanged (Component*)\r
+void ComponentPeer::globalFocusChanged ([[maybe_unused]] Component* comp)\r
{\r
refreshTextInputTarget();\r
}\r
Thread::Priority for values\r
@returns true if the thread finished normally; false if the user pressed cancel\r
*/\r
- bool runThread (Priority Priority = Priority::normal);\r
+ bool runThread (Priority priority = Priority::normal);\r
#endif\r
\r
/** Starts the thread and returns.\r
\r
CodeEditorComponent::~CodeEditorComponent()\r
{\r
+ giveAwayKeyboardFocus();\r
+\r
+ if (auto* peer = getPeer())\r
+ peer->refreshTextInputTarget();\r
+\r
document.removeListener (pimpl.get());\r
}\r
\r
updateScrollBars();\r
}\r
\r
-void CodeEditorComponent::retokenise (int startIndex, int endIndex)\r
+void CodeEditorComponent::retokenise (int startIndex, [[maybe_unused]] int endIndex)\r
{\r
const CodeDocument::Position affectedTextStart (document, startIndex);\r
- juce::ignoreUnused (endIndex); // Leave room for more efficient impl in future.\r
\r
clearCachedIterators (affectedTextStart.getLineNumber());\r
\r
#include "misc/juce_SystemTrayIconComponent.cpp"\r
#include "misc/juce_LiveConstantEditor.cpp"\r
#include "misc/juce_AnimatedAppComponent.cpp"\r
+#include "misc/juce_WebBrowserComponent.cpp"\r
\r
//==============================================================================\r
#if JUCE_MAC || JUCE_IOS\r
#elif JUCE_LINUX || JUCE_BSD\r
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wzero-as-null-pointer-constant")\r
\r
+ #include <juce_gui_basics/native/x11/juce_linux_ScopedWindowAssociation.h>\r
#include "native/juce_linux_XEmbedComponent.cpp"\r
\r
#if JUCE_WEB_BROWSER\r
\r
ID: juce_gui_extra\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\r
name: JUCE extended GUI classes\r
description: Miscellaneous GUI classes for specialised tasks.\r
website: http://www.juce.com/juce\r
\r
@tags{GUI}\r
*/\r
-class AnimatedAppComponent : public Component,\r
- private Timer\r
+class JUCE_API AnimatedAppComponent : public Component,\r
+ private Timer\r
{\r
public:\r
AnimatedAppComponent();\r
void PushNotifications::addListener (Listener* l) { listeners.add (l); }\r
void PushNotifications::removeListener (Listener* l) { listeners.remove (l); }\r
\r
-void PushNotifications::requestPermissionsWithSettings (const PushNotifications::Settings& settings)\r
+void PushNotifications::requestPermissionsWithSettings ([[maybe_unused]] const PushNotifications::Settings& settings)\r
{\r
#if JUCE_PUSH_NOTIFICATIONS && (JUCE_IOS || JUCE_MAC)\r
pimpl->requestPermissionsWithSettings (settings);\r
#else\r
- ignoreUnused (settings);\r
listeners.call ([] (Listener& l) { l.notificationSettingsReceived ({}); });\r
#endif\r
}\r
#endif\r
}\r
\r
-void PushNotifications::setupChannels (const Array<ChannelGroup>& groups, const Array<Channel>& channels)\r
+void PushNotifications::setupChannels ([[maybe_unused]] const Array<ChannelGroup>& groups, [[maybe_unused]] const Array<Channel>& channels)\r
{\r
#if JUCE_PUSH_NOTIFICATIONS\r
pimpl->setupChannels (groups, channels);\r
- #else\r
- ignoreUnused (groups, channels);\r
#endif\r
}\r
\r
#endif\r
}\r
\r
-void PushNotifications::subscribeToTopic (const String& topic)\r
+void PushNotifications::subscribeToTopic ([[maybe_unused]] const String& topic)\r
{\r
#if JUCE_PUSH_NOTIFICATIONS\r
pimpl->subscribeToTopic (topic);\r
- #else\r
- ignoreUnused (topic);\r
#endif\r
}\r
\r
-void PushNotifications::unsubscribeFromTopic (const String& topic)\r
+void PushNotifications::unsubscribeFromTopic ([[maybe_unused]] const String& topic)\r
{\r
#if JUCE_PUSH_NOTIFICATIONS\r
pimpl->unsubscribeFromTopic (topic);\r
- #else\r
- ignoreUnused (topic);\r
#endif\r
}\r
\r
\r
-void PushNotifications::sendLocalNotification (const Notification& n)\r
+void PushNotifications::sendLocalNotification ([[maybe_unused]] const Notification& n)\r
{\r
#if JUCE_PUSH_NOTIFICATIONS\r
pimpl->sendLocalNotification (n);\r
- #else\r
- ignoreUnused (n);\r
#endif\r
}\r
\r
-void PushNotifications::removeDeliveredNotification (const String& identifier)\r
+void PushNotifications::removeDeliveredNotification ([[maybe_unused]] const String& identifier)\r
{\r
#if JUCE_PUSH_NOTIFICATIONS\r
pimpl->removeDeliveredNotification (identifier);\r
- #else\r
- ignoreUnused (identifier);\r
#endif\r
}\r
\r
-void PushNotifications::removePendingLocalNotification (const String& identifier)\r
+void PushNotifications::removePendingLocalNotification ([[maybe_unused]] const String& identifier)\r
{\r
#if JUCE_PUSH_NOTIFICATIONS\r
pimpl->removePendingLocalNotification (identifier);\r
- #else\r
- ignoreUnused (identifier);\r
#endif\r
}\r
\r
-void PushNotifications::sendUpstreamMessage (const String& serverSenderId,\r
- const String& collapseKey,\r
- const String& messageId,\r
- const String& messageType,\r
- int timeToLive,\r
- const StringPairArray& additionalData)\r
+void PushNotifications::sendUpstreamMessage ([[maybe_unused]] const String& serverSenderId,\r
+ [[maybe_unused]] const String& collapseKey,\r
+ [[maybe_unused]] const String& messageId,\r
+ [[maybe_unused]] const String& messageType,\r
+ [[maybe_unused]] int timeToLive,\r
+ [[maybe_unused]] const StringPairArray& additionalData)\r
{\r
#if JUCE_PUSH_NOTIFICATIONS\r
pimpl->sendUpstreamMessage (serverSenderId,\r
messageType,\r
timeToLive,\r
additionalData);\r
- #else\r
- ignoreUnused (serverSenderId, collapseKey, messageId, messageType);\r
- ignoreUnused (timeToLive, additionalData);\r
#endif\r
}\r
\r
+//==============================================================================\r
+void PushNotifications::Listener::notificationSettingsReceived ([[maybe_unused]] const Settings& settings) {}\r
+void PushNotifications::Listener::pendingLocalNotificationsListReceived ([[maybe_unused]] const Array<Notification>& notifications) {}\r
+void PushNotifications::Listener::handleNotification ([[maybe_unused]] bool isLocalNotification,\r
+ [[maybe_unused]] const Notification& notification) {}\r
+void PushNotifications::Listener::handleNotificationAction ([[maybe_unused]] bool isLocalNotification,\r
+ [[maybe_unused]] const Notification& notification,\r
+ [[maybe_unused]] const String& actionIdentifier,\r
+ [[maybe_unused]] const String& optionalResponse) {}\r
+void PushNotifications::Listener::localNotificationDismissedByUser ([[maybe_unused]] const Notification& notification) {}\r
+void PushNotifications::Listener::deliveredNotificationsListReceived ([[maybe_unused]] const Array<Notification>& notifications) {}\r
+void PushNotifications::Listener::deviceTokenRefreshed ([[maybe_unused]] const String& token) {}\r
+void PushNotifications::Listener::remoteNotificationsDeleted() {}\r
+void PushNotifications::Listener::upstreamMessageSent ([[maybe_unused]] const String& messageId) {}\r
+void PushNotifications::Listener::upstreamMessageSendingError ([[maybe_unused]] const String& messageId,\r
+ [[maybe_unused]] const String& error) {}\r
+\r
} // namespace juce\r
with no categories and all allow flags set to true will be received in\r
Listener::notificationSettingsReceived().\r
*/\r
- virtual void notificationSettingsReceived (const Settings& settings) { ignoreUnused (settings); }\r
+ virtual void notificationSettingsReceived (const Settings& settings);\r
\r
/** Called when the list of pending notifications, requested by calling\r
getPendingLocalNotifications() is returned. iOS 10 or above only.\r
*/\r
- virtual void pendingLocalNotificationsListReceived (const Array<Notification>& notifications) { ignoreUnused (notifications); }\r
+ virtual void pendingLocalNotificationsListReceived (const Array<Notification>& notifications);\r
\r
/** This can be called in multiple different situations, depending on the OS and the situation.\r
\r
\r
Note you can receive this callback on startup, if the application was launched from a notification.\r
*/\r
- virtual void handleNotification (bool isLocalNotification, const Notification& notification) { ignoreUnused (isLocalNotification); ignoreUnused (notification); }\r
+ virtual void handleNotification (bool isLocalNotification, const Notification& notification);\r
\r
/** This can be called when a user performs some action on the notification such as\r
pressing on an action button or responding with a text input.\r
virtual void handleNotificationAction (bool isLocalNotification,\r
const Notification& notification,\r
const String& actionIdentifier,\r
- const String& optionalResponse)\r
- {\r
- ignoreUnused (isLocalNotification);\r
- ignoreUnused (notification);\r
- ignoreUnused (actionIdentifier);\r
- ignoreUnused (optionalResponse);\r
- }\r
+ const String& optionalResponse);\r
\r
/** For iOS10 and Android, this can be also called when a user dismissed the notification before\r
responding to it.\r
*/\r
- virtual void localNotificationDismissedByUser (const Notification& notification) { ignoreUnused (notification); }\r
+ virtual void localNotificationDismissedByUser (const Notification& notification);\r
\r
/** Called after getDeliveredNotifications() request is fulfilled. Returns notifications\r
that are visible in the notification area on the device and that are still waiting\r
On iOS, iOS version 10 or higher is required. On Android, API level 18 or higher is required.\r
For unsupported platforms, an empty array will be returned.\r
*/\r
- virtual void deliveredNotificationsListReceived (const Array<Notification>& notifications) { ignoreUnused (notifications); }\r
+ virtual void deliveredNotificationsListReceived (const Array<Notification>& notifications);\r
\r
/** Called whenever a token gets refreshed. You should monitor any token updates, because\r
only the last token that is assigned to device is valid and can be used.\r
*/\r
- virtual void deviceTokenRefreshed (const String& token) { ignoreUnused (token); }\r
+ virtual void deviceTokenRefreshed (const String& token);\r
\r
/** Called when Firebase Cloud Messaging server deletes pending messages. This can happen when\r
1) too many messages were sent to the server (hint: use collapsible messages).\r
2) the devices hasn't been online in a long time (refer to Firebase documentation for\r
the maximum time a message can be stored on FCM before expiring).\r
*/\r
- virtual void remoteNotificationsDeleted() {}\r
+ virtual void remoteNotificationsDeleted();\r
\r
/** Called when an upstream message sent with PushNotifications::sendUpstreamMessage() has been\r
sent successfully.\r
Bear in mind that in may take several minutes or more to receive this callback.\r
*/\r
- virtual void upstreamMessageSent (const String& messageId) { ignoreUnused (messageId); }\r
+ virtual void upstreamMessageSent (const String& messageId);\r
\r
/** Called when there was an error sending an upstream message with\r
PushNotifications::sendUpstreamMessage().\r
Bear in mind that in may take several minutes or more to receive this callback.\r
*/\r
- virtual void upstreamMessageSendingError (const String& messageId, const String& error) { ignoreUnused (messageId); ignoreUnused (error); }\r
+ virtual void upstreamMessageSendingError (const String& messageId, const String& error);\r
};\r
\r
void addListener (Listener* l);\r
\r
\r
//==============================================================================\r
-void RecentlyOpenedFilesList::registerRecentFileNatively (const File& file)\r
+void RecentlyOpenedFilesList::registerRecentFileNatively ([[maybe_unused]] const File& file)\r
{\r
#if JUCE_MAC\r
JUCE_AUTORELEASEPOOL\r
{\r
[[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL: createNSURLFromFile (file)];\r
}\r
- #else\r
- ignoreUnused (file);\r
#endif\r
}\r
\r
-void RecentlyOpenedFilesList::forgetRecentFileNatively (const File& file)\r
+void RecentlyOpenedFilesList::forgetRecentFileNatively ([[maybe_unused]] const File& file)\r
{\r
#if JUCE_MAC\r
JUCE_AUTORELEASEPOOL\r
if (! [url isEqual:nsFile])\r
[sharedDocController noteNewRecentDocumentURL:url];\r
}\r
- #else\r
- ignoreUnused (file);\r
#endif\r
}\r
\r
--- /dev/null
+/*\r
+ ==============================================================================\r
+\r
+ This file is part of the JUCE library.\r
+ Copyright (c) 2022 - Raw Material Software Limited\r
+\r
+ JUCE is an open source library subject to commercial or open-source\r
+ licensing.\r
+\r
+ By using JUCE, you agree to the terms of both the JUCE 7 End-User License\r
+ Agreement and JUCE Privacy Policy.\r
+\r
+ End User License Agreement: www.juce.com/juce-7-licence\r
+ Privacy Policy: www.juce.com/juce-privacy-policy\r
+\r
+ Or: You may also use this code under the terms of the GPL v3 (see\r
+ www.gnu.org/licenses).\r
+\r
+ JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER\r
+ EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE\r
+ DISCLAIMED.\r
+\r
+ ==============================================================================\r
+*/\r
+\r
+namespace juce\r
+{\r
+\r
+#if JUCE_WEB_BROWSER || DOXYGEN\r
+\r
+bool WebBrowserComponent::pageAboutToLoad ([[maybe_unused]] const String& newURL) { return true; }\r
+void WebBrowserComponent::pageFinishedLoading ([[maybe_unused]] const String& url) {}\r
+bool WebBrowserComponent::pageLoadHadNetworkError ([[maybe_unused]] const String& errorInfo) { return true; }\r
+void WebBrowserComponent::windowCloseRequest() {}\r
+void WebBrowserComponent::newWindowAttemptingToLoad ([[maybe_unused]] const String& newURL) {}\r
+\r
+#endif\r
+\r
+} // namespace juce\r
of IE. To change this behaviour, you either need to add the following html element into your page's\r
head section:\r
\r
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />\r
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />\r
\r
or you need to change windows registry values for your application. More infromation on the latter\r
can be found here:\r
/** Creates a WebBrowserComponent.\r
\r
Once it's created and visible, send the browser to a URL using goToURL().\r
-\r
- @param unloadPageWhenBrowserIsHidden if this is true, then when the browser\r
- component is taken offscreen, it'll clear the current page\r
- and replace it with a blank page - this can be handy to stop\r
- the browser using resources in the background when it's not\r
- actually being used.\r
*/\r
explicit WebBrowserComponent (const Options& options);\r
\r
tries to go to a particular URL. To allow the operation to carry on,\r
return true, or return false to stop the navigation happening.\r
*/\r
- virtual bool pageAboutToLoad (const String& newURL) { ignoreUnused (newURL); return true; }\r
+ virtual bool pageAboutToLoad (const String& newURL);\r
\r
/** This callback happens when the browser has finished loading a page. */\r
- virtual void pageFinishedLoading (const String& url) { ignoreUnused (url); }\r
+ virtual void pageFinishedLoading (const String& url);\r
\r
/** This callback happens when a network error was encountered while\r
trying to load a page.\r
The errorInfo contains some platform dependent string describing the\r
error.\r
*/\r
- virtual bool pageLoadHadNetworkError (const String& errorInfo) { ignoreUnused (errorInfo); return true; }\r
+ virtual bool pageLoadHadNetworkError (const String& errorInfo);\r
\r
/** This callback occurs when a script or other activity in the browser asks for\r
the window to be closed.\r
*/\r
- virtual void windowCloseRequest() {}\r
+ virtual void windowCloseRequest();\r
\r
/** This callback occurs when the browser attempts to load a URL in a new window.\r
This won't actually load the window but gives you a chance to either launch a\r
new window yourself or just load the URL into the current window with goToURL().\r
*/\r
- virtual void newWindowAttemptingToLoad (const String& newURL) { ignoreUnused (newURL); }\r
+ virtual void newWindowAttemptingToLoad (const String& newURL);\r
\r
//==============================================================================\r
/** @internal */\r
\r
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WebBrowserComponent)\r
};\r
+\r
#endif\r
\r
} // namespace juce\r
#endif\r
}\r
\r
- void notifyListenersTokenRefreshed (const String& token)\r
+ void notifyListenersTokenRefreshed ([[maybe_unused]] const String& token)\r
{\r
#if defined(JUCE_FIREBASE_INSTANCE_ID_SERVICE_CLASSNAME)\r
MessageManager::callAsync ([this, token]\r
{\r
owner.listeners.call ([&] (Listener& l) { l.deviceTokenRefreshed (token); });\r
});\r
- #else\r
- ignoreUnused (token);\r
#endif\r
}\r
\r
//==============================================================================\r
- void subscribeToTopic (const String& topic)\r
+ void subscribeToTopic ([[maybe_unused]] const String& topic)\r
{\r
#if defined(JUCE_FIREBASE_MESSAGING_SERVICE_CLASSNAME)\r
auto* env = getEnv();\r
FirebaseMessaging.getInstance));\r
\r
env->CallObjectMethod (firebaseMessaging, FirebaseMessaging.subscribeToTopic, javaString (topic).get());\r
- #else\r
- ignoreUnused (topic);\r
#endif\r
}\r
\r
- void unsubscribeFromTopic (const String& topic)\r
+ void unsubscribeFromTopic ([[maybe_unused]] const String& topic)\r
{\r
#if defined(JUCE_FIREBASE_MESSAGING_SERVICE_CLASSNAME)\r
auto* env = getEnv();\r
FirebaseMessaging.getInstance));\r
\r
env->CallObjectMethod (firebaseMessaging, FirebaseMessaging.unsubscribeFromTopic, javaString (topic).get());\r
- #else\r
- ignoreUnused (topic);\r
#endif\r
}\r
\r
- void sendUpstreamMessage (const String& serverSenderId,\r
- const String& collapseKey,\r
- const String& messageId,\r
- const String& messageType,\r
- int timeToLive,\r
- const StringPairArray& additionalData)\r
+ void sendUpstreamMessage ([[maybe_unused]] const String& serverSenderId,\r
+ [[maybe_unused]] const String& collapseKey,\r
+ [[maybe_unused]] const String& messageId,\r
+ [[maybe_unused]] const String& messageType,\r
+ [[maybe_unused]] int timeToLive,\r
+ [[maybe_unused]] const StringPairArray& additionalData)\r
{\r
#if defined(JUCE_FIREBASE_MESSAGING_SERVICE_CLASSNAME)\r
auto* env = getEnv();\r
FirebaseMessaging.getInstance));\r
\r
env->CallVoidMethod (firebaseMessaging, FirebaseMessaging.send, message.get());\r
- #else\r
- ignoreUnused (serverSenderId, collapseKey, messageId, messageType);\r
- ignoreUnused (timeToLive, additionalData);\r
#endif\r
}\r
\r
- void notifyListenersAboutRemoteNotificationFromSystemTray (const LocalRef<jobject>& intent)\r
+ void notifyListenersAboutRemoteNotificationFromSystemTray ([[maybe_unused]] const LocalRef<jobject>& intent)\r
{\r
#if defined(JUCE_FIREBASE_MESSAGING_SERVICE_CLASSNAME)\r
auto* env = getEnv();\r
auto notification = remoteNotificationBundleToJuceNotification (bundle);\r
\r
owner.listeners.call ([&] (Listener& l) { l.handleNotification (false, notification); });\r
- #else\r
- ignoreUnused (intent);\r
#endif\r
}\r
\r
- void notifyListenersAboutRemoteNotificationFromService (const LocalRef<jobject>& remoteNotification)\r
+ void notifyListenersAboutRemoteNotificationFromService ([[maybe_unused]] const LocalRef<jobject>& remoteNotification)\r
{\r
#if defined(JUCE_FIREBASE_MESSAGING_SERVICE_CLASSNAME)\r
GlobalRef rn (remoteNotification);\r
auto notification = firebaseRemoteNotificationToJuceNotification (rn.get());\r
owner.listeners.call ([&] (Listener& l) { l.handleNotification (false, notification); });\r
});\r
- #else\r
- ignoreUnused (remoteNotification);\r
#endif\r
}\r
\r
#endif\r
}\r
\r
- void notifyListenersAboutUpstreamMessageSent (const LocalRef<jstring>& messageId)\r
+ void notifyListenersAboutUpstreamMessageSent ([[maybe_unused]] const LocalRef<jstring>& messageId)\r
{\r
#if defined(JUCE_FIREBASE_MESSAGING_SERVICE_CLASSNAME)\r
GlobalRef mid (LocalRef<jobject>(messageId.get()));\r
auto midString = juceString ((jstring) mid.get());\r
owner.listeners.call ([&] (Listener& l) { l.upstreamMessageSent (midString); });\r
});\r
- #else\r
- ignoreUnused (messageId);\r
#endif\r
}\r
\r
- void notifyListenersAboutUpstreamMessageSendingError (const LocalRef<jstring>& messageId,\r
- const LocalRef<jstring>& error)\r
+ void notifyListenersAboutUpstreamMessageSendingError ([[maybe_unused]] const LocalRef<jstring>& messageId,\r
+ [[maybe_unused]] const LocalRef<jstring>& error)\r
{\r
#if defined(JUCE_FIREBASE_MESSAGING_SERVICE_CLASSNAME)\r
GlobalRef mid (LocalRef<jobject>(messageId.get())), e (LocalRef<jobject>(error.get()));\r
\r
owner.listeners.call ([&] (Listener& l) { l.upstreamMessageSendingError (midString, eString); });\r
});\r
- #else\r
- ignoreUnused (messageId, error);\r
#endif\r
}\r
\r
instance->pimpl->notifyListenersTokenRefreshed (juceString (static_cast<jstring> (token)));\r
}\r
};\r
-\r
-JuceFirebaseInstanceIdService::InstanceIdService_Class JuceFirebaseInstanceIdService::InstanceIdService;\r
#endif\r
\r
#if defined(JUCE_FIREBASE_MESSAGING_SERVICE_CLASSNAME)\r
LocalRef<jstring> (static_cast<jstring> (error)));\r
}\r
};\r
-\r
-JuceFirebaseMessagingService::MessagingService_Class JuceFirebaseMessagingService::MessagingService;\r
#endif\r
\r
//==============================================================================\r
//==============================================================================\r
// This byte-code is generated from native/java/com/rmsl/juce/JuceWebView.java with min sdk version 16\r
// See juce_core/native/java/README.txt on how to generate this byte-code.\r
-static const unsigned char JuceWebView16ByteCode[] =\r
+static const uint8 JuceWebView16ByteCode[] =\r
{31,139,8,8,150,114,161,94,0,3,74,117,99,101,87,101,98,86,105,101,119,49,54,66,121,116,101,67,111,100,101,46,100,101,120,0,125,\r
150,93,108,20,85,20,199,207,124,236,78,119,218,110,183,5,74,191,40,109,69,168,72,89,176,162,165,11,88,40,159,101,81,161,88,226,\r
106,34,211,221,107,59,101,118,102,153,153,109,27,67,16,161,137,134,240,96,4,222,72,140,9,18,35,62,18,195,131,15,4,53,250,226,155,\r
//==============================================================================\r
// This byte-code is generated from native/javacore/app/com/rmsl/juce/JuceWebView21.java with min sdk version 21\r
// See juce_core/native/java/README.txt on how to generate this byte-code.\r
-static const unsigned char JuceWebView21ByteCode[] =\r
+static const uint8 JuceWebView21ByteCode[] =\r
{31,139,8,8,45,103,161,94,0,3,74,117,99,101,87,101,98,86,105,101,119,50,49,46,100,101,120,0,141,151,93,140,27,87,21,199,207,\r
204,216,30,219,99,59,182,55,251,145,143,221,110,210,173,178,105,154,186,155,164,52,169,211,106,241,38,219,221,48,41,52,155,108,\r
138,43,85,154,181,47,235,73,188,51,206,204,120,119,65,162,132,80,148,138,34,148,168,20,181,125,129,135,16,129,4,18,168,125,136,\r
#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \\r
METHOD (constructor, "<init>", "(J)V") \\r
METHOD (hostDeleted, "hostDeleted", "()V") \\r
- CALLBACK (webViewReceivedHttpError, "webViewReceivedHttpError", "(JLandroid/webkit/WebView;Landroid/webkit/WebResourceRequest;Landroid/webkit/WebResourceResponse;)V") \\r
- CALLBACK (webViewPageLoadStarted, "webViewPageLoadStarted", "(JLandroid/webkit/WebView;Ljava/lang/String;)Z") \\r
- CALLBACK (webViewPageLoadFinished, "webViewPageLoadFinished", "(JLandroid/webkit/WebView;Ljava/lang/String;)V") \\r
- CALLBACK (webViewReceivedSslError, "webViewReceivedSslError", "(JLandroid/webkit/WebView;Landroid/webkit/SslErrorHandler;Landroid/net/http/SslError;)V") \\r
+ CALLBACK (generatedCallback<&Pimpl::webViewReceivedHttpError>, "webViewReceivedHttpError", "(JLandroid/webkit/WebView;Landroid/webkit/WebResourceRequest;Landroid/webkit/WebResourceResponse;)V") \\r
+ CALLBACK (generatedCallback<&Pimpl::webViewPageLoadStarted>, "webViewPageLoadStarted", "(JLandroid/webkit/WebView;Ljava/lang/String;)Z") \\r
+ CALLBACK (generatedCallback<&Pimpl::webViewPageLoadFinished>, "webViewPageLoadFinished", "(JLandroid/webkit/WebView;Ljava/lang/String;)V") \\r
+ CALLBACK (generatedCallback<&Pimpl::webViewReceivedSslError>, "webViewReceivedSslError", "(JLandroid/webkit/WebView;Landroid/webkit/SslErrorHandler;Landroid/net/http/SslError;)V") \\r
\r
- DECLARE_JNI_CLASS_WITH_BYTECODE (JuceWebViewClient21, "com/rmsl/juce/JuceWebView21$Client", 21, JuceWebView21ByteCode, sizeof (JuceWebView21ByteCode))\r
+ DECLARE_JNI_CLASS_WITH_BYTECODE (JuceWebViewClient21, "com/rmsl/juce/JuceWebView21$Client", 21, JuceWebView21ByteCode)\r
#undef JNI_CLASS_MEMBERS\r
\r
#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \\r
METHOD (constructor, "<init>", "(J)V") \\r
METHOD (hostDeleted, "hostDeleted", "()V") \\r
- CALLBACK (webViewPageLoadStarted, "webViewPageLoadStarted", "(JLandroid/webkit/WebView;Ljava/lang/String;)Z") \\r
- CALLBACK (webViewPageLoadFinished, "webViewPageLoadFinished", "(JLandroid/webkit/WebView;Ljava/lang/String;)V") \\r
- CALLBACK (webViewReceivedSslError, "webViewReceivedSslError", "(JLandroid/webkit/WebView;Landroid/webkit/SslErrorHandler;Landroid/net/http/SslError;)V") \\r
+ CALLBACK (generatedCallback<&Pimpl::webViewPageLoadStarted>, "webViewPageLoadStarted", "(JLandroid/webkit/WebView;Ljava/lang/String;)Z") \\r
+ CALLBACK (generatedCallback<&Pimpl::webViewPageLoadFinished>, "webViewPageLoadFinished", "(JLandroid/webkit/WebView;Ljava/lang/String;)V") \\r
+ CALLBACK (generatedCallback<&Pimpl::webViewReceivedSslError>, "webViewReceivedSslError", "(JLandroid/webkit/WebView;Landroid/webkit/SslErrorHandler;Landroid/net/http/SslError;)V") \\r
\r
- DECLARE_JNI_CLASS_WITH_BYTECODE (JuceWebViewClient16, "com/rmsl/juce/JuceWebView$Client", 16, JuceWebView16ByteCode, sizeof (JuceWebView16ByteCode))\r
+ DECLARE_JNI_CLASS_WITH_BYTECODE (JuceWebViewClient16, "com/rmsl/juce/JuceWebView$Client", 16, JuceWebView16ByteCode)\r
#undef JNI_CLASS_MEMBERS\r
\r
- static jboolean JNICALL webViewPageLoadStarted (JNIEnv*, jobject /*activity*/, jlong host, jobject /*webView*/, jstring url)\r
+ static jboolean webViewPageLoadStarted (JNIEnv*, Pimpl& t, jstring url)\r
{\r
- if (auto* myself = reinterpret_cast<WebBrowserComponent::Pimpl*> (host))\r
- return myself->handlePageAboutToLoad (juceString (url));\r
-\r
- return 0;\r
+ return t.handlePageAboutToLoad (juceString (url));\r
}\r
\r
- static void JNICALL webViewPageLoadFinished (JNIEnv*, jobject /*activity*/, jlong host, jobject /*webView*/, jstring url)\r
+ static void webViewPageLoadFinished (JNIEnv*, Pimpl& t, jstring url)\r
{\r
- if (auto* myself = reinterpret_cast<WebBrowserComponent::Pimpl*> (host))\r
- myself->owner.pageFinishedLoading (juceString (url));\r
+ t.owner.pageFinishedLoading (juceString (url));\r
}\r
\r
- static void JNICALL webViewReceivedHttpError (JNIEnv*, jobject /*activity*/, jlong host, jobject /*webView*/, jobject /*request*/, jobject errorResponse)\r
+ static void webViewReceivedSslError (JNIEnv* env, Pimpl& t, jobject sslError)\r
{\r
- if (auto* myself = reinterpret_cast<WebBrowserComponent::Pimpl*> (host))\r
- myself->webReceivedHttpError (errorResponse);\r
- }\r
-\r
- static void JNICALL webViewReceivedSslError (JNIEnv*, jobject /*activity*/, jlong host, jobject /*webView*/, jobject /*sslErrorHandler*/, jobject sslError)\r
- {\r
- auto* env = getEnv();\r
-\r
- if (auto* myself = reinterpret_cast<WebBrowserComponent::Pimpl*> (host))\r
- {\r
- auto errorString = LocalRef<jstring> ((jstring) env->CallObjectMethod (sslError, SslError.toString));\r
-\r
- myself->owner.pageLoadHadNetworkError (juceString (errorString));\r
- }\r
+ const auto errorString = LocalRef<jstring> ((jstring) env->CallObjectMethod (sslError, SslError.toString));\r
+ t.owner.pageLoadHadNetworkError (juceString (errorString));\r
}\r
\r
//==============================================================================\r
#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \\r
METHOD (constructor, "<init>", "(J)V") \\r
- CALLBACK (webViewCloseWindowRequest, "webViewCloseWindowRequest", "(JLandroid/webkit/WebView;)V") \\r
- CALLBACK (webViewCreateWindowRequest, "webViewCreateWindowRequest", "(JLandroid/webkit/WebView;)V") \\r
+ CALLBACK (generatedCallback<&Pimpl::webViewCloseWindowRequest>, "webViewCloseWindowRequest", "(JLandroid/webkit/WebView;)V") \\r
+ CALLBACK (generatedCallback<&Pimpl::webViewCreateWindowRequest>, "webViewCreateWindowRequest", "(JLandroid/webkit/WebView;)V") \\r
\r
DECLARE_JNI_CLASS (JuceWebChromeClient, "com/rmsl/juce/JuceWebView$ChromeClient")\r
#undef JNI_CLASS_MEMBERS\r
\r
- static void JNICALL webViewCloseWindowRequest (JNIEnv*, jobject /*activity*/, jlong host, jobject /*webView*/)\r
+ static void webViewCloseWindowRequest (JNIEnv*, Pimpl& t, jobject)\r
{\r
- if (auto* myself = reinterpret_cast<WebBrowserComponent::Pimpl*> (host))\r
- myself->owner.windowCloseRequest();\r
+ t.owner.windowCloseRequest();\r
}\r
\r
- static void JNICALL webViewCreateWindowRequest (JNIEnv*, jobject /*activity*/, jlong host, jobject /*webView*/)\r
+ static void webViewCreateWindowRequest (JNIEnv*, Pimpl& t, jobject)\r
{\r
- if (auto* myself = reinterpret_cast<WebBrowserComponent::Pimpl*> (host))\r
- myself->owner.newWindowAttemptingToLoad ({});\r
+ t.owner.newWindowAttemptingToLoad ({});\r
}\r
\r
//==============================================================================\r
- void webReceivedHttpError (jobject errorResponse)\r
+ static void webViewReceivedHttpError (JNIEnv* env, Pimpl& t, jobject errorResponse)\r
{\r
- auto* env = getEnv();\r
-\r
LocalRef<jclass> responseClass (env->FindClass ("android/webkit/WebResourceResponse"));\r
\r
if (responseClass != nullptr)\r
{\r
auto errorString = LocalRef<jstring> ((jstring) env->CallObjectMethod (errorResponse, method));\r
\r
- owner.pageLoadHadNetworkError (juceString (errorString));\r
+ t.owner.pageLoadHadNetworkError (juceString (errorString));\r
return;\r
}\r
}\r
\r
// Should never get here!\r
jassertfalse;\r
- owner.pageLoadHadNetworkError ({});\r
+ t.owner.pageLoadHadNetworkError ({});\r
}\r
\r
//==============================================================================\r
addAndMakeVisible (browser.get());\r
}\r
\r
-WebBrowserComponent::~WebBrowserComponent()\r
-{\r
-}\r
+WebBrowserComponent::~WebBrowserComponent() = default;\r
\r
//==============================================================================\r
void WebBrowserComponent::goToURL (const String& url,\r
return (options.getBackend() == Options::Backend::defaultBackend);\r
}\r
\r
-WebBrowserComponent::Pimpl::JuceWebViewClient16_Class WebBrowserComponent::Pimpl::JuceWebViewClient16;\r
-WebBrowserComponent::Pimpl::JuceWebViewClient21_Class WebBrowserComponent::Pimpl::JuceWebViewClient21;\r
-WebBrowserComponent::Pimpl::JuceWebChromeClient_Class WebBrowserComponent::Pimpl::JuceWebChromeClient;\r
} // namespace juce\r
}\r
}\r
\r
- void removeDeliveredNotification (const String& identifier)\r
+ void removeDeliveredNotification ([[maybe_unused]] const String& identifier)\r
{\r
if (@available (iOS 10, *))\r
{\r
}\r
else\r
{\r
- ignoreUnused (identifier);\r
// Not supported on this platform\r
jassertfalse;\r
}\r
}\r
\r
- void setupChannels (const Array<ChannelGroup>& groups, const Array<Channel>& channels)\r
+ void setupChannels ([[maybe_unused]] const Array<ChannelGroup>& groups, [[maybe_unused]] const Array<Channel>& channels)\r
{\r
- ignoreUnused (groups, channels);\r
}\r
\r
void getPendingLocalNotifications() const\r
return deviceToken;\r
}\r
\r
- void subscribeToTopic (const String& topic) { ignoreUnused (topic); }\r
- void unsubscribeFromTopic (const String& topic) { ignoreUnused (topic); }\r
+ void subscribeToTopic ([[maybe_unused]] const String& topic) {}\r
+ void unsubscribeFromTopic ([[maybe_unused]] const String& topic) {}\r
\r
- void sendUpstreamMessage (const String& serverSenderId,\r
- const String& collapseKey,\r
- const String& messageId,\r
- const String& messageType,\r
- int timeToLive,\r
- const StringPairArray& additionalData)\r
+ void sendUpstreamMessage ([[maybe_unused]] const String& serverSenderId,\r
+ [[maybe_unused]] const String& collapseKey,\r
+ [[maybe_unused]] const String& messageId,\r
+ [[maybe_unused]] const String& messageType,\r
+ [[maybe_unused]] int timeToLive,\r
+ [[maybe_unused]] const StringPairArray& additionalData)\r
{\r
- ignoreUnused (serverSenderId, collapseKey, messageId, messageType);\r
- ignoreUnused (timeToLive, additionalData);\r
}\r
\r
private:\r
owner.listeners.call ([&] (Listener& l) { l.deviceTokenRefreshed (deviceToken); });\r
}\r
\r
- void failedToRegisterForRemoteNotifications (NSError* error)\r
+ void failedToRegisterForRemoteNotifications ([[maybe_unused]] NSError* error)\r
{\r
- ignoreUnused (error);\r
-\r
deviceToken.clear();\r
}\r
\r
\r
JUCE_END_IGNORE_WARNINGS_GCC_LIKE\r
\r
- void willPresentNotificationWithCompletionHandler (UNNotification* notification,\r
+ void willPresentNotificationWithCompletionHandler ([[maybe_unused]] UNNotification* notification,\r
void (^completionHandler)(UNNotificationPresentationOptions options))\r
{\r
NSUInteger options = NSUInteger ((int)settings.allowBadge << 0\r
| (int)settings.allowSound << 1\r
| (int)settings.allowAlert << 2);\r
\r
- ignoreUnused (notification);\r
-\r
completionHandler (options);\r
}\r
\r
break;\r
case WEBKIT_POLICY_DECISION_TYPE_RESPONSE:\r
{\r
- auto* response = (WebKitNavigationPolicyDecision*) decision;\r
+ [[maybe_unused]] auto* response = (WebKitNavigationPolicyDecision*) decision;\r
\r
// for now just always allow response requests\r
- ignoreUnused (response);\r
WebKitSymbols::getInstance()->juce_webkit_policy_decision_use (decision);\r
return true;\r
}\r
\r
launchChild();\r
\r
- auto ret = pipe (threadControl);\r
+ [[maybe_unused]] auto ret = pipe (threadControl);\r
\r
- ignoreUnused (ret);\r
jassert (ret == 0);\r
\r
CommandReceiver::setBlocking (inChannel, true);\r
{\r
int inPipe[2], outPipe[2];\r
\r
- auto ret = pipe (inPipe);\r
- ignoreUnused (ret); jassert (ret == 0);\r
+ [[maybe_unused]] auto ret = pipe (inPipe);\r
+ jassert (ret == 0);\r
\r
ret = pipe (outPipe);\r
- ignoreUnused (ret); jassert (ret == 0);\r
+ jassert (ret == 0);\r
\r
auto pid = fork();\r
if (pid == 0)\r
{\r
SharedKeyWindow (ComponentPeer* peerToUse)\r
: keyPeer (peerToUse),\r
- keyProxy (juce_createKeyProxyWindow (keyPeer))\r
+ keyProxy (juce_createKeyProxyWindow (keyPeer)),\r
+ association (peerToUse, keyProxy)\r
{}\r
\r
~SharedKeyWindow()\r
{\r
+ association = {};\r
juce_deleteKeyProxyWindow (keyProxy);\r
\r
auto& keyWindows = getKeyWindows();\r
//==============================================================================\r
ComponentPeer* keyPeer;\r
Window keyProxy;\r
+ ScopedWindowAssociation association;\r
\r
static HashMap<ComponentPeer*, SharedKeyWindow*>& getKeyWindows()\r
{\r
&cfPlugInInterface,\r
&score) == kIOReturnSuccess)\r
{\r
- HRESULT hr = (*cfPlugInInterface)->QueryInterface (cfPlugInInterface,\r
- CFUUIDGetUUIDBytes (kIOHIDDeviceInterfaceID),\r
- device);\r
-\r
- ignoreUnused (hr);\r
+ [[maybe_unused]] HRESULT hr = (*cfPlugInInterface)->QueryInterface (cfPlugInInterface,\r
+ CFUUIDGetUUIDBytes (kIOHIDDeviceInterfaceID),\r
+ device);\r
\r
(*cfPlugInInterface)->Release (cfPlugInInterface);\r
}\r
[[NSUserNotificationCenter defaultUserNotificationCenter] removeDeliveredNotification: nsNotification];\r
}\r
\r
- void setupChannels (const Array<ChannelGroup>& groups, const Array<Channel>& channels)\r
+ void setupChannels ([[maybe_unused]] const Array<ChannelGroup>& groups, [[maybe_unused]] const Array<Channel>& channels)\r
{\r
- ignoreUnused (groups, channels);\r
}\r
\r
void getPendingLocalNotifications() const\r
owner.listeners.call ([&] (Listener& l) { l.deviceTokenRefreshed (deviceToken); });\r
}\r
\r
- void failedToRegisterForRemoteNotifications (NSError* error) override\r
+ void failedToRegisterForRemoteNotifications ([[maybe_unused]] NSError* error) override\r
{\r
- ignoreUnused (error);\r
deviceToken.clear();\r
}\r
\r
owner.listeners.call ([&] (Listener& l) { l.handleNotification (true, n); });\r
}\r
\r
- void didDeliverNotification (NSUserNotification* notification) override\r
+ void didDeliverNotification ([[maybe_unused]] NSUserNotification* notification) override\r
{\r
- ignoreUnused (notification);\r
}\r
\r
void didActivateNotification (NSUserNotification* notification) override\r
\r
bool shouldPresentNotification (NSUserNotification*) override { return true; }\r
\r
- void subscribeToTopic (const String& topic) { ignoreUnused (topic); }\r
- void unsubscribeFromTopic (const String& topic) { ignoreUnused (topic); }\r
+ void subscribeToTopic ([[maybe_unused]] const String& topic) {}\r
+ void unsubscribeFromTopic ([[maybe_unused]] const String& topic) {}\r
\r
- void sendUpstreamMessage (const String& serverSenderId,\r
- const String& collapseKey,\r
- const String& messageId,\r
- const String& messageType,\r
- int timeToLive,\r
- const StringPairArray& additionalData)\r
+ void sendUpstreamMessage ([[maybe_unused]] const String& serverSenderId,\r
+ [[maybe_unused]] const String& collapseKey,\r
+ [[maybe_unused]] const String& messageId,\r
+ [[maybe_unused]] const String& messageType,\r
+ [[maybe_unused]] int timeToLive,\r
+ [[maybe_unused]] const StringPairArray& additionalData)\r
{\r
- ignoreUnused (serverSenderId, collapseKey, messageId, messageType);\r
- ignoreUnused (timeToLive, additionalData);\r
}\r
\r
private:\r
\r
if (newControl->control->DoVerb (OLEIVERB_SHOW, nullptr, newControl->clientSite, 0, hwnd, &rect) == S_OK)\r
{\r
- control.reset (newControl.release());\r
+ control = std::move (newControl);\r
control->controlHWND = ActiveXHelpers::getHWND (this);\r
\r
if (control->controlHWND != nullptr)\r
{\r
public:\r
Pimpl (WebBrowserComponent& owner,\r
- const Options& preferences,\r
- bool useWebView2, const String& userAgent)\r
+ [[maybe_unused]] const Options& preferences,\r
+ bool useWebView2,\r
+ const String& userAgent)\r
{\r
if (useWebView2)\r
{\r
#endif\r
}\r
\r
- ignoreUnused (preferences);\r
-\r
if (internal == nullptr)\r
internal.reset (new Win32WebView (owner, userAgent));\r
}\r
{\r
if (auto* comp = context->getTargetComponent())\r
{\r
- if (auto* peer = comp->getPeer())\r
+ if (auto* peer [[maybe_unused]] = comp->getPeer())\r
{\r
#if JUCE_MAC || JUCE_IOS\r
if (auto* nsView = (JUCE_IOS_MAC_VIEW*) peer->getNativeHandle())\r
{\r
- if (auto nsWindow = [nsView window])\r
+ if ([[maybe_unused]] auto nsWindow = [nsView window])\r
{\r
#if JUCE_MAC\r
return ([nsWindow isVisible]\r
&& (! [nsWindow hidesOnDeactivate] || [NSApp isActive]));\r
#else\r
- ignoreUnused (nsWindow);\r
return true;\r
#endif\r
}\r
}\r
#else\r
- ignoreUnused (peer);\r
return true;\r
#endif\r
}\r
#undef JUCE_IMPL_WGL_EXTENSION_FUNCTION\r
\r
#elif JUCE_LINUX || JUCE_BSD\r
+ #include <juce_gui_basics/native/x11/juce_linux_ScopedWindowAssociation.h>\r
#include "native/juce_OpenGL_linux_X11.h"\r
\r
#elif JUCE_ANDROID\r
\r
ID: juce_opengl\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\r
name: JUCE OpenGL classes\r
description: Classes for rendering OpenGL in a JUCE window.\r
website: http://www.juce.com/juce\r
};\r
\r
//==============================================================================\r
-struct AndroidGLCallbacks\r
-{\r
- static void attachedToWindow (JNIEnv*, jobject, jlong);\r
- static void detachedFromWindow (JNIEnv*, jobject, jlong);\r
- static void dispatchDraw (JNIEnv*, jobject, jlong, jobject);\r
-};\r
-\r
-//==============================================================================\r
-#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \\r
- METHOD (constructor, "<init>", "(Landroid/content/Context;J)V") \\r
- METHOD (getParent, "getParent", "()Landroid/view/ViewParent;") \\r
- METHOD (getHolder, "getHolder", "()Landroid/view/SurfaceHolder;") \\r
- METHOD (layout, "layout", "(IIII)V" ) \\r
- CALLBACK (AndroidGLCallbacks::attachedToWindow, "onAttchedWindowNative", "(J)V") \\r
- CALLBACK (AndroidGLCallbacks::detachedFromWindow, "onDetachedFromWindowNative", "(J)V") \\r
- CALLBACK (AndroidGLCallbacks::dispatchDraw, "onDrawNative", "(JLandroid/graphics/Canvas;)V")\r
-\r
-DECLARE_JNI_CLASS_WITH_BYTECODE (JuceOpenGLViewSurface, "com/rmsl/juce/JuceOpenGLView", 16, javaJuceOpenGLView, sizeof(javaJuceOpenGLView))\r
-#undef JNI_CLASS_MEMBERS\r
-\r
//==============================================================================\r
class OpenGLContext::NativeContext : private SurfaceHolderCallback\r
{\r
\r
//==============================================================================\r
// Android Surface Callbacks:\r
- void surfaceChanged (LocalRef<jobject> holder, int format, int width, int height) override\r
+ void surfaceChanged ([[maybe_unused]] LocalRef<jobject> holder,\r
+ [[maybe_unused]] int format,\r
+ [[maybe_unused]] int width,\r
+ [[maybe_unused]] int height) override\r
{\r
- ignoreUnused (holder, format, width, height);\r
}\r
\r
void surfaceCreated (LocalRef<jobject>) override;\r
Component& component;\r
\r
private:\r
- //==============================================================================\r
- friend struct AndroidGLCallbacks;\r
+ #define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \\r
+ METHOD (constructor, "<init>", "(Landroid/content/Context;J)V") \\r
+ METHOD (getParent, "getParent", "()Landroid/view/ViewParent;") \\r
+ METHOD (getHolder, "getHolder", "()Landroid/view/SurfaceHolder;") \\r
+ METHOD (layout, "layout", "(IIII)V" ) \\r
+ CALLBACK (generatedCallback<&NativeContext::attachedToWindow>, "onAttchedWindowNative", "(J)V") \\r
+ CALLBACK (generatedCallback<&NativeContext::detachedFromWindow>, "onDetachedFromWindowNative", "(J)V") \\r
+ CALLBACK (generatedCallback<&NativeContext::dispatchDraw>, "onDrawNative", "(JLandroid/graphics/Canvas;)V")\r
+\r
+ DECLARE_JNI_CLASS_WITH_BYTECODE (JuceOpenGLViewSurface, "com/rmsl/juce/JuceOpenGLView", 16, javaJuceOpenGLView)\r
+ #undef JNI_CLASS_MEMBERS\r
\r
- void attachedToWindow()\r
+ //==============================================================================\r
+ static void attachedToWindow (JNIEnv* env, NativeContext& t)\r
{\r
- auto* env = getEnv();\r
-\r
- LocalRef<jobject> holder (env->CallObjectMethod (surfaceView.get(), JuceOpenGLViewSurface.getHolder));\r
+ LocalRef<jobject> holder (env->CallObjectMethod (t.surfaceView.get(), JuceOpenGLViewSurface.getHolder));\r
\r
- if (surfaceHolderCallback == nullptr)\r
- surfaceHolderCallback = GlobalRef (CreateJavaInterface (this, "android/view/SurfaceHolder$Callback"));\r
+ if (t.surfaceHolderCallback == nullptr)\r
+ t.surfaceHolderCallback = GlobalRef (CreateJavaInterface (&t, "android/view/SurfaceHolder$Callback"));\r
\r
- env->CallVoidMethod (holder, AndroidSurfaceHolder.addCallback, surfaceHolderCallback.get());\r
+ env->CallVoidMethod (holder, AndroidSurfaceHolder.addCallback, t.surfaceHolderCallback.get());\r
}\r
\r
- void detachedFromWindow()\r
+ static void detachedFromWindow (JNIEnv* env, NativeContext& t)\r
{\r
- if (surfaceHolderCallback != nullptr)\r
+ if (t.surfaceHolderCallback != nullptr)\r
{\r
- auto* env = getEnv();\r
+ LocalRef<jobject> holder (env->CallObjectMethod (t.surfaceView.get(), JuceOpenGLViewSurface.getHolder));\r
\r
- LocalRef<jobject> holder (env->CallObjectMethod (surfaceView.get(), JuceOpenGLViewSurface.getHolder));\r
-\r
- env->CallVoidMethod (holder.get(), AndroidSurfaceHolder.removeCallback, surfaceHolderCallback.get());\r
- surfaceHolderCallback.clear();\r
+ env->CallVoidMethod (holder.get(), AndroidSurfaceHolder.removeCallback, t.surfaceHolderCallback.get());\r
+ t.surfaceHolderCallback.clear();\r
}\r
}\r
\r
- void dispatchDraw (jobject /*canvas*/)\r
+ static void dispatchDraw (JNIEnv*, NativeContext& t, jobject /*canvas*/)\r
{\r
- const std::lock_guard lock { nativeHandleMutex };\r
+ const std::lock_guard lock { t.nativeHandleMutex };\r
\r
- if (juceContext != nullptr)\r
- juceContext->triggerRepaint();\r
+ if (t.juceContext != nullptr)\r
+ t.juceContext->triggerRepaint();\r
}\r
\r
bool tryChooseConfig (const std::vector<EGLint>& optionalAttribs)\r
EGLDisplay OpenGLContext::NativeContext::display = EGL_NO_DISPLAY;\r
EGLDisplay OpenGLContext::NativeContext::config;\r
\r
-//==============================================================================\r
-void AndroidGLCallbacks::attachedToWindow (JNIEnv*, jobject /*this*/, jlong host)\r
-{\r
- if (auto* nativeContext = reinterpret_cast<OpenGLContext::NativeContext*> (host))\r
- nativeContext->attachedToWindow();\r
-}\r
-\r
-void AndroidGLCallbacks::detachedFromWindow (JNIEnv*, jobject /*this*/, jlong host)\r
-{\r
- if (auto* nativeContext = reinterpret_cast<OpenGLContext::NativeContext*> (host))\r
- nativeContext->detachedFromWindow();\r
-}\r
-\r
-void AndroidGLCallbacks::dispatchDraw (JNIEnv*, jobject /*this*/, jlong host, jobject canvas)\r
-{\r
- if (auto* nativeContext = reinterpret_cast<OpenGLContext::NativeContext*> (host))\r
- nativeContext->dispatchDraw (canvas);\r
-}\r
-\r
//==============================================================================\r
bool OpenGLHelpers::isContextActive()\r
{\r
\r
glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorBufferHandle);\r
\r
- bool ok = [context.get() renderbufferStorage: GL_RENDERBUFFER fromDrawable: glLayer];\r
- jassert (ok); ignoreUnused (ok);\r
+ [[maybe_unused]] bool ok = [context.get() renderbufferStorage: GL_RENDERBUFFER fromDrawable: glLayer];\r
+ jassert (ok);\r
\r
GLint width, height;\r
glGetRenderbufferParameteriv (GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &width);\r
namespace juce\r
{\r
\r
-extern XContext windowHandleXContext;\r
-\r
struct XFreeDeleter\r
{\r
void operator() (void* ptr) const\r
void juce_LinuxAddRepaintListener (ComponentPeer*, Component* dummy);\r
void juce_LinuxRemoveRepaintListener (ComponentPeer*, Component* dummy);\r
\r
+class PeerListener : private ComponentMovementWatcher\r
+{\r
+public:\r
+ PeerListener (Component& comp, Window embeddedWindow)\r
+ : ComponentMovementWatcher (&comp),\r
+ window (embeddedWindow),\r
+ association (comp.getPeer(), window) {}\r
+\r
+private:\r
+ using ComponentMovementWatcher::componentMovedOrResized,\r
+ ComponentMovementWatcher::componentVisibilityChanged;\r
+\r
+ void componentMovedOrResized (bool, bool) override {}\r
+ void componentVisibilityChanged() override {}\r
+\r
+ void componentPeerChanged() override\r
+ {\r
+ // This should not be rewritten as a ternary expression or similar.\r
+ // The old association must be destroyed before the new one is created.\r
+ association = {};\r
+\r
+ if (auto* comp = getComponent())\r
+ association = ScopedWindowAssociation (comp->getPeer(), window);\r
+ }\r
+\r
+ Window window{};\r
+ ScopedWindowAssociation association;\r
+};\r
+\r
//==============================================================================\r
class OpenGLContext::NativeContext\r
{\r
CWBorderPixel | CWColormap | CWEventMask,\r
&swa);\r
\r
- X11Symbols::getInstance()->xSaveContext (display, (XID) embeddedWindow, windowHandleXContext, (XPointer) peer);\r
+ peerListener.emplace (component, embeddedWindow);\r
\r
X11Symbols::getInstance()->xMapWindow (display, embeddedWindow);\r
X11Symbols::getInstance()->xFreeColormap (display, colourMap);\r
GLXContext renderContext = {};\r
Window embeddedWindow = {};\r
\r
+ std::optional<PeerListener> peerListener;\r
+\r
int swapFrames = 1;\r
Rectangle<int> bounds;\r
std::unique_ptr<GLXFBConfig, XFreeDeleter> bestConfig;\r
context.nativeContext = nativeContext.get();\r
else\r
nativeContext.reset();\r
+\r
+ refreshDisplayLinkConnection();\r
}\r
\r
~CachedImage() override\r
\r
const auto stateToUse = state.fetch_and (StateFlags::persistent);\r
\r
- if (! isFlagSet (stateToUse, StateFlags::pendingRender) && ! context.continuousRepaint)\r
+ #if JUCE_MAC\r
+ // On macOS, we use a display link callback to trigger repaints, rather than\r
+ // letting them run at full throttle\r
+ const auto noAutomaticRepaint = true;\r
+ #else\r
+ const auto noAutomaticRepaint = ! context.continuousRepaint;\r
+ #endif\r
+\r
+ if (! isFlagSet (stateToUse, StateFlags::pendingRender) && noAutomaticRepaint)\r
return RenderStatus::noWork;\r
\r
const auto isUpdating = isFlagSet (stateToUse, StateFlags::paintComponents);\r
} };\r
};\r
\r
+ void refreshDisplayLinkConnection()\r
+ {\r
+ #if JUCE_MAC\r
+ if (context.continuousRepaint)\r
+ {\r
+ connection.emplace (sharedDisplayLinks->registerFactory ([this] (CGDirectDisplayID display)\r
+ {\r
+ return [this, display]\r
+ {\r
+ if (auto* view = nativeContext->getNSView())\r
+ if (auto* window = [view window])\r
+ if (auto* screen = [window screen])\r
+ if (display == ScopedDisplayLink::getDisplayIdForScreen (screen))\r
+ triggerRepaint();\r
+ };\r
+ }));\r
+ }\r
+ else\r
+ {\r
+ connection.reset();\r
+ }\r
+ #endif\r
+ }\r
+\r
//==============================================================================\r
friend class NativeContext;\r
std::unique_ptr<NativeContext> nativeContext;\r
// Note: the NSViewComponentPeer also has a SharedResourcePointer<PerScreenDisplayLinks> to\r
// avoid unnecessarily duplicating display-link threads.\r
SharedResourcePointer<PerScreenDisplayLinks> sharedDisplayLinks;\r
+\r
+ // On macOS, rather than letting swapBuffers block as appropriate, we use a display link\r
+ // callback to mark the view as needing to repaint.\r
+ std::optional<PerScreenDisplayLinks::Connection> connection;\r
#endif\r
\r
enum StateFlags\r
{\r
continuousRepaint = shouldContinuouslyRepaint;\r
\r
- #if JUCE_MAC\r
- if (auto* component = getTargetComponent())\r
- {\r
- detach();\r
- attachment.reset (new Attachment (*this, *component));\r
- }\r
- #endif\r
+ #if JUCE_MAC\r
+ if (auto* component = getTargetComponent())\r
+ {\r
+ detach();\r
+ attachment.reset (new Attachment (*this, *component));\r
+ }\r
+\r
+ if (auto* cachedImage = getCachedImage())\r
+ cachedImage->refreshDisplayLinkConnection();\r
+ #endif\r
\r
triggerRepaint();\r
}\r
\r
ID: juce_osc\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\r
name: JUCE OSC classes\r
description: Open Sound Control implementation.\r
website: http://www.juce.com/juce\r
}\r
\r
void InAppPurchases::purchaseProduct (const String& productIdentifier,\r
- const String& upgradeProductIdentifier,\r
- bool creditForUnusedSubscription)\r
+ [[maybe_unused]] const String& upgradeProductIdentifier,\r
+ [[maybe_unused]] bool creditForUnusedSubscription)\r
{\r
#if JUCE_ANDROID || JUCE_IOS || JUCE_MAC\r
pimpl->purchaseProduct (productIdentifier, upgradeProductIdentifier, creditForUnusedSubscription);\r
Listener::PurchaseInfo purchaseInfo { Purchase { "", productIdentifier, {}, {}, {} }, {} };\r
\r
listeners.call ([&] (Listener& l) { l.productPurchaseFinished (purchaseInfo, false, "In-app purchases unavailable"); });\r
- ignoreUnused (upgradeProductIdentifier, creditForUnusedSubscription);\r
#endif\r
}\r
\r
-void InAppPurchases::restoreProductsBoughtList (bool includeDownloadInfo, const String& subscriptionsSharedSecret)\r
+void InAppPurchases::restoreProductsBoughtList ([[maybe_unused]] bool includeDownloadInfo, [[maybe_unused]] const String& subscriptionsSharedSecret)\r
{\r
#if JUCE_ANDROID || JUCE_IOS || JUCE_MAC\r
pimpl->restoreProductsBoughtList (includeDownloadInfo, subscriptionsSharedSecret);\r
#else\r
listeners.call ([] (Listener& l) { l.purchasesListRestored ({}, false, "In-app purchases unavailable"); });\r
- ignoreUnused (includeDownloadInfo, subscriptionsSharedSecret);\r
#endif\r
}\r
\r
-void InAppPurchases::consumePurchase (const String& productIdentifier, const String& purchaseToken)\r
+void InAppPurchases::consumePurchase (const String& productIdentifier, [[maybe_unused]] const String& purchaseToken)\r
{\r
#if JUCE_ANDROID || JUCE_IOS || JUCE_MAC\r
pimpl->consumePurchase (productIdentifier, purchaseToken);\r
#else\r
listeners.call ([&] (Listener& l) { l.productConsumed (productIdentifier, false, "In-app purchases unavailable"); });\r
- ignoreUnused (purchaseToken);\r
#endif\r
}\r
\r
void InAppPurchases::addListener (Listener* l) { listeners.add (l); }\r
void InAppPurchases::removeListener (Listener* l) { listeners.remove (l); }\r
\r
-void InAppPurchases::startDownloads (const Array<Download*>& downloads)\r
+void InAppPurchases::startDownloads ([[maybe_unused]] const Array<Download*>& downloads)\r
{\r
#if JUCE_ANDROID || JUCE_IOS || JUCE_MAC\r
pimpl->startDownloads (downloads);\r
- #else\r
- ignoreUnused (downloads);\r
#endif\r
}\r
\r
-void InAppPurchases::pauseDownloads (const Array<Download*>& downloads)\r
+void InAppPurchases::pauseDownloads ([[maybe_unused]] const Array<Download*>& downloads)\r
{\r
#if JUCE_ANDROID || JUCE_IOS || JUCE_MAC\r
pimpl->pauseDownloads (downloads);\r
- #else\r
- ignoreUnused (downloads);\r
#endif\r
}\r
\r
-void InAppPurchases::resumeDownloads (const Array<Download*>& downloads)\r
+void InAppPurchases::resumeDownloads ([[maybe_unused]] const Array<Download*>& downloads)\r
{\r
#if JUCE_ANDROID || JUCE_IOS || JUCE_MAC\r
pimpl->resumeDownloads (downloads);\r
- #else\r
- ignoreUnused (downloads);\r
#endif\r
}\r
\r
-void InAppPurchases::cancelDownloads (const Array<Download*>& downloads)\r
+void InAppPurchases::cancelDownloads ([[maybe_unused]] const Array<Download*>& downloads)\r
{\r
#if JUCE_ANDROID || JUCE_IOS || JUCE_MAC\r
pimpl->cancelDownloads (downloads);\r
- #else\r
- ignoreUnused (downloads);\r
#endif\r
}\r
\r
"and only a single subscription can be upgraded/downgraded. Use the updated purchaseProduct method "\r
"which takes a single String argument.")]]\r
void purchaseProduct (const String& productIdentifier,\r
- bool isSubscription,\r
+ [[maybe_unused]] bool isSubscription,\r
const StringArray& upgradeOrDowngradeFromSubscriptionsWithProductIdentifiers = {},\r
bool creditForUnusedSubscription = true)\r
{\r
-\r
- ignoreUnused (isSubscription);\r
purchaseProduct (productIdentifier,\r
upgradeOrDowngradeFromSubscriptionsWithProductIdentifiers[0],\r
creditForUnusedSubscription);\r
\r
ID: juce_product_unlocking\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\r
name: JUCE Online marketplace support\r
description: Classes for online product authentication\r
website: http://www.juce.com/juce\r
}\r
\r
//==============================================================================\r
-constexpr unsigned char juceBillingClientCompiled[]\r
+constexpr uint8 juceBillingClientCompiled[]\r
{\r
0x1f, 0x8b, 0x08, 0x08, 0xa4, 0x53, 0xd0, 0x62, 0x04, 0x03, 0x63, 0x6c,\r
0x61, 0x73, 0x73, 0x65, 0x73, 0x2e, 0x64, 0x65, 0x78, 0x00, 0x9d, 0x5a,\r
}\r
\r
//==============================================================================\r
- void startDownloads (const Array<Download*>& downloads)\r
+ void startDownloads ([[maybe_unused]] const Array<Download*>& downloads)\r
{\r
// Not available on this platform.\r
- ignoreUnused (downloads);\r
jassertfalse;\r
}\r
\r
- void pauseDownloads (const Array<Download*>& downloads)\r
+ void pauseDownloads ([[maybe_unused]] const Array<Download*>& downloads)\r
{\r
// Not available on this platform.\r
- ignoreUnused (downloads);\r
jassertfalse;\r
}\r
\r
- void resumeDownloads (const Array<Download*>& downloads)\r
+ void resumeDownloads ([[maybe_unused]] const Array<Download*>& downloads)\r
{\r
// Not available on this platform.\r
- ignoreUnused (downloads);\r
jassertfalse;\r
}\r
\r
- void cancelDownloads (const Array<Download*>& downloads)\r
+ void cancelDownloads ([[maybe_unused]] const Array<Download*>& downloads)\r
{\r
// Not available on this platform.\r
- ignoreUnused (downloads);\r
jassertfalse;\r
}\r
\r
METHOD (queryPurchases, "queryPurchases", "()V") \\r
METHOD (consumePurchase, "consumePurchase", "(Ljava/lang/String;Ljava/lang/String;)V") \\r
\\r
- CALLBACK (productDetailsQueryCallback, "productDetailsQueryCallback", "(JLjava/util/List;)V") \\r
- CALLBACK (purchasesListQueryCallback, "purchasesListQueryCallback", "(JLjava/util/List;)V") \\r
- CALLBACK (purchaseCompletedCallback, "purchaseCompletedCallback", "(JLcom/android/billingclient/api/Purchase;I)V") \\r
- CALLBACK (purchaseConsumedCallback, "purchaseConsumedCallback", "(JLjava/lang/String;I)V")\r
+ CALLBACK (generatedCallback<&Pimpl::updateProductDetails>, "productDetailsQueryCallback", "(JLjava/util/List;)V") \\r
+ CALLBACK (generatedCallback<&Pimpl::updatePurchasesList>, "purchasesListQueryCallback", "(JLjava/util/List;)V") \\r
+ CALLBACK (generatedCallback<&Pimpl::purchaseCompleted>, "purchaseCompletedCallback", "(JLcom/android/billingclient/api/Purchase;I)V") \\r
+ CALLBACK (generatedCallback<&Pimpl::purchaseConsumed>, "purchaseConsumedCallback", "(JLjava/lang/String;I)V")\r
\r
DECLARE_JNI_CLASS_WITH_BYTECODE (JuceBillingClient,\r
"com/rmsl/juce/JuceBillingClient",\r
16,\r
- juceBillingClientCompiled,\r
- numElementsInArray (juceBillingClientCompiled))\r
+ juceBillingClientCompiled)\r
#undef JNI_CLASS_MEMBERS\r
\r
- static void JNICALL productDetailsQueryCallback (JNIEnv*, jobject, jlong host, jobject productDetailsList)\r
- {\r
- if (auto* myself = reinterpret_cast<Pimpl*> (host))\r
- myself->updateProductDetails (productDetailsList);\r
- }\r
-\r
- static void JNICALL purchasesListQueryCallback (JNIEnv*, jobject, jlong host, jobject purchasesList)\r
- {\r
- if (auto* myself = reinterpret_cast<Pimpl*> (host))\r
- myself->updatePurchasesList (purchasesList);\r
- }\r
-\r
- static void JNICALL purchaseCompletedCallback (JNIEnv*, jobject, jlong host, jobject purchase, int responseCode)\r
- {\r
- if (auto* myself = reinterpret_cast<Pimpl*> (host))\r
- myself->purchaseCompleted (purchase, responseCode);\r
- }\r
-\r
- static void JNICALL purchaseConsumedCallback (JNIEnv*, jobject, jlong host, jstring productIdentifier, int responseCode)\r
- {\r
- if (auto* myself = reinterpret_cast<Pimpl*> (host))\r
- myself->purchaseConsumed (productIdentifier, responseCode);\r
- }\r
-\r
//==============================================================================\r
bool isReady() const\r
{\r
return responseCode == 0;\r
}\r
\r
- void purchaseCompleted (jobject purchase, int responseCode)\r
+ static void purchaseCompleted (JNIEnv*, Pimpl& t, jobject purchase, int responseCode)\r
{\r
- notifyListenersAboutPurchase (buildPurchase (LocalRef<jobject> { purchase }),\r
- wasSuccessful (responseCode),\r
- getStatusDescriptionFromResponseCode (responseCode));\r
+ t.notifyListenersAboutPurchase (buildPurchase (LocalRef<jobject> { purchase }),\r
+ wasSuccessful (responseCode),\r
+ getStatusDescriptionFromResponseCode (responseCode));\r
}\r
\r
- void purchaseConsumed (jstring productIdentifier, int responseCode)\r
+ static void purchaseConsumed (JNIEnv*, Pimpl& t, jstring productIdentifier, int responseCode)\r
{\r
- notifyListenersAboutConsume (juceString (LocalRef<jstring> { productIdentifier }),\r
- wasSuccessful (responseCode),\r
- getStatusDescriptionFromResponseCode (responseCode));\r
+ t.notifyListenersAboutConsume (juceString (LocalRef<jstring> { productIdentifier }),\r
+ wasSuccessful (responseCode),\r
+ getStatusDescriptionFromResponseCode (responseCode));\r
}\r
\r
- void updateProductDetails (jobject productDetailsList)\r
+ static void updateProductDetails (JNIEnv*, Pimpl& t, jobject productDetailsList)\r
{\r
- jassert (! productDetailsQueryCallbackQueue.empty());\r
- productDetailsQueryCallbackQueue.front() (LocalRef<jobject> { productDetailsList });\r
- productDetailsQueryCallbackQueue.pop();\r
+ jassert (! t.productDetailsQueryCallbackQueue.empty());\r
+ t.productDetailsQueryCallbackQueue.front() (LocalRef<jobject> { productDetailsList });\r
+ t.productDetailsQueryCallbackQueue.pop();\r
}\r
\r
- void updatePurchasesList (jobject purchasesList)\r
+ static void updatePurchasesList (JNIEnv*, Pimpl& t, jobject purchasesList)\r
{\r
- jassert (! purchasesListQueryCallbackQueue.empty());\r
- purchasesListQueryCallbackQueue.front() (LocalRef<jobject> { purchasesList });\r
- purchasesListQueryCallbackQueue.pop();\r
+ jassert (! t.purchasesListQueryCallbackQueue.empty());\r
+ t.purchasesListQueryCallbackQueue.front() (LocalRef<jobject> { purchasesList });\r
+ t.purchasesListQueryCallbackQueue.pop();\r
}\r
\r
//==============================================================================\r
});\r
}\r
\r
-\r
-InAppPurchases::Pimpl::JuceBillingClient_Class InAppPurchases::Pimpl::JuceBillingClient;\r
-\r
} // namespace juce\r
}\r
}\r
\r
-CameraDevice* CameraDevice::openDevice (int index,\r
- int minWidth, int minHeight,\r
- int maxWidth, int maxHeight,\r
- bool useHighQuality)\r
+CameraDevice* CameraDevice::openDevice ([[maybe_unused]] int index,\r
+ [[maybe_unused]] int minWidth, [[maybe_unused]] int minHeight,\r
+ [[maybe_unused]] int maxWidth, [[maybe_unused]] int maxHeight,\r
+ [[maybe_unused]] bool useHighQuality)\r
{\r
jassert (juce::MessageManager::getInstance()->currentThreadHasLockedMessageManager());\r
\r
if (d != nullptr && d->pimpl->openedOk())\r
return d.release();\r
#else\r
- ignoreUnused (index, minWidth, minHeight);\r
- ignoreUnused (maxWidth, maxHeight, useHighQuality);\r
-\r
// Use openDeviceAsync to open a camera device on iOS or Android.\r
jassertfalse;\r
#endif\r
\r
ID: juce_video\r
vendor: juce\r
- version: 7.0.3\r
+ version: 7.0.4\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
public:\r
struct Owner\r
{\r
- virtual ~Owner() {}\r
+ virtual ~Owner() = default;\r
\r
virtual void onInfo (LocalRef<jobject>& mediaRecorder, int what, int extra) = 0;\r
};\r
{\r
auto key = LocalRef<jobject> (env->CallObjectMethod (keysList, JavaList.get, i));\r
auto jKeyName = LocalRef<jstring> ((jstring) env->CallObjectMethod (key, CameraCharacteristicsKey.getName));\r
- auto keyName = juceString (jKeyName);\r
+ [[maybe_unused]] auto keyName = juceString (jKeyName);\r
\r
auto keyValue = LocalRef<jobject> (env->CallObjectMethod (characteristics, CameraCharacteristics.get, key.get()));\r
auto jKeyValueString = LocalRef<jstring> ((jstring) env->CallObjectMethod (keyValue, JavaObject.toString));\r
JUCE_CAMERA_LOG ("Key: " + keyName + ", value: " + keyValueString);\r
}\r
}\r
-\r
- ignoreUnused (keyName);\r
}\r
}\r
\r
- static void printPrimitiveArrayElements (const LocalRef<jobject>& keyValue, const String& keyName,\r
+ static void printPrimitiveArrayElements (const LocalRef<jobject>& keyValue, [[maybe_unused]] const String& keyName,\r
const String& keyValueString)\r
{\r
- ignoreUnused (keyName);\r
-\r
String result = "[";\r
\r
auto* env = getEnv();\r
JUCE_CAMERA_LOG ("Key: " + keyName + ", value: " + result);\r
}\r
\r
- static void printRangeArrayElements (const LocalRef<jobject>& rangeArray, const String& keyName)\r
+ static void printRangeArrayElements (const LocalRef<jobject>& rangeArray, [[maybe_unused]] const String& keyName)\r
{\r
auto* env = getEnv();\r
\r
result << juceString (jRangeString) << " ";\r
}\r
\r
- ignoreUnused (keyName);\r
JUCE_CAMERA_LOG ("Key: " + keyName + ", value: " + result);\r
}\r
\r
javaString (name).get()));\r
}\r
\r
- static void printSizesLog (const Array<Rectangle<int>>& sizes, const String& className)\r
+ static void printSizesLog ([[maybe_unused]] const Array<Rectangle<int>>& sizes, [[maybe_unused]] const String& className)\r
{\r
- ignoreUnused (sizes, className);\r
-\r
JUCE_CAMERA_LOG ("Sizes for class " + className);\r
\r
#if JUCE_CAMERA_LOG_ENABLED\r
Desktop::getInstance().setOrientationsEnabled (orientationsEnabled);\r
}\r
\r
- void onInfo (LocalRef<jobject>& recorder, int what, int extra) override\r
+ void onInfo ([[maybe_unused]] LocalRef<jobject>& recorder, [[maybe_unused]] int what, [[maybe_unused]] int extra) override\r
{\r
- ignoreUnused (recorder, what, extra);\r
-\r
JUCE_CAMERA_LOG ("MediaRecorder::OnInfo: " + getInfoStringFromCode (what)\r
+ ", extra code = " + String (extra));\r
}\r
\r
- void onError (LocalRef<jobject>& recorder, int what, int extra) override\r
+ void onError ([[maybe_unused]] LocalRef<jobject>& recorder, [[maybe_unused]] int what, [[maybe_unused]] int extra) override\r
{\r
- ignoreUnused (recorder, what, extra);\r
-\r
JUCE_CAMERA_LOG ("MediaRecorder::onError: " + getErrorStringFromCode (what)\r
+ ", extra code = " + String (extra));\r
}\r
//==============================================================================\r
#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \\r
METHOD (constructor, "<init>", "(JZ)V") \\r
- CALLBACK (cameraCaptureSessionCaptureCompletedCallback, "cameraCaptureSessionCaptureCompleted", "(JZLandroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/TotalCaptureResult;)V") \\r
- CALLBACK (cameraCaptureSessionCaptureFailedCallback, "cameraCaptureSessionCaptureFailed", "(JZLandroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CaptureFailure;)V") \\r
- CALLBACK (cameraCaptureSessionCaptureProgressedCallback, "cameraCaptureSessionCaptureProgressed", "(JZLandroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CaptureResult;)V") \\r
- CALLBACK (cameraCaptureSessionCaptureStartedCallback, "cameraCaptureSessionCaptureStarted", "(JZLandroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;JJ)V") \\r
- CALLBACK (cameraCaptureSessionCaptureSequenceAbortedCallback, "cameraCaptureSessionCaptureSequenceAborted", "(JZLandroid/hardware/camera2/CameraCaptureSession;I)V") \\r
- CALLBACK (cameraCaptureSessionCaptureSequenceCompletedCallback, "cameraCaptureSessionCaptureSequenceCompleted", "(JZLandroid/hardware/camera2/CameraCaptureSession;IJ)V")\r
-\r
- DECLARE_JNI_CLASS_WITH_BYTECODE (CameraCaptureSessionCaptureCallback, "com/rmsl/juce/CameraCaptureSessionCaptureCallback", 21, CameraSupportByteCode, sizeof(CameraSupportByteCode))\r
+ CALLBACK (generatedCallback<&StillPictureTaker::cameraCaptureSessionCaptureCompletedCallback>, "cameraCaptureSessionCaptureCompleted", "(JZLandroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/TotalCaptureResult;)V") \\r
+ CALLBACK (generatedCallback<&StillPictureTaker::cameraCaptureSessionCaptureFailedCallback>, "cameraCaptureSessionCaptureFailed", "(JZLandroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CaptureFailure;)V") \\r
+ CALLBACK (generatedCallback<&StillPictureTaker::cameraCaptureSessionCaptureProgressedCallback>, "cameraCaptureSessionCaptureProgressed", "(JZLandroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CaptureResult;)V") \\r
+ CALLBACK (generatedCallback<&StillPictureTaker::cameraCaptureSessionCaptureStartedCallback>, "cameraCaptureSessionCaptureStarted", "(JZLandroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;JJ)V") \\r
+ CALLBACK (generatedCallback<&StillPictureTaker::cameraCaptureSessionCaptureSequenceAbortedCallback>, "cameraCaptureSessionCaptureSequenceAborted", "(JZLandroid/hardware/camera2/CameraCaptureSession;I)V") \\r
+ CALLBACK (generatedCallback<&StillPictureTaker::cameraCaptureSessionCaptureSequenceCompletedCallback>, "cameraCaptureSessionCaptureSequenceCompleted", "(JZLandroid/hardware/camera2/CameraCaptureSession;IJ)V")\r
+\r
+ DECLARE_JNI_CLASS_WITH_BYTECODE (CameraCaptureSessionCaptureCallback, "com/rmsl/juce/CameraCaptureSessionCaptureCallback", 21, CameraSupportByteCode)\r
#undef JNI_CLASS_MEMBERS\r
\r
LocalRef<jobject> createCaptureSessionCallback (bool createPreviewSession)\r
{\r
- return LocalRef<jobject>(getEnv()->NewObject (CameraCaptureSessionCaptureCallback,\r
- CameraCaptureSessionCaptureCallback.constructor,\r
- reinterpret_cast<jlong> (this),\r
- createPreviewSession ? 1 : 0));\r
+ return LocalRef<jobject> (getEnv()->NewObject (CameraCaptureSessionCaptureCallback,\r
+ CameraCaptureSessionCaptureCallback.constructor,\r
+ reinterpret_cast<jlong> (this),\r
+ createPreviewSession ? 1 : 0));\r
}\r
\r
//==============================================================================\r
-\r
enum class State\r
{\r
idle = 0,\r
}\r
\r
//==============================================================================\r
- void cameraCaptureSessionCaptureCompleted (bool isPreview, jobject session, jobject request, jobject result)\r
+ void cameraCaptureSessionCaptureCompleted (bool isPreview,\r
+ [[maybe_unused]] jobject session,\r
+ [[maybe_unused]] jobject request,\r
+ jobject result)\r
{\r
JUCE_CAMERA_LOG ("cameraCaptureSessionCaptureCompleted()");\r
\r
- ignoreUnused (session, request);\r
-\r
if (isPreview)\r
updateState (result);\r
else if (currentState != State::idle)\r
unlockFocus();\r
}\r
\r
- void cameraCaptureSessionCaptureFailed (bool isPreview, jobject session, jobject request, jobject failure)\r
+ void cameraCaptureSessionCaptureFailed ([[maybe_unused]] bool isPreview,\r
+ [[maybe_unused]] jobject session,\r
+ [[maybe_unused]] jobject request,\r
+ [[maybe_unused]] jobject failure)\r
{\r
JUCE_CAMERA_LOG ("cameraCaptureSessionCaptureFailed()");\r
-\r
- ignoreUnused (isPreview, session, request, failure);\r
}\r
\r
- void cameraCaptureSessionCaptureProgressed (bool isPreview, jobject session, jobject request, jobject partialResult)\r
+ void cameraCaptureSessionCaptureProgressed (bool isPreview,\r
+ [[maybe_unused]] jobject session,\r
+ [[maybe_unused]] jobject request,\r
+ jobject partialResult)\r
{\r
JUCE_CAMERA_LOG ("cameraCaptureSessionCaptureProgressed()");\r
\r
- ignoreUnused (session, request);\r
-\r
if (isPreview)\r
updateState (partialResult);\r
}\r
\r
- void cameraCaptureSessionCaptureSequenceAborted (bool isPreview, jobject session, int sequenceId)\r
+ void cameraCaptureSessionCaptureSequenceAborted ([[maybe_unused]] bool isPreview,\r
+ [[maybe_unused]] jobject session,\r
+ [[maybe_unused]] int sequenceId)\r
{\r
JUCE_CAMERA_LOG ("cameraCaptureSessionCaptureSequenceAborted()");\r
-\r
- ignoreUnused (isPreview, isPreview, session, sequenceId);\r
}\r
\r
- void cameraCaptureSessionCaptureSequenceCompleted (bool isPreview, jobject session, int sequenceId, int64 frameNumber)\r
+ void cameraCaptureSessionCaptureSequenceCompleted ([[maybe_unused]] bool isPreview,\r
+ [[maybe_unused]] jobject session,\r
+ [[maybe_unused]] int sequenceId,\r
+ [[maybe_unused]] int64 frameNumber)\r
{\r
JUCE_CAMERA_LOG ("cameraCaptureSessionCaptureSequenceCompleted()");\r
-\r
- ignoreUnused (isPreview, session, sequenceId, frameNumber);\r
}\r
\r
- void cameraCaptureSessionCaptureStarted (bool isPreview, jobject session, jobject request, int64 timestamp, int64 frameNumber)\r
+ void cameraCaptureSessionCaptureStarted ([[maybe_unused]] bool isPreview,\r
+ [[maybe_unused]] jobject session,\r
+ [[maybe_unused]] jobject request,\r
+ [[maybe_unused]] int64 timestamp,\r
+ [[maybe_unused]] int64 frameNumber)\r
{\r
JUCE_CAMERA_LOG ("cameraCaptureSessionCaptureStarted()");\r
-\r
- ignoreUnused (isPreview, session, request, timestamp, frameNumber);\r
}\r
\r
//==============================================================================\r
- static void cameraCaptureSessionCaptureCompletedCallback (JNIEnv*, jobject /*object*/, jlong host, jboolean isPreview, jobject rawSession, jobject rawRequest, jobject rawResult)\r
+ static void cameraCaptureSessionCaptureCompletedCallback (JNIEnv* env, StillPictureTaker& t, jboolean isPreview, jobject rawSession, jobject rawRequest, jobject rawResult)\r
{\r
- if (auto* myself = reinterpret_cast<StillPictureTaker*> (host))\r
- {\r
- LocalRef<jobject> session (getEnv()->NewLocalRef(rawSession));\r
- LocalRef<jobject> request (getEnv()->NewLocalRef(rawRequest));\r
- LocalRef<jobject> result (getEnv()->NewLocalRef(rawResult));\r
+ LocalRef<jobject> session (env->NewLocalRef (rawSession));\r
+ LocalRef<jobject> request (env->NewLocalRef (rawRequest));\r
+ LocalRef<jobject> result (env->NewLocalRef (rawResult));\r
\r
- myself->cameraCaptureSessionCaptureCompleted (isPreview != 0, session, request, result);\r
- }\r
+ t.cameraCaptureSessionCaptureCompleted (isPreview != 0, session, request, result);\r
}\r
\r
- static void cameraCaptureSessionCaptureFailedCallback (JNIEnv*, jobject /*object*/, jlong host, jboolean isPreview, jobject rawSession, jobject rawRequest, jobject rawResult)\r
+ static void cameraCaptureSessionCaptureFailedCallback (JNIEnv* env, StillPictureTaker& t, jboolean isPreview, jobject rawSession, jobject rawRequest, jobject rawResult)\r
{\r
- if (auto* myself = reinterpret_cast<StillPictureTaker*> (host))\r
- {\r
- LocalRef<jobject> session (getEnv()->NewLocalRef(rawSession));\r
- LocalRef<jobject> request (getEnv()->NewLocalRef(rawRequest));\r
- LocalRef<jobject> result (getEnv()->NewLocalRef(rawResult));\r
+ LocalRef<jobject> session (env->NewLocalRef (rawSession));\r
+ LocalRef<jobject> request (env->NewLocalRef (rawRequest));\r
+ LocalRef<jobject> result (env->NewLocalRef (rawResult));\r
\r
- myself->cameraCaptureSessionCaptureFailed (isPreview != 0, session, request, result);\r
- }\r
+ t.cameraCaptureSessionCaptureFailed (isPreview != 0, session, request, result);\r
}\r
\r
- static void cameraCaptureSessionCaptureProgressedCallback (JNIEnv*, jobject /*object*/, jlong host, jboolean isPreview, jobject rawSession, jobject rawRequest, jobject rawResult)\r
+ static void cameraCaptureSessionCaptureProgressedCallback (JNIEnv* env, StillPictureTaker& t, jboolean isPreview, jobject rawSession, jobject rawRequest, jobject rawResult)\r
{\r
- if (auto* myself = reinterpret_cast<StillPictureTaker*> (host))\r
- {\r
- LocalRef<jobject> session (getEnv()->NewLocalRef(rawSession));\r
- LocalRef<jobject> request (getEnv()->NewLocalRef(rawRequest));\r
- LocalRef<jobject> result (getEnv()->NewLocalRef(rawResult));\r
+ LocalRef<jobject> session (env->NewLocalRef (rawSession));\r
+ LocalRef<jobject> request (env->NewLocalRef (rawRequest));\r
+ LocalRef<jobject> result (env->NewLocalRef (rawResult));\r
\r
- myself->cameraCaptureSessionCaptureProgressed (isPreview != 0, session, request, result);\r
- }\r
+ t.cameraCaptureSessionCaptureProgressed (isPreview != 0, session, request, result);\r
}\r
\r
- static void cameraCaptureSessionCaptureSequenceAbortedCallback (JNIEnv*, jobject /*object*/, jlong host, jboolean isPreview, jobject rawSession, jint sequenceId)\r
+ static void cameraCaptureSessionCaptureSequenceAbortedCallback (JNIEnv* env, StillPictureTaker& t, jboolean isPreview, jobject rawSession, jint sequenceId)\r
{\r
- if (auto* myself = reinterpret_cast<StillPictureTaker*> (host))\r
- {\r
- LocalRef<jobject> session (getEnv()->NewLocalRef(rawSession));\r
+ LocalRef<jobject> session (env->NewLocalRef (rawSession));\r
\r
- myself->cameraCaptureSessionCaptureSequenceAborted (isPreview != 0, session, sequenceId);\r
- }\r
+ t.cameraCaptureSessionCaptureSequenceAborted (isPreview != 0, session, sequenceId);\r
}\r
\r
- static void cameraCaptureSessionCaptureSequenceCompletedCallback (JNIEnv*, jobject /*object*/, jlong host, jboolean isPreview, jobject rawSession, jint sequenceId, jlong frameNumber)\r
+ static void cameraCaptureSessionCaptureSequenceCompletedCallback (JNIEnv* env, StillPictureTaker& t, jboolean isPreview, jobject rawSession, jint sequenceId, jlong frameNumber)\r
{\r
- if (auto* myself = reinterpret_cast<StillPictureTaker*> (host))\r
- {\r
- LocalRef<jobject> session (getEnv()->NewLocalRef(rawSession));\r
+ LocalRef<jobject> session (env->NewLocalRef (rawSession));\r
\r
- myself->cameraCaptureSessionCaptureSequenceCompleted (isPreview != 0, session, sequenceId, frameNumber);\r
- }\r
+ t.cameraCaptureSessionCaptureSequenceCompleted (isPreview != 0, session, sequenceId, frameNumber);\r
}\r
\r
- static void cameraCaptureSessionCaptureStartedCallback (JNIEnv*, jobject /*object*/, jlong host, jboolean isPreview, jobject rawSession, jobject rawRequest, jlong timestamp, jlong frameNumber)\r
+ static void cameraCaptureSessionCaptureStartedCallback (JNIEnv* env, StillPictureTaker& t, jboolean isPreview, jobject rawSession, jobject rawRequest, jlong timestamp, jlong frameNumber)\r
{\r
- if (auto* myself = reinterpret_cast<StillPictureTaker*> (host))\r
- {\r
- LocalRef<jobject> session (getEnv()->NewLocalRef(rawSession));\r
- LocalRef<jobject> request (getEnv()->NewLocalRef(rawRequest));\r
+ LocalRef<jobject> session (env->NewLocalRef (rawSession));\r
+ LocalRef<jobject> request (env->NewLocalRef (rawRequest));\r
\r
- myself->cameraCaptureSessionCaptureStarted (isPreview != 0, session, request, timestamp, frameNumber);\r
- }\r
+ t.cameraCaptureSessionCaptureStarted (isPreview != 0, session, request, timestamp, frameNumber);\r
}\r
};\r
\r
//==============================================================================\r
#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \\r
METHOD (constructor, "<init>", "(J)V") \\r
- CALLBACK(cameraCaptureSessionActiveCallback, "cameraCaptureSessionActive", "(JLandroid/hardware/camera2/CameraCaptureSession;)V") \\r
- CALLBACK(cameraCaptureSessionClosedCallback, "cameraCaptureSessionClosed", "(JLandroid/hardware/camera2/CameraCaptureSession;)V") \\r
- CALLBACK(cameraCaptureSessionConfigureFailedCallback, "cameraCaptureSessionConfigureFailed", "(JLandroid/hardware/camera2/CameraCaptureSession;)V") \\r
- CALLBACK(cameraCaptureSessionConfiguredCallback, "cameraCaptureSessionConfigured", "(JLandroid/hardware/camera2/CameraCaptureSession;)V") \\r
- CALLBACK(cameraCaptureSessionReadyCallback, "cameraCaptureSessionReady", "(JLandroid/hardware/camera2/CameraCaptureSession;)V")\r
+ CALLBACK (generatedCallback<&CaptureSession::cameraCaptureSessionActiveCallback>, "cameraCaptureSessionActive", "(JLandroid/hardware/camera2/CameraCaptureSession;)V") \\r
+ CALLBACK (generatedCallback<&CaptureSession::cameraCaptureSessionClosedCallback>, "cameraCaptureSessionClosed", "(JLandroid/hardware/camera2/CameraCaptureSession;)V") \\r
+ CALLBACK (generatedCallback<&CaptureSession::cameraCaptureSessionConfigureFailedCallback>, "cameraCaptureSessionConfigureFailed", "(JLandroid/hardware/camera2/CameraCaptureSession;)V") \\r
+ CALLBACK (generatedCallback<&CaptureSession::cameraCaptureSessionConfiguredCallback>, "cameraCaptureSessionConfigured", "(JLandroid/hardware/camera2/CameraCaptureSession;)V") \\r
+ CALLBACK (generatedCallback<&CaptureSession::cameraCaptureSessionReadyCallback>, "cameraCaptureSessionReady", "(JLandroid/hardware/camera2/CameraCaptureSession;)V")\r
\r
DECLARE_JNI_CLASS_WITH_MIN_SDK (CameraCaptureSessionStateCallback, "com/rmsl/juce/CameraCaptureSessionStateCallback", 21)\r
#undef JNI_CLASS_MEMBERS\r
env->CallVoidMethod (captureRequestBuilder, CaptureRequestBuilder.set, jKey.get(), jValue.get());\r
}\r
\r
- void cameraCaptureSessionActive (jobject session)\r
+ //==============================================================================\r
+ static void cameraCaptureSessionActiveCallback ([[maybe_unused]] JNIEnv* env,\r
+ [[maybe_unused]] CaptureSession& t,\r
+ [[maybe_unused]] jobject rawSession)\r
{\r
JUCE_CAMERA_LOG ("cameraCaptureSessionActive()");\r
- ignoreUnused (session);\r
}\r
\r
- void cameraCaptureSessionClosed (jobject session)\r
+ static void cameraCaptureSessionClosedCallback ([[maybe_unused]] JNIEnv* env,\r
+ CaptureSession& t,\r
+ [[maybe_unused]] jobject rawSession)\r
{\r
JUCE_CAMERA_LOG ("cameraCaptureSessionClosed()");\r
- ignoreUnused (session);\r
\r
- closedEvent.signal();\r
+ t.closedEvent.signal();\r
}\r
\r
- void cameraCaptureSessionConfigureFailed (jobject session)\r
+ static void cameraCaptureSessionConfigureFailedCallback ([[maybe_unused]] JNIEnv* env,\r
+ CaptureSession& t,\r
+ [[maybe_unused]] jobject rawSession)\r
{\r
JUCE_CAMERA_LOG ("cameraCaptureSessionConfigureFailed()");\r
- ignoreUnused (session);\r
\r
- MessageManager::callAsync ([weakRef = WeakReference<CaptureSession> { this }]\r
- {\r
- if (weakRef != nullptr)\r
- weakRef->configuredCallback.captureSessionConfigured (nullptr);\r
- });\r
+ MessageManager::callAsync ([weakRef = WeakReference<CaptureSession> { &t }]\r
+ {\r
+ if (weakRef != nullptr)\r
+ weakRef->configuredCallback.captureSessionConfigured (nullptr);\r
+ });\r
}\r
\r
- void cameraCaptureSessionConfigured (const LocalRef<jobject>& session)\r
+ static void cameraCaptureSessionConfiguredCallback (JNIEnv* env, CaptureSession& t, jobject rawSession)\r
{\r
+ LocalRef<jobject> session (env->NewLocalRef (rawSession));\r
JUCE_CAMERA_LOG ("cameraCaptureSessionConfigured()");\r
\r
- if (pendingClose.get() == 1)\r
+ if (t.pendingClose.get() == 1)\r
{\r
// Already closing, bailout.\r
- closedEvent.signal();\r
+ t.closedEvent.signal();\r
\r
GlobalRef s (session);\r
\r
MessageManager::callAsync ([s]()\r
- {\r
- getEnv()->CallVoidMethod (s, CameraCaptureSession.close);\r
- });\r
+ {\r
+ getEnv()->CallVoidMethod (s, CameraCaptureSession.close);\r
+ });\r
\r
return;\r
}\r
\r
{\r
- const ScopedLock lock (captureSessionLock);\r
- captureSession = GlobalRef (session);\r
+ const ScopedLock lock (t.captureSessionLock);\r
+ t.captureSession = GlobalRef (session);\r
}\r
\r
- MessageManager::callAsync ([weakRef = WeakReference<CaptureSession> { this }]\r
- {\r
- if (weakRef == nullptr)\r
- return;\r
+ MessageManager::callAsync ([weakRef = WeakReference<CaptureSession> { &t }]\r
+ {\r
+ if (weakRef == nullptr)\r
+ return;\r
\r
- weakRef->stillPictureTaker.reset (new StillPictureTaker (weakRef->captureSession,\r
- weakRef->captureRequestBuilder,\r
- weakRef->previewCaptureRequest,\r
- weakRef->handler,\r
- weakRef->autoFocusMode));\r
+ weakRef->stillPictureTaker.reset (new StillPictureTaker (weakRef->captureSession,\r
+ weakRef->captureRequestBuilder,\r
+ weakRef->previewCaptureRequest,\r
+ weakRef->handler,\r
+ weakRef->autoFocusMode));\r
\r
- weakRef->configuredCallback.captureSessionConfigured (weakRef.get());\r
- });\r
+ weakRef->configuredCallback.captureSessionConfigured (weakRef.get());\r
+ });\r
}\r
\r
- void cameraCaptureSessionReady (const LocalRef<jobject>& session)\r
+ static void cameraCaptureSessionReadyCallback ([[maybe_unused]] JNIEnv* env,\r
+ [[maybe_unused]] CaptureSession& t,\r
+ [[maybe_unused]] jobject rawSession)\r
{\r
JUCE_CAMERA_LOG ("cameraCaptureSessionReady()");\r
- ignoreUnused (session);\r
- }\r
-\r
- //==============================================================================\r
- static void cameraCaptureSessionActiveCallback (JNIEnv*, jobject, jlong host, jobject rawSession)\r
- {\r
- if (auto* myself = reinterpret_cast<CaptureSession*> (host))\r
- {\r
- LocalRef<jobject> session (getEnv()->NewLocalRef(rawSession));\r
-\r
- myself->cameraCaptureSessionActive (session);\r
- }\r
- }\r
-\r
- static void cameraCaptureSessionClosedCallback (JNIEnv*, jobject, jlong host, jobject rawSession)\r
- {\r
- if (auto* myself = reinterpret_cast<CaptureSession*> (host))\r
- {\r
- LocalRef<jobject> session (getEnv()->NewLocalRef(rawSession));\r
-\r
- myself->cameraCaptureSessionClosed (session);\r
- }\r
- }\r
-\r
- static void cameraCaptureSessionConfigureFailedCallback (JNIEnv*, jobject, jlong host, jobject rawSession)\r
- {\r
- if (auto* myself = reinterpret_cast<CaptureSession*> (host))\r
- {\r
- LocalRef<jobject> session (getEnv()->NewLocalRef(rawSession));\r
-\r
- myself->cameraCaptureSessionConfigureFailed (session);\r
- }\r
- }\r
-\r
- static void cameraCaptureSessionConfiguredCallback (JNIEnv*, jobject, jlong host, jobject rawSession)\r
- {\r
- if (auto* myself = reinterpret_cast<CaptureSession*> (host))\r
- {\r
- LocalRef<jobject> session (getEnv()->NewLocalRef(rawSession));\r
-\r
- myself->cameraCaptureSessionConfigured (session);\r
- }\r
- }\r
-\r
- static void cameraCaptureSessionReadyCallback (JNIEnv*, jobject, jlong host, jobject rawSession)\r
- {\r
- if (auto* myself = reinterpret_cast<CaptureSession*> (host))\r
- {\r
- LocalRef<jobject> session (getEnv()->NewLocalRef(rawSession));\r
-\r
- myself->cameraCaptureSessionReady (session);\r
- }\r
}\r
\r
//==============================================================================\r
//==============================================================================\r
#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \\r
METHOD (constructor, "<init>", "(J)V") \\r
- CALLBACK (cameraDeviceStateClosedCallback, "cameraDeviceStateClosed", "(JLandroid/hardware/camera2/CameraDevice;)V") \\r
- CALLBACK (cameraDeviceStateDisconnectedCallback, "cameraDeviceStateDisconnected", "(JLandroid/hardware/camera2/CameraDevice;)V") \\r
- CALLBACK (cameraDeviceStateErrorCallback, "cameraDeviceStateError", "(JLandroid/hardware/camera2/CameraDevice;I)V") \\r
- CALLBACK (cameraDeviceStateOpenedCallback, "cameraDeviceStateOpened", "(JLandroid/hardware/camera2/CameraDevice;)V")\r
+ CALLBACK (generatedCallback<&ScopedCameraDevice::cameraDeviceStateClosedCallback>, "cameraDeviceStateClosed", "(JLandroid/hardware/camera2/CameraDevice;)V") \\r
+ CALLBACK (generatedCallback<&ScopedCameraDevice::cameraDeviceStateDisconnectedCallback>, "cameraDeviceStateDisconnected", "(JLandroid/hardware/camera2/CameraDevice;)V") \\r
+ CALLBACK (generatedCallback<&ScopedCameraDevice::cameraDeviceStateErrorCallback>, "cameraDeviceStateError", "(JLandroid/hardware/camera2/CameraDevice;I)V") \\r
+ CALLBACK (generatedCallback<&ScopedCameraDevice::cameraDeviceStateOpenedCallback>, "cameraDeviceStateOpened", "(JLandroid/hardware/camera2/CameraDevice;)V")\r
\r
DECLARE_JNI_CLASS_WITH_MIN_SDK (CameraDeviceStateCallback, "com/rmsl/juce/CameraDeviceStateCallback", 21)\r
#undef JNI_CLASS_MEMBERS\r
}\r
\r
//==============================================================================\r
- void cameraDeviceStateClosed()\r
+ void notifyOpenResult()\r
+ {\r
+ MessageManager::callAsync ([this]() { owner.cameraOpenFinished (openError); });\r
+ }\r
+\r
+ //==============================================================================\r
+ static void cameraDeviceStateClosedCallback (JNIEnv*, ScopedCameraDevice& s, jobject)\r
{\r
JUCE_CAMERA_LOG ("cameraDeviceStateClosed()");\r
\r
- closedEvent.signal();\r
+ s.closedEvent.signal();\r
}\r
\r
- void cameraDeviceStateDisconnected()\r
+ static void cameraDeviceStateDisconnectedCallback (JNIEnv*, ScopedCameraDevice& s, jobject)\r
{\r
JUCE_CAMERA_LOG ("cameraDeviceStateDisconnected()");\r
\r
- if (pendingOpen.compareAndSetBool (0, 1))\r
+ if (s.pendingOpen.compareAndSetBool (0, 1))\r
{\r
- openError = "Device disconnected";\r
+ s.openError = "Device disconnected";\r
\r
- notifyOpenResult();\r
+ s.notifyOpenResult();\r
}\r
\r
- MessageManager::callAsync ([this]() { close(); });\r
+ MessageManager::callAsync ([&s] { s.close(); });\r
}\r
\r
- void cameraDeviceStateError (int errorCode)\r
+ static void cameraDeviceStateErrorCallback (JNIEnv*, ScopedCameraDevice& s, jobject, jint errorCode)\r
{\r
- String error = cameraErrorCodeToString (errorCode);\r
+ auto error = cameraErrorCodeToString (errorCode);\r
\r
JUCE_CAMERA_LOG ("cameraDeviceStateError(), error: " + error);\r
\r
- if (pendingOpen.compareAndSetBool (0, 1))\r
+ if (s.pendingOpen.compareAndSetBool (0, 1))\r
{\r
- openError = error;\r
+ s.openError = error;\r
\r
- notifyOpenResult();\r
+ s.notifyOpenResult();\r
}\r
\r
- fatalErrorOccurred.set (1);\r
+ s.fatalErrorOccurred.set (1);\r
\r
- MessageManager::callAsync ([this, error]()\r
+ MessageManager::callAsync ([&s, error]()\r
{\r
- owner.cameraDeviceError (error);\r
- close();\r
+ s.owner.cameraDeviceError (error);\r
+ s.close();\r
});\r
}\r
\r
- void cameraDeviceStateOpened (const LocalRef<jobject>& cameraDeviceToUse)\r
+ static void cameraDeviceStateOpenedCallback (JNIEnv* env, ScopedCameraDevice& s, jobject cameraDeviceToUse)\r
{\r
JUCE_CAMERA_LOG ("cameraDeviceStateOpened()");\r
\r
- pendingOpen.set (0);\r
-\r
- cameraDevice = GlobalRef (cameraDeviceToUse);\r
-\r
- notifyOpenResult();\r
- }\r
-\r
- void notifyOpenResult()\r
- {\r
- MessageManager::callAsync ([this]() { owner.cameraOpenFinished (openError); });\r
- }\r
-\r
- //==============================================================================\r
- static void JNICALL cameraDeviceStateClosedCallback (JNIEnv*, jobject, jlong host, jobject)\r
- {\r
- if (auto* myself = reinterpret_cast<ScopedCameraDevice*>(host))\r
- myself->cameraDeviceStateClosed();\r
- }\r
+ LocalRef<jobject> camera (env->NewLocalRef (cameraDeviceToUse));\r
\r
- static void JNICALL cameraDeviceStateDisconnectedCallback (JNIEnv*, jobject, jlong host, jobject)\r
- {\r
- if (auto* myself = reinterpret_cast<ScopedCameraDevice*>(host))\r
- myself->cameraDeviceStateDisconnected();\r
- }\r
-\r
- static void JNICALL cameraDeviceStateErrorCallback (JNIEnv*, jobject, jlong host, jobject, jint error)\r
- {\r
- if (auto* myself = reinterpret_cast<ScopedCameraDevice*>(host))\r
- myself->cameraDeviceStateError (error);\r
- }\r
+ s.pendingOpen.set (0);\r
\r
- static void JNICALL cameraDeviceStateOpenedCallback (JNIEnv*, jobject, jlong host, jobject rawCamera)\r
- {\r
- if (auto* myself = reinterpret_cast<ScopedCameraDevice*>(host))\r
- {\r
- LocalRef<jobject> camera(getEnv()->NewLocalRef(rawCamera));\r
+ s.cameraDevice = GlobalRef (camera);\r
\r
- myself->cameraDeviceStateOpened (camera);\r
- }\r
+ s.notifyOpenResult();\r
}\r
};\r
\r
METHOD (constructor, "<init>", "(JLandroid/content/Context;I)V") \\r
METHOD (disable, "disable", "()V") \\r
METHOD (enable, "enable", "()V") \\r
- CALLBACK (deviceOrientationChanged, "deviceOrientationChanged", "(JI)V")\r
+ CALLBACK (generatedCallback<&DeviceOrientationChangeListener::orientationChanged>, "deviceOrientationChanged", "(JI)V")\r
\r
DECLARE_JNI_CLASS_WITH_MIN_SDK (OrientationEventListener, "com/rmsl/juce/JuceOrientationEventListener", 21)\r
#undef JNI_CLASS_MEMBERS\r
}\r
\r
//==============================================================================\r
- void orientationChanged (int orientation)\r
+ static void orientationChanged (JNIEnv*, DeviceOrientationChangeListener& t, jint orientation)\r
{\r
jassert (orientation < 360);\r
\r
if (orientation < 0)\r
return;\r
\r
- auto oldOrientation = deviceOrientation;\r
+ const auto oldOrientation = t.deviceOrientation;\r
+\r
+ t.deviceOrientation = [orientation]\r
+ {\r
+ if (orientation > (360 - 45) || orientation < 45)\r
+ return Desktop::upright;\r
+\r
+ if (orientation < 135)\r
+ return Desktop::rotatedClockwise;\r
+\r
+ if (orientation < 225)\r
+ return Desktop::upsideDown;\r
+\r
+ return Desktop::rotatedAntiClockwise;\r
+ }();\r
\r
// NB: this assumes natural position to be portrait always, but some devices may be landscape...\r
- if (orientation > (360 - 45) || orientation < 45)\r
- deviceOrientation = Desktop::upright;\r
- else if (orientation < 135)\r
- deviceOrientation = Desktop::rotatedClockwise;\r
- else if (orientation < 225)\r
- deviceOrientation = Desktop::upsideDown;\r
- else\r
- deviceOrientation = Desktop::rotatedAntiClockwise;\r
\r
- if (oldOrientation != deviceOrientation)\r
+ if (oldOrientation != t.deviceOrientation)\r
{\r
- lastKnownScreenOrientation = Desktop::getInstance().getCurrentOrientation();\r
+ t.lastKnownScreenOrientation = Desktop::getInstance().getCurrentOrientation();\r
\r
// Need to update preview transform, but screen orientation will change slightly\r
// later than sensor orientation.\r
- startTimer (500);\r
+ t.startTimer (500);\r
}\r
}\r
\r
numChecksForOrientationChange = 10;\r
}\r
}\r
-\r
- static void deviceOrientationChanged (JNIEnv*, jobject /*obj*/, jlong host, jint orientation)\r
- {\r
- if (auto* myself = reinterpret_cast<DeviceOrientationChangeListener*> (host))\r
- myself->orientationChanged (orientation);\r
- }\r
};\r
\r
//==============================================================================\r
{\r
auto* env = getEnv();\r
\r
- auto quitSafelyMethod = env->GetMethodID(AndroidHandlerThread, "quitSafely", "()Z");\r
+ auto quitSafelyMethod = env->GetMethodID (AndroidHandlerThread, "quitSafely", "()Z");\r
\r
// this code will only run on SDK >= 21\r
jassert(quitSafelyMethod != nullptr);\r
{\r
return ".mp4";\r
}\r
-\r
-//==============================================================================\r
-CameraDevice::Pimpl::ScopedCameraDevice::CaptureSession::StillPictureTaker::CameraCaptureSessionCaptureCallback_Class CameraDevice::Pimpl::ScopedCameraDevice::CaptureSession::StillPictureTaker::CameraCaptureSessionCaptureCallback;\r
-CameraDevice::Pimpl::ScopedCameraDevice::CameraDeviceStateCallback_Class CameraDevice::Pimpl::ScopedCameraDevice::CameraDeviceStateCallback;\r
-CameraDevice::Pimpl::ScopedCameraDevice::CaptureSession::CameraCaptureSessionStateCallback_Class CameraDevice::Pimpl::ScopedCameraDevice::CaptureSession::CameraCaptureSessionStateCallback;\r
-CameraDevice::Pimpl::DeviceOrientationChangeListener::OrientationEventListener_Class CameraDevice::Pimpl::DeviceOrientationChangeListener::OrientationEventListener;\r
//\r
// files with min sdk version 21\r
// See juce_core/native/java/README.txt on how to generate this byte-code.\r
-static const unsigned char MediaSessionByteCode[] =\r
+static const uint8 MediaSessionByteCode[] =\r
{ 31,139,8,8,247,108,161,94,0,3,77,101,100,105,97,83,101,115,115,105,111,110,66,121,116,101,67,111,100,101,46,100,101,120,0,149,\r
152,127,108,28,71,21,199,223,236,253,180,207,190,95,254,221,186,169,211,56,137,19,234,220,145,26,226,228,28,99,199,216,196,233,\r
249,71,125,182,107,76,168,187,246,109,236,77,238,118,143,221,189,171,45,132,168,170,32,21,209,63,144,74,165,170,82,81,144,64,\r
//==============================================================================\r
#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \\r
METHOD (constructor, "<init>", "(J)V") \\r
- CALLBACK (audioInfoChanged, "mediaControllerAudioInfoChanged", "(JLandroid/media/session/MediaController$PlaybackInfo;)V") \\r
- CALLBACK (metadataChanged, "mediaControllerMetadataChanged", "(JLandroid/media/MediaMetadata;)V") \\r
- CALLBACK (playbackStateChanged, "mediaControllerPlaybackStateChanged", "(JLandroid/media/session/PlaybackState;)V") \\r
- CALLBACK (sessionDestroyed, "mediaControllerSessionDestroyed", "(J)V")\r
+ CALLBACK (generatedCallback<&Controller::audioInfoChanged>, "mediaControllerAudioInfoChanged", "(JLandroid/media/session/MediaController$PlaybackInfo;)V") \\r
+ CALLBACK (generatedCallback<&Controller::metadataChanged>, "mediaControllerMetadataChanged", "(JLandroid/media/MediaMetadata;)V") \\r
+ CALLBACK (generatedCallback<&Controller::playbackStateChanged>, "mediaControllerPlaybackStateChanged", "(JLandroid/media/session/PlaybackState;)V") \\r
+ CALLBACK (generatedCallback<&Controller::sessionDestroyed>, "mediaControllerSessionDestroyed", "(J)V")\r
\r
- DECLARE_JNI_CLASS_WITH_BYTECODE (AndroidMediaControllerCallback, "com/rmsl/juce/MediaControllerCallback", 21, MediaSessionByteCode, sizeof (MediaSessionByteCode))\r
+ DECLARE_JNI_CLASS_WITH_BYTECODE (AndroidMediaControllerCallback, "com/rmsl/juce/MediaControllerCallback", 21, MediaSessionByteCode)\r
#undef JNI_CLASS_MEMBERS\r
\r
LocalRef<jobject> createControllerCallbacks()\r
\r
//==============================================================================\r
// MediaSessionController callbacks\r
- static void audioInfoChanged (JNIEnv*, jobject, jlong host, jobject playbackInfo)\r
+ static void audioInfoChanged (JNIEnv*, [[maybe_unused]] Controller& t, [[maybe_unused]] jobject playbackInfo)\r
{\r
- if (auto* myself = reinterpret_cast<VideoComponent::Pimpl::MediaSession::Controller*> (host))\r
- {\r
- ignoreUnused (playbackInfo);\r
- JUCE_VIDEO_LOG ("MediaSessionController::audioInfoChanged()");\r
- }\r
+ JUCE_VIDEO_LOG ("MediaSessionController::audioInfoChanged()");\r
}\r
\r
- static void metadataChanged (JNIEnv*, jobject, jlong host, jobject metadata)\r
+ static void metadataChanged (JNIEnv*, [[maybe_unused]] Controller&, [[maybe_unused]] jobject metadata)\r
{\r
- if (auto* myself = reinterpret_cast<VideoComponent::Pimpl::MediaSession::Controller*> (host))\r
- {\r
- ignoreUnused (metadata);\r
- JUCE_VIDEO_LOG ("MediaSessionController::metadataChanged()");\r
- }\r
+ JUCE_VIDEO_LOG ("MediaSessionController::metadataChanged()");\r
}\r
\r
- static void playbackStateChanged (JNIEnv*, jobject, jlong host, jobject state)\r
+ static void playbackStateChanged (JNIEnv*, Controller& t, [[maybe_unused]] jobject state)\r
{\r
- if (auto* myself = reinterpret_cast<VideoComponent::Pimpl::MediaSession::Controller*> (host))\r
- myself->stateChanged (state);\r
+ t.stateChanged (state);\r
}\r
\r
- static void sessionDestroyed (JNIEnv*, jobject, jlong host)\r
+ static void sessionDestroyed (JNIEnv*, [[maybe_unused]] Controller& t)\r
{\r
- if (auto* myself = reinterpret_cast<VideoComponent::Pimpl::MediaSession::Controller*> (host))\r
- JUCE_VIDEO_LOG ("MediaSessionController::sessionDestroyed()");\r
+ JUCE_VIDEO_LOG ("MediaSessionController::sessionDestroyed()");\r
}\r
};\r
\r
getEnv()->CallVoidMethod (nativeMediaPlayer, AndroidMediaPlayer.setDisplay, videoSurfaceHolder.get());\r
}\r
\r
- void load (const LocalRef<jstring>& mediaId, const LocalRef<jobject>& extras)\r
+ void load (const LocalRef<jstring>& mediaId, [[maybe_unused]] const LocalRef<jobject>& extras)\r
{\r
- ignoreUnused (extras);\r
-\r
closeVideo();\r
\r
auto* env = getEnv();\r
State currentState = State::idle;\r
\r
//==============================================================================\r
- void onPrepared (LocalRef<jobject>& mediaPlayer) override\r
+ void onPrepared ([[maybe_unused]] LocalRef<jobject>& mediaPlayer) override\r
{\r
JUCE_VIDEO_LOG ("MediaPlayer::onPrepared()");\r
\r
- ignoreUnused (mediaPlayer);\r
-\r
currentState = State::prepared;\r
\r
owner.playerPrepared();\r
}\r
\r
- void onBufferingUpdate (LocalRef<jobject>& mediaPlayer, int progress) override\r
+ void onBufferingUpdate ([[maybe_unused]] LocalRef<jobject>& mediaPlayer, int progress) override\r
{\r
- ignoreUnused (mediaPlayer);\r
-\r
owner.playerBufferingUpdated (progress);\r
}\r
\r
- void onSeekComplete (LocalRef<jobject>& mediaPlayer) override\r
+ void onSeekComplete ([[maybe_unused]] LocalRef<jobject>& mediaPlayer) override\r
{\r
JUCE_VIDEO_LOG ("MediaPlayer::onSeekComplete()");\r
\r
- ignoreUnused (mediaPlayer);\r
-\r
owner.playerSeekCompleted();\r
}\r
\r
- void onCompletion (LocalRef<jobject>& mediaPlayer) override\r
+ void onCompletion ([[maybe_unused]] LocalRef<jobject>& mediaPlayer) override\r
{\r
JUCE_VIDEO_LOG ("MediaPlayer::onCompletion()");\r
\r
- ignoreUnused (mediaPlayer);\r
-\r
currentState = State::complete;\r
\r
owner.playerPlaybackCompleted();\r
MEDIA_INFO_SUBTITLE_TIMED_OUT = 902\r
};\r
\r
- bool onInfo (LocalRef<jobject>& mediaPlayer, int what, int extra) override\r
+ bool onInfo ([[maybe_unused]] LocalRef<jobject>& mediaPlayer, int what, [[maybe_unused]] int extra) override\r
{\r
JUCE_VIDEO_LOG ("MediaPlayer::onInfo(), infoCode: " + String (what) + " (" + infoCodeToString (what) + ")"\r
+ ", extraCode: " + String (extra));\r
\r
- ignoreUnused (mediaPlayer, extra);\r
-\r
if (what == MEDIA_INFO_BUFFERING_START)\r
owner.playerBufferingStarted();\r
else if (what == MEDIA_INFO_BUFFERING_END)\r
}\r
}\r
\r
- bool onError (LocalRef<jobject>& mediaPlayer, int what, int extra) override\r
+ bool onError ([[maybe_unused]] LocalRef<jobject>& mediaPlayer, int what, int extra) override\r
{\r
auto errorMessage = errorCodeToString (what);\r
auto extraMessage = errorCodeToString (extra);\r
JUCE_VIDEO_LOG ("MediaPlayer::onError(), errorCode: " + String (what) + " (" + errorMessage + ")"\r
+ ", extraCode: " + String (extra) + " (" + extraMessage + ")");\r
\r
- ignoreUnused (mediaPlayer);\r
-\r
currentState = State::error;\r
\r
owner.errorOccurred (errorMessage);\r
//==============================================================================\r
#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \\r
METHOD (constructor, "<init>", "(J)V") \\r
- CALLBACK (pauseCallback, "mediaSessionPause", "(J)V") \\r
- CALLBACK (playCallback, "mediaSessionPlay", "(J)V") \\r
- CALLBACK (playFromMediaIdCallback, "mediaSessionPlayFromMediaId", "(JLjava/lang/String;Landroid/os/Bundle;)V") \\r
- CALLBACK (seekToCallback, "mediaSessionSeekTo", "(JJ)V") \\r
- CALLBACK (stopCallback, "mediaSessionStop", "(J)V")\r
+ CALLBACK (generatedCallback<&MediaSession::pauseCallback>, "mediaSessionPause", "(J)V") \\r
+ CALLBACK (generatedCallback<&MediaSession::playCallback>, "mediaSessionPlay", "(J)V") \\r
+ CALLBACK (generatedCallback<&MediaSession::playFromMediaIdCallback>, "mediaSessionPlayFromMediaId", "(JLjava/lang/String;Landroid/os/Bundle;)V") \\r
+ CALLBACK (generatedCallback<&MediaSession::seekToCallback>, "mediaSessionSeekTo", "(JJ)V") \\r
+ CALLBACK (generatedCallback<&MediaSession::stopCallback>, "mediaSessionStop", "(J)V")\r
\r
DECLARE_JNI_CLASS_WITH_MIN_SDK (AndroidMediaSessionCallback, "com/rmsl/juce/MediaSessionCallback", 21)\r
#undef JNI_CLASS_MEMBERS\r
\r
//==============================================================================\r
// MediaSession callbacks\r
- static void pauseCallback (JNIEnv*, jobject, jlong host)\r
+ static void pauseCallback (JNIEnv*, MediaSession& t)\r
{\r
- if (auto* myself = reinterpret_cast<VideoComponent::Pimpl::MediaSession*> (host))\r
- {\r
- JUCE_VIDEO_LOG ("MediaSession::pauseCallback()");\r
- myself->player.pause();\r
- myself->updatePlaybackState();\r
-\r
- myself->abandonAudioFocus();\r
- }\r
+ JUCE_VIDEO_LOG ("MediaSession::pauseCallback()");\r
+ t.player.pause();\r
+ t.updatePlaybackState();\r
+ t.abandonAudioFocus();\r
}\r
\r
- static void playCallback (JNIEnv*, jobject, jlong host)\r
+ static void playCallback (JNIEnv* env, MediaSession& t)\r
{\r
- if (auto* myself = reinterpret_cast<VideoComponent::Pimpl::MediaSession*> (host))\r
- {\r
- JUCE_VIDEO_LOG ("MediaSession::playCallback()");\r
+ JUCE_VIDEO_LOG ("MediaSession::playCallback()");\r
\r
- myself->requestAudioFocus();\r
+ t.requestAudioFocus();\r
\r
- if (! myself->hasAudioFocus)\r
- {\r
- myself->errorOccurred ("Application has been denied audio focus. Try again later.");\r
- return;\r
- }\r
+ if (! t.hasAudioFocus)\r
+ {\r
+ t.errorOccurred ("Application has been denied audio focus. Try again later.");\r
+ return;\r
+ }\r
\r
- getEnv()->CallVoidMethod (myself->nativeMediaSession, AndroidMediaSession.setActive, true);\r
+ env->CallVoidMethod (t.nativeMediaSession, AndroidMediaSession.setActive, true);\r
\r
- myself->player.play();\r
- myself->setSpeed (myself->playSpeedMult);\r
- myself->updatePlaybackState();\r
- }\r
+ t.player.play();\r
+ t.setSpeed (t.playSpeedMult);\r
+ t.updatePlaybackState();\r
}\r
\r
- static void playFromMediaIdCallback (JNIEnv* env, jobject, jlong host, jstring mediaId, jobject extras)\r
+ static void playFromMediaIdCallback (JNIEnv* env, MediaSession& t, jstring mediaId, jobject extras)\r
{\r
- if (auto* myself = reinterpret_cast<VideoComponent::Pimpl::MediaSession*> (host))\r
- {\r
- JUCE_VIDEO_LOG ("MediaSession::playFromMediaIdCallback()");\r
+ JUCE_VIDEO_LOG ("MediaSession::playFromMediaIdCallback()");\r
\r
- myself->player.load (LocalRef<jstring> ((jstring) env->NewLocalRef(mediaId)), LocalRef<jobject> (env->NewLocalRef(extras)));\r
- myself->updatePlaybackState();\r
- }\r
+ t.player.load (LocalRef<jstring> ((jstring) env->NewLocalRef (mediaId)), LocalRef<jobject> (env->NewLocalRef (extras)));\r
+ t.updatePlaybackState();\r
}\r
\r
- static void seekToCallback (JNIEnv* /*env*/, jobject, jlong host, jlong pos)\r
+ static void seekToCallback (JNIEnv*, MediaSession& t, jlong pos)\r
{\r
- if (auto* myself = reinterpret_cast<VideoComponent::Pimpl::MediaSession*> (host))\r
- {\r
- JUCE_VIDEO_LOG ("MediaSession::seekToCallback()");\r
+ JUCE_VIDEO_LOG ("MediaSession::seekToCallback()");\r
\r
- myself->pendingSeekRequest = true;\r
- myself->player.setPlayPosition ((jint) pos);\r
- myself->updatePlaybackState();\r
- }\r
+ t.pendingSeekRequest = true;\r
+ t.player.setPlayPosition ((jint) pos);\r
+ t.updatePlaybackState();\r
}\r
\r
- static void stopCallback(JNIEnv* env, jobject, jlong host)\r
+ static void stopCallback (JNIEnv* env, MediaSession& t)\r
{\r
- if (auto* myself = reinterpret_cast<VideoComponent::Pimpl::MediaSession*> (host))\r
- {\r
- JUCE_VIDEO_LOG ("MediaSession::stopCallback()");\r
+ JUCE_VIDEO_LOG ("MediaSession::stopCallback()");\r
\r
- env->CallVoidMethod (myself->nativeMediaSession, AndroidMediaSession.setActive, false);\r
+ env->CallVoidMethod (t.nativeMediaSession, AndroidMediaSession.setActive, false);\r
\r
- myself->player.closeVideo();\r
- myself->updatePlaybackState();\r
+ t.player.closeVideo();\r
+ t.updatePlaybackState();\r
\r
- myself->abandonAudioFocus();\r
+ t.abandonAudioFocus();\r
\r
- myself->owner.closeVideoFinished();\r
- }\r
+ t.owner.closeVideoFinished();\r
}\r
\r
//==============================================================================\r
#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \\r
METHOD (constructor, "<init>", "(Landroid/app/Activity;J)V") \\r
METHOD (setEnabled, "setEnabled", "(Z)V") \\r
- CALLBACK (systemVolumeChangedCallback, "mediaSessionSystemVolumeChanged", "(J)V")\r
+ CALLBACK (generatedCallback<&SystemVolumeListener::systemVolumeChanged>, "mediaSessionSystemVolumeChanged", "(J)V")\r
\r
DECLARE_JNI_CLASS_WITH_MIN_SDK (SystemVolumeObserver, "com/rmsl/juce/SystemVolumeObserver", 21)\r
#undef JNI_CLASS_MEMBERS\r
\r
// Send first notification instantly to ensure sync.\r
if (shouldBeEnabled)\r
- systemVolumeChanged();\r
+ systemVolumeChanged (getEnv(), *this);\r
}\r
\r
private:\r
//==============================================================================\r
- void systemVolumeChanged()\r
+ static void systemVolumeChanged (JNIEnv*, SystemVolumeListener& t)\r
{\r
- MessageManager::callAsync ([weakThis = WeakReference<SystemVolumeListener> { this }]() mutable\r
+ MessageManager::callAsync ([weakThis = WeakReference<SystemVolumeListener> { &t }]\r
{\r
if (weakThis == nullptr)\r
return;\r
\r
}\r
\r
- //==============================================================================\r
- static void systemVolumeChangedCallback (JNIEnv*, jobject, jlong host)\r
- {\r
- if (auto* myself = reinterpret_cast<VideoComponent::Pimpl::SystemVolumeListener*> (host))\r
- myself->systemVolumeChanged();\r
- }\r
-\r
JUCE_DECLARE_WEAK_REFERENCEABLE (SystemVolumeListener)\r
};\r
\r
\r
//==============================================================================\r
constexpr VideoComponent::Pimpl::MediaSession::Player::StateInfo VideoComponent::Pimpl::MediaSession::Player::stateInfos[];\r
-\r
-//==============================================================================\r
-VideoComponent::Pimpl::MediaSession::AndroidMediaSessionCallback_Class VideoComponent::Pimpl::MediaSession::AndroidMediaSessionCallback;\r
-VideoComponent::Pimpl::MediaSession::Controller::AndroidMediaControllerCallback_Class VideoComponent::Pimpl::MediaSession::Controller::AndroidMediaControllerCallback;\r
-VideoComponent::Pimpl::SystemVolumeListener::SystemVolumeObserver_Class VideoComponent::Pimpl::SystemVolumeListener::SystemVolumeObserver;\r
\r
private:\r
//==============================================================================\r
- static void started (id self, SEL, NSNotification* notification)\r
+ static void started (id self, SEL, [[maybe_unused]] NSNotification* notification)\r
{\r
JUCE_CAMERA_LOG (nsStringToJuce ([notification description]));\r
\r
- ignoreUnused (notification);\r
-\r
dispatch_async (dispatch_get_main_queue(),\r
^{\r
getOwner (self).cameraSessionStarted();\r
});\r
}\r
\r
- static void stopped (id, SEL, NSNotification* notification)\r
+ static void stopped (id, SEL, [[maybe_unused]] NSNotification* notification)\r
{\r
JUCE_CAMERA_LOG (nsStringToJuce ([notification description]));\r
-\r
- ignoreUnused (notification);\r
}\r
\r
static void runtimeError (id self, SEL, NSNotification* notification)\r
});\r
}\r
\r
- static void interrupted (id, SEL, NSNotification* notification)\r
+ static void interrupted (id, SEL, [[maybe_unused]] NSNotification* notification)\r
{\r
JUCE_CAMERA_LOG (nsStringToJuce ([notification description]));\r
-\r
- ignoreUnused (notification);\r
}\r
\r
- static void interruptionEnded (id, SEL, NSNotification* notification)\r
+ static void interruptionEnded (id, SEL, [[maybe_unused]] NSNotification* notification)\r
{\r
JUCE_CAMERA_LOG (nsStringToJuce ([notification description]));\r
-\r
- ignoreUnused (notification);\r
}\r
};\r
\r
\r
static void didFinishCaptureForSettings (id, SEL, AVCapturePhotoOutput*, AVCaptureResolvedPhotoSettings*, NSError* error)\r
{\r
- String errorString = error != nil ? nsStringToJuce (error.localizedDescription) : String();\r
- ignoreUnused (errorString);\r
+ [[maybe_unused]] String errorString = error != nil ? nsStringToJuce (error.localizedDescription) : String();\r
\r
JUCE_CAMERA_LOG ("didFinishCaptureForSettings(), error = " + errorString);\r
}\r
{\r
getOwner (self).takingPicture = false;\r
\r
- String errorString = error != nil ? nsStringToJuce (error.localizedDescription) : String();\r
- ignoreUnused (errorString);\r
+ [[maybe_unused]] String errorString = error != nil ? nsStringToJuce (error.localizedDescription) : String();\r
\r
JUCE_CAMERA_LOG ("didFinishProcessingPhoto(), error = " + errorString);\r
\r
{\r
getOwner (self).takingPicture = false;\r
\r
- String errorString = error != nil ? nsStringToJuce (error.localizedDescription) : String();\r
- ignoreUnused (errorString);\r
+ [[maybe_unused]] String errorString = error != nil ? nsStringToJuce (error.localizedDescription) : String();\r
\r
JUCE_CAMERA_LOG ("didFinishProcessingPhotoSampleBuffer(), error = " + errorString);\r
\r
}\r
\r
private:\r
- static void printVideoOutputDebugInfo (AVCaptureMovieFileOutput* output)\r
+ static void printVideoOutputDebugInfo ([[maybe_unused]] AVCaptureMovieFileOutput* output)\r
{\r
- ignoreUnused (output);\r
-\r
JUCE_CAMERA_LOG ("Available video codec types:");\r
\r
#if JUCE_CAMERA_LOG_ENABLED\r
{\r
if (error != nil)\r
{\r
- String errorString = error != nil ? nsStringToJuce (error.localizedDescription) : String();\r
- ignoreUnused (errorString);\r
+ [[maybe_unused]] String errorString = error != nil ? nsStringToJuce (error.localizedDescription) : String();\r
\r
JUCE_CAMERA_LOG ("Still picture capture failed, error: " + errorString);\r
jassertfalse;\r
auto context = []\r
{\r
IBindCtx* ptr = nullptr;\r
- ignoreUnused (CreateBindCtx (0, &ptr));\r
+ [[maybe_unused]] const auto result = CreateBindCtx (0, &ptr);\r
return ContextPtr (ptr);\r
}();\r
\r
{\r
DirectShowContext (Pimpl& c) : component (c)\r
{\r
- ignoreUnused (CoInitialize (nullptr));\r
+ [[maybe_unused]] const auto result = CoInitialize (nullptr);\r
}\r
\r
~DirectShowContext() override\r
{\r
#if JUCE_ANDROID || JUCE_IOS\r
ignoreUnused (fileOrUrl, loadAsync);\r
-\r
// You need to use loadAsync on Android & iOS.\r
jassertfalse;\r
return Result::fail ("load() is not supported on this platform. Use loadAsync() instead.");\r
if (loadAsync)\r
startTimer (50);\r
else\r
- resized();\r
+ resized();\r
\r
return result;\r
#endif\r