Preliminary AU support

pull/1/head
asb2m10 10 years ago
parent 32c5f0bb77
commit 0d382416c3
  1. 8
      Builds/Linux/Makefile
  2. 5008
      Builds/MacOSX/Dexed.xcodeproj/project.pbxproj
  3. BIN
      Builds/MacOSX/Dexed.xcodeproj/project.xcworkspace/xcuserdata/asb2m10.xcuserdatad/UserInterfaceState.xcuserstate
  4. 23
      Builds/MacOSX/Info.plist
  5. 10
      Builds/VisualStudio2012/Dexed.vcxproj
  6. 18
      Builds/VisualStudio2012/Dexed.vcxproj.filters
  7. 6
      Builds/VisualStudio2012/resources.rc
  8. 10
      Builds/VisualStudio2013/Dexed.vcxproj
  9. 18
      Builds/VisualStudio2013/Dexed.vcxproj.filters
  10. 6
      Builds/VisualStudio2013/resources.rc
  11. 10
      Dexed.jucer
  12. 20
      JuceLibraryCode/AppConfig.h
  13. 4
      JuceLibraryCode/JuceHeader.h
  14. 2
      JuceLibraryCode/modules/juce_audio_basics/juce_audio_basics.cpp
  15. 2
      JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiMessage.cpp
  16. 7
      JuceLibraryCode/modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp
  17. 6
      JuceLibraryCode/modules/juce_audio_basics/synthesisers/juce_Synthesiser.h
  18. 2
      JuceLibraryCode/modules/juce_audio_devices/native/juce_win32_DirectSound.cpp
  19. 2
      JuceLibraryCode/modules/juce_audio_devices/native/juce_win32_WASAPI.cpp
  20. 4
      JuceLibraryCode/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp
  21. 8
      JuceLibraryCode/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm
  22. 4
      JuceLibraryCode/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp
  23. 12
      JuceLibraryCode/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm
  24. 1
      JuceLibraryCode/modules/juce_audio_processors/juce_audio_processors.h
  25. 182
      JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp
  26. 23
      JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessor.h
  27. 2
      JuceLibraryCode/modules/juce_core/containers/juce_ReferenceCountedArray.h
  28. 7
      JuceLibraryCode/modules/juce_core/javascript/juce_Javascript.cpp
  29. 7
      JuceLibraryCode/modules/juce_core/javascript/juce_Javascript.h
  30. 2
      JuceLibraryCode/modules/juce_core/juce_core.h
  31. 2
      JuceLibraryCode/modules/juce_core/memory/juce_ReferenceCountedObject.h
  32. 32
      JuceLibraryCode/modules/juce_core/native/juce_win32_Network.cpp
  33. 10
      JuceLibraryCode/modules/juce_core/network/juce_Socket.cpp
  34. 106
      JuceLibraryCode/modules/juce_core/system/juce_PlatformDefs.h
  35. 1
      JuceLibraryCode/modules/juce_core/system/juce_StandardHeader.h
  36. 2
      JuceLibraryCode/modules/juce_core/xml/juce_XmlElement.cpp
  37. 1
      JuceLibraryCode/modules/juce_events/juce_events.h
  38. 3
      JuceLibraryCode/modules/juce_events/messages/juce_MessageManager.cpp
  39. 2
      JuceLibraryCode/modules/juce_events/messages/juce_MessageManager.h
  40. 51
      JuceLibraryCode/modules/juce_events/native/juce_mac_MessageManager.mm
  41. 1
      JuceLibraryCode/modules/juce_events/native/juce_win32_HiddenMessageWindow.h
  42. 27
      JuceLibraryCode/modules/juce_events/native/juce_win32_Messaging.cpp
  43. 2
      JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp
  44. 8
      JuceLibraryCode/modules/juce_graphics/geometry/juce_AffineTransform.cpp
  45. 3
      JuceLibraryCode/modules/juce_gui_basics/buttons/juce_Button.h
  46. 21
      JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp
  47. 2
      JuceLibraryCode/modules/juce_gui_basics/menus/juce_PopupMenu.cpp
  48. 12
      JuceLibraryCode/modules/juce_gui_basics/native/juce_linux_FileChooser.cpp
  49. 7
      JuceLibraryCode/modules/juce_gui_basics/native/juce_linux_Windowing.cpp
  50. 2
      JuceLibraryCode/modules/juce_gui_basics/native/juce_win32_Windowing.cpp
  51. 2
      JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ListBox.cpp
  52. 12
      JuceLibraryCode/modules/juce_gui_basics/windows/juce_CallOutBox.cpp
  53. 11
      JuceLibraryCode/modules/juce_gui_basics/windows/juce_CallOutBox.h
  54. 5
      JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm
  55. 10
      Source/PluginFx.cpp
  56. 1
      Source/PluginFx.h
  57. 2
      Source/PluginParam.cpp
  58. 11
      Source/PluginProcessor.cpp

@ -18,12 +18,12 @@ ifeq ($(CONFIG),Debug)
TARGET_ARCH := -march=native TARGET_ARCH := -march=native
endif endif
CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ~/src/vstsdk2.4 -I ../../JuceLibraryCode -I ../../JuceLibraryCode/modules CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=0.8.1" -D "JUCE_APP_VERSION_HEX=0x801" -I /usr/include -I /usr/include/freetype2 -I ~/src/vstsdk2.4 -I ../../JuceLibraryCode -I ../../JuceLibraryCode/modules
CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -fPIC -O0 CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -fPIC -O0
CXXFLAGS += $(CFLAGS) CXXFLAGS += $(CFLAGS)
LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -shared -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -shared -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt
LDDEPS := LDDEPS :=
RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ~/src/vstsdk2.4 -I ../../JuceLibraryCode -I ../../JuceLibraryCode/modules RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=0.8.1" -D "JUCE_APP_VERSION_HEX=0x801" -I /usr/include -I /usr/include/freetype2 -I ~/src/vstsdk2.4 -I ../../JuceLibraryCode -I ../../JuceLibraryCode/modules
TARGET := Dexed.so TARGET := Dexed.so
BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)
CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)
@ -39,12 +39,12 @@ ifeq ($(CONFIG),Release)
TARGET_ARCH := -march=native TARGET_ARCH := -march=native
endif endif
CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ~/src/vstsdk2.4 -I ../../JuceLibraryCode -I ../../JuceLibraryCode/modules CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=0.8.1" -D "JUCE_APP_VERSION_HEX=0x801" -I /usr/include -I /usr/include/freetype2 -I ~/src/vstsdk2.4 -I ../../JuceLibraryCode -I ../../JuceLibraryCode/modules
CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -fPIC -Os CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -fPIC -Os
CXXFLAGS += $(CFLAGS) CXXFLAGS += $(CFLAGS)
LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -shared -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -shared -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt
LDDEPS := LDDEPS :=
RESFLAGS := -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ~/src/vstsdk2.4 -I ../../JuceLibraryCode -I ../../JuceLibraryCode/modules RESFLAGS := -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=0.8.1" -D "JUCE_APP_VERSION_HEX=0x801" -I /usr/include -I /usr/include/freetype2 -I ~/src/vstsdk2.4 -I ../../JuceLibraryCode -I ../../JuceLibraryCode/modules
TARGET := Dexed.so TARGET := Dexed.so
BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)
CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)

File diff suppressed because it is too large Load Diff

@ -16,12 +16,31 @@
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>PTul</string> <string>PTul</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>1.0.0</string> <string>0.8.1</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>1.0.0</string> <string>0.8.1</string>
<key>NSHumanReadableCopyright</key> <key>NSHumanReadableCopyright</key>
<string>Digital Suburban</string> <string>Digital Suburban</string>
<key>NSHighResolutionCapable</key> <key>NSHighResolutionCapable</key>
<true/> <true/>
<key>AudioComponents</key>
<array>
<dict>
<key>name</key>
<string>Digital Suburban: Dexed</string>
<key>description</key>
<string>Dexed FM Synth</string>
<key>factoryFunction</key>
<string>DexedAUFactory</string>
<key>manufacturer</key>
<string>DGSB</string>
<key>type</key>
<string>aumu</string>
<key>subtype</key>
<string>Dexd</string>
<key>version</key>
<integer>2049</integer>
</dict>
</array>
</dict> </dict>
</plist> </plist>

@ -58,7 +58,7 @@
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat> <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;C:\work\vstsdk2.4;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;C:\work\vstsdk2.4;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2012_78A501F=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2012_78A501F=1;JUCE_APP_VERSION=0.8.1;JUCE_APP_VERSION_HEX=0x801;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<RuntimeTypeInfo>true</RuntimeTypeInfo> <RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader/> <PrecompiledHeader/>
@ -100,7 +100,7 @@
<ClCompile> <ClCompile>
<Optimization>MinSpace</Optimization> <Optimization>MinSpace</Optimization>
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;C:\work\vstsdk2.4;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;C:\work\vstsdk2.4;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;JUCER_VS2012_78A501F=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;JUCER_VS2012_78A501F=1;JUCE_APP_VERSION=0.8.1;JUCE_APP_VERSION_HEX=0x801;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<RuntimeTypeInfo>true</RuntimeTypeInfo> <RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader/> <PrecompiledHeader/>
@ -1173,6 +1173,7 @@
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorEditor.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorEditor.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorGraph.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorGraph.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorListener.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorListener.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorParameter.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_GenericAudioProcessorEditor.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_GenericAudioProcessorEditor.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_PluginDescription.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_PluginDescription.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format\juce_AudioPluginFormat.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format\juce_AudioPluginFormat.h"/>
@ -1212,6 +1213,7 @@
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_BigInteger.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_BigInteger.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Expression.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Expression.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_MathsFunctions.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_MathsFunctions.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_NormalisableRange.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Random.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Random.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Range.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Range.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_Atomic.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_Atomic.h"/>
@ -1285,6 +1287,7 @@
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_SubregionStream.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_SubregionStream.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_FileLogger.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_FileLogger.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_Logger.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_Logger.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_CompilerSupport.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_PlatformDefs.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_PlatformDefs.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_StandardHeader.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_StandardHeader.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_SystemStats.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_SystemStats.h"/>
@ -1320,6 +1323,7 @@
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_Message.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_Message.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageListener.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageListener.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageManager.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageManager.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MountedVolumeListChangeDetector.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_NotificationType.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_NotificationType.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\timers\juce_MultiTimer.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\timers\juce_MultiTimer.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\timers\juce_Timer.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\timers\juce_Timer.h"/>
@ -1542,6 +1546,8 @@
<None Include="..\..\Resources\ui\NotoSans-Bold.ttf"/> <None Include="..\..\Resources\ui\NotoSans-Bold.ttf"/>
<None Include="..\..\Resources\builtin_pgm.zip"/> <None Include="..\..\Resources\builtin_pgm.zip"/>
<None Include="..\..\Resources\about.png"/> <None Include="..\..\Resources\about.png"/>
<None Include="..\..\Resources\ui\GlobalEditor_864x144.png"/>
<None Include="..\..\Resources\ui\OperatorEditor_287x218.png"/>
<None Include="..\..\JuceLibraryCode\modules\juce_audio_basics\juce_module_info"/> <None Include="..\..\JuceLibraryCode\modules\juce_audio_basics\juce_module_info"/>
<None Include="..\..\JuceLibraryCode\modules\juce_audio_plugin_client\juce_module_info"/> <None Include="..\..\JuceLibraryCode\modules\juce_audio_plugin_client\juce_module_info"/>
<None Include="..\..\JuceLibraryCode\modules\juce_audio_processors\juce_module_info"/> <None Include="..\..\JuceLibraryCode\modules\juce_audio_processors\juce_module_info"/>

@ -1605,6 +1605,9 @@
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorListener.h"> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorListener.h">
<Filter>Juce Modules\juce_audio_processors\processors</Filter> <Filter>Juce Modules\juce_audio_processors\processors</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorParameter.h">
<Filter>Juce Modules\juce_audio_processors\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_GenericAudioProcessorEditor.h"> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_GenericAudioProcessorEditor.h">
<Filter>Juce Modules\juce_audio_processors\processors</Filter> <Filter>Juce Modules\juce_audio_processors\processors</Filter>
</ClInclude> </ClInclude>
@ -1722,6 +1725,9 @@
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_MathsFunctions.h"> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_MathsFunctions.h">
<Filter>Juce Modules\juce_core\maths</Filter> <Filter>Juce Modules\juce_core\maths</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_NormalisableRange.h">
<Filter>Juce Modules\juce_core\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Random.h"> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Random.h">
<Filter>Juce Modules\juce_core\maths</Filter> <Filter>Juce Modules\juce_core\maths</Filter>
</ClInclude> </ClInclude>
@ -1941,6 +1947,9 @@
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_Logger.h"> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_Logger.h">
<Filter>Juce Modules\juce_core\logging</Filter> <Filter>Juce Modules\juce_core\logging</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_CompilerSupport.h">
<Filter>Juce Modules\juce_core\system</Filter>
</ClInclude>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_PlatformDefs.h"> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_PlatformDefs.h">
<Filter>Juce Modules\juce_core\system</Filter> <Filter>Juce Modules\juce_core\system</Filter>
</ClInclude> </ClInclude>
@ -2046,6 +2055,9 @@
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageManager.h"> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageManager.h">
<Filter>Juce Modules\juce_events\messages</Filter> <Filter>Juce Modules\juce_events\messages</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MountedVolumeListChangeDetector.h">
<Filter>Juce Modules\juce_events\messages</Filter>
</ClInclude>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_NotificationType.h"> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_NotificationType.h">
<Filter>Juce Modules\juce_events\messages</Filter> <Filter>Juce Modules\juce_events\messages</Filter>
</ClInclude> </ClInclude>
@ -2708,6 +2720,12 @@
<None Include="..\..\Resources\about.png"> <None Include="..\..\Resources\about.png">
<Filter>Dexed\Resources</Filter> <Filter>Dexed\Resources</Filter>
</None> </None>
<None Include="..\..\Resources\ui\GlobalEditor_864x144.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\ui\OperatorEditor_287x218.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\JuceLibraryCode\modules\juce_audio_basics\juce_module_info"> <None Include="..\..\JuceLibraryCode\modules\juce_audio_basics\juce_module_info">
<Filter>Juce Modules\juce_audio_basics</Filter> <Filter>Juce Modules\juce_audio_basics</Filter>
</None> </None>

@ -7,7 +7,7 @@
#include <windows.h> #include <windows.h>
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0 FILEVERSION 0,8,1,0
BEGIN BEGIN
BLOCK "StringFileInfo" BLOCK "StringFileInfo"
BEGIN BEGIN
@ -15,9 +15,9 @@ BEGIN
BEGIN BEGIN
VALUE "CompanyName", "Digital Suburban\0" VALUE "CompanyName", "Digital Suburban\0"
VALUE "FileDescription", "Dexed\0" VALUE "FileDescription", "Dexed\0"
VALUE "FileVersion", "1.0.0\0" VALUE "FileVersion", "0.8.1\0"
VALUE "ProductName", "Dexed\0" VALUE "ProductName", "Dexed\0"
VALUE "ProductVersion", "1.0.0\0" VALUE "ProductVersion", "0.8.1\0"
END END
END END

@ -60,7 +60,7 @@
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;C:\work\vstsdk2.4;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;C:\work\vstsdk2.4;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=0.8.1;JUCE_APP_VERSION_HEX=0x801;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<RuntimeTypeInfo>true</RuntimeTypeInfo> <RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader/> <PrecompiledHeader/>
@ -100,7 +100,7 @@
<ClCompile> <ClCompile>
<Optimization>MinSpace</Optimization> <Optimization>MinSpace</Optimization>
<AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;C:\work\vstsdk2.4;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;C:\work\vstsdk2.4;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=0.8.1;JUCE_APP_VERSION_HEX=0x801;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<RuntimeTypeInfo>true</RuntimeTypeInfo> <RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader/> <PrecompiledHeader/>
@ -1172,6 +1172,7 @@
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorEditor.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorEditor.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorGraph.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorGraph.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorListener.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorListener.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorParameter.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_GenericAudioProcessorEditor.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_GenericAudioProcessorEditor.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_PluginDescription.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_PluginDescription.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format\juce_AudioPluginFormat.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format\juce_AudioPluginFormat.h"/>
@ -1211,6 +1212,7 @@
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_BigInteger.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_BigInteger.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Expression.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Expression.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_MathsFunctions.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_MathsFunctions.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_NormalisableRange.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Random.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Random.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Range.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Range.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_Atomic.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_Atomic.h"/>
@ -1284,6 +1286,7 @@
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_SubregionStream.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_SubregionStream.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_FileLogger.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_FileLogger.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_Logger.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_Logger.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_CompilerSupport.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_PlatformDefs.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_PlatformDefs.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_StandardHeader.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_StandardHeader.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_SystemStats.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_SystemStats.h"/>
@ -1319,6 +1322,7 @@
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_Message.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_Message.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageListener.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageListener.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageManager.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageManager.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MountedVolumeListChangeDetector.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_NotificationType.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_NotificationType.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\timers\juce_MultiTimer.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\timers\juce_MultiTimer.h"/>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\timers\juce_Timer.h"/> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\timers\juce_Timer.h"/>
@ -1541,6 +1545,8 @@
<None Include="..\..\Resources\ui\NotoSans-Bold.ttf"/> <None Include="..\..\Resources\ui\NotoSans-Bold.ttf"/>
<None Include="..\..\Resources\builtin_pgm.zip"/> <None Include="..\..\Resources\builtin_pgm.zip"/>
<None Include="..\..\Resources\about.png"/> <None Include="..\..\Resources\about.png"/>
<None Include="..\..\Resources\ui\GlobalEditor_864x144.png"/>
<None Include="..\..\Resources\ui\OperatorEditor_287x218.png"/>
<None Include="..\..\JuceLibraryCode\modules\juce_audio_basics\juce_module_info"/> <None Include="..\..\JuceLibraryCode\modules\juce_audio_basics\juce_module_info"/>
<None Include="..\..\JuceLibraryCode\modules\juce_audio_plugin_client\juce_module_info"/> <None Include="..\..\JuceLibraryCode\modules\juce_audio_plugin_client\juce_module_info"/>
<None Include="..\..\JuceLibraryCode\modules\juce_audio_processors\juce_module_info"/> <None Include="..\..\JuceLibraryCode\modules\juce_audio_processors\juce_module_info"/>

@ -1605,6 +1605,9 @@
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorListener.h"> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorListener.h">
<Filter>Juce Modules\juce_audio_processors\processors</Filter> <Filter>Juce Modules\juce_audio_processors\processors</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorParameter.h">
<Filter>Juce Modules\juce_audio_processors\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_GenericAudioProcessorEditor.h"> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_GenericAudioProcessorEditor.h">
<Filter>Juce Modules\juce_audio_processors\processors</Filter> <Filter>Juce Modules\juce_audio_processors\processors</Filter>
</ClInclude> </ClInclude>
@ -1722,6 +1725,9 @@
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_MathsFunctions.h"> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_MathsFunctions.h">
<Filter>Juce Modules\juce_core\maths</Filter> <Filter>Juce Modules\juce_core\maths</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_NormalisableRange.h">
<Filter>Juce Modules\juce_core\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Random.h"> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Random.h">
<Filter>Juce Modules\juce_core\maths</Filter> <Filter>Juce Modules\juce_core\maths</Filter>
</ClInclude> </ClInclude>
@ -1941,6 +1947,9 @@
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_Logger.h"> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_Logger.h">
<Filter>Juce Modules\juce_core\logging</Filter> <Filter>Juce Modules\juce_core\logging</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_CompilerSupport.h">
<Filter>Juce Modules\juce_core\system</Filter>
</ClInclude>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_PlatformDefs.h"> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_PlatformDefs.h">
<Filter>Juce Modules\juce_core\system</Filter> <Filter>Juce Modules\juce_core\system</Filter>
</ClInclude> </ClInclude>
@ -2046,6 +2055,9 @@
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageManager.h"> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageManager.h">
<Filter>Juce Modules\juce_events\messages</Filter> <Filter>Juce Modules\juce_events\messages</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MountedVolumeListChangeDetector.h">
<Filter>Juce Modules\juce_events\messages</Filter>
</ClInclude>
<ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_NotificationType.h"> <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_NotificationType.h">
<Filter>Juce Modules\juce_events\messages</Filter> <Filter>Juce Modules\juce_events\messages</Filter>
</ClInclude> </ClInclude>
@ -2708,6 +2720,12 @@
<None Include="..\..\Resources\about.png"> <None Include="..\..\Resources\about.png">
<Filter>Dexed\Resources</Filter> <Filter>Dexed\Resources</Filter>
</None> </None>
<None Include="..\..\Resources\ui\GlobalEditor_864x144.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\ui\OperatorEditor_287x218.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\JuceLibraryCode\modules\juce_audio_basics\juce_module_info"> <None Include="..\..\JuceLibraryCode\modules\juce_audio_basics\juce_module_info">
<Filter>Juce Modules\juce_audio_basics</Filter> <Filter>Juce Modules\juce_audio_basics</Filter>
</None> </None>

@ -7,7 +7,7 @@
#include <windows.h> #include <windows.h>
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0 FILEVERSION 0,8,1,0
BEGIN BEGIN
BLOCK "StringFileInfo" BLOCK "StringFileInfo"
BEGIN BEGIN
@ -15,9 +15,9 @@ BEGIN
BEGIN BEGIN
VALUE "CompanyName", "Digital Suburban\0" VALUE "CompanyName", "Digital Suburban\0"
VALUE "FileDescription", "Dexed\0" VALUE "FileDescription", "Dexed\0"
VALUE "FileVersion", "1.0.0\0" VALUE "FileVersion", "0.8.1\0"
VALUE "ProductName", "Dexed\0" VALUE "ProductName", "Dexed\0"
VALUE "ProductVersion", "1.0.0\0" VALUE "ProductVersion", "0.8.1\0"
END END
END END

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<JUCERPROJECT id="ryFHHI" name="Dexed" projectType="audioplug" version="1.0.0" <JUCERPROJECT id="ryFHHI" name="Dexed" projectType="audioplug" version="0.8.1"
bundleIdentifier="com.digitalsuburban.Dexed" includeBinaryInAppConfig="1" bundleIdentifier="com.digitalsuburban.Dexed" includeBinaryInAppConfig="1"
buildVST="1" buildAU="0" pluginName="Dexed" pluginDesc="Dexed" buildVST="1" buildAU="1" pluginName="Dexed" pluginDesc="Dexed FM Synth"
pluginManufacturer="Digital Suburban" pluginManufacturerCode="Manu" pluginManufacturer="Digital Suburban" pluginManufacturerCode="DGSB"
pluginCode="Plug" pluginChannelConfigs="{1, 1}, {2, 2}" pluginIsSynth="1" pluginCode="Dexd" pluginChannelConfigs="{0, 2}" pluginIsSynth="1"
pluginWantsMidiIn="1" pluginProducesMidiOut="1" pluginSilenceInIsSilenceOut="0" pluginWantsMidiIn="1" pluginProducesMidiOut="0" pluginSilenceInIsSilenceOut="0"
pluginEditorRequiresKeys="0" pluginAUExportPrefix="DexedAU" pluginRTASCategory="" pluginEditorRequiresKeys="0" pluginAUExportPrefix="DexedAU" pluginRTASCategory=""
aaxIdentifier="com.yourcompany.Dexed" pluginAAXCategory="AAX_ePlugInCategory_Dynamics" aaxIdentifier="com.yourcompany.Dexed" pluginAAXCategory="AAX_ePlugInCategory_Dynamics"
jucerVersion="3.1.0" companyName="Digital Suburban" buildVST3="0" jucerVersion="3.1.0" companyName="Digital Suburban" buildVST3="0"

@ -183,7 +183,7 @@
#define JucePlugin_Build_VST3 0 #define JucePlugin_Build_VST3 0
#endif #endif
#ifndef JucePlugin_Build_AU #ifndef JucePlugin_Build_AU
#define JucePlugin_Build_AU 0 #define JucePlugin_Build_AU 1
#endif #endif
#ifndef JucePlugin_Build_RTAS #ifndef JucePlugin_Build_RTAS
#define JucePlugin_Build_RTAS 0 #define JucePlugin_Build_RTAS 0
@ -195,7 +195,7 @@
#define JucePlugin_Name "Dexed" #define JucePlugin_Name "Dexed"
#endif #endif
#ifndef JucePlugin_Desc #ifndef JucePlugin_Desc
#define JucePlugin_Desc "Dexed" #define JucePlugin_Desc "Dexed FM Synth"
#endif #endif
#ifndef JucePlugin_Manufacturer #ifndef JucePlugin_Manufacturer
#define JucePlugin_Manufacturer "Digital Suburban" #define JucePlugin_Manufacturer "Digital Suburban"
@ -207,19 +207,19 @@
#define JucePlugin_ManufacturerEmail "" #define JucePlugin_ManufacturerEmail ""
#endif #endif
#ifndef JucePlugin_ManufacturerCode #ifndef JucePlugin_ManufacturerCode
#define JucePlugin_ManufacturerCode 'Manu' #define JucePlugin_ManufacturerCode 'DGSB'
#endif #endif
#ifndef JucePlugin_PluginCode #ifndef JucePlugin_PluginCode
#define JucePlugin_PluginCode 'Plug' #define JucePlugin_PluginCode 'Dexd'
#endif #endif
#ifndef JucePlugin_MaxNumInputChannels #ifndef JucePlugin_MaxNumInputChannels
#define JucePlugin_MaxNumInputChannels 2 #define JucePlugin_MaxNumInputChannels 0
#endif #endif
#ifndef JucePlugin_MaxNumOutputChannels #ifndef JucePlugin_MaxNumOutputChannels
#define JucePlugin_MaxNumOutputChannels 2 #define JucePlugin_MaxNumOutputChannels 2
#endif #endif
#ifndef JucePlugin_PreferredChannelConfigurations #ifndef JucePlugin_PreferredChannelConfigurations
#define JucePlugin_PreferredChannelConfigurations {1, 1}, {2, 2} #define JucePlugin_PreferredChannelConfigurations {0, 2}
#endif #endif
#ifndef JucePlugin_IsSynth #ifndef JucePlugin_IsSynth
#define JucePlugin_IsSynth 1 #define JucePlugin_IsSynth 1
@ -228,7 +228,7 @@
#define JucePlugin_WantsMidiInput 1 #define JucePlugin_WantsMidiInput 1
#endif #endif
#ifndef JucePlugin_ProducesMidiOutput #ifndef JucePlugin_ProducesMidiOutput
#define JucePlugin_ProducesMidiOutput 1 #define JucePlugin_ProducesMidiOutput 0
#endif #endif
#ifndef JucePlugin_SilenceInProducesSilenceOut #ifndef JucePlugin_SilenceInProducesSilenceOut
#define JucePlugin_SilenceInProducesSilenceOut 0 #define JucePlugin_SilenceInProducesSilenceOut 0
@ -237,13 +237,13 @@
#define JucePlugin_EditorRequiresKeyboardFocus 0 #define JucePlugin_EditorRequiresKeyboardFocus 0
#endif #endif
#ifndef JucePlugin_Version #ifndef JucePlugin_Version
#define JucePlugin_Version 1.0.0 #define JucePlugin_Version 0.8.1
#endif #endif
#ifndef JucePlugin_VersionCode #ifndef JucePlugin_VersionCode
#define JucePlugin_VersionCode 0x10000 #define JucePlugin_VersionCode 0x801
#endif #endif
#ifndef JucePlugin_VersionString #ifndef JucePlugin_VersionString
#define JucePlugin_VersionString "1.0.0" #define JucePlugin_VersionString "0.8.1"
#endif #endif
#ifndef JucePlugin_VSTUniqueID #ifndef JucePlugin_VSTUniqueID
#define JucePlugin_VSTUniqueID JucePlugin_PluginCode #define JucePlugin_VSTUniqueID JucePlugin_PluginCode

@ -38,8 +38,8 @@
namespace ProjectInfo namespace ProjectInfo
{ {
const char* const projectName = "Dexed"; const char* const projectName = "Dexed";
const char* const versionString = "1.0.0"; const char* const versionString = "0.8.1";
const int versionNumber = 0x10000; const int versionNumber = 0x801;
} }
#endif #endif

@ -57,7 +57,9 @@
#endif #endif
#if (JUCE_MAC || JUCE_IOS) && JUCE_USE_VDSP_FRAMEWORK #if (JUCE_MAC || JUCE_IOS) && JUCE_USE_VDSP_FRAMEWORK
#define Point CarbonDummyPointName // (workaround to avoid definition of "Point" by old Carbon headers)
#include <Accelerate/Accelerate.h> #include <Accelerate/Accelerate.h>
#undef Point
#else #else
#undef JUCE_USE_VDSP_FRAMEWORK #undef JUCE_USE_VDSP_FRAMEWORK
#endif #endif

@ -661,7 +661,7 @@ String MidiMessage::getTextFromTextMetaEvent() const
MidiMessage MidiMessage::textMetaEvent (int type, StringRef text) MidiMessage MidiMessage::textMetaEvent (int type, StringRef text)
{ {
jassert (type > 0 && type < 16) jassert (type > 0 && type < 16);
MidiMessage result; MidiMessage result;

@ -50,6 +50,11 @@ void SynthesiserVoice::setCurrentPlaybackSampleRate (const double newRate)
currentSampleRate = newRate; currentSampleRate = newRate;
} }
bool SynthesiserVoice::isVoiceActive() const
{
return getCurrentlyPlayingNote() >= 0;
}
void SynthesiserVoice::clearCurrentNote() void SynthesiserVoice::clearCurrentNote()
{ {
currentlyPlayingNote = -1; currentlyPlayingNote = -1;
@ -426,7 +431,7 @@ SynthesiserVoice* Synthesiser::findFreeVoice (SynthesiserSound* soundToPlay,
{ {
SynthesiserVoice* const voice = voices.getUnchecked (i); SynthesiserVoice* const voice = voices.getUnchecked (i);
if (voice->getCurrentlyPlayingNote() < 0 && voice->canPlaySound (soundToPlay)) if ((! voice->isVoiceActive()) && voice->canPlaySound (soundToPlay))
return voice; return voice;
} }

@ -140,6 +140,12 @@ public:
*/ */
virtual void stopNote (float velocity, bool allowTailOff) = 0; virtual void stopNote (float velocity, bool allowTailOff) = 0;
/** Returns true if this voice is currently busy playing a sound.
By default this just checks the getCurrentlyPlayingNote() value, but can
be overridden for more advanced checking.
*/
virtual bool isVoiceActive() const;
/** Called to let the voice know that the pitch wheel has been moved. /** Called to let the voice know that the pitch wheel has been moved.
This will be called during the rendering callback, so must be fast and thread-safe. This will be called during the rendering callback, so must be fast and thread-safe.
*/ */

@ -1255,7 +1255,7 @@ private:
DSoundDeviceList deviceList; DSoundDeviceList deviceList;
bool hasScanned; bool hasScanned;
void systemDeviceChanged() void systemDeviceChanged() override
{ {
DSoundDeviceList newList; DSoundDeviceList newList;
newList.scan(); newList.scan();

@ -1418,7 +1418,7 @@ private:
} }
//============================================================================== //==============================================================================
void systemDeviceChanged() void systemDeviceChanged() override
{ {
StringArray newOutNames, newInNames, newOutIds, newInIds; StringArray newOutNames, newInNames, newOutIds, newInIds;
scan (newOutNames, newInNames, newOutIds, newInIds); scan (newOutNames, newInNames, newOutIds, newInIds);

@ -624,8 +624,12 @@ struct AAXClasses
AAX_Result GetParameterDefaultNormalizedValue (AAX_CParamID paramID, double* result) const override AAX_Result GetParameterDefaultNormalizedValue (AAX_CParamID paramID, double* result) const override
{ {
if (! isBypassParam (paramID)) if (! isBypassParam (paramID))
{
*result = (double) pluginInstance->getParameterDefaultValue (getParamIndexFromID (paramID)); *result = (double) pluginInstance->getParameterDefaultValue (getParamIndexFromID (paramID));
jassert (*result >= 0 && *result <= 1.0f);
}
return AAX_SUCCESS; return AAX_SUCCESS;
} }

@ -482,6 +482,8 @@ public:
outParameterInfo.minValue = 0.0f; outParameterInfo.minValue = 0.0f;
outParameterInfo.maxValue = 1.0f; outParameterInfo.maxValue = 1.0f;
outParameterInfo.defaultValue = juceFilter->getParameterDefaultValue (index); outParameterInfo.defaultValue = juceFilter->getParameterDefaultValue (index);
jassert (outParameterInfo.defaultValue >= outParameterInfo.minValue
&& outParameterInfo.defaultValue <= outParameterInfo.maxValue);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic; outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
return noErr; return noErr;
@ -561,7 +563,6 @@ public:
info.editOriginTime = 0; info.editOriginTime = 0;
info.ppqPositionOfLastBarStart = 0; info.ppqPositionOfLastBarStart = 0;
info.isRecording = false; info.isRecording = false;
info.isLooping = false;
info.ppqLoopStart = 0; info.ppqLoopStart = 0;
info.ppqLoopEnd = 0; info.ppqLoopEnd = 0;
@ -598,7 +599,7 @@ public:
} }
double outCurrentSampleInTimeLine, outCycleStartBeat, outCycleEndBeat; double outCurrentSampleInTimeLine, outCycleStartBeat, outCycleEndBeat;
Boolean playing = false, playchanged, looping; Boolean playing = false, looping = false, playchanged;
if (CallHostTransportState (&playing, if (CallHostTransportState (&playing,
&playchanged, &playchanged,
@ -614,6 +615,7 @@ public:
info.isPlaying = playing; info.isPlaying = playing;
info.timeInSamples = (int64) (outCurrentSampleInTimeLine + 0.5); info.timeInSamples = (int64) (outCurrentSampleInTimeLine + 0.5);
info.timeInSeconds = info.timeInSamples / getSampleRate(); info.timeInSeconds = info.timeInSamples / getSampleRate();
info.isLooping = looping;
return true; return true;
} }
@ -1330,7 +1332,7 @@ public:
} }
else else
{ {
jassertfalse // can't get a pointer to our effect jassertfalse; // can't get a pointer to our effect
} }
} }

@ -174,6 +174,7 @@ public:
const int numSteps = p.getParameterNumSteps (index); const int numSteps = p.getParameterNumSteps (index);
info.stepCount = (Steinberg::int32) (numSteps > 0 && numSteps < 0x7fffffff ? numSteps - 1 : 0); info.stepCount = (Steinberg::int32) (numSteps > 0 && numSteps < 0x7fffffff ? numSteps - 1 : 0);
info.defaultNormalizedValue = p.getParameterDefaultValue (index); info.defaultNormalizedValue = p.getParameterDefaultValue (index);
jassert (info.defaultNormalizedValue >= 0 && info.defaultNormalizedValue <= 1.0f);
info.unitId = Vst::kRootUnitId; info.unitId = Vst::kRootUnitId;
info.flags = p.isParameterAutomatable (index) ? Vst::ParameterInfo::kCanAutomate : 0; info.flags = p.isParameterAutomatable (index) ? Vst::ParameterInfo::kCanAutomate : 0;
} }
@ -352,6 +353,9 @@ private:
if (parent == nullptr || isPlatformTypeSupported (type) == kResultFalse) if (parent == nullptr || isPlatformTypeSupported (type) == kResultFalse)
return kResultFalse; return kResultFalse;
if (component == nullptr)
component = new ContentWrapperComponent (*this, pluginInstance);
#if JUCE_WINDOWS #if JUCE_WINDOWS
component->addToDesktop (0, parent); component->addToDesktop (0, parent);
component->setOpaque (true); component->setOpaque (true);

@ -345,11 +345,21 @@ public:
refreshParameterList(); refreshParameterList();
updateNumChannels(); updateNumChannels();
producesMidiMessages = canProduceMidiOutput(); producesMidiMessages = canProduceMidiOutput();
setPluginCallbacks();
setPlayConfigDetails (numInputBusChannels * numInputBusses, setPlayConfigDetails (numInputBusChannels * numInputBusses,
numOutputBusChannels * numOutputBusses, numOutputBusChannels * numOutputBusses,
rate, blockSize); rate, blockSize);
setLatencySamples (0); setLatencySamples (0);
if (parameters.size() == 0)
{
// some plugins crash if initialiseAudioUnit() is called too soon (sigh..), so we'll
// only call it here if it seems like they it's one of the awkward plugins that can
// only create their parameters after it has been initialised.
initialiseAudioUnit();
refreshParameterList();
}
setPluginCallbacks();
} }
//============================================================================== //==============================================================================

@ -76,6 +76,7 @@ class AudioProcessor;
#include "processors/juce_AudioPlayHead.h" #include "processors/juce_AudioPlayHead.h"
#include "processors/juce_AudioProcessorEditor.h" #include "processors/juce_AudioProcessorEditor.h"
#include "processors/juce_AudioProcessorListener.h" #include "processors/juce_AudioProcessorListener.h"
#include "processors/juce_AudioProcessorParameter.h"
#include "processors/juce_AudioProcessor.h" #include "processors/juce_AudioProcessor.h"
#include "processors/juce_PluginDescription.h" #include "processors/juce_PluginDescription.h"
#include "processors/juce_AudioPluginInstance.h" #include "processors/juce_AudioPluginInstance.h"

@ -118,20 +118,6 @@ void AudioProcessor::setParameterNotifyingHost (const int parameterIndex,
sendParamChangeMessageToListeners (parameterIndex, newValue); sendParamChangeMessageToListeners (parameterIndex, newValue);
} }
String AudioProcessor::getParameterName (int parameterIndex, int maximumStringLength)
{
return getParameterName (parameterIndex).substring (0, maximumStringLength);
}
String AudioProcessor::getParameterText (int parameterIndex, int maximumStringLength)
{
return getParameterText (parameterIndex).substring (0, maximumStringLength);
}
int AudioProcessor::getDefaultNumParameterSteps() noexcept { return 0x7fffffff; }
int AudioProcessor::getParameterNumSteps (int /*parameterIndex*/) { return getDefaultNumParameterSteps(); }
float AudioProcessor::getParameterDefaultValue (int /*parameterIndex*/) { return 0.0f; }
AudioProcessorListener* AudioProcessor::getListenerLocked (const int index) const noexcept AudioProcessorListener* AudioProcessor::getListenerLocked (const int index) const noexcept
{ {
const ScopedLock sl (listenerLock); const ScopedLock sl (listenerLock);
@ -202,10 +188,129 @@ void AudioProcessor::updateHostDisplay()
l->audioProcessorChanged (this); l->audioProcessorChanged (this);
} }
String AudioProcessor::getParameterLabel (int) const { return String(); } const OwnedArray<AudioProcessorParameter>& AudioProcessor::getParameters() const noexcept
bool AudioProcessor::isParameterOrientationInverted (int) const { return false; } {
bool AudioProcessor::isParameterAutomatable (int) const { return true; } return managedParameters;
bool AudioProcessor::isMetaParameter (int) const { return false; } }
int AudioProcessor::getNumParameters()
{
return managedParameters.size();
}
float AudioProcessor::getParameter (int index)
{
if (AudioProcessorParameter* p = getParamChecked (index))
return p->getValue();
return 0;
}
void AudioProcessor::setParameter (int index, float newValue)
{
if (AudioProcessorParameter* p = getParamChecked (index))
p->setValue (newValue);
}
float AudioProcessor::getParameterDefaultValue (int index)
{
if (AudioProcessorParameter* p = managedParameters[index])
return p->getDefaultValue();
return 0;
}
const String AudioProcessor::getParameterName (int index)
{
if (AudioProcessorParameter* p = getParamChecked (index))
return p->getName (512);
return String();
}
String AudioProcessor::getParameterName (int index, int maximumStringLength)
{
if (AudioProcessorParameter* p = managedParameters[index])
return p->getName (maximumStringLength);
return getParameterName (index).substring (0, maximumStringLength);
}
const String AudioProcessor::getParameterText (int index)
{
return getParameterText (index, 1024);
}
String AudioProcessor::getParameterText (int index, int maximumStringLength)
{
if (AudioProcessorParameter* p = managedParameters[index])
return p->getText (p->getValue(), maximumStringLength);
return getParameterText (index).substring (0, maximumStringLength);
}
int AudioProcessor::getParameterNumSteps (int index)
{
if (AudioProcessorParameter* p = managedParameters[index])
return p->getNumSteps();
return AudioProcessor::getDefaultNumParameterSteps();
}
int AudioProcessor::getDefaultNumParameterSteps() noexcept
{
return 0x7fffffff;
}
String AudioProcessor::getParameterLabel (int index) const
{
if (AudioProcessorParameter* p = managedParameters[index])
return p->getLabel();
return String();
}
bool AudioProcessor::isParameterAutomatable (int index) const
{
if (AudioProcessorParameter* p = managedParameters[index])
return p->isAutomatable();
return true;
}
bool AudioProcessor::isParameterOrientationInverted (int index) const
{
if (AudioProcessorParameter* p = managedParameters[index])
return p->isOrientationInverted();
return false;
}
bool AudioProcessor::isMetaParameter (int index) const
{
if (AudioProcessorParameter* p = managedParameters[index])
return p->isMetaParameter();
return false;
}
AudioProcessorParameter* AudioProcessor::getParamChecked (int index) const noexcept
{
AudioProcessorParameter* p = managedParameters[index];
// If you hit this, then you're either trying to access parameters that are out-of-range,
// or you're not using addParameter and the managed parameter list, but have failed
// to override some essential virtual methods and implement them appropriately.
jassert (p != nullptr);
return p;
}
void AudioProcessor::addParameter (AudioProcessorParameter* p)
{
p->processor = this;
p->parameterIndex = managedParameters.size();
managedParameters.add (p);
}
void AudioProcessor::suspendProcessing (const bool shouldBeSuspended) void AudioProcessor::suspendProcessing (const bool shouldBeSuspended)
{ {
@ -296,6 +401,47 @@ XmlElement* AudioProcessor::getXmlFromBinary (const void* data, const int sizeIn
void AudioProcessorListener::audioProcessorParameterChangeGestureBegin (AudioProcessor*, int) {} void AudioProcessorListener::audioProcessorParameterChangeGestureBegin (AudioProcessor*, int) {}
void AudioProcessorListener::audioProcessorParameterChangeGestureEnd (AudioProcessor*, int) {} void AudioProcessorListener::audioProcessorParameterChangeGestureEnd (AudioProcessor*, int) {}
//==============================================================================
AudioProcessorParameter::AudioProcessorParameter() noexcept
: processor (nullptr), parameterIndex (-1)
{}
AudioProcessorParameter::~AudioProcessorParameter() {}
void AudioProcessorParameter::setValueNotifyingHost (float newValue)
{
// This method can't be used until the parameter has been attached to a processor!
jassert (processor != nullptr && parameterIndex >= 0);
return processor->setParameterNotifyingHost (parameterIndex, newValue);
}
void AudioProcessorParameter::beginChangeGesture()
{
// This method can't be used until the parameter has been attached to a processor!
jassert (processor != nullptr && parameterIndex >= 0);
processor->beginParameterChangeGesture (parameterIndex);
}
void AudioProcessorParameter::endChangeGesture()
{
// This method can't be used until the parameter has been attached to a processor!
jassert (processor != nullptr && parameterIndex >= 0);
processor->endParameterChangeGesture (parameterIndex);
}
bool AudioProcessorParameter::isOrientationInverted() const { return false; }
bool AudioProcessorParameter::isAutomatable() const { return true; }
bool AudioProcessorParameter::isMetaParameter() const { return false; }
int AudioProcessorParameter::getNumSteps() const { return AudioProcessor::getDefaultNumParameterSteps(); }
String AudioProcessorParameter::getText (float value, int /*maximumStringLength*/) const
{
return String (value, 2);
}
//============================================================================== //==============================================================================
bool AudioPlayHead::CurrentPositionInfo::operator== (const CurrentPositionInfo& other) const noexcept bool AudioPlayHead::CurrentPositionInfo::operator== (const CurrentPositionInfo& other) const noexcept
{ {

@ -377,10 +377,10 @@ public:
/** This must return the correct value immediately after the object has been /** This must return the correct value immediately after the object has been
created, and mustn't change the number of parameters later. created, and mustn't change the number of parameters later.
*/ */
virtual int getNumParameters() = 0; virtual int getNumParameters();
/** Returns the name of a particular parameter. */ /** Returns the name of a particular parameter. */
virtual const String getParameterName (int parameterIndex) = 0; virtual const String getParameterName (int parameterIndex);
/** Called by the host to find out the value of one of the filter's parameters. /** Called by the host to find out the value of one of the filter's parameters.
@ -390,10 +390,10 @@ public:
It's also likely to be called by non-UI threads, so the code in here should It's also likely to be called by non-UI threads, so the code in here should
be thread-aware. be thread-aware.
*/ */
virtual float getParameter (int parameterIndex) = 0; virtual float getParameter (int parameterIndex);
/** Returns the value of a parameter as a text string. */ /** Returns the value of a parameter as a text string. */
virtual const String getParameterText (int parameterIndex) = 0; virtual const String getParameterText (int parameterIndex);
/** Returns the name of a parameter as a text string with a preferred maximum length. /** Returns the name of a parameter as a text string with a preferred maximum length.
If you want to provide customised short versions of your parameter names that If you want to provide customised short versions of your parameter names that
@ -455,7 +455,7 @@ public:
The value passed will be between 0 and 1.0. The value passed will be between 0 and 1.0.
*/ */
virtual void setParameter (int parameterIndex, float newValue) = 0; virtual void setParameter (int parameterIndex, float newValue);
/** Your filter can call this when it needs to change one of its parameters. /** Your filter can call this when it needs to change one of its parameters.
@ -507,6 +507,16 @@ public:
*/ */
void updateHostDisplay(); void updateHostDisplay();
//==============================================================================
/** Adds a parameter to the list.
The parameter object will be managed and deleted automatically by the list
when no longer needed.
*/
void addParameter (AudioProcessorParameter*);
/** Returns the current list of parameters. */
const OwnedArray<AudioProcessorParameter>& getParameters() const noexcept;
//============================================================================== //==============================================================================
/** Returns the number of preset programs the filter supports. /** Returns the number of preset programs the filter supports.
@ -663,6 +673,9 @@ private:
CriticalSection callbackLock, listenerLock; CriticalSection callbackLock, listenerLock;
String inputSpeakerArrangement, outputSpeakerArrangement; String inputSpeakerArrangement, outputSpeakerArrangement;
OwnedArray<AudioProcessorParameter> managedParameters;
AudioProcessorParameter* getParamChecked (int) const noexcept;
#if JUCE_DEBUG #if JUCE_DEBUG
BigInteger changingParams; BigInteger changingParams;
#endif #endif

@ -38,7 +38,7 @@
The template parameter specifies the class of the object you want to point to - the easiest The template parameter specifies the class of the object you want to point to - the easiest
way to make a class reference-countable is to simply make it inherit from ReferenceCountedObject way to make a class reference-countable is to simply make it inherit from ReferenceCountedObject
or SingleThreadedReferenceCountedObject, but if you need to, you can roll your own reference-countable or SingleThreadedReferenceCountedObject, but if you need to, you can roll your own reference-countable
class by implementing a set of mathods called incReferenceCount(), decReferenceCount(), and class by implementing a set of methods called incReferenceCount(), decReferenceCount(), and
decReferenceCountWithoutDeleting(). See ReferenceCountedObject for examples of how these methods decReferenceCountWithoutDeleting(). See ReferenceCountedObject for examples of how these methods
should behave. should behave.

@ -1659,7 +1659,7 @@ JavascriptEngine::JavascriptEngine() : maximumExecutionTime (15.0), root (new R
JavascriptEngine::~JavascriptEngine() {} JavascriptEngine::~JavascriptEngine() {}
void JavascriptEngine::prepareTimeout() const { root->timeout = Time::getCurrentTime() + maximumExecutionTime; } void JavascriptEngine::prepareTimeout() const noexcept { root->timeout = Time::getCurrentTime() + maximumExecutionTime; }
void JavascriptEngine::registerNativeObject (Identifier name, DynamicObject* object) void JavascriptEngine::registerNativeObject (Identifier name, DynamicObject* object)
{ {
@ -1715,6 +1715,11 @@ var JavascriptEngine::callFunction (Identifier function, const var::NativeFuncti
return returnVal; return returnVal;
} }
const NamedValueSet& JavascriptEngine::getRootObjectProperties() const noexcept
{
return root->getProperties();
}
#if JUCE_MSVC #if JUCE_MSVC
#pragma warning (pop) #pragma warning (pop)
#endif #endif

@ -96,10 +96,13 @@ public:
*/ */
RelativeTime maximumExecutionTime; RelativeTime maximumExecutionTime;
/** Provides access to the set of properties of the root namespace object. */
const NamedValueSet& getRootObjectProperties() const noexcept;
private: private:
JUCE_PUBLIC_IN_DLL_BUILD (struct RootObject) JUCE_PUBLIC_IN_DLL_BUILD (struct RootObject)
ReferenceCountedObjectPtr<RootObject> root; const ReferenceCountedObjectPtr<RootObject> root;
void prepareTimeout() const; void prepareTimeout() const noexcept;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JavascriptEngine) JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JavascriptEngine)
}; };

@ -194,6 +194,7 @@ extern JUCE_API void JUCE_CALLTYPE logAssertion (const char* file, int line) noe
#include "threads/juce_ScopedLock.h" #include "threads/juce_ScopedLock.h"
#include "threads/juce_CriticalSection.h" #include "threads/juce_CriticalSection.h"
#include "maths/juce_Range.h" #include "maths/juce_Range.h"
#include "maths/juce_NormalisableRange.h"
#include "containers/juce_ElementComparator.h" #include "containers/juce_ElementComparator.h"
#include "containers/juce_ArrayAllocationBase.h" #include "containers/juce_ArrayAllocationBase.h"
#include "containers/juce_Array.h" #include "containers/juce_Array.h"
@ -244,6 +245,7 @@ extern JUCE_API void JUCE_CALLTYPE logAssertion (const char* file, int line) noe
#include "misc/juce_Uuid.h" #include "misc/juce_Uuid.h"
#include "misc/juce_WindowsRegistry.h" #include "misc/juce_WindowsRegistry.h"
#include "system/juce_PlatformDefs.h" #include "system/juce_PlatformDefs.h"
#include "system/juce_CompilerSupport.h"
#include "system/juce_SystemStats.h" #include "system/juce_SystemStats.h"
#include "threads/juce_ChildProcess.h" #include "threads/juce_ChildProcess.h"
#include "threads/juce_DynamicLibrary.h" #include "threads/juce_DynamicLibrary.h"

@ -208,7 +208,7 @@ private:
The template parameter specifies the class of the object you want to point to - the easiest The template parameter specifies the class of the object you want to point to - the easiest
way to make a class reference-countable is to simply make it inherit from ReferenceCountedObject way to make a class reference-countable is to simply make it inherit from ReferenceCountedObject
or SingleThreadedReferenceCountedObject, but if you need to, you can roll your own reference-countable or SingleThreadedReferenceCountedObject, but if you need to, you can roll your own reference-countable
class by implementing a set of mathods called incReferenceCount(), decReferenceCount(), and class by implementing a set of methods called incReferenceCount(), decReferenceCount(), and
decReferenceCountWithoutDeleting(). See ReferenceCountedObject for examples of how these methods decReferenceCountWithoutDeleting(). See ReferenceCountedObject for examples of how these methods
should behave. should behave.

@ -44,14 +44,15 @@ public:
: statusCode (0), connection (0), request (0), : statusCode (0), connection (0), request (0),
address (address_), headers (headers_), postData (postData_), position (0), address (address_), headers (headers_), postData (postData_), position (0),
finished (false), isPost (isPost_), timeOutMs (timeOutMs_) finished (false), isPost (isPost_), timeOutMs (timeOutMs_)
{
for (int maxRedirects = 10; --maxRedirects >= 0;)
{ {
createConnection (progressCallback, progressCallbackContext); createConnection (progressCallback, progressCallbackContext);
if (! isError()) if (! isError())
{
if (responseHeaders != nullptr)
{ {
DWORD bufferSizeBytes = 4096; DWORD bufferSizeBytes = 4096;
StringPairArray headers (false);
for (;;) for (;;)
{ {
@ -67,9 +68,8 @@ public:
const String& header = headersArray[i]; const String& header = headersArray[i];
const String key (header.upToFirstOccurrenceOf (": ", false, false)); const String key (header.upToFirstOccurrenceOf (": ", false, false));
const String value (header.fromFirstOccurrenceOf (": ", false, false)); const String value (header.fromFirstOccurrenceOf (": ", false, false));
const String previousValue ((*responseHeaders) [key]); const String previousValue (headers[key]);
headers.set (key, previousValue.isEmpty() ? value : (previousValue + "," + value));
responseHeaders->set (key, previousValue.isEmpty() ? value : (previousValue + "," + value));
} }
break; break;
@ -77,14 +77,34 @@ public:
if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
break; break;
}
bufferSizeBytes += 4096;
} }
DWORD status = 0; DWORD status = 0;
DWORD statusSize = sizeof (status); DWORD statusSize = sizeof (status);
if (HttpQueryInfo (request, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &status, &statusSize, 0)) if (HttpQueryInfo (request, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &status, &statusSize, 0))
{
statusCode = (int) status; statusCode = (int) status;
if (status == 301 || status == 302 || status == 303 || status == 307)
{
const String newLocation (headers["Location"]);
if (newLocation.isNotEmpty() && newLocation != address)
{
address = newLocation;
continue;
}
}
}
if (responseHeaders != nullptr)
responseHeaders->addArray (headers);
}
break;
} }
} }

@ -263,6 +263,12 @@ namespace SocketHelpers
return true; return true;
} }
static void makeReusable (int handle) noexcept
{
const int reuse = 1;
setsockopt (handle, SOL_SOCKET, SO_REUSEADDR, (const char*) &reuse, sizeof (reuse));
}
} }
//============================================================================== //==============================================================================
@ -419,8 +425,7 @@ bool StreamingSocket::createListener (const int newPortNumber, const String& loc
return false; return false;
#if ! JUCE_WINDOWS // on windows, adding this option produces behaviour different to posix #if ! JUCE_WINDOWS // on windows, adding this option produces behaviour different to posix
const int reuse = 1; SocketHelpers::makeReusable (handle);
setsockopt (handle, SOL_SOCKET, SO_REUSEADDR, (const char*) &reuse, sizeof (reuse));
#endif #endif
if (bind (handle, (struct sockaddr*) &servTmpAddr, sizeof (struct sockaddr_in)) < 0 if (bind (handle, (struct sockaddr*) &servTmpAddr, sizeof (struct sockaddr_in)) < 0
@ -472,6 +477,7 @@ DatagramSocket::DatagramSocket (const int localPortNumber, const bool canBroadca
SocketHelpers::initSockets(); SocketHelpers::initSockets();
handle = (int) socket (AF_INET, SOCK_DGRAM, 0); handle = (int) socket (AF_INET, SOCK_DGRAM, 0);
SocketHelpers::makeReusable (handle);
bindToPort (localPortNumber); bindToPort (localPortNumber);
} }

@ -94,20 +94,34 @@
#define JUCE_ANALYZER_NORETURN #define JUCE_ANALYZER_NORETURN
#endif #endif
//==============================================================================
#if JUCE_MSVC && ! DOXYGEN
#define MACRO_WITH_FORCED_SEMICOLON(x) \
__pragma(warning(push)) \
__pragma(warning(disable:4127)) \
do { x } while (false) \
__pragma(warning(pop))
#else
/** This is the good old C++ trick for creating a macro that forces the user to put
a semicolon after it when they use it.
*/
#define MACRO_WITH_FORCED_SEMICOLON(x) do { x } while (false)
#endif
//============================================================================== //==============================================================================
#if JUCE_DEBUG || DOXYGEN #if JUCE_DEBUG || DOXYGEN
/** Writes a string to the standard error stream. /** Writes a string to the standard error stream.
This is only compiled in a debug build. This is only compiled in a debug build.
@see Logger::outputDebugString @see Logger::outputDebugString
*/ */
#define DBG(dbgtext) { juce::String tempDbgBuf; tempDbgBuf << dbgtext; juce::Logger::outputDebugString (tempDbgBuf); } #define DBG(dbgtext) MACRO_WITH_FORCED_SEMICOLON (juce::String tempDbgBuf; tempDbgBuf << dbgtext; juce::Logger::outputDebugString (tempDbgBuf);)
//============================================================================== //==============================================================================
/** This will always cause an assertion failure. /** This will always cause an assertion failure.
It is only compiled in a debug build, (unless JUCE_LOG_ASSERTIONS is enabled for your build). It is only compiled in a debug build, (unless JUCE_LOG_ASSERTIONS is enabled for your build).
@see jassert @see jassert
*/ */
#define jassertfalse { juce_LogCurrentAssertion; if (juce::juce_isRunningUnderDebugger()) juce_breakDebugger; JUCE_ANALYZER_NORETURN } #define jassertfalse MACRO_WITH_FORCED_SEMICOLON (juce_LogCurrentAssertion; if (juce::juce_isRunningUnderDebugger()) juce_breakDebugger; JUCE_ANALYZER_NORETURN)
//============================================================================== //==============================================================================
/** Platform-independent assertion macro. /** Platform-independent assertion macro.
@ -117,19 +131,19 @@
correct behaviour of your program! correct behaviour of your program!
@see jassertfalse @see jassertfalse
*/ */
#define jassert(expression) { if (! (expression)) jassertfalse; } #define jassert(expression) MACRO_WITH_FORCED_SEMICOLON (if (! (expression)) jassertfalse;)
#else #else
//============================================================================== //==============================================================================
// If debugging is disabled, these dummy debug and assertion macros are used.. // If debugging is disabled, these dummy debug and assertion macros are used..
#define DBG(dbgtext) #define DBG(dbgtext)
#define jassertfalse { juce_LogCurrentAssertion } #define jassertfalse MACRO_WITH_FORCED_SEMICOLON (juce_LogCurrentAssertion)
#if JUCE_LOG_ASSERTIONS #if JUCE_LOG_ASSERTIONS
#define jassert(expression) { if (! (expression)) jassertfalse; } #define jassert(expression) MACRO_WITH_FORCED_SEMICOLON (if (! (expression)) jassertfalse;)
#else #else
#define jassert(a) {} #define jassert(a) MACRO_WITH_FORCED_SEMICOLON ( ; )
#endif #endif
#endif #endif
@ -322,84 +336,4 @@ namespace juce
#define JUCE_PACKED #define JUCE_PACKED
#endif #endif
//==============================================================================
// Here, we'll check for C++11 compiler support, and if it's not available, define
// a few workarounds, so that we can still use some of the newer language features.
#if (__cplusplus >= 201103L || defined (__GXX_EXPERIMENTAL_CXX0X__)) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 405
#define JUCE_COMPILER_SUPPORTS_NOEXCEPT 1
#define JUCE_COMPILER_SUPPORTS_NULLPTR 1
#define JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS 1
#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && ! defined (JUCE_COMPILER_SUPPORTS_OVERRIDE_AND_FINAL)
#define JUCE_COMPILER_SUPPORTS_OVERRIDE_AND_FINAL 1
#endif
#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && ! defined (JUCE_DELETED_FUNCTION)
#define JUCE_DELETED_FUNCTION = delete
#endif
#endif
#if JUCE_CLANG && defined (__has_feature)
#if __has_feature (cxx_nullptr)
#define JUCE_COMPILER_SUPPORTS_NULLPTR 1
#endif
#if __has_feature (cxx_noexcept)
#define JUCE_COMPILER_SUPPORTS_NOEXCEPT 1
#endif
#if __has_feature (cxx_rvalue_references)
#define JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS 1
#endif
#if __has_feature (cxx_deleted_functions)
#define JUCE_DELETED_FUNCTION = delete
#endif
#ifndef JUCE_COMPILER_SUPPORTS_OVERRIDE_AND_FINAL
#define JUCE_COMPILER_SUPPORTS_OVERRIDE_AND_FINAL 1
#endif
#ifndef JUCE_COMPILER_SUPPORTS_ARC
#define JUCE_COMPILER_SUPPORTS_ARC 1
#endif
#endif
#if defined (_MSC_VER) && _MSC_VER >= 1600
#define JUCE_COMPILER_SUPPORTS_NULLPTR 1
#define JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS 1
#endif
#if defined (_MSC_VER) && _MSC_VER >= 1700
#define JUCE_COMPILER_SUPPORTS_OVERRIDE_AND_FINAL 1
#endif
#ifndef JUCE_DELETED_FUNCTION
#define JUCE_DELETED_FUNCTION
#endif
//==============================================================================
// Declare some fake versions of nullptr and noexcept, for older compilers:
#if ! (DOXYGEN || JUCE_COMPILER_SUPPORTS_NOEXCEPT)
#ifdef noexcept
#undef noexcept
#endif
#define noexcept throw()
#if defined (_MSC_VER) && _MSC_VER > 1600
#define _ALLOW_KEYWORD_MACROS 1 // (to stop VC2012 complaining)
#endif
#endif
#if ! (DOXYGEN || JUCE_COMPILER_SUPPORTS_NULLPTR)
#ifdef nullptr
#undef nullptr
#endif
#define nullptr (0)
#endif
#if ! (DOXYGEN || JUCE_COMPILER_SUPPORTS_OVERRIDE_AND_FINAL)
#undef override
#define override
#endif
#endif // JUCE_PLATFORMDEFS_H_INCLUDED #endif // JUCE_PLATFORMDEFS_H_INCLUDED

@ -51,6 +51,7 @@
//============================================================================== //==============================================================================
#include "juce_PlatformDefs.h" #include "juce_PlatformDefs.h"
#include "juce_CompilerSupport.h"
//============================================================================== //==============================================================================
// Now we'll include some common OS headers.. // Now we'll include some common OS headers..

@ -53,7 +53,7 @@ static void sanityCheckTagName (const String& tag)
(void) tag; (void) tag;
// the tag name mustn't be empty, or it'll look like a text element! // the tag name mustn't be empty, or it'll look like a text element!
jassert (tag.containsNonWhitespaceChars()) jassert (tag.containsNonWhitespaceChars());
// The tag can't contain spaces or other characters that would create invalid XML! // The tag can't contain spaces or other characters that would create invalid XML!
jassert (! tag.containsAnyOf (" <>/&(){}")); jassert (! tag.containsAnyOf (" <>/&(){}"));

@ -39,6 +39,7 @@ namespace juce
#include "messages/juce_NotificationType.h" #include "messages/juce_NotificationType.h"
#include "messages/juce_ApplicationBase.h" #include "messages/juce_ApplicationBase.h"
#include "messages/juce_Initialisation.h" #include "messages/juce_Initialisation.h"
#include "messages/juce_MountedVolumeListChangeDetector.h"
#include "broadcasters/juce_ListenerList.h" #include "broadcasters/juce_ListenerList.h"
#include "broadcasters/juce_ActionBroadcaster.h" #include "broadcasters/juce_ActionBroadcaster.h"
#include "broadcasters/juce_ActionListener.h" #include "broadcasters/juce_ActionListener.h"

@ -131,6 +131,7 @@ void MessageManager::stopDispatchLoop()
#endif #endif
//============================================================================== //==============================================================================
#if JUCE_COMPILER_SUPPORTS_LAMBDAS
struct AsyncFunction : private MessageManager::MessageBase struct AsyncFunction : private MessageManager::MessageBase
{ {
AsyncFunction (std::function<void(void)> f) : fn (f) { post(); } AsyncFunction (std::function<void(void)> f) : fn (f) { post(); }
@ -146,7 +147,9 @@ void MessageManager::callAsync (std::function<void(void)> f)
{ {
new AsyncFunction (f); new AsyncFunction (f);
} }
#endif
//==============================================================================
class AsyncFunctionCallback : public MessageManager::MessageBase class AsyncFunctionCallback : public MessageManager::MessageBase
{ {
public: public:

@ -91,10 +91,12 @@ public:
#endif #endif
//============================================================================== //==============================================================================
#if JUCE_COMPILER_SUPPORTS_LAMBDAS
/** Asynchronously invokes a function or C++11 lambda on the message thread. /** Asynchronously invokes a function or C++11 lambda on the message thread.
Internally this uses the CallbackMessage class to invoke the callback. Internally this uses the CallbackMessage class to invoke the callback.
*/ */
static void callAsync (std::function<void(void)>); static void callAsync (std::function<void(void)>);
#endif
/** Calls a function using the message-thread. /** Calls a function using the message-thread.

@ -365,3 +365,54 @@ void repostCurrentNSEvent()
(new EventReposter())->post(); (new EventReposter())->post();
} }
//==============================================================================
#if JUCE_MAC
struct MountedVolumeListChangeDetector::Pimpl
{
Pimpl (MountedVolumeListChangeDetector& d) : owner (d)
{
static ObserverClass cls;
delegate = [cls.createInstance() init];
ObserverClass::setOwner (delegate, this);
NSNotificationCenter* nc = [[NSWorkspace sharedWorkspace] notificationCenter];
[nc addObserver: delegate selector: @selector (changed:) name: NSWorkspaceDidMountNotification object: nil];
[nc addObserver: delegate selector: @selector (changed:) name: NSWorkspaceDidUnmountNotification object: nil];
}
~Pimpl()
{
[[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver: delegate];
[delegate release];
}
private:
MountedVolumeListChangeDetector& owner;
id delegate;
struct ObserverClass : public ObjCClass<NSObject>
{
ObserverClass() : ObjCClass<NSObject> ("JUCEDriveObserver_")
{
addIvar<Pimpl*> ("owner");
addMethod (@selector (changed:), changed, "v@:@");
addProtocol (@protocol (NSTextInput));
registerClass();
}
static Pimpl* getOwner (id self) { return getIvar<Pimpl*> (self, "owner"); }
static void setOwner (id self, Pimpl* owner) { object_setInstanceVariable (self, "owner", owner); }
static void changed (id self, SEL, NSNotification*)
{
getOwner (self)->owner.mountedVolumeListChanged();
}
};
};
MountedVolumeListChangeDetector::MountedVolumeListChangeDetector() { pimpl = new Pimpl (*this); }
MountedVolumeListChangeDetector::~MountedVolumeListChangeDetector() {}
#endif

@ -100,7 +100,6 @@ public:
virtual ~DeviceChangeDetector() {} virtual ~DeviceChangeDetector() {}
protected:
virtual void systemDeviceChanged() = 0; virtual void systemDeviceChanged() = 0;
void triggerAsyncDeviceChangeCallback() void triggerAsyncDeviceChangeCallback()

@ -188,3 +188,30 @@ void MessageManager::doPlatformSpecificShutdown()
OleUninitialize(); OleUninitialize();
} }
//==============================================================================
struct MountedVolumeListChangeDetector::Pimpl : private DeviceChangeDetector
{
Pimpl (MountedVolumeListChangeDetector& d) : DeviceChangeDetector (L"MountedVolumeList"), owner (d)
{
File::findFileSystemRoots (lastVolumeList);
}
void systemDeviceChanged() override
{
Array<File> newList;
File::findFileSystemRoots (newList);
if (lastVolumeList != newList)
{
lastVolumeList = newList;
owner.mountedVolumeListChanged();
}
}
MountedVolumeListChangeDetector& owner;
Array<File> lastVolumeList;
};
MountedVolumeListChangeDetector::MountedVolumeListChangeDetector() { pimpl = new Pimpl (*this); }
MountedVolumeListChangeDetector::~MountedVolumeListChangeDetector() {}

@ -384,7 +384,7 @@ void LowLevelGraphicsPostScriptRenderer::fillPath (const Path& path, const Affin
{ {
// this doesn't work correctly yet - it could be improved to handle solid gradients, but // this doesn't work correctly yet - it could be improved to handle solid gradients, but
// postscript can't do semi-transparent ones. // postscript can't do semi-transparent ones.
notPossibleInPostscriptAssert // you can disable this warning by setting the WARN_ABOUT_NON_POSTSCRIPT_OPERATIONS flag at the top of this file notPossibleInPostscriptAssert; // you can disable this warning by setting the WARN_ABOUT_NON_POSTSCRIPT_OPERATIONS flag at the top of this file
writeClip(); writeClip();
out << "gsave "; out << "gsave ";

@ -193,9 +193,9 @@ AffineTransform AffineTransform::sheared (const float shearX, const float shearY
return AffineTransform (mat00 + shearX * mat10, return AffineTransform (mat00 + shearX * mat10,
mat01 + shearX * mat11, mat01 + shearX * mat11,
mat02 + shearX * mat12, mat02 + shearX * mat12,
shearY * mat00 + mat10, mat10 + shearY * mat00,
shearY * mat01 + mat11, mat11 + shearY * mat01,
shearY * mat02 + mat12); mat12 + shearY * mat02);
} }
AffineTransform AffineTransform::verticalFlip (const float height) noexcept AffineTransform AffineTransform::verticalFlip (const float height) noexcept
@ -258,5 +258,5 @@ bool AffineTransform::isOnlyTranslation() const noexcept
float AffineTransform::getScaleFactor() const noexcept float AffineTransform::getScaleFactor() const noexcept
{ {
return (mat00 + mat11) / 2.0f; return (std::abs (mat00) + std::abs (mat11)) / 2.0f;
} }

@ -343,6 +343,9 @@ public:
*/ */
void setState (ButtonState newState); void setState (ButtonState newState);
/** Returns the button's current over/down/up state. */
ButtonState getState() const noexcept { return buttonState; }
// This method's parameters have changed - see the new version. // This method's parameters have changed - see the new version.
JUCE_DEPRECATED (void setToggleState (bool, bool)); JUCE_DEPRECATED (void setToggleState (bool, bool));

@ -25,9 +25,7 @@
class ComponentAnimator::AnimationTask class ComponentAnimator::AnimationTask
{ {
public: public:
AnimationTask (Component* const comp) noexcept : component (comp) AnimationTask (Component* c) noexcept : component (c) {}
{
}
void reset (const Rectangle<int>& finalBounds, void reset (const Rectangle<int>& finalBounds,
float finalAlpha, float finalAlpha,
@ -149,7 +147,10 @@ public:
else else
jassertfalse; // seem to be trying to animate a component that's not visible.. jassertfalse; // seem to be trying to animate a component that's not visible..
image = c.createComponentSnapshot (c.getLocalBounds(), false, getDesktopScaleFactor()); const float scale = (float) Desktop::getInstance().getDisplays()
.getDisplayContaining (getScreenBounds().getCentre()).scale;
image = c.createComponentSnapshot (c.getLocalBounds(), false, scale);
setVisible (true); setVisible (true);
toBehind (&c); toBehind (&c);
@ -189,14 +190,8 @@ private:
}; };
//============================================================================== //==============================================================================
ComponentAnimator::ComponentAnimator() ComponentAnimator::ComponentAnimator() : lastTime (0) {}
: lastTime (0) ComponentAnimator::~ComponentAnimator() {}
{
}
ComponentAnimator::~ComponentAnimator()
{
}
//============================================================================== //==============================================================================
ComponentAnimator::AnimationTask* ComponentAnimator::findTaskFor (Component* const component) const noexcept ComponentAnimator::AnimationTask* ComponentAnimator::findTaskFor (Component* const component) const noexcept
@ -217,7 +212,7 @@ void ComponentAnimator::animateComponent (Component* const component,
const double endSpeed) const double endSpeed)
{ {
// the speeds must be 0 or greater! // the speeds must be 0 or greater!
jassert (startSpeed >= 0 && endSpeed >= 0) jassert (startSpeed >= 0 && endSpeed >= 0);
if (component != nullptr) if (component != nullptr)
{ {

@ -740,7 +740,7 @@ public:
void ensureItemIsVisible (const int itemID, int wantedY) void ensureItemIsVisible (const int itemID, int wantedY)
{ {
jassert (itemID != 0) jassert (itemID != 0);
for (int i = items.size(); --i >= 0;) for (int i = items.size(); --i >= 0;)
{ {

@ -65,6 +65,12 @@ static void addKDialogArgs (StringArray& args, String& separator,
if (title.isNotEmpty()) if (title.isNotEmpty())
args.add ("--title=" + title); args.add ("--title=" + title);
if (uint64 topWindowID = getTopWindowID())
{
args.add ("--attach");
args.add (String (topWindowID));
}
if (selectMultipleFiles) if (selectMultipleFiles)
{ {
separator = "\n"; separator = "\n";
@ -79,12 +85,6 @@ static void addKDialogArgs (StringArray& args, String& separator,
else args.add ("--getopenfilename"); else args.add ("--getopenfilename");
} }
if (uint64 topWindowID = getTopWindowID())
{
args.add ("--attach");
args.add (String (topWindowID));
}
File startPath; File startPath;
if (file.exists()) if (file.exists())

@ -1372,7 +1372,7 @@ public:
const ModifierKeys oldMods (currentModifiers); const ModifierKeys oldMods (currentModifiers);
bool keyPressed = false; bool keyPressed = false;
if ((sym & 0xff00) == 0xff00 || sym == XK_ISO_Left_Tab) if ((sym & 0xff00) == 0xff00 || keyCode == XK_ISO_Left_Tab)
{ {
switch (sym) // Translate keypad switch (sym) // Translate keypad
{ {
@ -1431,6 +1431,11 @@ public:
keyCode &= 0xff; keyCode &= 0xff;
break; break;
case XK_ISO_Left_Tab:
keyPressed = true;
keyCode = XK_Tab & 0xff;
break;
default: default:
if (sym >= XK_F1 && sym <= XK_F16) if (sym >= XK_F1 && sym <= XK_F16)
{ {

@ -177,6 +177,7 @@ static void setWindowZOrder (HWND hwnd, HWND insertAfter)
//============================================================================== //==============================================================================
static void setDPIAwareness() static void setDPIAwareness()
{ {
#if ! JUCE_DISABLE_WIN32_DPI_AWARENESS
if (JUCEApplicationBase::isStandaloneApp()) if (JUCEApplicationBase::isStandaloneApp())
{ {
if (setProcessDPIAwareness == nullptr) if (setProcessDPIAwareness == nullptr)
@ -203,6 +204,7 @@ static void setDPIAwareness()
} }
} }
} }
#endif
} }
static double getGlobalDPI() static double getGlobalDPI()

@ -887,7 +887,7 @@ void ListBox::repaintRow (const int rowNumber) noexcept
Image ListBox::createSnapshotOfSelectedRows (int& imageX, int& imageY) Image ListBox::createSnapshotOfSelectedRows (int& imageX, int& imageY)
{ {
Rectangle<int> imageArea; Rectangle<int> imageArea;
const int firstRow = getRowContainingPosition (0, 0); const int firstRow = getRowContainingPosition (0, viewport->getY());
for (int i = getNumRowsOnScreen() + 2; --i >= 0;) for (int i = getNumRowsOnScreen() + 2; --i >= 0;)
{ {

@ -23,7 +23,7 @@
*/ */
CallOutBox::CallOutBox (Component& c, const Rectangle<int>& area, Component* const parent) CallOutBox::CallOutBox (Component& c, const Rectangle<int>& area, Component* const parent)
: arrowSize (16.0f), content (c) : arrowSize (16.0f), content (c), dismissalMouseClicksAreAlwaysConsumed (false)
{ {
addAndMakeVisible (content); addAndMakeVisible (content);
@ -123,9 +123,8 @@ bool CallOutBox::hitTest (int x, int y)
void CallOutBox::inputAttemptWhenModal() void CallOutBox::inputAttemptWhenModal()
{ {
const Point<int> mousePos (getMouseXYRelative() + getBounds().getPosition()); if (dismissalMouseClicksAreAlwaysConsumed
|| targetArea.contains (getMouseXYRelative() + getBounds().getPosition()))
if (targetArea.contains (mousePos))
{ {
// if you click on the area that originally popped-up the callout, you expect it // if you click on the area that originally popped-up the callout, you expect it
// to get rid of the box, but deleting the box here allows the click to pass through and // to get rid of the box, but deleting the box here allows the click to pass through and
@ -139,6 +138,11 @@ void CallOutBox::inputAttemptWhenModal()
} }
} }
void CallOutBox::setDismissalMouseClicksAreAlwaysConsumed (bool b) noexcept
{
dismissalMouseClicksAreAlwaysConsumed = b;
}
enum { callOutBoxDismissCommandId = 0x4f83a04b }; enum { callOutBoxDismissCommandId = 0x4f83a04b };
void CallOutBox::handleCommandMessage (int commandId) void CallOutBox::handleCommandMessage (int commandId)

@ -123,6 +123,16 @@ public:
*/ */
void dismiss(); void dismiss();
/** Determines whether the mouse events for clicks outside the calloutbox are
consumed, or allowed to arrive at the other component that they were aimed at.
By default this is false, so that when you click on something outside the calloutbox,
that event will also be sent to the component that was clicked on. If you set it to
true, then the first click will always just dismiss the box and not be sent to
anything else.
*/
void setDismissalMouseClicksAreAlwaysConsumed (bool shouldAlwaysBeConsumed) noexcept;
//============================================================================== //==============================================================================
/** This abstract base class is implemented by LookAndFeel classes. */ /** This abstract base class is implemented by LookAndFeel classes. */
struct JUCE_API LookAndFeelMethods struct JUCE_API LookAndFeelMethods
@ -161,6 +171,7 @@ private:
Point<float> targetPoint; Point<float> targetPoint;
Rectangle<int> availableArea, targetArea; Rectangle<int> availableArea, targetArea;
Image background; Image background;
bool dismissalMouseClicksAreAlwaysConsumed;
void refreshPath(); void refreshPath();

@ -142,7 +142,6 @@ public:
if (currentPeer != peer) if (currentPeer != peer)
{ {
removeFromParent();
currentPeer = peer; currentPeer = peer;
if (peer != nullptr) if (peer != nullptr)
@ -151,6 +150,10 @@ public:
[peerView addSubview: view]; [peerView addSubview: view];
componentMovedOrResized (false, false); componentMovedOrResized (false, false);
} }
else
{
removeFromParent();
}
} }
[view setHidden: ! owner.isShowing()]; [view setHidden: ! owner.isShowing()];

@ -52,6 +52,12 @@ static float logsc(float param, const float min,const float max,const float roll
return ((expf(param * logf(rolloff+1)) - 1.0f) / (rolloff)) * (max-min) + min; return ((expf(param * logf(rolloff+1)) - 1.0f) / (rolloff)) * (max-min) + min;
} }
PluginFx::PluginFx() {
uiCutoff = 1;
uiReso = 0;
uiGain = 1;
}
void PluginFx::init(int sr) { void PluginFx::init(int sr) {
mm=0; mm=0;
s1=s2=s3=s4=c=d=0; s1=s2=s3=s4=c=d=0;
@ -73,10 +79,6 @@ void PluginFx::init(int sr) {
rcorInv = 1 / rcor; rcorInv = 1 / rcor;
bandPassSw = false; bandPassSw = false;
uiCutoff = 1;
uiReso = 0;
uiGain = 1;
pCutoff = -1; pCutoff = -1;
pReso = -1; pReso = -1;
} }

@ -63,6 +63,7 @@ class PluginFx {
int R; int R;
public: public:
PluginFx();
ScopedPointer<ModuleFx> obxdFilter; ScopedPointer<ModuleFx> obxdFilter;

@ -140,6 +140,8 @@ float CtrlDX::getValueHost() {
} }
void CtrlDX::setValueHost(float f) { void CtrlDX::setValueHost(float f) {
if ( f == 1 )
f = 0.999;
setValue((f * steps)); setValue((f * steps));
} }

@ -239,16 +239,7 @@ void DexedAudioProcessor::processBlock(AudioSampleBuffer& buffer, MidiBuffer& mi
} }
// DX7 is a mono synth // DX7 is a mono synth
for (int channel = 1; channel < getNumInputChannels(); ++channel) { buffer.copyFrom(1, 0, channelData, numSamples, 1);
buffer.copyFrom(channel, 0, channelData, numSamples, 1);
}
// In case we have more outputs than inputs, we'll clear any output
// channels that didn't contain input data, (because these aren't
// guaranteed to be empty - they may contain garbage).
for (int i = getNumInputChannels(); i < getNumOutputChannels(); ++i) {
buffer.clear (i, 0, buffer.getNumSamples());
}
} }

Loading…
Cancel
Save