1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-09 23:34:20 +00:00

Animation: Add animation demos

This commit is contained in:
Anthony Nicholls 2024-04-16 12:06:10 +01:00
parent bc3600cde8
commit 4274b835f6
18 changed files with 2138 additions and 323 deletions

View file

@ -34,9 +34,9 @@ include_directories( AFTER
enable_language(ASM)
if(JUCE_BUILD_CONFIGURATION MATCHES "DEBUG")
add_definitions([[-DJUCE_PROJUCER_VERSION=0x80000]] [[-DJUCE_MODULE_AVAILABLE_juce_analytics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_box2d=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_cryptography=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_dsp=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_MODULE_AVAILABLE_juce_opengl=1]] [[-DJUCE_MODULE_AVAILABLE_juce_osc=1]] [[-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1]] [[-DJUCE_MODULE_AVAILABLE_juce_video=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_USE_MP3AUDIOFORMAT=1]] [[-DJUCE_PLUGINHOST_VST3=1]] [[-DJUCE_PLUGINHOST_LV2=1]] [[-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0]] [[-DJUCE_STRICT_REFCOUNTEDPOINTER=1]] [[-DJUCE_USE_CAMERA=1]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCE_DEMO_RUNNER=1]] [[-DJUCE_UNIT_TESTS=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=8.0.0]] [[-DJUCE_APP_VERSION_HEX=0x80000]] [[-DDEBUG=1]] [[-D_DEBUG=1]])
add_definitions([[-DJUCE_PROJUCER_VERSION=0x80000]] [[-DJUCE_MODULE_AVAILABLE_juce_analytics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_animation=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_box2d=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_cryptography=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_dsp=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_MODULE_AVAILABLE_juce_opengl=1]] [[-DJUCE_MODULE_AVAILABLE_juce_osc=1]] [[-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1]] [[-DJUCE_MODULE_AVAILABLE_juce_video=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_USE_MP3AUDIOFORMAT=1]] [[-DJUCE_PLUGINHOST_VST3=1]] [[-DJUCE_PLUGINHOST_LV2=1]] [[-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0]] [[-DJUCE_STRICT_REFCOUNTEDPOINTER=1]] [[-DJUCE_USE_CAMERA=1]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCE_DEMO_RUNNER=1]] [[-DJUCE_UNIT_TESTS=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=8.0.0]] [[-DJUCE_APP_VERSION_HEX=0x80000]] [[-DDEBUG=1]] [[-D_DEBUG=1]])
elseif(JUCE_BUILD_CONFIGURATION MATCHES "RELEASE")
add_definitions([[-DJUCE_PROJUCER_VERSION=0x80000]] [[-DJUCE_MODULE_AVAILABLE_juce_analytics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_box2d=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_cryptography=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_dsp=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_MODULE_AVAILABLE_juce_opengl=1]] [[-DJUCE_MODULE_AVAILABLE_juce_osc=1]] [[-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1]] [[-DJUCE_MODULE_AVAILABLE_juce_video=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_USE_MP3AUDIOFORMAT=1]] [[-DJUCE_PLUGINHOST_VST3=1]] [[-DJUCE_PLUGINHOST_LV2=1]] [[-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0]] [[-DJUCE_STRICT_REFCOUNTEDPOINTER=1]] [[-DJUCE_USE_CAMERA=1]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCE_DEMO_RUNNER=1]] [[-DJUCE_UNIT_TESTS=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=8.0.0]] [[-DJUCE_APP_VERSION_HEX=0x80000]] [[-DNDEBUG=1]])
add_definitions([[-DJUCE_PROJUCER_VERSION=0x80000]] [[-DJUCE_MODULE_AVAILABLE_juce_analytics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_animation=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1]] [[-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1]] [[-DJUCE_MODULE_AVAILABLE_juce_box2d=1]] [[-DJUCE_MODULE_AVAILABLE_juce_core=1]] [[-DJUCE_MODULE_AVAILABLE_juce_cryptography=1]] [[-DJUCE_MODULE_AVAILABLE_juce_data_structures=1]] [[-DJUCE_MODULE_AVAILABLE_juce_dsp=1]] [[-DJUCE_MODULE_AVAILABLE_juce_events=1]] [[-DJUCE_MODULE_AVAILABLE_juce_graphics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1]] [[-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1]] [[-DJUCE_MODULE_AVAILABLE_juce_opengl=1]] [[-DJUCE_MODULE_AVAILABLE_juce_osc=1]] [[-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1]] [[-DJUCE_MODULE_AVAILABLE_juce_video=1]] [[-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1]] [[-DJUCE_USE_MP3AUDIOFORMAT=1]] [[-DJUCE_PLUGINHOST_VST3=1]] [[-DJUCE_PLUGINHOST_LV2=1]] [[-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0]] [[-DJUCE_STRICT_REFCOUNTEDPOINTER=1]] [[-DJUCE_USE_CAMERA=1]] [[-DJUCE_STANDALONE_APPLICATION=1]] [[-DJUCE_DEMO_RUNNER=1]] [[-DJUCE_UNIT_TESTS=1]] [[-DJUCER_ANDROIDSTUDIO_7F0E4A25=1]] [[-DJUCE_APP_VERSION=8.0.0]] [[-DJUCE_APP_VERSION_HEX=0x80000]] [[-DNDEBUG=1]])
else()
message( FATAL_ERROR "No matching build-configuration found." )
endif()
@ -66,6 +66,23 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_analytics/destinations/juce_ThreadedAnalyticsDestination.h"
"../../../../../modules/juce_analytics/juce_analytics.cpp"
"../../../../../modules/juce_analytics/juce_analytics.h"
"../../../../../modules/juce_animation/animation/juce_Animator.cpp"
"../../../../../modules/juce_animation/animation/juce_Animator.h"
"../../../../../modules/juce_animation/animation/juce_AnimatorSetBuilder.cpp"
"../../../../../modules/juce_animation/animation/juce_AnimatorSetBuilder.h"
"../../../../../modules/juce_animation/animation/juce_AnimatorUpdater.cpp"
"../../../../../modules/juce_animation/animation/juce_AnimatorUpdater.h"
"../../../../../modules/juce_animation/animation/juce_Easings.cpp"
"../../../../../modules/juce_animation/animation/juce_Easings.h"
"../../../../../modules/juce_animation/animation/juce_StaticAnimationLimits.h"
"../../../../../modules/juce_animation/animation/juce_ValueAnimatorBuilder.cpp"
"../../../../../modules/juce_animation/animation/juce_ValueAnimatorBuilder.h"
"../../../../../modules/juce_animation/animation/juce_VBlankAnimatorUpdater.h"
"../../../../../modules/juce_animation/detail/chromium/cubic_bezier.cc"
"../../../../../modules/juce_animation/detail/chromium/cubic_bezier.h"
"../../../../../modules/juce_animation/detail/juce_ArrayAndTupleOps.h"
"../../../../../modules/juce_animation/juce_animation.cpp"
"../../../../../modules/juce_animation/juce_animation.h"
"../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.cpp"
"../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.h"
"../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"
@ -2125,6 +2142,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_video/juce_video.mm"
"../../../../../modules/juce_video/juce_video.h"
"../../../JuceLibraryCode/include_juce_analytics.cpp"
"../../../JuceLibraryCode/include_juce_animation.cpp"
"../../../JuceLibraryCode/include_juce_audio_basics.cpp"
"../../../JuceLibraryCode/include_juce_audio_devices.cpp"
"../../../JuceLibraryCode/include_juce_audio_formats.cpp"
@ -2164,6 +2182,23 @@ set_source_files_properties(
"../../../../../modules/juce_analytics/destinations/juce_ThreadedAnalyticsDestination.h"
"../../../../../modules/juce_analytics/juce_analytics.cpp"
"../../../../../modules/juce_analytics/juce_analytics.h"
"../../../../../modules/juce_animation/animation/juce_Animator.cpp"
"../../../../../modules/juce_animation/animation/juce_Animator.h"
"../../../../../modules/juce_animation/animation/juce_AnimatorSetBuilder.cpp"
"../../../../../modules/juce_animation/animation/juce_AnimatorSetBuilder.h"
"../../../../../modules/juce_animation/animation/juce_AnimatorUpdater.cpp"
"../../../../../modules/juce_animation/animation/juce_AnimatorUpdater.h"
"../../../../../modules/juce_animation/animation/juce_Easings.cpp"
"../../../../../modules/juce_animation/animation/juce_Easings.h"
"../../../../../modules/juce_animation/animation/juce_StaticAnimationLimits.h"
"../../../../../modules/juce_animation/animation/juce_ValueAnimatorBuilder.cpp"
"../../../../../modules/juce_animation/animation/juce_ValueAnimatorBuilder.h"
"../../../../../modules/juce_animation/animation/juce_VBlankAnimatorUpdater.h"
"../../../../../modules/juce_animation/detail/chromium/cubic_bezier.cc"
"../../../../../modules/juce_animation/detail/chromium/cubic_bezier.h"
"../../../../../modules/juce_animation/detail/juce_ArrayAndTupleOps.h"
"../../../../../modules/juce_animation/juce_animation.cpp"
"../../../../../modules/juce_animation/juce_animation.h"
"../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.cpp"
"../../../../../modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.h"
"../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"

View file

@ -39,7 +39,7 @@ ifeq ($(CONFIG),Debug)
TARGET_ARCH :=
endif
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_PROJUCER_VERSION=0x80000" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_box2d=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_USE_MP3AUDIOFORMAT=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_USE_CAMERA=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=8.0.0" "-DJUCE_APP_VERSION_HEX=0x80000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 gl libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_PROJUCER_VERSION=0x80000" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_animation=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_box2d=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_USE_MP3AUDIOFORMAT=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_USE_CAMERA=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=8.0.0" "-DJUCE_APP_VERSION_HEX=0x80000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 gl libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := DemoRunner
@ -60,7 +60,7 @@ ifeq ($(CONFIG),Release)
TARGET_ARCH :=
endif
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_PROJUCER_VERSION=0x80000" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_box2d=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_USE_MP3AUDIOFORMAT=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_USE_CAMERA=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=8.0.0" "-DJUCE_APP_VERSION_HEX=0x80000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 gl libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_PROJUCER_VERSION=0x80000" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_animation=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_box2d=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_USE_MP3AUDIOFORMAT=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_USE_CAMERA=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=8.0.0" "-DJUCE_APP_VERSION_HEX=0x80000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 gl libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := DemoRunner
@ -79,6 +79,7 @@ OBJECTS_APP := \
$(JUCE_OBJDIR)/MainComponent_a54318d2.o \
$(JUCE_OBJDIR)/Main_90ebc5c2.o \
$(JUCE_OBJDIR)/include_juce_analytics_f8e9fa94.o \
$(JUCE_OBJDIR)/include_juce_animation_c2224b92.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 \
@ -148,6 +149,11 @@ $(JUCE_OBJDIR)/include_juce_analytics_f8e9fa94.o: ../../JuceLibraryCode/include_
@echo "Compiling include_juce_analytics.cpp"
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
$(JUCE_OBJDIR)/include_juce_animation_c2224b92.o: ../../JuceLibraryCode/include_juce_animation.cpp
-$(V_AT)mkdir -p $(@D)
@echo "Compiling include_juce_animation.cpp"
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
$(JUCE_OBJDIR)/include_juce_audio_basics_8a4e984a.o: ../../JuceLibraryCode/include_juce_audio_basics.cpp
-$(V_AT)mkdir -p $(@D)
@echo "Compiling include_juce_audio_basics.cpp"

View file

@ -25,6 +25,7 @@
48CF0B02E1D06E5DA51E6270 /* Accelerate.framework */ = {isa = PBXBuildFile; fileRef = A04E4408525F24F7DCBA000E; };
4FBBB55F4E347757F74F1F41 /* MainComponent.cpp */ = {isa = PBXBuildFile; fileRef = 25E5ED33876A2C752378C859; };
527DA2E6827BAFDDD3E8E80F /* CoreAudioKit.framework */ = {isa = PBXBuildFile; fileRef = B4389672DA4CC8E0A531062D; };
55F120E70543228568573D4A /* include_juce_animation.cpp */ = {isa = PBXBuildFile; fileRef = CB4C64BACC1CA4AAD6D69565; };
5CB78489F16E82144914972D /* include_juce_gui_extra.mm */ = {isa = PBXBuildFile; fileRef = 979F23EA9E5E76131299E886; };
5E4310B3F6BB639875D3E9B8 /* Foundation.framework */ = {isa = PBXBuildFile; fileRef = 49ECA8B998B339A083674A22; };
5EB6872A39122A5AB67E544E /* include_juce_audio_processors_ara.cpp */ = {isa = PBXBuildFile; fileRef = 8D44097417573B38729A0179; };
@ -109,6 +110,7 @@
71A91516AFD980FEE694C0E1 /* IOKit.framework */ /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
7A5AAE9EE573FC6105CC4AAC /* SettingsContent.h */ /* SettingsContent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SettingsContent.h; path = ../../Source/UI/SettingsContent.h; sourceTree = SOURCE_ROOT; };
7B3243C92248D379A0489AA4 /* Utilities */ /* Utilities */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Utilities; path = ../../../Utilities; sourceTree = "<group>"; };
8447FC9882D85E6DAF0A4852 /* juce_animation */ /* juce_animation */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_animation; path = ../../../../modules/juce_animation; sourceTree = SOURCE_ROOT; };
87D5F938A115568F9CF3BE5A /* Security.framework */ /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
8CE533D611CD0984AD028D73 /* juce_graphics */ /* juce_graphics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_graphics; path = ../../../../modules/juce_graphics; sourceTree = SOURCE_ROOT; };
8D44097417573B38729A0179 /* include_juce_audio_processors_ara.cpp */ /* include_juce_audio_processors_ara.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_audio_processors_ara.cpp; path = ../../JuceLibraryCode/include_juce_audio_processors_ara.cpp; sourceTree = SOURCE_ROOT; };
@ -128,6 +130,7 @@
B2BC383CE102EECCF49C7AF7 /* IntroScreen.h */ /* IntroScreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = IntroScreen.h; path = ../../Source/Demos/IntroScreen.h; sourceTree = SOURCE_ROOT; };
B4389672DA4CC8E0A531062D /* CoreAudioKit.framework */ /* CoreAudioKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; };
C1E93FAF6C68A40A664422CD /* include_juce_dsp.mm */ /* include_juce_dsp.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_dsp.mm; path = ../../JuceLibraryCode/include_juce_dsp.mm; sourceTree = SOURCE_ROOT; };
CB4C64BACC1CA4AAD6D69565 /* include_juce_animation.cpp */ /* include_juce_animation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_animation.cpp; path = ../../JuceLibraryCode/include_juce_animation.cpp; sourceTree = SOURCE_ROOT; };
CE38E6469D98462A2C22C915 /* include_juce_osc.cpp */ /* include_juce_osc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_osc.cpp; path = ../../JuceLibraryCode/include_juce_osc.cpp; sourceTree = SOURCE_ROOT; };
CFF2BBEB242CC8B3B904B5F9 /* App */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DemoRunner.app; sourceTree = BUILT_PRODUCTS_DIR; };
DC192EFA899E6CBE6B5CD394 /* AVFoundation.framework */ /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
@ -203,6 +206,7 @@
isa = PBXGroup;
children = (
112FFCB73597157E721BCDF2,
8447FC9882D85E6DAF0A4852,
6847A9B2C5E3C2ED56D8D4E7,
60F2869DC345EAF2314D6C09,
491641F7632BCC81BBA0ED85,
@ -229,6 +233,7 @@
isa = PBXGroup;
children = (
5965349393850F41DF76F350,
CB4C64BACC1CA4AAD6D69565,
03B0F9318FD583525AB195A9,
03A63C3CA6F24977F19C316D,
E061A1C75FA5722167FC4997,
@ -432,6 +437,7 @@
4FBBB55F4E347757F74F1F41,
F619F3887CEC064441BB6EE6,
C2BB2B6DA237FE0CB64C7EDA,
55F120E70543228568573D4A,
F28112945CEBEA4CE8975833,
9EACEA6BE8D0ACC72C12C080,
26652AB1BB77C8A39434775F,
@ -523,6 +529,7 @@
"NDEBUG=1",
"JUCE_PROJUCER_VERSION=0x80000",
"JUCE_MODULE_AVAILABLE_juce_analytics=1",
"JUCE_MODULE_AVAILABLE_juce_animation=1",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
@ -613,6 +620,7 @@
"DEBUG=1",
"JUCE_PROJUCER_VERSION=0x80000",
"JUCE_MODULE_AVAILABLE_juce_analytics=1",
"JUCE_MODULE_AVAILABLE_juce_animation=1",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",

View file

@ -64,7 +64,7 @@
<Optimization>Disabled</Optimization>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_animation=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
@ -79,7 +79,7 @@
</ClCompile>
<ResourceCompile>
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_animation=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<Link>
<OutputFile>$(OutDir)\DemoRunner.exe</OutputFile>
@ -107,7 +107,7 @@
<ClCompile>
<Optimization>Full</Optimization>
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_animation=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
@ -122,7 +122,7 @@
</ClCompile>
<ResourceCompile>
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_animation=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<Link>
<OutputFile>$(OutDir)\DemoRunner.exe</OutputFile>
@ -161,6 +161,27 @@
<ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_Animator.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorSetBuilder.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorUpdater.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_Easings.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_ValueAnimatorBuilder.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\detail\chromium\cubic_bezier.cc">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\juce_animation.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -2796,6 +2817,7 @@
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_analytics.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_animation.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_basics.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_devices.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_formats.cpp"/>
@ -2834,6 +2856,16 @@
<ClInclude Include="..\..\..\..\modules\juce_analytics\destinations\juce_AnalyticsDestination.h"/>
<ClInclude Include="..\..\..\..\modules\juce_analytics\destinations\juce_ThreadedAnalyticsDestination.h"/>
<ClInclude Include="..\..\..\..\modules\juce_analytics\juce_analytics.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_Animator.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorSetBuilder.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorUpdater.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_Easings.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_StaticAnimationLimits.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_ValueAnimatorBuilder.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_VBlankAnimatorUpdater.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\detail\chromium\cubic_bezier.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\detail\juce_ArrayAndTupleOps.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\juce_animation.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioDataConverters.h"/>

View file

@ -23,6 +23,18 @@
<Filter Include="JUCE Modules\juce_analytics">
<UniqueIdentifier>{97F7F593-75F8-D6B2-DC96-C946C3976226}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_animation\animation">
<UniqueIdentifier>{F5989655-DEF5-0837-C752-9CCB88B3C1FB}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_animation\detail\chromium">
<UniqueIdentifier>{98B39178-8939-7749-8B88-C3B52C7EBF42}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_animation\detail">
<UniqueIdentifier>{6ABAE878-BEE8-D294-DCBD-783AC7562B3B}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_animation">
<UniqueIdentifier>{CBB2B5E6-0E34-A956-8FFF-B4365E57F077}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_audio_basics\audio_play_head">
<UniqueIdentifier>{EB58F05A-A968-CEBE-40C4-107CDD8F240F}</UniqueIdentifier>
</Filter>
@ -751,6 +763,27 @@
<ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp">
<Filter>JUCE Modules\juce_analytics</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_Animator.cpp">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorSetBuilder.cpp">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorUpdater.cpp">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_Easings.cpp">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_ValueAnimatorBuilder.cpp">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\detail\chromium\cubic_bezier.cc">
<Filter>JUCE Modules\juce_animation\detail\chromium</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\juce_animation.cpp">
<Filter>JUCE Modules\juce_animation</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">
<Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter>
</ClCompile>
@ -3547,6 +3580,9 @@
<ClCompile Include="..\..\JuceLibraryCode\include_juce_analytics.cpp">
<Filter>JUCE Library Code</Filter>
</ClCompile>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_animation.cpp">
<Filter>JUCE Library Code</Filter>
</ClCompile>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_basics.cpp">
<Filter>JUCE Library Code</Filter>
</ClCompile>
@ -3639,6 +3675,36 @@
<ClInclude Include="..\..\..\..\modules\juce_analytics\juce_analytics.h">
<Filter>JUCE Modules\juce_analytics</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_Animator.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorSetBuilder.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorUpdater.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_Easings.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_StaticAnimationLimits.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_ValueAnimatorBuilder.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_VBlankAnimatorUpdater.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\detail\chromium\cubic_bezier.h">
<Filter>JUCE Modules\juce_animation\detail\chromium</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\detail\juce_ArrayAndTupleOps.h">
<Filter>JUCE Modules\juce_animation\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\juce_animation.h">
<Filter>JUCE Modules\juce_animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.h">
<Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter>
</ClInclude>

View file

@ -64,7 +64,7 @@
<Optimization>Disabled</Optimization>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_animation=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
@ -79,7 +79,7 @@
</ClCompile>
<ResourceCompile>
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_animation=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<Link>
<OutputFile>$(OutDir)\DemoRunner.exe</OutputFile>
@ -107,7 +107,7 @@
<ClCompile>
<Optimization>Full</Optimization>
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_animation=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
@ -122,7 +122,7 @@
</ClCompile>
<ResourceCompile>
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_animation=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<Link>
<OutputFile>$(OutDir)\DemoRunner.exe</OutputFile>
@ -161,6 +161,27 @@
<ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_Animator.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorSetBuilder.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorUpdater.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_Easings.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_ValueAnimatorBuilder.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\detail\chromium\cubic_bezier.cc">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\juce_animation.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -2796,6 +2817,7 @@
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_analytics.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_animation.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_basics.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_devices.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_formats.cpp"/>
@ -2834,6 +2856,16 @@
<ClInclude Include="..\..\..\..\modules\juce_analytics\destinations\juce_AnalyticsDestination.h"/>
<ClInclude Include="..\..\..\..\modules\juce_analytics\destinations\juce_ThreadedAnalyticsDestination.h"/>
<ClInclude Include="..\..\..\..\modules\juce_analytics\juce_analytics.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_Animator.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorSetBuilder.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorUpdater.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_Easings.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_StaticAnimationLimits.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_ValueAnimatorBuilder.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_VBlankAnimatorUpdater.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\detail\chromium\cubic_bezier.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\detail\juce_ArrayAndTupleOps.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\juce_animation.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioDataConverters.h"/>

View file

@ -23,6 +23,18 @@
<Filter Include="JUCE Modules\juce_analytics">
<UniqueIdentifier>{97F7F593-75F8-D6B2-DC96-C946C3976226}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_animation\animation">
<UniqueIdentifier>{F5989655-DEF5-0837-C752-9CCB88B3C1FB}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_animation\detail\chromium">
<UniqueIdentifier>{98B39178-8939-7749-8B88-C3B52C7EBF42}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_animation\detail">
<UniqueIdentifier>{6ABAE878-BEE8-D294-DCBD-783AC7562B3B}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_animation">
<UniqueIdentifier>{CBB2B5E6-0E34-A956-8FFF-B4365E57F077}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_audio_basics\audio_play_head">
<UniqueIdentifier>{EB58F05A-A968-CEBE-40C4-107CDD8F240F}</UniqueIdentifier>
</Filter>
@ -751,6 +763,27 @@
<ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp">
<Filter>JUCE Modules\juce_analytics</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_Animator.cpp">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorSetBuilder.cpp">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorUpdater.cpp">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_Easings.cpp">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_ValueAnimatorBuilder.cpp">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\detail\chromium\cubic_bezier.cc">
<Filter>JUCE Modules\juce_animation\detail\chromium</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\juce_animation.cpp">
<Filter>JUCE Modules\juce_animation</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">
<Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter>
</ClCompile>
@ -3547,6 +3580,9 @@
<ClCompile Include="..\..\JuceLibraryCode\include_juce_analytics.cpp">
<Filter>JUCE Library Code</Filter>
</ClCompile>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_animation.cpp">
<Filter>JUCE Library Code</Filter>
</ClCompile>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_basics.cpp">
<Filter>JUCE Library Code</Filter>
</ClCompile>
@ -3639,6 +3675,36 @@
<ClInclude Include="..\..\..\..\modules\juce_analytics\juce_analytics.h">
<Filter>JUCE Modules\juce_analytics</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_Animator.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorSetBuilder.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorUpdater.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_Easings.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_StaticAnimationLimits.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_ValueAnimatorBuilder.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_VBlankAnimatorUpdater.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\detail\chromium\cubic_bezier.h">
<Filter>JUCE Modules\juce_animation\detail\chromium</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\detail\juce_ArrayAndTupleOps.h">
<Filter>JUCE Modules\juce_animation\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\juce_animation.h">
<Filter>JUCE Modules\juce_animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.h">
<Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter>
</ClInclude>

View file

@ -64,7 +64,7 @@
<Optimization>Disabled</Optimization>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_animation=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
@ -79,7 +79,7 @@
</ClCompile>
<ResourceCompile>
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_animation=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<Link>
<OutputFile>$(OutDir)\DemoRunner.exe</OutputFile>
@ -107,7 +107,7 @@
<ClCompile>
<Optimization>Full</Optimization>
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_animation=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
@ -122,7 +122,7 @@
</ClCompile>
<ResourceCompile>
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_PROJUCER_VERSION=0x80000;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_animation=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=8.0.0;JUCE_APP_VERSION_HEX=0x80000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<Link>
<OutputFile>$(OutDir)\DemoRunner.exe</OutputFile>
@ -161,6 +161,27 @@
<ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_Animator.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorSetBuilder.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorUpdater.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_Easings.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_ValueAnimatorBuilder.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\detail\chromium\cubic_bezier.cc">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\juce_animation.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -2796,6 +2817,7 @@
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_analytics.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_animation.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_basics.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_devices.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_formats.cpp"/>
@ -2834,6 +2856,16 @@
<ClInclude Include="..\..\..\..\modules\juce_analytics\destinations\juce_AnalyticsDestination.h"/>
<ClInclude Include="..\..\..\..\modules\juce_analytics\destinations\juce_ThreadedAnalyticsDestination.h"/>
<ClInclude Include="..\..\..\..\modules\juce_analytics\juce_analytics.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_Animator.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorSetBuilder.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorUpdater.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_Easings.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_StaticAnimationLimits.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_ValueAnimatorBuilder.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_VBlankAnimatorUpdater.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\detail\chromium\cubic_bezier.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\detail\juce_ArrayAndTupleOps.h"/>
<ClInclude Include="..\..\..\..\modules\juce_animation\juce_animation.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioDataConverters.h"/>

View file

@ -23,6 +23,18 @@
<Filter Include="JUCE Modules\juce_analytics">
<UniqueIdentifier>{97F7F593-75F8-D6B2-DC96-C946C3976226}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_animation\animation">
<UniqueIdentifier>{F5989655-DEF5-0837-C752-9CCB88B3C1FB}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_animation\detail\chromium">
<UniqueIdentifier>{98B39178-8939-7749-8B88-C3B52C7EBF42}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_animation\detail">
<UniqueIdentifier>{6ABAE878-BEE8-D294-DCBD-783AC7562B3B}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_animation">
<UniqueIdentifier>{CBB2B5E6-0E34-A956-8FFF-B4365E57F077}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_audio_basics\audio_play_head">
<UniqueIdentifier>{EB58F05A-A968-CEBE-40C4-107CDD8F240F}</UniqueIdentifier>
</Filter>
@ -751,6 +763,27 @@
<ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp">
<Filter>JUCE Modules\juce_analytics</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_Animator.cpp">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorSetBuilder.cpp">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorUpdater.cpp">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_Easings.cpp">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\animation\juce_ValueAnimatorBuilder.cpp">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\detail\chromium\cubic_bezier.cc">
<Filter>JUCE Modules\juce_animation\detail\chromium</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_animation\juce_animation.cpp">
<Filter>JUCE Modules\juce_animation</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.cpp">
<Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter>
</ClCompile>
@ -3547,6 +3580,9 @@
<ClCompile Include="..\..\JuceLibraryCode\include_juce_analytics.cpp">
<Filter>JUCE Library Code</Filter>
</ClCompile>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_animation.cpp">
<Filter>JUCE Library Code</Filter>
</ClCompile>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_basics.cpp">
<Filter>JUCE Library Code</Filter>
</ClCompile>
@ -3639,6 +3675,36 @@
<ClInclude Include="..\..\..\..\modules\juce_analytics\juce_analytics.h">
<Filter>JUCE Modules\juce_analytics</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_Animator.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorSetBuilder.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_AnimatorUpdater.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_Easings.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_StaticAnimationLimits.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_ValueAnimatorBuilder.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\animation\juce_VBlankAnimatorUpdater.h">
<Filter>JUCE Modules\juce_animation\animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\detail\chromium\cubic_bezier.h">
<Filter>JUCE Modules\juce_animation\detail\chromium</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\detail\juce_ArrayAndTupleOps.h">
<Filter>JUCE Modules\juce_animation\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_animation\juce_animation.h">
<Filter>JUCE Modules\juce_animation</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.h">
<Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter>
</ClInclude>

View file

@ -24,6 +24,7 @@
48CF0B02E1D06E5DA51E6270 /* Accelerate.framework */ = {isa = PBXBuildFile; fileRef = A04E4408525F24F7DCBA000E; };
4FBBB55F4E347757F74F1F41 /* MainComponent.cpp */ = {isa = PBXBuildFile; fileRef = 25E5ED33876A2C752378C859; };
527DA2E6827BAFDDD3E8E80F /* CoreAudioKit.framework */ = {isa = PBXBuildFile; fileRef = B4389672DA4CC8E0A531062D; };
55F120E70543228568573D4A /* include_juce_animation.cpp */ = {isa = PBXBuildFile; fileRef = CB4C64BACC1CA4AAD6D69565; };
5CB78489F16E82144914972D /* include_juce_gui_extra.mm */ = {isa = PBXBuildFile; fileRef = 979F23EA9E5E76131299E886; };
5E4310B3F6BB639875D3E9B8 /* Foundation.framework */ = {isa = PBXBuildFile; fileRef = 49ECA8B998B339A083674A22; };
5EB6872A39122A5AB67E544E /* include_juce_audio_processors_ara.cpp */ = {isa = PBXBuildFile; fileRef = 8D44097417573B38729A0179; };
@ -109,6 +110,7 @@
7A5AAE9EE573FC6105CC4AAC /* SettingsContent.h */ /* SettingsContent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SettingsContent.h; path = ../../Source/UI/SettingsContent.h; sourceTree = SOURCE_ROOT; };
7FBD555B32197FEACDFF5AFB /* LaunchScreen.storyboard */ /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = LaunchScreen.storyboard; sourceTree = SOURCE_ROOT; };
8135645508EEFDBDCDF2ADC6 /* Images.xcassets */ /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = DemoRunner/Images.xcassets; sourceTree = SOURCE_ROOT; };
8447FC9882D85E6DAF0A4852 /* juce_animation */ /* juce_animation */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_animation; path = ../../../../modules/juce_animation; sourceTree = SOURCE_ROOT; };
873F9DD54978E601102353B4 /* CoreText.framework */ /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; };
8CE533D611CD0984AD028D73 /* juce_graphics */ /* juce_graphics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_graphics; path = ../../../../modules/juce_graphics; sourceTree = SOURCE_ROOT; };
8D44097417573B38729A0179 /* include_juce_audio_processors_ara.cpp */ /* include_juce_audio_processors_ara.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_audio_processors_ara.cpp; path = ../../JuceLibraryCode/include_juce_audio_processors_ara.cpp; sourceTree = SOURCE_ROOT; };
@ -127,6 +129,7 @@
B2BC383CE102EECCF49C7AF7 /* IntroScreen.h */ /* IntroScreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = IntroScreen.h; path = ../../Source/Demos/IntroScreen.h; sourceTree = SOURCE_ROOT; };
B4389672DA4CC8E0A531062D /* CoreAudioKit.framework */ /* CoreAudioKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; };
C1E93FAF6C68A40A664422CD /* include_juce_dsp.mm */ /* include_juce_dsp.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_dsp.mm; path = ../../JuceLibraryCode/include_juce_dsp.mm; sourceTree = SOURCE_ROOT; };
CB4C64BACC1CA4AAD6D69565 /* include_juce_animation.cpp */ /* include_juce_animation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_animation.cpp; path = ../../JuceLibraryCode/include_juce_animation.cpp; sourceTree = SOURCE_ROOT; };
CE38E6469D98462A2C22C915 /* include_juce_osc.cpp */ /* include_juce_osc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_osc.cpp; path = ../../JuceLibraryCode/include_juce_osc.cpp; sourceTree = SOURCE_ROOT; };
CFF2BBEB242CC8B3B904B5F9 /* App */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DemoRunner.app; sourceTree = BUILT_PRODUCTS_DIR; };
DC192EFA899E6CBE6B5CD394 /* AVFoundation.framework */ /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
@ -210,6 +213,7 @@
isa = PBXGroup;
children = (
112FFCB73597157E721BCDF2,
8447FC9882D85E6DAF0A4852,
6847A9B2C5E3C2ED56D8D4E7,
60F2869DC345EAF2314D6C09,
491641F7632BCC81BBA0ED85,
@ -236,6 +240,7 @@
isa = PBXGroup;
children = (
5965349393850F41DF76F350,
CB4C64BACC1CA4AAD6D69565,
03B0F9318FD583525AB195A9,
03A63C3CA6F24977F19C316D,
E061A1C75FA5722167FC4997,
@ -436,6 +441,7 @@
4FBBB55F4E347757F74F1F41,
F619F3887CEC064441BB6EE6,
C2BB2B6DA237FE0CB64C7EDA,
55F120E70543228568573D4A,
F28112945CEBEA4CE8975833,
9EACEA6BE8D0ACC72C12C080,
26652AB1BB77C8A39434775F,
@ -530,6 +536,7 @@
"JUCE_CONTENT_SHARING=1",
"JUCE_PROJUCER_VERSION=0x80000",
"JUCE_MODULE_AVAILABLE_juce_analytics=1",
"JUCE_MODULE_AVAILABLE_juce_animation=1",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
@ -620,6 +627,7 @@
"JUCE_CONTENT_SHARING=1",
"JUCE_PROJUCER_VERSION=0x80000",
"JUCE_MODULE_AVAILABLE_juce_analytics=1",
"JUCE_MODULE_AVAILABLE_juce_animation=1",
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",

View file

@ -69,6 +69,7 @@ target_compile_definitions(DemoRunner PRIVATE
target_link_libraries(DemoRunner PRIVATE
juce::juce_analytics
juce::juce_animation
juce::juce_audio_utils
juce::juce_box2d
juce::juce_dsp

View file

@ -60,6 +60,7 @@
<MODULEPATH id="juce_dsp" path="../../modules"/>
<MODULEPATH id="juce_osc" path="../../modules"/>
<MODULEPATH id="juce_product_unlocking" path="../../modules"/>
<MODULEPATH id="juce_animation" path="../../modules"/>
</MODULEPATHS>
</XCODE_MAC>
<LINUX_MAKE targetFolder="Builds/LinuxMakefile" smallIcon="YyqWd2" bigIcon="YyqWd2">
@ -87,6 +88,7 @@
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
<MODULEPATH id="juce_analytics" path="../../modules"/>
<MODULEPATH id="juce_animation" path="../../modules"/>
</MODULEPATHS>
</LINUX_MAKE>
<ANDROIDSTUDIO targetFolder="Builds/Android" androidMinimumSDK="23" microphonePermissionNeeded="1"
@ -120,6 +122,7 @@
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
<MODULEPATH id="juce_analytics" path="../../modules"/>
<MODULEPATH id="juce_animation" path="../../modules"/>
</MODULEPATHS>
</ANDROIDSTUDIO>
<XCODE_IPHONE targetFolder="Builds/iOS" UISupportsDocumentBrowser="1" microphonePermissionNeeded="1"
@ -153,6 +156,7 @@
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
<MODULEPATH id="juce_analytics" path="../../modules"/>
<MODULEPATH id="juce_animation" path="../../modules"/>
</MODULEPATHS>
</XCODE_IPHONE>
<VS2017 targetFolder="Builds/VisualStudio2017" smallIcon="YyqWd2" bigIcon="YyqWd2"
@ -181,6 +185,7 @@
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
<MODULEPATH id="juce_analytics" path="../../modules"/>
<MODULEPATH id="juce_animation" path="../../modules"/>
</MODULEPATHS>
</VS2017>
<VS2019 targetFolder="Builds/VisualStudio2019" smallIcon="YyqWd2" bigIcon="YyqWd2"
@ -209,6 +214,7 @@
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
<MODULEPATH id="juce_analytics" path="../../modules"/>
<MODULEPATH id="juce_animation" path="../../modules"/>
</MODULEPATHS>
</VS2019>
<VS2022 targetFolder="Builds/VisualStudio2022" smallIcon="YyqWd2" bigIcon="YyqWd2"
@ -237,11 +243,13 @@
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
<MODULEPATH id="juce_analytics" path="../../modules"/>
<MODULEPATH id="juce_animation" path="../../modules"/>
</MODULEPATHS>
</VS2022>
</EXPORTFORMATS>
<MODULES>
<MODULE id="juce_analytics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
<MODULE id="juce_animation" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
<MODULE id="juce_audio_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
<MODULE id="juce_audio_devices" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
<MODULE id="juce_audio_formats" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>

View file

@ -14,6 +14,7 @@
#include <juce_analytics/juce_analytics.h>
#include <juce_animation/juce_animation.h>
#include <juce_audio_basics/juce_audio_basics.h>
#include <juce_audio_devices/juce_audio_devices.h>
#include <juce_audio_formats/juce_audio_formats.h>

View file

@ -0,0 +1,8 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include <juce_animation/juce_animation.cpp>

View file

@ -32,7 +32,8 @@
#include "../../../GUI/AccessibilityDemo.h"
#endif
#include "../../../GUI/AnimationAppDemo.h"
#include "../../../GUI/AnimationDemo.h"
#include "../../../GUI/AnimationEasingDemo.h"
#include "../../../GUI/AnimatorsDemo.h"
#include "../../../GUI/BouncingBallWavetableDemo.h"
#if JUCE_USE_CAMERA && ! (JUCE_LINUX || JUCE_BSD)
#include "../../../GUI/CameraDemo.h"
@ -72,7 +73,8 @@ void registerDemos_Two() noexcept
REGISTER_DEMO (AccessibilityDemo, GUI, false)
#endif
REGISTER_DEMO (AnimationAppDemo, GUI, false)
REGISTER_DEMO (AnimationDemo, GUI, false)
REGISTER_DEMO (AnimationEasingDemo, GUI, false)
REGISTER_DEMO (AnimatorsDemo, GUI, false)
REGISTER_DEMO (BouncingBallWavetableDemo, GUI, false)
#if JUCE_USE_CAMERA && ! (JUCE_LINUX || JUCE_BSD)
REGISTER_DEMO (CameraDemo, GUI, true)

View file

@ -1,305 +0,0 @@
/*
==============================================================================
This file is part of the JUCE framework examples.
Copyright (c) Raw Material Software Limited
The code included in this file is provided under the terms of the ISC license
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
to use, copy, modify, and/or distribute this software for any purpose with or
without fee is hereby granted provided that the above copyright notice and
this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
==============================================================================
*/
/*******************************************************************************
The block below describes the properties of this PIP. A PIP is a short snippet
of code that can be read by the Projucer and used to generate a JUCE project.
BEGIN_JUCE_PIP_METADATA
name: AnimationDemo
version: 1.0.0
vendor: JUCE
website: http://juce.com
description: Displays an animated draggable ball.
dependencies: juce_core, juce_data_structures, juce_events, juce_graphics,
juce_gui_basics
exporters: xcode_mac, vs2022, linux_make, androidstudio, xcode_iphone
moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1
type: Component
mainClass: AnimationDemo
useLocalCopy: 1
END_JUCE_PIP_METADATA
*******************************************************************************/
#pragma once
#include "../Assets/DemoUtilities.h"
//==============================================================================
/** This will be the source of our balls and can be dragged around. */
class BallGeneratorComponent final : public Component
{
public:
BallGeneratorComponent() {}
void paint (Graphics& g) override
{
auto area = getLocalBounds().reduced (2);
g.setColour (Colours::orange);
g.drawRoundedRectangle (area.toFloat(), 10.0f, 2.0f);
g.setColour (findColour (TextButton::textColourOffId));
g.drawFittedText ("Drag Me!", area, Justification::centred, 1);
}
void resized() override
{
// Just set the limits of our constrainer so that we don't drag ourselves off the screen
constrainer.setMinimumOnscreenAmounts (getHeight(), getWidth(),
getHeight(), getWidth());
}
void mouseDown (const MouseEvent& e) override
{
// Prepares our dragger to drag this Component
dragger.startDraggingComponent (this, e);
}
void mouseDrag (const MouseEvent& e) override
{
// Moves this Component according to the mouse drag event and applies our constraints to it
dragger.dragComponent (this, e, &constrainer);
}
private:
ComponentBoundsConstrainer constrainer;
ComponentDragger dragger;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (BallGeneratorComponent)
};
//==============================================================================
struct BallComponent final : public Component
{
BallComponent (Point<float> pos)
: position (pos),
speed (Random::getSystemRandom().nextFloat() * 4.0f - 2.0f,
Random::getSystemRandom().nextFloat() * -6.0f - 2.0f),
colour (Colours::white)
{
setSize (20, 20);
step();
}
bool step()
{
position += speed;
speed.y += 0.1f;
setCentrePosition ((int) position.x,
(int) position.y);
if (auto* parent = getParentComponent())
return isPositiveAndBelow (position.x, (float) parent->getWidth())
&& position.y < (float) parent->getHeight();
return position.y < 400.0f && position.x >= -10.0f;
}
void paint (Graphics& g) override
{
g.setColour (colour);
g.fillEllipse (2.0f, 2.0f, (float) getWidth() - 4.0f, (float) getHeight() - 4.0f);
g.setColour (Colours::darkgrey);
g.drawEllipse (2.0f, 2.0f, (float) getWidth() - 4.0f, (float) getHeight() - 4.0f, 1.0f);
}
Point<float> position, speed;
Colour colour;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (BallComponent)
};
//==============================================================================
class AnimationDemo final : public Component,
private Timer
{
public:
AnimationDemo()
{
setOpaque (true);
for (auto i = 0; i < 11; ++i)
{
auto* b = createButton();
componentsToAnimate.add (b);
addAndMakeVisible (b);
b->onClick = [this] { triggerAnimation(); };
}
addAndMakeVisible (ballGenerator);
cycleCount = 2;
startTimerHz (60);
setSize (620, 620);
}
void paint (Graphics& g) override
{
g.fillAll (findColour (ResizableWindow::backgroundColourId));
}
void resized() override
{
ballGenerator.centreWithSize (80, 50);
triggerAnimation();
}
private:
OwnedArray<Component> componentsToAnimate;
OwnedArray<BallComponent> balls;
BallGeneratorComponent ballGenerator;
ComponentAnimator animator;
int cycleCount;
bool firstCallback = true;
Button* createRandomButton()
{
DrawablePath normal, over;
Path star1;
star1.addStar ({}, 5, 20.0f, 50.0f, 0.2f);
normal.setPath (star1);
normal.setFill (Colours::red);
Path star2;
star2.addStar ({}, 7, 30.0f, 50.0f, 0.0f);
over.setPath (star2);
over.setFill (Colours::pink);
over.setStrokeFill (Colours::black);
over.setStrokeThickness (5.0f);
auto juceIcon = getImageFromAssets ("juce_icon.png");
DrawableImage down;
down.setImage (juceIcon);
down.setOverlayColour (Colours::black.withAlpha (0.3f));
if (Random::getSystemRandom().nextInt (10) > 2)
{
auto type = Random::getSystemRandom().nextInt (3);
auto* d = new DrawableButton ("Button",
type == 0 ? DrawableButton::ImageOnButtonBackground
: (type == 1 ? DrawableButton::ImageFitted
: DrawableButton::ImageAboveTextLabel));
d->setImages (&normal,
Random::getSystemRandom().nextBool() ? &over : nullptr,
Random::getSystemRandom().nextBool() ? &down : nullptr);
if (Random::getSystemRandom().nextBool())
{
d->setColour (DrawableButton::backgroundColourId, getRandomBrightColour());
d->setColour (DrawableButton::backgroundOnColourId, getRandomBrightColour());
}
d->setClickingTogglesState (Random::getSystemRandom().nextBool());
return d;
}
auto* b = new ImageButton ("ImageButton");
b->setImages (true, true, true,
juceIcon, 0.7f, Colours::transparentBlack,
juceIcon, 1.0f, getRandomDarkColour() .withAlpha (0.2f),
juceIcon, 1.0f, getRandomBrightColour().withAlpha (0.8f),
0.5f);
return b;
}
Button* createButton()
{
auto juceIcon = getImageFromAssets ("juce_icon.png").rescaled (128, 128);
auto* b = new ImageButton ("ImageButton");
b->setImages (true, true, true,
juceIcon, 1.0f, Colours::transparentBlack,
juceIcon, 1.0f, Colours::white,
juceIcon, 1.0f, Colours::white,
0.5f);
return b;
}
void triggerAnimation()
{
auto width = getWidth();
auto height = getHeight();
bool useWidth = (height > width);
for (auto* component : componentsToAnimate)
{
auto newIndex = (componentsToAnimate.indexOf (component) + 3 * cycleCount)
% componentsToAnimate.size();
auto angle = (float) newIndex * MathConstants<float>::twoPi / (float) componentsToAnimate.size();
auto radius = useWidth ? (float) width * 0.35f
: (float) height * 0.35f;
Rectangle<int> r (getWidth() / 2 + (int) (radius * std::sin (angle)) - 50,
getHeight() / 2 + (int) (radius * std::cos (angle)) - 50,
100, 100);
animator.animateComponent (component, r.reduced (10), 1.0f,
900 + (int) (300 * std::sin (angle)),
false, 0.0, 0.0);
}
++cycleCount;
}
void timerCallback() override
{
if (firstCallback)
{
triggerAnimation();
firstCallback = false;
}
// Go through each of our balls and update their position
for (int i = balls.size(); --i >= 0;)
if (! balls.getUnchecked (i)->step())
balls.remove (i);
// Randomly generate new balls
if (Random::getSystemRandom().nextInt (100) < 4)
addAndMakeVisible (balls.add (new BallComponent (ballGenerator.getBounds().getCentre().toFloat())));
}
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AnimationDemo)
};

View file

@ -0,0 +1,849 @@
/*
==============================================================================
This file is part of the JUCE framework examples.
Copyright (c) Raw Material Software Limited
The code included in this file is provided under the terms of the ISC license
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
to use, copy, modify, and/or distribute this software for any purpose with or
without fee is hereby granted provided that the above copyright notice and
this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
==============================================================================
*/
/*******************************************************************************
The block below describes the properties of this PIP. A PIP is a short snippet
of code that can be read by the Projucer and used to generate a JUCE project.
BEGIN_JUCE_PIP_METADATA
name: AnimationEasingDemo
version: 1.0.0
vendor: JUCE
website: http://juce.com
description: Application for comparing animation easings.
dependencies: juce_gui_basics, juce_animation
exporters: xcode_mac, vs2022, androidstudio, xcode_iphone
moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1
type: Component
mainClass: AnimationEasingDemo
useLocalCopy: 1
END_JUCE_PIP_METADATA
*******************************************************************************/
#pragma once
#include "../Assets/DemoUtilities.h"
struct AnimationEasingDemoConstants
{
static constexpr auto smallGapSize = 5;
static constexpr auto mediumGapSize = smallGapSize * 2;
static constexpr auto largeGapSize = mediumGapSize * 2;
static constexpr auto defaultComponentHeight = 35;
inline static const auto cp1AccentColour = Colour { 0xffff0088 };
inline static const auto cp2AccentColour = Colour { 0xff00aabb };
};
struct AnimationEasingDemoHelpers
{
static int calculateSectionSize (int originalSize, int numberOfSections, int gapSize)
{
const auto totalGapSize = (float) gapSize * ((float) numberOfSections - 1.0f);
const auto totalSizeOfAllSections = (float) originalSize - totalGapSize;
return roundToInt (totalSizeOfAllSections / (float) numberOfSections);
}
static void layoutComponentsHorizontally (Rectangle<int> bounds, const std::vector<Component*>& components, int gapSize = AnimationEasingDemoConstants::smallGapSize)
{
const auto componentWidth = calculateSectionSize (bounds.getWidth(), (int) components.size(), gapSize);
for (auto* component : components)
{
const auto newComponentBounds = bounds.removeFromLeft (componentWidth);
if (component != nullptr)
component->setBounds (newComponentBounds);
bounds.removeFromLeft (gapSize);
}
}
static void layoutComponentsVertically (Rectangle<int> bounds, const std::vector<Component*>& components, int gapSize = AnimationEasingDemoConstants::smallGapSize)
{
const auto componentHeight = calculateSectionSize (bounds.getHeight(), (int) components.size(), gapSize);
for (auto* component : components)
{
const auto newComponentBounds = bounds.removeFromTop (componentHeight);
if (component != nullptr)
component->setBounds (newComponentBounds);
bounds.removeFromTop (gapSize);
}
}
static void layoutComponentsVerticallyOrHorizontally (Rectangle<int> bounds, const std::vector<Component*>& components, int gapSize = AnimationEasingDemoConstants::smallGapSize)
{
if (bounds.getHeight() > bounds.getWidth())
layoutComponentsVertically (bounds, components, gapSize);
else
layoutComponentsHorizontally (bounds, components, gapSize);
}
};
struct AnimationSettings
{
Value shouldAnimatePosition;
Value shouldAnimateSize;
Value shouldAnimateAlpha ;
Value durationMs;
};
class AnimationSettingsComponent final : public Component
{
public:
explicit AnimationSettingsComponent (const AnimationSettings& settingsIn)
{
playbackControls.button.onClick = [&]{ NullCheckedInvocation::invoke (onAnimate); };
durationControls.slider.getValueObject().referTo (settingsIn.durationMs);
playbackControls.positionToggle.getToggleStateValue().referTo (settingsIn.shouldAnimatePosition);
playbackControls.sizeToggle.getToggleStateValue().referTo (settingsIn.shouldAnimateSize);
playbackControls.alphaToggle.getToggleStateValue().referTo (settingsIn.shouldAnimateAlpha);
addAndMakeVisible (durationControls);
addAndMakeVisible (playbackControls);
}
void resized() final
{
AnimationEasingDemoHelpers::layoutComponentsVertically (getLocalBounds(), { &playbackControls, &durationControls });
}
std::function<void()> onAnimate;
private:
struct DurationControls final : public Component
{
DurationControls()
{
slider.setRange (50.0, 5000.0, 10.0);
slider.setValue (1000.0);
slider.setTextValueSuffix (" ms");
addAndMakeVisible (label);
addAndMakeVisible (slider);
}
void resized() final
{
auto bounds = getLocalBounds();
const auto labelWidth = label.getFont().getStringWidth (label.getText()) + AnimationEasingDemoConstants::largeGapSize;
label.setBounds (bounds.removeFromLeft (labelWidth));
slider.setBounds (bounds);
}
Label label { "", "Duration:" };
Slider slider { Slider::SliderStyle::LinearHorizontal, Slider::TextEntryBoxPosition::TextBoxRight };
};
struct PlaybackControls final : public Component
{
PlaybackControls()
{
addAndMakeVisible (button);
addAndMakeVisible (positionToggle);
addAndMakeVisible (sizeToggle);
addAndMakeVisible (alphaToggle);
}
void resized() final
{
AnimationEasingDemoHelpers::layoutComponentsHorizontally (getLocalBounds(), { &button, nullptr, &positionToggle, &sizeToggle, &alphaToggle });
}
TextButton button { "Animate" };
ToggleButton positionToggle { "Position" };
ToggleButton sizeToggle { "Size" };
ToggleButton alphaToggle { "Alpha" };
};
DurationControls durationControls;
PlaybackControls playbackControls;
};
static Point<float> convertPointInBoundsToBezierPoint (const Point<float>& point, const Rectangle<float>& bounds)
{
return { jlimit (0.0f, 1.0f, jmap (point.getX(), bounds.getX(), bounds.getRight(), 0.0f, 1.0f)),
jmap (point.getY(), bounds.getBottom(), bounds.getY(), 0.0f, 1.0f) };
}
static Point<float> convertBezierPointToPointInBounds (const Point<float>& bezierPoint, const Rectangle<float>& bounds)
{
return bounds.getRelativePoint (bezierPoint.getX(), 1.0f - bezierPoint.getY());
}
struct CubicBezier
{
CubicBezier() = default;
CubicBezier (const Point<float>& cp1In,
const Point<float>& cp2In)
: cp1 (cp1In),
cp2 (cp2In) {}
Point<float> cp0 { 0.0f, 0.0f };
Point<float> cp1 {};
Point<float> cp2 {};
Point<float> cp3 { 1.0f, 1.0f };
bool operator!= (const CubicBezier& other)
{
const auto tie = [](const CubicBezier& x) { return std::tie (x.cp0, x.cp1, x.cp2, x.cp3); };
return tie (*this) != tie (other);
}
};
class CubicBezierSettingsComponent final : public Component
{
public:
CubicBezierSettingsComponent()
{
textEditor.setFont (Font (18.0f));
textEditor.setColour (TextEditor::ColourIds::backgroundColourId, {});
textEditor.setColour (TextEditor::ColourIds::highlightColourId, {});
textEditor.setColour (TextEditor::ColourIds::outlineColourId, {});
textEditor.setColour (TextEditor::ColourIds::focusedOutlineColourId, {});
textEditor.setColour (TextEditor::ColourIds::shadowColourId, {});
textEditor.setJustification (Justification::centred);
updateText();
textEditor.onTextChange = [&]
{
const auto strippedText = textEditor.getText().retainCharacters ("0123456789.-,");
const auto stringValues = StringArray::fromTokens (strippedText, ",", "");
if (stringValues.size() == 4)
{
setCubicBezierCurve ({{ jlimit (0.0f, 1.0f, stringValues[0].getFloatValue()), stringValues[1].getFloatValue() },
{ jlimit (0.0f, 1.0f, stringValues[2].getFloatValue()), stringValues[3].getFloatValue() }});
}
updateText();
};
addAndMakeVisible (textEditor);
}
void setCubicBezierCurve (const CubicBezier& newBezierCurve)
{
if (std::exchange (bezierCurve, newBezierCurve) != newBezierCurve)
return;
updateText();
NullCheckedInvocation::invoke (onValueChange);
}
CubicBezier getCubicBezierCurve() const
{
return bezierCurve;
}
void resized() final
{
textEditor.setBounds (getLocalBounds());
}
std::function<void()> onValueChange;
private:
void updateText()
{
ScopedValueSetter<std::function<void()>> pauseOnTextChangeCallbacks (textEditor.onTextChange, nullptr);
ScopeGuard restoreCaretPosition {[p = textEditor.getCaretPosition(), this]
{
textEditor.setCaretPosition (p);
}};
textEditor.clear();
textEditor.setColour (TextEditor::ColourIds::textColourId, Colours::white);
textEditor.insertTextAtCaret ("cubicBezier (");
textEditor.setColour (TextEditor::ColourIds::textColourId, AnimationEasingDemoConstants::cp1AccentColour);
textEditor.insertTextAtCaret (String (bezierCurve.cp1.getX(), 2));
textEditor.setColour (TextEditor::ColourIds::textColourId, Colours::white);
textEditor.insertTextAtCaret (", ");
textEditor.setColour (TextEditor::ColourIds::textColourId, AnimationEasingDemoConstants::cp1AccentColour);
textEditor.insertTextAtCaret (String (bezierCurve.cp1.getY(), 2));
textEditor.setColour (TextEditor::ColourIds::textColourId, Colours::white);
textEditor.insertTextAtCaret (", ");
textEditor.setColour (TextEditor::ColourIds::textColourId, AnimationEasingDemoConstants::cp2AccentColour);
textEditor.insertTextAtCaret (String (bezierCurve.cp2.getX(), 2));
textEditor.setColour (TextEditor::ColourIds::textColourId, Colours::white);
textEditor.insertTextAtCaret (", ");
textEditor.setColour (TextEditor::ColourIds::textColourId, AnimationEasingDemoConstants::cp2AccentColour);
textEditor.insertTextAtCaret (String (bezierCurve.cp2.getY(), 2));
textEditor.setColour (TextEditor::ColourIds::textColourId, Colours::white);
textEditor.insertTextAtCaret (")");
}
CubicBezier bezierCurve;
TextEditor textEditor;
};
class CubicBezierGraphComponent final : public Component
{
public:
void setCubicBezierCurve (const CubicBezier& newBezierCurve)
{
if (std::exchange (bezierCurve, newBezierCurve) != newBezierCurve)
return;
NullCheckedInvocation::invoke (onValueChange);
repaint();
}
CubicBezier getCubicBezierCurve() const
{
return bezierCurve;
}
void paint (Graphics& g) final
{
const auto bounds = getGraphArea();
const auto lineThickness = 6.0f;
const auto cp0 = getControlPointOnGraph (bezierCurve.cp0);
const auto cp1 = getControlPointOnGraph (bezierCurve.cp1);
const auto cp2 = getControlPointOnGraph (bezierCurve.cp2);
const auto cp3 = getControlPointOnGraph (bezierCurve.cp3);
const auto outlineColour = getUIColourIfAvailable (LookAndFeel_V4::ColourScheme::UIColour::outline);
const auto highlightColour = getUIColourIfAvailable (LookAndFeel_V4::ColourScheme::UIColour::highlightedFill);
const auto foregroundColour = getUIColourIfAvailable (LookAndFeel_V4::ColourScheme::UIColour::defaultText);
// graph background
drawColouredLines (g, bounds, 15, { Colour{}, highlightColour.withAlpha (0.2f) });
// graph outline
g.setColour (outlineColour);
g.drawRect (bounds);
// semi-transparent linear line
g.setColour (foregroundColour.withAlpha (0.15f));
g.drawLine ({ cp0, cp3 }, lineThickness);
// cubic-bezier curve
Path curve;
curve.startNewSubPath (cp0);
curve.cubicTo (cp1, cp2, cp3);
g.setColour (foregroundColour);
g.strokePath (curve, PathStrokeType (lineThickness));
// lines between control points
g.setColour (foregroundColour);
g.drawLine ({ cp0, cp1 }, 2.0f);
g.drawLine ({ cp2, cp3 }, 2.0f);
// control points
drawControlPoint (g, cp0, highlightColour.brighter());
drawControlPoint (g, cp3, highlightColour.brighter());
drawControlPoint (g, cp1, AnimationEasingDemoConstants::cp1AccentColour);
drawControlPoint (g, cp2, AnimationEasingDemoConstants::cp2AccentColour);
}
void mouseDown (const MouseEvent& event) final
{
const auto pos = event.position;
const auto distanceToCp1 = pos.getDistanceFrom (getControlPointOnGraph (bezierCurve.cp1));
const auto distanceToCp2 = pos.getDistanceFrom (getControlPointOnGraph (bezierCurve.cp2));
selectedControlPoint = distanceToCp1 <= distanceToCp2 ? &bezierCurve.cp1
: &bezierCurve.cp2;
updateSelectedControlPoint (pos);
}
void mouseDrag (const MouseEvent& event) final
{
updateSelectedControlPoint (event.position);
}
std::function<void()> onValueChange;
private:
Point<float> getControlPointOnGraph (const Point<float>& relativeControlPoint)
{
return convertBezierPointToPointInBounds (relativeControlPoint, getGraphArea());
}
void updateSelectedControlPoint (const Point<float>& newPoint)
{
jassert (selectedControlPoint != nullptr);
const auto newControlPoint = convertPointInBoundsToBezierPoint (newPoint, getGraphArea());
if (*selectedControlPoint == newControlPoint)
return;
*selectedControlPoint = newControlPoint;
NullCheckedInvocation::invoke (onValueChange);
repaint();
}
Rectangle<float> getGraphArea() const
{
const auto bounds = getLocalBounds().toFloat();
const auto size = std::min (bounds.getWidth(), bounds.getHeight());
return bounds.withSizeKeepingCentre (size, size).reduced (AnimationEasingDemoConstants::largeGapSize);
}
void drawControlPoint (Graphics& g, const Point<float>& point, Colour colour)
{
const auto size = jlimit (10.0f, 35.0f, (float) std::min (getWidth(), getHeight()) / 12.0f);
Rectangle<float> bounds;
bounds.setSize (size, size);
bounds.setCentre (point);
g.setColour (getUIColourIfAvailable (LookAndFeel_V4::ColourScheme::UIColour::outline));
g.drawEllipse (bounds, 2.0f);
g.setColour (colour);
g.fillEllipse (bounds);
}
void drawColouredLines (Graphics& g, Rectangle<float> bounds, int numLines, std::vector<Colour> colours)
{
const auto lineHeight = bounds.getHeight() / (float) numLines;
for (size_t line = 0; line < (size_t) numLines; ++line)
{
g.setColour (colours[line % colours.size()]);
g.fillRect (bounds.removeFromTop (lineHeight));
}
}
CubicBezier bezierCurve;
Point<float>* selectedControlPoint{};
};
class AnimationView : public Component
{
public:
AnimationView (const AnimationSettings& animationSettingsIn,
std::function<ValueAnimatorBuilder::EasingFn()> easingFunctionFactoryIn)
: animationSettings (animationSettingsIn),
easingFunctionFactory (std::move (easingFunctionFactoryIn))
{
jassert (easingFunctionFactory != nullptr);
componentToAnimate.setInterceptsMouseClicks (false, false);
addAndMakeVisible (componentToAnimate);
}
void animate()
{
showSettingsPage (false);
const auto valueChangedCallback = [&](float v)
{
animateFrame (animationSettings.shouldAnimatePosition.getValue() ? v : 1.0f,
animationSettings.shouldAnimateSize.getValue() ? v : 1.0f,
animationSettings.shouldAnimateAlpha.getValue() ? v : 1.0f);
};
const auto animateIn = ValueAnimatorBuilder{}.withEasing (easingFunctionFactory())
.withDurationMs (animationSettings.durationMs.getValue())
.withValueChangedCallback (valueChangedCallback);
const auto animateOut = animateIn.withValueChangedCallback ([=](auto v){ valueChangedCallback (1.0f - v); });
animator = std::make_unique<Animator> (AnimatorSetBuilder (animateOut.build())
.followedBy (400.0)
.followedBy (animateIn.build())
.build());
updater.addAnimator (*animator);
animator->start();
}
void mouseDown (const MouseEvent&) final
{
animate();
}
void resized() override
{
auto bounds = getLocalBounds();
componentToAnimate.setBounds (bounds);
settingsPageBackground.setBounds (bounds);
editViewButton.setBounds (bounds.removeFromTop (AnimationEasingDemoConstants::defaultComponentHeight)
.removeFromRight (AnimationEasingDemoConstants::defaultComponentHeight * 2));
if (customSettingsPage != nullptr)
customSettingsPage->setBounds (bounds);
}
protected:
void setCustomSettingsPage (Component& settingsPage)
{
customSettingsPage = &settingsPage;
editViewButton.onClick = [&]{ toggleSettingsPage(); };
addChildComponent (settingsPageBackground);
addChildComponent (customSettingsPage);
editViewButton.setButtonText ("Edit");
addAndMakeVisible (editViewButton);
}
private:
void showSettingsPage (bool shouldShowSettingsPage)
{
if (customSettingsPage == nullptr)
return;
editViewButton.setButtonText (shouldShowSettingsPage ? "View" : "Edit");
settingsPageBackground.setVisible (shouldShowSettingsPage);
customSettingsPage->setVisible (shouldShowSettingsPage);
}
void toggleSettingsPage()
{
showSettingsPage (editViewButton.getButtonText() == "Edit");
}
struct JUCELogoComponent final : Component
{
void paint (Graphics& g) final
{
const auto bounds = getLocalBounds();
g.setColour (getUIColourIfAvailable (LookAndFeel_V4::ColourScheme::UIColour::highlightedFill));
g.fillRect (bounds);
g.setColour (getUIColourIfAvailable (LookAndFeel_V4::ColourScheme::UIColour::defaultText));
const auto logo = getJUCELogoPath();
g.addTransform (logo.getTransformToScaleToFit (bounds.toFloat().reduced (AnimationEasingDemoConstants::mediumGapSize), true));
g.fillPath (logo);
}
};
void animateFrame (float position, float size, float alpha)
{
// Transforms don't work when scaling to 0 so this work around hides
// the component when the size is 0. As the alpha is also animated it's
// guaranteed to be correctly set when the size is not 0
if (approximatelyEqual (size, 0.0f))
{
componentToAnimate.setAlpha (0.0f);
return;
}
const auto bounds = getLocalBounds().toFloat();
const auto centre = bounds.getCentre();
const auto xLimits = makeAnimationLimits (-bounds.getWidth(), 0.0f);
componentToAnimate.setTransform (AffineTransform{}.scaled (size, size, centre.getX(), centre.getY())
.translated (xLimits.lerp (position), 0.0f));
componentToAnimate.setAlpha (alpha);
}
struct BackgroundFill : Component
{
void paint (Graphics& g)
{
g.fillAll (getUIColourIfAvailable (LookAndFeel_V4::ColourScheme::UIColour::windowBackground));
}
};
AnimationSettings animationSettings;
std::function<ValueAnimatorBuilder::EasingFn()> easingFunctionFactory {};
BackgroundFill settingsPageBackground;
Component* customSettingsPage {};
TextButton editViewButton;
std::unique_ptr<Animator> animator;
VBlankAnimatorUpdater updater { this };
JUCELogoComponent componentToAnimate;
};
class StandardEasingAnimationView final : public AnimationView
{
public:
StandardEasingAnimationView (const AnimationSettings& settings,
ValueAnimatorBuilder::EasingFn easingFunction)
: AnimationView (settings, [=]{ return easingFunction; })
{}
};
class CubicBezierEasingAnimationView final : public AnimationView
{
public:
CubicBezierEasingAnimationView (const AnimationSettings& animationSettings)
: AnimationView (animationSettings,
[&]{ return Easings::createCubicBezier (bezierCurve.cp1, bezierCurve.cp2); })
{
settingsPage.graph.onValueChange = [&] { setCubicBezierCurve (settingsPage.graph.getCubicBezierCurve()); };
settingsPage.settings.onValueChange = [&] { setCubicBezierCurve (settingsPage.settings.getCubicBezierCurve()); };
settingsPage.graph.setCubicBezierCurve ({ { 0.2f, 0.0f }, { 0.0f, 1.0f } });
setCustomSettingsPage (settingsPage);
}
private:
struct SettingsPage : Component
{
SettingsPage()
{
addAndMakeVisible (graph);
addAndMakeVisible (settings);
}
void resized() final
{
auto bounds = getLocalBounds();
settings.setBounds (bounds.removeFromBottom (AnimationEasingDemoConstants::defaultComponentHeight));
graph.setBounds (bounds);
}
CubicBezierGraphComponent graph;
CubicBezierSettingsComponent settings;
};
void setCubicBezierCurve (const CubicBezier& newBezierCurve)
{
bezierCurve = newBezierCurve;
settingsPage.graph.setCubicBezierCurve (newBezierCurve);
settingsPage.settings.setCubicBezierCurve (newBezierCurve);
}
CubicBezier bezierCurve;
SettingsPage settingsPage;
};
struct SliderAndLabel final : public Component
{
SliderAndLabel()
{
addAndMakeVisible (slider);
addAndMakeVisible (label);
}
void resized() final
{
auto bounds = getLocalBounds();
label.setBounds (bounds.removeFromTop (bounds.getHeight() / 2)
.removeFromBottom (AnimationEasingDemoConstants::defaultComponentHeight));
slider.setBounds (bounds.removeFromTop (AnimationEasingDemoConstants::defaultComponentHeight));
}
Slider slider;
Label label;
};
class SpringEasingAnimationView final : public AnimationView
{
public:
SpringEasingAnimationView (const AnimationSettings& animationSettings)
: AnimationView (animationSettings,
[&]{ return Easings::createSpring (SpringEasingOptions{}.withFrequency (getFrequency())
.withAttenuation (getAttenuation())
.withExtraAttenuationRange (getExtraAttenuationRange())); })
{
setCustomSettingsPage (settingsPage);
}
private:
float getFrequency() { return (float) settingsPage.frequency.slider.getValue(); }
float getAttenuation() { return (float) settingsPage.attenuation.slider.getValue(); }
float getExtraAttenuationRange() { return (float) settingsPage.extraAttenuationRange.slider.getValue(); }
struct SettingsPage : Component
{
SettingsPage()
{
frequency.label.setText ("Frequency", NotificationType::dontSendNotification);
frequency.slider.setRange (1.0, 10.0, 1.0);
frequency.slider.setValue (3.0);
attenuation.label.setText ("Attenuation", NotificationType::dontSendNotification);
attenuation.slider.setRange (1.0, 10.0, 1.0);
attenuation.slider.setValue (3.0);
extraAttenuationRange.label.setText ("Extra attenuation range", NotificationType::dontSendNotification);
extraAttenuationRange.slider.setRange (0.05, 0.98, 0.01);
extraAttenuationRange.slider.setValue (0.25);
addAndMakeVisible (frequency);
addAndMakeVisible (attenuation);
addAndMakeVisible (extraAttenuationRange);
}
void resized() final
{
AnimationEasingDemoHelpers::layoutComponentsVertically (getLocalBounds(), { &frequency, &attenuation, &extraAttenuationRange });
}
SliderAndLabel frequency;
SliderAndLabel attenuation;
SliderAndLabel extraAttenuationRange;
};
SettingsPage settingsPage;
};
class BounceOutEasingAnimationView final : public AnimationView
{
public:
BounceOutEasingAnimationView (const AnimationSettings& animationSettings)
: AnimationView (animationSettings,
[&]{ return Easings::createBounce (roundToInt (numberOfBounces.slider.getValue())); })
{
numberOfBounces.label.setText ("Number of bounces", NotificationType::dontSendNotification);
numberOfBounces.slider.setRange (1.0, 10.0, 1.0);
numberOfBounces.slider.setValue (3.0);
setCustomSettingsPage (numberOfBounces);
}
private:
SliderAndLabel numberOfBounces;
};
class AnimationSelectorAndView final : public Component
{
struct AnimationViewAndName
{
String name;
std::unique_ptr<AnimationView> component;
};
public:
AnimationSelectorAndView (const AnimationSettings& settings)
{
views.push_back ({ "linear", std::make_unique <StandardEasingAnimationView> (settings, Easings::createLinear()) });
views.push_back ({ "ease (default)", std::make_unique <StandardEasingAnimationView> (settings, Easings::createEase()) });
views.push_back ({ "easeIn", std::make_unique <StandardEasingAnimationView> (settings, Easings::createEaseIn()) });
views.push_back ({ "easeOut", std::make_unique <StandardEasingAnimationView> (settings, Easings::createEaseOut()) });
views.push_back ({ "easeInOut", std::make_unique <StandardEasingAnimationView> (settings, Easings::createEaseInOut()) });
views.push_back ({ "easeOutBack", std::make_unique <StandardEasingAnimationView> (settings, Easings::createEaseOutBack()) });
views.push_back ({ "easeInOutCubic", std::make_unique <StandardEasingAnimationView> (settings, Easings::createEaseInOutCubic()) });
views.push_back ({ "cubicBezier", std::make_unique <CubicBezierEasingAnimationView> (settings) });
views.push_back ({ "spring", std::make_unique <SpringEasingAnimationView> (settings) });
views.push_back ({ "bounce", std::make_unique <BounceOutEasingAnimationView> (settings) });
for (auto [itemId, view] : enumerate (views, int { 1 }))
easingSelector.addItem (view.name, itemId);
// select "ease" as the default
easingSelector.setSelectedItemIndex (1);
easingSelector.onChange = [&]
{
for (auto& view : views)
view.component->setVisible (false);
views[(size_t) easingSelector.getSelectedItemIndex()].component->setVisible (true);
};
for (auto& view : views)
addChildComponent (view.component.get());
addAndMakeVisible (easingSelector);
}
void animate()
{
for (auto& view : views)
view.component->animate();
}
void resized() final
{
auto bounds = getLocalBounds();
easingSelector.setBounds (bounds.removeFromTop (AnimationEasingDemoConstants::defaultComponentHeight));
bounds.removeFromTop (AnimationEasingDemoConstants::smallGapSize);
for (auto& view : views)
view.component->setBounds (bounds);
}
private:
ComboBox easingSelector;
std::vector<AnimationViewAndName> views;
};
class AnimationEasingDemo final : public Component
{
public:
//==============================================================================
AnimationEasingDemo()
{
animationSettings.durationMs = 1000.0;
animationSettings.shouldAnimatePosition = true;
animationSettings.shouldAnimateSize = false;
animationSettings.shouldAnimateAlpha = false;
animationSettingsComponent.onAnimate = [=]
{
animationView1.animate();
animationView2.animate();
};
addAndMakeVisible (animationSettingsComponent);
addAndMakeVisible (animationView1);
addAndMakeVisible (animationView2);
setSize (600, 400);
}
//==============================================================================
void paint (Graphics& g) final
{
g.fillAll (getUIColourIfAvailable (LookAndFeel_V4::ColourScheme::UIColour::windowBackground));
}
void resized() override
{
auto bounds = getLocalBounds().reduced (AnimationEasingDemoConstants::largeGapSize);
animationSettingsComponent.setBounds (bounds.removeFromTop (AnimationEasingDemoConstants::defaultComponentHeight * 2));
bounds.removeFromTop (AnimationEasingDemoConstants::smallGapSize);
AnimationEasingDemoHelpers::layoutComponentsVerticallyOrHorizontally (bounds, { &animationView1, &animationView2 });
}
private:
//==============================================================================
AnimationSettings animationSettings;
AnimationSettingsComponent animationSettingsComponent { animationSettings };
AnimationSelectorAndView animationView1 { animationSettings };
AnimationSelectorAndView animationView2 { animationSettings };
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AnimationEasingDemo)
};

View file

@ -0,0 +1,900 @@
/*
==============================================================================
This file is part of the JUCE framework examples.
Copyright (c) Raw Material Software Limited
The code included in this file is provided under the terms of the ISC license
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
to use, copy, modify, and/or distribute this software for any purpose with or
without fee is hereby granted provided that the above copyright notice and
this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
==============================================================================
*/
/*******************************************************************************
The block below describes the properties of this PIP. A PIP is a short snippet
of code that can be read by the Projucer and used to generate a JUCE project.
BEGIN_JUCE_PIP_METADATA
name: AnimatorsDemo
version: 1.0.0
vendor: JUCE
website: http://juce.com
description: Application demonstrating how the JUCE provided Animator
classes can be used to create dynamic, composable, smooth
animations.
dependencies: juce_core, juce_data_structures, juce_events, juce_graphics,
juce_gui_basics, juce_animation
exporters: xcode_mac, vs2022, androidstudio, xcode_iphone
moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1
type: Component
mainClass: AnimatorsDemo
useLocalCopy: 1
END_JUCE_PIP_METADATA
*******************************************************************************/
#pragma once
struct Paintable
{
virtual ~Paintable() = default;
virtual void paint (Graphics& g) const = 0;
};
namespace Shapes
{
class Arc final : public Paintable
{
static constexpr auto pi = MathConstants<float>::pi;
static constexpr auto arcStart = pi / 2.0f;
public:
Arc() = default;
Arc (Point<float> centreIn, float radiusIn, float thicknessIn, Colour colourIn)
: centre (centreIn),
initialRadius (radiusIn - thicknessIn / 2),
initialThickness (thicknessIn),
colour (colourIn)
{
}
void paint (Graphics& g) const override
{
if (! active)
return;
const Graphics::ScopedSaveState s { g };
Path p;
p.addCentredArc (centre.getX(),
centre.getY(),
radius,
radius,
0.0f,
arcStart,
arcStart + sweepAngle,
true);
g.setColour (colour);
g.strokePath (p, { thickness, PathStrokeType::mitered });
}
void setActive (bool activeIn)
{
active = activeIn;
}
auto getFanoutAnimator() const { return fanoutAnimator; }
auto getFillAnimator() const { return fillAnimator; }
Point<float> centre;
float initialRadius = 0.0f, initialThickness = 0.0f;
Colour colour = Colours::white;
private:
bool active = false;
float radius = 0.0f, thickness = 0.0f, sweepAngle = 0.0f;
void reset()
{
sweepAngle = 0.0f;
radius = initialRadius;
thickness = initialThickness;
}
Animator fanoutAnimator = ValueAnimatorBuilder{}
.withOnStartCallback ([this]
{
reset();
active = true;
})
.withValueChangedCallback ([this] (auto value)
{
sweepAngle = makeAnimationLimits (2.1f * MathConstants<float>::pi).lerp (value);
})
.withEasing (Easings::createLinear())
.build();
Animator fillAnimator = ValueAnimatorBuilder{}
.withOnStartReturningValueChangedCallback (
[this]
{
const auto thicknessChange = radius - 5.0f;
const std::tuple begin { initialRadius, initialThickness };
const std::tuple end { initialRadius - thicknessChange / 2.0f, initialThickness + thicknessChange };
const auto limits = makeAnimationLimits (begin, end);
return [this, limits] (auto value)
{
std::tie (radius, thickness) = limits.lerp (value);
};
})
.withEasing (Easings::createLinear())
.build();
};
class Circle : public Paintable
{
public:
Circle (Point<float> centreIn, float radiusIn, Colour colourIn)
: centre (centreIn), radius (radiusIn), colour (colourIn)
{
}
void paint (Graphics& g) const override
{
if (! active)
return;
const Graphics::ScopedSaveState s { g };
g.setColour (colour);
g.fillEllipse (centre.getX() - radius, centre.getY() - radius, 2.0f * radius, 2.0f * radius);
}
void setActive (bool activeIn) { active = activeIn; }
private:
Point<float> centre;
float radius = 0.0f;
Colour colour;
bool active = false;
};
/* Can return a subpath based on a proportion between [0, 1.0]. Useful for creating an animation
where a path is drawn over time.
*/
class PartialPath
{
public:
explicit PartialPath (std::initializer_list<Point<float>> points)
{
bool pathIsEmpty = false;
for (auto p : points)
{
if (std::exchange (pathIsEmpty, true) == false)
{
path.startNewSubPath (p);
pts.push_back (std::make_pair (p, 0.0f));
}
else
{
path.lineTo (p);
pts.push_back (std::make_pair (p, path.getLength()));
}
}
}
Path getPartialPath (float proportion) const
{
proportion = jmin (1.0f, proportion);
Path partialPath;
bool pathIsEmpty = false;
if (pts.size() < 2)
return partialPath;
const auto proportionalLength = path.getLength() * proportion;
const auto lineTo = [&partialPath, &pathIsEmpty] (Point<float> p)
{
if (std::exchange (pathIsEmpty, true) == false)
partialPath.startNewSubPath (p);
else
partialPath.lineTo (p);
};
for (const auto& point : pts)
{
if (point.second > proportionalLength)
{
lineTo (path.getPointAlongPath (proportionalLength));
break;
}
lineTo (point.first);
}
return partialPath;
}
private:
Path path;
std::vector<std::pair<Point<float>, float>> pts;
};
class Checkmark : public Paintable
{
public:
Checkmark (Rectangle<float> placementIn, float thicknessIn)
: placement (placementIn),
partialPath { { placement.getX(), placement.getY() + 0.7f * placement.getHeight() },
{ placement.getX() + 0.4f * placement.getWidth(), placement.getBottom() },
{ placement.getRight(), placement.getY() + 0.2f * placement.getHeight() } },
thickness (thicknessIn)
{
}
void paint (Graphics& g) const override
{
if (exactlyEqual (progress, 0.0f))
return;
const Graphics::ScopedSaveState s { g };
g.setColour (colour);
const auto p = partialPath.getPartialPath (progress);
g.strokePath (p, PathStrokeType { thickness, PathStrokeType::JointStyle::curved, PathStrokeType::EndCapStyle::rounded });
}
void setProgress (float p) { progress = p; }
private:
Rectangle<float> placement;
PartialPath partialPath;
float progress = 0.0f;
float thickness = 10.0f;
Colour colour { Colours::white };
};
} // namespace Shapes
inline auto createComponentMover (Component& component, Rectangle<int> targetBounds)
{
const auto boundsToTuple = [] (auto b)
{
return std::make_tuple (b.getX(), b.getY(), b.getWidth(), b.getHeight());
};
const auto begin = boundsToTuple (component.getBoundsInParent());
const auto end = boundsToTuple (targetBounds);
const auto limits = makeAnimationLimits (begin, end);
return [&component, limits] (auto v)
{
const auto [x, y, w, h] = limits.lerp (v);
component.setBounds (x, y, w, h);
};
}
class AnimatedCheckmark : public Paintable
{
public:
AnimatedCheckmark (Point<float> centre, float radius, float thickness, Colour colour)
: arc (centre, radius, thickness, colour),
circle (centre, radius, colour),
checkmark (Rectangle<float> { centre.getX() - radius,
centre.getY() - radius,
2.0f * radius,
2.0f * radius }.reduced (radius * 0.4f),
thickness)
{
}
void paint (Graphics& g) const override
{
arc.paint (g);
circle.paint (g);
checkmark.paint (g);
}
auto getAnimator() const { return animator; }
private:
Shapes::Arc arc;
Shapes::Circle circle;
Shapes::Checkmark checkmark;
Animator animator = [&]
{
circle.setActive (false);
const auto checkmarkAnimator = ValueAnimatorBuilder{}
.withEasing (Easings::createEaseOutBack())
.withDurationMs (450)
.withValueChangedCallback ([this] (auto value)
{
checkmark.setProgress (value);
})
.build();
return AnimatorSetBuilder (arc.getFanoutAnimator())
.followedBy (arc.getFillAnimator())
.followedBy ([this]
{
arc.setActive (false);
circle.setActive (true);
})
.followedBy (checkmarkAnimator)
.build();
}();
};
class FallingBall : public Component
{
private:
template <typename T>
auto getDimensions (Rectangle<T> r)
{
return std::make_tuple (r.getX(), r.getY(), r.getWidth(), r.getHeight());
}
public:
void paint (Graphics& g) override
{
g.setColour (Colour { 0xff179af0 });
const auto [x, y, width, height] = getDimensions (getLocalBounds().toFloat());
g.fillEllipse (x, y, width, height);
}
Animator updateAndGetAnimator()
{
newBounds = getBoundsInParent().withY (getParentHeight() - getHeight());
return fallAnimator;
}
private:
Rectangle<int> newBounds;
Animator fallAnimator = ValueAnimatorBuilder{}
.withOnStartReturningValueChangedCallback ([this] { return createComponentMover (*this, newBounds); })
.withEasing (Easings::createBounce())
.withDurationMs (600)
.build();
};
class PulsingCheckmark : public Component
{
public:
PulsingCheckmark (Point<float> centre, float radius)
: checkmark ({ radius, radius }, radius, radius / 6.25f, Colour { 0xff1bc211 })
{
const auto widthAndHeight = 2 * (int) radius;
const auto x = (int) (centre.getX() - radius);
const auto y = (int) (centre.getY() - radius);
setBounds (x, y, widthAndHeight, widthAndHeight);
}
//==============================================================================
void paint (Graphics& g) override
{
checkmark.paint (g);
}
void mouseDown (const MouseEvent&) override
{
animator.complete();
}
Animator getAnimator() const { return animator; }
private:
//==============================================================================
AnimatedCheckmark checkmark;
Animator animator = [&]
{
const auto checkmarkAnimator = checkmark.getAnimator();
const auto checkmarkDuration = checkmarkAnimator.getDurationMs();
const auto pulseAnimator = ValueAnimatorBuilder{}
.withEasing (Easings::createOnOffRamp())
.withOnStartReturningValueChangedCallback (
[this]
{
const auto radius = (float) getWidth() / 2.0f;
const auto centreInParent = getBoundsInParent().toFloat().getPosition()
+ Point<float> { radius, radius };
return [this, centreInParent] (auto value)
{
setTransform (AffineTransform::translation (-centreInParent)
.followedBy (AffineTransform::scale (1.0f + 0.2f * value))
.followedBy (AffineTransform::translation (centreInParent)));
};
})
.build();
const auto timeBeforePulseAnimation = checkmarkDuration - pulseAnimator.getDurationMs();
const auto repaintAnimator = ValueAnimatorBuilder{}
.withValueChangedCallback ([this] (auto) { repaint(); })
.runningInfinitely()
.build();
return AnimatorSetBuilder (checkmarkAnimator)
.togetherWith (repaintAnimator)
.togetherWith (timeBeforePulseAnimation)
.followedBy (pulseAnimator)
.followedBy ([repaintAnimator] { repaintAnimator.complete(); })
.build();
}();
};
// Displays the PulsingCheckmark as it looks when its animation is complete
class CompletedCheckmark : public Component
{
public:
explicit CompletedCheckmark (std::function<void()> onClickIn)
: onClick (std::move (onClickIn)) {}
void resized() override
{
const auto getCentre = [this]
{
return Point<float> { (float) getWidth() / 2, (float) getHeight() / 2 };
};
const auto radius = (float) std::min (getWidth(), getHeight()) / 2.0f;
checkmark = std::make_unique<PulsingCheckmark> (getCentre(), radius);
checkmark->setInterceptsMouseClicks (false, false);
addAndMakeVisible (*checkmark);
checkmark->getAnimator().start();
checkmark->getAnimator().complete();
checkmark->getAnimator().update (0);
}
void mouseDown (const MouseEvent&) override
{
NullCheckedInvocation::invoke (onClick);
}
private:
std::unique_ptr<PulsingCheckmark> checkmark;
std::function<void()> onClick;
};
class BallToolComponent : public Component
{
public:
explicit BallToolComponent (std::function<void()> onClickIn)
: onClick (std::move (onClickIn)) {}
void paint (Graphics& g) override
{
g.setColour (Colour { 0xff179af0 });
g.fillEllipse (getLocalBounds().toFloat());
}
void mouseDown (const MouseEvent&) override
{
NullCheckedInvocation::invoke (onClick);
}
private:
std::function<void()> onClick;
};
class AnimatorsDemo : public Component
{
public:
//==============================================================================
AnimatorsDemo()
{
welcomeComponent.setOnAnimatedClickEnd ([this]
{
toolsPanel.open();
});
addAndMakeVisible (welcomeComponent);
toolsPanel.onClose = [this] { welcomeComponent.reset(); };
toolsPanel.addToolComponent (std::make_unique<CompletedCheckmark> ([this] { selectedTool = SelectedTool::checkmark; }));
toolsPanel.addToolComponent (std::make_unique<BallToolComponent> ([this]
{
selectedTool = SelectedTool::ball;
}));
addAndMakeVisible (toolsPanel);
setSize (600, 400);
}
//==============================================================================
void paint (Graphics& g) override
{
g.fillAll (getLookAndFeel().findColour (ResizableWindow::backgroundColourId));
for (const auto& paintable : objects)
paintable.second->paint (g);
}
void resized() override
{
welcomeComponent.setBounds (getLocalBounds());
}
void mouseDown (const MouseEvent& event) override
{
switch (selectedTool)
{
case SelectedTool::checkmark:
makeCheckmark (event.getPosition().toFloat());
break;
case SelectedTool::ball:
makeBall (event.getPosition().toFloat());
break;
case SelectedTool::none:
toolsPanel.wobbleLabel();
break;
}
}
private:
void makeCheckmark (Point<float> centre)
{
auto checkmark = std::make_unique<PulsingCheckmark> (centre, 50.0f);
updater.addAnimator (checkmark->getAnimator(), [this] { toolComponent.reset(); });
checkmark->getAnimator().start();
addAndMakeVisible (*checkmark, 0);
toolComponent = std::move (checkmark);
}
void makeBall (Point<float> centre)
{
auto ball = std::make_unique<FallingBall>();
addAndMakeVisible (*ball, 0);
const auto radius = 50.0f;
const Rectangle<float> bounds { centre.getX() - radius, centre.getY() - radius, 2 * radius, 2 * radius };
ball->setBounds (bounds.toNearestInt());
auto animator = ball->updateAndGetAnimator();
updater.addAnimator (animator, [this] { toolComponent.reset(); });
animator.start();
toolComponent = std::move (ball);
}
//==============================================================================
VBlankAnimatorUpdater updater { this };
struct WelcomeComponent : public Component
{
WelcomeComponent()
{
startButton.onClick = [this]
{
animateForward = true;
buttonAnimator.start();
updater.addAnimator (buttonAnimator, [this] { updater.removeAnimator (buttonAnimator); });
};
addAndMakeVisible (startButton);
}
void setOnAnimatedClickEnd (std::function<void()> onClickIn)
{
onClick = std::move (onClickIn);
}
void reset()
{
animateForward = false;
buttonAnimator.start();
updater.addAnimator (buttonAnimator, [this] { updater.removeAnimator (buttonAnimator); });
}
void resized() override
{
startButton.setBounds (getLocalBounds().withSizeKeepingCentre (140, 40));
}
private:
TextButton startButton { "Start demo" };
bool animateForward = false;
Animator buttonAnimator = [&]
{
return ValueAnimatorBuilder{}
.withOnStartCallback ([this] { setVisible (true); })
.withValueChangedCallback ([this] (auto value)
{
const auto progress = animateForward ? value : (1.0 - value);
setAlpha (1.0f - (float) progress);
})
.withOnCompleteCallback ([this]
{
setVisible (! animateForward);
if (animateForward)
NullCheckedInvocation::invoke (onClick);
})
.build();
}();
VBlankAnimatorUpdater updater { this };
std::function<void()> onClick;
};
class WobblyLabel : public Component
{
public:
explicit WobblyLabel (const String& text)
: label ({}, text)
{
label.setJustificationType (Justification::right);
addAndMakeVisible (label);
}
void resized() override
{
label.setBounds (getLocalBounds().withX ((int) offset));
}
void wobble()
{
updater.addAnimator (animator, [this] { updater.removeAnimator (animator); });
animator.start();
}
private:
float offset = 0.0f;
Label label;
Animator animator = ValueAnimatorBuilder{}.withValueChangedCallback (
[this] (float progress)
{
offset = 10.0f * std::sin (progress * 20.0f) * (1.0f - progress);
resized();
})
.withDurationMs (600)
.build();
VBlankAnimatorUpdater updater { this };
};
struct ToolsPanel : public Component
{
static constexpr auto margin = 15;
ToolsPanel()
{
shadower.setOwner (this);
closeButton.onClick = [this] { close(); };
addAndMakeVisible (closeButton);
addAndMakeVisible (label);
addAndMakeVisible (instructions);
addChildComponent (selectionComponent, 0);
instructions.setJustificationType (Justification::centred);
}
void paint (Graphics& g) override
{
g.fillAll (getLookAndFeel().findColour (juce::ResizableWindow::backgroundColourId).brighter (0.1f));
}
void resized() override
{
closeButton.setBounds (getLocalBounds().removeFromTop (40)
.removeFromRight (40)
.reduced (5));
auto bounds = getLocalBounds();
instructions.setBounds (bounds.removeFromBottom (30));
FlexBox flexBox;
flexBox.flexDirection = FlexBox::Direction::row;
flexBox.flexWrap = FlexBox::Wrap::noWrap;
flexBox.justifyContent = FlexBox::JustifyContent::center;
flexBox.alignItems = FlexBox::AlignItems::center;
const auto height = (float) (bounds.getHeight() - 2 * margin);
flexBox.items.add (FlexItem (label).withWidth (200.0f).withHeight (height));
for (auto& c : toolComponents)
flexBox.items.add (FlexItem (*c).withWidth (height).withHeight (height).withMargin (margin));
flexBox.performLayout (bounds);
}
//==============================================================================
void open()
{
shouldOpen = true;
updater.addAnimator (slideInAnimator, [this] { updater.removeAnimator (slideInAnimator); });
slideInAnimator.start();
}
void close()
{
shouldOpen = false;
updater.addAnimator (slideInAnimator, [this]
{
NullCheckedInvocation::invoke (onClose);
updater.removeAnimator (slideInAnimator);
});
slideInAnimator.start();
}
void addToolComponent (std::unique_ptr<Component> component)
{
addAndMakeVisible (*component);
component->addMouseListener (this, false);
toolComponents.push_back (std::move (component));
}
//==============================================================================
void mouseUp (const MouseEvent& event) override
{
if (event.originalComponent == this)
return;
const auto targetBounds = event.originalComponent->getBounds().expanded (std::min (10, margin));
if (! selectionComponent.isVisible())
{
selectionComponent.setBounds (targetBounds);
selectionComponent.appear (updater);
}
else
{
selectionComponent.moveTo (updater, targetBounds);
}
}
void wobbleLabel()
{
label.wobble();
}
private:
//==============================================================================
class SelectionComponent : public Component
{
public:
SelectionComponent()
{
setVisible (false);
}
void paint (Graphics& g) override
{
arc.paint (g);
}
void appear (VBlankAnimatorUpdater& animatorUpdater)
{
appearAnimator.start();
animatorUpdater.addAnimator (appearAnimator,
[this, &animatorUpdater]
{
animatorUpdater.removeAnimator (appearAnimator);
});
}
void moveTo (VBlankAnimatorUpdater& animatorUpdater, Rectangle<int> newBoundsIn)
{
newBounds = newBoundsIn;
moveToNewBoundsAnimator.start();
animatorUpdater.addAnimator (moveToNewBoundsAnimator,
[this, &animatorUpdater]
{
animatorUpdater.removeAnimator (moveToNewBoundsAnimator);
});
}
private:
Shapes::Arc arc;
Rectangle<int> newBounds;
Animator appearAnimator = [&]
{
const auto repaintAnimator =
ValueAnimatorBuilder{}
.withValueChangedCallback ([this] (auto) { repaint(); })
.runningInfinitely()
.build();
return AnimatorSetBuilder { [this]
{
setVisible (true);
arc.centre = Point { getWidth(), getHeight() }.toFloat() / 2;
arc.initialRadius = (float) (getWidth()) / 2 - 2.0f;
arc.initialThickness = 4.0f;
} }
.followedBy (repaintAnimator)
.togetherWith (arc.getFanoutAnimator())
.followedBy ([repaintAnimator] { repaintAnimator.complete(); })
.withTimeTransform ([] (auto v) { return 1.5 * v; })
.build();
}();
Animator moveToNewBoundsAnimator = ValueAnimatorBuilder{}
.withOnStartReturningValueChangedCallback ([this] { return createComponentMover (*this, newBounds); })
.withEasing (Easings::createSpring())
.withDurationMs (600)
.build();
};
WobblyLabel label { "Select animation:" };
Label instructions { "", "Click below to animate" };
SelectionComponent selectionComponent;
std::vector<std::unique_ptr<Component>> toolComponents;
DropShadow shadow { Colour { 0x90000000 }, 12, {} };
DropShadower shadower { shadow };
TextButton closeButton { "X" };
Animator slideInAnimator = ValueAnimatorBuilder{}
.withEasing (Easings::createEaseInOutCubic())
.withOnStartReturningValueChangedCallback (
[this]
{
const auto width = getParentWidth() - 2 * margin;
const auto height = 130;
setBounds (-width, margin, width, height);
setVisible (true);
const auto limits = makeAnimationLimits (-width, margin);
return [this, limits] (auto value)
{
const auto progress = std::clamp (shouldOpen ? value : 1.0 - value, 0.0, 1.0);
setTopLeftPosition (roundToInt (limits.lerp ((float) progress)), margin);
};
})
.withDurationMs (500)
.build();
VBlankAnimatorUpdater updater { this };
bool shouldOpen = true;
public:
std::function<void()> onClose;
};
enum class SelectedTool
{
none,
checkmark,
ball
};
WelcomeComponent welcomeComponent;
ToolsPanel toolsPanel;
SelectedTool selectedTool = SelectedTool::none;
std::unique_ptr<Component> toolComponent;
std::map<Paintable*, std::unique_ptr<Paintable>> objects;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AnimatorsDemo)
};