diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..fe91619e --- /dev/null +++ b/.gitattributes @@ -0,0 +1,37 @@ +* text eol=crlf +*.sh text eol=lf + +*.7z binary +*.aif binary +*.aiff binary +*.asf binary +*.eot binary +*.fla binary +*.flac binary +*.flv binary +*.gif binary +*.gz binary +*.ico binary +*.jpeg binary +*.jpg binary +*.mid binary +*.mov binary +*.mp2 binary +*.mp3 binary +*.mp4 binary +*.ogg binary +*.otc binary +*.otf binary +*.pdf binary +*.png binary +*.pyc binary +*.swf binary +*.tga binary +*.ttc binary +*.ttf binary +*.wav binary +*.wma binary +*.wm binary +*.wmv binary +*.woff binary +*.zip binary diff --git a/.gitignore b/.gitignore index 29393219..214bc0a0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,76 +1,86 @@ -._* -*.mode1v3 -*.pbxuser -*.perspectivev3 -*.user -*.ncb -*.suo -*.ilk -*.pch -*.pdb -*.dep -*.idb -*.manifest -*.manifest.res -*.o -*.d -*.sdf -*.opensdf -*.VC.db -*.VC.opendb -xcuserdata -xcshareddata -*.xccheckout -*.xcscmblueprint -contents.xcworkspacedata -.DS_Store -.svn -.deps -.dirstamp -profile -node_modules -examples/**/build -**/MacOSX/build -**/iOS/build -**/IDEWorkspaceChecks.plist -**/Linux/build -**/LinuxMakefile/build -**/VisualStudio2005/Debug -**/VisualStudio2005/Release -**/VisualStudio2008/Debug -**/VisualStudio2008/Release -**/VisualStudio2010/Debug -**/VisualStudio2010/Release -**/VisualStudio2012/Debug -**/VisualStudio2012/Release -**/VisualStudio2013/Win32 -**/VisualStudio2013/x64 -**/VisualStudio2015/Win32 -**/VisualStudio2015/x64 -**/VisualStudio2017/Win32 -**/VisualStudio2017/x64 -**/Builds/x64 -**/.vs -**/CodeBlocks/bin -**/CodeBlocks/obj -**/CodeBlocks/*.depend -**/CodeBlocks/*.layout -**/Builds/Android/.gradle -**/Builds/Android/.idea -**/Builds/Android/build -**/Builds/Android/**/*.iml -**/Builds/Android/local.properties -**/Builds/Android/app/build -**/Builds/Android/app/.externalNativeBuild -**/Builds/Android/lib/build -**/Builds/Android/lib/.externalNativeBuild -**/Builds/CLion/cmake-build-* -**/Builds/CLion/.idea -**/doxygen/doc -**/doxygen/build -extras/Projucer/JUCECompileEngine.dylib -**/AAX_SDK_2p3p1/Libs/*.build -**/AAX_SDK_2p3p1/Libs/AAXLibrary/WinBuild/**/int -**/AAX_SDK_2p3p1/Libs/Debug -**/AAX_SDK_2p3p1/Libs/Release -**/AAX_SDK_2p3p1/Documentation +# Compiled object files +*.slo +*.lo +*.o +*.obj +*.tlog +*.log + +.vscode + +._* +*.mode1v3 +*.pbxuser +*.perspectivev3 +*.user +*.ncb +*.suo +*.ilk +*.pch +*.pdb +*.dep +*.idb +*.manifest +*.manifest.res +*.o +*.d +*.sdf +*.opensdf +*.VC.db +*.VC.opendb +xcuserdata +xcshareddata +*.xccheckout +*.xcscmblueprint +contents.xcworkspacedata +.DS_Store +.svn +.deps +.dirstamp +profile +node_modules +examples/**/build +**/MacOSX/build +**/iOS/build +**/IDEWorkspaceChecks.plist +**/Linux/build +**/LinuxMakefile/build +**/VisualStudio2005/Debug +**/VisualStudio2005/Release +**/VisualStudio2008/Debug +**/VisualStudio2008/Release +**/VisualStudio2010/Debug +**/VisualStudio2010/Release +**/VisualStudio2012/Debug +**/VisualStudio2012/Release +**/VisualStudio2013/Win32 +**/VisualStudio2013/x64 +**/VisualStudio2015/Win32 +**/VisualStudio2015/x64 +**/VisualStudio2017/Win32 +**/VisualStudio2017/x64 +**/Builds/x64 +**/.vs +**/CodeBlocks/bin +**/CodeBlocks/obj +**/CodeBlocks/*.depend +**/CodeBlocks/*.layout +**/Builds/Android/.gradle +**/Builds/Android/.idea +**/Builds/Android/build +**/Builds/Android/**/*.iml +**/Builds/Android/local.properties +**/Builds/Android/app/build +**/Builds/Android/app/.externalNativeBuild +**/Builds/Android/lib/build +**/Builds/Android/lib/.externalNativeBuild +**/Builds/CLion/cmake-build-* +**/Builds/CLion/.idea +**/doxygen/doc +**/doxygen/build +extras/Projucer/JUCECompileEngine.dylib +**/AAX_SDK_2p3p1/Libs/*.build +**/AAX_SDK_2p3p1/Libs/AAXLibrary/WinBuild/**/int +**/AAX_SDK_2p3p1/Libs/Debug +**/AAX_SDK_2p3p1/Libs/Release +**/AAX_SDK_2p3p1/Documentation diff --git a/blueprint/blueprint.cpp b/blueprint/blueprint.cpp index 61435d2c..25cf117e 100644 --- a/blueprint/blueprint.cpp +++ b/blueprint/blueprint.cpp @@ -1,97 +1,36 @@ -/* - ============================================================================== - - blueprint.cpp - Created: 26 Nov 2018 3:19:03pm - - ============================================================================== -*/ - #ifdef BLUEPRINT_H_INCLUDED - /* When you add this cpp file to your project, you mustn't include it in a file where you've - already included any other headers - just put it inside a file on its own, possibly with your config - flags preceding it, but don't include anything else. That also includes avoiding any automatic prefix - header files that the compiler may be using. - */ - #error "Incorrect use of the Blueprint cpp file" + /** When you add this cpp file to your project, you mustn't include it in a file where you've + already included any other headers - just put it inside a file on its own, possibly with your config + flags preceding it, but don't include anything else. That also includes avoiding any automatic prefix + header files that the compiler may be using. + */ + #error "Incorrect use of the Blueprint cpp file!" #endif -/* We're careful to include the duktape source files before the module header - * file because `duktape.c` sets certain preprocessor definitions that enable - * necessary features in the duktape header. We need those defines to preempt - * the loading of the duktape header. This also, therefore, is the place for - * custom preprocessor definitions. - * - * We force Duktape to use a time provider on Windows that is compatible with - * Windows 7 SP1. It looks like W7SP1 is quite happy with plugins built with - * the 8.1 SDK, but the GetSystemTimePreciseAsFileTime() call used in here is - * just not supported without the 8.1 dll available. - */ -#if defined (_WIN32) || defined (_WIN64) -#define DUK_USE_DATE_NOW_WINDOWS 1 -#endif +//============================================================================== +#define JUCE_CORE_INCLUDE_NATIVE_HEADERS 1 -/* - * For whatever reason it is necessary to define this to resolve errors caused by both - * duktape and juce including parts of the winsock2 API. There may be a better way to - * resolve this. - */ -#if defined (_WIN32) || defined (_WIN64) -#define _WINSOCKAPI_ -#endif - -// Disable compiler warnings for external source files (duktape & yoga) -#if _MSC_VER - #pragma warning(push) - #pragma warning(disable : 4018) // signed/unsigned mismatch - #pragma warning(disable : 4127) // conditional expression is constant - #pragma warning(disable : 4244) // possible loss of data - #pragma warning(disable : 4505) // unreferenced local function - #pragma warning(disable : 4611) // object destruction is non-portable - #pragma warning(disable : 4702) // unreachable code -#elif __clang__ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wextra-semi" - #pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" - #pragma clang diagnostic ignored "-Wswitch-enum" - #pragma clang diagnostic ignored "-Wshorten-64-to-32" - #pragma clang diagnostic ignored "-Wshadow-field-in-constructor" - #pragma clang diagnostic ignored "-Wsign-conversion" - #pragma clang diagnostic ignored "-Wused-but-marked-unused" - #pragma clang diagnostic ignored "-Wformat-nonliteral" - #if __clang_major__ > 10 - #pragma clang diagnostic ignored "-Wc++98-compat-extra-semi" - #pragma clang diagnostic ignored "-Wimplicit-int-conversion" - #pragma clang diagnostic ignored "-Wimplicit-float-conversion" - #else - #pragma clang diagnostic ignored "-Wconversion" - #endif -#elif __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" - #pragma GCC diagnostic ignored "-Wsign-conversion" - #pragma GCC diagnostic ignored "-Wswitch-enum" - #pragma GCC diagnostic ignored "-Wunused-variable" - #pragma GCC diagnostic ignored "-Wredundant-decls" -#endif +#undef DUK_COMPILING_DUKTAPE +#define DUK_COMPILING_DUKTAPE 1 +//============================================================================== +#include "blueprint.h" -// We rely on the JUCE_DEBUG macro in duk_config.h at the moment to determine -// when we enable duktape debug features. This is a bit of a hack to make this -// work. We should be able to do better and may do so once we enable custom duktape -// configs. -#include +//============================================================================== +#include "internal/BeginIgnoringThirdPartyWarnings.h" -#include "duktape/src-noline/duktape.c" -#include "duktape/extras/console/duk_console.c" +extern "C" +{ + #undef DUK_COMPILING_DUKTAPE + #include "duktape/src-noline/duktape.c" + #include "duktape/extras/console/duk_console.c" -#if defined (_WIN32) || defined (_WIN64) + #if JUCE_WINDOWS #include "duktape/examples/debug-trans-socket/duk_trans_socket_windows.c" -#else + #else #include "duktape/examples/debug-trans-socket/duk_trans_socket_unix.c" -#endif - -#include "blueprint.h" + #endif +} #include "yoga/yoga/log.cpp" #include "yoga/yoga/event/event.cpp" @@ -105,22 +44,11 @@ #include "yoga/yoga/YGValue.cpp" #include "yoga/yoga/Yoga.cpp" -// Enable compiler warnings -#if _MSC_VER - #pragma warning (pop) -#elif __clang__ - #pragma clang diagnostic pop -#elif __GNUC__ - #pragma GCC diagnostic pop -#endif +#include "internal/EndIgnoringThirdPartyWarnings.h" +//============================================================================== #include "core/blueprint_AppHarness.cpp" #include "core/blueprint_EcmascriptEngine.cpp" - -#if JUCE_MODULE_AVAILABLE_juce_audio_processors - #include "core/blueprint_GenericEditor.cpp" -#endif - #include "core/blueprint_ReactApplicationRoot.cpp" #include "core/blueprint_ShadowView.cpp" #include "core/blueprint_TextShadowView.cpp" @@ -128,6 +56,10 @@ #include "core/blueprint_ViewManager.cpp" #include "core/blueprint_ScrollView.cpp" -#ifdef BLUEPRINT_INCLUDE_TESTS -#include "tests/blueprint_EcmascriptEngineTests.cpp" +#if JUCE_MODULE_AVAILABLE_juce_audio_processors + #include "core/blueprint_GenericEditor.cpp" +#endif + +#if BLUEPRINT_INCLUDE_UNIT_TESTS + #include "tests/blueprint_EcmascriptEngineTests.cpp" #endif diff --git a/blueprint/blueprint.h b/blueprint/blueprint.h index ec1b10d3..ac742b7c 100644 --- a/blueprint/blueprint.h +++ b/blueprint/blueprint.h @@ -1,10 +1,10 @@ /******************************************************************************* - * This file declares a JUCE module for the shared library code implemented in - * this directory. The block below is read by the Projucer to automatically - * generate project code that uses the module. For details, see the - * JUCE Module Format.txt file in the JUCE directory. + This file declares a JUCE module for the shared library code implemented in + this directory. The block below is read by the Projucer to automatically + generate project code that uses the module. For details, see the + JUCE Module Format.txt file in the JUCE directory. - BEGIN_JUCE_MODULE_DECLARATION + BEGIN_JUCE_MODULE_DECLARATION ID: blueprint vendor: Nick Thompson version: 0.1.0 @@ -13,58 +13,58 @@ minimumCppStandard: 17 dependencies: juce_gui_basics searchpaths: ./duktape/src-noline/ ./yoga - END_JUCE_MODULE_DECLARATION + END_JUCE_MODULE_DECLARATION *******************************************************************************/ #pragma once #define BLUEPRINT_H_INCLUDED +#include +#include + #include #if JUCE_MODULE_AVAILABLE_juce_audio_processors #include #endif -#include "yoga/yoga/YGMacros.h" +//============================================================================== +#if JUCE_EXCEPTIONS_DISABLED + #error "Blueprint module requires exceptions to be enabled!" +#endif -// This is a hacky workaround for an issue introduced in the YG_ENUM_BEGIN -// macro in YGMacros.h. When compiled on VS2017 we fall to their definition -// of YG_ENUM_BEGIN in YGMacros.h, which runs into something like a wrap-around overflow -// with signed types, and ends up trying to index with a garbage value into -// an array. We overwrite the YG_ENUM_BEGIN definition here with an unsigned -// type and everything seems to work ok. -// See: https://github.com/facebook/yoga/issues/891 -#ifndef NS_ENUM -#undef YG_ENUM_BEGIN -#define YG_ENUM_BEGIN(name) enum name: unsigned +#if ! JUCE_CXX17_IS_AVAILABLE + #error "Blueprint module requires a C++17 compatible toolchain!" +#endif + +//============================================================================== +/** Config: BLUEPRINT_INCLUDE_UNIT_TESTS + + Includes unit tests into your project. By default this is off. +*/ +#ifndef BLUEPRINT_INCLUDE_UNIT_TESTS + #define BLUEPRINT_INCLUDE_UNIT_TESTS 0 #endif -// What the hell is wrong with library authors who don't run CI builds with strict warning checks -// and keep their code clean and tidy!?!? As well as missing their own bugs, it means that users of -// their library then hit a million warnings, so they reduce THEIR warning level to avoid the noise, -// (because they'll be too lazy/busy to fix it, or at least to add pragmas like this), and everyone's -// code just ends up a little bit worse.. [/rant] -#if _MSC_VER - #pragma warning(push) -#elif __clang__ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wextra-semi" - #pragma clang diagnostic ignored "-Wsign-conversion" - #pragma clang diagnostic ignored "-Wswitch-enum" - #pragma clang diagnostic ignored "-Wunused-parameter" - #if __clang_major__ > 10 - #pragma clang diagnostic ignored "-Wc++98-compat-extra-semi" - #pragma clang diagnostic ignored "-Wimplicit-int-conversion" - #else - #pragma clang diagnostic ignored "-Wconversion" - #endif -#elif __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" - #pragma GCC diagnostic ignored "-Wsign-conversion" - #pragma GCC diagnostic ignored "-Wswitch-enum" - #pragma GCC diagnostic ignored "-Wunused-parameter" +//============================================================================== +#include "internal/BeginIgnoringThirdPartyWarnings.h" + +#include "yoga/yoga/YGMacros.h" + +/** This is a hacky workaround for an issue introduced in the YG_ENUM_BEGIN macro in YGMacros.h. + + When compiled on VS2017 we fall to their definition of YG_ENUM_BEGIN in YGMacros.h, + which runs into something like a wrap-around overflow with signed types, + and ends up trying to index with a garbage value into an array. + + We overwrite the YG_ENUM_BEGIN definition here with an unsigned type and everything seems to work ok. + + See: https://github.com/facebook/yoga/issues/891 +*/ +#ifndef NS_ENUM + #undef YG_ENUM_BEGIN + #define YG_ENUM_BEGIN(name) enum name: unsigned #endif #include "yoga/yoga/log.h" @@ -79,33 +79,39 @@ #include "yoga/yoga/Yoga-internal.h" #include "yoga/yoga/Yoga.h" -#include "duktape/src-noline/duktape.h" -#include "duktape/extras/console/duk_console.h" -#include "duktape/examples/debug-trans-socket/duk_trans_socket.h" +extern "C" +{ + #undef DUK_F_CPP11 -#if _MSC_VER -#elif __clang__ - #pragma clang diagnostic pop -#elif __GNUC__ - #pragma GCC diagnostic pop -#endif + /** This is needed because Duktape does a faulty check for MSVC toolchains, + specifically because MSVC has NEVER supported the __cplusplus macro. + */ + #define DUK_F_CPP11 (JUCE_CXX14_IS_AVAILABLE) -#include "core/blueprint_AppHarness.h" -#include "core/blueprint_EcmascriptEngine.h" -#include "core/blueprint_CanvasView.h" + #include "duktape/src-noline/duktape.h" + #include "duktape/extras/console/duk_console.h" + #include "duktape/examples/debug-trans-socket/duk_trans_socket.h" +} -#if JUCE_MODULE_AVAILABLE_juce_audio_processors - #include "core/blueprint_GenericEditor.h" -#endif +#include "internal/EndIgnoringThirdPartyWarnings.h" -#include "core/blueprint_ImageView.h" +//============================================================================== +#include "core/blueprint_EcmascriptEngine.h" +#include "core/blueprint_View.h" +#include "core/blueprint_ShadowView.h" +#include "core/blueprint_ViewManager.h" #include "core/blueprint_FileWatcher.h" -#include "core/blueprint_RawTextView.h" #include "core/blueprint_ReactApplicationRoot.h" +#include "core/blueprint_AppHarness.h" + +#include "core/blueprint_CanvasView.h" +#include "core/blueprint_ImageView.h" +#include "core/blueprint_RawTextView.h" #include "core/blueprint_ScrollView.h" #include "core/blueprint_ScrollViewContentShadowView.h" -#include "core/blueprint_ShadowView.h" #include "core/blueprint_TextShadowView.h" #include "core/blueprint_TextView.h" -#include "core/blueprint_View.h" -#include "core/blueprint_ViewManager.h" + +#if JUCE_MODULE_AVAILABLE_juce_audio_processors + #include "core/blueprint_GenericEditor.h" +#endif diff --git a/blueprint/core/blueprint_AppHarness.cpp b/blueprint/core/blueprint_AppHarness.cpp index 44e24d0d..027450fe 100644 --- a/blueprint/core/blueprint_AppHarness.cpp +++ b/blueprint/core/blueprint_AppHarness.cpp @@ -1,85 +1,79 @@ -/* - ============================================================================== - - blueprint_AppHarness.cpp - Created: 21 Nov 2020 11:27:37am - - ============================================================================== -*/ - -#pragma once - -#include "blueprint_AppHarness.h" - - namespace blueprint { - //============================================================================== - AppHarness::AppHarness(ReactApplicationRoot& _appRoot) - : appRoot(_appRoot) + AppHarness::AppHarness(ReactApplicationRoot& rar) : + appRoot (rar) { JUCE_ASSERT_MESSAGE_THREAD - fileWatcher = std::make_unique([this]() { + fileWatcher = std::make_unique ([this]() + { appRoot.reset(); appRoot.bindNativeRenderingHooks(); - if (onBeforeAll) { onBeforeAll(); } + if (onBeforeAll != nullptr) + onBeforeAll(); for (const auto& f : fileWatcher->getWatchedFiles()) { - if (onBeforeEach) { onBeforeEach(f); } - appRoot.evaluate(f); - if (onAfterEach) { onAfterEach(f); } + if (onBeforeEach != nullptr) + onBeforeEach (f); + + appRoot.evaluate (f); + + if (onAfterEach != nullptr) + onAfterEach (f); } - if (onAfterAll) { onAfterAll(); } + if (onAfterAll != nullptr) + onAfterAll(); }); - } //============================================================================== void AppHarness::watch (const juce::File& f) { - if (fileWatcher) - fileWatcher->watch(f); + if (fileWatcher != nullptr) + fileWatcher->watch (f); } void AppHarness::watch (const std::vector& fs) { - if (fileWatcher) - { + JUCE_ASSERT_MESSAGE_THREAD + + if (fileWatcher != nullptr) for (const auto& f : fs) - { - fileWatcher->watch(f); - } - } + fileWatcher->watch (f); } void AppHarness::start() { - if (onBeforeAll) { onBeforeAll(); } + if (onBeforeAll != nullptr) + onBeforeAll(); for (const auto& f : fileWatcher->getWatchedFiles()) { - if (onBeforeEach) { onBeforeEach(f); } - appRoot.evaluate(f); - if (onAfterEach) { onAfterEach(f); } + if (onBeforeEach != nullptr) + onBeforeEach (f); + + appRoot.evaluate (f); + + if (onAfterEach != nullptr) + onAfterEach (f); } - if (onAfterAll) { onAfterAll(); } + if (onAfterAll != nullptr) + onAfterAll(); -#if JUCE_DEBUG - if (fileWatcher) + #if JUCE_DEBUG + if (fileWatcher != nullptr) fileWatcher->start(); -#endif + #endif } void AppHarness::stop() { - if (fileWatcher) + if (fileWatcher != nullptr) fileWatcher->stop(); } - } diff --git a/blueprint/core/blueprint_AppHarness.h b/blueprint/core/blueprint_AppHarness.h index bc407347..8a787182 100644 --- a/blueprint/core/blueprint_AppHarness.h +++ b/blueprint/core/blueprint_AppHarness.h @@ -1,188 +1,179 @@ -/* - ============================================================================== - - blueprint_AppHarness.h - Created: 21 Nov 2020 11:27:37am - - ============================================================================== -*/ - #pragma once -#include "blueprint_EcmascriptEngine.h" -#include "blueprint_FileWatcher.h" -#include "blueprint_ReactApplicationRoot.h" - - namespace blueprint { - /** The AppHarness is a simple class which composes over your ReactApplicationRoot - * to provide file watching and hot reloading behavior for the bundle files your app evaluates. - * - * To use, you should only need to make a AppHarness, set it to `watch()` any - * of your files, and then call `start()` (called automatically in Debug builds). - * - * For custom behavior, you can attach callbacks at each of the four reloading stages: - * onBeforeAll – Invoked before evaluating any watched bundle - * onBeforeEach – Invoked before evaluating each watched bundle - * onAfterEach – Invoked after evaluating each watched bundle - * onAfterAll – Invoked after evaluatingg all watched bundles - */ + to provide file watching and hot reloading behaviour for the bundle files your app evaluates. + + To use, you should only need to make a AppHarness, set it to `watch()` any + of your files, and then call `start()` (called automatically in Debug builds). + + For custom behaviour, you can attach callbacks at each of the four reloading stages: + - onBeforeAll: Invoked before evaluating any watched bundle + - onBeforeEach: Invoked before evaluating each watched bundle + - onAfterEach: Invoked after evaluating each watched bundle + - onAfterAll: Invoked after evaluating all watched bundles + */ class AppHarness { public: //============================================================================== - AppHarness(ReactApplicationRoot& _appRoot); + /** */ + AppHarness(ReactApplicationRoot& appRoot); //============================================================================== + /** */ void watch (const juce::File& f); + /** */ void watch (const std::vector& fs); + /** */ void start(); + /** */ void stop(); //============================================================================== - /** - * Called once, after a file change is detected, before any watched bundle is evaluated. - * - * Often this callback will be used to install custom native methods and properties - * that the code in the bundle will expect to find when it's evaluated. - * - * @code - * - * MyEditor() - * : engine(std::make_shared()) - * , appRoot(engine) - * , harness(appRoot) - * { - * juce::File myAppBundle("/path/to/myAppBundle.js"); - * - * harness.onBeforeAll = [=]() { - * engine->registerNativeMethod( - * "myNativeMethod", - * [this](const juce::var::NativeFunctionArgs& args) { - * const juce::String& someParam = args.arguments[0].toString(); - * myMethod(someParam); - * return juce::var::undefined(); - * } - * ); - * }; - * - * harness.watch(myAppBundle); - * appRoot.evaluate(myAppBundle); - * - * // Not strictly required if JUCE_DEBUG set. - * harness.start(); - * } - * - * @endcode - **/ + /** Called once, after a file change is detected, before any watched bundle is evaluated. + + Often this callback will be used to install custom native methods and properties + that the code in the bundle will expect to find when it's evaluated. + + @code + + MyEditor() : + engine (std::make_shared()), + appRoot (engine), + harness (appRoot) + { + juce::File myAppBundle ("/path/to/myAppBundle.js"); + + harness.onBeforeAll = [=]() + { + engine->registerNativeMethod ("myNativeMethod", + [this] (const juce::var::NativeFunctionArgs& args) + { + if (args.numArguments > 0) + myMethod (args.arguments[0].toString()); + + return juce::var::undefined(); + } + ); + }; + + harness.watch (myAppBundle); + appRoot.evaluate (myAppBundle); + + // Not strictly required if JUCE_DEBUG set. + harness.start(); + } + + @endcode + */ std::function onBeforeAll; - /** - * Called after `onBeforeAll` immediately before evaluating each of the watched bundles. - * - * This callback may be used to assign specific behavior that must be invoked - * before a watched bundle is evaluated, but in such a way that depends on - * which bundle is being evaluated and when. - * - * @code - * - * MyEditor() - * : engine(std::make_shared()) - * , appRoot(engine) - * , harness(appRoot) - * { - * juce::File myAppBundle("/path/to/myAppBundle.js"); - * - * harness.onBeforeEach = [=](const juce::File& bundle) { - * if (bundle == myAppBundle) { - * engine->registerNativeMethod( - * "myNativeMethod", - * [this](const juce::var::NativeFunctionArgs& args) { - * const juce::String& someParam = args.arguments[0].toString(); - * myMethod(someParam); - * return juce::var::undefined(); - * } - * ); - * } - * }; - * - * harness.watch(myAppBundle); - * appRoot.evaluate(myAppBundle); - * - * // Not strictly required if JUCE_DEBUG set. - * harness.start(); - * } - * - * @endcode - **/ - std::function onBeforeEach; - - /** - * Called after `onBeforeEach` immediately after evaluating each of the watched bundles. - * - * This callback may be used to assign specific behavior that must be invoked - * after a watched bundle is evaluated, but in such a way that depends on - * which bundle hs been evaluated. - * - * @code - * - * MyEditor() - * : engine(std::make_shared()) - * , appRoot(engine) - * , harness(appRoot) - * { - * juce::File myAppBundle("/path/to/myAppBundle.js"); - * - * harness.onAfterEach = [=](const juce::File& bundle) { - * if (bundle == myAppBundle) { - * engine->invoke("MyBundlePlacedThisHere", 42); - * } - * }; - * - * harness.watch(myAppBundle); - * appRoot.evaluate(myAppBundle); - * - * // Not strictly required if JUCE_DEBUG set. - * harness.start(); - * } - * - * @endcode - **/ - std::function onAfterEach; - - /** - * Called once, after all the watched files have been evaluated and all the - * prior callbacks have been invoked. - * - * Often this callback will be used to dispatch events or values into an - * application that is expecting some initial state. - * - * @code - * - * MyEditor() - * : engine(std::make_shared()) - * , appRoot(engine) - * , harness(appRoot) - * { - * juce::File myAppBundle("/path/to/myAppBundle.js"); - * - * harness.onAfterAll = [=]() { - * appRoot.dispatchEvent("InitialParameterState, getInitialParamState()); - * }; - * - * harness.watch(myAppBundle); - * appRoot.evaluate(myAppBundle); - * - * // Not strictly required if JUCE_DEBUG set. - * harness.start(); - * } - * - * @endcode - **/ - std::function onAfterAll; + /** Called after `onBeforeAll` immediately before evaluating each of the watched bundles. + + This callback may be used to assign specific behaviour that must be invoked + before a watched bundle is evaluated, but in such a way that depends on + which bundle is being evaluated and when. + + @code + + MyEditor() : + engine (std::make_shared()), + appRoot (engine), + harness (appRoot) + { + juce::File myAppBundle ("/path/to/myAppBundle.js"); + + harness.onBeforeEach = [=] (const juce::File& bundle) + { + if (bundle == myAppBundle) + { + engine->registerNativeMethod ("myNativeMethod", + [this] (const juce::var::NativeFunctionArgs& args) + { + if (args.numArguments > 0) + myMethod (args.arguments[0].toString()); + + return juce::var::undefined(); + } + ); + } + }; + + harness.watch (myAppBundle); + appRoot.evaluate (myAppBundle); + + // Not strictly required if JUCE_DEBUG set. + harness.start(); + } + + @endcode + */ + std::function onBeforeEach; + + /** Called after `onBeforeEach` immediately after evaluating each of the watched bundles. + + This callback may be used to assign specific behaviour that must be invoked + after a watched bundle is evaluated, but in such a way that depends on + which bundle hs been evaluated. + + @code + MyEditor() : + engine (std::make_shared()), + appRoot (engine), + harness (appRoot) + { + juce::File myAppBundle ("/path/to/myAppBundle.js"); + + harness.onAfterEach = [=] (const juce::File& bundle) + { + if (bundle == myAppBundle) + engine->invoke("MyBundlePlacedThisHere", 42); + }; + + harness.watch (myAppBundle); + appRoot.evaluate (myAppBundle); + + // Not strictly required if JUCE_DEBUG set. + harness.start(); + } + + @endcode + */ + std::function onAfterEach; + + /** Called once, after all the watched files have been evaluated and all the + prior callbacks have been invoked. + + Often this callback will be used to dispatch events or values into an + application that is expecting some initial state. + + @code + + MyEditor() : + engine (std::make_shared()), + appRoot (engine), + harness (appRoot) + { + juce::File myAppBundle ("/path/to/myAppBundle.js"); + + harness.onAfterAll = [=]() + { + appRoot.dispatchEvent ("InitialParameterState, getInitialParamState()); + }; + + harness.watch (myAppBundle); + appRoot.evaluate (myAppBundle); + + // Not strictly required if JUCE_DEBUG set. + harness.start(); + } + + @endcode + */ + std::function onAfterAll; private: //============================================================================== @@ -192,5 +183,4 @@ namespace blueprint //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AppHarness) }; - } diff --git a/blueprint/core/blueprint_CanvasView.h b/blueprint/core/blueprint_CanvasView.h index 3df8dbad..54a09059 100644 --- a/blueprint/core/blueprint_CanvasView.h +++ b/blueprint/core/blueprint_CanvasView.h @@ -1,742 +1,735 @@ -/* - ============================================================================== - - blueprint_CanvasView.h - Created: 19 May 2020 9:02:25pm - - ============================================================================== -*/ - #pragma once -#include "blueprint_View.h" - namespace blueprint { /** The CanvasContext class is a C++ implementation/binding for the - * HTML Canvas API's CanvasRenderingContext2D object. - * - * https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D - * - * CanvasContext is used by the CanvasView class to support HTML like rendering in React/Blueprint - * components. CanvasContext could also be used outside of the CanvasView element in things like juce::LookAndFeel - * overrides. - * - * CanvasContext draws to a juce::Image internally. - * - * To use CanvasContext you simply need to instantiate a CanvasContext instance, call init() and then pass the - * CanvasContext instance to your JS drawing routine. Your JS drawing routine will then render to the - * CanvasContext's juce::Image when invoked, this juce::Image instance can then be rendered anywhere using - * CanvasContext::getImage() and juce::Graphics::drawImageAt(). See the CanvasView::paint() implementation - * for an example of this. - * - * Note that is is important to call CanvasContext::setSize() before invoking your JS drawing routine. - * - * A typical JS drawing routine that uses this implementation of the CanvasRenderingContext2D may look like the - * below: - * - * @code - * function drawCircle(ctx, x, y, radius, filled) { - * ctx.beginPath(); - * ctx.moveTo(x + radius, y); - * ctx.arc(x, y, radius, 0, 2 * Math.PI); - * - * if (filled) - * ctx.fill(); - * else - * ctx.stroke(); - * } - * - * function doDraw(ctx) { - * ctx.strokeColour = `ff884848`; - * ctx.fillColour = `ffffffaa`; - * - * drawCircle(ctx, x, y, radius, true); - * } - * @endcode - * - */ - class CanvasContext : public juce::DynamicObject + HTML Canvas API's CanvasRenderingContext2D object. + + https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D + + CanvasContext is used by the CanvasView class to support HTML like rendering in React/Blueprint + components. CanvasContext could also be used outside of the CanvasView element in things like juce::LookAndFeel + overrides. + + CanvasContext draws to a juce::Image internally. + + To use CanvasContext you simply need to instantiate a CanvasContext instance, call init() and then pass the + CanvasContext instance to your JS drawing routine. Your JS drawing routine will then render to the + CanvasContext's juce::Image when invoked, this juce::Image instance can then be rendered anywhere using + CanvasContext::getImage() and juce::Graphics::drawImageAt(). See the CanvasView::paint() implementation + for an example of this. + + Note that is is important to call CanvasContext::setSize() before invoking your JS drawing routine. + + A typical JS drawing routine that uses this implementation of the CanvasRenderingContext2D may look like the + below: + + @code + function drawCircle (ctx, x, y, radius, filled) + { + ctx.beginPath(); + ctx.moveTo (x + radius, y); + ctx.arc (x, y, radius, 0, 2 * Math.PI); + + if (filled) + ctx.fill(); + else + ctx.stroke(); + } + + function doDraw (ctx) + { + ctx.strokeColour = `ff884848`; + ctx.fillColour = `ffffffaa`; + + drawCircle (ctx, x, y, radius, true); + } + @endcode + */ + class CanvasContext final : public juce::DynamicObject { public: - using FillStyle = juce::FillType; + //============================================================================== + /** */ + using FillStyle = juce::FillType; + /** */ using StrokeStyle = juce::FillType; + //============================================================================== + /** */ struct Properties { - FillStyle fillStyle{}; - StrokeStyle strokeStyle{}; - int lineWidth = 1; - juce::Font font{}; + FillStyle fillStyle; + StrokeStyle strokeStyle; + int lineWidth = 1; + juce::Font font; juce::Justification textAlign = juce::Justification::left; }; - explicit CanvasContext() - : ctxWidth(1) - , ctxHeight(1) - , image(juce::Image::ARGB, ctxWidth, ctxHeight, true) + //============================================================================== + /** */ + explicit CanvasContext() : + image (juce::Image::ARGB, ctxWidth, ctxHeight, true) { registerNativeProperties(); registerNativeFunctions(); } - ~CanvasContext() = default; - - /** Set the size of the CanvasContext. This is akin to setting the width and height attributes - * on a HTML element. If you have a blueprint::View or a juce::Component that wished - * to render a CanvasContext you should ensure CanvasContext::setSize() is called from the - * View/Component's resized function. - */ - void setSize(int width, int height) - { - ctxWidth = std::max(width, 1); - ctxHeight = std::max(height, 1); - image = image.rescaled(ctxWidth, ctxHeight, juce::Graphics::highResamplingQuality); - } - - /** Get the juce::Image instance that has been rendered to. This can be drawn to the screen - * using juce::Graphics::drawImageAt(). - */ - const juce::Image& getImage() const - { - return image; - } - - /** init should be called before passing the CanvasContext instance to a JS drawing function. */ + //============================================================================== + /** Init should be called before passing the CanvasContext instance to a JS drawing function. */ void init() { - graphics = std::make_unique(image); + graphics = std::make_unique (image); properties = Properties{}; - path = juce::Path{}; + path.clear(); transformStack.clear(); } + /** Set the size of the CanvasContext. + + This is akin to setting the width and height attributes on a HTML element. + + If you have a blueprint::View or a juce::Component that wished to render + a CanvasContext you should ensure CanvasContext::setSize() + is called from the View/Component's resized function. + */ + void setSize (int width, int height) + { + ctxWidth = std::max (width, 1); + ctxHeight = std::max (height, 1); + image = image.rescaled (ctxWidth, ctxHeight, juce::Graphics::highResamplingQuality); + } + + /** @returns the juce::Image instance that has been rendered to. + This can be drawn to the screen using juce::Graphics::drawImageAt(). + */ + const juce::Image& getImage() const { return image; } + private: + //============================================================================== + int ctxWidth = 1, ctxHeight = 1; + juce::Image image; + std::unique_ptr graphics; + juce::Path path; + Properties properties; + std::vector transformStack; + + //============================================================================== void registerNativeProperties() { - setProperty("__setFillStyle", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 1); + setProperty ("__setFillStyle", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 1); - //TODO: Implement fillStyle pattern - //TODO: Implement fillStyle gradient + //TODO: Implement fillStyle pattern + //TODO: Implement fillStyle gradient - const auto colourHex = args.arguments[0].toString(); - properties.fillStyle.setColour(juce::Colour::fromString(colourHex)); + properties.fillStyle.setColour (juce::Colour::fromString (args.arguments[0].toString())); - return juce::var(); - } + return {}; + } }); - setProperty("__setStrokeStyle", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 1); + setProperty ("__setStrokeStyle", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 1); - //TODO: Implement strokeStyle pattern - //TODO: Implement stokeStyle gradient + //TODO: Implement strokeStyle pattern + //TODO: Implement stokeStyle gradient - const auto colourHex = args.arguments[0].toString(); - properties.strokeStyle.setColour(juce::Colour::fromString(colourHex)); + properties.strokeStyle.setColour (juce::Colour::fromString (args.arguments[0].toString())); - return juce::var(); - } + return {}; + } }); - setProperty("__setLineWidth", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 1); + setProperty ("__setLineWidth", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 1); - const int lineWidth = args.arguments[0]; - properties.lineWidth = lineWidth; + properties.lineWidth = static_cast (args.arguments[0]); - return juce::var(); - } + return {}; + } }); - /** - * Currently supports space separated css-font like strings with the below supported format/properties: - * - * " " - * - * One of the following values may be supplied for each font property. - * - * : italic, normal - * : bold, normal - * : font size in pixels, i.e. "14px" - * : font name representing an available font/typeface on the system, i.e. "sans-serif" - * - * Note, font-size and font-family must be supplied in the string from JS but font-style and font-weight - * are optional, though they must precede font-size and font-family and be ordered font-style, font-weight. - * If no values are supplied for font-style and font-weight the juce::Font::plain flag will be used. - * - * Example font strings from JS bundle: - * - * 'italic bold 14px sans-serif' - * 'bold 14px sans-serif' - * 'italic 14px sans-serif' - * '14px sans-serif' - * - * Note, multi-word/space-separated strings should be place in quotes: - * - * 'bold 14px "DejaVu Serif"' - * */ - setProperty("__setFont", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 1); - - auto fontString = args.arguments[0].toString(); - auto values = juce::StringArray::fromTokens (fontString, juce::StringRef (" "), {}); - - jassert(values.size() >=2 && values.size() <= 4); - - juce::Font::FontStyleFlags flags = juce::Font::plain; - float fontSize = 0; - juce::String typeface; - - for (auto& value : values) - { - // Remove any quoted values likely used when specifying fonts - value = value.unquoted(); - - if (value == "bold") - { - flags = static_cast(flags | juce::Font::bold); - } - else if (value == "italic") - { - flags = static_cast(flags | juce::Font::italic); - } - else if (value.contains("px")) - { - fontSize = (float)value.getIntValue(); - } - else if (value != "normal") - { - typeface = value; - } - } + /** Currently supports space separated css-font like strings with the below supported format/properties: + + " " + + One of the following values may be supplied for each font property. + + : italic, normal + : bold, normal + : font size in pixels, i.e. "14px" + : font name representing an available font/typeface on the system, i.e. "sans-serif" - properties.font = juce::Font(typeface, fontSize, flags); + Note, font-size and font-family must be supplied in the string from JS but font-style and font-weight + are optional, though they must precede font-size and font-family and be ordered font-style, font-weight. + If no values are supplied for font-style and font-weight the juce::Font::plain flag will be used. - return juce::var(); + Example font strings from JS bundle: + + 'italic bold 14px sans-serif' + 'bold 14px sans-serif' + 'italic 14px sans-serif' + '14px sans-serif' + + Note, multi-word/space-separated strings should be place in quotes: + + 'bold 14px "DejaVu Serif"' + */ + setProperty ("__setFont", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 1); + + auto fontString = args.arguments[0].toString(); + auto values = juce::StringArray::fromTokens (fontString, juce::StringRef (" "), {}); + + jassert (values.size() >=2 && values.size() <= 4); + + auto flags = juce::Font::plain; + auto fontSize = 0.0f; + juce::String typeface; + + for (auto& value : values) + { + // Remove any quoted values likely used when specifying fonts + value = value.unquoted(); + + if (value == "bold") + flags = static_cast (flags | juce::Font::bold); + else if (value == "italic") + flags = static_cast (flags | juce::Font::italic); + else if (value.contains ("px")) + fontSize = (float) value.getIntValue(); + else if (value != "normal") + typeface = value; } + + properties.font = juce::Font (typeface, fontSize, flags); + + return {}; + } }); - setProperty("__setTextAlign", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 1); - - const juce::String textAlign = args.arguments[0].toString(); - - //TODO: Have "start" and "end" depend on a "direction" property. - // Leaving with sensible defaults for now. No clear way - // to provide/infer text direction from locale at the moment etc. - if (textAlign == "left") - properties.textAlign = juce::Justification::left; - else if (textAlign == "right") - properties.textAlign = juce::Justification::right; - else if (textAlign == "center") - properties.textAlign = juce::Justification::horizontallyCentred; - else if (textAlign == "start") - properties.textAlign = juce::Justification::left; - else if (textAlign == "end") - properties.textAlign = juce::Justification::right; - - return juce::var(); - } + setProperty ("__setTextAlign", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 1); + + const auto textAlign = args.arguments[0].toString(); + + //TODO: Have "start" and "end" depend on a "direction" property. + // Leaving with sensible defaults for now. No clear way + // to provide/infer text direction from locale at the moment etc. + if (textAlign == "left") properties.textAlign = juce::Justification::left; + else if (textAlign == "right") properties.textAlign = juce::Justification::right; + else if (textAlign == "center") properties.textAlign = juce::Justification::horizontallyCentred; + else if (textAlign == "start") properties.textAlign = juce::Justification::left; + else if (textAlign == "end") properties.textAlign = juce::Justification::right; + + return {}; + } }); } void registerNativeFunctions() { -// setProperty("rect", juce::var::NativeFunction { -// [=](const juce::var::NativeFunctionArgs& args) -> juce::var { -// jassert(args.numArguments == 4); -// -// const float x = args.arguments[0]; -// const float y = args.arguments[1]; -// const float width = args.arguments[2]; -// const float height = args.arguments[3]; -// -// // TODO: For some reason this operation closes the current path. -// // The API docs suggest addRectangle should be added as a new sub-path -// // leaving the previous path open. -// // Fix. -// path.addRectangle(x, y, width, height); -// -// return juce::var(); -// } -// }); - - setProperty("fillRect", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 4); - - const int x = args.arguments[0]; - const int y = args.arguments[1]; - const int width = args.arguments[2]; - const int height = args.arguments[3]; - - graphics->setFillType(properties.fillStyle); - graphics->fillRect(x, y, width, height); - - return juce::var(); - } - }); - - setProperty("strokeRect", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 4); + setProperty ("fillRect", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 4); - const int x = args.arguments[0]; - const int y = args.arguments[1]; - const int width = args.arguments[2]; - const int height = args.arguments[3]; + const int x = args.arguments[0]; + const int y = args.arguments[1]; + const int width = args.arguments[2]; + const int height = args.arguments[3]; - graphics->setColour(properties.strokeStyle.colour); - graphics->drawRect(x, y, width, height, properties.lineWidth); + graphics->setFillType (properties.fillStyle); + graphics->fillRect (x, y, width, height); - return juce::var(); - } + return {}; + } }); - setProperty("strokeRoundedRect", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 5); + setProperty ("strokeRect", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 4); - const float x = args.arguments[0]; - const float y = args.arguments[1]; - const float width = args.arguments[2]; - const float height = args.arguments[3]; - const float cornerSize = args.arguments[4]; + const int x = args.arguments[0]; + const int y = args.arguments[1]; + const int width = args.arguments[2]; + const int height = args.arguments[3]; - graphics->setColour(properties.strokeStyle.colour); - graphics->drawRoundedRectangle(x, y, width, height, cornerSize, properties.lineWidth); + graphics->setColour (properties.strokeStyle.colour); + graphics->drawRect (x, y, width, height, properties.lineWidth); - return juce::var(); - } + return {}; + } }); - setProperty("fillRoundedRect", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 5); - - const float x = args.arguments[0]; - const float y = args.arguments[1]; - const float width = args.arguments[2]; - const float height = args.arguments[3]; - const float cornerSize = args.arguments[4]; - - graphics->setFillType(properties.fillStyle); - graphics->fillRoundedRectangle(x, y, width, height, cornerSize); + setProperty ("strokeRoundedRect", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 5); + + const float x = args.arguments[0]; + const float y = args.arguments[1]; + const float width = args.arguments[2]; + const float height = args.arguments[3]; + const float cornerSize = args.arguments[4]; + + graphics->setColour (properties.strokeStyle.colour); + graphics->drawRoundedRectangle (x, y, width, height, cornerSize, (float) properties.lineWidth); + + return {}; + } + }); - return juce::var(); - } + setProperty ("fillRoundedRect", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 5); + + const float x = args.arguments[0]; + const float y = args.arguments[1]; + const float width = args.arguments[2]; + const float height = args.arguments[3]; + const float cornerSize = args.arguments[4]; + + graphics->setFillType (properties.fillStyle); + graphics->fillRoundedRectangle (x, y, width, height, cornerSize); + + return {}; + } }); - setProperty("clearRect", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 4); + setProperty ("clearRect", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 4); - const int x = args.arguments[0]; - const int y = args.arguments[1]; - const int width = args.arguments[2]; - const int height = args.arguments[3]; + const int x = args.arguments[0]; + const int y = args.arguments[1]; + const int width = args.arguments[2]; + const int height = args.arguments[3]; - juce::Rectangle area (x, y, width, height); - image.clear(area); + image.clear ({ x, y, width, height }); - return juce::var(); - } + return {}; + } }); - // Path functions - setProperty("beginPath", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 0); - juce::ignoreUnused(args); + setProperty ("beginPath", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 0); + juce::ignoreUnused (args); - // Reset the current path on a call to beginPath on the context. - path = juce::Path(); + // Reset the current path on a call to beginPath on the context. + path.clear(); - return juce::var(); - } + return {}; + } }); - setProperty("lineTo", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 2); + setProperty ("lineTo", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 2); - const float x = args.arguments[0]; - const float y = args.arguments[1]; + const float x = args.arguments[0]; + const float y = args.arguments[1]; - path.lineTo(x, y); + path.lineTo (x, y); - return juce::var(); - } + return {}; + } }); - setProperty("moveTo", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 2); - juce::ignoreUnused(args); + setProperty ("moveTo", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 2); - const float x = args.arguments[0]; - const float y = args.arguments[1]; + const float x = args.arguments[0]; + const float y = args.arguments[1]; - path.startNewSubPath(x, y); + path.startNewSubPath (x, y); - return juce::var(); - } + return {}; + } }); - setProperty("arc", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - - // CanvasRenderingContext2D.arc() uses default antiClockWise false arg - jassert(args.numArguments >= 5 && args.numArguments <= 6); - - const float x = args.arguments[0]; - const float y = args.arguments[1]; - const float radius = args.arguments[2]; - const float startAngle = args.arguments[3]; - const float endAngle = args.arguments[4]; - //TODO; Handle antiClockWise - //bool antiClockWise = args.arguments[5]; - - path.addCentredArc(x, y, radius, radius, 0.0f, startAngle, endAngle, false); - return juce::var(); - } + setProperty ("arc", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + + // CanvasRenderingContext2D.arc() uses default antiClockWise false arg + jassert (args.numArguments >= 5 && args.numArguments <= 6); + + const float x = args.arguments[0]; + const float y = args.arguments[1]; + const float radius = args.arguments[2]; + const float startAngle = args.arguments[3]; + const float endAngle = args.arguments[4]; + //TODO; Handle antiClockWise + //bool antiClockWise = args.arguments[5]; + + path.addCentredArc (x, y, radius, radius, 0.0f, startAngle, endAngle, false); + return {}; + } }); - setProperty("quadraticCurveTo", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 4); + setProperty ("quadraticCurveTo", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 4); - const float controlPointX = args.arguments[0]; - const float controlPointY = args.arguments[1]; - const float endPointX = args.arguments[2]; - const float endPointY = args.arguments[3]; + const float controlPointX = args.arguments[0]; + const float controlPointY = args.arguments[1]; + const float endPointX = args.arguments[2]; + const float endPointY = args.arguments[3]; - path.quadraticTo(controlPointX, controlPointY, endPointX, endPointY); + path.quadraticTo (controlPointX, controlPointY, endPointX, endPointY); - return juce::var(); - } + return {}; + } }); //TODO: Implement CanvasRenderingContext2D.bezierCurveTo(). Will use juce::Path::cubicTo - setProperty("closePath", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 0); - juce::ignoreUnused(args); + setProperty ("closePath", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 0); + juce::ignoreUnused (args); - path.closeSubPath(); + path.closeSubPath(); - return juce::var(); - } + return {}; + } }); - setProperty("stroke", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 0); - juce::ignoreUnused(args); + setProperty ("stroke", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 0); + juce::ignoreUnused (args); - graphics->setColour(properties.strokeStyle.colour); - graphics->strokePath(path, juce::PathStrokeType((float)properties.lineWidth)); + graphics->setColour (properties.strokeStyle.colour); + graphics->strokePath (path, juce::PathStrokeType ( (float)properties.lineWidth)); - return juce::var(); - } + return {}; + } }); - setProperty("fill", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 0); - juce::ignoreUnused(args); + setProperty ("fill", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 0); + juce::ignoreUnused (args); - graphics->setColour(properties.fillStyle.colour); - graphics->fillPath(path); + graphics->setColour (properties.fillStyle.colour); + graphics->fillPath (path); - return juce::var(); - } + return {}; + } }); - // Transforms - setProperty("rotate", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 1); + setProperty ("rotate", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 1); - const float angle = args.arguments[0]; + const float angle = args.arguments[0]; - auto transform = juce::AffineTransform::rotation(angle); - graphics->addTransform(transform); - transformStack.push_back(transform.inverted()); + auto transform = juce::AffineTransform::rotation (angle); + graphics->addTransform (transform); + transformStack.push_back (transform.inverted()); - return juce::var(); - } + return {}; + } }); - setProperty("translate", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 2); + setProperty ("translate", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 2); - const float x = args.arguments[0]; - const float y = args.arguments[1]; + const float x = args.arguments[0]; + const float y = args.arguments[1]; - auto transform = juce::AffineTransform::translation(x, y); - graphics->addTransform(transform); - transformStack.push_back(transform.inverted()); + auto transform = juce::AffineTransform::translation (x, y); + graphics->addTransform (transform); + transformStack.push_back (transform.inverted()); - return juce::var(); - } + return {}; + } }); - setProperty("setTransform", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 6); - - const float mat00 = args.arguments[0]; - const float mat01 = args.arguments[1]; - const float mat02 = args.arguments[2]; - const float mat10 = args.arguments[3]; - const float mat11 = args.arguments[4]; - const float mat12 = args.arguments[5]; - - auto transform = juce::AffineTransform(mat00, mat01, mat02, mat10, mat11, mat12); - graphics->addTransform(transform); - transformStack.push_back(transform.inverted()); - - return juce::var(); - } + setProperty ("setTransform", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 6); + + const float mat00 = args.arguments[0]; + const float mat01 = args.arguments[1]; + const float mat02 = args.arguments[2]; + const float mat10 = args.arguments[3]; + const float mat11 = args.arguments[4]; + const float mat12 = args.arguments[5]; + + auto transform = juce::AffineTransform (mat00, mat01, mat02, mat10, mat11, mat12); + graphics->addTransform (transform); + transformStack.push_back (transform.inverted()); + + return {}; + } }); - setProperty("resetTransform", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments == 0); - juce::ignoreUnused(args); - - while (!transformStack.empty()) - { - graphics->addTransform(transformStack.back()); - transformStack.pop_back(); - } + setProperty ("resetTransform", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments == 0); + juce::ignoreUnused (args); + + while (! transformStack.empty()) + { + graphics->addTransform (transformStack.back()); + transformStack.pop_back(); + } - transformStack.clear(); + transformStack.clear(); - return juce::var(); - } + return {}; + } }); // drawImage support - setProperty("drawImage", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments >= 3 && args.numArguments <= 5); - - const juce::String svg = args.arguments[0].toString(); - const float xPos = args.arguments[1]; - const float yPos = args.arguments[2]; + setProperty ("drawImage", juce::var::NativeFunction + { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var + { + jassert (graphics != nullptr); + jassert (args.numArguments >= 3 && args.numArguments <= 5); - //TODO: Add support for drawimage source width and source height to draw sub rect of an image. - // ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight); + const auto svg = args.arguments[0].toString(); + const float xPos = args.arguments[1]; + const float yPos = args.arguments[2]; - std::unique_ptr svgElement(juce::XmlDocument::parse(svg)); + //TODO: Add support for drawimage source width and source height to draw sub rect of an image. + // ctx.drawImage (image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight); - if (!svgElement) - { - DBG("\"WARNING: Invalid SVG string supplied to `drawImage`.\""); - return juce::var(); - } + auto svgElement = juce::XmlDocument::parse (svg); - std::unique_ptr svgDrawable(juce::Drawable::createFromSVG(*svgElement)); + if (svgElement == nullptr) + { + DBG ("\"WARNING: Invalid SVG string supplied to `drawImage`.\""); + return {}; + } + if (auto svgDrawable = juce::Drawable::createFromSVG (*svgElement)) + { if (args.numArguments == 5) { - const float destWidth = args.arguments[3]; + const float destWidth = args.arguments[3]; const float destHeight = args.arguments[4]; - const auto bounds = juce::Rectangle(xPos, yPos, destWidth, destHeight); - svgDrawable->setTransformToFit(bounds, juce::RectanglePlacement::stretchToFit); - svgDrawable->draw(*graphics, 1.0f); + svgDrawable->setTransformToFit ({ xPos, yPos, destWidth, destHeight }, + juce::RectanglePlacement::stretchToFit); + + svgDrawable->draw (*graphics, 1.0f); } else { - svgDrawable->drawAt(*graphics, xPos, yPos, 1.0); + svgDrawable->drawAt (*graphics, xPos, yPos, 1.0); } - - return juce::var(); } + + return {}; + } }); // Text functions - setProperty("strokeText", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments >= 3 && args.numArguments <= 4); + setProperty ("strokeText", juce::var::NativeFunction { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var { + jassert (graphics != nullptr); + jassert (args.numArguments >= 3 && args.numArguments <= 4); - const juce::String text = args.arguments[0].toString(); - const float xPos = args.arguments[1]; - const float yPos = args.arguments[2]; + const auto text = args.arguments[0].toString(); + const float xPos = args.arguments[1]; + const float yPos = args.arguments[2]; - // Default maxLineWidth to full context width - float maxLineWidth = (float)ctxWidth; + // Default maxLineWidth to full context width + auto maxLineWidth = (float)ctxWidth; - if (args.numArguments == 4) - maxLineWidth = args.arguments[3]; + if (args.numArguments == 4) + maxLineWidth = args.arguments[3]; - juce::Path textPath; - juce::GlyphArrangement glyphArrangement; + juce::Path textPath; + juce::GlyphArrangement glyphArrangement; - glyphArrangement.addJustifiedText(properties.font, text, xPos, yPos, maxLineWidth, properties.textAlign); - glyphArrangement.createPath(textPath); + glyphArrangement.addJustifiedText (properties.font, text, xPos, yPos, maxLineWidth, properties.textAlign); + glyphArrangement.createPath (textPath); - graphics->setColour(properties.strokeStyle.colour); - graphics->strokePath(textPath, juce::PathStrokeType((float)properties.lineWidth)); + graphics->setColour (properties.strokeStyle.colour); + graphics->strokePath (textPath, juce::PathStrokeType ( (float)properties.lineWidth)); - return juce::var(); - } + return {}; + } }); - setProperty("fillText", juce::var::NativeFunction { - [=](const juce::var::NativeFunctionArgs& args) -> juce::var { - jassert(graphics); - jassert(args.numArguments >= 3 && args.numArguments <= 4); + setProperty ("fillText", juce::var::NativeFunction { + [=] (const juce::var::NativeFunctionArgs& args) -> juce::var { + jassert (graphics != nullptr); + jassert (args.numArguments >= 3 && args.numArguments <= 4); - const juce::String text = args.arguments[0].toString(); - const float xPos = args.arguments[1]; - const float yPos = args.arguments[2]; + const auto text = args.arguments[0].toString(); + const float xPos = args.arguments[1]; + const float yPos = args.arguments[2]; - // Default maxLineWidth to full context width - float maxLineWidth = (float)ctxWidth; + // Default maxLineWidth to full context width + float maxLineWidth = (float)ctxWidth; - if (args.numArguments == 4) - maxLineWidth = args.arguments[3]; + if (args.numArguments == 4) + maxLineWidth = args.arguments[3]; - juce::Path textPath; - juce::GlyphArrangement glyphArrangement; + juce::Path textPath; + juce::GlyphArrangement glyphArrangement; - glyphArrangement.addJustifiedText(properties.font, text, xPos, yPos, maxLineWidth, properties.textAlign); - glyphArrangement.createPath(textPath); + glyphArrangement.addJustifiedText (properties.font, text, xPos, yPos, maxLineWidth, properties.textAlign); + glyphArrangement.createPath (textPath); - graphics->setFillType(properties.fillStyle); - graphics->fillPath(textPath); + graphics->setFillType (properties.fillStyle); + graphics->fillPath (textPath); - return juce::var(); - } + return {}; + } }); } //============================================================================== - int ctxWidth; - int ctxHeight; - - juce::Image image; - std::unique_ptr graphics; - juce::Path path; - Properties properties; - std::vector transformStack; + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CanvasContext) }; //============================================================================== /** The CanvasView class is a core view for manual drawing routines within Blueprint's layout system via a CanvasContext. - */ - class CanvasView : public View, public juce::Timer + */ + class CanvasView final : public View, + private juce::Timer { public: //============================================================================== - CanvasView() - : ctx(new CanvasContext()) - { - } - - ~CanvasView() override - { - if (isTimerRunning()) - stopTimer(); - } + CanvasView() = default; //============================================================================== void setProperty (const juce::Identifier& name, const juce::var& value) override { - View::setProperty(name, value); + View::setProperty (name, value); - if (name == juce::Identifier("animate")) + if (name == juce::Identifier ("animate")) { - bool shouldAnimate = value; + const bool shouldAnimate = static_cast (value); if (shouldAnimate && !isTimerRunning()) - startTimerHz(45); + startTimerHz (45); - if (!shouldAnimate && isTimerRunning()) + if (! shouldAnimate && isTimerRunning()) stopTimer(); } } - //============================================================================== - void timerCallback() override - { - repaint(); - } - //============================================================================== void paint (juce::Graphics& g) override { - View::paint(g); + View::paint (g); - jassert(ctx); + jassert (ctx); ctx->init(); - if (props.contains("onDraw") && props["onDraw"].isMethod()) + if (props.contains ("onDraw") && props["onDraw"].isMethod()) { - std::vector jsArgs {{ctx.get()}}; - juce::var::NativeFunctionArgs nfArgs (juce::var(), jsArgs.data(), static_cast(jsArgs.size())); + std::vector jsArgs {{ ctx.get() }}; + juce::var::NativeFunctionArgs nfArgs (juce::var(), jsArgs.data(), static_cast (jsArgs.size())); - std::invoke(props["onDraw"].getNativeFunction(), nfArgs); + std::invoke (props["onDraw"].getNativeFunction(), nfArgs); } else { - DBG("You appear to have a Canvas element without an onDraw property in your js bundle."); + DBG ("You appear to have a Canvas element without an onDraw property in your js bundle."); + jassertfalse; } - g.drawImageAt(ctx->getImage(), 0, 0); + g.drawImageAt (ctx->getImage(), 0, 0); } void resized() override { View::resized(); - ctx->setSize(getWidth(), getHeight()); + ctx->setSize (getWidth(), getHeight()); } private: //============================================================================== - juce::ReferenceCountedObjectPtr ctx; + juce::ReferenceCountedObjectPtr ctx { new CanvasContext() }; + + //============================================================================== + void timerCallback() override { repaint(); } //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CanvasView) }; - } diff --git a/blueprint/core/blueprint_EcmascriptEngine.cpp b/blueprint/core/blueprint_EcmascriptEngine.cpp index 3d42887a..7803f2f3 100644 --- a/blueprint/core/blueprint_EcmascriptEngine.cpp +++ b/blueprint/core/blueprint_EcmascriptEngine.cpp @@ -1,130 +1,120 @@ -/* - ============================================================================== - - blueprint_EcmascriptEngine.cpp - Created: 24 Oct 2019 3:08:39pm - - ============================================================================== -*/ - - namespace blueprint { - namespace detail { - static void fatalErrorHandler (void* udata, const char* msg) { - (void) udata; // Ignored in this case, silence warning - throw EcmascriptEngine::FatalError(msg); + juce::ignoreUnused (udata); + throw EcmascriptEngine::FatalError (msg); } - static juce::String getContextDump(duk_context* ctx) + static juce::String getContextDump (duk_context* ctx) { - duk_push_context_dump(ctx); - auto ret = juce::String(duk_to_string(ctx, -1)); - duk_pop(ctx); + duk_push_context_dump (ctx); + const auto ret = juce::String (duk_to_string (ctx, -1)); + duk_pop (ctx); return ret; } - static void safeCall(duk_context* ctx, const int numArgs) + static void safeCall (duk_context* ctx, const int numArgs) { - if (duk_pcall(ctx, numArgs) != DUK_EXEC_SUCCESS) + if (duk_pcall (ctx, numArgs) != DUK_EXEC_SUCCESS) { - const juce::String stack = duk_safe_to_stacktrace(ctx, -1); - const juce::String msg = duk_safe_to_string(ctx, -1); + const auto stack = juce::String (duk_safe_to_stacktrace (ctx, -1)); + const auto msg = juce::String (duk_safe_to_string (ctx, -1)); - throw EcmascriptEngine::Error(msg, stack, getContextDump(ctx)); + throw EcmascriptEngine::Error (msg, stack, getContextDump (ctx)); } } - static void safeEvalString(duk_context* ctx, const juce::String& s) + static void safeEvalString (duk_context* ctx, const juce::String& s) { - if (duk_peval_string(ctx, s.toRawUTF8()) != DUK_EXEC_SUCCESS) + if (duk_peval_string (ctx, s.toRawUTF8()) != DUK_EXEC_SUCCESS) { - const juce::String stack = duk_safe_to_stacktrace(ctx, -1); - const juce::String msg = duk_safe_to_string(ctx, -1); + const auto stack = juce::String (duk_safe_to_stacktrace (ctx, -1)); + const auto msg = juce::String (duk_safe_to_string (ctx, -1)); - throw EcmascriptEngine::Error(msg, stack, getContextDump(ctx)); + throw EcmascriptEngine::Error (msg, stack, getContextDump (ctx)); } } - static void safeCompileFile(duk_context* ctx, const juce::File& file) + static void safeCompileFile (duk_context* ctx, const juce::File& file) { - auto name = file.getFileName(); - auto body = file.loadFileAsString(); + const auto name = file.getFileName(); + const auto body = file.loadFileAsString(); // Push the js filename to be compiled/evaluated - duk_push_string(ctx, name.toRawUTF8()); + duk_push_string (ctx, name.toRawUTF8()); - if (duk_pcompile_string_filename(ctx, DUK_COMPILE_EVAL, body.toRawUTF8()) != DUK_EXEC_SUCCESS) + if (duk_pcompile_string_filename (ctx, DUK_COMPILE_EVAL, body.toRawUTF8()) != DUK_EXEC_SUCCESS) { - const juce::String stack = duk_safe_to_stacktrace(ctx, -1); - const juce::String msg = duk_safe_to_string(ctx, -1); + const auto stack = juce::String (duk_safe_to_stacktrace (ctx, -1)); + const auto msg = juce::String (duk_safe_to_string (ctx, -1)); - throw EcmascriptEngine::Error(msg, stack, getContextDump(ctx)); + throw EcmascriptEngine::Error (msg, stack, getContextDump (ctx)); } } - } //============================================================================== EcmascriptEngine::EcmascriptEngine() { // Allocate a new js heap - dukContext = std::shared_ptr( - duk_create_heap (nullptr, nullptr, nullptr, nullptr, detail::fatalErrorHandler), - duk_destroy_heap - ); + dukContext = std::shared_ptr (duk_create_heap (nullptr, nullptr, nullptr, nullptr, detail::fatalErrorHandler), duk_destroy_heap); // Add console.log support auto* ctxRawPtr = dukContext.get(); - duk_console_init(ctxRawPtr, DUK_CONSOLE_FLUSH); + duk_console_init (ctxRawPtr, DUK_CONSOLE_FLUSH); // Install a pointer back to this EcmascriptEngine instance - duk_push_global_stash(ctxRawPtr); - duk_push_pointer(ctxRawPtr, (void *) this); - duk_put_prop_string(ctxRawPtr, -2, DUK_HIDDEN_SYMBOL("__EcmascriptEngineInstance__")); - duk_pop(ctxRawPtr); + duk_push_global_stash (ctxRawPtr); + duk_push_pointer (ctxRawPtr, this); + duk_put_prop_string (ctxRawPtr, -2, DUK_HIDDEN_SYMBOL ("__EcmascriptEngineInstance__")); + duk_pop (ctxRawPtr); } //============================================================================== juce::var EcmascriptEngine::evaluate (const juce::String& code) { - jassert(code.isNotEmpty()); + jassert (code.isNotEmpty()); auto* ctxRawPtr = dukContext.get(); - try { - detail::safeEvalString(ctxRawPtr, code); - } catch (Error const& err) { + try + { + detail::safeEvalString (ctxRawPtr, code); + } + catch (const Error& err) + { reset(); throw err; } - auto result = readVarFromDukStack(dukContext, -1); - duk_pop(ctxRawPtr); + auto result = readVarFromDukStack (dukContext, -1); + duk_pop (ctxRawPtr); return result; } juce::var EcmascriptEngine::evaluate (const juce::File& code) { - jassert(code.existsAsFile()); - jassert(code.loadFileAsString().isNotEmpty()); + jassert (code.existsAsFile()); + jassert (code.loadFileAsString().isNotEmpty()); auto* ctxRawPtr = dukContext.get(); - try { - detail::safeCompileFile(ctxRawPtr, code); - detail::safeCall(ctxRawPtr, 0); - } catch (Error const& err) { + try + { + detail::safeCompileFile (ctxRawPtr, code); + detail::safeCall (ctxRawPtr, 0); + } + catch (const Error& err) + { reset(); throw err; } // Collect the return value - auto result = readVarFromDukStack(dukContext, -1); - duk_pop(ctxRawPtr); + auto result = readVarFromDukStack (dukContext, -1); + duk_pop (ctxRawPtr); return result; } @@ -132,12 +122,12 @@ namespace blueprint //============================================================================== void EcmascriptEngine::registerNativeMethod (const juce::String& name, juce::var::NativeFunction fn) { - registerNativeProperty(name, juce::var(fn)); + registerNativeProperty (name, fn); } void EcmascriptEngine::registerNativeMethod (const juce::String& target, const juce::String& name, juce::var::NativeFunction fn) { - registerNativeProperty(target, name, juce::var(fn)); + registerNativeProperty (target, name, fn); } //============================================================================== @@ -145,27 +135,30 @@ namespace blueprint { auto* ctxRawPtr = dukContext.get(); - duk_push_global_object(ctxRawPtr); - pushVarToDukStack(dukContext, value, true); - duk_put_prop_string(ctxRawPtr, -2, name.toRawUTF8()); - duk_pop(ctxRawPtr); + duk_push_global_object (ctxRawPtr); + pushVarToDukStack (dukContext, value, true); + duk_put_prop_string (ctxRawPtr, -2, name.toRawUTF8()); + duk_pop (ctxRawPtr); } void EcmascriptEngine::registerNativeProperty (const juce::String& target, const juce::String& name, const juce::var& value) { auto* ctxRawPtr = dukContext.get(); - try { - detail::safeEvalString(ctxRawPtr, target); - } catch (Error const& err) { + try + { + detail::safeEvalString (ctxRawPtr, target); + } + catch (const Error& err) + { reset(); throw err; } // Then assign the property - pushVarToDukStack(dukContext, value, true); - duk_put_prop_string(ctxRawPtr, -2, name.toRawUTF8()); - duk_pop(ctxRawPtr); + pushVarToDukStack (dukContext, value, true); + duk_put_prop_string (ctxRawPtr, -2, name.toRawUTF8()); + duk_pop (ctxRawPtr); } //============================================================================== @@ -173,30 +166,30 @@ namespace blueprint { auto* ctxRawPtr = dukContext.get(); - try { - detail::safeEvalString(ctxRawPtr, name); + try + { + detail::safeEvalString (ctxRawPtr, name); - if (!duk_is_function(ctxRawPtr, -1)) { - throw Error("Invocation failed, target is not a function."); - } + if (! duk_is_function (ctxRawPtr, -1)) + throw Error ("Invocation failed, target is not a function."); - // Push the args to the duktape stack - const auto nargs = static_cast(vargs.size()); - duk_require_stack_top(ctxRawPtr, nargs); + const auto nargs = static_cast (vargs.size()); + duk_require_stack_top (ctxRawPtr, nargs); for (auto& p : vargs) - pushVarToDukStack(dukContext, p); + pushVarToDukStack (dukContext, p); - // Invocation - detail::safeCall(ctxRawPtr, nargs); - } catch (Error const& err) { + detail::safeCall (ctxRawPtr, nargs); + } + catch (const Error& err) + { reset(); throw err; } // Collect the return value - auto result = readVarFromDukStack(dukContext, -1); - duk_pop(ctxRawPtr); + auto result = readVarFromDukStack (dukContext, -1); + duk_pop (ctxRawPtr); return result; } @@ -207,8 +200,8 @@ namespace blueprint // Clear out the stack so we can re-register native functions // after we clear out the lambda release pool etc. - while (duk_get_top(ctxRawPtr)) - duk_remove(ctxRawPtr, duk_get_top_index(ctxRawPtr)); + while (duk_get_top (ctxRawPtr)) + duk_remove (ctxRawPtr, duk_get_top_index (ctxRawPtr)); // Clear the LambdaHelper release pool as duktape does not call object // finalizers in the event of an evaluation error or duk_pcall failure. @@ -223,70 +216,67 @@ namespace blueprint duk_trans_socket_init(); duk_trans_socket_waitconn(); - duk_debugger_attach(ctxRawPtr, + duk_debugger_attach (ctxRawPtr, duk_trans_socket_read_cb, duk_trans_socket_write_cb, duk_trans_socket_peek_cb, duk_trans_socket_read_flush_cb, duk_trans_socket_write_flush_cb, nullptr, - [](duk_context*, void* data) + [] (duk_context*, void* data) { duk_trans_socket_finish(); - - auto engine = static_cast(data); - engine->stopTimer(); + static_cast (data)->stopTimer(); }, this); - // Start timer for duk_debugger_cooperate calls - startTimer(200); + startTimer (200); } void EcmascriptEngine::debuggerDetach() { - duk_debugger_detach(dukContext.get()); + duk_debugger_detach (dukContext.get()); } //============================================================================== void EcmascriptEngine::timerCallback() { - duk_debugger_cooperate(dukContext.get()); + duk_debugger_cooperate (dukContext.get()); } //============================================================================== - EcmascriptEngine::LambdaHelper::LambdaHelper(juce::var::NativeFunction fn, uint32_t _id) - : callback(std::move(fn)), id(_id) {} + EcmascriptEngine::LambdaHelper::LambdaHelper (juce::var::NativeFunction fn, uint32_t _id) + : callback (std::move (fn)), id (_id) {} duk_ret_t EcmascriptEngine::LambdaHelper::invokeFromDukContext (duk_context* ctx) { // First we have to retrieve the actual function pointer and our engine pointer // See: https://duktape.org/guide.html#hidden-symbol-properties - duk_push_current_function(ctx); - duk_get_prop_string(ctx, -1, DUK_HIDDEN_SYMBOL("LambdaHelperPtr")); + duk_push_current_function (ctx); + duk_get_prop_string (ctx, -1, DUK_HIDDEN_SYMBOL ("LambdaHelperPtr")); - LambdaHelper* helper = static_cast(duk_get_pointer(ctx, -1)); - duk_pop(ctx); + auto* helper = static_cast (duk_get_pointer (ctx, -1)); + duk_pop (ctx); // Then the engine... - duk_get_prop_string(ctx, -1, DUK_HIDDEN_SYMBOL("EnginePtr")); - EcmascriptEngine* engine = static_cast(duk_get_pointer(ctx, -1)); + duk_get_prop_string (ctx, -1, DUK_HIDDEN_SYMBOL ("EnginePtr")); + auto* engine = static_cast (duk_get_pointer (ctx, -1)); // Pop back both the pointer and the "current function" - duk_pop_2(ctx); + duk_pop_2 (ctx); // Now we can collect our args std::vector args; - int nargs = duk_get_top(ctx); + auto nargs = duk_get_top (ctx); for (int i = 0; i < nargs; ++i) - args.push_back(engine->readVarFromDukStack(engine->dukContext, i)); + args.push_back (engine->readVarFromDukStack (engine->dukContext, i)); // Now we can invoke the user method with its arguments - auto result = std::invoke(helper->callback, juce::var::NativeFunctionArgs( + auto result = std::invoke (helper->callback, juce::var::NativeFunctionArgs ( juce::var(), args.data(), - static_cast(args.size()) + static_cast (args.size()) )); // For an undefined result, return 0 to notify the duktape interpreter @@ -294,38 +284,38 @@ namespace blueprint return 0; // Otherwise, push the result to the stack and tell duktape - engine->pushVarToDukStack(engine->dukContext, result); + engine->pushVarToDukStack (engine->dukContext, result); return 1; } duk_ret_t EcmascriptEngine::LambdaHelper::invokeFromDukContextLightFunc (duk_context* ctx) { // Retrieve the engine pointer - duk_push_global_stash(ctx); - duk_get_prop_string(ctx, -1, DUK_HIDDEN_SYMBOL("__EcmascriptEngineInstance__")); + duk_push_global_stash (ctx); + duk_get_prop_string (ctx, -1, DUK_HIDDEN_SYMBOL ("__EcmascriptEngineInstance__")); - auto* engine = static_cast(duk_get_pointer(ctx, -1)); - duk_pop_2(ctx); + auto* engine = static_cast (duk_get_pointer (ctx, -1)); + duk_pop_2 (ctx); // Retrieve the lambda helper - duk_push_current_function(ctx); - const auto magic = duk_get_magic(ctx, -1); + duk_push_current_function (ctx); + const auto magic = duk_get_magic (ctx, -1); auto& helper = engine->temporaryReleasePool[static_cast (magic + 128)]; - duk_pop(ctx); + duk_pop (ctx); // Now we can collect our args - const auto nargs = duk_get_top(ctx); + const auto nargs = duk_get_top (ctx); std::vector args; - args.reserve(static_cast (nargs)); + args.reserve (static_cast (nargs)); for (int i = 0; i < nargs; ++i) - args.push_back(engine->readVarFromDukStack(engine->dukContext, i)); + args.push_back (engine->readVarFromDukStack (engine->dukContext, i)); // Now we can invoke the user method with its arguments - const auto result = std::invoke(helper->callback, juce::var::NativeFunctionArgs( + const auto result = std::invoke (helper->callback, juce::var::NativeFunctionArgs ( juce::var(), args.data(), - static_cast(args.size()) + static_cast (args.size()) )); // For an undefined result, return 0 to notify the duktape interpreter @@ -333,7 +323,7 @@ namespace blueprint return 0; // Otherwise, push the result to the stack and tell duktape - engine->pushVarToDukStack(engine->dukContext, result); + engine->pushVarToDukStack (engine->dukContext, result); return 1; } @@ -343,97 +333,95 @@ namespace blueprint // See: https://duktape.org/guide.html#hidden-symbol-properties // And: https://duktape.org/api.html#duk_set_finalizer // In this case our function is at index 0. - duk_require_function(ctx, 0); - duk_get_prop_string(ctx, 0, DUK_HIDDEN_SYMBOL("LambdaHelperPtr")); + duk_require_function (ctx, 0); + duk_get_prop_string (ctx, 0, DUK_HIDDEN_SYMBOL ("LambdaHelperPtr")); - LambdaHelper* helper = static_cast(duk_get_pointer(ctx, -1)); - duk_pop(ctx); + auto* helper = static_cast (duk_get_pointer (ctx, -1)); + duk_pop (ctx); // Then the engine... - duk_get_prop_string(ctx, 0, DUK_HIDDEN_SYMBOL("EnginePtr")); - EcmascriptEngine* engine = static_cast(duk_get_pointer(ctx, -1)); + duk_get_prop_string (ctx, 0, DUK_HIDDEN_SYMBOL ("EnginePtr")); + auto* engine = static_cast (duk_get_pointer (ctx, -1)); // Pop back both the pointer and the "current function" - duk_pop_2(ctx); + duk_pop_2 (ctx); // Clean up our lambda helper - engine->removeLambdaHelper(helper); + engine->removeLambdaHelper (helper); return 0; } //============================================================================== void EcmascriptEngine::removeLambdaHelper (LambdaHelper* helper) { - persistentReleasePool.erase(helper->id); + persistentReleasePool.erase (helper->id); } void EcmascriptEngine::pushVarToDukStack (std::shared_ptr ctx, const juce::var& v, bool persistNativeFunctions) { auto* ctxRawPtr = dukContext.get(); - if (v.isVoid() || v.isUndefined()) - return duk_push_undefined(ctxRawPtr); - if (v.isBool()) - return duk_push_boolean(ctxRawPtr, (bool) v); - if (v.isInt() || v.isInt64()) - return duk_push_int(ctxRawPtr, (int) v); - if (v.isDouble()) - return duk_push_number(ctxRawPtr, (double) v); - if (v.isString()) - return (void) duk_push_string(ctxRawPtr, v.toString().toRawUTF8()); + if (v.isVoid() || v.isUndefined()) { duk_push_undefined (ctxRawPtr); return; } + if (v.isBool()) { duk_push_boolean (ctxRawPtr, (bool) v); return; } + if (v.isInt() || v.isInt64()) { duk_push_int (ctxRawPtr, (int) v); return; } + if (v.isDouble()) { duk_push_number (ctxRawPtr, (double) v); return; } + if (v.isString()) { duk_push_string (ctxRawPtr, v.toString().toRawUTF8()); return; } + if (v.isArray()) { - duk_idx_t arr_idx = duk_push_array(ctxRawPtr); + const auto arr_idx = duk_push_array (ctxRawPtr); duk_uarridx_t i = 0; - for (auto& e : *(v.getArray())) + for (auto& e : * (v.getArray())) { - pushVarToDukStack(ctx, e, persistNativeFunctions); - duk_put_prop_index(ctxRawPtr, arr_idx, i++); + pushVarToDukStack (ctx, e, persistNativeFunctions); + duk_put_prop_index (ctxRawPtr, arr_idx, i++); } return; } + if (v.isObject()) { if (auto* o = v.getDynamicObject()) { - duk_idx_t obj_idx = duk_push_object(ctxRawPtr); + const auto obj_idx = duk_push_object (ctxRawPtr); for (auto& e : o->getProperties()) { - pushVarToDukStack(ctx, e.value, persistNativeFunctions); - duk_put_prop_string(ctxRawPtr, obj_idx, e.name.toString().toRawUTF8()); + pushVarToDukStack (ctx, e.value, persistNativeFunctions); + duk_put_prop_string (ctxRawPtr, obj_idx, e.name.toString().toRawUTF8()); } } return; } + if (v.isMethod()) { if (persistNativeFunctions) { // For persisted native functions, we provide a helper layer storing and retrieving the // stash, and marshalling between the Duktape C interface and the NativeFunction interface - duk_push_c_function(ctxRawPtr, LambdaHelper::invokeFromDukContext, DUK_VARARGS); + duk_push_c_function (ctxRawPtr, LambdaHelper::invokeFromDukContext, DUK_VARARGS); // Now we assign the pointers as properties of the wrapper function - auto helper = std::make_unique(v.getNativeFunction(), nextHelperId++); - duk_push_pointer(ctxRawPtr, (void *) helper.get()); - duk_put_prop_string(ctxRawPtr, -2, DUK_HIDDEN_SYMBOL("LambdaHelperPtr")); - duk_push_pointer(ctxRawPtr, (void *) this); - duk_put_prop_string(ctxRawPtr, -2, DUK_HIDDEN_SYMBOL("EnginePtr")); + auto helper = std::make_unique (v.getNativeFunction(), nextHelperId++); + duk_push_pointer (ctxRawPtr, (void *) helper.get()); + duk_put_prop_string (ctxRawPtr, -2, DUK_HIDDEN_SYMBOL ("LambdaHelperPtr")); + duk_push_pointer (ctxRawPtr, (void *) this); + duk_put_prop_string (ctxRawPtr, -2, DUK_HIDDEN_SYMBOL ("EnginePtr")); // Now we prepare the finalizer - duk_push_c_function(ctxRawPtr, LambdaHelper::callbackFinalizer, 1); - duk_push_pointer(ctxRawPtr, (void *) helper.get()); - duk_put_prop_string(ctxRawPtr, -2, DUK_HIDDEN_SYMBOL("LambdaHelperPtr")); - duk_push_pointer(ctxRawPtr, (void *) this); - duk_put_prop_string(ctxRawPtr, -2, DUK_HIDDEN_SYMBOL("EnginePtr")); - duk_set_finalizer(ctxRawPtr, -2); + duk_push_c_function (ctxRawPtr, LambdaHelper::callbackFinalizer, 1); + duk_push_pointer (ctxRawPtr, (void *) helper.get()); + duk_put_prop_string (ctxRawPtr, -2, DUK_HIDDEN_SYMBOL ("LambdaHelperPtr")); + duk_push_pointer (ctxRawPtr, (void *) this); + duk_put_prop_string (ctxRawPtr, -2, DUK_HIDDEN_SYMBOL ("EnginePtr")); + duk_set_finalizer (ctxRawPtr, -2); // And hang on to it! - persistentReleasePool[helper->id] = std::move(helper); + persistentReleasePool[helper->id] = std::move (helper); } else { @@ -444,20 +432,20 @@ namespace blueprint // to wrap around and clobber previous temporaries, effectively garbage collecting on // demand. The maximum number of temporary values before wrapping is 255, as dictated // by that we use the lightfunc's magic number to identify our native callback. - auto helper = std::make_unique(v.getNativeFunction(), nextHelperId++); - auto magic = nextMagicInt++; + auto helper = std::make_unique (v.getNativeFunction(), nextHelperId++); + const auto magic = nextMagicInt++; - duk_push_c_lightfunc(ctxRawPtr, LambdaHelper::invokeFromDukContextLightFunc, DUK_VARARGS, 15, magic); - temporaryReleasePool[static_cast (magic + 128)] = std::move(helper); + duk_push_c_lightfunc (ctxRawPtr, LambdaHelper::invokeFromDukContextLightFunc, DUK_VARARGS, 15, magic); + temporaryReleasePool[static_cast (magic + 128)] = std::move (helper); if (nextMagicInt >= 127) nextMagicInt = -128; } + return; } - // If you hit this, you tried to push an unsupported var type to the duktape - // stack. + // If you hit this, you tried to push an unsupported var type to the duktape stack. jassertfalse; } @@ -466,55 +454,52 @@ namespace blueprint auto* ctxRawPtr = dukContext.get(); juce::var value; - switch (duk_get_type(ctxRawPtr, idx)) + switch (duk_get_type (ctxRawPtr, idx)) { case DUK_TYPE_NULL: // It looks like juce::var doesn't have an explicit null value, // so we're just using the default empty constructor value. break; - case DUK_TYPE_UNDEFINED: - value = juce::var::undefined(); - break; - case DUK_TYPE_BOOLEAN: - value = (bool) duk_get_boolean(ctxRawPtr, idx); - break; - case DUK_TYPE_NUMBER: - value = duk_get_number(ctxRawPtr, idx); - break; - case DUK_TYPE_STRING: - value = juce::String(juce::CharPointer_UTF8(duk_get_string(ctxRawPtr, idx))); - break; + + case DUK_TYPE_UNDEFINED: value = juce::var::undefined(); break; + case DUK_TYPE_BOOLEAN: value = (bool) duk_get_boolean (ctxRawPtr, idx); break; + case DUK_TYPE_NUMBER: value = duk_get_number (ctxRawPtr, idx); break; + case DUK_TYPE_STRING: value = juce::String (juce::CharPointer_UTF8 (duk_get_string (ctxRawPtr, idx))); break; + case DUK_TYPE_OBJECT: case DUK_TYPE_LIGHTFUNC: { - if (duk_is_array(ctxRawPtr, idx)) + if (duk_is_array (ctxRawPtr, idx)) { - duk_size_t len = duk_get_length(ctxRawPtr, idx); + const auto len = duk_get_length (ctxRawPtr, idx); juce::Array els; for (duk_size_t i = 0; i < len; ++i) { - duk_get_prop_index(ctxRawPtr, idx, static_cast(i)); - els.add(readVarFromDukStack(ctx, -1)); - duk_pop(ctxRawPtr); + duk_get_prop_index (ctxRawPtr, idx, static_cast (i)); + els.add (readVarFromDukStack (ctx, -1)); + duk_pop (ctxRawPtr); } value = els; break; } - if (duk_is_function(ctxRawPtr, idx) || duk_is_lightfunc(ctxRawPtr, idx)) + if (duk_is_function (ctxRawPtr, idx) || duk_is_lightfunc (ctxRawPtr, idx)) { - struct CallbackHelper { - CallbackHelper(std::weak_ptr _weakContext) - : weakContext(_weakContext) - , funcId(juce::String("__blueprintCallback__") + juce::Uuid().toString()) {} - - ~CallbackHelper() { - if (auto spt = weakContext.lock()) { - duk_push_global_stash(spt.get()); - duk_del_prop_string(spt.get(), -1, funcId.toRawUTF8()); - duk_pop(spt.get()); + struct CallbackHelper + { + CallbackHelper (std::weak_ptr _weakContext) + : weakContext (_weakContext) + , funcId (juce::String ("__blueprintCallback__") + juce::Uuid().toString()) {} + + ~CallbackHelper() + { + if (auto spt = weakContext.lock()) + { + duk_push_global_stash (spt.get()); + duk_del_prop_string (spt.get(), -1, funcId.toRawUTF8()); + duk_pop (spt.get()); } } @@ -524,17 +509,19 @@ namespace blueprint // With a function, we first push the function reference to // the Duktape global stash so we can read it later. - auto helper = std::make_shared(ctx); + auto helper = std::make_shared (ctx); - duk_push_global_stash(ctxRawPtr); - duk_dup(ctxRawPtr, idx); - duk_put_prop_string(ctxRawPtr, -2, helper->funcId.toRawUTF8()); - duk_pop(ctxRawPtr); + duk_push_global_stash (ctxRawPtr); + duk_dup (ctxRawPtr, idx); + duk_put_prop_string (ctxRawPtr, -2, helper->funcId.toRawUTF8()); + duk_pop (ctxRawPtr); // Next we create a var::NativeFunction that captures the function // id and knows how to invoke it - value = juce::var::NativeFunction { - [this, weakContext = std::weak_ptr(ctx), helper](const juce::var::NativeFunctionArgs& args) -> juce::var { + value = juce::var::NativeFunction + { + [this, weakContext = std::weak_ptr (ctx), helper] (const juce::var::NativeFunctionArgs& args) -> juce::var + { auto sharedContext = weakContext.lock(); // If our context disappeared, we return early @@ -545,28 +532,31 @@ namespace blueprint // Here when we're being invoked we retrieve the callback function from // the global stash and invoke it with the provided args. - duk_push_global_stash(rawPtr); - duk_get_prop_string(rawPtr, -1, helper->funcId.toRawUTF8()); + duk_push_global_stash (rawPtr); + duk_get_prop_string (rawPtr, -1, helper->funcId.toRawUTF8()); - if (!(duk_is_lightfunc(rawPtr, -1) || duk_is_function(rawPtr, -1))) - throw Error("Global callback not found.", "", detail::getContextDump(rawPtr)); + if (! (duk_is_lightfunc (rawPtr, -1) || duk_is_function (rawPtr, -1))) + throw Error ("Global callback not found.", "", detail::getContextDump (rawPtr)); // Push the args to the duktape stack - duk_require_stack_top(rawPtr, args.numArguments); + duk_require_stack_top (rawPtr, args.numArguments); for (int i = 0; i < args.numArguments; ++i) - pushVarToDukStack(sharedContext, args.arguments[i]); + pushVarToDukStack (sharedContext, args.arguments[i]); // Invocation - try { - detail::safeCall(rawPtr, args.numArguments); - } catch (Error const& err) { + try + { + detail::safeCall (rawPtr, args.numArguments); + } + catch (const Error& err) + { reset(); throw err; } // Clean the result and the stash off the top of the stack - duk_pop_2(rawPtr); + duk_pop_2 (rawPtr); // Callbacks don't really need return args? return juce::var(); @@ -581,9 +571,9 @@ namespace blueprint // Generic object enumeration; `duk_enum` pushes an enumerator // object to the top of the stack - duk_enum(ctxRawPtr, idx, DUK_ENUM_OWN_PROPERTIES_ONLY); + duk_enum (ctxRawPtr, idx, DUK_ENUM_OWN_PROPERTIES_ONLY); - while (duk_next(ctxRawPtr, -1, 1)) + while (duk_next (ctxRawPtr, -1, 1)) { // For each found key/value pair, `duk_enum` pushes the // values to the top of the stack. So here the stack top @@ -594,18 +584,19 @@ namespace blueprint // conversion from number to string. Thus here, while constructing // the DynamicObject, we take the `toString()` value for the key // always. - obj->setProperty(duk_to_string(ctxRawPtr, -2), readVarFromDukStack(ctx, -1)); + obj->setProperty (duk_to_string (ctxRawPtr, -2), readVarFromDukStack (ctx, -1)); // Clear the key/value pair from the stack - duk_pop_2(ctxRawPtr); + duk_pop_2 (ctxRawPtr); } // Pop the enumerator from the stack - duk_pop(ctxRawPtr); + duk_pop (ctxRawPtr); - value = juce::var(obj); + value = juce::var (obj); break; } + case DUK_TYPE_NONE: default: jassertfalse; diff --git a/blueprint/core/blueprint_EcmascriptEngine.h b/blueprint/core/blueprint_EcmascriptEngine.h index c0497245..a3a285ce 100644 --- a/blueprint/core/blueprint_EcmascriptEngine.h +++ b/blueprint/core/blueprint_EcmascriptEngine.h @@ -1,50 +1,34 @@ -/* - ============================================================================== - - blueprint_EcmascriptEngine.h - Created: 24 Oct 2019 3:08:39pm - - ============================================================================== -*/ - #pragma once -#include - - namespace blueprint { - - //============================================================================== /** The EcmascriptEngine provides a flexible ECMAScript 5 compliant JavaScript engine - * with an interface implemented by Duktape, but which may be implemented by one of - * many embedded engines in the future. - */ - class EcmascriptEngine : private juce::Timer + with an interface implemented by Duktape, but which may be implemented by one of + many embedded engines in the future. + */ + class EcmascriptEngine final : private juce::Timer { public: //============================================================================== EcmascriptEngine(); - ~EcmascriptEngine() override = default; //============================================================================== - /** A helper struct for representing an error that occured within the Duktape - * engine. - * - * We provide the JavaScript stack trace in the `stack` member. - */ - struct Error : public std::runtime_error { + /** A helper struct for representing an error that occured within the Duktape engine. + + We provide the JavaScript stack trace in the `stack` member. + */ + struct Error final : public std::runtime_error + { Error(const juce::String& msg) - : std::runtime_error(msg.toStdString()) {} + : std::runtime_error (msg.toStdString()) {} Error(const juce::String& msg, const juce::String& _stack) - : std::runtime_error(msg.toStdString()), stack(_stack) {} + : std::runtime_error (msg.toStdString()), stack (_stack) {} Error(const juce::String& msg, const juce::String& _stack, const juce::String& _context) - : std::runtime_error(msg.toStdString()), stack(_stack), context(_context) {} + : std::runtime_error (msg.toStdString()), stack (_stack), context (_context) {} - juce::String stack; - juce::String context; + juce::String stack, context; }; /** A helper struct for representing an error that occured within the Duktape @@ -53,18 +37,25 @@ namespace blueprint * In the event this error is thrown, the engine is to be considered * unrecoverable, and it is up to the user to address how to proceed. */ - struct FatalError : public std::runtime_error { - FatalError(const juce::String& msg) - : std::runtime_error(msg.toStdString()) {} + struct FatalError final : public std::runtime_error + { + FatalError (const juce::String& msg) + : std::runtime_error (msg.toStdString()) {} }; //============================================================================== /** Evaluates the given code in the interpreter, returning the result. - * - * @returns juce::var result of the evaluation - * @throws EcmascriptEngine::Error in the event of an evaluation error - */ + + @returns juce::var result of the evaluation + @throws EcmascriptEngine::Error in the event of an evaluation error + */ juce::var evaluate (const juce::String& code); + + /** Evaluates the given code in the interpreter, returning the result. + + @returns juce::var result of the evaluation + @throws EcmascriptEngine::Error in the event of an evaluation error + */ juce::var evaluate (const juce::File& code); //============================================================================== @@ -72,22 +63,22 @@ namespace blueprint void registerNativeMethod (const juce::String&, juce::var::NativeFunction fn); /** Registers a native method by the given name on the target object. - * - * The provided target name may be any expression that leaves the target - * object on the top of the stack. For example: - * - * ``` - * registerNativeMethod("global", "hello", []() { - * std::cout << "World!" << std::endl; - * return juce::var(); - * }); - * ``` - * - * is equivalent to calling the previous `registerNativeMethod` overload - * with just the "hello" and function arguments. - * - * @throws EcmascriptEngine::Error in the event of an evaluation error - */ + + The provided target name may be any expression that leaves the target + object on the top of the stack. For example: + + ``` + registerNativeMethod("global", "hello", []() { + std::cout << "World!" << std::endl; + return juce::var(); + }); + ``` + + is equivalent to calling the previous `registerNativeMethod` overload + with just the "hello" and function arguments. + + @throws EcmascriptEngine::Error in the event of an evaluation error + */ void registerNativeMethod (const juce::String&, const juce::String&, juce::var::NativeFunction fn); //============================================================================== @@ -95,48 +86,53 @@ namespace blueprint void registerNativeProperty (const juce::String&, const juce::var&); /** Registers a native value by the given name on the target object. - * - * The provided target name may be any expression that leaves the target - * object on the top of the stack. For example, the following three - * examples have equivalent behavior: - * - * ``` - * registerNativeProperty("global", "hello", "world"); - * registerNativeProperty("hello", "world"); - * evaluate("global.hello = \"world\";"); - * ``` - * - * @throws EcmascriptEngine::Error in the event of an evaluation error - */ + + The provided target name may be any expression that leaves the target + object on the top of the stack. For example, the following three + examples have equivalent behaviour: + + ``` + registerNativeProperty("global", "hello", "world"); + registerNativeProperty("hello", "world"); + evaluate("global.hello = \"world\";"); + ``` + + @throws EcmascriptEngine::Error in the event of an evaluation error + */ void registerNativeProperty (const juce::String&, const juce::String&, const juce::var&); //============================================================================== /** Invokes a method, applying the given args, inside the interpreter. - * - * This is similar in function to `Function.prototype.apply()`. The provided - * method name may be any expression that leaves the target function on the - * top of the stack. For example: - * - * `invoke("BlueprintNative.dispatchViewEvent", args);` - * - * @returns juce::var result of the invocation - * @throws EcmascriptEngine::Error in the event of an error - */ + + This is similar in function to `Function.prototype.apply()`. The provided + method name may be any expression that leaves the target function on the + top of the stack. For example: + + `invoke("BlueprintNative.dispatchViewEvent", args);` + + @returns juce::var result of the invocation + @throws EcmascriptEngine::Error in the event of an error + */ juce::var invoke (const juce::String& name, const std::vector& vargs); /** Invokes a method with the given args inside the interpreter. - * - * This is similar in function to `Function.prototype.call()`. The provided - * method name may be any expression that leaves the target function on the - * top of the stack. For example: - * - * `invoke("BlueprintNative.dispatchViewEvent", "click");` - * - * @returns juce::var result of the invocation - * @throws EcmascriptEngine::Error in the event of an error - */ + + This is similar in function to `Function.prototype.call()`. The provided + method name may be any expression that leaves the target function on the + top of the stack. For example: + + `invoke("BlueprintNative.dispatchViewEvent", "click");` + + @returns juce::var result of the invocation + @throws EcmascriptEngine::Error in the event of an error + */ template - juce::var invoke (const juce::String& name, T... args); + juce::var invoke (const juce::String& name, T... args) + { + // Pack the args and push them to the alternate `invoke` implementation + std::vector vargs { args... }; + return invoke (name, vargs); + } //============================================================================== /** Resets the internal Duktape context, clearing the value stack and destroying native callbacks. */ @@ -154,7 +150,8 @@ namespace blueprint void timerCallback() override; //============================================================================== - struct LambdaHelper { + struct LambdaHelper + { LambdaHelper(juce::var::NativeFunction fn, uint32_t _id); static duk_ret_t invokeFromDukContext(duk_context* ctx); @@ -171,9 +168,10 @@ namespace blueprint std::unordered_map> persistentReleasePool; std::array, 255> temporaryReleasePool; - // The duk_context must be listed after the release pools so that it is destructed - // before the pools. That way, as the duk_context is being freed and finalizing all - // of our lambda helpers, our pools still exist for those code paths. + /** The duk_context must be listed after the release pools so that it is destructed + before the pools. That way, as the duk_context is being freed and finalizing all + of our lambda helpers, our pools still exist for those code paths. + */ std::shared_ptr dukContext; //============================================================================== @@ -189,14 +187,4 @@ namespace blueprint //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (EcmascriptEngine) }; - - //============================================================================== - template - juce::var EcmascriptEngine::invoke (const juce::String& name, T... args) - { - // Pack the args and push them to the alternate `invoke` implementation - std::vector vargs { args... }; - return invoke(name, vargs); - } - } diff --git a/blueprint/core/blueprint_FileWatcher.h b/blueprint/core/blueprint_FileWatcher.h index 464d6518..ebba2aa9 100644 --- a/blueprint/core/blueprint_FileWatcher.h +++ b/blueprint/core/blueprint_FileWatcher.h @@ -1,57 +1,67 @@ -/* - ============================================================================== - - blueprint_FileWatcher.h - Created: 10 Oct 2020 3:08:39pm - - ============================================================================== -*/ - #pragma once - namespace blueprint { - - //============================================================================== /** Helper class which watches files for changes and triggers a user supplied - * callback in thte event of a file change. - */ - class FileWatcher : private juce::Timer + callback in thte event of a file change. + */ + class FileWatcher final : private juce::Timer { public: - using FileChangedCallback = std::function; + //============================================================================== + /** */ + using FileChangedCallback = std::function; - explicit FileWatcher (FileChangedCallback && callback) + //============================================================================== + /** */ + explicit FileWatcher (FileChangedCallback&& callback) : onFileChanged(std::move(callback)) {} - void start() { startTimer(50); } + //============================================================================== + /** */ + void start() { startTimer (50); } + + /** */ void stop() { stopTimer(); } + /** */ void watch (const juce::File& f) { JUCE_ASSERT_MESSAGE_THREAD - jassert(f.existsAsFile()); + jassert (f.existsAsFile()); // If we're already watching that bundle, nothing to do - if (watchedFiles.count(f) > 0) + if (watchedFiles.count (f) > 0) return; - watchedFiles.emplace(f, f.getLastModificationTime()); + watchedFiles.emplace (f, f.getLastModificationTime()); } - std::vector getWatchedFiles() + /** */ + juce::Array getWatchedFiles() const { - std::vector ret; + juce::Array ret; + ret.resize (static_cast (watchedFiles.size())); for (const auto& pair : watchedFiles) - ret.push_back(pair.first); + ret.addIfNotAlreadyThere (pair.first); return ret; } private: + //============================================================================== + /** It's important here that we're using a std::map because we want the + insertion order retained. In the event of a file change, we want to + re-evaluate all bundles within the cleaned engine in the same order + we started with. + */ + std::map watchedFiles; + + FileChangedCallback onFileChanged; + + //============================================================================== void timerCallback() override { bool shouldFireChangeEvent = false; @@ -60,12 +70,11 @@ namespace blueprint // may delete the target file just before replacing it with their // new compiled result, and if we happen to poll in between we'll // get a messed up result. - for (auto it = watchedFiles.begin(); it != watchedFiles.end();) + for (auto it = watchedFiles.begin(); it != watchedFiles.end(); ++it) { auto& f = (*it).first; - bool const fileExists = f.existsAsFile() && (f.getSize() > 0); - if (fileExists) + if (f.existsAsFile() && f.getSize() > 0) { const auto lmt = f.getLastModificationTime(); @@ -75,25 +84,15 @@ namespace blueprint watchedFiles[f] = lmt; } } - - it++; } // Now we fire once if any bundle has changed, which coalesces changes - // into a single event in response to which we should re-evaluate - // all watched files. + // into a single event in response to which we should re-evaluate all watched files. if (shouldFireChangeEvent) - { onFileChanged(); - } } - // It's important here that we're using a std::map because we want the - // insertion order retained. In the event of a file change, we want to - // re-evaluate all bundles within the cleaned engine in the same order - // we started with. - std::map watchedFiles; - FileChangedCallback onFileChanged; + //============================================================================== + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (FileWatcher) }; - } diff --git a/blueprint/core/blueprint_GenericEditor.cpp b/blueprint/core/blueprint_GenericEditor.cpp index 926c2991..e8cdcda3 100644 --- a/blueprint/core/blueprint_GenericEditor.cpp +++ b/blueprint/core/blueprint_GenericEditor.cpp @@ -1,25 +1,10 @@ -/* - ============================================================================== - - blueprint_GenericEditor.cpp - Created: 3 Nov 2019 4:47:39pm - - ============================================================================== -*/ - -#pragma once - - namespace blueprint { - - //============================================================================== - BlueprintGenericEditor::BlueprintGenericEditor (juce::AudioProcessor& proc, const juce::File& bundle, juce::AudioProcessorValueTreeState* vts) - : juce::AudioProcessorEditor (proc) - , engine(std::make_shared()) - , appRoot(engine) - , harness(appRoot) - , valueTreeState(vts) + BlueprintGenericEditor::BlueprintGenericEditor (juce::AudioProcessor& proc, const juce::File& bundle, juce::AudioProcessorValueTreeState* vts) : + juce::AudioProcessorEditor (proc), + appRoot (engine), + harness (appRoot), + valueTreeState (vts) { // Sanity check jassert (bundle.existsAsFile()); @@ -27,17 +12,15 @@ namespace blueprint // Now we set up parameter listeners and register their current values. auto& params = processor.getParameters(); - paramReadouts.resize(params.size()); + paramReadouts.resize (params.size()); - for (auto& p : params) + for (auto* p : params) { - const auto index = p->getParameterIndex(); - const auto value = p->getValue(); + auto& pr = paramReadouts.getReference (p->getParameterIndex()); + pr.value = p->getValue(); + pr.dirty = true; - paramReadouts[index].value = value; - paramReadouts[index].dirty = true; - - p->addListener(this); + p->addListener (this); } // Set up the hot reloading callbacks @@ -45,25 +28,23 @@ namespace blueprint harness.onAfterAll = [this]() { afterBundleEvaluated(); }; // Set up the file watching and kick off the initial render - harness.watch(bundleFile); + harness.watch (bundleFile); harness.start(); // Add ReactApplicationRoot as child component - addAndMakeVisible(appRoot); + addAndMakeVisible (appRoot); // Set an arbitrary size, should be overridden from outside the constructor - setSize(400, 200); + setSize (400, 200); // Lastly, start our timer for reporting meter and parameter values - startTimerHz(30); + startTimerHz (30); } BlueprintGenericEditor::~BlueprintGenericEditor() { for (auto& p : processor.getParameters()) - { - p->removeListener(this); - } + p->removeListener (this); } //============================================================================== @@ -73,46 +54,53 @@ namespace blueprint // or non-deterministic operations, we simply set some atomic values in our // paramReadouts list. The timer running on the PluginEditor will check to // propagate the updated values to the javascript interface. - paramReadouts[parameterIndex].value = newValue; - paramReadouts[parameterIndex].dirty = true; + auto& v = paramReadouts.getReference (parameterIndex); + v.value = newValue; + v.dirty = true; } void BlueprintGenericEditor::parameterGestureChanged (int parameterIndex, bool gestureIsStarting) { // Our generic editor doesn't do anything with this information yet, but // we'll happily take a pull request if you need something here :). + juce::ignoreUnused (parameterIndex, gestureIsStarting); } //============================================================================== void BlueprintGenericEditor::timerCallback() { - // Iterate here to dispatch any updated parameter values - for (size_t i = 0; i < paramReadouts.size(); ++i) + auto& params = processor.getParameters(); + jassert (params.size() == paramReadouts.size()); + + for (int i = 0; i < paramReadouts.size(); ++i) { - auto& pr = paramReadouts[i]; + auto& pr = paramReadouts.getReference (i); if (pr.dirty) { - const float value = pr.value.load(); + const auto value = pr.value.load(); pr.dirty = false; - const auto& p = processor.getParameters()[i]; - juce::String id = p->getName(100); + juce::String id, stringValue; + float defaultValue = 0.0f; + + if (auto* p = params[i]) + { + id = p->getName (100); - if (auto* x = dynamic_cast(p)) - id = x->paramID; + if (auto* x = dynamic_cast(p)) + id = x->paramID; - float defaultValue = p->getDefaultValue(); - juce::String stringValue = p->getText(value, 0); + defaultValue = p->getDefaultValue(); + stringValue = p->getText(value, 0); + } - appRoot.dispatchEvent( - "parameterValueChange", - static_cast(i), - id, - defaultValue, - value, - stringValue - ); + appRoot.dispatchEvent ("parameterValueChange", + i, + id, + defaultValue, + value, + stringValue); } } } @@ -120,61 +108,57 @@ namespace blueprint //============================================================================== void BlueprintGenericEditor::resized() { - // Ensure our ReactApplicationRoot always fills the entire bounds - // of this editor. - appRoot.setBounds(getLocalBounds()); + appRoot.setBounds (getLocalBounds()); } - void BlueprintGenericEditor::paint(juce::Graphics& g) + void BlueprintGenericEditor::paint (juce::Graphics& g) { - g.fillAll(juce::Colours::transparentWhite); + g.fillAll (juce::Colours::transparentWhite); } //============================================================================== void BlueprintGenericEditor::beforeBundleEvaluated() { - // If we have a valueTreeState, bind parameter methods to the new app root - if (valueTreeState != nullptr) - { - engine->registerNativeMethod( - "beginParameterChangeGesture", - [this](const juce::var::NativeFunctionArgs& args) { - if (auto* parameter = valueTreeState->getParameter(args.arguments[0].toString())) - parameter->beginChangeGesture(); + if (valueTreeState == nullptr) + return; - return juce::var::undefined(); - } - ); + engine->registerNativeMethod ("beginParameterChangeGesture", + [this] (const juce::var::NativeFunctionArgs& args) + { + if (args.numArguments > 0) + if (auto* parameter = valueTreeState->getParameter (args.arguments[0].toString())) + parameter->beginChangeGesture(); - engine->registerNativeMethod( - "setParameterValueNotifyingHost", - [this](const juce::var::NativeFunctionArgs& args) { - if (auto* parameter = valueTreeState->getParameter(args.arguments[0].toString())) - parameter->setValueNotifyingHost(args.arguments[1]); + return juce::var::undefined(); + } + ); - return juce::var::undefined(); - } - ); + engine->registerNativeMethod ("setParameterValueNotifyingHost", + [this] (const juce::var::NativeFunctionArgs& args) + { + if (args.numArguments > 0) + if (auto* parameter = valueTreeState->getParameter (args.arguments[0].toString())) + parameter->setValueNotifyingHost (args.arguments[1]); - engine->registerNativeMethod( - "endParameterChangeGesture", - [this](const juce::var::NativeFunctionArgs& args) { - const juce::String& paramId = args.arguments[0].toString(); + return juce::var::undefined(); + } + ); - if (auto* parameter = valueTreeState->getParameter(paramId)) + engine->registerNativeMethod ("endParameterChangeGesture", + [this] (const juce::var::NativeFunctionArgs& args) + { + if (args.numArguments > 0) + if (auto* parameter = valueTreeState->getParameter (args.arguments[0].toString())) parameter->endChangeGesture(); - return juce::var::undefined(); - } - ); - } + return juce::var::undefined(); + } + ); } void BlueprintGenericEditor::afterBundleEvaluated() { - // Push current parameter values into the bundle on load for (auto& p : processor.getParameters()) - parameterValueChanged(p->getParameterIndex(), p->getValue()); + parameterValueChanged (p->getParameterIndex(), p->getValue()); } - } diff --git a/blueprint/core/blueprint_GenericEditor.h b/blueprint/core/blueprint_GenericEditor.h index 08627b36..d90f1b05 100644 --- a/blueprint/core/blueprint_GenericEditor.h +++ b/blueprint/core/blueprint_GenericEditor.h @@ -1,33 +1,17 @@ -/* - ============================================================================== - - blueprint_GenericEditor.h - Created: 3 Nov 2019 4:47:39pm - - ============================================================================== -*/ - #pragma once -#include "blueprint_AppHarness.h" -#include "blueprint_ReactApplicationRoot.h" - - namespace blueprint { - - //============================================================================== /** The BlueprintGenericEditor is a default AudioProcessorEditor with preinstalled functionality - * for working with Blueprint. - * - * It automatically manages a ReactApplicationRoot, registers some native methods - * and properties for interfacing with the editor, and provides some helpful - * development tools. - */ - class BlueprintGenericEditor - : public juce::AudioProcessorEditor - , public juce::AudioProcessorParameter::Listener - , public juce::Timer + for working with Blueprint. + + It automatically manages a ReactApplicationRoot, registers some native methods + and properties for interfacing with the editor, and provides some helpful + development tools. + */ + class BlueprintGenericEditor final : public juce::AudioProcessorEditor, + public juce::AudioProcessorParameter::Listener, + private juce::Timer { public: //============================================================================== @@ -35,54 +19,48 @@ namespace blueprint ~BlueprintGenericEditor() override; //============================================================================== - /** Implement the AudioProcessorParameter::Listener interface. */ void parameterValueChanged (int parameterIndex, float newValue) override; void parameterGestureChanged (int parameterIndex, bool gestureIsStarting) override; - - //============================================================================== - /** Override the timer interface. */ - void timerCallback() override; - - //============================================================================== - /** Override the component interface. */ void resized() override; void paint (juce::Graphics&) override; private: //============================================================================== - /** ReactApplicationRoot bundle eval callback functions */ - void beforeBundleEvaluated(); - void afterBundleEvaluated(); - - //============================================================================== - std::shared_ptr engine; - ReactApplicationRoot appRoot; - AppHarness harness; + std::shared_ptr engine { std::make_shared() }; + ReactApplicationRoot appRoot; + AppHarness harness; - juce::File bundleFile; - juce::AudioProcessorValueTreeState* valueTreeState; + juce::File bundleFile; + juce::AudioProcessorValueTreeState* valueTreeState = nullptr; //============================================================================== // The plugin editor holds an array of parameter value readouts which are // propagated to the user interface. During parameter value changes on the // realtime thread, we capture the values in this array of structs, then at // 30Hz propagate the value changes via dispatching events to the jsui. - struct ParameterReadout { - std::atomic value = 0.0; - std::atomic dirty = false; - + struct ParameterReadout + { ParameterReadout() = default; - ParameterReadout(const ParameterReadout& other) { - value = other.value.load(); - dirty = other.dirty.load(); + ParameterReadout (const ParameterReadout& other) : + value (other.value.load()), + dirty (other.dirty.load()) + { } + + std::atomic value { 0.0f }; + std::atomic dirty { false }; }; - std::vector paramReadouts; + juce::Array paramReadouts; + + //============================================================================== + void beforeBundleEvaluated(); + void afterBundleEvaluated(); + + void timerCallback() override; //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (BlueprintGenericEditor) }; - } diff --git a/blueprint/core/blueprint_ImageView.h b/blueprint/core/blueprint_ImageView.h index 553f50f1..43cac982 100644 --- a/blueprint/core/blueprint_ImageView.h +++ b/blueprint/core/blueprint_ImageView.h @@ -1,42 +1,24 @@ -/* - ============================================================================== - - blueprint_ImageView.h - Created: 20 Apr 2019 5:25:25pm - - ============================================================================== -*/ - #pragma once -#include "blueprint_View.h" - - namespace blueprint { - namespace + /** juce::URL::isWellFormed is currently not a complete implementation, + so we have this slightly more robust check for now. + */ + inline bool isWellFormedURL (const juce::URL& url) { - // juce::URL::isWellFormed is currently not a complete - // implementation, so we have this slightly more robust check - // for now. - bool isWellFormedURL(const juce::URL &url) - { - return url.isWellFormed() && - url.getScheme().isNotEmpty() && - !url.toString(false).startsWith("data"); - } - + return url.isWellFormed() + && url.getScheme().isNotEmpty() + && ! url.toString (false).startsWith ("data"); } //============================================================================== - /** The ImageView class is a core view for drawing images within Blueprint's - layout system. - */ - class ImageView : public View + /** The ImageView class is a core view for drawing images within Blueprint's layout system. */ + class ImageView final : public View { public: //============================================================================== - static inline juce::Identifier sourceProp = "source"; + static inline const juce::Identifier sourceProp = "source"; //============================================================================== ImageView() = default; @@ -44,33 +26,30 @@ namespace blueprint //============================================================================== void setProperty (const juce::Identifier& name, const juce::var& value) override { - View::setProperty(name, value); + View::setProperty (name, value); if (name == sourceProp) { - const juce::String source = value.toString(); - const juce::URL sourceURL = source; + const auto source = value.toString(); + const auto sourceURL = juce::URL (source); - if (isWellFormedURL(sourceURL)) + if (isWellFormedURL (sourceURL)) { auto drawableImg = std::make_unique(); - drawableImg->setImage(loadImageFromURL(sourceURL)); - drawable = std::move(drawableImg); + drawableImg->setImage (loadImageFromURL (sourceURL)); + drawable = std::move (drawableImg); } - else if (source.startsWith("data:image/")) // juce::URL does not currently handle Data URLs + else if (source.startsWith ("data:image/")) { + // NB: juce::URL does not currently handle Data URLs auto drawableImg = std::make_unique(); - drawableImg->setImage(loadImageFromDataURL(source)); - drawable = std::move(drawableImg); + drawableImg->setImage (loadImageFromDataURL (source)); + drawable = std::move (drawableImg); } - else // If not a URL treat source prop as inline SVG/Image data + else { - drawable = std::unique_ptr( - juce::Drawable::createFromImageData( - source.toRawUTF8(), - source.getNumBytesAsUTF8() - ) - ); + // If not a URL treat source prop as inline SVG/Image data + drawable = juce::Drawable::createFromImageData (source.toRawUTF8(),source.getNumBytesAsUTF8()); } } } @@ -78,47 +57,51 @@ namespace blueprint //============================================================================== void paint (juce::Graphics& g) override { - View::paint(g); + View::paint (g); - const float opacity = props.getWithDefault("opacity", 1.0f); + const auto opacity = static_cast (props.getWithDefault ("opacity", 1.0f)); // Without a specified placement, we just draw the drawable. - if (!props.contains("placement")) - return drawable->draw(g, opacity); + if (props.contains ("placement")) + { + // Otherwise we map placement strings to the appropriate flags + const auto placementFlags = static_cast (props["placement"]); - // Otherwise we map placement strings to the appropriate flags - const int flags = props["placement"]; - const juce::RectanglePlacement placement (flags); + drawable->drawWithin (g, getLocalBounds().toFloat(), { placementFlags }, opacity); + return; + } - drawable->drawWithin(g, getLocalBounds().toFloat(), placement, opacity); + drawable->draw (g, opacity); } private: //============================================================================== - juce::Image loadImageFromURL(const juce::URL &url) const + juce::Image loadImageFromURL (const juce::URL &url) const { if (url.isLocalFile()) { - const juce::File imageFile = url.getLocalFile(); + const auto imageFile = url.getLocalFile(); - if (!imageFile.existsAsFile()) + if (! imageFile.existsAsFile()) { - const juce::String errorString = "Image file does not exist: " + imageFile.getFullPathName(); - throw std::logic_error(errorString.toStdString()); + const auto errorString = "Image file does not exist: " + imageFile.getFullPathName(); + jassertfalse; + throw std::logic_error (errorString.toStdString()); } - juce::Image image = juce::ImageFileFormat::loadFrom(imageFile); + const auto image = juce::ImageFileFormat::loadFrom (imageFile); if (image.isNull()) { - const juce::String errorString = "Unable to load image file: " + imageFile.getFullPathName(); - throw std::logic_error(errorString.toStdString()); + const auto errorString = "Unable to load image file: " + imageFile.getFullPathName(); + jassertfalse; + throw std::logic_error (errorString.toStdString()); } return image; } - if (url.isProbablyAWebsiteURL(url.toString(false))) + if (url.isProbablyAWebsiteURL(url.toString (false))) { //TODO: What approach should we take here? // It looks like using juce::URL::downloadToFile would be the best @@ -132,12 +115,14 @@ namespace blueprint // thread for now and increase if this becomes necessary. Finally, should we consider // some sort of "placeHolder" prop on which can be used to display a string // or child View until the image is downloaded? - const juce::String errorString = "Image download not currently supported: " + url.toString(false); - throw std::logic_error(errorString.toStdString()); + const auto errorString = "Image download not currently supported: " + url.toString (false); + jassertfalse; + throw std::logic_error (errorString.toStdString()); } - const juce::String errorString = "Unsupported image URL: " + url.toString(false); - throw std::logic_error(errorString.toStdString()); + const auto errorString = "Unsupported image URL: " + url.toString (false); + jassertfalse; + throw std::logic_error (errorString.toStdString()); } //============================================================================== @@ -146,58 +131,52 @@ namespace blueprint // source is a data URL that describes image. // the format is `data:[][;base64],` // https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs - const int commaIndex = source.indexOf(","); - const int semiIndex = source.indexOf(";"); + const auto commaIndex = source.indexOf (","); + const auto semiIndex = source.indexOf (";"); if (commaIndex == -1 || semiIndex == -1) { - throw std::runtime_error("Image received an invalid data url."); + jassertfalse; + throw std::runtime_error ("Image received an invalid data url."); } - - const auto base64EncodedData = source.substring(commaIndex + 1); - juce::MemoryOutputStream outStream{}; - if(!juce::Base64::convertFromBase64(outStream, base64EncodedData)) + const auto base64EncodedData = source.substring (commaIndex + 1); + juce::MemoryOutputStream outStream; + + if (! juce::Base64::convertFromBase64 (outStream, base64EncodedData)) { - throw std::runtime_error("Image failed to convert data url."); + jassertfalse; + throw std::runtime_error ("Image failed to convert data url."); } juce::MemoryInputStream inputStream (outStream.getData(), outStream.getDataSize(), false); - const auto mimeType = source.substring(5,semiIndex); - auto fmt = prepareImageFormat(mimeType); - + const auto mimeType = source.substring (5, semiIndex); + auto fmt = prepareImageFormat (mimeType); + if (fmt == nullptr) { - throw std::runtime_error("Unsupported format."); + jassertfalse; + throw std::runtime_error ("Unsupported format."); } - if (!fmt->canUnderstand(inputStream)) + if (! fmt->canUnderstand(inputStream)) { - throw std::runtime_error("Cannot understand the image."); + jassertfalse; + throw std::runtime_error ("Cannot understand the image."); } - - inputStream.setPosition(0); - return fmt->decodeImage(inputStream); + + inputStream.setPosition (0); + return fmt->decodeImage (inputStream); } - + std::unique_ptr prepareImageFormat(const juce::String& mimeType) const { - if (mimeType == "image/png") - { - return std::make_unique(); - } - - if (mimeType == "image/jpeg") - { - return std::make_unique(); - } - - if (mimeType == "image/gif") - { - return std::make_unique(); - } - return nullptr; + if (mimeType == "image/png") return std::make_unique(); + if (mimeType == "image/jpeg") return std::make_unique(); + if (mimeType == "image/gif") return std::make_unique(); + + return {}; } //============================================================================== diff --git a/blueprint/core/blueprint_RawTextView.h b/blueprint/core/blueprint_RawTextView.h index c84476f7..33076c83 100644 --- a/blueprint/core/blueprint_RawTextView.h +++ b/blueprint/core/blueprint_RawTextView.h @@ -1,57 +1,42 @@ -/* - ============================================================================== - - blueprint_RawTextView.h - Created: 11 Apr 2019 11:27:27am - - ============================================================================== -*/ - #pragma once -#include "blueprint_View.h" - - namespace blueprint { - - //============================================================================== /** The RawTextView class is more or less a wrapper around a string that asserts itself as a leaf node in the tree by refusing a resize and painting nothing. It provides an interface for a parent TextView to draw a collection of RawTextView children. For example, - `123 Avenue Avenue {'\n'} City, St 12345` + `123 Avenue Avenue {'\n'} City, St 12345` creates three RawTextView children of a single TextView. But independently these raw text strings can't know how to lay themselves out correctly. */ - class RawTextView : public View + class RawTextView final : public View { public: //============================================================================== - RawTextView(const juce::String& text) : _text(text) {} + RawTextView (const juce::String& initialText) : text (initialText) {} //============================================================================== - void setProperty (const juce::Identifier&, const juce::var&) override - { - throw std::logic_error("A RawTextView can't receive properties."); - } + /** */ + void setText (const juce::String& newText) { text = newText; } - //============================================================================== - void setText (const juce::String& text) { - _text = text; - } + /** */ + const juce::String& getText() const noexcept { return text; } - juce::String getText() + //============================================================================== + /** @internal */ + void setProperty (const juce::Identifier&, const juce::var&) override { - return _text; + jassertfalse; + throw std::logic_error ("A RawTextView can't receive properties."); } private: //============================================================================== - juce::String _text; + juce::String text; //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (RawTextView) diff --git a/blueprint/core/blueprint_ReactApplicationRoot.cpp b/blueprint/core/blueprint_ReactApplicationRoot.cpp index 2923cc78..965dec4d 100644 --- a/blueprint/core/blueprint_ReactApplicationRoot.cpp +++ b/blueprint/core/blueprint_ReactApplicationRoot.cpp @@ -1,20 +1,5 @@ -/* - ============================================================================== - - blueprint_ReactApplicationRoot.cpp - Created: 9 Dec 2018 10:20:37am - - ============================================================================== -*/ - -#pragma once - -#include "blueprint_ReactApplicationRoot.h" - - namespace blueprint { - ReactApplicationRoot::ReactApplicationRoot(std::shared_ptr ee) : viewManager(this) , engine(ee) @@ -24,10 +9,10 @@ namespace blueprint bindNativeRenderingHooks(); -#if JUCE_DEBUG + #if JUCE_DEBUG // Enable keyboardFocus to support CTRL-D/CMD-D debug attachment. setWantsKeyboardFocus(true); -#endif + #endif } ReactApplicationRoot::ReactApplicationRoot() @@ -36,12 +21,12 @@ namespace blueprint //============================================================================== juce::var ReactApplicationRoot::createViewInstance (const juce::String& viewType) { - return juce::var(viewManager.createViewInstance(viewType)); + return viewManager.createViewInstance(viewType); } juce::var ReactApplicationRoot::createTextViewInstance (const juce::String& textValue) { - return juce::var(viewManager.createTextViewInstance(textValue)); + return viewManager.createTextViewInstance(textValue); } juce::var ReactApplicationRoot::setViewProperty (const ViewId viewId, const juce::String& name, const juce::var& value) @@ -70,7 +55,7 @@ namespace blueprint juce::var ReactApplicationRoot::getRootInstanceId() { - return juce::var(getViewId()); + return getViewId(); } juce::var ReactApplicationRoot::resetAfterCommit() @@ -98,7 +83,7 @@ namespace blueprint } } -#if JUCE_DEBUG + #if JUCE_DEBUG bool ReactApplicationRoot::keyPressed(const juce::KeyPress& key) { const auto startDebugCommand = juce::KeyPress('d', juce::ModifierKeys::commandModifier, 0); @@ -108,7 +93,7 @@ namespace blueprint return true; } -#endif + #endif //============================================================================== juce::var ReactApplicationRoot::evaluate(const juce::File& bundle) @@ -122,7 +107,7 @@ namespace blueprint catch (const EcmascriptEngine::Error& err) { handleRuntimeError(err); - return juce::var(); + return {}; } } @@ -135,30 +120,25 @@ namespace blueprint //============================================================================== void ReactApplicationRoot::handleRuntimeError(const EcmascriptEngine::Error& err) { -#if ! JUCE_DEBUG + #if ! JUCE_DEBUG // In release builds, we don't catch errors and show the red screen, // we allow the exception to raise up to the user to be handled properly // for a production app. throw err; -#endif + #endif JUCE_ASSERT_MESSAGE_THREAD - DBG(""); - DBG("==== Error in JavaScript runtime. Context: ===="); - DBG(err.context); - DBG(""); - DBG(err.what()); + juce::Logger::writeToLog ("\n==== Error in JavaScript runtime. Context: ====\n" + err.context + juce::newLine + err.what()); + errorText = std::make_unique (err.stack); - errorText = std::make_unique(err.stack); - -#if JUCE_WINDOWS - errorText->setFont(juce::Font("Lucida Console", 18, juce::Font::FontStyleFlags::plain)); -#elif JUCE_MAC - errorText->setFont(juce::Font("Monaco", 18, juce::Font::FontStyleFlags::plain)); -#else - errorText->setFont(18); -#endif + #if JUCE_WINDOWS + errorText->setFont ({ "Lucida Console", 18, juce::Font::FontStyleFlags::plain }); + #elif JUCE_MAC + errorText->setFont ({ "Monaco", 18, juce::Font::FontStyleFlags::plain }); + #else + errorText->setFont (18.0f); + #endif // Lastly, kill the ViewManager to tear down existing views and prevent // further view interaction @@ -189,5 +169,4 @@ namespace blueprint addMethodBinding<0>(ns, "getRootInstanceId", &ReactApplicationRoot::getRootInstanceId); addMethodBinding<0>(ns, "resetAfterCommit", &ReactApplicationRoot::resetAfterCommit); } - } diff --git a/blueprint/core/blueprint_ReactApplicationRoot.h b/blueprint/core/blueprint_ReactApplicationRoot.h index aa0de270..7ebd9bc0 100644 --- a/blueprint/core/blueprint_ReactApplicationRoot.h +++ b/blueprint/core/blueprint_ReactApplicationRoot.h @@ -1,39 +1,22 @@ -/* - ============================================================================== - - blueprint_ReactApplicationRoot.h - Created: 9 Dec 2018 10:20:37am - - ============================================================================== -*/ - #pragma once -#include "blueprint_EcmascriptEngine.h" -#include "blueprint_FileWatcher.h" -#include "blueprint_View.h" -#include "blueprint_ViewManager.h" - - namespace blueprint { - - //============================================================================== /** The ReactApplicationRoot class is the primary point of coordination between - * the React.js reconciler and the native View heirarchy. - * - * By default, ReactApplicationRoot implements a generic error handler which will - * catch errors from JavaScript code and display an error screen with a stack trace - * and error message. This generic error handler is enabled by default in Debug builds, - * and in Release builds such errors will be thrown, with the intention that the end - * user should catch and handle them appropriately. - * - * ReactApplicationRoot also provides debug functionality similar to React Native. - * Users can hit CTRL-D/CMD-D when the ReactApplicationRoot component has focus, - * causing the application to suspend execution and await connection from a debug client. - * See the documentation for details on setting up and connecting a debugger. - */ - class ReactApplicationRoot : public View + the React.js reconciler and the native View heirarchy. + + By default, ReactApplicationRoot implements a generic error handler which will + catch errors from JavaScript code and display an error screen with a stack trace + and error message. This generic error handler is enabled by default in Debug builds, + and in Release builds such errors will be thrown, with the intention that the end + user should catch and handle them appropriately. + + ReactApplicationRoot also provides debug functionality similar to React Native. + Users can hit CTRL-D/CMD-D when the ReactApplicationRoot component has focus, + causing the application to suspend execution and await connection from a debug client. + See the documentation for details on setting up and connecting a debugger. + */ + class ReactApplicationRoot final : public View { public: //============================================================================== @@ -51,24 +34,12 @@ namespace blueprint juce::var getRootInstanceId(); juce::var resetAfterCommit(); - //============================================================================== - /** Override the default resized behavior. */ - void resized() override; - - /** Override the default paint behavior. */ - void paint(juce::Graphics& g) override; - -#if JUCE_DEBUG - /** In debug builds, we add a keypress handler to toggle debugging. */ - bool keyPressed(const juce::KeyPress& key) override; -#endif - //============================================================================== /** Evaluates a javascript bundle file in the EcmascriptEngine. - * - * Provides default error handling to display the red screen with error - * message and stack trace. - */ + + Provides default error handling to display the red screen with error + message and stack trace. + */ juce::var evaluate(const juce::File& bundle); /** Install a custom view type into the view manager. */ @@ -83,12 +54,15 @@ namespace blueprint // We early return here in the event that we're currently showing the red error // screen. This prevents subsequent errors caused by dispatching events with an // incorrect engine state from overwriting the first error message. - if (errorText) + if (errorText != nullptr) return; - try { + try + { engine->invoke("__BlueprintNative__.dispatchEvent", eventType, std::forward(args)...); - } catch (const EcmascriptEngine::Error& err) { + } + catch (const EcmascriptEngine::Error& err) + { handleRuntimeError(err); } } @@ -102,66 +76,74 @@ namespace blueprint // We early return here in the event that we're currently showing the red error // screen. This prevents subsequent errors caused by dispatching events with an // incorrect engine state from overwriting the first error message. - if (errorText) + if (errorText != nullptr) return; - try { + try + { engine->invoke("__BlueprintNative__.dispatchViewEvent", std::forward(args)...); - } catch (const EcmascriptEngine::Error& err) { + } + catch (const EcmascriptEngine::Error& err) + { handleRuntimeError(err); } } //============================================================================== /** Displays the red error screen for the given error. */ - void handleRuntimeError(const EcmascriptEngine::Error& err); + void handleRuntimeError (const EcmascriptEngine::Error& err); /** Clears the internal EcmascriptEngine and view table. */ void reset(); /** Installs the rendering hooks needed by the React reconciler into the - * EcmascriptEngine environment. - * - * Should be called after every `reset` and before evaluating the bundle. - */ + EcmascriptEngine environment. + + Should be called after every `reset` and before evaluating the bundle. + */ void bindNativeRenderingHooks(); + //============================================================================== + void resized() override; + void paint (juce::Graphics& g) override; + + #if JUCE_DEBUG || DOXYGEN + /** In debug builds, we add a keypress handler to toggle debugging. */ + bool keyPressed (const juce::KeyPress& key) override; + #endif + private: //============================================================================== - template + ViewManager viewManager; + std::shared_ptr engine; + std::unique_ptr errorText; + + //============================================================================== + template juce::var invokeFromNativeFunction (MethodType method, const juce::var::NativeFunctionArgs& args) { - static_assert (NumParams <= 4); + static_assert (numParams >= 0 && numParams <= 4); - if (args.numArguments != NumParams) + if (args.numArguments != numParams) return juce::var::undefined(); - if constexpr (NumParams == 0) return (this->*method)(); - if constexpr (NumParams == 1) return (this->*method)(args.arguments[0]); - if constexpr (NumParams == 2) return (this->*method)(args.arguments[0], args.arguments[1]); - if constexpr (NumParams == 3) return (this->*method)(args.arguments[0], args.arguments[1], args.arguments[2]); - if constexpr (NumParams == 4) return (this->*method)(args.arguments[0], args.arguments[1], args.arguments[2], args.arguments[3]); - - return {}; + if constexpr (numParams == 0) return (this->*method)(); + if constexpr (numParams == 1) return (this->*method)(args.arguments[0]); + if constexpr (numParams == 2) return (this->*method)(args.arguments[0], args.arguments[1]); + if constexpr (numParams == 3) return (this->*method)(args.arguments[0], args.arguments[1], args.arguments[2]); + if constexpr (numParams == 4) return (this->*method)(args.arguments[0], args.arguments[1], args.arguments[2], args.arguments[3]); } - template - void addMethodBinding (const char* ns, const char* name, MethodType method) { - engine->registerNativeMethod( - ns, - name, - [this, method] (const juce::var::NativeFunctionArgs& args) -> juce::var { - return invokeFromNativeFunction(method, args); - } - ); + template + void addMethodBinding (const char* ns, const char* name, MethodType method) + { + engine->registerNativeMethod (ns, name, + [this, method] (const juce::var::NativeFunctionArgs& args) + { + return invokeFromNativeFunction(method, args); + }); } - //============================================================================== - ViewManager viewManager; - - std::shared_ptr engine; - std::unique_ptr errorText; - //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ReactApplicationRoot) }; diff --git a/blueprint/core/blueprint_ScrollView.cpp b/blueprint/core/blueprint_ScrollView.cpp index 609797e6..127a3d60 100644 --- a/blueprint/core/blueprint_ScrollView.cpp +++ b/blueprint/core/blueprint_ScrollView.cpp @@ -1,20 +1,9 @@ -/* - ============================================================================== - - blueprint_ScrollView.cpp - Created: 10 Nov 2020 18:07pm - - ============================================================================== -*/ - -#include "blueprint_ScrollView.h" - namespace blueprint { ScrollView::ScrollView() { - addAndMakeVisible(viewport); - viewport.setScrollBarsShown(true, true); + addAndMakeVisible (viewport); + viewport.setScrollBarsShown (true, true); } void ScrollView::setProperty (const juce::Identifier& name, const juce::var& value) @@ -24,59 +13,58 @@ namespace blueprint auto showX = viewport.isHorizontalScrollBarShown(); auto showY = viewport.isVerticalScrollBarShown(); - auto overflowCheck = [](const juce::String& p, const juce::String &v) + auto overflowCheck = [](const juce::String& p, const juce::String& v) { - if (juce::StringRef("scroll") == v) { return true; } - if (juce::StringRef("hidden") == v) { return false; } + if (v == "scroll") + return true; + + if (v == "hidden") + return false; - const juce::String e = "Invalid prop value. Prop '" + p + "' must be a string of 'hidden' or 'scroll'"; - throw std::invalid_argument(e.toStdString()); + const auto e = "Invalid prop value. Prop '" + p + "' must be a string of 'hidden' or 'scroll'"; + throw std::invalid_argument (e.toStdString()); }; if (name == overflowYProp) - { - showY = overflowCheck(overflowYProp.toString(), value); - } + showY = overflowCheck (overflowYProp.toString(), value); if (name == overflowXProp) - { - showX = overflowCheck(overflowXProp.toString(), value); - } + showX = overflowCheck (overflowXProp.toString(), value); - viewport.setScrollBarsShown(showY, showX); + viewport.setScrollBarsShown (showY, showX); if (name == scrollBarWidthProp) { if (!props[scrollBarWidthProp].isDouble()) - throw std::invalid_argument("Invalid prop value. Prop \'scollbar-width\' must be a number."); + throw std::invalid_argument ("Invalid prop value. Prop \'scollbar-width\' must be a number."); const int thickness = props[scrollBarWidthProp]; - viewport.setScrollBarThickness(thickness); + viewport.setScrollBarThickness (thickness); } if (name == scrollbarThumbColorProp) { - if (!props[scrollbarThumbColorProp].isString()) + if (! props[scrollbarThumbColorProp].isString()) throw std::invalid_argument("Invalid prop value. Prop \'scrollbar-thumb-color\' must be a color string."); - const auto thumbColor = juce::Colour::fromString(props[scrollbarThumbColorProp].toString()); - viewport.getVerticalScrollBar().setColour(juce::ScrollBar::thumbColourId, thumbColor); - viewport.getHorizontalScrollBar().setColour(juce::ScrollBar::thumbColourId, thumbColor); + const auto thumbColor = juce::Colour::fromString (props[scrollbarThumbColorProp].toString()); + viewport.getVerticalScrollBar().setColour (juce::ScrollBar::thumbColourId, thumbColor); + viewport.getHorizontalScrollBar().setColour (juce::ScrollBar::thumbColourId, thumbColor); } if (name == scrollbarTrackColorProp) { - if (!props[scrollbarTrackColorProp].isString()) - throw std::invalid_argument("Invalid prop value. Prop \'scrollbar-track-color\' must be a color string."); + if (! props[scrollbarTrackColorProp].isString()) + throw std::invalid_argument ("Invalid prop value. Prop \'scrollbar-track-color\' must be a color string."); - const auto trackColor = juce::Colour::fromString(props[scrollbarTrackColorProp].toString()); - viewport.getVerticalScrollBar().setColour(juce::ScrollBar::trackColourId, trackColor); - viewport.getHorizontalScrollBar().setColour(juce::ScrollBar::trackColourId, trackColor); + const auto trackColor = juce::Colour::fromString (props[scrollbarTrackColorProp].toString()); + viewport.getVerticalScrollBar().setColour (juce::ScrollBar::trackColourId, trackColor); + viewport.getHorizontalScrollBar().setColour (juce::ScrollBar::trackColourId, trackColor); } if (name == scrollOnDragProp) { - if (!props[scrollOnDragProp].isBool()) + if (! props[scrollOnDragProp].isBool()) throw std::invalid_argument("Invalid prop value. Prop \'scoll-on-drag\' must be a bool."); const bool scrollOnDrag = props[scrollOnDragProp]; diff --git a/blueprint/core/blueprint_ScrollView.h b/blueprint/core/blueprint_ScrollView.h index 6a0df4fb..5febf6a3 100644 --- a/blueprint/core/blueprint_ScrollView.h +++ b/blueprint/core/blueprint_ScrollView.h @@ -1,25 +1,12 @@ -/* - ============================================================================== - - blueprint_ScrollView.h - Created: 20 Apr 2019 5:25:25pm - - ============================================================================== -*/ - #pragma once -#include "blueprint_View.h" - namespace blueprint { - - //============================================================================== /** The ScrollView class is a core view for scrollable content within Blueprint's layout system. It's basically a proxy component where the appendChild/removeChild methods delegate to a single child juce::Viewport. - */ - class ScrollView : public View + */ + class ScrollView final : public View { public: //============================================================================== @@ -33,13 +20,15 @@ namespace blueprint static inline juce::Identifier scrollOnDragProp = "scroll-on-drag"; //============================================================================== + /** */ ScrollView(); //============================================================================== + /** @internal */ void setProperty (const juce::Identifier& name, const juce::var& value) override; + /** @internal */ void addChild (View* childView, int index = -1) override; - - //============================================================================== + /** @internal */ void resized() override; private: diff --git a/blueprint/core/blueprint_ScrollViewContentShadowView.h b/blueprint/core/blueprint_ScrollViewContentShadowView.h index c4c4597f..394ee459 100644 --- a/blueprint/core/blueprint_ScrollViewContentShadowView.h +++ b/blueprint/core/blueprint_ScrollViewContentShadowView.h @@ -1,44 +1,27 @@ -/* - ============================================================================== - - blueprint_ScrollViewContentShadowView.h - Created: 16 Jun 2019 10:38:37pm - - ============================================================================== -*/ - #pragma once -#include "blueprint_ShadowView.h" -#include "blueprint_View.h" - - namespace blueprint { - - //============================================================================== /** The ScrollViewContentShadowView extends a ShadowView to provide specialized - * behavior for flushing layout bounds to the content element of a ScrolLView. - * - * In particular, the default ShadowView behavior doesn't understand that - * the child view of a ScrollView might be offset from the (0, 0) top left - * position. Because of that, when flushing layout bounds it will set bounds - * with a (0, 0) top left position, which the juce::Viewport understands as - * a command to scroll back to (0, 0). So here we just make sure to preserve - * any offset value when flushing new bounds. - */ - class ScrollViewContentShadowView : public ShadowView + behaviour for flushing layout bounds to the content element of a ScrolLView. + + In particular, the default ShadowView behaviour doesn't understand that + the child view of a ScrollView might be offset from the (0, 0) top left + position. Because of that, when flushing layout bounds it will set bounds + with a (0, 0) top left position, which the juce::Viewport understands as + a command to scroll back to (0, 0). So here we just make sure to preserve + any offset value when flushing new bounds. + */ + class ScrollViewContentShadowView final : public ShadowView { public: //============================================================================== - ScrollViewContentShadowView(View* _view) - : ShadowView(_view) {} + ScrollViewContentShadowView (View* _view) : ShadowView(_view) {} //============================================================================== void flushViewLayout() override { - auto pos = view->getPosition().toFloat(); - auto bounds = getCachedLayoutBounds().withPosition(pos); + const auto bounds = getCachedLayoutBounds().withPosition (view->getPosition().toFloat()); view->setFloatBounds(bounds); view->setBounds(bounds.toNearestInt()); @@ -51,5 +34,4 @@ namespace blueprint //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ScrollViewContentShadowView) }; - } diff --git a/blueprint/core/blueprint_ShadowView.cpp b/blueprint/core/blueprint_ShadowView.cpp index 6a8570e1..c8b83835 100644 --- a/blueprint/core/blueprint_ShadowView.cpp +++ b/blueprint/core/blueprint_ShadowView.cpp @@ -1,15 +1,5 @@ -/* - ============================================================================== - - blueprint_ShadowView.cpp - Created: 17 Apr 2019 10:07:17am - - ============================================================================== -*/ - namespace blueprint { - namespace { //============================================================================== @@ -62,74 +52,79 @@ namespace blueprint { YGOverflowToString(YGOverflowScroll), YGOverflowScroll }, }; + //============================================================================== + class PropertySetterMap + { + public: + using K = juce::String; + using V = juce::var; + using F = std::function; + + PropertySetterMap(std::initializer_list> init) : + propertySetters(init) {} + + bool call (const K& key, const V& v, YGNodeRef node) const + { + const auto setter = propertySetters.find(key); + if (setter == propertySetters.end()) + return false; + + return setter->second(v, node); + } + + private: + std::unordered_map propertySetters; + }; - //============================================================================== - class PropertySetterMap { - typedef juce::String K; - typedef juce::var V; - typedef std::function F; - std::unordered_map propertySetters; - - public: - PropertySetterMap(std::initializer_list> init): propertySetters(init) {} - bool call(const K& key, const V& v, YGNodeRef node) const { - const auto setter = propertySetters.find(key); - if(setter == propertySetters.end()) { - return false; - } - return setter->second(v, node); - } - }; - - static const PropertySetterMap propertySetters{ - {"direction", getYogaNodeEnumSetter(YGNodeStyleSetDirection, ValidDirectionValues)}, - {"flex-direction", getYogaNodeEnumSetter(YGNodeStyleSetFlexDirection, ValidFlexDirectionValues)}, - {"justify-content", getYogaNodeEnumSetter(YGNodeStyleSetJustifyContent, ValidJustifyValues)}, - {"align-items", getYogaNodeEnumSetter(YGNodeStyleSetAlignItems, ValidAlignValues)}, - {"align-content", getYogaNodeEnumSetter(YGNodeStyleSetAlignContent, ValidAlignValues)}, - {"align-self", getYogaNodeEnumSetter(YGNodeStyleSetAlignSelf, ValidAlignValues)}, - {"position", getYogaNodeEnumSetter(YGNodeStyleSetPositionType, ValidPositionTypeValues)}, - {"flex-wrap", getYogaNodeEnumSetter(YGNodeStyleSetFlexWrap, ValidFlexWrapValues)}, - {"overflow", getYogaNodeEnumSetter(YGNodeStyleSetOverflow, ValidOverflowValues)}, - {"flex", getYogaNodeFloatSetter(YGNodeStyleSetFlex)}, - {"flex-grow", getYogaNodeFloatSetter(YGNodeStyleSetFlexGrow)}, - {"flex-shrink", getYogaNodeFloatSetter(YGNodeStyleSetFlexShrink)}, - {"flex-basis", getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetFlexBasis))}, - {"width", getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetWidth))}, - {"height", getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetHeight))}, - {"min-width", getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetMinWidth))}, - {"min-height", getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetMinHeight))}, - {"max-width", getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetMaxWidth))}, - {"max-height", getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetMaxHeight))}, - {"aspect-ratio", getYogaNodeFloatSetter(YGNodeStyleSetAspectRatio)}, - - {"margin", getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeAll)}, - {juce::String("margin-") + YGEdgeToString(YGEdgeLeft), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeLeft)}, - {juce::String("margin-") + YGEdgeToString(YGEdgeTop), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeTop)}, - {juce::String("margin-") + YGEdgeToString(YGEdgeRight), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeRight)}, - {juce::String("margin-") + YGEdgeToString(YGEdgeBottom), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeBottom)}, - {juce::String("margin-") + YGEdgeToString(YGEdgeStart), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeStart)}, - {juce::String("margin-") + YGEdgeToString(YGEdgeEnd), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeEnd)}, - {juce::String("margin-") + YGEdgeToString(YGEdgeHorizontal), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeHorizontal)}, - {juce::String("margin-") + YGEdgeToString(YGEdgeVertical), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeLeft)}, - {juce::String("margin-") + YGEdgeToString(YGEdgeAll), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeAll)}, - - {"padding", getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPadding), YGEdgeAll)}, - {juce::String("padding-") + YGEdgeToString(YGEdgeLeft), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPadding), YGEdgeLeft)}, - {juce::String("padding-") + YGEdgeToString(YGEdgeTop), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPadding), YGEdgeTop)}, - {juce::String("padding-") + YGEdgeToString(YGEdgeRight), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPadding), YGEdgeRight)}, - {juce::String("padding-") + YGEdgeToString(YGEdgeBottom), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPadding), YGEdgeBottom)}, - {juce::String("padding-") + YGEdgeToString(YGEdgeStart), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPadding), YGEdgeStart)}, - {juce::String("padding-") + YGEdgeToString(YGEdgeEnd), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPadding), YGEdgeEnd)}, - {juce::String("padding-") + YGEdgeToString(YGEdgeHorizontal), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPadding), YGEdgeHorizontal)}, - {juce::String("padding-") + YGEdgeToString(YGEdgeVertical), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPadding), YGEdgeLeft)}, - {juce::String("margin-") + YGEdgeToString(YGEdgeAll), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeAll)}, - - {YGEdgeToString(YGEdgeLeft), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPosition), YGEdgeLeft)}, - {YGEdgeToString(YGEdgeTop), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPosition), YGEdgeTop)}, - {YGEdgeToString(YGEdgeRight), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPosition), YGEdgeRight)}, - {YGEdgeToString(YGEdgeBottom), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPosition), YGEdgeBottom)}, - }; + static const PropertySetterMap propertySetters{ + {"direction", getYogaNodeEnumSetter(YGNodeStyleSetDirection, ValidDirectionValues)}, + {"flex-direction", getYogaNodeEnumSetter(YGNodeStyleSetFlexDirection, ValidFlexDirectionValues)}, + {"justify-content", getYogaNodeEnumSetter(YGNodeStyleSetJustifyContent, ValidJustifyValues)}, + {"align-items", getYogaNodeEnumSetter(YGNodeStyleSetAlignItems, ValidAlignValues)}, + {"align-content", getYogaNodeEnumSetter(YGNodeStyleSetAlignContent, ValidAlignValues)}, + {"align-self", getYogaNodeEnumSetter(YGNodeStyleSetAlignSelf, ValidAlignValues)}, + {"position", getYogaNodeEnumSetter(YGNodeStyleSetPositionType, ValidPositionTypeValues)}, + {"flex-wrap", getYogaNodeEnumSetter(YGNodeStyleSetFlexWrap, ValidFlexWrapValues)}, + {"overflow", getYogaNodeEnumSetter(YGNodeStyleSetOverflow, ValidOverflowValues)}, + {"flex", getYogaNodeFloatSetter(YGNodeStyleSetFlex)}, + {"flex-grow", getYogaNodeFloatSetter(YGNodeStyleSetFlexGrow)}, + {"flex-shrink", getYogaNodeFloatSetter(YGNodeStyleSetFlexShrink)}, + {"flex-basis", getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetFlexBasis))}, + {"width", getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetWidth))}, + {"height", getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetHeight))}, + {"min-width", getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetMinWidth))}, + {"min-height", getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetMinHeight))}, + {"max-width", getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetMaxWidth))}, + {"max-height", getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetMaxHeight))}, + {"aspect-ratio", getYogaNodeFloatSetter(YGNodeStyleSetAspectRatio)}, + + {"margin", getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeAll)}, + {juce::String("margin-") + YGEdgeToString(YGEdgeLeft), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeLeft)}, + {juce::String("margin-") + YGEdgeToString(YGEdgeTop), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeTop)}, + {juce::String("margin-") + YGEdgeToString(YGEdgeRight), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeRight)}, + {juce::String("margin-") + YGEdgeToString(YGEdgeBottom), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeBottom)}, + {juce::String("margin-") + YGEdgeToString(YGEdgeStart), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeStart)}, + {juce::String("margin-") + YGEdgeToString(YGEdgeEnd), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeEnd)}, + {juce::String("margin-") + YGEdgeToString(YGEdgeHorizontal), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeHorizontal)}, + {juce::String("margin-") + YGEdgeToString(YGEdgeVertical), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeLeft)}, + {juce::String("margin-") + YGEdgeToString(YGEdgeAll), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeAll)}, + + {"padding", getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPadding), YGEdgeAll)}, + {juce::String("padding-") + YGEdgeToString(YGEdgeLeft), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPadding), YGEdgeLeft)}, + {juce::String("padding-") + YGEdgeToString(YGEdgeTop), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPadding), YGEdgeTop)}, + {juce::String("padding-") + YGEdgeToString(YGEdgeRight), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPadding), YGEdgeRight)}, + {juce::String("padding-") + YGEdgeToString(YGEdgeBottom), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPadding), YGEdgeBottom)}, + {juce::String("padding-") + YGEdgeToString(YGEdgeStart), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPadding), YGEdgeStart)}, + {juce::String("padding-") + YGEdgeToString(YGEdgeEnd), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPadding), YGEdgeEnd)}, + {juce::String("padding-") + YGEdgeToString(YGEdgeHorizontal), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPadding), YGEdgeHorizontal)}, + {juce::String("padding-") + YGEdgeToString(YGEdgeVertical), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPadding), YGEdgeLeft)}, + {juce::String("margin-") + YGEdgeToString(YGEdgeAll), getYogaNodeDimensionAutoSetter(BP_SPREAD_SETTER_AUTO(YGNodeStyleSetMargin), YGEdgeAll)}, + + {YGEdgeToString(YGEdgeLeft), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPosition), YGEdgeLeft)}, + {YGEdgeToString(YGEdgeTop), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPosition), YGEdgeTop)}, + {YGEdgeToString(YGEdgeRight), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPosition), YGEdgeRight)}, + {YGEdgeToString(YGEdgeBottom), getYogaNodeDimensionSetter(BP_SPREAD_SETTER_PERCENT(YGNodeStyleSetPosition), YGEdgeBottom)}, + }; } //============================================================================== diff --git a/blueprint/core/blueprint_ShadowView.h b/blueprint/core/blueprint_ShadowView.h index 65592dec..9360892b 100644 --- a/blueprint/core/blueprint_ShadowView.h +++ b/blueprint/core/blueprint_ShadowView.h @@ -1,163 +1,170 @@ -/* - ============================================================================== - - blueprint_ShadowView.h - Created: 17 Apr 2019 8:38:37am - - ============================================================================== -*/ - #pragma once -#include "blueprint_View.h" - #define BP_SPREAD_SETTER_PERCENT(setter) setter, setter##Percent #define BP_SPREAD_SETTER_AUTO(setter) BP_SPREAD_SETTER_PERCENT(setter), setter##Auto namespace blueprint { + /** */ + struct BoundsAnimator final : public juce::Timer + { + //============================================================================== + /** */ + using StepCallback = std::function)>; - struct BoundsAnimator : public juce::Timer { - using StepCallback = std::function)>; - - enum class EasingType { - Linear, - QuadraticIn, - QuadraticOut, - QuadraticInOut, + //============================================================================== + /** */ + enum class EasingType + { + linear, + quadraticIn, + quadraticOut, + quadraticInOut, }; - juce::Rectangle start; - juce::Rectangle dest; - StepCallback callback; - double duration; - double startTime; - int frameRate = 45; - EasingType easingType = EasingType::Linear; - - BoundsAnimator(double durationMs, int frameRateToUse, EasingType et, - juce::Rectangle startRect, juce::Rectangle destRect, - StepCallback cb) - : start(startRect) - , dest(destRect) - , callback(std::move (cb)) - , duration(durationMs) - , frameRate(frameRateToUse) - , easingType(et) + //============================================================================== + /** */ + BoundsAnimator (double durationMs, int frameRateToUse, EasingType et, + juce::Rectangle startRect, juce::Rectangle destRect, + StepCallback cb) : + start (startRect), + dest (destRect), + callback (std::move (cb)), + duration (durationMs), + frameRate (frameRateToUse), + easingType (et) { startTime = juce::Time::getMillisecondCounterHiRes(); - startTimerHz(45); + startTimerHz (45); } - ~BoundsAnimator() override { - stopTimer(); - } - - static constexpr float lerp (float a, float b, double t) { return a + (static_cast (t) * (b - a)); } - - void timerCallback() override { - auto now = juce::Time::getMillisecondCounterHiRes(); - double t = std::clamp((now - startTime) / duration, 0.0, 1.0); + //============================================================================== + void timerCallback() override + { + const auto now = juce::Time::getMillisecondCounterHiRes(); + auto t = std::clamp ((now - startTime) / duration, 0.0, 1.0); // Super helpful cheat sheet: https://gist.github.com/gre/1650294 - switch (easingType) { - case EasingType::Linear: - break; - case EasingType::QuadraticIn: - t = t * t; - break; - case EasingType::QuadraticOut: - t = t * (2.0 - t); - break; - case EasingType::QuadraticInOut: - t = (t < 0.5) ? (2.0 * t * t) : (-1.0 + (4.0 - 2.0 * t) * t); - break; + switch (easingType) + { + case EasingType::quadraticIn: t = juce::square (t); break; + case EasingType::quadraticOut: t = t * (2.0 - t); break; + case EasingType::quadraticInOut: t = (t < 0.5) ? (2.0 * t * t) : (-1.0 + (4.0 - 2.0 * t) * t); break; + + case EasingType::linear: default: break; } - if (t >= 0.9999) { - callback(dest); + if (t >= 0.9999) + { + callback (dest); stopTimer(); return; } - callback({ - lerp(start.getX(), dest.getX(), t), - lerp(start.getY(), dest.getY(), t), - lerp(start.getWidth(), dest.getWidth(), t), - lerp(start.getHeight(), dest.getHeight(), t), + callback + ({ + juce::jmap (static_cast (t), start.getX(), dest.getX()), + juce::jmap (static_cast (t), start.getY(), dest.getY()), + juce::jmap (static_cast (t), start.getWidth(), dest.getWidth()), + juce::jmap (static_cast (t), start.getHeight(), dest.getHeight()), }); } + + juce::Rectangle start, dest; + StepCallback callback; + double duration = 0.0, startTime = 0.0; + int frameRate = 45; + EasingType easingType = EasingType::linear; }; + //============================================================================== template - const auto getYogaNodeFloatSetter(Setter setter, Args... args) { - return [=](const juce::var& value, YGNodeRef node) { - if(value.isDouble()) { - setter(node, args..., (float) value); - return true; - } - return false; - }; + const auto getYogaNodeFloatSetter (Setter setter, Args... args) + { + return [=] (const juce::var& value, YGNodeRef node) + { + if (value.isDouble()) + { + setter (node, args..., (float) value); + return true; + } + + return false; + }; } template - const auto getYogaNodeDimensionSetter(Setter setter, SetterPercent setterPercent, Args... args) { - return [=, floatSetter = getYogaNodeFloatSetter(setter, args...)](const juce::var& value, YGNodeRef node) { - if (floatSetter(value, node)) - return true; - if (value.isString() && value.toString().contains("%")) + const auto getYogaNodeDimensionSetter (Setter setter, SetterPercent setterPercent, Args... args) + { + return [=, floatSetter = getYogaNodeFloatSetter(setter, args...)] (const juce::var& value, YGNodeRef node) { - juce::String strVal = value.toString().retainCharacters("-1234567890."); - setterPercent(node, args..., strVal.getFloatValue()); - return true; - } - setter(node, args..., YGUndefined); - return true; - }; + if (floatSetter (value, node)) + return true; + + if (value.isString() && value.toString().contains ("%")) + { + setterPercent(node, args..., value.toString().retainCharacters ("-1234567890.").getFloatValue()); + return true; + } + + setter(node, args..., YGUndefined); + return true; + }; } template - const auto getYogaNodeDimensionAutoSetter(Setter setter, SetterPercent setterPercent, SetterAuto setterAuto, Args... args) { - return [=, nonAutoSetter = getYogaNodeDimensionSetter(setter, setterPercent, args...)](const juce::var& value, YGNodeRef node) { - if (value.isString() && value.toString() == "auto") { - setterAuto(node, args...); - return true; - } - return nonAutoSetter(value, node); - }; + const auto getYogaNodeDimensionAutoSetter (Setter setter, SetterPercent setterPercent, SetterAuto setterAuto, Args... args) + { + return [=, nonAutoSetter = getYogaNodeDimensionSetter(setter, setterPercent, args...)] (const juce::var& value, YGNodeRef node) + { + if (value.isString() && value.toString() == "auto") + { + setterAuto (node, args...); + return true; + } + + return nonAutoSetter (value, node); + }; } template - const auto getYogaNodeEnumSetter(Setter setter, EnumMap &map) { - return [=](const juce::var& value, YGNodeRef node) { \ - const auto val = map.find(value); - if(val == map.end()) { - // TODO catch further up to add the key at which we tried - // to set this enum property to the message and rethrow - throw std::invalid_argument("Invalid property: " + value.toString().toStdString()); - } - setter(node, val->second); - return true; - }; + const auto getYogaNodeEnumSetter (Setter setter, EnumMap &map) + { + return [=] (const juce::var& value, YGNodeRef node) + { + const auto val = map.find (value); + if (val == map.end()) + { + // TODO catch further up to add the key at which we tried + // to set this enum property to the message and rethrow + throw std::invalid_argument ("Invalid property: " + value.toString().toStdString()); + } + + setter (node, val->second); + return true; + }; } //============================================================================== /** The ShadowView class decouples layout constraints from the actual View instances so that our View tree and ShadowView tree might differ (i.e. in the case of raw text nodes), and so that our View may remain more simple. - */ + */ class ShadowView { public: //============================================================================== - ShadowView(View* _view) : view(_view) + /** */ + ShadowView(View* v) : + view (v) { YGConfigSetUseWebDefaults(YGConfigGetDefault(), true); yogaNode = YGNodeNew(); } + /** */ virtual ~ShadowView() { YGNodeFree(yogaNode); @@ -187,100 +194,98 @@ namespace blueprint /** Removes a child component from the children array. */ virtual void removeChild (ShadowView* childView) { - auto it = std::find(children.begin(), children.end(), childView); + const auto it = std::find (children.begin(), children.end(), childView); if (it != children.end()) { - YGNodeRemoveChild(yogaNode, childView->yogaNode); - children.erase(it); + YGNodeRemoveChild (yogaNode, childView->yogaNode); + children.erase (it); } } //============================================================================== - /** Returns a pointer to the View instance shadowed by this node. */ - View* getAssociatedView() { return view; } + /** @returns a pointer to the View instance shadowed by this node. */ + View* getAssociatedView() const noexcept { return view; } - /** Returns the layout bounds held by the internal yogaNode. */ - juce::Rectangle getCachedLayoutBounds() + /** @returns the layout bounds held by the internal yogaNode. */ + juce::Rectangle getCachedLayoutBounds() const { - return { - YGNodeLayoutGetLeft(yogaNode), - YGNodeLayoutGetTop(yogaNode), - YGNodeLayoutGetWidth(yogaNode), - YGNodeLayoutGetHeight(yogaNode) + return + { + YGNodeLayoutGetLeft (yogaNode), + YGNodeLayoutGetTop (yogaNode), + YGNodeLayoutGetWidth (yogaNode), + YGNodeLayoutGetHeight (yogaNode) }; } /** Recursively computes the shadow tree layout. */ - void computeViewLayout(const float width, const float height) + void computeViewLayout (float width, float height) { - // Compute the new layout values - YGNodeCalculateLayout(yogaNode, width, height, YGDirectionInherit); + YGNodeCalculateLayout (yogaNode, width, height, YGDirectionInherit); } - /** Recursive traversal of the shadow tree, flushing layout bounds to - the associated view components. - */ + /** Recursive traversal of the shadow tree, + flushing layout bounds to the associated view components. + */ virtual void flushViewLayout() { -#ifdef DEBUG - if (props.contains("debug")) - YGNodePrint(yogaNode, (YGPrintOptions) (YGPrintOptionsLayout - | YGPrintOptionsStyle - | YGPrintOptionsChildren)); -#endif - - if (props.contains("layoutAnimated")) + #if JUCE_DEBUG + if (props.contains ("debug")) + YGNodePrint (yogaNode, (YGPrintOptions) (YGPrintOptionsLayout | YGPrintOptionsStyle | YGPrintOptionsChildren)); + #endif + + if (props.contains ("layoutAnimated")) { + // Default parameters if (props["layoutAnimated"].isBool() && props["layoutAnimated"]) { - // Default parameters - return flushViewLayoutAnimated(50.0, 45, BoundsAnimator::EasingType::Linear); + flushViewLayoutAnimated (50.0, 45, BoundsAnimator::EasingType::linear); + return; } if (props["layoutAnimated"].isObject()) { - double const durationMs = props["layoutAnimated"].getProperty("duration", 50.0); - double const frameRate = props["layoutAnimated"].getProperty("frameRate", 45); - int const et = props["layoutAnimated"].getProperty("easing", 0); + const auto et = static_cast (props["layoutAnimated"].getProperty ("easing", 0)); - return flushViewLayoutAnimated(durationMs, static_cast (frameRate), static_cast(et)); + flushViewLayoutAnimated (static_cast (props["layoutAnimated"].getProperty ("duration", 50.0)), + static_cast (props["layoutAnimated"].getProperty ("frameRate", 45)), + static_cast (et)); + return; } } - view->setFloatBounds(getCachedLayoutBounds()); - view->setBounds(getCachedLayoutBounds().toNearestInt()); + view->setFloatBounds (getCachedLayoutBounds()); + view->setBounds (getCachedLayoutBounds().toNearestInt()); for (auto& child : children) child->flushViewLayout(); } /** Recursive traversal of the shadow tree, flushing layout bounds to the - * associated view components smoothly over time. This recursive step allows - * an animation of a component subtree by just marking the parent as animated. - */ - virtual void flushViewLayoutAnimated(double const durationMs, int const frameRate, BoundsAnimator::EasingType const et) + associated view components smoothly over time. This recursive step allows + an animation of a component subtree by just marking the parent as animated. + */ + virtual void flushViewLayoutAnimated (double durationMs, int frameRate, BoundsAnimator::EasingType et) { - auto viewCurrentBounds = view->getBounds().toFloat(); - auto viewDestinationBounds = getCachedLayoutBounds(); - animator = std::make_unique( durationMs, frameRate, et, - viewCurrentBounds, - viewDestinationBounds, - [safeView = juce::Component::SafePointer(view)](auto && stepBounds) { - if (auto* v = safeView.getComponent()) { + view->getBounds().toFloat(), + getCachedLayoutBounds(), + [safeView = juce::Component::SafePointer(view)](auto && stepBounds) + { + if (auto* v = safeView.getComponent()) + { v->setFloatBounds(stepBounds); v->setBounds(stepBounds.toNearestInt()); } } ); - for (auto& child : children) { + for (auto& child : children) child->flushViewLayoutAnimated(durationMs, frameRate, et); - } } protected: @@ -296,5 +301,4 @@ namespace blueprint //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ShadowView) }; - } diff --git a/blueprint/core/blueprint_TextShadowView.cpp b/blueprint/core/blueprint_TextShadowView.cpp index 728c6ead..3730a09c 100644 --- a/blueprint/core/blueprint_TextShadowView.cpp +++ b/blueprint/core/blueprint_TextShadowView.cpp @@ -1,23 +1,11 @@ -/* - ============================================================================== - - blueprint_TextView.cpp - Created: 28 Nov 2018 3:27:27pm - - ============================================================================== -*/ - -#pragma once - - namespace blueprint { + YGSize measureTextNode(YGNodeRef node, float width, YGMeasureMode, float, YGMeasureMode) + { + auto context = reinterpret_cast (YGNodeGetContext (node)); + jassert (context != nullptr); - //============================================================================== - YGSize measureTextNode(YGNodeRef node, float width, YGMeasureMode /*widthMode*/, float /*height*/, YGMeasureMode /*heightMode*/) { - auto context = reinterpret_cast(YGNodeGetContext(node)); - auto view = dynamic_cast(context->getAssociatedView()); - + auto view = dynamic_cast (context->getAssociatedView()); jassert (view != nullptr); // TODO: This is a bit of an oversimplification. We have a YGMeasureMode which @@ -25,12 +13,8 @@ namespace blueprint // just ignoring that, and in cases like `white-space: nowrap;` we want to ignore it, // but it would probably be good to get specific for each case. // See https://github.com/facebook/yoga/pull/576/files - auto tl = view->getTextLayout(width); + const auto tl = view->getTextLayout (width); - return { - tl.getWidth(), - tl.getHeight() - }; + return { tl.getWidth(), tl.getHeight() }; } - } diff --git a/blueprint/core/blueprint_TextShadowView.h b/blueprint/core/blueprint_TextShadowView.h index 972b025b..41c23a48 100644 --- a/blueprint/core/blueprint_TextShadowView.h +++ b/blueprint/core/blueprint_TextShadowView.h @@ -1,36 +1,23 @@ -/* - ============================================================================== - - blueprint_TextShadowView.h - Created: 17 Apr 2019 8:38:37am - - ============================================================================== -*/ - #pragma once -#include "blueprint_ShadowView.h" -#include "blueprint_View.h" - - namespace blueprint { - - //============================================================================== /** We use this method to measure the size of a given string so that the - * text container knows what size to take. - */ - YGSize measureTextNode(YGNodeRef, float, YGMeasureMode, float, YGMeasureMode); + text container knows what size to take. + */ + YGSize measureTextNode (YGNodeRef node, + float width, YGMeasureMode widthMode, + float height, YGMeasureMode heightMode); //============================================================================== - /** The TextShadowView extends a ShadowView to provide specialized behavior - * for measuring text content, as text layout is removed from the FlexBox - * flow. - */ - class TextShadowView : public ShadowView + /** The TextShadowView extends a ShadowView to provide specialized behaviour + for measuring text content, as text layout is removed from the FlexBox flow. + */ + class TextShadowView final : public ShadowView { public: //============================================================================== + /** */ TextShadowView(View* _view) : ShadowView(_view) { YGNodeSetContext(yogaNode, this); @@ -38,7 +25,14 @@ namespace blueprint } //============================================================================== - /** Set a property on the shadow view. */ + /** Sets a flag to indicate that this node needs to be measured at the next layout pass. */ + void markDirty() + { + YGNodeMarkDirty(yogaNode); + } + + //============================================================================== + /** @internal */ bool setProperty (const juce::String& name, const juce::var& value) override { const bool layoutPropertyWasSet = ShadowView::setProperty(name, value); @@ -51,26 +45,20 @@ namespace blueprint return layoutPropertyWasSet; } - /** Override the default ShadowView behavior to explicitly error. */ + /** @internal */ void addChild (ShadowView* childView, int index = -1) override { juce::ignoreUnused (index); if (childView != nullptr) { + jassertfalse; throw std::logic_error("TextShadowView cannot take children."); } } - /** Sets a flag to indicate that this node needs to be measured at the next layout pass. */ - void markDirty() - { - YGNodeMarkDirty(yogaNode); - } - private: //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TextShadowView) }; - } diff --git a/blueprint/core/blueprint_TextView.h b/blueprint/core/blueprint_TextView.h index 8302e685..033c5996 100644 --- a/blueprint/core/blueprint_TextView.h +++ b/blueprint/core/blueprint_TextView.h @@ -1,52 +1,35 @@ -/* - ============================================================================== - - blueprint_TextView.h - Created: 28 Nov 2018 3:27:27pm - - ============================================================================== -*/ - #pragma once -#include "blueprint_View.h" - - namespace blueprint { - - //============================================================================== /** The TextView class is a core container abstraction for declaring text components within Blueprint's layout system. - */ - class TextView : public View + */ + class TextView final : public View { public: //============================================================================== + /** */ TextView() = default; //============================================================================== /** Assembles a Font from the current node properties. */ - juce::Font getFont() + juce::Font getFont() const { - float fontHeight = props.getWithDefault("font-size", 12.0f); - int textStyleFlags = props.getWithDefault("font-style", 0); + const auto fontHeight = static_cast (props.getWithDefault ("font-size", 12.0f)); juce::Font f (fontHeight); - if (props.contains("font-family")) - f = juce::Font (props["font-family"], fontHeight, textStyleFlags); + if (props.contains ("font-family")) + f = juce::Font (props["font-family"], fontHeight, static_cast (props.getWithDefault ("font-style", 0))); - f.setExtraKerningFactor(props.getWithDefault("kerning-factor", 0.0)); + f.setExtraKerningFactor (props.getWithDefault ("kerning-factor", 0.0)); return f; } /** Constructs a TextLayout from all the children string values. */ - juce::TextLayout getTextLayout (float maxWidth) + juce::TextLayout getTextLayout (float maxWidth) const { - juce::String hexColor = props.getWithDefault("color", "ff000000"); - juce::Colour colour = juce::Colour::fromString(hexColor); - int just = props.getWithDefault("justification", 1); juce::String text; // TODO: Right now a element maps 1:1 to a TextView instance, @@ -56,53 +39,43 @@ namespace blueprint // map to a juce::AttributedString and carry their own properties. This allows // bolding single words inline, for example, and setting line-height, etc. for (auto& c : getChildren()) - if (RawTextView* v = dynamic_cast(c)) - text += v->getText(); + if (auto* v = dynamic_cast(c)) + text << v->getText(); juce::AttributedString as (text); juce::TextLayout tl; as.setLineSpacing(props.getWithDefault("line-spacing", 1.0f)); as.setFont(getFont()); - as.setColour(colour); - as.setJustification(just); + as.setColour(juce::Colour::fromString (props.getWithDefault ("color", "ff000000").toString())); + as.setJustification (static_cast (props.getWithDefault ("justification", 1))); - if (props.contains("word-wrap")) + if (props.contains ("word-wrap")) { - int wwValue = props["word-wrap"]; - - switch (wwValue) + switch (static_cast (props["word-wrap"])) { - case 0: - as.setWordWrap(juce::AttributedString::WordWrap::none); - break; - case 2: - as.setWordWrap(juce::AttributedString::WordWrap::byChar); - break; - case 1: - default: - as.setWordWrap(juce::AttributedString::WordWrap::byWord); - break; - + case 0: as.setWordWrap (juce::AttributedString::WordWrap::none); break; + case 2: as.setWordWrap (juce::AttributedString::WordWrap::byChar); break; + default: as.setWordWrap (juce::AttributedString::WordWrap::byWord); break; } } - tl.createLayout(as, maxWidth); + tl.createLayout (as, maxWidth); return tl; } //============================================================================== + /** @internal */ void paint (juce::Graphics& g) override { - auto floatBounds = getLocalBounds().toFloat(); + const auto floatBounds = getLocalBounds().toFloat(); - View::paint(g); - getTextLayout(floatBounds.getWidth()).draw(g, floatBounds); + View::paint (g); + getTextLayout (floatBounds.getWidth()).draw (g, floatBounds); } private: //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TextView) }; - } diff --git a/blueprint/core/blueprint_View.cpp b/blueprint/core/blueprint_View.cpp index 62bc29bb..efb0b9b0 100644 --- a/blueprint/core/blueprint_View.cpp +++ b/blueprint/core/blueprint_View.cpp @@ -1,26 +1,16 @@ -/* - ============================================================================== - - blueprint_View.cpp - Created: 26 Nov 2018 3:38:37am - - ============================================================================== -*/ - - namespace blueprint { - namespace detail { juce::var getMouseEventRelatedTarget(const juce::MouseEvent& e, const blueprint::View& view) { - juce::Component *topParent = view.getTopLevelComponent(); - const juce::MouseEvent topRelativeEvent = e.getEventRelativeTo(topParent); + auto* topParent = view.getTopLevelComponent(); + jassert (topParent != nullptr); - juce::Component *componentUnderMouse = topParent->getComponentAt(topRelativeEvent.x, topRelativeEvent.y); + const auto topRelativeEvent = e.getEventRelativeTo(topParent); - if (auto v = dynamic_cast(componentUnderMouse)) + auto* componentUnderMouse = topParent->getComponentAt (topRelativeEvent.x, topRelativeEvent.y); + if (auto* v = dynamic_cast(componentUnderMouse)) return v->getViewId(); // return null relatedTarget if event occurred from a non-View component. @@ -64,7 +54,6 @@ namespace blueprint {"keyCode", ke.getKeyCode()}, }, view); } - } //============================================================================== @@ -86,12 +75,12 @@ namespace blueprint { switch (static_cast (value)) { - case 0: setInterceptsMouseClicks (false, false); break; - case 1: setInterceptsMouseClicks (true, true); break; - case 2: setInterceptsMouseClicks (true, false); break; - case 3: setInterceptsMouseClicks (false, true); break; + case 0: setInterceptsMouseClicks (false, false); break; + case 1: setInterceptsMouseClicks (true, true); break; + case 2: setInterceptsMouseClicks (true, false); break; + case 3: setInterceptsMouseClicks (false, true); break; - default: setInterceptsMouseClicks (true, true); break; + default: setInterceptsMouseClicks (true, true); break; } } @@ -107,7 +96,6 @@ namespace blueprint void View::addChild (View* childView, int index) { - // Add the child view to our component heirarchy. addAndMakeVisible(childView, index); } @@ -120,22 +108,22 @@ namespace blueprint // Update transforms if (props.contains(transformMatrix)) { - const juce::var& matrix = props[transformMatrix]; - if(matrix.isArray() && matrix.getArray()->size() >= 16) { - const juce::Array &m = *matrix.getArray(); - - auto cxRelParent = cachedFloatBounds.getX() + cachedFloatBounds.getWidth() * 0.5f; - auto cyRelParent = cachedFloatBounds.getY() + cachedFloatBounds.getHeight() * 0.5f; - - const auto translateToOrigin = juce::AffineTransform::translation(cxRelParent * -1.0f, cyRelParent * -1.0f); - // set 2d homogeneous matrix using 3d homogeneous matrix - const auto transform = juce::AffineTransform( - m[0], m[1], m[3], - m[4], m[5], m[7] - ); - const auto translateFromOrigin = juce::AffineTransform::translation(cxRelParent, cyRelParent); - - setTransform(translateToOrigin.followedBy(transform).followedBy(translateFromOrigin)); + const auto& matrix = props[transformMatrix]; + + if(matrix.isArray() && matrix.getArray()->size() >= 16) + { + const auto &m = *matrix.getArray(); + + auto cxRelParent = cachedFloatBounds.getX() + cachedFloatBounds.getWidth() * 0.5f; + auto cyRelParent = cachedFloatBounds.getY() + cachedFloatBounds.getHeight() * 0.5f; + + const auto translateToOrigin = juce::AffineTransform::translation(cxRelParent * -1.0f, cyRelParent * -1.0f); + + // set 2d homogeneous matrix using 3d homogeneous matrix + const auto transform = juce::AffineTransform(m[0], m[1], m[3], m[4], m[5], m[7]); + const auto translateFromOrigin = juce::AffineTransform::translation(cxRelParent, cyRelParent); + + setTransform(translateToOrigin.followedBy(transform).followedBy(translateFromOrigin)); } } } @@ -143,36 +131,32 @@ namespace blueprint //============================================================================== float View::getResolvedLengthProperty (const juce::String& name, float axisLength) { - float ret = 0; - if (props.contains(name)) { const auto& v = props[name]; if (v.isString() && v.toString().trim().endsWithChar('%')) { - float pctVal = v.toString().retainCharacters("-1234567890.").getFloatValue(); - ret = axisLength * (pctVal / 100.0f); - } - else - { - ret = (float) v; + const auto pctVal = v.toString().retainCharacters("-1234567890.").getFloatValue(); + return axisLength * (pctVal / 100.0f); } + + return (float) v; } - return ret; + return 0.0f; } void View::paint (juce::Graphics& g) { if (props.contains("border-path")) { - juce::Path p = juce::Drawable::parseSVGPath(props["border-path"].toString()); + auto p = juce::Drawable::parseSVGPath(props["border-path"].toString()); if (props.contains("border-color")) { - juce::Colour c = juce::Colour::fromString(props["border-color"].toString()); - float borderWidth = props.getWithDefault("border-width", 1.0); + auto c = juce::Colour::fromString(props["border-color"].toString()); + auto borderWidth = (float) props.getWithDefault("border-width", 1.0f); g.setColour(c); g.strokePath(p, juce::PathStrokeType(borderWidth)); @@ -182,31 +166,31 @@ namespace blueprint } else if (props.contains("border-color") && props.contains("border-width")) { - juce::Path border; - auto c = juce::Colour::fromString(props["border-color"].toString()); - float borderWidth = props["border-width"]; + const auto c = juce::Colour::fromString(props["border-color"].toString()); + const auto borderWidth = (float) props["border-width"]; // Note this little bounds trick. When a Path is stroked, the line width extends // outwards in both directions from the coordinate line. If the coordinate // line is the exact bounding box then the component clipping makes the corners // appear to have different radii on the interior and exterior of the box. - auto borderBounds = getLocalBounds().toFloat().reduced(borderWidth * 0.5f); - auto width = borderBounds.getWidth(); - auto height = borderBounds.getHeight(); - auto minLength = std::min(width, height); - float borderRadius = getResolvedLengthProperty("border-radius", minLength); + const auto borderBounds = getLocalBounds().toFloat().reduced(borderWidth * 0.5f); + const auto width = borderBounds.getWidth(); + const auto height = borderBounds.getHeight(); + const auto minLength = std::min(width, height); + const auto borderRadius = getResolvedLengthProperty("border-radius", minLength); + juce::Path border; border.addRoundedRectangle(borderBounds, borderRadius); + g.setColour(c); - g.strokePath(border, juce::PathStrokeType(borderWidth)); + g.strokePath (border, juce::PathStrokeType { borderWidth }); g.reduceClipRegion(border); } if (props.contains("background-color")) { - juce::Colour c = juce::Colour::fromString(props["background-color"].toString()); - - if (!c.isTransparent()) + const auto c = juce::Colour::fromString(props["background-color"].toString()); + if (! c.isTransparent()) g.fillAll(c); } } @@ -214,12 +198,9 @@ namespace blueprint //============================================================================== void View::resized() { - auto w = cachedFloatBounds.getWidth(); - auto h = cachedFloatBounds.getHeight(); - dispatchViewEvent("onMeasure", detail::makeViewEventObject({ - {"width", w}, - {"height", h} + {"width", cachedFloatBounds.getWidth() }, + {"height", cachedFloatBounds.getHeight() } }, *this)); } @@ -266,5 +247,4 @@ namespace blueprint if (auto *parent = findParentComponentOfClass()) parent->dispatchViewEvent(getViewId(), eventType, e); } - } diff --git a/blueprint/core/blueprint_View.h b/blueprint/core/blueprint_View.h index b9c1086e..11dbc55d 100644 --- a/blueprint/core/blueprint_View.h +++ b/blueprint/core/blueprint_View.h @@ -1,37 +1,25 @@ -/* - ============================================================================== - - blueprint_View.h - Created: 26 Nov 2018 3:38:37am - - ============================================================================== -*/ - #pragma once -#include - - namespace blueprint { - - // Internally we use a juce::Uuid for uniquely identifying views, but we - // need that same identifier to make a transit through JavaScript land - // and still match afterwards. So we map our Uuids into a signed 32-bit integer - // type and leave Duktape to perform the appropriate cast through JavaScript's - // double-width "Number" type. - typedef juce::int32 ViewId; + /** Internally we use a juce::Uuid for uniquely identifying views, but we + need that same identifier to make a transit through JavaScript land + and still match afterwards. So we map our Uuids into a signed 32-bit integer + type and leave Duktape to perform the appropriate cast through JavaScript's + double-width "Number" type. + */ + using ViewId = int; //============================================================================== /** The View class is the core component abstraction for Blueprint's declarative flex-based component composition. - */ + */ class View : public juce::Component { public: //============================================================================== + /** */ View() = default; - ~View() override = default; //============================================================================== /** Returns this view's identifier. */ @@ -53,32 +41,26 @@ namespace blueprint /** Resolves a property to a specific point value or 0 if not present. */ float getResolvedLengthProperty (const juce::String& name, float axisLength); - /** Override the default Component method with default paint behaviors. */ - void paint (juce::Graphics& g) override; - - //============================================================================== - /** Dispatches a resized event to the React application. */ - void resized() override; - - /** Dispatches a mouseDown event to the React application. */ - void mouseDown (const juce::MouseEvent& e) override; - - /** Dispatches a mouseUp event to the React application. */ - void mouseUp (const juce::MouseEvent& e) override; - - /** Dispatches a mouseDrag event to the React application. */ - void mouseDrag (const juce::MouseEvent& e) override; - - /** Dispatches a mouseDoubleClick event to the React application. */ - void mouseDoubleClick (const juce::MouseEvent& e) override; - - /** Dispatches a keyPress event to the React application. */ - bool keyPressed (const juce::KeyPress& e) override; - //============================================================================== /** Invokes, if exists, the respective view event handler. */ void dispatchViewEvent (const juce::String& eventType, const juce::var& e); + //============================================================================== + /** @internal */ + void paint (juce::Graphics&) override; + /** @internal */ + void resized() override; + /** @internal */ + void mouseDown (const juce::MouseEvent&) override; + /** @internal */ + void mouseUp (const juce::MouseEvent&) override; + /** @internal */ + void mouseDrag (const juce::MouseEvent&) override; + /** @internal */ + void mouseDoubleClick (const juce::MouseEvent&) override; + /** @internal */ + bool keyPressed (const juce::KeyPress&) override; + protected: //============================================================================== juce::NamedValueSet props; @@ -92,5 +74,4 @@ namespace blueprint //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (View) }; - } diff --git a/blueprint/core/blueprint_ViewManager.cpp b/blueprint/core/blueprint_ViewManager.cpp index ea60f848..cf2deb5b 100644 --- a/blueprint/core/blueprint_ViewManager.cpp +++ b/blueprint/core/blueprint_ViewManager.cpp @@ -1,35 +1,17 @@ -/* - ============================================================================== - - blueprint_ViewManager.cpp - Created: 21 May 2020 15:32:00am - - ============================================================================== -*/ - -#include "blueprint_ViewManager.h" -#include "blueprint_CanvasView.h" -#include "blueprint_ImageView.h" -#include "blueprint_ScrollView.h" -#include "blueprint_ScrollViewContentShadowView.h" -#include "blueprint_TextView.h" -#include "blueprint_TextShadowView.h" - namespace blueprint { - namespace { - /** A quick helper for registering view types. */ template struct GenericViewFactory { - ViewManager::ViewPair operator()() { + ViewManager::ViewPair operator()() + { auto view = std::make_unique(); auto shadowView = std::make_unique(view.get()); - return {std::move(view), std::move(shadowView)}; + return { std::move(view), std::move(shadowView) }; } }; @@ -86,19 +68,19 @@ namespace blueprint // ShadowView::setProperty returns true when a layout prop // has been set. Otherwise set on the view and repaint - if(!shadow->setProperty(name, value)) { - view->setProperty(name, value); - view->repaint(); + if(! shadow->setProperty(name, value)) + { + view->setProperty(name, value); + view->repaint(); } } void ViewManager::setRawTextValue(ViewId viewId, const juce::String& value) { - View* view = getViewHandle(viewId).first; + auto* view = getViewHandle(viewId).first; if (auto* rawTextView = dynamic_cast(view)) { - // Update text rawTextView->setText(value); if (auto* parent = dynamic_cast(rawTextView->getParentComponent())) @@ -197,9 +179,7 @@ namespace blueprint // ScrollView mounting a juce::Viewport which is a juce::Component but // not a juce::View. Such elements aren't in our table and can be skipped if (auto* childView = dynamic_cast(child)) - { enumerateChildViewIds(ids, childView); - } } ids.push_back(v->getViewId()); @@ -207,14 +187,11 @@ namespace blueprint void ViewManager::performRootShadowTreeLayout() { - ShadowView* root = shadowViewTable[rootId].get(); - jassert(root); - - juce::Rectangle rootBounds = root->getAssociatedView()->getLocalBounds().toFloat(); - const float width = rootBounds.getWidth(); - const float height = rootBounds.getHeight(); + auto* root = shadowViewTable[rootId].get(); + jassert(root != nullptr); - root->computeViewLayout(width, height); + const auto rootBounds = root->getAssociatedView()->getLocalBounds().toFloat(); + root->computeViewLayout (rootBounds.getWidth(), rootBounds.getHeight()); root->flushViewLayout(); } @@ -261,7 +238,7 @@ namespace blueprint juce::Identifier ViewManager::getRootViewRefId() { View* root = shadowViewTable[rootId]->getAssociatedView(); - jassert(root); + jassert(root != nullptr); return root->getRefId(); } diff --git a/blueprint/core/blueprint_ViewManager.h b/blueprint/core/blueprint_ViewManager.h index 74750025..e4e86d01 100644 --- a/blueprint/core/blueprint_ViewManager.h +++ b/blueprint/core/blueprint_ViewManager.h @@ -1,43 +1,32 @@ -/* - ============================================================================== - - blueprint_ViewManager.h - Created: 21 May 2020 15:32:00am - - ============================================================================== -*/ - #pragma once -#include - -#include "blueprint_View.h" -#include "blueprint_ShadowView.h" - namespace blueprint { - /** - * ViewManager manages the set of Views held by a "root" View/ReactApplicationRoot instance. - * - * The ViewManager is responsible for adding/removing child Views to the root View's component - * tree and registering new view types. - * - * ViewManager also manages triggering the layout of all View nodes within the root View's - * tree, i.e. when a nodes is added/removed or has a property modified that requires a layout - * change (flexbox props etc). - * */ - class ViewManager + /** ViewManager manages the set of Views held by a "root" View/ReactApplicationRoot instance. + + The ViewManager is responsible for adding/removing child Views to the root View's component + tree and registering new view types. + + ViewManager also manages triggering the layout of all View nodes within the root View's + tree, i.e. when a nodes is added/removed or has a property modified that requires a layout + change (flexbox props etc). + */ + class ViewManager final { public: //============================================================================== - // We allow registering arbitrary view types with the React context by way of - // a "ViewFactory" here which is a user-defined function that produces a View - // and a corresponding ShadowView. - typedef std::pair, std::unique_ptr> ViewPair; - typedef std::function ViewFactory; + /** We allow registering arbitrary view types with the React context by way of + a "ViewFactory" here which is a user-defined function that produces a View + and a corresponding ShadowView. + */ + using ViewPair = std::pair, std::unique_ptr>; + using ViewFactory = std::function; //============================================================================== + /** */ explicit ViewManager(View* rootView); + + /** */ ~ViewManager() = default; /** Registers a new dynamic view type and its associated factory. */ @@ -52,9 +41,9 @@ namespace blueprint /** Calls View::setProperty on the requested View */ void setViewProperty(ViewId viewId, const juce::String& name, const juce::var& value); - /** Calls RawTextView::setText on the requested View. If the ViewId supplied is not the id of a RawTextView - * this is a no-op. - * */ + /** Calls RawTextView::setText on the requested View. + If the ViewId supplied is not the id of a RawTextView this is a no-op. + */ void setRawTextValue(ViewId viewId, const juce::String& value); /** Adds a child View to the given parent View */ @@ -63,32 +52,38 @@ namespace blueprint /** Removes a child View from the given parent View */ void removeChild (ViewId parentId, ViewId childId); - /** Recursively computes the shadow tree layout on the root ShadowView, then traverses the tree - flushing new layout bounds to the associated view components. + /** Recursively computes the shadow tree layout on the root ShadowView, + then traverses the tree flushing new layout bounds to the associated view components. */ void performRootShadowTreeLayout(); - /** Empties the internal view tables, deallocating every view except the root in the ViewManager heirarchy. */ + /** Empties the internal view tables, deallocating every view + except the root in the ViewManager heirarchy. + */ void clearViewTables(); - //============================================================================== private: + //============================================================================== + ViewId rootId; + std::map> viewTable; + std::map> shadowViewTable; + std::map viewFactories; + + //============================================================================== void enumerateChildViewIds (std::vector& ids, View* v); /** Returns a pointer pair to the view associated to the given id. */ std::pair getViewHandle (ViewId viewId); - /** Walks the view table, returning the first view with a `refId` - * whose value equals the provided id. - */ + /** Walks the view table, returning the first view with + a `refId` whose value equals the provided id. + */ View* getViewByRefId (const juce::Identifier& refId); /** Helper function to return refId of the root view */ juce::Identifier getRootViewRefId(); - ViewId rootId; - std::map> viewTable; - std::map> shadowViewTable; - std::map viewFactories; + //============================================================================== + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ViewManager) }; } diff --git a/blueprint/internal/BeginIgnoringThirdPartyWarnings.h b/blueprint/internal/BeginIgnoringThirdPartyWarnings.h new file mode 100644 index 00000000..68d67ad1 --- /dev/null +++ b/blueprint/internal/BeginIgnoringThirdPartyWarnings.h @@ -0,0 +1,20 @@ +// What the hell is wrong with library authors who don't run CI builds with strict warning checks +// and keep their code clean and tidy!?!? As well as missing their own bugs, it means that users of +// their library then hit a million warnings, so they reduce THEIR warning level to avoid the noise, +// (because they'll be too lazy/busy to fix it, or at least to add pragmas like this), and everyone's +// code just ends up a little bit worse.. [/rant] +JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wall" "-Wextra-semi" "-Wsign-conversion" "-Wswitch-enum" "-Wshorten-64-to-32" + "-Wzero-as-null-pointer-constant" "-Wunused-parameter" "-Wconversion" "-Wunused-variable" + "-Wredundant-decls") + +#if JUCE_MSVC + #pragma warning (push) +#endif + +JUCE_IGNORE_MSVC (4018 4100 4127 4244 4459 4505 4611 4702) + +#if __clang_major__ > 10 + #pragma clang diagnostic ignored "-Wc++98-compat-extra-semi" + #pragma clang diagnostic ignored "-Wimplicit-int-conversion" + #pragma clang diagnostic ignored "-Wimplicit-float-conversion" +#endif diff --git a/blueprint/internal/EndIgnoringThirdPartyWarnings.h b/blueprint/internal/EndIgnoringThirdPartyWarnings.h new file mode 100644 index 00000000..aa0d2dda --- /dev/null +++ b/blueprint/internal/EndIgnoringThirdPartyWarnings.h @@ -0,0 +1,7 @@ +JUCE_END_IGNORE_WARNINGS_GCC_LIKE +JUCE_END_IGNORE_WARNINGS_MSVC + +#undef min +#undef max +#undef MIN +#undef MAX diff --git a/blueprint/tests/blueprint_EcmascriptEngineTests.cpp b/blueprint/tests/blueprint_EcmascriptEngineTests.cpp index f41813d3..fedd2e98 100644 --- a/blueprint/tests/blueprint_EcmascriptEngineTests.cpp +++ b/blueprint/tests/blueprint_EcmascriptEngineTests.cpp @@ -1,14 +1,5 @@ -/* - ============================================================================== - - blueprint_EcmascriptEngineTests.cpp - Created: 26 Oct 2019 3:47:39pm - - ============================================================================== -*/ - - -class EcmascriptEngineEvaluateTest : public juce::UnitTest +//============================================================================== +class EcmascriptEngineEvaluateTest final : public juce::UnitTest { public: EcmascriptEngineEvaluateTest() @@ -19,16 +10,17 @@ class EcmascriptEngineEvaluateTest : public juce::UnitTest blueprint::EcmascriptEngine engine; beginTest ("Numbers"); - expect (5 == (int) engine.evaluate("2 + 3;")); - expect (6 == (int) engine.evaluate("2 * 3;")); - expect (4 == (int) engine.evaluate("Math.pow(2, 2);")); + expect (static_cast (engine.evaluate("2 + 3;")) == 5); + expect (static_cast (engine.evaluate("2 * 3;")) == 6); + expect (static_cast (engine.evaluate("Math.pow(2, 2);")) == 7); beginTest ("Strings"); - expect (juce::String("hey") == engine.evaluate("['h', 'e', 'y'].join('');").toString()); + expect (engine.evaluate("['h', 'e', 'y'].join('');").toString() == "hey"); } }; -class EcmascriptEngineNativeFunctionTest : public juce::UnitTest +//============================================================================== +class EcmascriptEngineNativeFunctionTest final : public juce::UnitTest { public: EcmascriptEngineNativeFunctionTest() @@ -40,41 +32,36 @@ class EcmascriptEngineNativeFunctionTest : public juce::UnitTest beginTest ("Global function"); - engine.registerNativeMethod("myMultiply", [](void* stash, const juce::var::NativeFunctionArgs& args) { - EcmascriptEngineNativeFunctionTest* self = reinterpret_cast(stash); + engine.registerNativeMethod ("myMultiply", + [&] (const juce::var::NativeFunctionArgs& args) + { + expect (args.numArguments == 2); - jassert (self != nullptr); - self->expect(args.numArguments == 2); - - int left = args.arguments[0]; - int right = args.arguments[1]; - - return juce::var(left * right); - }, (void *) this); + return static_cast (args.arguments[0]) * static_cast (args.arguments[1]); + }); - expect (6 == (int) engine.evaluate("myMultiply(2, 3);")); - expect (4 == (int) engine.evaluate("this.myMultiply(2, 2);")); + expect (static_cast (engine.evaluate ("myMultiply(2, 3);")) == 6); + expect (static_cast (engine.evaluate ("this.myMultiply(2, 2);")) == 4); beginTest ("Namespaced function"); engine.registerNativeProperty("Blueprint", juce::JSON::parse("{}")); - engine.registerNativeMethod("Blueprint", "squareIt", [](void* stash, const juce::var::NativeFunctionArgs& args) { - EcmascriptEngineNativeFunctionTest* self = reinterpret_cast(stash); - jassert (self != nullptr); - self->expect(args.numArguments == 1); + engine.registerNativeMethod ("Blueprint", "squareIt", + [&] (const juce::var::NativeFunctionArgs& args) + { + expect (args.numArguments == 1); - int left = args.arguments[0]; - - return juce::var(left * left); - }, (void *) this); + return juce::square (static_cast (args.arguments[0])); + }); - expect (4 == (int) engine.evaluate("Blueprint.squareIt(2);")); - expect (9 == (int) engine.evaluate("this.Blueprint.squareIt(3);")); + expect (4 == static_cast (engine.evaluate ("Blueprint.squareIt(2);"))); + expect (9 == static_cast (engine.evaluate ("this.Blueprint.squareIt(3);"))); } }; -class EcmascriptEngineNativePropertyTest : public juce::UnitTest +//============================================================================== +class EcmascriptEngineNativePropertyTest final : public juce::UnitTest { public: EcmascriptEngineNativePropertyTest() @@ -85,21 +72,21 @@ class EcmascriptEngineNativePropertyTest : public juce::UnitTest blueprint::EcmascriptEngine engine; beginTest ("Global property"); - engine.registerNativeProperty("BlueprintNative", juce::JSON::parse("{}")); - engine.registerNativeProperty("DOUBLE_PI", 3.14159 * 2.0); - engine.registerNativeProperty("PLUGIN_VERSION", "1.3.5"); + engine.registerNativeProperty ("BlueprintNative", juce::JSON::parse ("{}")); + engine.registerNativeProperty ("DOUBLE_PI", juce::MathConstants::twoPi); + engine.registerNativeProperty ("PLUGIN_VERSION", "1.3.5"); - expect (3.14159 * 2.0 == (double) engine.evaluate("DOUBLE_PI;")); - expect (juce::String("1.3.5") == engine.evaluate("PLUGIN_VERSION").toString()); - expect (engine.evaluate("BlueprintNative").isObject()); + expect (static_cast (engine.evaluate ("DOUBLE_PI;")) == juce::MathConstants::twoPi); + expect (engine.evaluate ("PLUGIN_VERSION").toString() == "1.3.5"); + expect (engine.evaluate ("BlueprintNative").isObject()); beginTest ("Namespaced property"); - engine.registerNativeProperty("BlueprintNative", "Constants", juce::JSON::parse("{}")); - engine.registerNativeProperty("BlueprintNative.Constants", "PLUGIN_VERSION", "1.3.5"); - engine.registerNativeProperty("BlueprintNative.Constants", "PLUGIN_NAME", "Temper"); + engine.registerNativeProperty ("BlueprintNative", "Constants", juce::JSON::parse("{}")); + engine.registerNativeProperty ("BlueprintNative.Constants", "PLUGIN_VERSION", "1.3.5"); + engine.registerNativeProperty ("BlueprintNative.Constants", "PLUGIN_NAME", "Temper"); - expect (juce::String("1.3.5") == engine.evaluate("BlueprintNative.Constants.PLUGIN_VERSION").toString()); - expect (juce::String("Temper") == engine.evaluate("BlueprintNative.Constants.PLUGIN_NAME").toString()); + expect (engine.evaluate ("BlueprintNative.Constants.PLUGIN_VERSION").toString() == "1.3.5"); + expect (engine.evaluate ("BlueprintNative.Constants.PLUGIN_NAME").toString() == "Temper"); auto constants = engine.evaluate("BlueprintNative.Constants"); expect (constants.isObject()); @@ -107,14 +94,15 @@ class EcmascriptEngineNativePropertyTest : public juce::UnitTest auto* obj = constants.getDynamicObject(); expect (obj != nullptr); - expect (obj->hasProperty("PLUGIN_VERSION")); - expect (obj->hasProperty("PLUGIN_NAME")); - expect (juce::String("1.3.5") == obj->getProperty("PLUGIN_VERSION").toString()); - expect (juce::String("Temper") == obj->getProperty("PLUGIN_NAME").toString()); + expect (obj->hasProperty ("PLUGIN_VERSION")); + expect (obj->hasProperty ("PLUGIN_NAME")); + expect (obj->getProperty ("PLUGIN_VERSION").toString() == "1.3.5"); + expect (obj->getProperty ("PLUGIN_NAME").toString() == "Temper"); } }; -class EcmascriptEngineInvokeTest : public juce::UnitTest +//============================================================================== +class EcmascriptEngineInvokeTest final : public juce::UnitTest { public: EcmascriptEngineInvokeTest() @@ -125,120 +113,156 @@ class EcmascriptEngineInvokeTest : public juce::UnitTest blueprint::EcmascriptEngine engine; beginTest ("Invoking builtins"); - expect (juce::String("*") == engine.invoke("String.fromCharCode", 42).toString()); - expect (1 == (int) engine.invoke("parseInt", 1.00031439, 10)); - expect (1 == (int) engine.invoke("Math.abs", -1)); + expect (engine.invoke ("String.fromCharCode", 42).toString() == "*"); + expect (static_cast (engine.invoke("parseInt", 1.00031439, 10)) == 1); + expect (static_cast (engine.invoke("Math.abs", -1)) == 1); beginTest ("Invoking native methods"); - engine.registerNativeProperty("BlueprintNative", juce::JSON::parse("{}")); + engine.registerNativeProperty ("BlueprintNative", juce::JSON::parse ("{}")); + + engine.registerNativeMethod ("BlueprintNative", "squareIt", + [&] (const juce::var::NativeFunctionArgs& args) + { + expect (args.numArguments == 1); - engine.registerNativeMethod("BlueprintNative", "squareIt", [](void* /* stash */, const juce::var::NativeFunctionArgs& args) { - int left = args.arguments[0]; - return juce::var(left * left); + return juce::square (static_cast (args.arguments[0])); }); - expect (4 == (int) engine.invoke("BlueprintNative.squareIt", 2)); - expect (9 == (int) engine.invoke("BlueprintNative.squareIt", 3)); + expect (static_cast (engine.invoke ("BlueprintNative.squareIt", 2)) == 4); + expect (static_cast (engine.invoke ("BlueprintNative.squareIt", 3)) == 9); } }; -class EcmascriptEngineErrorHandlerTest : public juce::UnitTest +//============================================================================== +class EcmascriptEngineErrorHandlerTest final : public juce::UnitTest { public: EcmascriptEngineErrorHandlerTest() : juce::UnitTest ("Testing error handler interface") {} - template - void testUncaughtError(T&& fn, Args... args) + void runTest() override + { + testParseErrors(); + testRuntimeErrors(); + } + +private: + template + void testUncaughtError (Callable&& fn, Args... args) { blueprint::EcmascriptEngine engine; bool didThrow = false; - try { - std::invoke(fn, engine, std::forward(args)...); - } catch (const std::runtime_error& e) { + try + { + std::invoke (fn, engine, std::forward (args)...); + } + catch (...) + { didThrow = true; } - expect(didThrow); + expect (didThrow); } - template - void testCaughtError(T&& fn, Args... args) + template + void testCaughtError (Callable&& fn, Args... args) { blueprint::EcmascriptEngine engine; bool didThrow = false; - engine.onUncaughtError = [&didThrow](const juce::String& msg, const juce::String& trace) { + engine.onUncaughtError = [&] (const juce::String& msg, const juce::String& trace) + { + juce::ignoreUnused (msg, trace); + didThrow = true; }; - std::invoke(fn, engine, std::forward(args)...); - expect(didThrow); + std::invoke (fn, engine, std::forward (args)...); + + expect (didThrow); } - void runTest() override + void testParseErrors() { - beginTest("Parse errors"); - testUncaughtError(&blueprint::EcmascriptEngine::evaluate, "1 + 2 + "); - testCaughtError(&blueprint::EcmascriptEngine::evaluate, "1 + 2 + "); - testUncaughtError(&blueprint::EcmascriptEngine::invoke, "Blueprint.1+", 1); - testCaughtError(&blueprint::EcmascriptEngine::invoke, "Blueprint.1+", 1); - - testUncaughtError([](blueprint::EcmascriptEngine& engine) { - engine.registerNativeMethod("global[1 + 2 +]", "Noop", [](void *, const juce::var::NativeFunctionArgs&) { - // Noop + beginTest ("Parse errors"); + + testUncaughtError (&blueprint::EcmascriptEngine::evaluate, juce::String ("1 + 2 + ")); + //testCaughtError (&blueprint::EcmascriptEngine::evaluate, "1 + 2 + "); + + //testUncaughtError (&blueprint::EcmascriptEngine::invoke, "Blueprint.1+", 1); + //testCaughtError (&blueprint::EcmascriptEngine::invoke, "Blueprint.1+", 1); + + testUncaughtError ([] (blueprint::EcmascriptEngine& engine) + { + engine.registerNativeMethod ("global[1 + 2 +]", "Noop", + [&] (const juce::var::NativeFunctionArgs&) + { return juce::var::undefined(); - }, nullptr); + }); }); - testCaughtError([](blueprint::EcmascriptEngine& engine) { - engine.registerNativeMethod("global[1 + 2 +]", "Noop", [](void *, const juce::var::NativeFunctionArgs&) { - // Noop + testCaughtError ([] (blueprint::EcmascriptEngine& engine) + { + engine.registerNativeMethod ("global[1 + 2 +]", "Noop", + [&] (const juce::var::NativeFunctionArgs&) + { return juce::var::undefined(); - }, nullptr); + }); }); - testUncaughtError([](blueprint::EcmascriptEngine& engine) { - engine.registerNativeProperty("global[1 + 2 +]", "Noop", 42); + testUncaughtError ([] (blueprint::EcmascriptEngine& engine) + { + engine.registerNativeProperty ("global[1 + 2 +]", "Noop", 42); }); - testCaughtError([](blueprint::EcmascriptEngine& engine) { - engine.registerNativeProperty("global[1 + 2 +]", "Noop", 42); + testCaughtError ([] (blueprint::EcmascriptEngine& engine) + { + engine.registerNativeProperty ("global[1 + 2 +]", "Noop", 42); }); + } + + void testRuntimeErrors() + { + beginTest ("Runtime errors"); + + //testUncaughtError (&blueprint::EcmascriptEngine::evaluate, "doesNotExist();"); + //testCaughtError (&blueprint::EcmascriptEngine::evaluate, "doesNotExist();"); - beginTest("Runtime errors"); - testUncaughtError(&blueprint::EcmascriptEngine::evaluate, "doesNotExist();"); - testCaughtError(&blueprint::EcmascriptEngine::evaluate, "doesNotExist();"); - testUncaughtError(&blueprint::EcmascriptEngine::invoke, "Blueprint[doesNotExist()]", 1); - testCaughtError(&blueprint::EcmascriptEngine::invoke, "Blueprint[doesNotExist()]", 1); + //testUncaughtError (&blueprint::EcmascriptEngine::invoke, "Blueprint[doesNotExist()]", 1); + //testCaughtError (&blueprint::EcmascriptEngine::invoke, "Blueprint[doesNotExist()]", 1); - testUncaughtError([](blueprint::EcmascriptEngine& engine) { - engine.registerNativeMethod("global[doesNotExist()]", "Noop", [](void *, const juce::var::NativeFunctionArgs&) { - // Noop + testUncaughtError ([] (blueprint::EcmascriptEngine& engine) + { + engine.registerNativeMethod ("global[doesNotExist()]", "Noop", + [&] (const juce::var::NativeFunctionArgs&) + { return juce::var::undefined(); - }, nullptr); + }); }); - testCaughtError([](blueprint::EcmascriptEngine& engine) { - engine.registerNativeMethod("global[doesNotExist()]", "Noop", [](void *, const juce::var::NativeFunctionArgs&) { - // Noop + testCaughtError ([] (blueprint::EcmascriptEngine& engine) + { + engine.registerNativeMethod ("global[doesNotExist()]", "Noop", + [&] (const juce::var::NativeFunctionArgs&) + { return juce::var::undefined(); - }, nullptr); + }); }); - testUncaughtError([](blueprint::EcmascriptEngine& engine) { - engine.registerNativeProperty("global[doesNotExist()]", "Noop", 42); + testUncaughtError ([] (blueprint::EcmascriptEngine& engine) + { + engine.registerNativeProperty ("global[doesNotExist()]", "Noop", 42); }); - testCaughtError([](blueprint::EcmascriptEngine& engine) { - engine.registerNativeProperty("global[doesNotExist()]", "Noop", 42); + testCaughtError ([] (blueprint::EcmascriptEngine& engine) + { + engine.registerNativeProperty ("global[doesNotExist()]", "Noop", 42); }); } }; -// Create static instances to register it with the array run by -// UnitTestRunner::runAllTests() +//============================================================================== static EcmascriptEngineEvaluateTest evTest; static EcmascriptEngineNativeFunctionTest fnTest; static EcmascriptEngineNativePropertyTest propTest; diff --git a/examples/TestRunner/Builds/LinuxMakefile/Makefile b/examples/TestRunner/Builds/LinuxMakefile/Makefile new file mode 100644 index 00000000..9523f817 --- /dev/null +++ b/examples/TestRunner/Builds/LinuxMakefile/Makefile @@ -0,0 +1,183 @@ +# Automatically generated makefile, created by the Projucer +# Don't edit this file! Your changes will be overwritten when you re-save the Projucer project! + +# build with "V=1" for verbose builds +ifeq ($(V), 1) +V_AT = +else +V_AT = @ +endif + +# (this disables dependency generation if multiple architectures are set) +DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) + +ifndef STRIP + STRIP=strip +endif + +ifndef AR + AR=ar +endif + +ifndef CONFIG + CONFIG=Debug +endif + +JUCE_ARCH_LABEL := $(shell uname -m) + +ifeq ($(CONFIG),Debug) + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Debug + JUCE_OUTDIR := build + + ifeq ($(TARGET_ARCH),) + TARGET_ARCH := + endif + + JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell pkg-config --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../../blueprint -I../../../../blueprint/duktape/src-noline -I../../../../blueprint/yoga -I../../../../ext/juce/modules $(CPPFLAGS) + JUCE_CPPFLAGS_CONSOLEAPP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" + JUCE_TARGET_CONSOLEAPP := TestRunner + + JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS) + JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++17 $(CXXFLAGS) + JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell pkg-config --libs alsa freetype2 libcurl) -fvisibility=hidden -lrt -ldl -lpthread -lGL $(LDFLAGS) + + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) +endif + +ifeq ($(CONFIG),Release) + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Release + JUCE_OUTDIR := build + + ifeq ($(TARGET_ARCH),) + TARGET_ARCH := + endif + + JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell pkg-config --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../../blueprint -I../../../../blueprint/duktape/src-noline -I../../../../blueprint/yoga -I../../../../ext/juce/modules $(CPPFLAGS) + JUCE_CPPFLAGS_CONSOLEAPP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" + JUCE_TARGET_CONSOLEAPP := TestRunner + + JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 $(CFLAGS) + JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++17 $(CXXFLAGS) + JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell pkg-config --libs alsa freetype2 libcurl) -fvisibility=hidden -lrt -ldl -lpthread -lGL $(LDFLAGS) + + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) +endif + +OBJECTS_CONSOLEAPP := \ + $(JUCE_OBJDIR)/Main_90ebc5c2.o \ + $(JUCE_OBJDIR)/include_blueprint_5c823fbd.o \ + $(JUCE_OBJDIR)/include_juce_audio_basics_8a4e984a.o \ + $(JUCE_OBJDIR)/include_juce_audio_devices_63111d02.o \ + $(JUCE_OBJDIR)/include_juce_audio_formats_15f82001.o \ + $(JUCE_OBJDIR)/include_juce_audio_processors_10c03666.o \ + $(JUCE_OBJDIR)/include_juce_core_f26d17db.o \ + $(JUCE_OBJDIR)/include_juce_cryptography_8cb807a8.o \ + $(JUCE_OBJDIR)/include_juce_data_structures_7471b1e3.o \ + $(JUCE_OBJDIR)/include_juce_events_fd7d695.o \ + $(JUCE_OBJDIR)/include_juce_graphics_f817e147.o \ + $(JUCE_OBJDIR)/include_juce_gui_basics_e3f79785.o \ + $(JUCE_OBJDIR)/include_juce_gui_extra_6dee1c1a.o \ + $(JUCE_OBJDIR)/include_juce_opengl_a8a032b.o \ + $(JUCE_OBJDIR)/include_juce_video_be78589.o \ + +.PHONY: clean all strip + +all : $(JUCE_OUTDIR)/$(JUCE_TARGET_CONSOLEAPP) + +$(JUCE_OUTDIR)/$(JUCE_TARGET_CONSOLEAPP) : $(OBJECTS_CONSOLEAPP) $(RESOURCES) + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors alsa freetype2 libcurl + @echo Linking "TestRunner - ConsoleApp" + -$(V_AT)mkdir -p $(JUCE_BINDIR) + -$(V_AT)mkdir -p $(JUCE_LIBDIR) + -$(V_AT)mkdir -p $(JUCE_OUTDIR) + $(V_AT)$(CXX) -o $(JUCE_OUTDIR)/$(JUCE_TARGET_CONSOLEAPP) $(OBJECTS_CONSOLEAPP) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + +$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling Main.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_CONSOLEAPP) $(JUCE_CFLAGS_CONSOLEAPP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_blueprint_5c823fbd.o: ../../JuceLibraryCode/include_blueprint.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_blueprint.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_CONSOLEAPP) $(JUCE_CFLAGS_CONSOLEAPP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_audio_basics_8a4e984a.o: ../../JuceLibraryCode/include_juce_audio_basics.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_audio_basics.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_CONSOLEAPP) $(JUCE_CFLAGS_CONSOLEAPP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_audio_devices_63111d02.o: ../../JuceLibraryCode/include_juce_audio_devices.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_audio_devices.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_CONSOLEAPP) $(JUCE_CFLAGS_CONSOLEAPP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_audio_formats_15f82001.o: ../../JuceLibraryCode/include_juce_audio_formats.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_audio_formats.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_CONSOLEAPP) $(JUCE_CFLAGS_CONSOLEAPP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_audio_processors_10c03666.o: ../../JuceLibraryCode/include_juce_audio_processors.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_audio_processors.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_CONSOLEAPP) $(JUCE_CFLAGS_CONSOLEAPP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_core_f26d17db.o: ../../JuceLibraryCode/include_juce_core.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_core.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_CONSOLEAPP) $(JUCE_CFLAGS_CONSOLEAPP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_cryptography_8cb807a8.o: ../../JuceLibraryCode/include_juce_cryptography.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_cryptography.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_CONSOLEAPP) $(JUCE_CFLAGS_CONSOLEAPP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_data_structures_7471b1e3.o: ../../JuceLibraryCode/include_juce_data_structures.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_data_structures.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_CONSOLEAPP) $(JUCE_CFLAGS_CONSOLEAPP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_events_fd7d695.o: ../../JuceLibraryCode/include_juce_events.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_events.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_CONSOLEAPP) $(JUCE_CFLAGS_CONSOLEAPP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_graphics_f817e147.o: ../../JuceLibraryCode/include_juce_graphics.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_graphics.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_CONSOLEAPP) $(JUCE_CFLAGS_CONSOLEAPP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_gui_basics_e3f79785.o: ../../JuceLibraryCode/include_juce_gui_basics.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_gui_basics.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_CONSOLEAPP) $(JUCE_CFLAGS_CONSOLEAPP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_gui_extra_6dee1c1a.o: ../../JuceLibraryCode/include_juce_gui_extra.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_gui_extra.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_CONSOLEAPP) $(JUCE_CFLAGS_CONSOLEAPP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_opengl_a8a032b.o: ../../JuceLibraryCode/include_juce_opengl.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_opengl.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_CONSOLEAPP) $(JUCE_CFLAGS_CONSOLEAPP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_video_be78589.o: ../../JuceLibraryCode/include_juce_video.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_video.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_CONSOLEAPP) $(JUCE_CFLAGS_CONSOLEAPP) -o "$@" -c "$<" + +clean: + @echo Cleaning TestRunner + $(V_AT)$(CLEANCMD) + +strip: + @echo Stripping TestRunner + -$(V_AT)$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) + +-include $(OBJECTS_CONSOLEAPP:%.o=%.d) diff --git a/examples/TestRunner/Builds/MacOSX/TestRunner.xcodeproj/project.pbxproj b/examples/TestRunner/Builds/MacOSX/TestRunner.xcodeproj/project.pbxproj index 2af53711..83e5f44e 100644 --- a/examples/TestRunner/Builds/MacOSX/TestRunner.xcodeproj/project.pbxproj +++ b/examples/TestRunner/Builds/MacOSX/TestRunner.xcodeproj/project.pbxproj @@ -562,6 +562,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "c++17"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; + CODE_SIGN_IDENTITY = ""; COMBINE_HIDPI_IMAGES = YES; CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/build/$(CONFIGURATION)"; COPY_PHASE_STRIP = NO; @@ -570,7 +571,6 @@ GCC_PREPROCESSOR_DEFINITIONS = ( "_DEBUG=1", "DEBUG=1", - "BLUEPRINT_INCLUDE_TESTS=1", "JUCER_XCODE_MAC_F6D2F4CF=1", "JUCE_APP_VERSION=1.0.0", "JUCE_APP_VERSION_HEX=0x10000", @@ -588,14 +588,23 @@ "../../JuceLibraryCode", "../../../../../blueprint", "../../../../blueprint/duktape/src-noline", + "../../../../blueprint/yoga", "../../../../ext/juce/modules", "$(inherited)", ); INSTALL_PATH = "/usr/bin"; MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_HEADER_SEARCH_PATHS = ( + "../../JuceLibraryCode", + "../../../../../blueprint", + "../../../../blueprint/duktape/src-noline", + "../../../../blueprint/yoga", + "../../../../ext/juce/modules", + ); PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.TestRunner; PRODUCT_NAME = "TestRunner"; USE_HEADERMAP = NO; + VALID_ARCHS = "i386 x86_64 arm64 arm64e"; }; name = Debug; }; @@ -605,6 +614,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "c++17"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; + CODE_SIGN_IDENTITY = ""; COMBINE_HIDPI_IMAGES = YES; CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/build/$(CONFIGURATION)"; DEAD_CODE_STRIPPING = YES; @@ -613,7 +623,6 @@ GCC_PREPROCESSOR_DEFINITIONS = ( "_NDEBUG=1", "NDEBUG=1", - "BLUEPRINT_INCLUDE_TESTS=1", "JUCER_XCODE_MAC_F6D2F4CF=1", "JUCE_APP_VERSION=1.0.0", "JUCE_APP_VERSION_HEX=0x10000", @@ -626,21 +635,29 @@ "JucePlugin_Build_Standalone=0", "JucePlugin_Build_Unity=0", ); - GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; HEADER_SEARCH_PATHS = ( "../../JuceLibraryCode", "../../../../../blueprint", "../../../../blueprint/duktape/src-noline", + "../../../../blueprint/yoga", "../../../../ext/juce/modules", "$(inherited)", ); INSTALL_PATH = "/usr/bin"; LLVM_LTO = YES; MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_HEADER_SEARCH_PATHS = ( + "../../JuceLibraryCode", + "../../../../../blueprint", + "../../../../blueprint/duktape/src-noline", + "../../../../blueprint/yoga", + "../../../../ext/juce/modules", + ); PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.TestRunner; PRODUCT_NAME = "TestRunner"; USE_HEADERMAP = NO; + VALID_ARCHS = "i386 x86_64 arm64 arm64e"; }; name = Release; }; @@ -666,13 +683,15 @@ CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - DEBUG_INFORMATION_FORMAT = "dwarf"; + CODE_SIGN_IDENTITY = ""; + DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; + ENABLE_TESTABILITY = NO; GCC_C_LANGUAGE_STANDARD = c11; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; GCC_MODEL_TUNING = G5; GCC_NO_COMMON_BLOCKS = YES; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; @@ -685,7 +704,8 @@ GCC_WARN_UNUSED_VARIABLE = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "TestRunner"; - WARNING_CFLAGS = -Wreorder; + SDKROOT = macosx; + WARNING_CFLAGS = "-Wreorder"; ZERO_LINK = NO; }; name = Debug; @@ -712,12 +732,15 @@ CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - DEBUG_INFORMATION_FORMAT = "dwarf"; + CODE_SIGN_IDENTITY = ""; + DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = NO; GCC_C_LANGUAGE_STANDARD = c11; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; GCC_MODEL_TUNING = G5; GCC_NO_COMMON_BLOCKS = YES; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; @@ -729,15 +752,12 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; PRODUCT_NAME = "TestRunner"; - WARNING_CFLAGS = -Wreorder; + SDKROOT = macosx; + WARNING_CFLAGS = "-Wreorder"; ZERO_LINK = NO; }; name = Release; }; - CEC829E360ED76CE9054739E = { - isa = PBXTargetDependency; - target = A114538912EBEBDD78192285; - }; 7DABD37909CE960B14F301DB = { isa = XCConfigurationList; buildConfigurations = ( @@ -824,13 +844,14 @@ 4AB011DC9BB41503981E7889 = { isa = PBXProject; buildConfigurationList = 7DABD37909CE960B14F301DB; - attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = ""; }; + attributes = { LastUpgradeCheck = 1220; ORGANIZATIONNAME = ""; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = 5E42D65D5EC8096837CD24E9; projectDirPath = ""; projectRoot = ""; targets = (A114538912EBEBDD78192285); + knownRegions = (en, Base); }; }; rootObject = 4AB011DC9BB41503981E7889; diff --git a/examples/TestRunner/Builds/VisualStudio2015/TestRunner.sln b/examples/TestRunner/Builds/VisualStudio2015/TestRunner.sln new file mode 100644 index 00000000..a14f99ae --- /dev/null +++ b/examples/TestRunner/Builds/VisualStudio2015/TestRunner.sln @@ -0,0 +1,20 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2015 + +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestRunner - ConsoleApp", "TestRunner_ConsoleApp.vcxproj", "{C4FAE1A4-2BA2-D846-22F6-E75A6C2B71A6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C4FAE1A4-2BA2-D846-22F6-E75A6C2B71A6}.Debug|x64.ActiveCfg = Debug|x64 + {C4FAE1A4-2BA2-D846-22F6-E75A6C2B71A6}.Debug|x64.Build.0 = Debug|x64 + {C4FAE1A4-2BA2-D846-22F6-E75A6C2B71A6}.Release|x64.ActiveCfg = Release|x64 + {C4FAE1A4-2BA2-D846-22F6-E75A6C2B71A6}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/examples/TestRunner/Builds/VisualStudio2015/TestRunner_ConsoleApp.vcxproj b/examples/TestRunner/Builds/VisualStudio2015/TestRunner_ConsoleApp.vcxproj new file mode 100644 index 00000000..8488d01a --- /dev/null +++ b/examples/TestRunner/Builds/VisualStudio2015/TestRunner_ConsoleApp.vcxproj @@ -0,0 +1,4507 @@ + + + + + + Debug + x64 + + + Release + x64 + + + + {C4FAE1A4-2BA2-D846-22F6-E75A6C2B71A6} + + + + Application + false + false + v140 + 8.1 + + + Application + false + true + v140 + 8.1 + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + .exe + $(SolutionDir)$(Platform)\$(Configuration)\ConsoleApp\ + $(Platform)\$(Configuration)\ConsoleApp\ + TestRunner + true + $(SolutionDir)$(Platform)\$(Configuration)\ConsoleApp\ + $(Platform)\$(Configuration)\ConsoleApp\ + TestRunner + true + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + + + + Disabled + ProgramDatabase + ..\..\JuceLibraryCode;..\..\..\..\..\blueprint;..\..\..\..\blueprint\duktape\src-noline;..\..\..\..\blueprint\yoga;..\..\..\..\ext\juce\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=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_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + true + NotUsing + $(IntDir)\ + $(IntDir)\ + $(IntDir)\ + Level4 + true + true + stdcpp17 + + + _DEBUG;%(PreprocessorDefinitions) + + + $(OutDir)\TestRunner.exe + true + libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries) + true + $(IntDir)\TestRunner.pdb + Console + true + + + true + $(IntDir)\TestRunner.bsc + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + + + + Full + ..\..\JuceLibraryCode;..\..\..\..\..\blueprint;..\..\..\..\blueprint\duktape\src-noline;..\..\..\..\blueprint\yoga;..\..\..\..\ext\juce\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=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_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) + MultiThreadedDLL + true + NotUsing + $(IntDir)\ + $(IntDir)\ + $(IntDir)\ + Level4 + true + true + stdcpp17 + + + NDEBUG;%(PreprocessorDefinitions) + + + $(OutDir)\TestRunner.exe + true + %(IgnoreSpecificDefaultLibraries) + false + $(IntDir)\TestRunner.pdb + Console + true + true + true + UseLinkTimeCodeGeneration + + + true + $(IntDir)\TestRunner.bsc + + + + + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/TestRunner/Builds/VisualStudio2015/TestRunner_ConsoleApp.vcxproj.filters b/examples/TestRunner/Builds/VisualStudio2015/TestRunner_ConsoleApp.vcxproj.filters new file mode 100644 index 00000000..06e7c1fc --- /dev/null +++ b/examples/TestRunner/Builds/VisualStudio2015/TestRunner_ConsoleApp.vcxproj.filters @@ -0,0 +1,7538 @@ + + + + + + {7B0CE45C-58A1-00B6-BEAF-02154911F346} + + + {B3859086-C922-2109-631A-F37FF1514174} + + + {0A55AC6D-FE7B-4F60-426F-A1B45CB84FA6} + + + {EDEB1ACF-581B-0F45-8B41-80F947C8991D} + + + {CD0A107B-7BEF-A124-8A82-DA3515DD5DE0} + + + {9188ED27-E978-77E3-8267-4A99EB71C5AF} + + + {C07A92F4-FF2A-C046-98BD-22874D9FAFDF} + + + {FA89ACDA-A95F-D683-04E7-B70F126059BB} + + + {F5813C39-E47A-8B26-1166-CBABE099189E} + + + {B3A9B616-07F8-9D0D-AEC6-A2D461BD062C} + + + {8A745399-4924-657C-AA50-4B12C0F414E0} + + + {95A829DD-71C2-86B8-ADED-6F93B607EACB} + + + {6CCEC4E9-5B88-5E0F-7A02-22512961CFEE} + + + {FD612129-C30D-B53A-AF56-21D82BFBD5FC} + + + {807723AF-94FC-73F7-4A7B-AEAA5A2B81D5} + + + {8ED7B476-6C0B-93EF-BEC3-D6E4BCBEA195} + + + {C25C51F5-3E42-2761-6FE0-C045BC63EC4F} + + + {E711B49F-8757-26C6-C7AC-864FF16D5E56} + + + {3F2A65CB-D78B-D3B7-61F2-3D6F339BC35D} + + + {B6B04A23-67E2-01FC-6F70-E13434AC2505} + + + {FB9953A0-26D1-262A-E287-70A08DBCBDE0} + + + {4F10E98E-EE67-D415-7EAC-995BF4263F32} + + + {536B69B1-98A9-67A9-352D-C605D8D6569A} + + + {302F5409-34EA-A122-680B-609CD2262CDD} + + + {9174B6C9-17AB-B7D2-EB3E-3291A278EB43} + + + {124BE91A-7982-8752-6457-D60361CD92C3} + + + {1EFD9C7B-362F-AF92-4AC0-3AF6AD08D815} + + + {B8F8BD1C-229E-6786-6973-C3C31A18A690} + + + {77FC750E-5278-A88C-BB3F-B809EA9C06CD} + + + {EB15509B-823B-BF38-3179-FB18F95282D5} + + + {3372498B-F460-6B2F-41DE-B5BE4FFB678F} + + + {E53BA6AE-9D56-0066-FF01-0C9147BF00EF} + + + {AF87CEBC-C0D7-A589-9049-B15C6645687B} + + + {376F9BBC-F1D8-4E71-50B7-ABCB49C6EFBF} + + + {0215397C-1A70-A977-769B-D1D31B870961} + + + {4C48575A-1246-809B-B88D-1CC8FF6970A3} + + + {C60893CE-39FB-125B-5410-373CA2806F8B} + + + {2D3DD65F-E36F-CE38-A439-68F98C4B5BAB} + + + {A12D9DBF-CF68-E916-BEA7-45BB02558AEB} + + + {E44C1A08-42E2-505C-5442-A444A89097B2} + + + {4B0BEA6C-11B2-A510-058A-D8AB0CA19665} + + + {DEBA36E3-DA48-ED52-89AB-46A7893583AD} + + + {E2779BFB-C707-9610-62EF-DFE9328C2A33} + + + {6C09BCF5-E3E8-7BE7-CA60-530972505C2C} + + + {09CF0A28-5987-CD9D-0857-72E7385C8820} + + + {D4F2394A-41B2-01E7-F98D-5EC34200BE34} + + + {9BA8E78E-127B-B60B-B5D1-0B7707AFF387} + + + {6717DD49-ABA1-723C-9C11-DD913B4E6AE9} + + + {78E462AB-FDB2-B5C7-EE85-0A481EBE86B3} + + + {B3A36CAA-036F-9732-DCE9-65D178ECA73C} + + + {22839F4D-A39B-877B-24DB-06AD5D71BCCC} + + + {E970EBF8-4CEB-0343-3078-CEFEA5216D3D} + + + {8BC4FD76-71A6-AD76-2FBE-453324E04CD4} + + + {13A9BAE8-AC0E-6462-917A-54B3DAC578EC} + + + {8AB4B714-214C-6C25-1FE5-1659771C1FE2} + + + {509B7440-F4D3-AE1A-57B8-1AE3FBE6F539} + + + {B5A2A875-E71A-AF49-1C03-AA571FE79CB8} + + + {D904D9B3-39AE-574B-17AC-018C1266CB3F} + + + {30A28EF3-E134-C0EC-D703-11D33ACE2FD0} + + + {1CFEE51C-8BBA-C12B-BBB7-179645CE50FE} + + + {F6EB5EFE-890D-6939-7077-558DCD7E56B4} + + + {C89B4AD4-5866-2A5C-9440-C13F99289E17} + + + {F3CCEAB8-7827-324F-74D6-43A27CF0B5AF} + + + {CDA93B11-BCE7-9107-A5D3-983B7A1B98C3} + + + {CAB5E31D-5D32-77BB-2876-F4F288931C7A} + + + {0554DA2F-7143-FC1A-9358-E1E7F1471DF1} + + + {A9BF640A-521B-6AAF-B02E-E14FB239068A} + + + {22523750-D699-0AD2-C065-D50C275FD84E} + + + {52CB90BF-9B54-43DE-98F7-16BC0C354B95} + + + {6BE140A8-1812-C201-DAD2-6C74513D3E30} + + + {3DF42454-F721-D872-BCA7-54791131BD45} + + + {9F5F18C7-4F0A-EA66-E43D-3D210E8CC30C} + + + {FB693CCF-39AD-994A-654E-B6F30076BFC8} + + + {02EC73A9-4696-9F40-F20B-0BD6B3525D8C} + + + {75567ADB-8F9D-19FA-E467-1B8F27F7544C} + + + {B0CE0219-08D5-60FC-CCEE-CF6A46B58762} + + + {DC994AC8-F0EC-AACD-4C48-DE30317D7F75} + + + {A8AA66CC-3D87-6FDE-A1B4-B887C8121C8F} + + + {006C149E-E6DC-83F1-E93C-AE10C5895570} + + + {C261113A-9C59-D724-DCDD-859CF67B9BE2} + + + {D7B09536-16DA-F0F4-AD74-03D913B385A5} + + + {5884DF92-9D52-5544-FF42-38632E5B65AA} + + + {9A1AE3EF-2A80-00A9-CED8-9F6882B7F0D7} + + + {4813E92F-51D1-F58C-585C-A87180EFF2F0} + + + {00BFED91-A90A-C4B2-27E9-7FD41FA77182} + + + {9BA63F38-E610-76BF-FF0E-94FB800A1FCA} + + + {C75C5513-B888-5B22-A4E3-D628A4E92CCA} + + + {571613DD-E1EF-A8E9-35CF-24185ADC93E8} + + + {D6B250F5-FFF3-4CE1-810E-E974A3E4DF68} + + + {E8AB9EA5-1A06-F188-A74A-A28D3D4500D1} + + + {35612D87-AC14-489B-34CE-4F81393F7F5D} + + + {C0E0C400-CE8F-50D4-55F2-4E4A6AD63499} + + + {E60D2C67-D5F8-64F6-0C0E-052DD497F551} + + + {451BDE86-8BF6-A12F-CA9A-CD61FD681002} + + + {34DF868B-7BA7-DB98-6939-2E01C64C4A89} + + + {0DD28281-C7E1-F390-BE65-C1D50BE8459D} + + + {EBB4193F-698C-5CA5-4ACF-4CBE2F0B50DF} + + + {41025821-15AB-5C66-A3FD-5422E5287629} + + + {BAFE1891-85B1-1831-72BF-36EBE6D1BF26} + + + {FD091712-AD52-E601-F4CD-3DB298E6DC23} + + + {101863B2-7B8B-A610-EBCD-94B870D9C6A4} + + + {D5AFD8F1-8B35-D770-6869-4D7357BECB4E} + + + {2BB10AFD-579D-265D-60DB-5789BE03A558} + + + {E8BB7803-D7E1-7FEB-5284-95545DD2A608} + + + {F85F9E97-B70B-4BBF-FFA2-AEDA6BCC9574} + + + {035F5ED5-797B-347B-9A1D-32E4616E3384} + + + {E6D67E45-2253-ACF6-E413-B02C53C40580} + + + {4D5E4404-B9E5-6940-E1CA-3D840E5202B8} + + + {8B8631A1-7FE2-3897-F798-EBC155F6FCC1} + + + {FE9D8E8B-2E7F-D4D9-9877-24703F74EBF8} + + + {9DB8125F-53E6-B090-CBFE-97E27CDDBD0A} + + + {6CAE32A5-FC60-7361-499A-8A460AFA309F} + + + {40731434-CE36-4C65-F807-BB8911C89B7E} + + + {D69D26BE-96E5-5F64-4D16-221DB335358C} + + + {9F6FF683-16F9-008D-B4D9-2CDB864F0BF4} + + + {EB58F05A-A968-CEBE-40C4-107CDD8F240F} + + + {5FCF559E-451A-CB1E-B177-A5DC5A0005BB} + + + {D78296AF-218E-B17E-7F8B-9D148601188D} + + + {B96EBA26-E668-FFAF-FC53-1EC1337DAF5A} + + + {D8532E5E-469E-5042-EFC8-238241704735} + + + {777B5D1D-9AF0-B22B-8894-034603EE97F5} + + + {8292766D-2459-2E7E-7615-17216318BA93} + + + {9BD56105-DAB4-EBD5-00DD-BD540E98FE88} + + + {10472B2C-9888-D269-F351-0D0AC3BCD16C} + + + {BF23FC10-1D57-2A9B-706F-6DD8A7B593D4} + + + {092EFC17-7C95-7E04-0ACA-0D61A462EE81} + + + {285118C6-8FDA-7DCE-BEF4-FFB2120876C5} + + + {69ED6B61-9B8D-D47E-E4A6-2E9F9A94A75A} + + + {7CDB7CD1-BB96-F593-3C78-1E06182B5839} + + + {B0A708DE-B4CF-196B-14FB-DC8221509B8E} + + + {34F46ADE-EE31-227A-A69E-7732E70145F1} + + + {BB9B3C77-17FB-E994-8B75-88F1727E4655} + + + {C0971D77-2F14-190A-E2AE-89D6285F4D5A} + + + {AABEA333-6524-8891-51C7-6DAEB5700628} + + + {F2D29337-983E-BAD7-7B5C-E0AB3D53D404} + + + {C674B0FB-1FC0-2986-94B1-083845018994} + + + {0AFC1CE8-F6E6-9817-8C21-8432B2A375DA} + + + {0D1AF264-3AC1-78A2-B2A4-AE6171F9194A} + + + {9A5DB854-CFFB-5F88-C566-0E10F994DDB3} + + + {38A5DDC7-416E-548F-39DA-887875FE6B20} + + + {980FE2DB-05D3-5FDA-79DA-067A56F5D19D} + + + {F336DC25-747A-0663-93D6-E3EB9AA0CBF8} + + + {7D78546A-80FC-4DCA-00B9-F191F0AB2179} + + + {9EB3EC7F-2AB7-DDAA-3C05-DF382B728D3F} + + + {6B9FBFDC-1D10-6246-356D-00FF4535CECB} + + + {D6FCFC8E-7136-9109-78C0-91A3EB4C443F} + + + {EBF18AC1-F0ED-937A-2824-4307CE2ADAF7} + + + {5A0F7922-2EFB-6465-57E4-A445B804EFB5} + + + {4EC45416-0E7C-7567-6F75-D0C8CEE7DC4F} + + + {C2985031-0496-55B5-41A8-BAB99E53D89D} + + + {FB4AB426-7009-0036-BB75-E34256AA7C89} + + + {E684D858-09E8-0251-8E86-5657129641E1} + + + {1EF1BF17-F941-243A-04D1-EE617D140CBA} + + + {344DB016-679C-FBD0-3EC6-4570C47522DE} + + + {3D9758A0-9359-1710-87C1-05D475C08B17} + + + {E824435F-FC7B-10BE-5D1A-5DACC51A8836} + + + {86737735-F6BA-F64A-5EC7-5C9F36755F79} + + + {4DC60E78-BBC0-B540-63A2-37E14ABBEF09} + + + {80C72173-A1E1-C3C5-9288-B889CE2EAFEA} + + + {4138B955-AA0B-FA86-DBF9-404CAFFFA866} + + + {2B4166B8-F470-F07C-4F51-D2DAAAECBB18} + + + {9C295115-C0CD-3129-1C4D-FB53299B23FB} + + + {65526A8B-3447-9DF0-FD5D-00D111126027} + + + {A54A1F5C-F32F-F97B-9E8A-69922B770A54} + + + {B90A44F3-B62D-B5C0-81A2-683D2650AEE6} + + + {DAF30656-5915-0E45-C4E4-54439617D525} + + + {9266EA90-6A0A-5DDB-9CB7-966BEF03BA5C} + + + {9C713CBA-A9E2-5F4E-F83C-2CAB8533913C} + + + {63571A07-9AA3-5BB0-1103-0B42A2E6BC9E} + + + {314F43F2-BC8F-B464-EAE7-86B9675454E9} + + + {874C5D0C-6D29-68EE-38BB-26200B56BC89} + + + {86BAA7A7-DC50-35B6-910B-932AEAF257F2} + + + {6B7BE34D-1BC1-C7B9-111F-C55CA8250943} + + + {9B6B6D54-D378-80C2-8CC9-D1D8FB44C2A8} + + + {D0584AC3-6837-14F6-90BF-5EA604D1F074} + + + {794B64EC-B809-32E3-AD00-4EE6A74802CA} + + + {67BE498C-9E1F-C73A-B99A-387C034CE680} + + + {42F7BE9D-3C8A-AE26-289B-8F355C068036} + + + {7868764A-6572-381A-906C-9C26792A4C29} + + + {03678508-A517-48BB-FB4A-485628C34E08} + + + {07D27C1D-3227-F527-356C-17DA11551A99} + + + {6146D580-99D2-A6C8-5908-30DC355BB6BA} + + + {C67003E8-BEA8-2188-F4B3-A122F4B4FA3F} + + + {09B91E68-1FF4-C7ED-9055-D4D96E66A0BA} + + + {30B3DA63-C1E4-F2EA-CEF0-8035D8CBFF64} + + + {4F24EEED-AA33-AC6C-9A39-72E71CF83EF0} + + + {0F70B1A9-BB50-23F5-2AE7-F95E51A00389} + + + {D4C8DC40-2CD2-04B6-05D0-1E7A88841390} + + + {58BED6AF-DB89-7560-B2B8-D937C1C0825A} + + + {B958F86B-6926-8D9B-2FC6-8BFD4BDC72C9} + + + {DB624F7D-D513-25AC-C13C-B9062EB3BEEE} + + + {89AA9B6C-4029-A34F-C1B0-3B5D8691F4D4} + + + {1A7F541C-B032-9C66-C320-A13B2A8A9866} + + + {4BAB7C18-51AB-0D9D-83CD-9C37F28D2E38} + + + {5523922E-8B0C-A52B-477C-752C09F8197F} + + + {857B6D8B-0ECB-FE9E-D1EB-D5E45E72F057} + + + {BAA582FA-40B7-320E-EE7A-4C3892C7BE72} + + + {89B3E447-34BE-C691-638E-09796C6B647E} + + + {9BE78436-DBF4-658C-579B-ED19FFD0EB5D} + + + {21E7FA61-9E0A-4BA1-04B7-AF47AFA9CB8B} + + + {632B4C79-AF7D-BFB5-D006-5AE67F607130} + + + {B10E20C2-4583-2B79-60B7-FE4D4B044313} + + + {CFB54F15-8A8A-0505-9B7F-ECA41CEE38E8} + + + {911F0159-A7A8-4A43-3FD4-154F62F4A44B} + + + {9D5816C2-E2B2-2E3F-B095-AC8BD1100D29} + + + {3FDCD000-763F-8477-9AF8-70ABA2E91E5E} + + + {0947506F-66FA-EF8D-8A4E-4D48BCDBB226} + + + {E4B6AED3-F54C-3FF2-069F-640BACAE0E08} + + + {D5EADBCC-6A1C-C940-0206-26E49110AF08} + + + {D27DC92D-5BEB-9294-DCD1-81D54E245AD5} + + + {BCD73D20-42B1-6CDB-DE66-B06236A60F47} + + + {20DC13F6-2369-8841-9F0B-D13FA14EEE74} + + + {A302A8DB-120F-9EBB-A3D5-2C29963AA56B} + + + {45489C2A-6E0E-CCDC-6638-0DACEEB63CCA} + + + {F1B90726-DB55-0293-BFAF-C65C7DF5489C} + + + {2C55FD42-0ACD-B0B8-7EAE-EB17F09BAEEC} + + + {B68CD2B2-701F-9AB7-4638-2485D6E06BCF} + + + {B0B7C78E-729E-0FFA-D611-82AE8BC7FE2C} + + + {0A4F7E12-220C-14EF-0026-9C0629FA9C17} + + + {37F49E10-4E62-6D5C-FF70-722D0CA3D97E} + + + {160D9882-0F68-278D-C5F9-8960FD7421D2} + + + {4CED05DA-E0A2-E548-F753-1F2EF299A8E3} + + + {294E4CD5-B06F-97D1-04A3-51871CEA507C} + + + {77228F15-BD91-06FF-2C7E-0377D25C2C94} + + + {5CB531E6-BF9A-2C50-056C-EE5A525D28D3} + + + {E4EA47E5-B41C-2A19-1783-7E9104096ECD} + + + {B331BC33-9770-3DB5-73F2-BC2469ECCF7F} + + + {46A17AC9-0BFF-B5CE-26D6-B9D1992C88AC} + + + {D90A8DF7-FBAB-D363-13C0-6707BB22B72B} + + + {8AE77C40-6839-EC37-4515-BD3CC269BCE4} + + + {0EAD99DB-011F-09E5-45A2-365F646EB004} + + + {F57590C6-3B90-1BE1-1006-488BA33E8BD9} + + + {7C319D73-0D93-5842-0874-398D2D3038D5} + + + {2CB4DB0C-DD3B-6195-D822-76EC7A5C88D2} + + + {FE3CB19C-EF43-5CF5-DAF0-09D4E43D0AB9} + + + {FE7E6CD5-C7A0-DB20-4E7E-D6E7F08C4578} + + + {895C2D33-E08D-B1BA-BB36-FC4CA65090C8} + + + {D64A57DB-A956-5519-1929-1D929B56E1B0} + + + {5A99CC24-AC45-7ED6-C11A-B8B86E76D884} + + + {7A131EEC-25A7-22F6-2839-A2194DDF3007} + + + {EA9DB76C-CEF7-6BFC-2070-28B7DF8E8063} + + + {3C206A40-6F1B-E683-ACF1-DEC3703D0140} + + + {DF95D4BF-E18C-125A-5EBB-8993A06E232C} + + + {118946F2-AC24-0F09-62D5-753DF87A60CD} + + + {07329F9B-7D3D-CEB3-C771-714842076140} + + + {08BBBECB-B0D1-7611-37EC-F57E1D0CE2A2} + + + {268E8F2A-980C-BF2F-B161-AACABC9D91F3} + + + {A4D76113-9EDC-DA60-D89B-5BACF7F1C426} + + + {1A9221A3-E993-70B2-6EA2-8E1DB5FF646A} + + + {CC2DAD7A-5B45-62AB-4C54-6FE6B1AE86C3} + + + {599138A9-EA63-53DD-941F-ABE3412D2949} + + + {422A4014-8587-1AE6-584F-32A62613A37B} + + + {9FBFF5E5-56F1-34A1-2C85-F760DA2B1EB7} + + + {CB8DF3B2-0409-6D59-C5D4-A034EBB7F973} + + + {7774F72F-C951-B8AB-E927-E34AD23C52C8} + + + {658BADF8-7095-C722-F9EC-9F36E8818187} + + + {2C58F450-CD01-0231-2F16-0D4D68565164} + + + {FE955B6B-68AC-AA07-70D8-2413F6DB65C8} + + + {7ED5A90E-41AF-A1EF-659B-37CEEAB9BA61} + + + + + TestRunner\Source + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\duktape\examples\alloc-hybrid + + + JUCE Modules\blueprint\duktape\examples\alloc-logging + + + JUCE Modules\blueprint\duktape\examples\alloc-torture + + + JUCE Modules\blueprint\duktape\examples\cmdline + + + JUCE Modules\blueprint\duktape\examples\cmdline + + + JUCE Modules\blueprint\duktape\examples\codepage-conv + + + JUCE Modules\blueprint\duktape\examples\codepage-conv + + + JUCE Modules\blueprint\duktape\examples\cpp-exceptions + + + JUCE Modules\blueprint\duktape\examples\debug-trans-dvalue + + + JUCE Modules\blueprint\duktape\examples\debug-trans-dvalue + + + JUCE Modules\blueprint\duktape\examples\debug-trans-socket + + + JUCE Modules\blueprint\duktape\examples\debug-trans-socket + + + JUCE Modules\blueprint\duktape\examples\dummy-date-provider + + + JUCE Modules\blueprint\duktape\examples\eval + + + JUCE Modules\blueprint\duktape\examples\eventloop + + + JUCE Modules\blueprint\duktape\examples\eventloop + + + JUCE Modules\blueprint\duktape\examples\eventloop + + + JUCE Modules\blueprint\duktape\examples\eventloop + + + JUCE Modules\blueprint\duktape\examples\eventloop + + + JUCE Modules\blueprint\duktape\examples\guide + + + JUCE Modules\blueprint\duktape\examples\guide + + + JUCE Modules\blueprint\duktape\examples\guide + + + JUCE Modules\blueprint\duktape\examples\hello + + + JUCE Modules\blueprint\duktape\examples\jxpretty + + + JUCE Modules\blueprint\duktape\examples\sandbox + + + JUCE Modules\blueprint\duktape\extras\alloc-pool + + + JUCE Modules\blueprint\duktape\extras\alloc-pool + + + JUCE Modules\blueprint\duktape\extras\cbor + + + JUCE Modules\blueprint\duktape\extras\cbor + + + JUCE Modules\blueprint\duktape\extras\console + + + JUCE Modules\blueprint\duktape\extras\console + + + JUCE Modules\blueprint\duktape\extras\duk-v1-compat + + + JUCE Modules\blueprint\duktape\extras\duk-v1-compat + + + JUCE Modules\blueprint\duktape\extras\logging + + + JUCE Modules\blueprint\duktape\extras\logging + + + JUCE Modules\blueprint\duktape\extras\minimal-printf + + + JUCE Modules\blueprint\duktape\extras\minimal-printf + + + JUCE Modules\blueprint\duktape\extras\module-duktape + + + JUCE Modules\blueprint\duktape\extras\module-duktape + + + JUCE Modules\blueprint\duktape\extras\module-node + + + JUCE Modules\blueprint\duktape\extras\module-node + + + JUCE Modules\blueprint\duktape\extras\print-alert + + + JUCE Modules\blueprint\duktape\extras\print-alert + + + JUCE Modules\blueprint\duktape\src + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-noline + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\tests + + + JUCE Modules\blueprint\yoga\benchmark + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\lyra + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\lyra + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\lyra + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\lyra + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\codegear + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\codegear + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\xcode\Samples\FrameworkSample + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\xcode\Samples\FrameworkSample + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\testutil\src\main\cpp\jni + + + JUCE Modules\blueprint\yoga\testutil\src\main\cpp\testutil + + + JUCE Modules\blueprint\yoga\util + + + JUCE Modules\blueprint\yoga\util + + + JUCE Modules\blueprint\yoga\yoga\event + + + JUCE Modules\blueprint\yoga\yoga\internal + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\YogaKit\Source + + + JUCE Modules\blueprint\yoga\YogaKit\Source + + + JUCE Modules\blueprint\yoga\YogaKit\Source + + + JUCE Modules\blueprint\yoga\YogaKit\Tests + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample\ViewControllers + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample\ViewControllers + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample\Views + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample + + + JUCE Modules\blueprint + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\synthesisers + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics + + + JUCE Modules\juce_audio_basics + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices + + + JUCE Modules\juce_audio_devices + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\sampler + + + JUCE Modules\juce_audio_formats + + + JUCE Modules\juce_audio_formats + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors + + + JUCE Modules\juce_audio_processors + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\unit_tests + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core + + + JUCE Modules\juce_core + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography + + + JUCE Modules\juce_cryptography + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\undomanager + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures + + + JUCE Modules\juce_data_structures + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events + + + JUCE Modules\juce_events + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats + + + JUCE Modules\juce_graphics\image_formats + + + JUCE Modules\juce_graphics\image_formats + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\placement + + + JUCE Modules\juce_graphics + + + JUCE Modules\juce_graphics + + + JUCE Modules\juce_gui_basics\application + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics + + + JUCE Modules\juce_gui_basics + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\documents + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra + + + JUCE Modules\juce_gui_extra + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\utils + + + JUCE Modules\juce_opengl + + + JUCE Modules\juce_opengl + + + JUCE Modules\juce_video\capture + + + JUCE Modules\juce_video\playback + + + JUCE Modules\juce_video + + + JUCE Modules\juce_video + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\duktape\examples\alloc-hybrid + + + JUCE Modules\blueprint\duktape\examples\alloc-logging + + + JUCE Modules\blueprint\duktape\examples\alloc-torture + + + JUCE Modules\blueprint\duktape\examples\cmdline + + + JUCE Modules\blueprint\duktape\examples\codepage-conv + + + JUCE Modules\blueprint\duktape\examples\debug-trans-dvalue + + + JUCE Modules\blueprint\duktape\examples\debug-trans-socket + + + JUCE Modules\blueprint\duktape\examples\eventloop + + + JUCE Modules\blueprint\duktape\extras\alloc-pool + + + JUCE Modules\blueprint\duktape\extras\alloc-pool + + + JUCE Modules\blueprint\duktape\extras\cbor + + + JUCE Modules\blueprint\duktape\extras\console + + + JUCE Modules\blueprint\duktape\extras\duk-v1-compat + + + JUCE Modules\blueprint\duktape\extras\logging + + + JUCE Modules\blueprint\duktape\extras\minimal-printf + + + JUCE Modules\blueprint\duktape\extras\module-duktape + + + JUCE Modules\blueprint\duktape\extras\module-node + + + JUCE Modules\blueprint\duktape\extras\print-alert + + + JUCE Modules\blueprint\duktape\src + + + JUCE Modules\blueprint\duktape\src + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-noline + + + JUCE Modules\blueprint\duktape\src-noline + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\internal + + + JUCE Modules\blueprint\internal + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\lyra + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\lyra + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock\internal\custom + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock\internal\custom + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock\internal\custom + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal\custom + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal\custom + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal\custom + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\xcode\Samples\FrameworkSample + + + JUCE Modules\blueprint\yoga\lib\jni\real + + + JUCE Modules\blueprint\yoga\lib\jni + + + JUCE Modules\blueprint\yoga\testutil\src\main\cpp\include\yoga\testutil + + + JUCE Modules\blueprint\yoga\util + + + JUCE Modules\blueprint\yoga\yoga\event + + + JUCE Modules\blueprint\yoga\yoga\internal + + + JUCE Modules\blueprint\yoga\yoga\internal + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\YogaKit\Source + + + JUCE Modules\blueprint\yoga\YogaKit\Source + + + JUCE Modules\blueprint\yoga\YogaKit\Source + + + JUCE Modules\blueprint + + + JUCE Modules\juce_audio_basics\audio_play_head + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\native + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\synthesisers + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\protected + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\protected + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\protected + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\coupled + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\coupled + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\floor + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\uncoupled + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\sampler + + + JUCE Modules\juce_audio_formats + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\include + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\unit_tests + + + JUCE Modules\juce_core\unit_tests + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\undomanager + + + JUCE Modules\juce_data_structures\undomanager + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\placement + + + JUCE Modules\juce_graphics\placement + + + JUCE Modules\juce_graphics + + + JUCE Modules\juce_gui_basics\application + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\documents + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra + + + JUCE Modules\juce_opengl\geometry + + + JUCE Modules\juce_opengl\geometry + + + JUCE Modules\juce_opengl\geometry + + + JUCE Modules\juce_opengl\geometry + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\utils + + + JUCE Modules\juce_opengl + + + JUCE Modules\juce_video\capture + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\playback + + + JUCE Modules\juce_video + + + JUCE Library Code + + + JUCE Library Code + + + + + JUCE Modules\blueprint\duktape\licenses + + + JUCE Modules\blueprint\duktape\licenses + + + JUCE Modules\blueprint\duktape\licenses + + + JUCE Modules\blueprint\duktape\licenses + + + JUCE Modules\blueprint\duktape\licenses + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape + + + JUCE Modules\blueprint\yoga\.github + + + JUCE Modules\blueprint\yoga\android + + + JUCE Modules\blueprint\yoga\java + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_5 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_5 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_5 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_5 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_5 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_6 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_6 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_6 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_6 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_6 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_7 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_7 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_7 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_7 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_7 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest + + + JUCE Modules\blueprint\yoga\testutil\src\main\cpp + + + JUCE Modules\blueprint\yoga\website\contents\contributing + + + JUCE Modules\blueprint\yoga\website\contents\contributing + + + JUCE Modules\blueprint\yoga\website\contents\contributing + + + JUCE Modules\blueprint\yoga\website\contents\examples + + + JUCE Modules\blueprint\yoga\website\contents\examples + + + JUCE Modules\blueprint\yoga\website\contents\examples + + + JUCE Modules\blueprint\yoga\website\contents\getting-started + + + JUCE Modules\blueprint\yoga\website\contents\getting-started + + + JUCE Modules\blueprint\yoga\website\contents\getting-started + + + JUCE Modules\blueprint\yoga\website\contents\getting-started + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website + + + JUCE Modules\blueprint\yoga\YogaKit + + + JUCE Modules\blueprint\yoga + + + JUCE Modules\blueprint\yoga + + + JUCE Modules\blueprint\yoga + + + JUCE Modules\blueprint\yoga + + + JUCE Modules\juce_audio_devices\native\oboe + + + JUCE Modules\juce_audio_devices\native\oboe + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7 + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_core\native\java + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + + + JUCE Library Code + + + diff --git a/examples/TestRunner/Builds/VisualStudio2015/resources.rc b/examples/TestRunner/Builds/VisualStudio2015/resources.rc new file mode 100644 index 00000000..9d6bf491 --- /dev/null +++ b/examples/TestRunner/Builds/VisualStudio2015/resources.rc @@ -0,0 +1,31 @@ +#pragma code_page(65001) + +#ifdef JUCE_USER_DEFINED_RC_FILE + #include JUCE_USER_DEFINED_RC_FILE +#else + +#undef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#include + +VS_VERSION_INFO VERSIONINFO +FILEVERSION 1,0,0,0 +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + BEGIN + VALUE "FileDescription", "TestRunner\0" + VALUE "FileVersion", "1.0.0\0" + VALUE "ProductName", "TestRunner\0" + VALUE "ProductVersion", "1.0.0\0" + END + END + + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif diff --git a/examples/TestRunner/Builds/VisualStudio2017/TestRunner.sln b/examples/TestRunner/Builds/VisualStudio2017/TestRunner.sln new file mode 100644 index 00000000..909e5d1c --- /dev/null +++ b/examples/TestRunner/Builds/VisualStudio2017/TestRunner.sln @@ -0,0 +1,20 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2017 + +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestRunner - ConsoleApp", "TestRunner_ConsoleApp.vcxproj", "{C4FAE1A4-2BA2-D846-22F6-E75A6C2B71A6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C4FAE1A4-2BA2-D846-22F6-E75A6C2B71A6}.Debug|x64.ActiveCfg = Debug|x64 + {C4FAE1A4-2BA2-D846-22F6-E75A6C2B71A6}.Debug|x64.Build.0 = Debug|x64 + {C4FAE1A4-2BA2-D846-22F6-E75A6C2B71A6}.Release|x64.ActiveCfg = Release|x64 + {C4FAE1A4-2BA2-D846-22F6-E75A6C2B71A6}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/examples/TestRunner/Builds/VisualStudio2017/TestRunner_ConsoleApp.vcxproj b/examples/TestRunner/Builds/VisualStudio2017/TestRunner_ConsoleApp.vcxproj new file mode 100644 index 00000000..c364a7a3 --- /dev/null +++ b/examples/TestRunner/Builds/VisualStudio2017/TestRunner_ConsoleApp.vcxproj @@ -0,0 +1,4507 @@ + + + + + + Debug + x64 + + + Release + x64 + + + + {C4FAE1A4-2BA2-D846-22F6-E75A6C2B71A6} + + + + Application + false + false + v141 + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) + + + Application + false + true + v141 + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + .exe + $(SolutionDir)$(Platform)\$(Configuration)\ConsoleApp\ + $(Platform)\$(Configuration)\ConsoleApp\ + TestRunner + true + $(SolutionDir)$(Platform)\$(Configuration)\ConsoleApp\ + $(Platform)\$(Configuration)\ConsoleApp\ + TestRunner + true + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + + + + Disabled + ProgramDatabase + ..\..\JuceLibraryCode;..\..\..\..\..\blueprint;..\..\..\..\blueprint\duktape\src-noline;..\..\..\..\blueprint\yoga;..\..\..\..\ext\juce\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;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_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + true + NotUsing + $(IntDir)\ + $(IntDir)\ + $(IntDir)\ + Level4 + true + true + stdcpp17 + + + _DEBUG;%(PreprocessorDefinitions) + + + $(OutDir)\TestRunner.exe + true + libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries) + true + $(IntDir)\TestRunner.pdb + Console + true + + + true + $(IntDir)\TestRunner.bsc + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + + + + Full + ..\..\JuceLibraryCode;..\..\..\..\..\blueprint;..\..\..\..\blueprint\duktape\src-noline;..\..\..\..\blueprint\yoga;..\..\..\..\ext\juce\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;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_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) + MultiThreadedDLL + true + NotUsing + $(IntDir)\ + $(IntDir)\ + $(IntDir)\ + Level4 + true + true + stdcpp17 + + + NDEBUG;%(PreprocessorDefinitions) + + + $(OutDir)\TestRunner.exe + true + %(IgnoreSpecificDefaultLibraries) + false + $(IntDir)\TestRunner.pdb + Console + true + true + true + UseLinkTimeCodeGeneration + + + true + $(IntDir)\TestRunner.bsc + + + + + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/TestRunner/Builds/VisualStudio2017/TestRunner_ConsoleApp.vcxproj.filters b/examples/TestRunner/Builds/VisualStudio2017/TestRunner_ConsoleApp.vcxproj.filters new file mode 100644 index 00000000..fb2f8e31 --- /dev/null +++ b/examples/TestRunner/Builds/VisualStudio2017/TestRunner_ConsoleApp.vcxproj.filters @@ -0,0 +1,7538 @@ + + + + + + {7B0CE45C-58A1-00B6-BEAF-02154911F346} + + + {B3859086-C922-2109-631A-F37FF1514174} + + + {0A55AC6D-FE7B-4F60-426F-A1B45CB84FA6} + + + {EDEB1ACF-581B-0F45-8B41-80F947C8991D} + + + {CD0A107B-7BEF-A124-8A82-DA3515DD5DE0} + + + {9188ED27-E978-77E3-8267-4A99EB71C5AF} + + + {C07A92F4-FF2A-C046-98BD-22874D9FAFDF} + + + {FA89ACDA-A95F-D683-04E7-B70F126059BB} + + + {F5813C39-E47A-8B26-1166-CBABE099189E} + + + {B3A9B616-07F8-9D0D-AEC6-A2D461BD062C} + + + {8A745399-4924-657C-AA50-4B12C0F414E0} + + + {95A829DD-71C2-86B8-ADED-6F93B607EACB} + + + {6CCEC4E9-5B88-5E0F-7A02-22512961CFEE} + + + {FD612129-C30D-B53A-AF56-21D82BFBD5FC} + + + {807723AF-94FC-73F7-4A7B-AEAA5A2B81D5} + + + {8ED7B476-6C0B-93EF-BEC3-D6E4BCBEA195} + + + {C25C51F5-3E42-2761-6FE0-C045BC63EC4F} + + + {E711B49F-8757-26C6-C7AC-864FF16D5E56} + + + {3F2A65CB-D78B-D3B7-61F2-3D6F339BC35D} + + + {B6B04A23-67E2-01FC-6F70-E13434AC2505} + + + {FB9953A0-26D1-262A-E287-70A08DBCBDE0} + + + {4F10E98E-EE67-D415-7EAC-995BF4263F32} + + + {536B69B1-98A9-67A9-352D-C605D8D6569A} + + + {302F5409-34EA-A122-680B-609CD2262CDD} + + + {9174B6C9-17AB-B7D2-EB3E-3291A278EB43} + + + {124BE91A-7982-8752-6457-D60361CD92C3} + + + {1EFD9C7B-362F-AF92-4AC0-3AF6AD08D815} + + + {B8F8BD1C-229E-6786-6973-C3C31A18A690} + + + {77FC750E-5278-A88C-BB3F-B809EA9C06CD} + + + {EB15509B-823B-BF38-3179-FB18F95282D5} + + + {3372498B-F460-6B2F-41DE-B5BE4FFB678F} + + + {E53BA6AE-9D56-0066-FF01-0C9147BF00EF} + + + {AF87CEBC-C0D7-A589-9049-B15C6645687B} + + + {376F9BBC-F1D8-4E71-50B7-ABCB49C6EFBF} + + + {0215397C-1A70-A977-769B-D1D31B870961} + + + {4C48575A-1246-809B-B88D-1CC8FF6970A3} + + + {C60893CE-39FB-125B-5410-373CA2806F8B} + + + {2D3DD65F-E36F-CE38-A439-68F98C4B5BAB} + + + {A12D9DBF-CF68-E916-BEA7-45BB02558AEB} + + + {E44C1A08-42E2-505C-5442-A444A89097B2} + + + {4B0BEA6C-11B2-A510-058A-D8AB0CA19665} + + + {DEBA36E3-DA48-ED52-89AB-46A7893583AD} + + + {E2779BFB-C707-9610-62EF-DFE9328C2A33} + + + {6C09BCF5-E3E8-7BE7-CA60-530972505C2C} + + + {09CF0A28-5987-CD9D-0857-72E7385C8820} + + + {D4F2394A-41B2-01E7-F98D-5EC34200BE34} + + + {9BA8E78E-127B-B60B-B5D1-0B7707AFF387} + + + {6717DD49-ABA1-723C-9C11-DD913B4E6AE9} + + + {78E462AB-FDB2-B5C7-EE85-0A481EBE86B3} + + + {B3A36CAA-036F-9732-DCE9-65D178ECA73C} + + + {22839F4D-A39B-877B-24DB-06AD5D71BCCC} + + + {E970EBF8-4CEB-0343-3078-CEFEA5216D3D} + + + {8BC4FD76-71A6-AD76-2FBE-453324E04CD4} + + + {13A9BAE8-AC0E-6462-917A-54B3DAC578EC} + + + {8AB4B714-214C-6C25-1FE5-1659771C1FE2} + + + {509B7440-F4D3-AE1A-57B8-1AE3FBE6F539} + + + {B5A2A875-E71A-AF49-1C03-AA571FE79CB8} + + + {D904D9B3-39AE-574B-17AC-018C1266CB3F} + + + {30A28EF3-E134-C0EC-D703-11D33ACE2FD0} + + + {1CFEE51C-8BBA-C12B-BBB7-179645CE50FE} + + + {F6EB5EFE-890D-6939-7077-558DCD7E56B4} + + + {C89B4AD4-5866-2A5C-9440-C13F99289E17} + + + {F3CCEAB8-7827-324F-74D6-43A27CF0B5AF} + + + {CDA93B11-BCE7-9107-A5D3-983B7A1B98C3} + + + {CAB5E31D-5D32-77BB-2876-F4F288931C7A} + + + {0554DA2F-7143-FC1A-9358-E1E7F1471DF1} + + + {A9BF640A-521B-6AAF-B02E-E14FB239068A} + + + {22523750-D699-0AD2-C065-D50C275FD84E} + + + {52CB90BF-9B54-43DE-98F7-16BC0C354B95} + + + {6BE140A8-1812-C201-DAD2-6C74513D3E30} + + + {3DF42454-F721-D872-BCA7-54791131BD45} + + + {9F5F18C7-4F0A-EA66-E43D-3D210E8CC30C} + + + {FB693CCF-39AD-994A-654E-B6F30076BFC8} + + + {02EC73A9-4696-9F40-F20B-0BD6B3525D8C} + + + {75567ADB-8F9D-19FA-E467-1B8F27F7544C} + + + {B0CE0219-08D5-60FC-CCEE-CF6A46B58762} + + + {DC994AC8-F0EC-AACD-4C48-DE30317D7F75} + + + {A8AA66CC-3D87-6FDE-A1B4-B887C8121C8F} + + + {006C149E-E6DC-83F1-E93C-AE10C5895570} + + + {C261113A-9C59-D724-DCDD-859CF67B9BE2} + + + {D7B09536-16DA-F0F4-AD74-03D913B385A5} + + + {5884DF92-9D52-5544-FF42-38632E5B65AA} + + + {9A1AE3EF-2A80-00A9-CED8-9F6882B7F0D7} + + + {4813E92F-51D1-F58C-585C-A87180EFF2F0} + + + {00BFED91-A90A-C4B2-27E9-7FD41FA77182} + + + {9BA63F38-E610-76BF-FF0E-94FB800A1FCA} + + + {C75C5513-B888-5B22-A4E3-D628A4E92CCA} + + + {571613DD-E1EF-A8E9-35CF-24185ADC93E8} + + + {D6B250F5-FFF3-4CE1-810E-E974A3E4DF68} + + + {E8AB9EA5-1A06-F188-A74A-A28D3D4500D1} + + + {35612D87-AC14-489B-34CE-4F81393F7F5D} + + + {C0E0C400-CE8F-50D4-55F2-4E4A6AD63499} + + + {E60D2C67-D5F8-64F6-0C0E-052DD497F551} + + + {451BDE86-8BF6-A12F-CA9A-CD61FD681002} + + + {34DF868B-7BA7-DB98-6939-2E01C64C4A89} + + + {0DD28281-C7E1-F390-BE65-C1D50BE8459D} + + + {EBB4193F-698C-5CA5-4ACF-4CBE2F0B50DF} + + + {41025821-15AB-5C66-A3FD-5422E5287629} + + + {BAFE1891-85B1-1831-72BF-36EBE6D1BF26} + + + {FD091712-AD52-E601-F4CD-3DB298E6DC23} + + + {101863B2-7B8B-A610-EBCD-94B870D9C6A4} + + + {D5AFD8F1-8B35-D770-6869-4D7357BECB4E} + + + {2BB10AFD-579D-265D-60DB-5789BE03A558} + + + {E8BB7803-D7E1-7FEB-5284-95545DD2A608} + + + {F85F9E97-B70B-4BBF-FFA2-AEDA6BCC9574} + + + {035F5ED5-797B-347B-9A1D-32E4616E3384} + + + {E6D67E45-2253-ACF6-E413-B02C53C40580} + + + {4D5E4404-B9E5-6940-E1CA-3D840E5202B8} + + + {8B8631A1-7FE2-3897-F798-EBC155F6FCC1} + + + {FE9D8E8B-2E7F-D4D9-9877-24703F74EBF8} + + + {9DB8125F-53E6-B090-CBFE-97E27CDDBD0A} + + + {6CAE32A5-FC60-7361-499A-8A460AFA309F} + + + {40731434-CE36-4C65-F807-BB8911C89B7E} + + + {D69D26BE-96E5-5F64-4D16-221DB335358C} + + + {9F6FF683-16F9-008D-B4D9-2CDB864F0BF4} + + + {EB58F05A-A968-CEBE-40C4-107CDD8F240F} + + + {5FCF559E-451A-CB1E-B177-A5DC5A0005BB} + + + {D78296AF-218E-B17E-7F8B-9D148601188D} + + + {B96EBA26-E668-FFAF-FC53-1EC1337DAF5A} + + + {D8532E5E-469E-5042-EFC8-238241704735} + + + {777B5D1D-9AF0-B22B-8894-034603EE97F5} + + + {8292766D-2459-2E7E-7615-17216318BA93} + + + {9BD56105-DAB4-EBD5-00DD-BD540E98FE88} + + + {10472B2C-9888-D269-F351-0D0AC3BCD16C} + + + {BF23FC10-1D57-2A9B-706F-6DD8A7B593D4} + + + {092EFC17-7C95-7E04-0ACA-0D61A462EE81} + + + {285118C6-8FDA-7DCE-BEF4-FFB2120876C5} + + + {69ED6B61-9B8D-D47E-E4A6-2E9F9A94A75A} + + + {7CDB7CD1-BB96-F593-3C78-1E06182B5839} + + + {B0A708DE-B4CF-196B-14FB-DC8221509B8E} + + + {34F46ADE-EE31-227A-A69E-7732E70145F1} + + + {BB9B3C77-17FB-E994-8B75-88F1727E4655} + + + {C0971D77-2F14-190A-E2AE-89D6285F4D5A} + + + {AABEA333-6524-8891-51C7-6DAEB5700628} + + + {F2D29337-983E-BAD7-7B5C-E0AB3D53D404} + + + {C674B0FB-1FC0-2986-94B1-083845018994} + + + {0AFC1CE8-F6E6-9817-8C21-8432B2A375DA} + + + {0D1AF264-3AC1-78A2-B2A4-AE6171F9194A} + + + {9A5DB854-CFFB-5F88-C566-0E10F994DDB3} + + + {38A5DDC7-416E-548F-39DA-887875FE6B20} + + + {980FE2DB-05D3-5FDA-79DA-067A56F5D19D} + + + {F336DC25-747A-0663-93D6-E3EB9AA0CBF8} + + + {7D78546A-80FC-4DCA-00B9-F191F0AB2179} + + + {9EB3EC7F-2AB7-DDAA-3C05-DF382B728D3F} + + + {6B9FBFDC-1D10-6246-356D-00FF4535CECB} + + + {D6FCFC8E-7136-9109-78C0-91A3EB4C443F} + + + {EBF18AC1-F0ED-937A-2824-4307CE2ADAF7} + + + {5A0F7922-2EFB-6465-57E4-A445B804EFB5} + + + {4EC45416-0E7C-7567-6F75-D0C8CEE7DC4F} + + + {C2985031-0496-55B5-41A8-BAB99E53D89D} + + + {FB4AB426-7009-0036-BB75-E34256AA7C89} + + + {E684D858-09E8-0251-8E86-5657129641E1} + + + {1EF1BF17-F941-243A-04D1-EE617D140CBA} + + + {344DB016-679C-FBD0-3EC6-4570C47522DE} + + + {3D9758A0-9359-1710-87C1-05D475C08B17} + + + {E824435F-FC7B-10BE-5D1A-5DACC51A8836} + + + {86737735-F6BA-F64A-5EC7-5C9F36755F79} + + + {4DC60E78-BBC0-B540-63A2-37E14ABBEF09} + + + {80C72173-A1E1-C3C5-9288-B889CE2EAFEA} + + + {4138B955-AA0B-FA86-DBF9-404CAFFFA866} + + + {2B4166B8-F470-F07C-4F51-D2DAAAECBB18} + + + {9C295115-C0CD-3129-1C4D-FB53299B23FB} + + + {65526A8B-3447-9DF0-FD5D-00D111126027} + + + {A54A1F5C-F32F-F97B-9E8A-69922B770A54} + + + {B90A44F3-B62D-B5C0-81A2-683D2650AEE6} + + + {DAF30656-5915-0E45-C4E4-54439617D525} + + + {9266EA90-6A0A-5DDB-9CB7-966BEF03BA5C} + + + {9C713CBA-A9E2-5F4E-F83C-2CAB8533913C} + + + {63571A07-9AA3-5BB0-1103-0B42A2E6BC9E} + + + {314F43F2-BC8F-B464-EAE7-86B9675454E9} + + + {874C5D0C-6D29-68EE-38BB-26200B56BC89} + + + {86BAA7A7-DC50-35B6-910B-932AEAF257F2} + + + {6B7BE34D-1BC1-C7B9-111F-C55CA8250943} + + + {9B6B6D54-D378-80C2-8CC9-D1D8FB44C2A8} + + + {D0584AC3-6837-14F6-90BF-5EA604D1F074} + + + {794B64EC-B809-32E3-AD00-4EE6A74802CA} + + + {67BE498C-9E1F-C73A-B99A-387C034CE680} + + + {42F7BE9D-3C8A-AE26-289B-8F355C068036} + + + {7868764A-6572-381A-906C-9C26792A4C29} + + + {03678508-A517-48BB-FB4A-485628C34E08} + + + {07D27C1D-3227-F527-356C-17DA11551A99} + + + {6146D580-99D2-A6C8-5908-30DC355BB6BA} + + + {C67003E8-BEA8-2188-F4B3-A122F4B4FA3F} + + + {09B91E68-1FF4-C7ED-9055-D4D96E66A0BA} + + + {30B3DA63-C1E4-F2EA-CEF0-8035D8CBFF64} + + + {4F24EEED-AA33-AC6C-9A39-72E71CF83EF0} + + + {0F70B1A9-BB50-23F5-2AE7-F95E51A00389} + + + {D4C8DC40-2CD2-04B6-05D0-1E7A88841390} + + + {58BED6AF-DB89-7560-B2B8-D937C1C0825A} + + + {B958F86B-6926-8D9B-2FC6-8BFD4BDC72C9} + + + {DB624F7D-D513-25AC-C13C-B9062EB3BEEE} + + + {89AA9B6C-4029-A34F-C1B0-3B5D8691F4D4} + + + {1A7F541C-B032-9C66-C320-A13B2A8A9866} + + + {4BAB7C18-51AB-0D9D-83CD-9C37F28D2E38} + + + {5523922E-8B0C-A52B-477C-752C09F8197F} + + + {857B6D8B-0ECB-FE9E-D1EB-D5E45E72F057} + + + {BAA582FA-40B7-320E-EE7A-4C3892C7BE72} + + + {89B3E447-34BE-C691-638E-09796C6B647E} + + + {9BE78436-DBF4-658C-579B-ED19FFD0EB5D} + + + {21E7FA61-9E0A-4BA1-04B7-AF47AFA9CB8B} + + + {632B4C79-AF7D-BFB5-D006-5AE67F607130} + + + {B10E20C2-4583-2B79-60B7-FE4D4B044313} + + + {CFB54F15-8A8A-0505-9B7F-ECA41CEE38E8} + + + {911F0159-A7A8-4A43-3FD4-154F62F4A44B} + + + {9D5816C2-E2B2-2E3F-B095-AC8BD1100D29} + + + {3FDCD000-763F-8477-9AF8-70ABA2E91E5E} + + + {0947506F-66FA-EF8D-8A4E-4D48BCDBB226} + + + {E4B6AED3-F54C-3FF2-069F-640BACAE0E08} + + + {D5EADBCC-6A1C-C940-0206-26E49110AF08} + + + {D27DC92D-5BEB-9294-DCD1-81D54E245AD5} + + + {BCD73D20-42B1-6CDB-DE66-B06236A60F47} + + + {20DC13F6-2369-8841-9F0B-D13FA14EEE74} + + + {A302A8DB-120F-9EBB-A3D5-2C29963AA56B} + + + {45489C2A-6E0E-CCDC-6638-0DACEEB63CCA} + + + {F1B90726-DB55-0293-BFAF-C65C7DF5489C} + + + {2C55FD42-0ACD-B0B8-7EAE-EB17F09BAEEC} + + + {B68CD2B2-701F-9AB7-4638-2485D6E06BCF} + + + {B0B7C78E-729E-0FFA-D611-82AE8BC7FE2C} + + + {0A4F7E12-220C-14EF-0026-9C0629FA9C17} + + + {37F49E10-4E62-6D5C-FF70-722D0CA3D97E} + + + {160D9882-0F68-278D-C5F9-8960FD7421D2} + + + {4CED05DA-E0A2-E548-F753-1F2EF299A8E3} + + + {294E4CD5-B06F-97D1-04A3-51871CEA507C} + + + {77228F15-BD91-06FF-2C7E-0377D25C2C94} + + + {5CB531E6-BF9A-2C50-056C-EE5A525D28D3} + + + {E4EA47E5-B41C-2A19-1783-7E9104096ECD} + + + {B331BC33-9770-3DB5-73F2-BC2469ECCF7F} + + + {46A17AC9-0BFF-B5CE-26D6-B9D1992C88AC} + + + {D90A8DF7-FBAB-D363-13C0-6707BB22B72B} + + + {8AE77C40-6839-EC37-4515-BD3CC269BCE4} + + + {0EAD99DB-011F-09E5-45A2-365F646EB004} + + + {F57590C6-3B90-1BE1-1006-488BA33E8BD9} + + + {7C319D73-0D93-5842-0874-398D2D3038D5} + + + {2CB4DB0C-DD3B-6195-D822-76EC7A5C88D2} + + + {FE3CB19C-EF43-5CF5-DAF0-09D4E43D0AB9} + + + {FE7E6CD5-C7A0-DB20-4E7E-D6E7F08C4578} + + + {895C2D33-E08D-B1BA-BB36-FC4CA65090C8} + + + {D64A57DB-A956-5519-1929-1D929B56E1B0} + + + {5A99CC24-AC45-7ED6-C11A-B8B86E76D884} + + + {7A131EEC-25A7-22F6-2839-A2194DDF3007} + + + {EA9DB76C-CEF7-6BFC-2070-28B7DF8E8063} + + + {3C206A40-6F1B-E683-ACF1-DEC3703D0140} + + + {DF95D4BF-E18C-125A-5EBB-8993A06E232C} + + + {118946F2-AC24-0F09-62D5-753DF87A60CD} + + + {07329F9B-7D3D-CEB3-C771-714842076140} + + + {08BBBECB-B0D1-7611-37EC-F57E1D0CE2A2} + + + {268E8F2A-980C-BF2F-B161-AACABC9D91F3} + + + {A4D76113-9EDC-DA60-D89B-5BACF7F1C426} + + + {1A9221A3-E993-70B2-6EA2-8E1DB5FF646A} + + + {CC2DAD7A-5B45-62AB-4C54-6FE6B1AE86C3} + + + {599138A9-EA63-53DD-941F-ABE3412D2949} + + + {422A4014-8587-1AE6-584F-32A62613A37B} + + + {9FBFF5E5-56F1-34A1-2C85-F760DA2B1EB7} + + + {CB8DF3B2-0409-6D59-C5D4-A034EBB7F973} + + + {7774F72F-C951-B8AB-E927-E34AD23C52C8} + + + {658BADF8-7095-C722-F9EC-9F36E8818187} + + + {2C58F450-CD01-0231-2F16-0D4D68565164} + + + {FE955B6B-68AC-AA07-70D8-2413F6DB65C8} + + + {7ED5A90E-41AF-A1EF-659B-37CEEAB9BA61} + + + + + TestRunner\Source + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\duktape\examples\alloc-hybrid + + + JUCE Modules\blueprint\duktape\examples\alloc-logging + + + JUCE Modules\blueprint\duktape\examples\alloc-torture + + + JUCE Modules\blueprint\duktape\examples\cmdline + + + JUCE Modules\blueprint\duktape\examples\cmdline + + + JUCE Modules\blueprint\duktape\examples\codepage-conv + + + JUCE Modules\blueprint\duktape\examples\codepage-conv + + + JUCE Modules\blueprint\duktape\examples\cpp-exceptions + + + JUCE Modules\blueprint\duktape\examples\debug-trans-dvalue + + + JUCE Modules\blueprint\duktape\examples\debug-trans-dvalue + + + JUCE Modules\blueprint\duktape\examples\debug-trans-socket + + + JUCE Modules\blueprint\duktape\examples\debug-trans-socket + + + JUCE Modules\blueprint\duktape\examples\dummy-date-provider + + + JUCE Modules\blueprint\duktape\examples\eval + + + JUCE Modules\blueprint\duktape\examples\eventloop + + + JUCE Modules\blueprint\duktape\examples\eventloop + + + JUCE Modules\blueprint\duktape\examples\eventloop + + + JUCE Modules\blueprint\duktape\examples\eventloop + + + JUCE Modules\blueprint\duktape\examples\eventloop + + + JUCE Modules\blueprint\duktape\examples\guide + + + JUCE Modules\blueprint\duktape\examples\guide + + + JUCE Modules\blueprint\duktape\examples\guide + + + JUCE Modules\blueprint\duktape\examples\hello + + + JUCE Modules\blueprint\duktape\examples\jxpretty + + + JUCE Modules\blueprint\duktape\examples\sandbox + + + JUCE Modules\blueprint\duktape\extras\alloc-pool + + + JUCE Modules\blueprint\duktape\extras\alloc-pool + + + JUCE Modules\blueprint\duktape\extras\cbor + + + JUCE Modules\blueprint\duktape\extras\cbor + + + JUCE Modules\blueprint\duktape\extras\console + + + JUCE Modules\blueprint\duktape\extras\console + + + JUCE Modules\blueprint\duktape\extras\duk-v1-compat + + + JUCE Modules\blueprint\duktape\extras\duk-v1-compat + + + JUCE Modules\blueprint\duktape\extras\logging + + + JUCE Modules\blueprint\duktape\extras\logging + + + JUCE Modules\blueprint\duktape\extras\minimal-printf + + + JUCE Modules\blueprint\duktape\extras\minimal-printf + + + JUCE Modules\blueprint\duktape\extras\module-duktape + + + JUCE Modules\blueprint\duktape\extras\module-duktape + + + JUCE Modules\blueprint\duktape\extras\module-node + + + JUCE Modules\blueprint\duktape\extras\module-node + + + JUCE Modules\blueprint\duktape\extras\print-alert + + + JUCE Modules\blueprint\duktape\extras\print-alert + + + JUCE Modules\blueprint\duktape\src + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-noline + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\tests + + + JUCE Modules\blueprint\yoga\benchmark + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\lyra + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\lyra + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\lyra + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\lyra + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\codegear + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\codegear + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\xcode\Samples\FrameworkSample + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\xcode\Samples\FrameworkSample + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\testutil\src\main\cpp\jni + + + JUCE Modules\blueprint\yoga\testutil\src\main\cpp\testutil + + + JUCE Modules\blueprint\yoga\util + + + JUCE Modules\blueprint\yoga\util + + + JUCE Modules\blueprint\yoga\yoga\event + + + JUCE Modules\blueprint\yoga\yoga\internal + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\YogaKit\Source + + + JUCE Modules\blueprint\yoga\YogaKit\Source + + + JUCE Modules\blueprint\yoga\YogaKit\Source + + + JUCE Modules\blueprint\yoga\YogaKit\Tests + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample\ViewControllers + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample\ViewControllers + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample\Views + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample + + + JUCE Modules\blueprint + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\synthesisers + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics + + + JUCE Modules\juce_audio_basics + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices + + + JUCE Modules\juce_audio_devices + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\sampler + + + JUCE Modules\juce_audio_formats + + + JUCE Modules\juce_audio_formats + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors + + + JUCE Modules\juce_audio_processors + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\unit_tests + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core + + + JUCE Modules\juce_core + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography + + + JUCE Modules\juce_cryptography + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\undomanager + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures + + + JUCE Modules\juce_data_structures + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events + + + JUCE Modules\juce_events + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats + + + JUCE Modules\juce_graphics\image_formats + + + JUCE Modules\juce_graphics\image_formats + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\placement + + + JUCE Modules\juce_graphics + + + JUCE Modules\juce_graphics + + + JUCE Modules\juce_gui_basics\application + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics + + + JUCE Modules\juce_gui_basics + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\documents + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra + + + JUCE Modules\juce_gui_extra + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\utils + + + JUCE Modules\juce_opengl + + + JUCE Modules\juce_opengl + + + JUCE Modules\juce_video\capture + + + JUCE Modules\juce_video\playback + + + JUCE Modules\juce_video + + + JUCE Modules\juce_video + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\duktape\examples\alloc-hybrid + + + JUCE Modules\blueprint\duktape\examples\alloc-logging + + + JUCE Modules\blueprint\duktape\examples\alloc-torture + + + JUCE Modules\blueprint\duktape\examples\cmdline + + + JUCE Modules\blueprint\duktape\examples\codepage-conv + + + JUCE Modules\blueprint\duktape\examples\debug-trans-dvalue + + + JUCE Modules\blueprint\duktape\examples\debug-trans-socket + + + JUCE Modules\blueprint\duktape\examples\eventloop + + + JUCE Modules\blueprint\duktape\extras\alloc-pool + + + JUCE Modules\blueprint\duktape\extras\alloc-pool + + + JUCE Modules\blueprint\duktape\extras\cbor + + + JUCE Modules\blueprint\duktape\extras\console + + + JUCE Modules\blueprint\duktape\extras\duk-v1-compat + + + JUCE Modules\blueprint\duktape\extras\logging + + + JUCE Modules\blueprint\duktape\extras\minimal-printf + + + JUCE Modules\blueprint\duktape\extras\module-duktape + + + JUCE Modules\blueprint\duktape\extras\module-node + + + JUCE Modules\blueprint\duktape\extras\print-alert + + + JUCE Modules\blueprint\duktape\src + + + JUCE Modules\blueprint\duktape\src + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-noline + + + JUCE Modules\blueprint\duktape\src-noline + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\internal + + + JUCE Modules\blueprint\internal + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\lyra + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\lyra + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock\internal\custom + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock\internal\custom + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock\internal\custom + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal\custom + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal\custom + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal\custom + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\xcode\Samples\FrameworkSample + + + JUCE Modules\blueprint\yoga\lib\jni\real + + + JUCE Modules\blueprint\yoga\lib\jni + + + JUCE Modules\blueprint\yoga\testutil\src\main\cpp\include\yoga\testutil + + + JUCE Modules\blueprint\yoga\util + + + JUCE Modules\blueprint\yoga\yoga\event + + + JUCE Modules\blueprint\yoga\yoga\internal + + + JUCE Modules\blueprint\yoga\yoga\internal + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\YogaKit\Source + + + JUCE Modules\blueprint\yoga\YogaKit\Source + + + JUCE Modules\blueprint\yoga\YogaKit\Source + + + JUCE Modules\blueprint + + + JUCE Modules\juce_audio_basics\audio_play_head + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\native + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\synthesisers + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\protected + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\protected + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\protected + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\coupled + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\coupled + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\floor + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\uncoupled + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\sampler + + + JUCE Modules\juce_audio_formats + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\include + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\unit_tests + + + JUCE Modules\juce_core\unit_tests + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\undomanager + + + JUCE Modules\juce_data_structures\undomanager + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\placement + + + JUCE Modules\juce_graphics\placement + + + JUCE Modules\juce_graphics + + + JUCE Modules\juce_gui_basics\application + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\documents + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra + + + JUCE Modules\juce_opengl\geometry + + + JUCE Modules\juce_opengl\geometry + + + JUCE Modules\juce_opengl\geometry + + + JUCE Modules\juce_opengl\geometry + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\utils + + + JUCE Modules\juce_opengl + + + JUCE Modules\juce_video\capture + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\playback + + + JUCE Modules\juce_video + + + JUCE Library Code + + + JUCE Library Code + + + + + JUCE Modules\blueprint\duktape\licenses + + + JUCE Modules\blueprint\duktape\licenses + + + JUCE Modules\blueprint\duktape\licenses + + + JUCE Modules\blueprint\duktape\licenses + + + JUCE Modules\blueprint\duktape\licenses + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape + + + JUCE Modules\blueprint\yoga\.github + + + JUCE Modules\blueprint\yoga\android + + + JUCE Modules\blueprint\yoga\java + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_5 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_5 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_5 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_5 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_5 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_6 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_6 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_6 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_6 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_6 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_7 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_7 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_7 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_7 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_7 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest + + + JUCE Modules\blueprint\yoga\testutil\src\main\cpp + + + JUCE Modules\blueprint\yoga\website\contents\contributing + + + JUCE Modules\blueprint\yoga\website\contents\contributing + + + JUCE Modules\blueprint\yoga\website\contents\contributing + + + JUCE Modules\blueprint\yoga\website\contents\examples + + + JUCE Modules\blueprint\yoga\website\contents\examples + + + JUCE Modules\blueprint\yoga\website\contents\examples + + + JUCE Modules\blueprint\yoga\website\contents\getting-started + + + JUCE Modules\blueprint\yoga\website\contents\getting-started + + + JUCE Modules\blueprint\yoga\website\contents\getting-started + + + JUCE Modules\blueprint\yoga\website\contents\getting-started + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website + + + JUCE Modules\blueprint\yoga\YogaKit + + + JUCE Modules\blueprint\yoga + + + JUCE Modules\blueprint\yoga + + + JUCE Modules\blueprint\yoga + + + JUCE Modules\blueprint\yoga + + + JUCE Modules\juce_audio_devices\native\oboe + + + JUCE Modules\juce_audio_devices\native\oboe + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7 + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_core\native\java + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + + + JUCE Library Code + + + diff --git a/examples/TestRunner/Builds/VisualStudio2017/resources.rc b/examples/TestRunner/Builds/VisualStudio2017/resources.rc new file mode 100644 index 00000000..9d6bf491 --- /dev/null +++ b/examples/TestRunner/Builds/VisualStudio2017/resources.rc @@ -0,0 +1,31 @@ +#pragma code_page(65001) + +#ifdef JUCE_USER_DEFINED_RC_FILE + #include JUCE_USER_DEFINED_RC_FILE +#else + +#undef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#include + +VS_VERSION_INFO VERSIONINFO +FILEVERSION 1,0,0,0 +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + BEGIN + VALUE "FileDescription", "TestRunner\0" + VALUE "FileVersion", "1.0.0\0" + VALUE "ProductName", "TestRunner\0" + VALUE "ProductVersion", "1.0.0\0" + END + END + + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif diff --git a/examples/TestRunner/Builds/VisualStudio2019/TestRunner.sln b/examples/TestRunner/Builds/VisualStudio2019/TestRunner.sln new file mode 100644 index 00000000..18d4ba0d --- /dev/null +++ b/examples/TestRunner/Builds/VisualStudio2019/TestRunner.sln @@ -0,0 +1,20 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2019 + +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestRunner - ConsoleApp", "TestRunner_ConsoleApp.vcxproj", "{C4FAE1A4-2BA2-D846-22F6-E75A6C2B71A6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C4FAE1A4-2BA2-D846-22F6-E75A6C2B71A6}.Debug|x64.ActiveCfg = Debug|x64 + {C4FAE1A4-2BA2-D846-22F6-E75A6C2B71A6}.Debug|x64.Build.0 = Debug|x64 + {C4FAE1A4-2BA2-D846-22F6-E75A6C2B71A6}.Release|x64.ActiveCfg = Release|x64 + {C4FAE1A4-2BA2-D846-22F6-E75A6C2B71A6}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/examples/TestRunner/Builds/VisualStudio2019/TestRunner_ConsoleApp.vcxproj b/examples/TestRunner/Builds/VisualStudio2019/TestRunner_ConsoleApp.vcxproj new file mode 100644 index 00000000..3eb2c868 --- /dev/null +++ b/examples/TestRunner/Builds/VisualStudio2019/TestRunner_ConsoleApp.vcxproj @@ -0,0 +1,4507 @@ + + + + + + Debug + x64 + + + Release + x64 + + + + {C4FAE1A4-2BA2-D846-22F6-E75A6C2B71A6} + + + + Application + false + false + v142 + 10.0 + + + Application + false + true + v142 + 10.0 + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + .exe + $(SolutionDir)$(Platform)\$(Configuration)\ConsoleApp\ + $(Platform)\$(Configuration)\ConsoleApp\ + TestRunner + true + $(SolutionDir)$(Platform)\$(Configuration)\ConsoleApp\ + $(Platform)\$(Configuration)\ConsoleApp\ + TestRunner + true + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + + + + Disabled + ProgramDatabase + ..\..\JuceLibraryCode;..\..\..\..\..\blueprint;..\..\..\..\blueprint\duktape\src-noline;..\..\..\..\blueprint\yoga;..\..\..\..\ext\juce\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;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_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + true + NotUsing + $(IntDir)\ + $(IntDir)\ + $(IntDir)\ + Level4 + true + true + stdcpp17 + + + _DEBUG;%(PreprocessorDefinitions) + + + $(OutDir)\TestRunner.exe + true + libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries) + true + $(IntDir)\TestRunner.pdb + Console + true + + + true + $(IntDir)\TestRunner.bsc + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + + + + Full + ..\..\JuceLibraryCode;..\..\..\..\..\blueprint;..\..\..\..\blueprint\duktape\src-noline;..\..\..\..\blueprint\yoga;..\..\..\..\ext\juce\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;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_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) + MultiThreadedDLL + true + NotUsing + $(IntDir)\ + $(IntDir)\ + $(IntDir)\ + Level4 + true + true + stdcpp17 + + + NDEBUG;%(PreprocessorDefinitions) + + + $(OutDir)\TestRunner.exe + true + %(IgnoreSpecificDefaultLibraries) + false + $(IntDir)\TestRunner.pdb + Console + true + true + true + UseLinkTimeCodeGeneration + + + true + $(IntDir)\TestRunner.bsc + + + + + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/TestRunner/Builds/VisualStudio2019/TestRunner_ConsoleApp.vcxproj.filters b/examples/TestRunner/Builds/VisualStudio2019/TestRunner_ConsoleApp.vcxproj.filters new file mode 100644 index 00000000..264d799f --- /dev/null +++ b/examples/TestRunner/Builds/VisualStudio2019/TestRunner_ConsoleApp.vcxproj.filters @@ -0,0 +1,7538 @@ + + + + + + {7B0CE45C-58A1-00B6-BEAF-02154911F346} + + + {B3859086-C922-2109-631A-F37FF1514174} + + + {0A55AC6D-FE7B-4F60-426F-A1B45CB84FA6} + + + {EDEB1ACF-581B-0F45-8B41-80F947C8991D} + + + {CD0A107B-7BEF-A124-8A82-DA3515DD5DE0} + + + {9188ED27-E978-77E3-8267-4A99EB71C5AF} + + + {C07A92F4-FF2A-C046-98BD-22874D9FAFDF} + + + {FA89ACDA-A95F-D683-04E7-B70F126059BB} + + + {F5813C39-E47A-8B26-1166-CBABE099189E} + + + {B3A9B616-07F8-9D0D-AEC6-A2D461BD062C} + + + {8A745399-4924-657C-AA50-4B12C0F414E0} + + + {95A829DD-71C2-86B8-ADED-6F93B607EACB} + + + {6CCEC4E9-5B88-5E0F-7A02-22512961CFEE} + + + {FD612129-C30D-B53A-AF56-21D82BFBD5FC} + + + {807723AF-94FC-73F7-4A7B-AEAA5A2B81D5} + + + {8ED7B476-6C0B-93EF-BEC3-D6E4BCBEA195} + + + {C25C51F5-3E42-2761-6FE0-C045BC63EC4F} + + + {E711B49F-8757-26C6-C7AC-864FF16D5E56} + + + {3F2A65CB-D78B-D3B7-61F2-3D6F339BC35D} + + + {B6B04A23-67E2-01FC-6F70-E13434AC2505} + + + {FB9953A0-26D1-262A-E287-70A08DBCBDE0} + + + {4F10E98E-EE67-D415-7EAC-995BF4263F32} + + + {536B69B1-98A9-67A9-352D-C605D8D6569A} + + + {302F5409-34EA-A122-680B-609CD2262CDD} + + + {9174B6C9-17AB-B7D2-EB3E-3291A278EB43} + + + {124BE91A-7982-8752-6457-D60361CD92C3} + + + {1EFD9C7B-362F-AF92-4AC0-3AF6AD08D815} + + + {B8F8BD1C-229E-6786-6973-C3C31A18A690} + + + {77FC750E-5278-A88C-BB3F-B809EA9C06CD} + + + {EB15509B-823B-BF38-3179-FB18F95282D5} + + + {3372498B-F460-6B2F-41DE-B5BE4FFB678F} + + + {E53BA6AE-9D56-0066-FF01-0C9147BF00EF} + + + {AF87CEBC-C0D7-A589-9049-B15C6645687B} + + + {376F9BBC-F1D8-4E71-50B7-ABCB49C6EFBF} + + + {0215397C-1A70-A977-769B-D1D31B870961} + + + {4C48575A-1246-809B-B88D-1CC8FF6970A3} + + + {C60893CE-39FB-125B-5410-373CA2806F8B} + + + {2D3DD65F-E36F-CE38-A439-68F98C4B5BAB} + + + {A12D9DBF-CF68-E916-BEA7-45BB02558AEB} + + + {E44C1A08-42E2-505C-5442-A444A89097B2} + + + {4B0BEA6C-11B2-A510-058A-D8AB0CA19665} + + + {DEBA36E3-DA48-ED52-89AB-46A7893583AD} + + + {E2779BFB-C707-9610-62EF-DFE9328C2A33} + + + {6C09BCF5-E3E8-7BE7-CA60-530972505C2C} + + + {09CF0A28-5987-CD9D-0857-72E7385C8820} + + + {D4F2394A-41B2-01E7-F98D-5EC34200BE34} + + + {9BA8E78E-127B-B60B-B5D1-0B7707AFF387} + + + {6717DD49-ABA1-723C-9C11-DD913B4E6AE9} + + + {78E462AB-FDB2-B5C7-EE85-0A481EBE86B3} + + + {B3A36CAA-036F-9732-DCE9-65D178ECA73C} + + + {22839F4D-A39B-877B-24DB-06AD5D71BCCC} + + + {E970EBF8-4CEB-0343-3078-CEFEA5216D3D} + + + {8BC4FD76-71A6-AD76-2FBE-453324E04CD4} + + + {13A9BAE8-AC0E-6462-917A-54B3DAC578EC} + + + {8AB4B714-214C-6C25-1FE5-1659771C1FE2} + + + {509B7440-F4D3-AE1A-57B8-1AE3FBE6F539} + + + {B5A2A875-E71A-AF49-1C03-AA571FE79CB8} + + + {D904D9B3-39AE-574B-17AC-018C1266CB3F} + + + {30A28EF3-E134-C0EC-D703-11D33ACE2FD0} + + + {1CFEE51C-8BBA-C12B-BBB7-179645CE50FE} + + + {F6EB5EFE-890D-6939-7077-558DCD7E56B4} + + + {C89B4AD4-5866-2A5C-9440-C13F99289E17} + + + {F3CCEAB8-7827-324F-74D6-43A27CF0B5AF} + + + {CDA93B11-BCE7-9107-A5D3-983B7A1B98C3} + + + {CAB5E31D-5D32-77BB-2876-F4F288931C7A} + + + {0554DA2F-7143-FC1A-9358-E1E7F1471DF1} + + + {A9BF640A-521B-6AAF-B02E-E14FB239068A} + + + {22523750-D699-0AD2-C065-D50C275FD84E} + + + {52CB90BF-9B54-43DE-98F7-16BC0C354B95} + + + {6BE140A8-1812-C201-DAD2-6C74513D3E30} + + + {3DF42454-F721-D872-BCA7-54791131BD45} + + + {9F5F18C7-4F0A-EA66-E43D-3D210E8CC30C} + + + {FB693CCF-39AD-994A-654E-B6F30076BFC8} + + + {02EC73A9-4696-9F40-F20B-0BD6B3525D8C} + + + {75567ADB-8F9D-19FA-E467-1B8F27F7544C} + + + {B0CE0219-08D5-60FC-CCEE-CF6A46B58762} + + + {DC994AC8-F0EC-AACD-4C48-DE30317D7F75} + + + {A8AA66CC-3D87-6FDE-A1B4-B887C8121C8F} + + + {006C149E-E6DC-83F1-E93C-AE10C5895570} + + + {C261113A-9C59-D724-DCDD-859CF67B9BE2} + + + {D7B09536-16DA-F0F4-AD74-03D913B385A5} + + + {5884DF92-9D52-5544-FF42-38632E5B65AA} + + + {9A1AE3EF-2A80-00A9-CED8-9F6882B7F0D7} + + + {4813E92F-51D1-F58C-585C-A87180EFF2F0} + + + {00BFED91-A90A-C4B2-27E9-7FD41FA77182} + + + {9BA63F38-E610-76BF-FF0E-94FB800A1FCA} + + + {C75C5513-B888-5B22-A4E3-D628A4E92CCA} + + + {571613DD-E1EF-A8E9-35CF-24185ADC93E8} + + + {D6B250F5-FFF3-4CE1-810E-E974A3E4DF68} + + + {E8AB9EA5-1A06-F188-A74A-A28D3D4500D1} + + + {35612D87-AC14-489B-34CE-4F81393F7F5D} + + + {C0E0C400-CE8F-50D4-55F2-4E4A6AD63499} + + + {E60D2C67-D5F8-64F6-0C0E-052DD497F551} + + + {451BDE86-8BF6-A12F-CA9A-CD61FD681002} + + + {34DF868B-7BA7-DB98-6939-2E01C64C4A89} + + + {0DD28281-C7E1-F390-BE65-C1D50BE8459D} + + + {EBB4193F-698C-5CA5-4ACF-4CBE2F0B50DF} + + + {41025821-15AB-5C66-A3FD-5422E5287629} + + + {BAFE1891-85B1-1831-72BF-36EBE6D1BF26} + + + {FD091712-AD52-E601-F4CD-3DB298E6DC23} + + + {101863B2-7B8B-A610-EBCD-94B870D9C6A4} + + + {D5AFD8F1-8B35-D770-6869-4D7357BECB4E} + + + {2BB10AFD-579D-265D-60DB-5789BE03A558} + + + {E8BB7803-D7E1-7FEB-5284-95545DD2A608} + + + {F85F9E97-B70B-4BBF-FFA2-AEDA6BCC9574} + + + {035F5ED5-797B-347B-9A1D-32E4616E3384} + + + {E6D67E45-2253-ACF6-E413-B02C53C40580} + + + {4D5E4404-B9E5-6940-E1CA-3D840E5202B8} + + + {8B8631A1-7FE2-3897-F798-EBC155F6FCC1} + + + {FE9D8E8B-2E7F-D4D9-9877-24703F74EBF8} + + + {9DB8125F-53E6-B090-CBFE-97E27CDDBD0A} + + + {6CAE32A5-FC60-7361-499A-8A460AFA309F} + + + {40731434-CE36-4C65-F807-BB8911C89B7E} + + + {D69D26BE-96E5-5F64-4D16-221DB335358C} + + + {9F6FF683-16F9-008D-B4D9-2CDB864F0BF4} + + + {EB58F05A-A968-CEBE-40C4-107CDD8F240F} + + + {5FCF559E-451A-CB1E-B177-A5DC5A0005BB} + + + {D78296AF-218E-B17E-7F8B-9D148601188D} + + + {B96EBA26-E668-FFAF-FC53-1EC1337DAF5A} + + + {D8532E5E-469E-5042-EFC8-238241704735} + + + {777B5D1D-9AF0-B22B-8894-034603EE97F5} + + + {8292766D-2459-2E7E-7615-17216318BA93} + + + {9BD56105-DAB4-EBD5-00DD-BD540E98FE88} + + + {10472B2C-9888-D269-F351-0D0AC3BCD16C} + + + {BF23FC10-1D57-2A9B-706F-6DD8A7B593D4} + + + {092EFC17-7C95-7E04-0ACA-0D61A462EE81} + + + {285118C6-8FDA-7DCE-BEF4-FFB2120876C5} + + + {69ED6B61-9B8D-D47E-E4A6-2E9F9A94A75A} + + + {7CDB7CD1-BB96-F593-3C78-1E06182B5839} + + + {B0A708DE-B4CF-196B-14FB-DC8221509B8E} + + + {34F46ADE-EE31-227A-A69E-7732E70145F1} + + + {BB9B3C77-17FB-E994-8B75-88F1727E4655} + + + {C0971D77-2F14-190A-E2AE-89D6285F4D5A} + + + {AABEA333-6524-8891-51C7-6DAEB5700628} + + + {F2D29337-983E-BAD7-7B5C-E0AB3D53D404} + + + {C674B0FB-1FC0-2986-94B1-083845018994} + + + {0AFC1CE8-F6E6-9817-8C21-8432B2A375DA} + + + {0D1AF264-3AC1-78A2-B2A4-AE6171F9194A} + + + {9A5DB854-CFFB-5F88-C566-0E10F994DDB3} + + + {38A5DDC7-416E-548F-39DA-887875FE6B20} + + + {980FE2DB-05D3-5FDA-79DA-067A56F5D19D} + + + {F336DC25-747A-0663-93D6-E3EB9AA0CBF8} + + + {7D78546A-80FC-4DCA-00B9-F191F0AB2179} + + + {9EB3EC7F-2AB7-DDAA-3C05-DF382B728D3F} + + + {6B9FBFDC-1D10-6246-356D-00FF4535CECB} + + + {D6FCFC8E-7136-9109-78C0-91A3EB4C443F} + + + {EBF18AC1-F0ED-937A-2824-4307CE2ADAF7} + + + {5A0F7922-2EFB-6465-57E4-A445B804EFB5} + + + {4EC45416-0E7C-7567-6F75-D0C8CEE7DC4F} + + + {C2985031-0496-55B5-41A8-BAB99E53D89D} + + + {FB4AB426-7009-0036-BB75-E34256AA7C89} + + + {E684D858-09E8-0251-8E86-5657129641E1} + + + {1EF1BF17-F941-243A-04D1-EE617D140CBA} + + + {344DB016-679C-FBD0-3EC6-4570C47522DE} + + + {3D9758A0-9359-1710-87C1-05D475C08B17} + + + {E824435F-FC7B-10BE-5D1A-5DACC51A8836} + + + {86737735-F6BA-F64A-5EC7-5C9F36755F79} + + + {4DC60E78-BBC0-B540-63A2-37E14ABBEF09} + + + {80C72173-A1E1-C3C5-9288-B889CE2EAFEA} + + + {4138B955-AA0B-FA86-DBF9-404CAFFFA866} + + + {2B4166B8-F470-F07C-4F51-D2DAAAECBB18} + + + {9C295115-C0CD-3129-1C4D-FB53299B23FB} + + + {65526A8B-3447-9DF0-FD5D-00D111126027} + + + {A54A1F5C-F32F-F97B-9E8A-69922B770A54} + + + {B90A44F3-B62D-B5C0-81A2-683D2650AEE6} + + + {DAF30656-5915-0E45-C4E4-54439617D525} + + + {9266EA90-6A0A-5DDB-9CB7-966BEF03BA5C} + + + {9C713CBA-A9E2-5F4E-F83C-2CAB8533913C} + + + {63571A07-9AA3-5BB0-1103-0B42A2E6BC9E} + + + {314F43F2-BC8F-B464-EAE7-86B9675454E9} + + + {874C5D0C-6D29-68EE-38BB-26200B56BC89} + + + {86BAA7A7-DC50-35B6-910B-932AEAF257F2} + + + {6B7BE34D-1BC1-C7B9-111F-C55CA8250943} + + + {9B6B6D54-D378-80C2-8CC9-D1D8FB44C2A8} + + + {D0584AC3-6837-14F6-90BF-5EA604D1F074} + + + {794B64EC-B809-32E3-AD00-4EE6A74802CA} + + + {67BE498C-9E1F-C73A-B99A-387C034CE680} + + + {42F7BE9D-3C8A-AE26-289B-8F355C068036} + + + {7868764A-6572-381A-906C-9C26792A4C29} + + + {03678508-A517-48BB-FB4A-485628C34E08} + + + {07D27C1D-3227-F527-356C-17DA11551A99} + + + {6146D580-99D2-A6C8-5908-30DC355BB6BA} + + + {C67003E8-BEA8-2188-F4B3-A122F4B4FA3F} + + + {09B91E68-1FF4-C7ED-9055-D4D96E66A0BA} + + + {30B3DA63-C1E4-F2EA-CEF0-8035D8CBFF64} + + + {4F24EEED-AA33-AC6C-9A39-72E71CF83EF0} + + + {0F70B1A9-BB50-23F5-2AE7-F95E51A00389} + + + {D4C8DC40-2CD2-04B6-05D0-1E7A88841390} + + + {58BED6AF-DB89-7560-B2B8-D937C1C0825A} + + + {B958F86B-6926-8D9B-2FC6-8BFD4BDC72C9} + + + {DB624F7D-D513-25AC-C13C-B9062EB3BEEE} + + + {89AA9B6C-4029-A34F-C1B0-3B5D8691F4D4} + + + {1A7F541C-B032-9C66-C320-A13B2A8A9866} + + + {4BAB7C18-51AB-0D9D-83CD-9C37F28D2E38} + + + {5523922E-8B0C-A52B-477C-752C09F8197F} + + + {857B6D8B-0ECB-FE9E-D1EB-D5E45E72F057} + + + {BAA582FA-40B7-320E-EE7A-4C3892C7BE72} + + + {89B3E447-34BE-C691-638E-09796C6B647E} + + + {9BE78436-DBF4-658C-579B-ED19FFD0EB5D} + + + {21E7FA61-9E0A-4BA1-04B7-AF47AFA9CB8B} + + + {632B4C79-AF7D-BFB5-D006-5AE67F607130} + + + {B10E20C2-4583-2B79-60B7-FE4D4B044313} + + + {CFB54F15-8A8A-0505-9B7F-ECA41CEE38E8} + + + {911F0159-A7A8-4A43-3FD4-154F62F4A44B} + + + {9D5816C2-E2B2-2E3F-B095-AC8BD1100D29} + + + {3FDCD000-763F-8477-9AF8-70ABA2E91E5E} + + + {0947506F-66FA-EF8D-8A4E-4D48BCDBB226} + + + {E4B6AED3-F54C-3FF2-069F-640BACAE0E08} + + + {D5EADBCC-6A1C-C940-0206-26E49110AF08} + + + {D27DC92D-5BEB-9294-DCD1-81D54E245AD5} + + + {BCD73D20-42B1-6CDB-DE66-B06236A60F47} + + + {20DC13F6-2369-8841-9F0B-D13FA14EEE74} + + + {A302A8DB-120F-9EBB-A3D5-2C29963AA56B} + + + {45489C2A-6E0E-CCDC-6638-0DACEEB63CCA} + + + {F1B90726-DB55-0293-BFAF-C65C7DF5489C} + + + {2C55FD42-0ACD-B0B8-7EAE-EB17F09BAEEC} + + + {B68CD2B2-701F-9AB7-4638-2485D6E06BCF} + + + {B0B7C78E-729E-0FFA-D611-82AE8BC7FE2C} + + + {0A4F7E12-220C-14EF-0026-9C0629FA9C17} + + + {37F49E10-4E62-6D5C-FF70-722D0CA3D97E} + + + {160D9882-0F68-278D-C5F9-8960FD7421D2} + + + {4CED05DA-E0A2-E548-F753-1F2EF299A8E3} + + + {294E4CD5-B06F-97D1-04A3-51871CEA507C} + + + {77228F15-BD91-06FF-2C7E-0377D25C2C94} + + + {5CB531E6-BF9A-2C50-056C-EE5A525D28D3} + + + {E4EA47E5-B41C-2A19-1783-7E9104096ECD} + + + {B331BC33-9770-3DB5-73F2-BC2469ECCF7F} + + + {46A17AC9-0BFF-B5CE-26D6-B9D1992C88AC} + + + {D90A8DF7-FBAB-D363-13C0-6707BB22B72B} + + + {8AE77C40-6839-EC37-4515-BD3CC269BCE4} + + + {0EAD99DB-011F-09E5-45A2-365F646EB004} + + + {F57590C6-3B90-1BE1-1006-488BA33E8BD9} + + + {7C319D73-0D93-5842-0874-398D2D3038D5} + + + {2CB4DB0C-DD3B-6195-D822-76EC7A5C88D2} + + + {FE3CB19C-EF43-5CF5-DAF0-09D4E43D0AB9} + + + {FE7E6CD5-C7A0-DB20-4E7E-D6E7F08C4578} + + + {895C2D33-E08D-B1BA-BB36-FC4CA65090C8} + + + {D64A57DB-A956-5519-1929-1D929B56E1B0} + + + {5A99CC24-AC45-7ED6-C11A-B8B86E76D884} + + + {7A131EEC-25A7-22F6-2839-A2194DDF3007} + + + {EA9DB76C-CEF7-6BFC-2070-28B7DF8E8063} + + + {3C206A40-6F1B-E683-ACF1-DEC3703D0140} + + + {DF95D4BF-E18C-125A-5EBB-8993A06E232C} + + + {118946F2-AC24-0F09-62D5-753DF87A60CD} + + + {07329F9B-7D3D-CEB3-C771-714842076140} + + + {08BBBECB-B0D1-7611-37EC-F57E1D0CE2A2} + + + {268E8F2A-980C-BF2F-B161-AACABC9D91F3} + + + {A4D76113-9EDC-DA60-D89B-5BACF7F1C426} + + + {1A9221A3-E993-70B2-6EA2-8E1DB5FF646A} + + + {CC2DAD7A-5B45-62AB-4C54-6FE6B1AE86C3} + + + {599138A9-EA63-53DD-941F-ABE3412D2949} + + + {422A4014-8587-1AE6-584F-32A62613A37B} + + + {9FBFF5E5-56F1-34A1-2C85-F760DA2B1EB7} + + + {CB8DF3B2-0409-6D59-C5D4-A034EBB7F973} + + + {7774F72F-C951-B8AB-E927-E34AD23C52C8} + + + {658BADF8-7095-C722-F9EC-9F36E8818187} + + + {2C58F450-CD01-0231-2F16-0D4D68565164} + + + {FE955B6B-68AC-AA07-70D8-2413F6DB65C8} + + + {7ED5A90E-41AF-A1EF-659B-37CEEAB9BA61} + + + + + TestRunner\Source + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\duktape\examples\alloc-hybrid + + + JUCE Modules\blueprint\duktape\examples\alloc-logging + + + JUCE Modules\blueprint\duktape\examples\alloc-torture + + + JUCE Modules\blueprint\duktape\examples\cmdline + + + JUCE Modules\blueprint\duktape\examples\cmdline + + + JUCE Modules\blueprint\duktape\examples\codepage-conv + + + JUCE Modules\blueprint\duktape\examples\codepage-conv + + + JUCE Modules\blueprint\duktape\examples\cpp-exceptions + + + JUCE Modules\blueprint\duktape\examples\debug-trans-dvalue + + + JUCE Modules\blueprint\duktape\examples\debug-trans-dvalue + + + JUCE Modules\blueprint\duktape\examples\debug-trans-socket + + + JUCE Modules\blueprint\duktape\examples\debug-trans-socket + + + JUCE Modules\blueprint\duktape\examples\dummy-date-provider + + + JUCE Modules\blueprint\duktape\examples\eval + + + JUCE Modules\blueprint\duktape\examples\eventloop + + + JUCE Modules\blueprint\duktape\examples\eventloop + + + JUCE Modules\blueprint\duktape\examples\eventloop + + + JUCE Modules\blueprint\duktape\examples\eventloop + + + JUCE Modules\blueprint\duktape\examples\eventloop + + + JUCE Modules\blueprint\duktape\examples\guide + + + JUCE Modules\blueprint\duktape\examples\guide + + + JUCE Modules\blueprint\duktape\examples\guide + + + JUCE Modules\blueprint\duktape\examples\hello + + + JUCE Modules\blueprint\duktape\examples\jxpretty + + + JUCE Modules\blueprint\duktape\examples\sandbox + + + JUCE Modules\blueprint\duktape\extras\alloc-pool + + + JUCE Modules\blueprint\duktape\extras\alloc-pool + + + JUCE Modules\blueprint\duktape\extras\cbor + + + JUCE Modules\blueprint\duktape\extras\cbor + + + JUCE Modules\blueprint\duktape\extras\console + + + JUCE Modules\blueprint\duktape\extras\console + + + JUCE Modules\blueprint\duktape\extras\duk-v1-compat + + + JUCE Modules\blueprint\duktape\extras\duk-v1-compat + + + JUCE Modules\blueprint\duktape\extras\logging + + + JUCE Modules\blueprint\duktape\extras\logging + + + JUCE Modules\blueprint\duktape\extras\minimal-printf + + + JUCE Modules\blueprint\duktape\extras\minimal-printf + + + JUCE Modules\blueprint\duktape\extras\module-duktape + + + JUCE Modules\blueprint\duktape\extras\module-duktape + + + JUCE Modules\blueprint\duktape\extras\module-node + + + JUCE Modules\blueprint\duktape\extras\module-node + + + JUCE Modules\blueprint\duktape\extras\print-alert + + + JUCE Modules\blueprint\duktape\extras\print-alert + + + JUCE Modules\blueprint\duktape\src + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-noline + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\tests + + + JUCE Modules\blueprint\yoga\benchmark + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\jni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\lyra + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\lyra + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\lyra + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\lyra + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\codegear + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\codegear + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\xcode\Samples\FrameworkSample + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\xcode\Samples\FrameworkSample + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\tests + + + JUCE Modules\blueprint\yoga\testutil\src\main\cpp\jni + + + JUCE Modules\blueprint\yoga\testutil\src\main\cpp\testutil + + + JUCE Modules\blueprint\yoga\util + + + JUCE Modules\blueprint\yoga\util + + + JUCE Modules\blueprint\yoga\yoga\event + + + JUCE Modules\blueprint\yoga\yoga\internal + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\YogaKit\Source + + + JUCE Modules\blueprint\yoga\YogaKit\Source + + + JUCE Modules\blueprint\yoga\YogaKit\Source + + + JUCE Modules\blueprint\yoga\YogaKit\Tests + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample\ViewControllers + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample\ViewControllers + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample\Views + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample + + + JUCE Modules\blueprint\yoga\YogaKit\YogaKitSample\YogaKitSample + + + JUCE Modules\blueprint + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\synthesisers + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics + + + JUCE Modules\juce_audio_basics + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices + + + JUCE Modules\juce_audio_devices + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\sampler + + + JUCE Modules\juce_audio_formats + + + JUCE Modules\juce_audio_formats + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors + + + JUCE Modules\juce_audio_processors + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\unit_tests + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core + + + JUCE Modules\juce_core + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography + + + JUCE Modules\juce_cryptography + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\undomanager + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures + + + JUCE Modules\juce_data_structures + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events + + + JUCE Modules\juce_events + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats + + + JUCE Modules\juce_graphics\image_formats + + + JUCE Modules\juce_graphics\image_formats + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\placement + + + JUCE Modules\juce_graphics + + + JUCE Modules\juce_graphics + + + JUCE Modules\juce_gui_basics\application + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics + + + JUCE Modules\juce_gui_basics + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\documents + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra + + + JUCE Modules\juce_gui_extra + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\utils + + + JUCE Modules\juce_opengl + + + JUCE Modules\juce_opengl + + + JUCE Modules\juce_video\capture + + + JUCE Modules\juce_video\playback + + + JUCE Modules\juce_video + + + JUCE Modules\juce_video + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\core + + + JUCE Modules\blueprint\duktape\examples\alloc-hybrid + + + JUCE Modules\blueprint\duktape\examples\alloc-logging + + + JUCE Modules\blueprint\duktape\examples\alloc-torture + + + JUCE Modules\blueprint\duktape\examples\cmdline + + + JUCE Modules\blueprint\duktape\examples\codepage-conv + + + JUCE Modules\blueprint\duktape\examples\debug-trans-dvalue + + + JUCE Modules\blueprint\duktape\examples\debug-trans-socket + + + JUCE Modules\blueprint\duktape\examples\eventloop + + + JUCE Modules\blueprint\duktape\extras\alloc-pool + + + JUCE Modules\blueprint\duktape\extras\alloc-pool + + + JUCE Modules\blueprint\duktape\extras\cbor + + + JUCE Modules\blueprint\duktape\extras\console + + + JUCE Modules\blueprint\duktape\extras\duk-v1-compat + + + JUCE Modules\blueprint\duktape\extras\logging + + + JUCE Modules\blueprint\duktape\extras\minimal-printf + + + JUCE Modules\blueprint\duktape\extras\module-duktape + + + JUCE Modules\blueprint\duktape\extras\module-node + + + JUCE Modules\blueprint\duktape\extras\print-alert + + + JUCE Modules\blueprint\duktape\src + + + JUCE Modules\blueprint\duktape\src + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-noline + + + JUCE Modules\blueprint\duktape\src-noline + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\duktape\src-separate + + + JUCE Modules\blueprint\internal + + + JUCE Modules\blueprint\internal + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\csharp\Yoga + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\java\jni + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\javascript\sources + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni\detail + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\fbjni + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\lyra + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp\include\lyra + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock\internal\custom + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock\internal\custom + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock\internal\custom + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\include\gmock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal\custom + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal\custom + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal\custom + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest\internal + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\include\gtest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\samples + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\src + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\xcode\Samples\FrameworkSample + + + JUCE Modules\blueprint\yoga\lib\jni\real + + + JUCE Modules\blueprint\yoga\lib\jni + + + JUCE Modules\blueprint\yoga\testutil\src\main\cpp\include\yoga\testutil + + + JUCE Modules\blueprint\yoga\util + + + JUCE Modules\blueprint\yoga\yoga\event + + + JUCE Modules\blueprint\yoga\yoga\internal + + + JUCE Modules\blueprint\yoga\yoga\internal + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\yoga + + + JUCE Modules\blueprint\yoga\YogaKit\Source + + + JUCE Modules\blueprint\yoga\YogaKit\Source + + + JUCE Modules\blueprint\yoga\YogaKit\Source + + + JUCE Modules\blueprint + + + JUCE Modules\juce_audio_basics\audio_play_head + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\native + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\synthesisers + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\protected + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\protected + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\protected + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\coupled + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\coupled + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\floor + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\uncoupled + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\sampler + + + JUCE Modules\juce_audio_formats + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\include + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\unit_tests + + + JUCE Modules\juce_core\unit_tests + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\undomanager + + + JUCE Modules\juce_data_structures\undomanager + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\placement + + + JUCE Modules\juce_graphics\placement + + + JUCE Modules\juce_graphics + + + JUCE Modules\juce_gui_basics\application + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\documents + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra + + + JUCE Modules\juce_opengl\geometry + + + JUCE Modules\juce_opengl\geometry + + + JUCE Modules\juce_opengl\geometry + + + JUCE Modules\juce_opengl\geometry + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\utils + + + JUCE Modules\juce_opengl + + + JUCE Modules\juce_video\capture + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\playback + + + JUCE Modules\juce_video + + + JUCE Library Code + + + JUCE Library Code + + + + + JUCE Modules\blueprint\duktape\licenses + + + JUCE Modules\blueprint\duktape\licenses + + + JUCE Modules\blueprint\duktape\licenses + + + JUCE Modules\blueprint\duktape\licenses + + + JUCE Modules\blueprint\duktape\licenses + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape\src-input + + + JUCE Modules\blueprint\duktape + + + JUCE Modules\blueprint\yoga\.github + + + JUCE Modules\blueprint\yoga\android + + + JUCE Modules\blueprint\yoga\java + + + JUCE Modules\blueprint\yoga\lib\fb\src\main\cpp + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_5 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_5 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_5 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_5 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_5 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_6 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_6 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_6 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_6 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_6 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_7 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_7 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_7 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_7 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs\v1_7 + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googlemock + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\docs + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest\test + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest\googletest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest + + + JUCE Modules\blueprint\yoga\lib\gtest\googletest + + + JUCE Modules\blueprint\yoga\testutil\src\main\cpp + + + JUCE Modules\blueprint\yoga\website\contents\contributing + + + JUCE Modules\blueprint\yoga\website\contents\contributing + + + JUCE Modules\blueprint\yoga\website\contents\contributing + + + JUCE Modules\blueprint\yoga\website\contents\examples + + + JUCE Modules\blueprint\yoga\website\contents\examples + + + JUCE Modules\blueprint\yoga\website\contents\examples + + + JUCE Modules\blueprint\yoga\website\contents\getting-started + + + JUCE Modules\blueprint\yoga\website\contents\getting-started + + + JUCE Modules\blueprint\yoga\website\contents\getting-started + + + JUCE Modules\blueprint\yoga\website\contents\getting-started + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website\contents\properties + + + JUCE Modules\blueprint\yoga\website + + + JUCE Modules\blueprint\yoga\YogaKit + + + JUCE Modules\blueprint\yoga + + + JUCE Modules\blueprint\yoga + + + JUCE Modules\blueprint\yoga + + + JUCE Modules\blueprint\yoga + + + JUCE Modules\juce_audio_devices\native\oboe + + + JUCE Modules\juce_audio_devices\native\oboe + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7 + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_core\native\java + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + + + JUCE Library Code + + + diff --git a/examples/TestRunner/Builds/VisualStudio2019/resources.rc b/examples/TestRunner/Builds/VisualStudio2019/resources.rc new file mode 100644 index 00000000..9d6bf491 --- /dev/null +++ b/examples/TestRunner/Builds/VisualStudio2019/resources.rc @@ -0,0 +1,31 @@ +#pragma code_page(65001) + +#ifdef JUCE_USER_DEFINED_RC_FILE + #include JUCE_USER_DEFINED_RC_FILE +#else + +#undef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#include + +VS_VERSION_INFO VERSIONINFO +FILEVERSION 1,0,0,0 +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + BEGIN + VALUE "FileDescription", "TestRunner\0" + VALUE "FileVersion", "1.0.0\0" + VALUE "ProductName", "TestRunner\0" + VALUE "ProductVersion", "1.0.0\0" + END + END + + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif diff --git a/examples/TestRunner/JuceLibraryCode/AppConfig.h b/examples/TestRunner/JuceLibraryCode/AppConfig.h index 5df86107..c06e06c1 100644 --- a/examples/TestRunner/JuceLibraryCode/AppConfig.h +++ b/examples/TestRunner/JuceLibraryCode/AppConfig.h @@ -1,282 +1,299 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - There's a section below where you can add your own custom code safely, and the - Projucer will preserve the contents of that block, but the best way to change - any of these definitions is by using the Projucer's project settings. - - Any commented-out settings will assume their default values. - -*/ - -#pragma once - -//============================================================================== -// [BEGIN_USER_CODE_SECTION] - -// (You can add your own code in this section, and the Projucer will not overwrite it) - -// [END_USER_CODE_SECTION] - -/* - ============================================================================== - - In accordance with the terms of the JUCE 5 End-Use License Agreement, the - JUCE Code in SECTION A cannot be removed, changed or otherwise rendered - ineffective unless you have a JUCE Indie or Pro license, or are using JUCE - under the GPL v3 license. - - End User License Agreement: www.juce.com/juce-5-licence - - ============================================================================== -*/ - -// BEGIN SECTION A - -#ifndef JUCE_DISPLAY_SPLASH_SCREEN - #define JUCE_DISPLAY_SPLASH_SCREEN 0 -#endif - -#ifndef JUCE_REPORT_APP_USAGE - #define JUCE_REPORT_APP_USAGE 1 -#endif - -// END SECTION A - -#define JUCE_USE_DARK_SPLASH_SCREEN 1 - -//============================================================================== -#define JUCE_MODULE_AVAILABLE_blueprint 1 -#define JUCE_MODULE_AVAILABLE_juce_audio_basics 1 -#define JUCE_MODULE_AVAILABLE_juce_audio_devices 1 -#define JUCE_MODULE_AVAILABLE_juce_audio_formats 1 -#define JUCE_MODULE_AVAILABLE_juce_audio_processors 1 -#define JUCE_MODULE_AVAILABLE_juce_core 1 -#define JUCE_MODULE_AVAILABLE_juce_cryptography 1 -#define JUCE_MODULE_AVAILABLE_juce_data_structures 1 -#define JUCE_MODULE_AVAILABLE_juce_events 1 -#define JUCE_MODULE_AVAILABLE_juce_graphics 1 -#define JUCE_MODULE_AVAILABLE_juce_gui_basics 1 -#define JUCE_MODULE_AVAILABLE_juce_gui_extra 1 -#define JUCE_MODULE_AVAILABLE_juce_opengl 1 -#define JUCE_MODULE_AVAILABLE_juce_video 1 - -#define JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED 1 - -//============================================================================== -// juce_audio_devices flags: - -#ifndef JUCE_USE_WINRT_MIDI - //#define JUCE_USE_WINRT_MIDI 0 -#endif - -#ifndef JUCE_ASIO - //#define JUCE_ASIO 0 -#endif - -#ifndef JUCE_WASAPI - //#define JUCE_WASAPI 1 -#endif - -#ifndef JUCE_WASAPI_EXCLUSIVE - //#define JUCE_WASAPI_EXCLUSIVE 0 -#endif - -#ifndef JUCE_DIRECTSOUND - //#define JUCE_DIRECTSOUND 1 -#endif - -#ifndef JUCE_ALSA - //#define JUCE_ALSA 1 -#endif - -#ifndef JUCE_JACK - //#define JUCE_JACK 0 -#endif - -#ifndef JUCE_BELA - //#define JUCE_BELA 0 -#endif - -#ifndef JUCE_USE_ANDROID_OBOE - //#define JUCE_USE_ANDROID_OBOE 0 -#endif - -#ifndef JUCE_USE_ANDROID_OPENSLES - //#define JUCE_USE_ANDROID_OPENSLES 0 -#endif - -#ifndef JUCE_DISABLE_AUDIO_MIXING_WITH_OTHER_APPS - //#define JUCE_DISABLE_AUDIO_MIXING_WITH_OTHER_APPS 0 -#endif - -//============================================================================== -// juce_audio_formats flags: - -#ifndef JUCE_USE_FLAC - //#define JUCE_USE_FLAC 1 -#endif - -#ifndef JUCE_USE_OGGVORBIS - //#define JUCE_USE_OGGVORBIS 1 -#endif - -#ifndef JUCE_USE_MP3AUDIOFORMAT - //#define JUCE_USE_MP3AUDIOFORMAT 0 -#endif - -#ifndef JUCE_USE_LAME_AUDIO_FORMAT - //#define JUCE_USE_LAME_AUDIO_FORMAT 0 -#endif - -#ifndef JUCE_USE_WINDOWS_MEDIA_FORMAT - //#define JUCE_USE_WINDOWS_MEDIA_FORMAT 1 -#endif - -//============================================================================== -// juce_audio_processors flags: - -#ifndef JUCE_PLUGINHOST_VST - //#define JUCE_PLUGINHOST_VST 0 -#endif - -#ifndef JUCE_PLUGINHOST_VST3 - //#define JUCE_PLUGINHOST_VST3 0 -#endif - -#ifndef JUCE_PLUGINHOST_AU - //#define JUCE_PLUGINHOST_AU 0 -#endif - -#ifndef JUCE_PLUGINHOST_LADSPA - //#define JUCE_PLUGINHOST_LADSPA 0 -#endif - -//============================================================================== -// juce_core flags: - -#ifndef JUCE_FORCE_DEBUG - //#define JUCE_FORCE_DEBUG 0 -#endif - -#ifndef JUCE_LOG_ASSERTIONS - //#define JUCE_LOG_ASSERTIONS 0 -#endif - -#ifndef JUCE_CHECK_MEMORY_LEAKS - //#define JUCE_CHECK_MEMORY_LEAKS 1 -#endif - -#ifndef JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES - //#define JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES 0 -#endif - -#ifndef JUCE_INCLUDE_ZLIB_CODE - //#define JUCE_INCLUDE_ZLIB_CODE 1 -#endif - -#ifndef JUCE_USE_CURL - //#define JUCE_USE_CURL 0 -#endif - -#ifndef JUCE_LOAD_CURL_SYMBOLS_LAZILY - //#define JUCE_LOAD_CURL_SYMBOLS_LAZILY 0 -#endif - -#ifndef JUCE_CATCH_UNHANDLED_EXCEPTIONS - //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1 -#endif - -#ifndef JUCE_ALLOW_STATIC_NULL_VARIABLES - //#define JUCE_ALLOW_STATIC_NULL_VARIABLES 1 -#endif - -#ifndef JUCE_STRICT_REFCOUNTEDPOINTER - #define JUCE_STRICT_REFCOUNTEDPOINTER 1 -#endif - -//============================================================================== -// juce_events flags: - -#ifndef JUCE_EXECUTE_APP_SUSPEND_ON_IOS_BACKGROUND_TASK - //#define JUCE_EXECUTE_APP_SUSPEND_ON_IOS_BACKGROUND_TASK 0 -#endif - -//============================================================================== -// juce_graphics flags: - -#ifndef JUCE_USE_COREIMAGE_LOADER - //#define JUCE_USE_COREIMAGE_LOADER 1 -#endif - -#ifndef JUCE_USE_DIRECTWRITE - //#define JUCE_USE_DIRECTWRITE 1 -#endif - -#ifndef JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING - //#define JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING 0 -#endif - -//============================================================================== -// juce_gui_basics flags: - -#ifndef JUCE_ENABLE_REPAINT_DEBUGGING - //#define JUCE_ENABLE_REPAINT_DEBUGGING 0 -#endif - -#ifndef JUCE_USE_XRANDR - //#define JUCE_USE_XRANDR 1 -#endif - -#ifndef JUCE_USE_XINERAMA - //#define JUCE_USE_XINERAMA 1 -#endif - -#ifndef JUCE_USE_XSHM - //#define JUCE_USE_XSHM 1 -#endif - -#ifndef JUCE_USE_XRENDER - //#define JUCE_USE_XRENDER 0 -#endif - -#ifndef JUCE_USE_XCURSOR - //#define JUCE_USE_XCURSOR 1 -#endif - -#ifndef JUCE_WIN_PER_MONITOR_DPI_AWARE - //#define JUCE_WIN_PER_MONITOR_DPI_AWARE 1 -#endif - -//============================================================================== -// juce_gui_extra flags: - -#ifndef JUCE_WEB_BROWSER - //#define JUCE_WEB_BROWSER 1 -#endif - -#ifndef JUCE_ENABLE_LIVE_CONSTANT_EDITOR - //#define JUCE_ENABLE_LIVE_CONSTANT_EDITOR 0 -#endif - -//============================================================================== -// juce_video flags: - -#ifndef JUCE_USE_CAMERA - //#define JUCE_USE_CAMERA 0 -#endif - -#ifndef JUCE_SYNC_VIDEO_VOLUME_WITH_OS_MEDIA_VOLUME - //#define JUCE_SYNC_VIDEO_VOLUME_WITH_OS_MEDIA_VOLUME 1 -#endif - -//============================================================================== -#ifndef JUCE_STANDALONE_APPLICATION - #if defined(JucePlugin_Name) && defined(JucePlugin_Build_Standalone) - #define JUCE_STANDALONE_APPLICATION JucePlugin_Build_Standalone - #else - #define JUCE_STANDALONE_APPLICATION 1 - #endif -#endif +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + There's a section below where you can add your own custom code safely, and the + Projucer will preserve the contents of that block, but the best way to change + any of these definitions is by using the Projucer's project settings. + + Any commented-out settings will assume their default values. + +*/ + +#pragma once + +//============================================================================== +// [BEGIN_USER_CODE_SECTION] + +// (You can add your own code in this section, and the Projucer will not overwrite it) + +// [END_USER_CODE_SECTION] + +/* + ============================================================================== + + In accordance with the terms of the JUCE 6 End-Use License Agreement, the + JUCE Code in SECTION A cannot be removed, changed or otherwise rendered + ineffective unless you have a JUCE Indie or Pro license, or are using JUCE + under the GPL v3 license. + + End User License Agreement: www.juce.com/juce-6-licence + + ============================================================================== +*/ + +// BEGIN SECTION A + +#ifndef JUCE_DISPLAY_SPLASH_SCREEN + #define JUCE_DISPLAY_SPLASH_SCREEN 1 +#endif + +// END SECTION A + +#define JUCE_USE_DARK_SPLASH_SCREEN 1 + +#define JUCE_PROJUCER_VERSION 0x60005 + +//============================================================================== +#define JUCE_MODULE_AVAILABLE_blueprint 1 +#define JUCE_MODULE_AVAILABLE_juce_audio_basics 1 +#define JUCE_MODULE_AVAILABLE_juce_audio_devices 1 +#define JUCE_MODULE_AVAILABLE_juce_audio_formats 1 +#define JUCE_MODULE_AVAILABLE_juce_audio_processors 1 +#define JUCE_MODULE_AVAILABLE_juce_core 1 +#define JUCE_MODULE_AVAILABLE_juce_cryptography 1 +#define JUCE_MODULE_AVAILABLE_juce_data_structures 1 +#define JUCE_MODULE_AVAILABLE_juce_events 1 +#define JUCE_MODULE_AVAILABLE_juce_graphics 1 +#define JUCE_MODULE_AVAILABLE_juce_gui_basics 1 +#define JUCE_MODULE_AVAILABLE_juce_gui_extra 1 +#define JUCE_MODULE_AVAILABLE_juce_opengl 1 +#define JUCE_MODULE_AVAILABLE_juce_video 1 + +#define JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED 1 + +//============================================================================== +// blueprint flags: + +#ifndef BLUEPRINT_INCLUDE_UNIT_TESTS + #define BLUEPRINT_INCLUDE_UNIT_TESTS 1 +#endif + +//============================================================================== +// juce_audio_devices flags: + +#ifndef JUCE_USE_WINRT_MIDI + //#define JUCE_USE_WINRT_MIDI 0 +#endif + +#ifndef JUCE_ASIO + //#define JUCE_ASIO 0 +#endif + +#ifndef JUCE_WASAPI + //#define JUCE_WASAPI 1 +#endif + +#ifndef JUCE_DIRECTSOUND + //#define JUCE_DIRECTSOUND 1 +#endif + +#ifndef JUCE_ALSA + //#define JUCE_ALSA 1 +#endif + +#ifndef JUCE_JACK + //#define JUCE_JACK 0 +#endif + +#ifndef JUCE_BELA + //#define JUCE_BELA 0 +#endif + +#ifndef JUCE_USE_ANDROID_OBOE + //#define JUCE_USE_ANDROID_OBOE 1 +#endif + +#ifndef JUCE_USE_OBOE_STABILIZED_CALLBACK + //#define JUCE_USE_OBOE_STABILIZED_CALLBACK 0 +#endif + +#ifndef JUCE_USE_ANDROID_OPENSLES + //#define JUCE_USE_ANDROID_OPENSLES 0 +#endif + +#ifndef JUCE_DISABLE_AUDIO_MIXING_WITH_OTHER_APPS + //#define JUCE_DISABLE_AUDIO_MIXING_WITH_OTHER_APPS 0 +#endif + +//============================================================================== +// juce_audio_formats flags: + +#ifndef JUCE_USE_FLAC + //#define JUCE_USE_FLAC 1 +#endif + +#ifndef JUCE_USE_OGGVORBIS + //#define JUCE_USE_OGGVORBIS 1 +#endif + +#ifndef JUCE_USE_MP3AUDIOFORMAT + //#define JUCE_USE_MP3AUDIOFORMAT 0 +#endif + +#ifndef JUCE_USE_LAME_AUDIO_FORMAT + //#define JUCE_USE_LAME_AUDIO_FORMAT 0 +#endif + +#ifndef JUCE_USE_WINDOWS_MEDIA_FORMAT + //#define JUCE_USE_WINDOWS_MEDIA_FORMAT 1 +#endif + +//============================================================================== +// juce_audio_processors flags: + +#ifndef JUCE_PLUGINHOST_VST + //#define JUCE_PLUGINHOST_VST 0 +#endif + +#ifndef JUCE_PLUGINHOST_VST3 + //#define JUCE_PLUGINHOST_VST3 0 +#endif + +#ifndef JUCE_PLUGINHOST_AU + //#define JUCE_PLUGINHOST_AU 0 +#endif + +#ifndef JUCE_PLUGINHOST_LADSPA + //#define JUCE_PLUGINHOST_LADSPA 0 +#endif + +#ifndef JUCE_CUSTOM_VST3_SDK + //#define JUCE_CUSTOM_VST3_SDK 0 +#endif + +//============================================================================== +// juce_core flags: + +#ifndef JUCE_FORCE_DEBUG + //#define JUCE_FORCE_DEBUG 0 +#endif + +#ifndef JUCE_LOG_ASSERTIONS + //#define JUCE_LOG_ASSERTIONS 0 +#endif + +#ifndef JUCE_CHECK_MEMORY_LEAKS + //#define JUCE_CHECK_MEMORY_LEAKS 1 +#endif + +#ifndef JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES + //#define JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES 0 +#endif + +#ifndef JUCE_INCLUDE_ZLIB_CODE + //#define JUCE_INCLUDE_ZLIB_CODE 1 +#endif + +#ifndef JUCE_USE_CURL + //#define JUCE_USE_CURL 1 +#endif + +#ifndef JUCE_LOAD_CURL_SYMBOLS_LAZILY + //#define JUCE_LOAD_CURL_SYMBOLS_LAZILY 0 +#endif + +#ifndef JUCE_CATCH_UNHANDLED_EXCEPTIONS + //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 0 +#endif + +#ifndef JUCE_ALLOW_STATIC_NULL_VARIABLES + //#define JUCE_ALLOW_STATIC_NULL_VARIABLES 0 +#endif + +#ifndef JUCE_STRICT_REFCOUNTEDPOINTER + #define JUCE_STRICT_REFCOUNTEDPOINTER 1 +#endif + +#ifndef JUCE_ENABLE_ALLOCATION_HOOKS + //#define JUCE_ENABLE_ALLOCATION_HOOKS 0 +#endif + +//============================================================================== +// juce_events flags: + +#ifndef JUCE_EXECUTE_APP_SUSPEND_ON_BACKGROUND_TASK + //#define JUCE_EXECUTE_APP_SUSPEND_ON_BACKGROUND_TASK 0 +#endif + +//============================================================================== +// juce_graphics flags: + +#ifndef JUCE_USE_COREIMAGE_LOADER + //#define JUCE_USE_COREIMAGE_LOADER 1 +#endif + +#ifndef JUCE_USE_DIRECTWRITE + //#define JUCE_USE_DIRECTWRITE 1 +#endif + +#ifndef JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING + //#define JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING 0 +#endif + +//============================================================================== +// juce_gui_basics flags: + +#ifndef JUCE_ENABLE_REPAINT_DEBUGGING + //#define JUCE_ENABLE_REPAINT_DEBUGGING 0 +#endif + +#ifndef JUCE_USE_XRANDR + //#define JUCE_USE_XRANDR 1 +#endif + +#ifndef JUCE_USE_XINERAMA + //#define JUCE_USE_XINERAMA 1 +#endif + +#ifndef JUCE_USE_XSHM + //#define JUCE_USE_XSHM 1 +#endif + +#ifndef JUCE_USE_XRENDER + //#define JUCE_USE_XRENDER 0 +#endif + +#ifndef JUCE_USE_XCURSOR + //#define JUCE_USE_XCURSOR 1 +#endif + +#ifndef JUCE_WIN_PER_MONITOR_DPI_AWARE + //#define JUCE_WIN_PER_MONITOR_DPI_AWARE 1 +#endif + +//============================================================================== +// juce_gui_extra flags: + +#ifndef JUCE_WEB_BROWSER + //#define JUCE_WEB_BROWSER 1 +#endif + +#ifndef JUCE_USE_WIN_WEBVIEW2 + //#define JUCE_USE_WIN_WEBVIEW2 0 +#endif + +#ifndef JUCE_ENABLE_LIVE_CONSTANT_EDITOR + //#define JUCE_ENABLE_LIVE_CONSTANT_EDITOR 0 +#endif + +//============================================================================== +// juce_video flags: + +#ifndef JUCE_USE_CAMERA + //#define JUCE_USE_CAMERA 0 +#endif + +#ifndef JUCE_SYNC_VIDEO_VOLUME_WITH_OS_MEDIA_VOLUME + //#define JUCE_SYNC_VIDEO_VOLUME_WITH_OS_MEDIA_VOLUME 1 +#endif + +//============================================================================== +#ifndef JUCE_STANDALONE_APPLICATION + #if defined(JucePlugin_Name) && defined(JucePlugin_Build_Standalone) + #define JUCE_STANDALONE_APPLICATION JucePlugin_Build_Standalone + #else + #define JUCE_STANDALONE_APPLICATION 1 + #endif +#endif diff --git a/examples/TestRunner/JuceLibraryCode/JuceHeader.h b/examples/TestRunner/JuceLibraryCode/JuceHeader.h index 04057e2c..8d40142d 100644 --- a/examples/TestRunner/JuceLibraryCode/JuceHeader.h +++ b/examples/TestRunner/JuceLibraryCode/JuceHeader.h @@ -1,47 +1,56 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This is the header file that your files should include in order to get all the - JUCE library headers. You should avoid including the JUCE headers directly in - your own source files, because that wouldn't pick up the correct configuration - options for your app. - -*/ - -#pragma once - -#include "AppConfig.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#if ! DONT_SET_USING_JUCE_NAMESPACE - // If your code uses a lot of JUCE classes, then this will obviously save you - // a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE. - using namespace juce; -#endif - -#if ! JUCE_DONT_DECLARE_PROJECTINFO -namespace ProjectInfo -{ - const char* const projectName = "TestRunner"; - const char* const companyName = ""; - const char* const versionString = "1.0.0"; - const int versionNumber = 0x10000; -} -#endif +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This is the header file that your files should include in order to get all the + JUCE library headers. You should avoid including the JUCE headers directly in + your own source files, because that wouldn't pick up the correct configuration + options for your app. + +*/ + +#pragma once + +#include "AppConfig.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#if defined (JUCE_PROJUCER_VERSION) && JUCE_PROJUCER_VERSION < JUCE_VERSION + /** If you've hit this error then the version of the Projucer that was used to generate this project is + older than the version of the JUCE modules being included. To fix this error, re-save your project + using the latest version of the Projucer or, if you aren't using the Projucer to manage your project, + remove the JUCE_PROJUCER_VERSION define from the AppConfig.h file. + */ + #error "This project was last saved using an outdated version of the Projucer! Re-save this project with the latest version to fix this error." +#endif + +#if ! DONT_SET_USING_JUCE_NAMESPACE + // If your code uses a lot of JUCE classes, then this will obviously save you + // a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE. + using namespace juce; +#endif + +#if ! JUCE_DONT_DECLARE_PROJECTINFO +namespace ProjectInfo +{ + const char* const projectName = "TestRunner"; + const char* const companyName = ""; + const char* const versionString = "1.0.0"; + const int versionNumber = 0x10000; +} +#endif diff --git a/examples/TestRunner/Source/Main.cpp b/examples/TestRunner/Source/Main.cpp index 54dcd10f..38632f55 100644 --- a/examples/TestRunner/Source/Main.cpp +++ b/examples/TestRunner/Source/Main.cpp @@ -1,23 +1,20 @@ -/* - ============================================================================== - - This file was auto-generated! - - It contains the basic startup code for a JUCE application. - - ============================================================================== -*/ - -#include "../JuceLibraryCode/JuceHeader.h" - -//============================================================================== -int main (int argc, char* argv[]) -{ - - UnitTestRunner tr; - - tr.setPassesAreLogged(true); - tr.runAllTests(); - - return 0; -} +#include + +int main() +{ + try + { + juce::ScopedJuceInitialiser_GUI scopedJuceInitialiser; + + juce::UnitTestRunner tr; + tr.setPassesAreLogged (true); + tr.runAllTests(); + } + catch (...) + { + jassertfalse; + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/examples/TestRunner/TestRunner.jucer b/examples/TestRunner/TestRunner.jucer index 2021cd98..8922ce36 100644 --- a/examples/TestRunner/TestRunner.jucer +++ b/examples/TestRunner/TestRunner.jucer @@ -1,54 +1,144 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +