git subrepo clone --branch=sono6good https://github.com/essej/JUCE.git deps/juce
subrepo: subdir: "deps/juce" merged: "b13f9084e" upstream: origin: "https://github.com/essej/JUCE.git" branch: "sono6good" commit: "b13f9084e" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "2f68596"
This commit is contained in:
deps/juce
.gitattributesCMakeLists.txtDemoRunner.jucerCMakeLists.txtCMakeLists.txtCMakeLists.txtjucer_Project.cppjucer_Project.hCMakeLists.txt
.github
.gitignore.gitlab-ci.yml.gitrepoBREAKING-CHANGES.txtCMakeLists.txtChangeList.txtLICENSE.mdREADME.mddocs
examples
Assets
AudioLiveScrollingDisplay.h
Box2DTests
AddPair.hApplyForce.hBodyTypes.hBreakable.hBridge.hBulletTest.hCantilever.hCar.hChain.hCharacterCollision.hCollisionFiltering.hCollisionProcessing.hCompoundShapes.hConfined.hContinuousTest.hDistanceTest.hDominos.hDumpShell.hDynamicTreeTest.hEdgeShapes.hEdgeTest.hGears.hOneSidedPlatform.hPinball.hPolyCollision.hPolyShapes.hPrismatic.hPulleys.hPyramid.hRayCast.hRevolute.hRope.hRopeJoint.hSensorTest.hShapeEditing.hSliderCrank.hSphereStack.hTestEntries.cppTheoJansen.hTiles.hTimeOfImpact.hTumbler.hVaryingFriction.hVaryingRestitution.hVerticalStack.hWeb.h
DSPDemos_Common.hDemoUtilities.hNotifications
images
ic_stat_name.pngic_stat_name10.pngic_stat_name2.pngic_stat_name3.pngic_stat_name4.pngic_stat_name5.pngic_stat_name6.pngic_stat_name7.pngic_stat_name8.pngic_stat_name9.png
sounds
Purchases
Ed.pngEd0.oggEd1.oggEd2.oggFabian.pngFabian0.oggFabian1.oggFabian2.oggJB.pngJB0.oggJB1.oggJB2.oggJules.pngJules0.oggJules1.oggJules2.oggLukasz.pngLukasz0.oggLukasz1.oggLukasz2.oggRobot.pngRobot0.oggRobot1.oggRobot2.oggicon.png
Signing
WavefrontObjParser.hcassette_recorder.wavcello.wavdemo table data.xmlgoogle-services.jsonguitar_amp.wavicons.zipjuce_icon.pngjuce_icon_template.pngjuce_module_infoportmeirion.jpgpower.pngproaudio.pathreverb_ir.wavsinging.oggteapot.objtile_background.pngtreedemo.xmlAudio
AudioAppDemo.hAudioLatencyDemo.hAudioPlaybackDemo.hAudioRecordingDemo.hAudioSettingsDemo.hAudioSynthesiserDemo.hCMakeLists.txtMPEDemo.hMidiDemo.hPluckedStringsDemo.hSimpleFFTDemo.h
CMake
CMakeLists.txtDSP
CMakeLists.txtConvolutionDemo.hFIRFilterDemo.hGainDemo.hIIRFilterDemo.hOscillatorDemo.hOverdriveDemo.hSIMDRegisterDemo.hStateVariableFilterDemo.hWaveShaperTanhDemo.h
DemoRunner
Builds
Android
app
CMakeLists.txtbuild.gradle
build.gradlesrc
debug
res
values
main
AndroidManifest.xml
assets
AudioLiveScrollingDisplay.h
Box2DTests
AddPair.hApplyForce.hBodyTypes.hBreakable.hBridge.hBulletTest.hCantilever.hCar.hChain.hCharacterCollision.hCollisionFiltering.hCollisionProcessing.hCompoundShapes.hConfined.hContinuousTest.hDistanceTest.hDominos.hDumpShell.hDynamicTreeTest.hEdgeShapes.hEdgeTest.hGears.hOneSidedPlatform.hPinball.hPolyCollision.hPolyShapes.hPrismatic.hPulleys.hPyramid.hRayCast.hRevolute.hRope.hRopeJoint.hSensorTest.hShapeEditing.hSliderCrank.hSphereStack.hTestEntries.cppTheoJansen.hTiles.hTimeOfImpact.hTumbler.hVaryingFriction.hVaryingRestitution.hVerticalStack.hWeb.h
DSPDemos_Common.hDemoUtilities.hNotifications
images
ic_stat_name.pngic_stat_name10.pngic_stat_name2.pngic_stat_name3.pngic_stat_name4.pngic_stat_name5.pngic_stat_name6.pngic_stat_name7.pngic_stat_name8.pngic_stat_name9.png
sounds
Purchases
Ed.pngEd0.oggEd1.oggEd2.oggFabian.pngFabian0.oggFabian1.oggFabian2.oggJB.pngJB0.oggJB1.oggJB2.oggJules.pngJules0.oggJules1.oggJules2.oggLukasz.pngLukasz0.oggLukasz1.oggLukasz2.oggRobot.pngRobot0.oggRobot1.oggRobot2.oggicon.png
Signing
WavefrontObjParser.hcassette_recorder.wavcello.wavdemo table data.xmlgoogle-services.jsonguitar_amp.wavicons.zipjuce_icon.pngjuce_icon_template.pngjuce_module_infoportmeirion.jpgpower.pngproaudio.pathreverb_ir.wavsinging.oggteapot.objtile_background.pngtreedemo.xmlres
release
res
values
gradle
gradlewgradlew.batsettings.gradleLinuxMakefile
MacOSX
VisualStudio2015
VisualStudio2017
VisualStudio2019
iOS
App.entitlementsIcon.icnsInfo-App.plistLaunchScreen.storyboard
DemoRunner.xcodeproj
DemoRunner
Images.xcassets
AppIcon.appiconset
Contents.jsonIcon-29.pngIcon-29@2x.pngIcon-29@3x.pngIcon-60@2x.pngIcon-72.pngIcon-72@2x.pngIcon-76.pngIcon-76@2x.pngIcon-83.5@2x.pngIcon-@3x.pngIcon-AppStore-1024.pngIcon-Notification-20@2x.pngIcon-Notification-20@3x.pngIcon-Notifications-20.pngIcon-Notifications-20@2x.pngIcon-Small-1.pngIcon-Small-50.pngIcon-Small-50@2x.pngIcon-Small@2x-1.pngIcon-Spotlight-40.pngIcon-Spotlight-40@2x-1.pngIcon-Spotlight-40@2x.pngIcon-Spotlight-40@3x.pngIcon.pngIcon@2x.png
LaunchImage.launchimage
JuceLibraryCode
JuceHeader.hReadMe.txtinclude_juce_analytics.cppinclude_juce_audio_basics.cppinclude_juce_audio_basics.mminclude_juce_audio_devices.cppinclude_juce_audio_devices.mminclude_juce_audio_formats.cppinclude_juce_audio_formats.mminclude_juce_audio_processors.cppinclude_juce_audio_processors.mminclude_juce_audio_utils.cppinclude_juce_audio_utils.mminclude_juce_box2d.cppinclude_juce_core.cppinclude_juce_core.mminclude_juce_cryptography.cppinclude_juce_cryptography.mminclude_juce_data_structures.cppinclude_juce_data_structures.mminclude_juce_dsp.cppinclude_juce_dsp.mminclude_juce_events.cppinclude_juce_events.mminclude_juce_graphics.cppinclude_juce_graphics.mminclude_juce_gui_basics.cppinclude_juce_gui_basics.mminclude_juce_gui_extra.cppinclude_juce_gui_extra.mminclude_juce_opengl.cppinclude_juce_opengl.mminclude_juce_osc.cppinclude_juce_product_unlocking.cppinclude_juce_product_unlocking.mminclude_juce_video.cppinclude_juce_video.mm
Source
GUI
AccessibilityDemo.hAnimationAppDemo.hAnimationDemo.hBouncingBallWavetableDemo.hCMakeLists.txtCameraDemo.hCodeEditorDemo.hComponentDemo.hComponentTransformsDemo.hDialogsDemo.hFlexBoxDemo.hFontsDemo.hGraphicsDemo.hGridDemo.hHelloWorldDemo.hImagesDemo.hKeyMappingsDemo.hLookAndFeelDemo.hMDIDemo.hMenusDemo.hMultiTouchDemo.hOpenGLAppDemo.hOpenGLDemo.hOpenGLDemo2D.hPropertiesDemo.hVideoDemo.hWebBrowserDemo.hWidgetsDemo.hWindowsDemo.h
Plugins
AUv3SynthPluginDemo.hArpeggiatorPluginDemo.hAudioPluginDemo.hCMakeLists.txtDSPModulePluginDemo.hGainPluginDemo.hInterAppAudioEffectPluginDemo.hMidiLoggerPluginDemo.hMultiOutSynthPluginDemo.hNoiseGatePluginDemo.hReaperEmbeddedViewPluginDemo.hSamplerPluginDemo.hSurroundPluginDemo.h
extern
Utilities
extras
AudioPerformanceTest
AudioPerformanceTest.jucerInfo-App.plistLaunchScreen.storyboardCMakeLists.txt
Builds
Android
LinuxMakefile
MacOSX
VisualStudio2019
AudioPerformanceTest.slnAudioPerformanceTest_App.vcxprojAudioPerformanceTest_App.vcxproj.filtersresources.rc
iOS
AudioPerformanceTest.xcodeproj
AudioPerformanceTest
Images.xcassets
JuceLibraryCode
JuceHeader.hReadMe.txtinclude_juce_audio_basics.cppinclude_juce_audio_basics.mminclude_juce_audio_devices.cppinclude_juce_audio_devices.mminclude_juce_audio_formats.cppinclude_juce_audio_formats.mminclude_juce_audio_processors.cppinclude_juce_audio_processors.mminclude_juce_audio_utils.cppinclude_juce_audio_utils.mminclude_juce_core.cppinclude_juce_core.mminclude_juce_data_structures.cppinclude_juce_data_structures.mminclude_juce_events.cppinclude_juce_events.mminclude_juce_graphics.cppinclude_juce_graphics.mminclude_juce_gui_basics.cppinclude_juce_gui_basics.mminclude_juce_gui_extra.cppinclude_juce_gui_extra.mm
Source
AudioPluginHost
AudioPluginHost.jucerIcon.icnsInfo-App.plistLaunchScreen.storyboardCMakeLists.txt
Builds
Android
app
CMakeLists.txtbuild.gradle
build.gradlesrc
debug
res
values
main
AndroidManifest.xml
assets
AudioLiveScrollingDisplay.h
Box2DTests
AddPair.hApplyForce.hBodyTypes.hBreakable.hBridge.hBulletTest.hCantilever.hCar.hChain.hCharacterCollision.hCollisionFiltering.hCollisionProcessing.hCompoundShapes.hConfined.hContinuousTest.hDistanceTest.hDominos.hDumpShell.hDynamicTreeTest.hEdgeShapes.hEdgeTest.hGears.hOneSidedPlatform.hPinball.hPolyCollision.hPolyShapes.hPrismatic.hPulleys.hPyramid.hRayCast.hRevolute.hRope.hRopeJoint.hSensorTest.hShapeEditing.hSliderCrank.hSphereStack.hTestEntries.cppTheoJansen.hTiles.hTimeOfImpact.hTumbler.hVaryingFriction.hVaryingRestitution.hVerticalStack.hWeb.h
DSPDemos_Common.hDemoUtilities.hNotifications
images
ic_stat_name.pngic_stat_name10.pngic_stat_name2.pngic_stat_name3.pngic_stat_name4.pngic_stat_name5.pngic_stat_name6.pngic_stat_name7.pngic_stat_name8.pngic_stat_name9.png
sounds
Purchases
Ed.pngEd0.oggEd1.oggEd2.oggFabian.pngFabian0.oggFabian1.oggFabian2.oggJB.pngJB0.oggJB1.oggJB2.oggJules.pngJules0.oggJules1.oggJules2.oggLukasz.pngLukasz0.oggLukasz1.oggLukasz2.oggRobot.pngRobot0.oggRobot1.oggRobot2.oggicon.png
Signing
WavefrontObjParser.hcassette_recorder.wavcello.wavdemo table data.xmlgoogle-services.jsonguitar_amp.wavicons.zipjuce_icon.pngjuce_icon_template.pngjuce_module_infoportmeirion.jpgpower.pngproaudio.pathreverb_ir.wavsinging.oggteapot.objtile_background.pngtreedemo.xmlres
release
res
values
gradle
gradlewgradlew.batsettings.gradleLinuxMakefile
MacOSX
VisualStudio2015
AudioPluginHost.slnAudioPluginHost_App.vcxprojAudioPluginHost_App.vcxproj.filtersicon.icoresources.rc
VisualStudio2017
AudioPluginHost.slnAudioPluginHost_App.vcxprojAudioPluginHost_App.vcxproj.filtersicon.icoresources.rc
VisualStudio2019
AudioPluginHost.slnAudioPluginHost_App.vcxprojAudioPluginHost_App.vcxproj.filtersicon.icoresources.rc
iOS
AudioPluginHost.xcodeproj
AudioPluginHost
Images.xcassets
AppIcon.appiconset
Contents.jsonIcon-29.pngIcon-29@2x.pngIcon-29@3x.pngIcon-60@2x.pngIcon-72.pngIcon-72@2x.pngIcon-76.pngIcon-76@2x.pngIcon-83.5@2x.pngIcon-@3x.pngIcon-AppStore-1024.pngIcon-Notification-20@2x.pngIcon-Notification-20@3x.pngIcon-Notifications-20.pngIcon-Notifications-20@2x.pngIcon-Small-1.pngIcon-Small-50.pngIcon-Small-50@2x.pngIcon-Small@2x-1.pngIcon-Spotlight-40.pngIcon-Spotlight-40@2x-1.pngIcon-Spotlight-40@2x.pngIcon-Spotlight-40@3x.pngIcon.pngIcon@2x.png
LaunchImage.launchimage
JuceLibraryCode
JuceHeader.hReadMe.txtinclude_juce_audio_basics.cppinclude_juce_audio_basics.mminclude_juce_audio_devices.cppinclude_juce_audio_devices.mminclude_juce_audio_formats.cppinclude_juce_audio_formats.mminclude_juce_audio_processors.cppinclude_juce_audio_processors.mminclude_juce_audio_utils.cppinclude_juce_audio_utils.mminclude_juce_core.cppinclude_juce_core.mminclude_juce_cryptography.cppinclude_juce_cryptography.mminclude_juce_data_structures.cppinclude_juce_data_structures.mminclude_juce_dsp.cppinclude_juce_dsp.mminclude_juce_events.cppinclude_juce_events.mminclude_juce_graphics.cppinclude_juce_graphics.mminclude_juce_gui_basics.cppinclude_juce_gui_basics.mminclude_juce_gui_extra.cppinclude_juce_gui_extra.mminclude_juce_opengl.cppinclude_juce_opengl.mm
Source
BinaryBuilder
Build
CMake
JUCECheckAtomic.cmakeJUCEConfig.cmake.inJUCEHelperTargets.cmakeJUCEModuleSupport.cmakeJUCEUtils.cmakeLaunchScreen.storyboardPIPAudioProcessor.cpp.inPIPComponent.cpp.inPIPConsole.cpp.inRecentFilesMenuTemplate.nibUnityPluginGUIScript.cs.incopyDir.cmakejuce_runtime_arch_detection.cpp
CMakeLists.txtjuce_build_tools
juce_build_tools.cppjuce_build_tools.h
utils
juce_BinaryResourceFile.cppjuce_BinaryResourceFile.hjuce_BuildHelperFunctions.cppjuce_BuildHelperFunctions.hjuce_CppTokeniserFunctions.cppjuce_Entitlements.cppjuce_Entitlements.hjuce_Icons.cppjuce_Icons.hjuce_PlistOptions.cppjuce_PlistOptions.hjuce_ProjectType.hjuce_RelativePath.hjuce_ResourceFileHelpers.cppjuce_ResourceFileHelpers.hjuce_ResourceRc.cppjuce_ResourceRc.hjuce_VersionNumbers.cppjuce_VersionNumbers.h
juceaide
NetworkGraphicsDemo
Builds
Android
LinuxMakefile
MacOSX
VisualStudio2019
NetworkGraphicsDemo.slnNetworkGraphicsDemo_App.vcxprojNetworkGraphicsDemo_App.vcxproj.filtersresources.rc
iOS
Icon.icnsInfo-App.plistLaunchScreen.storyboard
NetworkGraphicsDemo.xcodeproj
NetworkGraphicsDemo
Images.xcassets
AppIcon.appiconset
Contents.jsonIcon-29.pngIcon-29@2x.pngIcon-29@3x.pngIcon-60@2x.pngIcon-72.pngIcon-72@2x.pngIcon-76.pngIcon-76@2x.pngIcon-83.5@2x.pngIcon-@3x.pngIcon-AppStore-1024.pngIcon-Notification-20@2x.pngIcon-Notification-20@3x.pngIcon-Notifications-20.pngIcon-Notifications-20@2x.pngIcon-Small-1.pngIcon-Small-50.pngIcon-Small-50@2x.pngIcon-Small@2x-1.pngIcon-Spotlight-40.pngIcon-Spotlight-40@2x-1.pngIcon-Spotlight-40@2x.pngIcon-Spotlight-40@3x.pngIcon.pngIcon@2x.png
LaunchImage.launchimage
JuceLibraryCode
BinaryData.cppBinaryData.hJuceHeader.hReadMe.txtinclude_juce_audio_basics.cppinclude_juce_audio_basics.mminclude_juce_audio_devices.cppinclude_juce_audio_devices.mminclude_juce_audio_formats.cppinclude_juce_audio_formats.mminclude_juce_audio_processors.cppinclude_juce_audio_processors.mminclude_juce_audio_utils.cppinclude_juce_audio_utils.mminclude_juce_core.cppinclude_juce_core.mminclude_juce_cryptography.cppinclude_juce_cryptography.mminclude_juce_data_structures.cppinclude_juce_data_structures.mminclude_juce_events.cppinclude_juce_events.mminclude_juce_graphics.cppinclude_juce_graphics.mminclude_juce_gui_basics.cppinclude_juce_gui_basics.mminclude_juce_gui_extra.cppinclude_juce_gui_extra.mminclude_juce_opengl.cppinclude_juce_opengl.mminclude_juce_osc.cpp
NetworkGraphicsDemo.jucerREADME.txtSource
Projucer
Builds
LinuxMakefile
MacOSX
VisualStudio2015
VisualStudio2017
VisualStudio2019
JuceLibraryCode
BinaryData.cppBinaryData.hJuceHeader.hReadMe.txtinclude_juce_build_tools.cppinclude_juce_core.cppinclude_juce_core.mminclude_juce_cryptography.cppinclude_juce_cryptography.mminclude_juce_data_structures.cppinclude_juce_data_structures.mminclude_juce_events.cppinclude_juce_events.mminclude_juce_graphics.cppinclude_juce_graphics.mminclude_juce_gui_basics.cppinclude_juce_gui_basics.mminclude_juce_gui_extra.cppinclude_juce_gui_extra.mm
Projucer.jucerSource
Application
StartPage
jucer_ContentComponents.hjucer_NewProjectTemplates.hjucer_NewProjectWizard.cppjucer_NewProjectWizard.hjucer_StartPageComponent.cppjucer_StartPageComponent.hjucer_StartPageTreeHolder.h
UserAccount
Windows
jucer_AboutWindowComponent.hjucer_EditorColourSchemeWindowComponent.hjucer_FloatingToolWindow.hjucer_GlobalPathsWindowComponent.hjucer_PIPCreatorWindowComponent.hjucer_SVGPathDataWindowComponent.hjucer_TranslationToolWindowComponent.hjucer_UTF8WindowComponent.h
jucer_Application.cppjucer_Application.hjucer_AutoUpdater.cppjucer_AutoUpdater.hjucer_CommandIDs.hjucer_CommandLine.cppjucer_CommandLine.hjucer_CommonHeaders.hjucer_Headers.hjucer_Main.cppjucer_MainWindow.cppjucer_MainWindow.hBinaryData
Icons
background_logo.svgexport_android.svgexport_clion.svgexport_codeBlocks.svgexport_linux.svgexport_visualStudio.svgexport_xcode.svggpl_logo.svgjuce_icon.pngwizard_AnimatedApp.svgwizard_AudioApp.svgwizard_AudioPlugin.svgwizard_ConsoleApp.svgwizard_DLL.svgwizard_GUI.svgwizard_Highlight.svgwizard_OpenGL.svgwizard_Openfile.svgwizard_StaticLibrary.svg
Templates
jucer_AnimatedComponentSimpleTemplate.hjucer_AnimatedComponentTemplate.cppjucer_AnimatedComponentTemplate.hjucer_AudioComponentSimpleTemplate.hjucer_AudioComponentTemplate.cppjucer_AudioComponentTemplate.hjucer_AudioPluginEditorTemplate.cppjucer_AudioPluginEditorTemplate.hjucer_AudioPluginFilterTemplate.cppjucer_AudioPluginFilterTemplate.hjucer_ComponentTemplate.cppjucer_ComponentTemplate.hjucer_ContentCompSimpleTemplate.hjucer_ContentCompTemplate.cppjucer_ContentCompTemplate.hjucer_InlineComponentTemplate.hjucer_MainConsoleAppTemplate.cppjucer_MainTemplate_NoWindow.cppjucer_MainTemplate_Window.cppjucer_NewComponentTemplate.cppjucer_NewComponentTemplate.hjucer_NewCppFileTemplate.cppjucer_NewCppFileTemplate.hjucer_NewInlineComponentTemplate.hjucer_OpenGLComponentSimpleTemplate.hjucer_OpenGLComponentTemplate.cppjucer_OpenGLComponentTemplate.hjucer_PIPAudioProcessorTemplate.hjucer_PIPTemplate.h
colourscheme_dark.xmlcolourscheme_light.xmlgradle
CodeEditor
jucer_DocumentEditorComponent.cppjucer_DocumentEditorComponent.hjucer_ItemPreviewComponent.hjucer_OpenDocumentManager.cppjucer_OpenDocumentManager.hjucer_SourceCodeEditor.cppjucer_SourceCodeEditor.h
ComponentEditor
Components
jucer_ButtonHandler.hjucer_ComboBoxHandler.hjucer_ComponentNameProperty.hjucer_ComponentTypeHandler.cppjucer_ComponentTypeHandler.hjucer_ComponentUndoableAction.hjucer_GenericComponentHandler.hjucer_GroupComponentHandler.hjucer_HyperlinkButtonHandler.hjucer_ImageButtonHandler.hjucer_JucerComponentHandler.hjucer_LabelHandler.hjucer_SliderHandler.hjucer_TabbedComponentHandler.hjucer_TextButtonHandler.hjucer_TextEditorHandler.hjucer_ToggleButtonHandler.hjucer_TreeViewHandler.hjucer_ViewportHandler.h
Documents
PaintElements
jucer_ColouredElement.cppjucer_ColouredElement.hjucer_ElementSiblingComponent.hjucer_FillType.hjucer_GradientPointComponent.hjucer_ImageResourceProperty.hjucer_PaintElement.cppjucer_PaintElement.hjucer_PaintElementEllipse.hjucer_PaintElementGroup.cppjucer_PaintElementGroup.hjucer_PaintElementImage.cppjucer_PaintElementImage.hjucer_PaintElementPath.cppjucer_PaintElementPath.hjucer_PaintElementRectangle.hjucer_PaintElementRoundedRectangle.hjucer_PaintElementText.hjucer_PaintElementUndoableAction.hjucer_PointComponent.hjucer_StrokeType.h
Properties
jucer_ColourPropertyComponent.hjucer_ComponentBooleanProperty.hjucer_ComponentChoiceProperty.hjucer_ComponentColourProperty.hjucer_ComponentTextProperty.hjucer_FilePropertyComponent.hjucer_FontPropertyComponent.hjucer_JustificationProperty.hjucer_PositionPropertyBase.h
UI
jucer_ComponentLayoutEditor.cppjucer_ComponentLayoutEditor.hjucer_ComponentLayoutPanel.hjucer_ComponentOverlayComponent.cppjucer_ComponentOverlayComponent.hjucer_EditingPanelBase.cppjucer_EditingPanelBase.hjucer_JucerCommandIDs.hjucer_JucerDocumentEditor.cppjucer_JucerDocumentEditor.hjucer_PaintRoutineEditor.cppjucer_PaintRoutineEditor.hjucer_PaintRoutinePanel.cppjucer_PaintRoutinePanel.hjucer_RelativePositionedRectangle.hjucer_ResourceEditorPanel.cppjucer_ResourceEditorPanel.hjucer_SnapGridPainter.hjucer_TestComponent.cppjucer_TestComponent.h
jucer_BinaryResources.cppjucer_BinaryResources.hjucer_ComponentLayout.cppjucer_ComponentLayout.hjucer_GeneratedCode.cppjucer_GeneratedCode.hjucer_JucerDocument.cppjucer_JucerDocument.hjucer_ObjectTypes.cppjucer_ObjectTypes.hjucer_PaintRoutine.cppjucer_PaintRoutine.hjucer_UtilityFunctions.hLicenses
LiveBuildEngine
Project
Modules
UI
Sidebar
jucer_ExporterTreeItems.hjucer_FileTreeItems.hjucer_ModuleTreeItems.hjucer_ProjectTreeItemBase.hjucer_Sidebar.hjucer_TreeItemTypes.h
jucer_ContentViewComponent.hjucer_ContentViewComponents.hjucer_FileGroupInformationComponent.hjucer_HeaderComponent.cppjucer_HeaderComponent.hjucer_ModulesInformationComponent.hjucer_ProjectContentComponent.cppjucer_ProjectContentComponent.hjucer_ProjectMessagesComponent.hjucer_UserAvatarComponent.hProjectSaving
jucer_ProjectExport_Android.hjucer_ProjectExport_CLion.hjucer_ProjectExport_CodeBlocks.hjucer_ProjectExport_MSVC.hjucer_ProjectExport_Make.hjucer_ProjectExport_Xcode.hjucer_ProjectExporter.cppjucer_ProjectExporter.hjucer_ProjectSaver.cppjucer_ProjectSaver.hjucer_ResourceFile.cppjucer_ResourceFile.hjucer_XcodeProjectParser.h
Settings
jucer_AppearanceSettings.cppjucer_AppearanceSettings.hjucer_StoredSettings.cppjucer_StoredSettings.h
Utility
Helpers
jucer_CodeHelpers.cppjucer_CodeHelpers.hjucer_Colours.hjucer_FileHelpers.cppjucer_FileHelpers.hjucer_MiscUtilities.cppjucer_MiscUtilities.hjucer_NewFileWizard.cppjucer_NewFileWizard.hjucer_PresetIDs.hjucer_TranslationHelpers.hjucer_ValueSourceHelpers.hjucer_ValueWithDefaultWrapper.hjucer_VersionInfo.cppjucer_VersionInfo.h
PIPs
UI
PropertyComponents
jucer_ColourPropertyComponent.hjucer_FilePathPropertyComponent.hjucer_LabelPropertyComponent.hjucer_PropertyComponentsWithEnablement.h
jucer_IconButton.hjucer_Icons.cppjucer_Icons.hjucer_JucerTreeViewBase.cppjucer_JucerTreeViewBase.hjucer_ProjucerLookAndFeel.cppjucer_ProjucerLookAndFeel.hjucer_SlidingPanelComponent.cppjucer_SlidingPanelComponent.hUnitTestRunner
Builds
LinuxMakefile
MacOSX
VisualStudio2017
UnitTestRunner.slnUnitTestRunner_ConsoleApp.vcxprojUnitTestRunner_ConsoleApp.vcxproj.filtersresources.rc
VisualStudio2019
JuceLibraryCode
JuceHeader.hReadMe.txtinclude_juce_analytics.cppinclude_juce_audio_basics.cppinclude_juce_audio_basics.mminclude_juce_audio_devices.cppinclude_juce_audio_devices.mminclude_juce_audio_formats.cppinclude_juce_audio_formats.mminclude_juce_audio_processors.cppinclude_juce_audio_processors.mminclude_juce_audio_utils.cppinclude_juce_audio_utils.mminclude_juce_core.cppinclude_juce_core.mminclude_juce_cryptography.cppinclude_juce_cryptography.mminclude_juce_data_structures.cppinclude_juce_data_structures.mminclude_juce_dsp.cppinclude_juce_dsp.mminclude_juce_events.cppinclude_juce_events.mminclude_juce_graphics.cppinclude_juce_graphics.mminclude_juce_gui_basics.cppinclude_juce_gui_basics.mminclude_juce_gui_extra.cppinclude_juce_gui_extra.mminclude_juce_opengl.cppinclude_juce_opengl.mminclude_juce_osc.cppinclude_juce_product_unlocking.cppinclude_juce_product_unlocking.mminclude_juce_video.cppinclude_juce_video.mm
Source
UnitTestRunner.jucerWindowsDLL
Builds
VisualStudio2019
JuceLibraryCode
JuceHeader.hReadMe.txtinclude_juce_audio_basics.cppinclude_juce_audio_basics.mminclude_juce_audio_devices.cppinclude_juce_audio_devices.mminclude_juce_audio_formats.cppinclude_juce_audio_formats.mminclude_juce_audio_processors.cppinclude_juce_audio_processors.mminclude_juce_audio_utils.cppinclude_juce_audio_utils.mminclude_juce_core.cppinclude_juce_core.mminclude_juce_cryptography.cppinclude_juce_cryptography.mminclude_juce_data_structures.cppinclude_juce_data_structures.mminclude_juce_events.cppinclude_juce_events.mminclude_juce_graphics.cppinclude_juce_graphics.mminclude_juce_gui_basics.cppinclude_juce_gui_basics.mminclude_juce_gui_extra.cppinclude_juce_gui_extra.mminclude_juce_opengl.cppinclude_juce_opengl.mminclude_juce_video.cppinclude_juce_video.mm
WindowsDLL.jucermodules
CMakeLists.txtjuce_android_Audio.cppjuce_android_HighPerformanceAudioHelpers.hjuce_android_Midi.cppjuce_android_Oboe.cppjuce_android_OpenSL.cppjuce_ios_Audio.cppjuce_ios_Audio.hjuce_linux_ALSA.cppjuce_linux_Bela.cppjuce_linux_JackAudio.cppjuce_linux_Midi.cppjuce_mac_CoreAudio.cppjuce_mac_CoreMidi.mmjuce_win32_ASIO.cppjuce_win32_DirectSound.cppjuce_win32_Midi.cppjuce_win32_WASAPI.cppAUResources.rjuce_audio_processors.cppjuce_audio_processors.hjuce_audio_processors.mmjuce_MultiTouchMapper.hjuce_ScopedDPIAwarenessDisabler.hjuce_android_ContentSharer.cppjuce_android_FileChooser.cppjuce_android_Windowing.cppjuce_common_MimeTypes.cppjuce_ios_ContentSharer.cppjuce_ios_FileChooser.mmjuce_ios_UIViewComponentPeer.mmjuce_ios_Windowing.mmjuce_linux_FileChooser.cppjuce_linux_Windowing.cppjuce_mac_FileChooser.mmjuce_mac_MainMenu.mmjuce_mac_MouseCursor.mmjuce_mac_NSViewComponentPeer.mmjuce_mac_Windowing.mmjuce_win32_DragAndDrop.cppjuce_win32_FileChooser.cppjuce_win32_ScopedThreadDPIAwarenessSetter.hjuce_win32_Windowing.cppjuce_OpenGLExtensions.hjuce_OpenGL_android.hjuce_OpenGL_ios.hjuce_OpenGL_linux_X11.hjuce_OpenGL_osx.hjuce_OpenGL_win32.h
juce_analytics
juce_audio_basics
audio_play_head
buffers
juce_AudioChannelSet.cppjuce_AudioChannelSet.hjuce_AudioDataConverters.cppjuce_AudioDataConverters.hjuce_AudioProcessLoadMeasurer.cppjuce_AudioProcessLoadMeasurer.hjuce_AudioSampleBuffer.hjuce_FloatVectorOperations.cppjuce_FloatVectorOperations.h
juce_audio_basics.cppjuce_audio_basics.hjuce_audio_basics.mmmidi
juce_MidiBuffer.cppjuce_MidiBuffer.hjuce_MidiDataConcatenator.hjuce_MidiFile.cppjuce_MidiFile.hjuce_MidiKeyboardState.cppjuce_MidiKeyboardState.hjuce_MidiMessage.cppjuce_MidiMessage.hjuce_MidiMessageSequence.cppjuce_MidiMessageSequence.hjuce_MidiRPN.cppjuce_MidiRPN.h
ump
juce_UMP.hjuce_UMPConversion.hjuce_UMPConverters.hjuce_UMPDispatcher.hjuce_UMPFactory.hjuce_UMPIterator.hjuce_UMPMidi1ToBytestreamTranslator.hjuce_UMPMidi1ToMidi2DefaultTranslator.cppjuce_UMPMidi1ToMidi2DefaultTranslator.hjuce_UMPProtocols.hjuce_UMPReceiver.hjuce_UMPSysEx7.cppjuce_UMPSysEx7.hjuce_UMPTests.cppjuce_UMPUtils.cppjuce_UMPUtils.hjuce_UMPView.cppjuce_UMPView.hjuce_UMPacket.hjuce_UMPackets.h
mpe
juce_MPEInstrument.cppjuce_MPEInstrument.cpp.origjuce_MPEInstrument.hjuce_MPEInstrument.h.origjuce_MPEMessages.cppjuce_MPEMessages.hjuce_MPENote.cppjuce_MPENote.hjuce_MPESynthesiser.cppjuce_MPESynthesiser.hjuce_MPESynthesiserBase.cppjuce_MPESynthesiserBase.hjuce_MPESynthesiserVoice.cppjuce_MPESynthesiserVoice.hjuce_MPEUtils.cppjuce_MPEUtils.hjuce_MPEValue.cppjuce_MPEValue.hjuce_MPEZoneLayout.cppjuce_MPEZoneLayout.h
native
sources
juce_AudioSource.hjuce_BufferingAudioSource.cppjuce_BufferingAudioSource.hjuce_ChannelRemappingAudioSource.cppjuce_ChannelRemappingAudioSource.hjuce_IIRFilterAudioSource.cppjuce_IIRFilterAudioSource.hjuce_MemoryAudioSource.cppjuce_MemoryAudioSource.hjuce_MixerAudioSource.cppjuce_MixerAudioSource.hjuce_PositionableAudioSource.hjuce_ResamplingAudioSource.cppjuce_ResamplingAudioSource.hjuce_ReverbAudioSource.cppjuce_ReverbAudioSource.hjuce_ToneGeneratorAudioSource.cppjuce_ToneGeneratorAudioSource.h
synthesisers
utilities
juce_audio_devices
audio_io
juce_AudioDeviceManager.cppjuce_AudioDeviceManager.hjuce_AudioIODevice.cppjuce_AudioIODevice.hjuce_AudioIODeviceType.cppjuce_AudioIODeviceType.hjuce_SystemAudioVolume.h
juce_audio_devices.cppjuce_audio_devices.hjuce_audio_devices.mmmidi_io
native
java
app
com
rmsl
oboe
CMakeLists.txtLICENSEREADME.md
include
oboe
src
aaudio
common
AudioClock.hAudioSourceCaller.cppAudioSourceCaller.hAudioStream.cppAudioStreamBuilder.cppDataConversionFlowGraph.cppDataConversionFlowGraph.hFilterAudioStream.cppFilterAudioStream.hFixedBlockAdapter.cppFixedBlockAdapter.hFixedBlockReader.cppFixedBlockReader.hFixedBlockWriter.cppFixedBlockWriter.hLatencyTuner.cppMonotonicCounter.hOboeDebug.hQuirksManager.cppQuirksManager.hSourceFloatCaller.cppSourceFloatCaller.hSourceI16Caller.cppSourceI16Caller.hSourceI24Caller.cppSourceI24Caller.hSourceI32Caller.cppSourceI32Caller.hStabilizedCallback.cppTrace.cppTrace.hUtilities.cppVersion.cpp
fifo
FifoBuffer.cppFifoBuffer.hFifoController.cppFifoController.hFifoControllerBase.cppFifoControllerBase.hFifoControllerIndirect.cppFifoControllerIndirect.h
flowgraph
ChannelCountConverter.cppChannelCountConverter.hClipToRange.cppClipToRange.hFlowGraphNode.cppFlowGraphNode.hFlowgraphUtilities.hManyToMultiConverter.cppManyToMultiConverter.hMonoToMultiConverter.cppMonoToMultiConverter.hMultiToMonoConverter.cppMultiToMonoConverter.hRampLinear.cppRampLinear.hSampleRateConverter.cppSampleRateConverter.hSinkFloat.cppSinkFloat.hSinkI16.cppSinkI16.hSinkI24.cppSinkI24.hSinkI32.cppSinkI32.hSourceFloat.cppSourceFloat.hSourceI16.cppSourceI16.hSourceI24.cppSourceI24.hSourceI32.cppSourceI32.h
resampler
HyperbolicCosineWindow.hIntegerRatio.cppIntegerRatio.hKaiserWindow.hLinearResampler.cppLinearResampler.hMultiChannelResampler.cppMultiChannelResampler.hPolyphaseResampler.cppPolyphaseResampler.hPolyphaseResamplerMono.cppPolyphaseResamplerMono.hPolyphaseResamplerStereo.cppPolyphaseResamplerStereo.hSincResampler.cppSincResampler.hSincResamplerStereo.cppSincResamplerStereo.h
opensles
AudioInputStreamOpenSLES.cppAudioInputStreamOpenSLES.hAudioOutputStreamOpenSLES.cppAudioOutputStreamOpenSLES.hAudioStreamBuffered.cppAudioStreamBuffered.hAudioStreamOpenSLES.cppAudioStreamOpenSLES.hEngineOpenSLES.cppEngineOpenSLES.hOpenSLESUtilities.cppOpenSLESUtilities.hOutputMixerOpenSLES.cppOutputMixerOpenSLES.h
sources
juce_audio_formats
codecs
flac
Flac Licence.txtall.halloc.hassert.hcallback.hcompat.hendswap.hexport.hformat.h
juce_AiffAudioFormat.cppjuce_AiffAudioFormat.hjuce_CoreAudioFormat.cppjuce_CoreAudioFormat.hjuce_FlacAudioFormat.cppjuce_FlacAudioFormat.hjuce_LAMEEncoderAudioFormat.cppjuce_LAMEEncoderAudioFormat.hjuce_MP3AudioFormat.cppjuce_MP3AudioFormat.hjuce_OggVorbisAudioFormat.cppjuce_OggVorbisAudioFormat.hjuce_WavAudioFormat.cppjuce_WavAudioFormat.hjuce_WindowsMediaAudioFormat.cppjuce_WindowsMediaAudioFormat.hlibFLAC
bitmath.cbitreader.cbitwriter.ccpu.ccrc.cfixed.cfloat.cformat.clpc_flac.cmd5.cmemory.cstream_decoder.cstream_encoder.cstream_encoder_framing.cwindow_flac.c
metadata.hordinals.hstream_decoder.hstream_encoder.hwin_utf8_io.hinclude
private
all.hbitmath.hbitreader.hbitwriter.hcpu.hcrc.hfixed.hfloat.hformat.hlpc.hmd5.hmemory.hmetadata.hstream_encoder.hstream_encoder_framing.hwindow.h
protected
oggvorbis
Ogg Vorbis Licence.txtbitwise.ccodec.hconfig_types.hcrctable.hframing.c
libvorbis-1.3.7
AUTHORSCHANGESCOPYINGREADME.md
ogg.hos_types.hvorbisenc.hvorbisfile.hlib
analysis.cbackends.hbitrate.cbitrate.hblock.c
books
codebook.ccodebook.hcodec_internal.henvelope.cenvelope.hfloor0.cfloor1.chighlevel.hinfo.clookup.clookup.hlookup_data.hlpc.clpc.hlsp.clsp.hmapping0.cmasking.hmdct.cmdct.hmisc.cmisc.hmodes
floor_all.hpsych_11.hpsych_16.hpsych_44.hpsych_8.hresidue_16.hresidue_44.hresidue_44p51.hresidue_44u.hresidue_8.hsetup_11.hsetup_16.hsetup_22.hsetup_32.hsetup_44.hsetup_44p51.hsetup_44u.hsetup_8.hsetup_X.h
os.hpsy.cpsy.hregistry.cregistry.hres0.cscales.hsharedbook.csmallft.csmallft.hsynthesis.cvorbisenc.cvorbisfile.cwindow.cwindow.hformat
juce_AudioFormat.cppjuce_AudioFormat.hjuce_AudioFormatManager.cppjuce_AudioFormatManager.hjuce_AudioFormatReader.cppjuce_AudioFormatReader.hjuce_AudioFormatReaderSource.cppjuce_AudioFormatReaderSource.hjuce_AudioFormatWriter.cppjuce_AudioFormatWriter.hjuce_AudioSubsectionReader.cppjuce_AudioSubsectionReader.hjuce_BufferingAudioFormatReader.cppjuce_BufferingAudioFormatReader.hjuce_MemoryMappedAudioFormatReader.h
juce_audio_formats.cppjuce_audio_formats.hjuce_audio_formats.mmsampler
juce_audio_plugin_client
AAX
AU
CoreAudioUtilityClasses
AUBase.cppAUBase.hAUBaseHelper.hAUBuffer.cppAUBuffer.hAUCarbonViewBase.cppAUCarbonViewBase.hAUCarbonViewControl.cppAUCarbonViewControl.hAUCarbonViewDispatch.cppAUDispatch.cppAUDispatch.hAUInputElement.cppAUInputElement.hAUInputFormatConverter.hAUMIDIBase.cppAUMIDIBase.hAUOutputBase.cppAUOutputBase.hAUOutputElement.cppAUOutputElement.hAUPlugInDispatch.cppAUPlugInDispatch.hAUScopeElement.cppAUScopeElement.hAUSilentTimeout.hAUTimestampGenerator.hAUViewLocalizedStringKeys.hCAAUParameter.cppCAAUParameter.hCAAtomic.hCAAtomicStack.hCAAudioChannelLayout.cppCAAudioChannelLayout.hCAAutoDisposer.hCADebugMacros.hCADebugPrintf.hCAException.hCAHostTimeBase.hCAMath.hCAMutex.cppCAMutex.hCAReferenceCounted.hCAStreamBasicDescription.cppCAStreamBasicDescription.hCAThreadSafeList.hCAVectorUnit.cppCAVectorUnit.hCAVectorUnitTypes.hCAXException.hCarbonEventHandler.cppCarbonEventHandler.hComponentBase.cppComponentBase.hMusicDeviceBase.cppMusicDeviceBase.h
juce_AU_Wrapper.mmjuce_AUv3_Wrapper.mmRTAS
juce_RTAS_DigiCode1.cppjuce_RTAS_DigiCode2.cppjuce_RTAS_DigiCode3.cppjuce_RTAS_DigiCode_Header.hjuce_RTAS_MacUtilities.mmjuce_RTAS_WinExports.defjuce_RTAS_WinResources.rsrjuce_RTAS_WinUtilities.cppjuce_RTAS_Wrapper.cpp
Standalone
Unity
VST
VST3
juce_audio_plugin_client.hjuce_audio_plugin_client_AAX.cppjuce_audio_plugin_client_AAX.mmjuce_audio_plugin_client_AU.rjuce_audio_plugin_client_AU_1.mmjuce_audio_plugin_client_AU_2.mmjuce_audio_plugin_client_AUv3.mmjuce_audio_plugin_client_RTAS.rjuce_audio_plugin_client_RTAS_1.cppjuce_audio_plugin_client_RTAS_2.cppjuce_audio_plugin_client_RTAS_3.cppjuce_audio_plugin_client_RTAS_4.cppjuce_audio_plugin_client_RTAS_utils.cppjuce_audio_plugin_client_RTAS_utils.mmjuce_audio_plugin_client_Standalone.cppjuce_audio_plugin_client_Unity.cppjuce_audio_plugin_client_VST2.cppjuce_audio_plugin_client_VST3.cppjuce_audio_plugin_client_VST_utils.mmjuce_audio_plugin_client_utils.cpputility
juce_audio_processors
format
juce_AudioPluginFormat.cppjuce_AudioPluginFormat.hjuce_AudioPluginFormatManager.cppjuce_AudioPluginFormatManager.h
format_types
VST3_SDK
JUCE_README.mdLICENSE.txtREADME.mdVST3_License_Agreement.pdfVST3_Usage_Guidelines.pdf
juce_AU_Shared.hjuce_AudioUnitPluginFormat.hjuce_AudioUnitPluginFormat.mmjuce_LADSPAPluginFormat.cppjuce_LADSPAPluginFormat.hjuce_LegacyAudioParameter.cppjuce_VST3Common.hjuce_VST3Headers.hjuce_VST3PluginFormat.cppjuce_VST3PluginFormat.hjuce_VSTCommon.hjuce_VSTMidiEventList.hjuce_VSTPluginFormat.cppjuce_VSTPluginFormat.hbase
LICENSE.txtREADME.md
source
baseiids.cppclassfactoryhelpers.hfbuffer.cppfbuffer.hfdebug.cppfdebug.hfobject.cppfobject.hfstreamer.cppfstreamer.hfstring.cppfstring.hupdatehandler.cppupdatehandler.h
thread
pluginterfaces
LICENSE.txtREADME.md
base
conststringtable.cppconststringtable.hcoreiids.cppfalignpop.hfalignpush.hfplatform.hfstrdefs.hftypes.hfunknown.cppfunknown.hfutils.hfvariant.hibstream.hicloneable.hipersistent.hipluginbase.histringresult.hiupdatehandler.hsmartpointer.htypesizecheck.hustring.cppustring.h
gui
vst
ivstattributes.hivstaudioprocessor.hivstautomationstate.hivstchannelcontextinfo.hivstcomponent.hivstcontextmenu.hivsteditcontroller.hivstevents.hivsthostapplication.hivstinterappaudio.hivstmessage.hivstmidicontrollers.hivstmidilearn.hivstnoteexpression.hivstparameterchanges.hivstparameterfunctionname.hivstphysicalui.hivstpluginterfacesupport.hivstplugview.hivstprefetchablesupport.hivstprocesscontext.hivstrepresentation.hivsttestplugprovider.hivstunits.hvstpshpack4.hvstspeaker.hvsttypes.h
public.sdk
processors
juce_AudioPluginInstance.cppjuce_AudioPluginInstance.hjuce_AudioProcessor.cppjuce_AudioProcessor.hjuce_AudioProcessorEditor.cppjuce_AudioProcessorEditor.hjuce_AudioProcessorEditorHostContext.hjuce_AudioProcessorGraph.cppjuce_AudioProcessorGraph.hjuce_AudioProcessorListener.hjuce_AudioProcessorParameter.hjuce_AudioProcessorParameterGroup.cppjuce_AudioProcessorParameterGroup.hjuce_GenericAudioProcessorEditor.cppjuce_GenericAudioProcessorEditor.hjuce_PluginDescription.cppjuce_PluginDescription.h
scanning
juce_KnownPluginList.cppjuce_KnownPluginList.hjuce_PluginDirectoryScanner.cppjuce_PluginDirectoryScanner.hjuce_PluginListComponent.cppjuce_PluginListComponent.h
utilities
juce_AudioParameterBool.cppjuce_AudioParameterBool.hjuce_AudioParameterChoice.cppjuce_AudioParameterChoice.hjuce_AudioParameterFloat.cppjuce_AudioParameterFloat.hjuce_AudioParameterInt.cppjuce_AudioParameterInt.hjuce_AudioProcessorParameterWithID.cppjuce_AudioProcessorParameterWithID.hjuce_AudioProcessorValueTreeState.cppjuce_AudioProcessorValueTreeState.hjuce_ExtensionsVisitor.hjuce_ParameterAttachments.cppjuce_ParameterAttachments.hjuce_PluginHostType.cppjuce_PluginHostType.hjuce_RangedAudioParameter.cppjuce_RangedAudioParameter.hjuce_VST3ClientExtensions.hjuce_VSTCallbackHandler.h
juce_audio_utils
audio_cd
gui
juce_AudioAppComponent.cppjuce_AudioAppComponent.hjuce_AudioDeviceSelectorComponent.cppjuce_AudioDeviceSelectorComponent.hjuce_AudioThumbnail.cppjuce_AudioThumbnail.hjuce_AudioThumbnailBase.hjuce_AudioThumbnailCache.cppjuce_AudioThumbnailCache.hjuce_AudioVisualiserComponent.cppjuce_AudioVisualiserComponent.hjuce_BluetoothMidiDevicePairingDialogue.hjuce_MidiKeyboardComponent.cppjuce_MidiKeyboardComponent.h
juce_audio_utils.cppjuce_audio_utils.hjuce_audio_utils.mmnative
juce_android_BluetoothMidiDevicePairingDialogue.cppjuce_ios_BluetoothMidiDevicePairingDialogue.mmjuce_linux_AudioCDReader.cppjuce_linux_BluetoothMidiDevicePairingDialogue.cppjuce_mac_AudioCDBurner.mmjuce_mac_AudioCDReader.mmjuce_mac_BluetoothMidiDevicePairingDialogue.mmjuce_win32_AudioCDBurner.cppjuce_win32_AudioCDReader.cppjuce_win_BluetoothMidiDevicePairingDialogue.cpp
players
juce_box2d
box2d
Box2D.hREADME.txt
juce_box2d.cppjuce_box2d.hCollision
Shapes
b2ChainShape.cppb2ChainShape.hb2CircleShape.cppb2CircleShape.hb2EdgeShape.cppb2EdgeShape.hb2PolygonShape.cppb2PolygonShape.hb2Shape.h
b2BroadPhase.cppb2BroadPhase.hb2CollideCircle.cppb2CollideEdge.cppb2CollidePolygon.cppb2Collision.cppb2Collision.hb2Distance.cppb2Distance.hb2DynamicTree.cppb2DynamicTree.hb2TimeOfImpact.cppb2TimeOfImpact.hCommon
b2BlockAllocator.cppb2BlockAllocator.hb2Draw.cppb2Draw.hb2GrowableStack.hb2Math.cppb2Math.hb2Settings.cppb2Settings.hb2StackAllocator.cppb2StackAllocator.hb2Timer.cppb2Timer.h
Dynamics
Contacts
b2ChainAndCircleContact.cppb2ChainAndCircleContact.hb2ChainAndPolygonContact.cppb2ChainAndPolygonContact.hb2CircleContact.cppb2CircleContact.hb2Contact.cppb2Contact.hb2ContactSolver.cppb2ContactSolver.hb2EdgeAndCircleContact.cppb2EdgeAndCircleContact.hb2EdgeAndPolygonContact.cppb2EdgeAndPolygonContact.hb2PolygonAndCircleContact.cppb2PolygonAndCircleContact.hb2PolygonContact.cppb2PolygonContact.h
Joints
b2DistanceJoint.cppb2DistanceJoint.hb2FrictionJoint.cppb2FrictionJoint.hb2GearJoint.cppb2GearJoint.hb2Joint.cppb2Joint.hb2MouseJoint.cppb2MouseJoint.hb2PrismaticJoint.cppb2PrismaticJoint.hb2PulleyJoint.cppb2PulleyJoint.hb2RevoluteJoint.cppb2RevoluteJoint.hb2RopeJoint.cppb2RopeJoint.hb2WeldJoint.cppb2WeldJoint.hb2WheelJoint.cppb2WheelJoint.h
b2Body.cppb2Body.hb2ContactManager.cppb2ContactManager.hb2Fixture.cppb2Fixture.hb2Island.cppb2Island.hb2TimeStep.hb2World.cppb2World.hb2WorldCallbacks.cppb2WorldCallbacks.hRope
utils
juce_core
containers
juce_AbstractFifo.cppjuce_AbstractFifo.hjuce_Array.hjuce_ArrayAllocationBase.hjuce_ArrayBase.cppjuce_ArrayBase.hjuce_DynamicObject.cppjuce_DynamicObject.hjuce_ElementComparator.hjuce_HashMap.hjuce_HashMap_test.cppjuce_LinkedListPointer.hjuce_ListenerList.hjuce_NamedValueSet.cppjuce_NamedValueSet.hjuce_OwnedArray.cppjuce_OwnedArray.hjuce_PropertySet.cppjuce_PropertySet.hjuce_ReferenceCountedArray.cppjuce_ReferenceCountedArray.hjuce_ScopedValueSetter.hjuce_SingleThreadedAbstractFifo.hjuce_SortedSet.hjuce_SparseSet.cppjuce_SparseSet.hjuce_Variant.cppjuce_Variant.h
files
juce_DirectoryIterator.cppjuce_DirectoryIterator.hjuce_File.cppjuce_File.hjuce_FileFilter.cppjuce_FileFilter.hjuce_FileInputStream.cppjuce_FileInputStream.hjuce_FileOutputStream.cppjuce_FileOutputStream.hjuce_FileSearchPath.cppjuce_FileSearchPath.hjuce_MemoryMappedFile.hjuce_RangedDirectoryIterator.cppjuce_RangedDirectoryIterator.hjuce_TemporaryFile.cppjuce_TemporaryFile.hjuce_WildcardFileFilter.cppjuce_WildcardFileFilter.h
javascript
juce_core.cppjuce_core.hjuce_core.mmlogging
maths
juce_BigInteger.cppjuce_BigInteger.hjuce_Expression.cppjuce_Expression.hjuce_MathsFunctions.hjuce_NormalisableRange.hjuce_Random.cppjuce_Random.hjuce_Range.hjuce_StatisticsAccumulator.h
memory
juce_AllocationHooks.cppjuce_AllocationHooks.hjuce_Atomic.hjuce_ByteOrder.hjuce_ContainerDeletePolicy.hjuce_HeapBlock.hjuce_HeavyweightLeakedObjectDetector.hjuce_LeakedObjectDetector.hjuce_Memory.hjuce_MemoryBlock.cppjuce_MemoryBlock.hjuce_OptionalScopedPointer.hjuce_ReferenceCountedObject.hjuce_Reservoir.hjuce_ScopedPointer.hjuce_SharedResourcePointer.hjuce_Singleton.hjuce_WeakReference.h
misc
juce_ConsoleApplication.cppjuce_ConsoleApplication.hjuce_Functional.hjuce_Result.cppjuce_Result.hjuce_RuntimePermissions.cppjuce_RuntimePermissions.hjuce_Uuid.cppjuce_Uuid.hjuce_WindowsRegistry.h
native
java
javacore
juce_BasicNativeHeaders.hjuce_android_Files.cppjuce_android_JNIHelpers.cppjuce_android_JNIHelpers.hjuce_android_Misc.cppjuce_android_Network.cppjuce_android_RuntimePermissions.cppjuce_android_SystemStats.cppjuce_android_Threads.cppjuce_curl_Network.cppjuce_intel_SharedCode.hjuce_linux_CommonFile.cppjuce_linux_Files.cppjuce_linux_Network.cppjuce_linux_SystemStats.cppjuce_linux_Threads.cppjuce_mac_CFHelpers.hjuce_mac_Files.mmjuce_mac_Network.mmjuce_mac_ObjCHelpers.hjuce_mac_Strings.mmjuce_mac_SystemStats.mmjuce_mac_Threads.mmjuce_posix_IPAddress.hjuce_posix_NamedPipe.cppjuce_posix_SharedCode.hjuce_wasm_SystemStats.cppjuce_win32_ComSmartPtr.hjuce_win32_Files.cppjuce_win32_Network.cppjuce_win32_Registry.cppjuce_win32_SystemStats.cppjuce_win32_Threads.cppnetwork
juce_IPAddress.cppjuce_IPAddress.hjuce_MACAddress.cppjuce_MACAddress.hjuce_NamedPipe.cppjuce_NamedPipe.hjuce_Socket.cppjuce_Socket.hjuce_URL.cppjuce_URL.hjuce_WebInputStream.cppjuce_WebInputStream.h
streams
juce_BufferedInputStream.cppjuce_BufferedInputStream.hjuce_FileInputSource.cppjuce_FileInputSource.hjuce_InputSource.hjuce_InputStream.cppjuce_InputStream.hjuce_MemoryInputStream.cppjuce_MemoryInputStream.hjuce_MemoryOutputStream.cppjuce_MemoryOutputStream.hjuce_OutputStream.cppjuce_OutputStream.hjuce_SubregionStream.cppjuce_SubregionStream.hjuce_URLInputSource.cppjuce_URLInputSource.h
system
juce_CompilerSupport.hjuce_CompilerWarnings.hjuce_PlatformDefs.hjuce_StandardHeader.hjuce_SystemStats.cppjuce_SystemStats.hjuce_TargetPlatform.h
text
juce_Base64.cppjuce_Base64.hjuce_CharPointer_ASCII.hjuce_CharPointer_UTF16.hjuce_CharPointer_UTF32.hjuce_CharPointer_UTF8.hjuce_CharacterFunctions.cppjuce_CharacterFunctions.hjuce_Identifier.cppjuce_Identifier.hjuce_LocalisedStrings.cppjuce_LocalisedStrings.hjuce_NewLine.hjuce_String.cppjuce_String.hjuce_StringArray.cppjuce_StringArray.hjuce_StringPairArray.cppjuce_StringPairArray.hjuce_StringPool.cppjuce_StringPool.hjuce_StringRef.hjuce_TextDiff.cppjuce_TextDiff.h
threads
juce_ChildProcess.cppjuce_ChildProcess.hjuce_CriticalSection.hjuce_DynamicLibrary.hjuce_HighResolutionTimer.cppjuce_HighResolutionTimer.hjuce_InterProcessLock.hjuce_Process.hjuce_ReadWriteLock.cppjuce_ReadWriteLock.hjuce_ScopedLock.hjuce_ScopedReadLock.hjuce_ScopedWriteLock.hjuce_SpinLock.hjuce_Thread.cppjuce_Thread.hjuce_ThreadLocalValue.hjuce_ThreadPool.cppjuce_ThreadPool.hjuce_TimeSliceThread.cppjuce_TimeSliceThread.hjuce_WaitableEvent.cppjuce_WaitableEvent.h
time
juce_PerformanceCounter.cppjuce_PerformanceCounter.hjuce_RelativeTime.cppjuce_RelativeTime.hjuce_Time.cppjuce_Time.h
unit_tests
xml
zip
juce_cryptography
juce_data_structures
app_properties
juce_ApplicationProperties.cppjuce_ApplicationProperties.hjuce_PropertiesFile.cppjuce_PropertiesFile.h
juce_data_structures.cppjuce_data_structures.hjuce_data_structures.mmundomanager
values
juce_dsp
containers
juce_AudioBlock.hjuce_AudioBlock_test.cppjuce_FixedSizeFunction.hjuce_FixedSizeFunction_test.cppjuce_SIMDRegister.hjuce_SIMDRegister_Impl.hjuce_SIMDRegister_test.cpp
filter_design
frequency
juce_Convolution.cppjuce_Convolution.hjuce_Convolution_test.cppjuce_FFT.cppjuce_FFT.hjuce_FFT_test.cppjuce_Windowing.cppjuce_Windowing.h
juce_dsp.cppjuce_dsp.hjuce_dsp.mmmaths
juce_FastMathApproximations.hjuce_LogRampedValue.hjuce_LogRampedValue_test.cppjuce_LookupTable.cppjuce_LookupTable.hjuce_Matrix.cppjuce_Matrix.hjuce_Matrix_test.cppjuce_Phase.hjuce_Polynomial.hjuce_SpecialFunctions.cppjuce_SpecialFunctions.h
native
juce_avx_SIMDNativeOps.cppjuce_avx_SIMDNativeOps.hjuce_fallback_SIMDNativeOps.hjuce_neon_SIMDNativeOps.cppjuce_neon_SIMDNativeOps.hjuce_sse_SIMDNativeOps.cppjuce_sse_SIMDNativeOps.h
processors
juce_BallisticsFilter.cppjuce_BallisticsFilter.hjuce_DelayLine.cppjuce_DelayLine.hjuce_DryWetMixer.cppjuce_DryWetMixer.hjuce_FIRFilter.cppjuce_FIRFilter.hjuce_FIRFilter_test.cppjuce_FirstOrderTPTFilter.cppjuce_FirstOrderTPTFilter.hjuce_IIRFilter.cppjuce_IIRFilter.hjuce_IIRFilter_Impl.hjuce_LinkwitzRileyFilter.cppjuce_LinkwitzRileyFilter.hjuce_Oversampling.cppjuce_Oversampling.hjuce_Panner.cppjuce_Panner.hjuce_ProcessContext.hjuce_ProcessorChain.hjuce_ProcessorChain_test.cppjuce_ProcessorDuplicator.hjuce_ProcessorWrapper.hjuce_StateVariableFilter.hjuce_StateVariableTPTFilter.cppjuce_StateVariableTPTFilter.h
widgets
juce_events
broadcasters
juce_ActionBroadcaster.cppjuce_ActionBroadcaster.hjuce_ActionListener.hjuce_AsyncUpdater.cppjuce_AsyncUpdater.hjuce_ChangeBroadcaster.cppjuce_ChangeBroadcaster.hjuce_ChangeListener.h
interprocess
juce_ConnectedChildProcess.cppjuce_ConnectedChildProcess.hjuce_InterprocessConnection.cppjuce_InterprocessConnection.hjuce_InterprocessConnectionServer.cppjuce_InterprocessConnectionServer.hjuce_NetworkServiceDiscovery.cppjuce_NetworkServiceDiscovery.h
juce_events.cppjuce_events.hjuce_events.mmmessages
juce_ApplicationBase.cppjuce_ApplicationBase.hjuce_CallbackMessage.hjuce_DeletedAtShutdown.cppjuce_DeletedAtShutdown.hjuce_Initialisation.hjuce_Message.hjuce_MessageListener.cppjuce_MessageListener.hjuce_MessageManager.cppjuce_MessageManager.hjuce_MountedVolumeListChangeDetector.hjuce_NotificationType.h
native
juce_ScopedLowPowerModeDisabler.cppjuce_ScopedLowPowerModeDisabler.hjuce_android_Messaging.cppjuce_ios_MessageManager.mmjuce_linux_EventLoop.hjuce_linux_Messaging.cppjuce_mac_MessageManager.mmjuce_osx_MessageQueue.hjuce_win32_HiddenMessageWindow.hjuce_win32_Messaging.cppjuce_win32_WinRTWrapper.cppjuce_win32_WinRTWrapper.h
timers
juce_graphics
colour
juce_Colour.cppjuce_Colour.hjuce_ColourGradient.cppjuce_ColourGradient.hjuce_Colours.cppjuce_Colours.hjuce_FillType.cppjuce_FillType.hjuce_PixelFormats.h
contexts
juce_GraphicsContext.cppjuce_GraphicsContext.hjuce_LowLevelGraphicsContext.hjuce_LowLevelGraphicsPostScriptRenderer.cppjuce_LowLevelGraphicsPostScriptRenderer.hjuce_LowLevelGraphicsSoftwareRenderer.cppjuce_LowLevelGraphicsSoftwareRenderer.h
effects
juce_DropShadowEffect.cppjuce_DropShadowEffect.hjuce_GlowEffect.cppjuce_GlowEffect.hjuce_ImageEffectFilter.h
fonts
juce_AttributedString.cppjuce_AttributedString.hjuce_CustomTypeface.cppjuce_CustomTypeface.hjuce_Font.cppjuce_Font.hjuce_GlyphArrangement.cppjuce_GlyphArrangement.hjuce_TextLayout.cppjuce_TextLayout.hjuce_Typeface.cppjuce_Typeface.h
geometry
juce_AffineTransform.cppjuce_AffineTransform.hjuce_BorderSize.hjuce_EdgeTable.cppjuce_EdgeTable.hjuce_Line.hjuce_Parallelogram.hjuce_Path.cppjuce_Path.hjuce_PathIterator.cppjuce_PathIterator.hjuce_PathStrokeType.cppjuce_PathStrokeType.hjuce_Point.hjuce_Rectangle.hjuce_RectangleList.h
image_formats
jpglib
READMEcderror.hchanges to libjpeg for JUCE.txtjcapimin.cjcapistd.cjccoefct.cjccolor.cjcdctmgr.cjchuff.cjchuff.hjcinit.cjcmainct.cjcmarker.cjcmaster.cjcomapi.cjconfig.hjcparam.cjcphuff.cjcprepct.cjcsample.cjctrans.cjdapimin.cjdapistd.cjdatasrc.cjdcoefct.cjdcolor.cjdct.hjddctmgr.cjdhuff.cjdhuff.hjdinput.cjdmainct.cjdmarker.cjdmaster.cjdmerge.cjdphuff.cjdpostct.cjdsample.cjdtrans.cjerror.cjerror.hjfdctflt.cjfdctfst.cjfdctint.cjidctflt.cjidctfst.cjidctint.cjidctred.cjinclude.hjmemmgr.cjmemnobs.cjmemsys.hjmorecfg.hjpegint.hjpeglib.hjquant1.cjquant2.cjutils.cjversion.htransupp.ctransupp.h
juce_GIFLoader.cppjuce_JPEGLoader.cppjuce_PNGLoader.cpppnglib
images
juce_Image.cppjuce_Image.hjuce_ImageCache.cppjuce_ImageCache.hjuce_ImageConvolutionKernel.cppjuce_ImageConvolutionKernel.hjuce_ImageFileFormat.cppjuce_ImageFileFormat.h
juce_graphics.cppjuce_graphics.hjuce_graphics.mmnative
juce_RenderingHelpers.hjuce_android_Fonts.cppjuce_android_GraphicsContext.cppjuce_android_IconHelpers.cppjuce_freetype_Fonts.cppjuce_linux_Fonts.cppjuce_linux_IconHelpers.cppjuce_mac_CoreGraphicsContext.hjuce_mac_CoreGraphicsContext.mmjuce_mac_CoreGraphicsHelpers.hjuce_mac_Fonts.mmjuce_mac_IconHelpers.cppjuce_win32_Direct2DGraphicsContext.cppjuce_win32_Direct2DGraphicsContext.hjuce_win32_DirectWriteTypeLayout.cppjuce_win32_DirectWriteTypeface.cppjuce_win32_Fonts.cppjuce_win32_IconHelpers.cpp
placement
juce_gui_basics
accessibility
enums
interfaces
juce_AccessibilityCellInterface.hjuce_AccessibilityTableInterface.hjuce_AccessibilityTextInterface.hjuce_AccessibilityValueInterface.h
juce_AccessibilityHandler.cppjuce_AccessibilityHandler.hjuce_AccessibilityState.happlication
buttons
juce_ArrowButton.cppjuce_ArrowButton.hjuce_Button.cppjuce_Button.hjuce_DrawableButton.cppjuce_DrawableButton.hjuce_HyperlinkButton.cppjuce_HyperlinkButton.hjuce_ImageButton.cppjuce_ImageButton.hjuce_ShapeButton.cppjuce_ShapeButton.hjuce_TextButton.cppjuce_TextButton.hjuce_ToggleButton.cppjuce_ToggleButton.hjuce_ToolbarButton.cppjuce_ToolbarButton.h
commands
juce_ApplicationCommandID.hjuce_ApplicationCommandInfo.cppjuce_ApplicationCommandInfo.hjuce_ApplicationCommandManager.cppjuce_ApplicationCommandManager.hjuce_ApplicationCommandTarget.cppjuce_ApplicationCommandTarget.hjuce_KeyPressMappingSet.cppjuce_KeyPressMappingSet.h
components
juce_CachedComponentImage.hjuce_Component.cppjuce_Component.hjuce_ComponentListener.cppjuce_ComponentListener.hjuce_ComponentTraverser.hjuce_FocusTraverser.cppjuce_FocusTraverser.hjuce_ModalComponentManager.cppjuce_ModalComponentManager.h
desktop
drawables
juce_Drawable.cppjuce_Drawable.hjuce_DrawableComposite.cppjuce_DrawableComposite.hjuce_DrawableImage.cppjuce_DrawableImage.hjuce_DrawablePath.cppjuce_DrawablePath.hjuce_DrawableRectangle.cppjuce_DrawableRectangle.hjuce_DrawableShape.cppjuce_DrawableShape.hjuce_DrawableText.cppjuce_DrawableText.hjuce_SVGParser.cpp
filebrowser
juce_ContentSharer.cppjuce_ContentSharer.hjuce_DirectoryContentsDisplayComponent.cppjuce_DirectoryContentsDisplayComponent.hjuce_DirectoryContentsList.cppjuce_DirectoryContentsList.hjuce_FileBrowserComponent.cppjuce_FileBrowserComponent.hjuce_FileBrowserListener.hjuce_FileChooser.cppjuce_FileChooser.hjuce_FileChooserDialogBox.cppjuce_FileChooserDialogBox.hjuce_FileListComponent.cppjuce_FileListComponent.hjuce_FilePreviewComponent.hjuce_FileSearchPathListComponent.cppjuce_FileSearchPathListComponent.hjuce_FileTreeComponent.cppjuce_FileTreeComponent.hjuce_FilenameComponent.cppjuce_FilenameComponent.hjuce_ImagePreviewComponent.cppjuce_ImagePreviewComponent.h
juce_gui_basics.cppjuce_gui_basics.hjuce_gui_basics.mmkeyboard
juce_CaretComponent.cppjuce_CaretComponent.hjuce_KeyListener.cppjuce_KeyListener.hjuce_KeyPress.cppjuce_KeyPress.hjuce_KeyboardFocusTraverser.cppjuce_KeyboardFocusTraverser.hjuce_ModifierKeys.cppjuce_ModifierKeys.hjuce_SystemClipboard.hjuce_TextEditorKeyMapper.hjuce_TextInputTarget.h
layout
juce_AnimatedPosition.hjuce_AnimatedPositionBehaviours.hjuce_ComponentAnimator.cppjuce_ComponentAnimator.hjuce_ComponentBoundsConstrainer.cppjuce_ComponentBoundsConstrainer.hjuce_ComponentBuilder.cppjuce_ComponentBuilder.hjuce_ComponentMovementWatcher.cppjuce_ComponentMovementWatcher.hjuce_ConcertinaPanel.cppjuce_ConcertinaPanel.hjuce_FlexBox.cppjuce_FlexBox.hjuce_FlexItem.hjuce_Grid.cppjuce_Grid.hjuce_GridItem.cppjuce_GridItem.hjuce_GroupComponent.cppjuce_GroupComponent.hjuce_MultiDocumentPanel.cppjuce_MultiDocumentPanel.hjuce_ResizableBorderComponent.cppjuce_ResizableBorderComponent.hjuce_ResizableCornerComponent.cppjuce_ResizableCornerComponent.hjuce_ResizableEdgeComponent.cppjuce_ResizableEdgeComponent.hjuce_ScrollBar.cppjuce_ScrollBar.hjuce_SidePanel.cppjuce_SidePanel.hjuce_StretchableLayoutManager.cppjuce_StretchableLayoutManager.hjuce_StretchableLayoutResizerBar.cppjuce_StretchableLayoutResizerBar.hjuce_StretchableObjectResizer.cppjuce_StretchableObjectResizer.hjuce_TabbedButtonBar.cppjuce_TabbedButtonBar.hjuce_TabbedComponent.cppjuce_TabbedComponent.hjuce_Viewport.cppjuce_Viewport.h
lookandfeel
juce_LookAndFeel.cppjuce_LookAndFeel.hjuce_LookAndFeel_V1.cppjuce_LookAndFeel_V1.hjuce_LookAndFeel_V2.cppjuce_LookAndFeel_V2.hjuce_LookAndFeel_V3.cppjuce_LookAndFeel_V3.hjuce_LookAndFeel_V4.cppjuce_LookAndFeel_V4.h
menus
juce_BurgerMenuComponent.cppjuce_BurgerMenuComponent.hjuce_MenuBarComponent.cppjuce_MenuBarComponent.hjuce_MenuBarModel.cppjuce_MenuBarModel.hjuce_PopupMenu.cppjuce_PopupMenu.h
misc
juce_BubbleComponent.cppjuce_BubbleComponent.hjuce_DropShadower.cppjuce_DropShadower.hjuce_JUCESplashScreen.cppjuce_JUCESplashScreen.h
mouse
juce_ComponentDragger.cppjuce_ComponentDragger.hjuce_DragAndDropContainer.cppjuce_DragAndDropContainer.hjuce_DragAndDropTarget.hjuce_FileDragAndDropTarget.hjuce_LassoComponent.hjuce_MouseCursor.cppjuce_MouseCursor.hjuce_MouseEvent.cppjuce_MouseEvent.hjuce_MouseInactivityDetector.cppjuce_MouseInactivityDetector.hjuce_MouseInputSource.cppjuce_MouseInputSource.hjuce_MouseListener.cppjuce_MouseListener.hjuce_SelectedItemSet.hjuce_TextDragAndDropTarget.hjuce_TooltipClient.h
native
accessibility
juce_AccessibilityTextHelpers.hjuce_android_Accessibility.cppjuce_ios_Accessibility.mmjuce_mac_Accessibility.mmjuce_mac_AccessibilitySharedCode.mmjuce_win32_Accessibility.cppjuce_win32_AccessibilityElement.cppjuce_win32_AccessibilityElement.hjuce_win32_UIAExpandCollapseProvider.hjuce_win32_UIAGridItemProvider.hjuce_win32_UIAGridProvider.hjuce_win32_UIAHelpers.hjuce_win32_UIAInvokeProvider.hjuce_win32_UIAProviderBase.hjuce_win32_UIAProviders.hjuce_win32_UIARangeValueProvider.hjuce_win32_UIASelectionProvider.hjuce_win32_UIATextProvider.hjuce_win32_UIAToggleProvider.hjuce_win32_UIATransformProvider.hjuce_win32_UIAValueProvider.hjuce_win32_UIAWindowProvider.hjuce_win32_WindowsUIAWrapper.h
java
app
javaopt
app
x11
positioning
juce_MarkerList.cppjuce_MarkerList.hjuce_RelativeCoordinate.cppjuce_RelativeCoordinate.hjuce_RelativeCoordinatePositioner.cppjuce_RelativeCoordinatePositioner.hjuce_RelativeParallelogram.cppjuce_RelativeParallelogram.hjuce_RelativePoint.cppjuce_RelativePoint.hjuce_RelativePointPath.cppjuce_RelativePointPath.hjuce_RelativeRectangle.cppjuce_RelativeRectangle.h
properties
juce_BooleanPropertyComponent.cppjuce_BooleanPropertyComponent.hjuce_ButtonPropertyComponent.cppjuce_ButtonPropertyComponent.hjuce_ChoicePropertyComponent.cppjuce_ChoicePropertyComponent.hjuce_MultiChoicePropertyComponent.cppjuce_MultiChoicePropertyComponent.hjuce_PropertyComponent.cppjuce_PropertyComponent.hjuce_PropertyPanel.cppjuce_PropertyPanel.hjuce_SliderPropertyComponent.cppjuce_SliderPropertyComponent.hjuce_TextPropertyComponent.cppjuce_TextPropertyComponent.h
widgets
juce_ComboBox.cppjuce_ComboBox.hjuce_ImageComponent.cppjuce_ImageComponent.hjuce_Label.cppjuce_Label.hjuce_ListBox.cppjuce_ListBox.cpp.rejjuce_ListBox.hjuce_ProgressBar.cppjuce_ProgressBar.hjuce_Slider.cppjuce_Slider.hjuce_TableHeaderComponent.cppjuce_TableHeaderComponent.hjuce_TableListBox.cppjuce_TableListBox.hjuce_TextEditor.cppjuce_TextEditor.hjuce_Toolbar.cppjuce_Toolbar.hjuce_ToolbarItemComponent.cppjuce_ToolbarItemComponent.hjuce_ToolbarItemFactory.hjuce_ToolbarItemPalette.cppjuce_ToolbarItemPalette.hjuce_TreeView.cppjuce_TreeView.h
windows
juce_AlertWindow.cppjuce_AlertWindow.hjuce_CallOutBox.cppjuce_CallOutBox.hjuce_ComponentPeer.cppjuce_ComponentPeer.hjuce_DialogWindow.cppjuce_DialogWindow.hjuce_DocumentWindow.cppjuce_DocumentWindow.hjuce_MessageBoxOptions.hjuce_NativeMessageBox.hjuce_ResizableWindow.cppjuce_ResizableWindow.hjuce_ThreadWithProgressWindow.cppjuce_ThreadWithProgressWindow.hjuce_TooltipWindow.cppjuce_TooltipWindow.hjuce_TopLevelWindow.cppjuce_TopLevelWindow.h
juce_gui_extra
code_editor
juce_CPlusPlusCodeTokeniser.cppjuce_CPlusPlusCodeTokeniser.hjuce_CPlusPlusCodeTokeniserFunctions.hjuce_CodeDocument.cppjuce_CodeDocument.hjuce_CodeEditorComponent.cppjuce_CodeEditorComponent.hjuce_CodeTokeniser.hjuce_LuaCodeTokeniser.cppjuce_LuaCodeTokeniser.hjuce_XMLCodeTokeniser.cppjuce_XMLCodeTokeniser.h
documents
embedding
juce_ActiveXControlComponent.hjuce_AndroidViewComponent.hjuce_HWNDComponent.hjuce_NSViewComponent.hjuce_UIViewComponent.hjuce_XEmbedComponent.h
juce_gui_extra.cppjuce_gui_extra.hjuce_gui_extra.mmmisc
juce_AnimatedAppComponent.cppjuce_AnimatedAppComponent.hjuce_AppleRemote.hjuce_BubbleMessageComponent.cppjuce_BubbleMessageComponent.hjuce_ColourSelector.cppjuce_ColourSelector.hjuce_KeyMappingEditorComponent.cppjuce_KeyMappingEditorComponent.hjuce_LiveConstantEditor.cppjuce_LiveConstantEditor.hjuce_PreferencesPanel.cppjuce_PreferencesPanel.hjuce_PushNotifications.cppjuce_PushNotifications.hjuce_RecentlyOpenedFilesList.cppjuce_RecentlyOpenedFilesList.hjuce_SplashScreen.cppjuce_SplashScreen.hjuce_SystemTrayIconComponent.cppjuce_SystemTrayIconComponent.hjuce_WebBrowserComponent.h
native
java
app
com
javaopt
juce_AndroidViewComponent.cppjuce_android_PushNotifications.cppjuce_android_WebBrowserComponent.cppjuce_ios_PushNotifications.cppjuce_ios_UIViewComponent.mmjuce_linux_X11_SystemTrayIcon.cppjuce_linux_X11_WebBrowserComponent.cppjuce_linux_XEmbedComponent.cppjuce_mac_AppleRemote.mmjuce_mac_CarbonViewWrapperComponent.hjuce_mac_NSViewComponent.mmjuce_mac_PushNotifications.cppjuce_mac_SystemTrayIcon.cppjuce_mac_WebBrowserComponent.mmjuce_win32_ActiveXComponent.cppjuce_win32_HWNDComponent.cppjuce_win32_SystemTrayIcon.cppjuce_win32_WebBrowserComponent.cppjuce_opengl
geometry
juce_opengl.cppjuce_opengl.hjuce_opengl.mmnative
java
app
com
rmsl
opengl
juce_OpenGLContext.cppjuce_OpenGLContext.hjuce_OpenGLContext.h.rejjuce_OpenGLFrameBuffer.cppjuce_OpenGLFrameBuffer.hjuce_OpenGLGraphicsContext.cppjuce_OpenGLGraphicsContext.hjuce_OpenGLHelpers.cppjuce_OpenGLHelpers.hjuce_OpenGLImage.cppjuce_OpenGLImage.hjuce_OpenGLPixelFormat.cppjuce_OpenGLPixelFormat.hjuce_OpenGLRenderer.hjuce_OpenGLShaderProgram.cppjuce_OpenGLShaderProgram.hjuce_OpenGLTexture.cppjuce_OpenGLTexture.hjuce_gl.cppjuce_gl.hjuce_gles2.cppjuce_gles2.hjuce_khrplatform.hjuce_wgl.h
utils
juce_osc
juce_product_unlocking
in_app_purchases
juce_product_unlocking.cppjuce_product_unlocking.hjuce_product_unlocking.mmmarketplace
juce_KeyFileGeneration.hjuce_OnlineUnlockForm.cppjuce_OnlineUnlockForm.hjuce_OnlineUnlockStatus.cppjuce_OnlineUnlockStatus.hjuce_TracktionMarketplaceStatus.cppjuce_TracktionMarketplaceStatus.h
native
juce_video
54
deps/juce/modules/juce_events/native/juce_ScopedLowPowerModeDisabler.cpp
vendored
Normal file
54
deps/juce/modules/juce_events/native/juce_ScopedLowPowerModeDisabler.cpp
vendored
Normal file
@ -0,0 +1,54 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2020 - Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
|
||||
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.
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
namespace juce
|
||||
{
|
||||
|
||||
#if JUCE_MAC
|
||||
|
||||
class ScopedLowPowerModeDisabler::Pimpl
|
||||
{
|
||||
public:
|
||||
Pimpl() = default;
|
||||
~Pimpl() { [[NSProcessInfo processInfo] endActivity: activity]; }
|
||||
|
||||
private:
|
||||
id activity { [[NSProcessInfo processInfo] beginActivityWithOptions: NSActivityUserInitiatedAllowingIdleSystemSleep
|
||||
reason: @"App must remain in high-power mode"] };
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE (Pimpl)
|
||||
JUCE_DECLARE_NON_MOVEABLE (Pimpl)
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
class ScopedLowPowerModeDisabler::Pimpl {};
|
||||
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
ScopedLowPowerModeDisabler::ScopedLowPowerModeDisabler()
|
||||
: pimpl (std::make_unique<Pimpl>()) {}
|
||||
|
||||
ScopedLowPowerModeDisabler::~ScopedLowPowerModeDisabler() = default;
|
||||
|
||||
} // namespace juce
|
49
deps/juce/modules/juce_events/native/juce_ScopedLowPowerModeDisabler.h
vendored
Normal file
49
deps/juce/modules/juce_events/native/juce_ScopedLowPowerModeDisabler.h
vendored
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2020 - Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
|
||||
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.
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
namespace juce
|
||||
{
|
||||
|
||||
//==============================================================================
|
||||
/**
|
||||
Disables low-power-mode for the duration of an instance's lifetime.
|
||||
|
||||
Currently this is only implemented on macOS, where it will disable the
|
||||
"App Nap" power-saving feature.
|
||||
|
||||
@tags{Events}
|
||||
*/
|
||||
class ScopedLowPowerModeDisabler
|
||||
{
|
||||
public:
|
||||
ScopedLowPowerModeDisabler();
|
||||
~ScopedLowPowerModeDisabler();
|
||||
|
||||
private:
|
||||
class Pimpl;
|
||||
std::unique_ptr<Pimpl> pimpl;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE (ScopedLowPowerModeDisabler)
|
||||
JUCE_DECLARE_NON_MOVEABLE (ScopedLowPowerModeDisabler)
|
||||
};
|
||||
|
||||
} // namespace juce
|
301
deps/juce/modules/juce_events/native/juce_android_Messaging.cpp
vendored
Normal file
301
deps/juce/modules/juce_events/native/juce_android_Messaging.cpp
vendored
Normal file
@ -0,0 +1,301 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2020 - Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
|
||||
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.
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
namespace juce
|
||||
{
|
||||
|
||||
//==============================================================================
|
||||
namespace Android
|
||||
{
|
||||
class Runnable : public juce::AndroidInterfaceImplementer
|
||||
{
|
||||
public:
|
||||
virtual void run() = 0;
|
||||
|
||||
private:
|
||||
jobject invoke (jobject proxy, jobject method, jobjectArray args) override
|
||||
{
|
||||
auto* env = getEnv();
|
||||
auto methodName = juce::juceString ((jstring) env->CallObjectMethod (method, JavaMethod.getName));
|
||||
|
||||
if (methodName == "run")
|
||||
{
|
||||
run();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// invoke base class
|
||||
return AndroidInterfaceImplementer::invoke (proxy, method, args);
|
||||
}
|
||||
};
|
||||
|
||||
struct Handler
|
||||
{
|
||||
Handler() : nativeHandler (LocalRef<jobject> (getEnv()->NewObject (AndroidHandler, AndroidHandler.constructor))) {}
|
||||
~Handler() { clearSingletonInstance(); }
|
||||
|
||||
JUCE_DECLARE_SINGLETON (Handler, false)
|
||||
|
||||
bool post (jobject runnable)
|
||||
{
|
||||
return (getEnv()->CallBooleanMethod (nativeHandler.get(), AndroidHandler.post, runnable) != 0);
|
||||
}
|
||||
|
||||
GlobalRef nativeHandler;
|
||||
};
|
||||
|
||||
JUCE_IMPLEMENT_SINGLETON (Handler)
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
struct AndroidMessageQueue : private Android::Runnable
|
||||
{
|
||||
JUCE_DECLARE_SINGLETON_SINGLETHREADED (AndroidMessageQueue, true)
|
||||
|
||||
AndroidMessageQueue()
|
||||
: self (CreateJavaInterface (this, "java/lang/Runnable"))
|
||||
{
|
||||
}
|
||||
|
||||
~AndroidMessageQueue() override
|
||||
{
|
||||
JUCE_ASSERT_MESSAGE_THREAD
|
||||
clearSingletonInstance();
|
||||
}
|
||||
|
||||
bool post (MessageManager::MessageBase::Ptr&& message)
|
||||
{
|
||||
queue.add (std::move (message));
|
||||
|
||||
// this will call us on the message thread
|
||||
return handler.post (self.get());
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
void run() override
|
||||
{
|
||||
for (;;)
|
||||
{
|
||||
MessageManager::MessageBase::Ptr message (queue.removeAndReturn (0));
|
||||
|
||||
if (message == nullptr)
|
||||
break;
|
||||
|
||||
message->messageCallback();
|
||||
}
|
||||
}
|
||||
|
||||
// the this pointer to this class in Java land
|
||||
GlobalRef self;
|
||||
|
||||
ReferenceCountedArray<MessageManager::MessageBase, CriticalSection> queue;
|
||||
Android::Handler handler;
|
||||
};
|
||||
|
||||
JUCE_IMPLEMENT_SINGLETON (AndroidMessageQueue)
|
||||
|
||||
//==============================================================================
|
||||
void MessageManager::doPlatformSpecificInitialisation() { AndroidMessageQueue::getInstance(); }
|
||||
void MessageManager::doPlatformSpecificShutdown() { AndroidMessageQueue::deleteInstance(); }
|
||||
|
||||
bool MessageManager::postMessageToSystemQueue (MessageManager::MessageBase* const message)
|
||||
{
|
||||
return AndroidMessageQueue::getInstance()->post (message);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void MessageManager::broadcastMessage (const String&)
|
||||
{
|
||||
}
|
||||
|
||||
void MessageManager::runDispatchLoop()
|
||||
{
|
||||
}
|
||||
|
||||
void MessageManager::stopDispatchLoop()
|
||||
{
|
||||
struct QuitCallback : public CallbackMessage
|
||||
{
|
||||
QuitCallback() {}
|
||||
|
||||
void messageCallback() override
|
||||
{
|
||||
auto* env = getEnv();
|
||||
LocalRef<jobject> activity (getCurrentActivity());
|
||||
|
||||
if (activity != nullptr)
|
||||
{
|
||||
jmethodID quitMethod = env->GetMethodID (AndroidActivity, "finishAndRemoveTask", "()V");
|
||||
|
||||
if (quitMethod != nullptr)
|
||||
{
|
||||
env->CallVoidMethod (activity.get(), quitMethod);
|
||||
return;
|
||||
}
|
||||
|
||||
quitMethod = env->GetMethodID (AndroidActivity, "finish", "()V");
|
||||
jassert (quitMethod != nullptr);
|
||||
env->CallVoidMethod (activity.get(), quitMethod);
|
||||
}
|
||||
else
|
||||
{
|
||||
jassertfalse;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
(new QuitCallback())->post();
|
||||
quitMessagePosted = true;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
class JuceAppLifecycle : public ActivityLifecycleCallbacks
|
||||
{
|
||||
public:
|
||||
JuceAppLifecycle (juce::JUCEApplicationBase* (*initSymbolAddr)())
|
||||
: createApplicationSymbol (initSymbolAddr)
|
||||
{
|
||||
LocalRef<jobject> appContext (getAppContext());
|
||||
|
||||
if (appContext != nullptr)
|
||||
{
|
||||
auto* env = getEnv();
|
||||
|
||||
myself = GlobalRef (CreateJavaInterface (this, "android/app/Application$ActivityLifecycleCallbacks"));
|
||||
env->CallVoidMethod (appContext.get(), AndroidApplication.registerActivityLifecycleCallbacks, myself.get());
|
||||
}
|
||||
}
|
||||
|
||||
~JuceAppLifecycle() override
|
||||
{
|
||||
LocalRef<jobject> appContext (getAppContext());
|
||||
|
||||
if (appContext != nullptr && myself != nullptr)
|
||||
{
|
||||
auto* env = getEnv();
|
||||
|
||||
clear();
|
||||
env->CallVoidMethod (appContext.get(), AndroidApplication.unregisterActivityLifecycleCallbacks, myself.get());
|
||||
myself.clear();
|
||||
}
|
||||
}
|
||||
|
||||
void onActivityCreated (jobject, jobject) override
|
||||
{
|
||||
checkCreated();
|
||||
}
|
||||
|
||||
void onActivityDestroyed (jobject activity) override
|
||||
{
|
||||
auto* env = getEnv();
|
||||
|
||||
// if the main activity is being destroyed, only then tear-down JUCE
|
||||
if (env->IsSameObject (getMainActivity().get(), activity) != 0)
|
||||
{
|
||||
JUCEApplicationBase::appWillTerminateByForce();
|
||||
JNIClassBase::releaseAllClasses (env);
|
||||
|
||||
jclass systemClass = (jclass) env->FindClass ("java/lang/System");
|
||||
jmethodID exitMethod = env->GetStaticMethodID (systemClass, "exit", "(I)V");
|
||||
env->CallStaticVoidMethod (systemClass, exitMethod, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void onActivityStarted (jobject) override
|
||||
{
|
||||
checkCreated();
|
||||
}
|
||||
|
||||
void onActivityPaused (jobject) override
|
||||
{
|
||||
if (auto* app = JUCEApplicationBase::getInstance())
|
||||
app->suspended();
|
||||
}
|
||||
|
||||
void onActivityResumed (jobject) override
|
||||
{
|
||||
checkInitialised();
|
||||
|
||||
if (auto* app = JUCEApplicationBase::getInstance())
|
||||
app->resumed();
|
||||
}
|
||||
|
||||
static JuceAppLifecycle& getInstance (juce::JUCEApplicationBase* (*initSymbolAddr)())
|
||||
{
|
||||
static JuceAppLifecycle juceAppLifecycle (initSymbolAddr);
|
||||
return juceAppLifecycle;
|
||||
}
|
||||
|
||||
private:
|
||||
void checkCreated()
|
||||
{
|
||||
if (JUCEApplicationBase::getInstance() == nullptr)
|
||||
{
|
||||
DBG (SystemStats::getJUCEVersion());
|
||||
|
||||
JUCEApplicationBase::createInstance = createApplicationSymbol;
|
||||
|
||||
initialiseJuce_GUI();
|
||||
|
||||
if (! JUCEApplicationBase::createInstance())
|
||||
jassertfalse; // you must supply an application object for an android app!
|
||||
|
||||
jassert (MessageManager::getInstance()->isThisTheMessageThread());
|
||||
}
|
||||
}
|
||||
|
||||
void checkInitialised()
|
||||
{
|
||||
checkCreated();
|
||||
|
||||
if (! hasBeenInitialised)
|
||||
{
|
||||
if (auto* app = JUCEApplicationBase::getInstance())
|
||||
{
|
||||
hasBeenInitialised = app->initialiseApp();
|
||||
|
||||
if (! hasBeenInitialised)
|
||||
exit (app->shutdownApp());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GlobalRef myself;
|
||||
juce::JUCEApplicationBase* (*createApplicationSymbol)();
|
||||
bool hasBeenInitialised = false;
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
File juce_getExecutableFile();
|
||||
|
||||
void juce_juceEventsAndroidStartApp()
|
||||
{
|
||||
auto dllPath = juce_getExecutableFile().getFullPathName();
|
||||
auto addr = reinterpret_cast<juce::JUCEApplicationBase*(*)()> (DynamicLibrary (dllPath)
|
||||
.getFunction ("juce_CreateApplication"));
|
||||
|
||||
if (addr != nullptr)
|
||||
JuceAppLifecycle::getInstance (addr);
|
||||
}
|
||||
|
||||
} // namespace juce
|
103
deps/juce/modules/juce_events/native/juce_ios_MessageManager.mm
vendored
Normal file
103
deps/juce/modules/juce_events/native/juce_ios_MessageManager.mm
vendored
Normal file
@ -0,0 +1,103 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2020 - Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
|
||||
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.
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
namespace juce
|
||||
{
|
||||
|
||||
void MessageManager::runDispatchLoop()
|
||||
{
|
||||
jassert (isThisTheMessageThread()); // must only be called by the message thread
|
||||
|
||||
while (quitMessagePosted.get() == 0)
|
||||
{
|
||||
JUCE_AUTORELEASEPOOL
|
||||
{
|
||||
[[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode
|
||||
beforeDate: [NSDate dateWithTimeIntervalSinceNow: 0.001]];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MessageManager::stopDispatchLoop()
|
||||
{
|
||||
if (! SystemStats::isRunningInAppExtensionSandbox())
|
||||
[[[UIApplication sharedApplication] delegate] applicationWillTerminate: [UIApplication sharedApplication]];
|
||||
|
||||
exit (0); // iOS apps get no mercy..
|
||||
}
|
||||
|
||||
#if JUCE_MODAL_LOOPS_PERMITTED
|
||||
bool MessageManager::runDispatchLoopUntil (int millisecondsToRunFor)
|
||||
{
|
||||
JUCE_AUTORELEASEPOOL
|
||||
{
|
||||
jassert (isThisTheMessageThread()); // must only be called by the message thread
|
||||
|
||||
uint32 startTime = Time::getMillisecondCounter();
|
||||
NSDate* endDate = [NSDate dateWithTimeIntervalSinceNow: millisecondsToRunFor * 0.001];
|
||||
|
||||
while (quitMessagePosted.get() == 0)
|
||||
{
|
||||
JUCE_AUTORELEASEPOOL
|
||||
{
|
||||
[[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode
|
||||
beforeDate: endDate];
|
||||
|
||||
if (millisecondsToRunFor >= 0
|
||||
&& Time::getMillisecondCounter() >= startTime + (uint32) millisecondsToRunFor)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return quitMessagePosted.get() == 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
static std::unique_ptr<MessageQueue> messageQueue;
|
||||
|
||||
void MessageManager::doPlatformSpecificInitialisation()
|
||||
{
|
||||
if (messageQueue == nullptr)
|
||||
messageQueue.reset (new MessageQueue());
|
||||
}
|
||||
|
||||
void MessageManager::doPlatformSpecificShutdown()
|
||||
{
|
||||
messageQueue = nullptr;
|
||||
}
|
||||
|
||||
bool MessageManager::postMessageToSystemQueue (MessageManager::MessageBase* const message)
|
||||
{
|
||||
if (messageQueue != nullptr)
|
||||
messageQueue->post (message);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void MessageManager::broadcastMessage (const String&)
|
||||
{
|
||||
// N/A on current iOS
|
||||
}
|
||||
|
||||
} // namespace juce
|
50
deps/juce/modules/juce_events/native/juce_linux_EventLoop.h
vendored
Normal file
50
deps/juce/modules/juce_events/native/juce_linux_EventLoop.h
vendored
Normal file
@ -0,0 +1,50 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2020 - Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
|
||||
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.
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
namespace juce
|
||||
{
|
||||
|
||||
namespace LinuxEventLoop
|
||||
{
|
||||
/** Registers a callback that will be called when a file descriptor is ready for I/O.
|
||||
|
||||
This will add the given file descriptor to the internal set of file descriptors
|
||||
that will be passed to the poll() call. When this file descriptor has data to read
|
||||
the readCallback will be called.
|
||||
|
||||
@param fd the file descriptor to be monitored
|
||||
@param readCallback a callback that will be called when the file descriptor has
|
||||
data to read. The file descriptor will be passed as an argument
|
||||
@param eventMask a bit mask specifying the events you are interested in for the
|
||||
file descriptor. The possible values for this are defined in
|
||||
<poll.h>
|
||||
*/
|
||||
void registerFdCallback (int fd, std::function<void (int)> readCallback, short eventMask = 1 /*POLLIN*/);
|
||||
|
||||
/** Unregisters a previously registered file descriptor.
|
||||
|
||||
@see registerFdCallback
|
||||
*/
|
||||
void unregisterFdCallback (int fd);
|
||||
}
|
||||
|
||||
} // namespace juce
|
336
deps/juce/modules/juce_events/native/juce_linux_Messaging.cpp
vendored
Normal file
336
deps/juce/modules/juce_events/native/juce_linux_Messaging.cpp
vendored
Normal file
@ -0,0 +1,336 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2020 - Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
|
||||
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.
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
namespace juce
|
||||
{
|
||||
|
||||
//==============================================================================
|
||||
class InternalMessageQueue
|
||||
{
|
||||
public:
|
||||
InternalMessageQueue()
|
||||
{
|
||||
auto err = ::socketpair (AF_LOCAL, SOCK_STREAM, 0, msgpipe);
|
||||
jassertquiet (err == 0);
|
||||
|
||||
LinuxEventLoop::registerFdCallback (getReadHandle(),
|
||||
[this] (int fd)
|
||||
{
|
||||
while (auto msg = popNextMessage (fd))
|
||||
{
|
||||
JUCE_TRY
|
||||
{
|
||||
msg->messageCallback();
|
||||
}
|
||||
JUCE_CATCH_EXCEPTION
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
~InternalMessageQueue()
|
||||
{
|
||||
LinuxEventLoop::unregisterFdCallback (getReadHandle());
|
||||
|
||||
close (getReadHandle());
|
||||
close (getWriteHandle());
|
||||
|
||||
clearSingletonInstance();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void postMessage (MessageManager::MessageBase* const msg) noexcept
|
||||
{
|
||||
ScopedLock sl (lock);
|
||||
queue.add (msg);
|
||||
|
||||
if (bytesInSocket < maxBytesInSocketQueue)
|
||||
{
|
||||
bytesInSocket++;
|
||||
|
||||
ScopedUnlock ul (lock);
|
||||
unsigned char x = 0xff;
|
||||
auto numBytes = write (getWriteHandle(), &x, 1);
|
||||
ignoreUnused (numBytes);
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
JUCE_DECLARE_SINGLETON (InternalMessageQueue, false)
|
||||
|
||||
private:
|
||||
CriticalSection lock;
|
||||
ReferenceCountedArray <MessageManager::MessageBase> queue;
|
||||
|
||||
int msgpipe[2];
|
||||
int bytesInSocket = 0;
|
||||
static constexpr int maxBytesInSocketQueue = 128;
|
||||
|
||||
int getWriteHandle() const noexcept { return msgpipe[0]; }
|
||||
int getReadHandle() const noexcept { return msgpipe[1]; }
|
||||
|
||||
MessageManager::MessageBase::Ptr popNextMessage (int fd) noexcept
|
||||
{
|
||||
const ScopedLock sl (lock);
|
||||
|
||||
if (bytesInSocket > 0)
|
||||
{
|
||||
--bytesInSocket;
|
||||
|
||||
ScopedUnlock ul (lock);
|
||||
unsigned char x;
|
||||
auto numBytes = read (fd, &x, 1);
|
||||
ignoreUnused (numBytes);
|
||||
}
|
||||
|
||||
return queue.removeAndReturn (0);
|
||||
}
|
||||
};
|
||||
|
||||
JUCE_IMPLEMENT_SINGLETON (InternalMessageQueue)
|
||||
|
||||
//==============================================================================
|
||||
struct InternalRunLoop
|
||||
{
|
||||
public:
|
||||
InternalRunLoop()
|
||||
{
|
||||
fdReadCallbacks.reserve (16);
|
||||
}
|
||||
|
||||
void registerFdCallback (int fd, std::function<void (int)>&& cb, short eventMask)
|
||||
{
|
||||
const ScopedLock sl (lock);
|
||||
|
||||
if (shouldDeferModifyingReadCallbacks)
|
||||
{
|
||||
deferredReadCallbackModifications.emplace_back ([this, fd, cb, eventMask]() mutable
|
||||
{
|
||||
registerFdCallback (fd, std::move (cb), eventMask);
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
fdReadCallbacks.push_back ({ fd, std::move (cb) });
|
||||
pfds.push_back ({ fd, eventMask, 0 });
|
||||
}
|
||||
|
||||
void unregisterFdCallback (int fd)
|
||||
{
|
||||
const ScopedLock sl (lock);
|
||||
|
||||
if (shouldDeferModifyingReadCallbacks)
|
||||
{
|
||||
deferredReadCallbackModifications.emplace_back ([this, fd] { unregisterFdCallback (fd); });
|
||||
return;
|
||||
}
|
||||
|
||||
{
|
||||
auto removePredicate = [=] (const std::pair<int, std::function<void (int)>>& cb) { return cb.first == fd; };
|
||||
|
||||
fdReadCallbacks.erase (std::remove_if (std::begin (fdReadCallbacks), std::end (fdReadCallbacks), removePredicate),
|
||||
std::end (fdReadCallbacks));
|
||||
}
|
||||
|
||||
{
|
||||
auto removePredicate = [=] (const pollfd& pfd) { return pfd.fd == fd; };
|
||||
|
||||
pfds.erase (std::remove_if (std::begin (pfds), std::end (pfds), removePredicate),
|
||||
std::end (pfds));
|
||||
}
|
||||
}
|
||||
|
||||
bool dispatchPendingEvents()
|
||||
{
|
||||
const ScopedLock sl (lock);
|
||||
|
||||
if (poll (&pfds.front(), static_cast<nfds_t> (pfds.size()), 0) == 0)
|
||||
return false;
|
||||
|
||||
bool eventWasSent = false;
|
||||
|
||||
for (auto& pfd : pfds)
|
||||
{
|
||||
if (pfd.revents == 0)
|
||||
continue;
|
||||
|
||||
pfd.revents = 0;
|
||||
|
||||
auto fd = pfd.fd;
|
||||
|
||||
for (auto& fdAndCallback : fdReadCallbacks)
|
||||
{
|
||||
if (fdAndCallback.first == fd)
|
||||
{
|
||||
{
|
||||
ScopedValueSetter<bool> insideFdReadCallback (shouldDeferModifyingReadCallbacks, true);
|
||||
fdAndCallback.second (fd);
|
||||
}
|
||||
|
||||
if (! deferredReadCallbackModifications.empty())
|
||||
{
|
||||
for (auto& deferredRegisterEvent : deferredReadCallbackModifications)
|
||||
deferredRegisterEvent();
|
||||
|
||||
deferredReadCallbackModifications.clear();
|
||||
|
||||
// elements may have been removed from the fdReadCallbacks/pfds array so we really need
|
||||
// to call poll again
|
||||
return true;
|
||||
}
|
||||
|
||||
eventWasSent = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return eventWasSent;
|
||||
}
|
||||
|
||||
void sleepUntilNextEvent (int timeoutMs)
|
||||
{
|
||||
poll (&pfds.front(), static_cast<nfds_t> (pfds.size()), timeoutMs);
|
||||
}
|
||||
|
||||
std::vector<std::pair<int, std::function<void (int)>>> getFdReadCallbacks()
|
||||
{
|
||||
const ScopedLock sl (lock);
|
||||
return fdReadCallbacks;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
JUCE_DECLARE_SINGLETON (InternalRunLoop, false)
|
||||
|
||||
private:
|
||||
CriticalSection lock;
|
||||
|
||||
std::vector<std::pair<int, std::function<void (int)>>> fdReadCallbacks;
|
||||
std::vector<pollfd> pfds;
|
||||
|
||||
bool shouldDeferModifyingReadCallbacks = false;
|
||||
std::vector<std::function<void()>> deferredReadCallbackModifications;
|
||||
};
|
||||
|
||||
JUCE_IMPLEMENT_SINGLETON (InternalRunLoop)
|
||||
|
||||
//==============================================================================
|
||||
namespace LinuxErrorHandling
|
||||
{
|
||||
static bool keyboardBreakOccurred = false;
|
||||
|
||||
void keyboardBreakSignalHandler (int sig)
|
||||
{
|
||||
if (sig == SIGINT)
|
||||
keyboardBreakOccurred = true;
|
||||
}
|
||||
|
||||
void installKeyboardBreakHandler()
|
||||
{
|
||||
struct sigaction saction;
|
||||
sigset_t maskSet;
|
||||
sigemptyset (&maskSet);
|
||||
saction.sa_handler = keyboardBreakSignalHandler;
|
||||
saction.sa_mask = maskSet;
|
||||
saction.sa_flags = 0;
|
||||
sigaction (SIGINT, &saction, nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void MessageManager::doPlatformSpecificInitialisation()
|
||||
{
|
||||
if (JUCEApplicationBase::isStandaloneApp())
|
||||
LinuxErrorHandling::installKeyboardBreakHandler();
|
||||
|
||||
InternalRunLoop::getInstance();
|
||||
InternalMessageQueue::getInstance();
|
||||
}
|
||||
|
||||
void MessageManager::doPlatformSpecificShutdown()
|
||||
{
|
||||
InternalMessageQueue::deleteInstance();
|
||||
InternalRunLoop::deleteInstance();
|
||||
}
|
||||
|
||||
bool MessageManager::postMessageToSystemQueue (MessageManager::MessageBase* const message)
|
||||
{
|
||||
if (auto* queue = InternalMessageQueue::getInstanceWithoutCreating())
|
||||
{
|
||||
queue->postMessage (message);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void MessageManager::broadcastMessage (const String&)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
// this function expects that it will NEVER be called simultaneously for two concurrent threads
|
||||
bool dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages)
|
||||
{
|
||||
for (;;)
|
||||
{
|
||||
if (LinuxErrorHandling::keyboardBreakOccurred)
|
||||
JUCEApplicationBase::quit();
|
||||
|
||||
if (auto* runLoop = InternalRunLoop::getInstanceWithoutCreating())
|
||||
{
|
||||
if (runLoop->dispatchPendingEvents())
|
||||
break;
|
||||
|
||||
if (returnIfNoPendingMessages)
|
||||
return false;
|
||||
|
||||
runLoop->sleepUntilNextEvent (2000);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void LinuxEventLoop::registerFdCallback (int fd, std::function<void (int)> readCallback, short eventMask)
|
||||
{
|
||||
if (auto* runLoop = InternalRunLoop::getInstanceWithoutCreating())
|
||||
runLoop->registerFdCallback (fd, std::move (readCallback), eventMask);
|
||||
}
|
||||
|
||||
void LinuxEventLoop::unregisterFdCallback (int fd)
|
||||
{
|
||||
if (auto* runLoop = InternalRunLoop::getInstanceWithoutCreating())
|
||||
runLoop->unregisterFdCallback (fd);
|
||||
}
|
||||
|
||||
} // namespace juce
|
||||
|
||||
JUCE_API std::vector<std::pair<int, std::function<void (int)>>> getFdReadCallbacks()
|
||||
{
|
||||
using namespace juce;
|
||||
|
||||
if (auto* runLoop = InternalRunLoop::getInstanceWithoutCreating())
|
||||
return runLoop->getFdReadCallbacks();
|
||||
|
||||
jassertfalse;
|
||||
return {};
|
||||
}
|
539
deps/juce/modules/juce_events/native/juce_mac_MessageManager.mm
vendored
Normal file
539
deps/juce/modules/juce_events/native/juce_mac_MessageManager.mm
vendored
Normal file
@ -0,0 +1,539 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2020 - Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
|
||||
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.
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
namespace juce
|
||||
{
|
||||
|
||||
using AppFocusChangeCallback = void (*)();
|
||||
AppFocusChangeCallback appFocusChangeCallback = nullptr;
|
||||
|
||||
using CheckEventBlockedByModalComps = bool (*)(NSEvent*);
|
||||
CheckEventBlockedByModalComps isEventBlockedByModalComps = nullptr;
|
||||
|
||||
using MenuTrackingChangedCallback = void (*)(bool);
|
||||
MenuTrackingChangedCallback menuTrackingChangedCallback = nullptr;
|
||||
|
||||
//==============================================================================
|
||||
struct AppDelegateClass : public ObjCClass<NSObject>
|
||||
{
|
||||
AppDelegateClass() : ObjCClass<NSObject> ("JUCEAppDelegate_")
|
||||
{
|
||||
addMethod (@selector (applicationWillFinishLaunching:), applicationWillFinishLaunching, "v@:@");
|
||||
addMethod (@selector (applicationShouldTerminate:), applicationShouldTerminate, "I@:@");
|
||||
addMethod (@selector (applicationWillTerminate:), applicationWillTerminate, "v@:@");
|
||||
addMethod (@selector (application:openFile:), application_openFile, "c@:@@");
|
||||
addMethod (@selector (application:openFiles:), application_openFiles, "v@:@@");
|
||||
addMethod (@selector (applicationDidBecomeActive:), applicationDidBecomeActive, "v@:@");
|
||||
addMethod (@selector (applicationDidResignActive:), applicationDidResignActive, "v@:@");
|
||||
addMethod (@selector (applicationWillUnhide:), applicationWillUnhide, "v@:@");
|
||||
|
||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wundeclared-selector")
|
||||
addMethod (@selector (getUrl:withReplyEvent:), getUrl_withReplyEvent, "v@:@@");
|
||||
addMethod (@selector (broadcastMessageCallback:), broadcastMessageCallback, "v@:@");
|
||||
addMethod (@selector (mainMenuTrackingBegan:), mainMenuTrackingBegan, "v@:@");
|
||||
addMethod (@selector (mainMenuTrackingEnded:), mainMenuTrackingEnded, "v@:@");
|
||||
addMethod (@selector (dummyMethod), dummyMethod, "v@:");
|
||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
|
||||
|
||||
#if JUCE_PUSH_NOTIFICATIONS
|
||||
//==============================================================================
|
||||
addIvar<NSObject<NSApplicationDelegate, NSUserNotificationCenterDelegate>*> ("pushNotificationsDelegate");
|
||||
|
||||
addMethod (@selector (applicationDidFinishLaunching:), applicationDidFinishLaunching, "v@:@");
|
||||
|
||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wundeclared-selector")
|
||||
addMethod (@selector (setPushNotificationsDelegate:), setPushNotificationsDelegate, "v@:@");
|
||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
|
||||
|
||||
addMethod (@selector (application:didRegisterForRemoteNotificationsWithDeviceToken:), registeredForRemoteNotifications, "v@:@@");
|
||||
addMethod (@selector (application:didFailToRegisterForRemoteNotificationsWithError:), failedToRegisterForRemoteNotifications, "v@:@@");
|
||||
addMethod (@selector (application:didReceiveRemoteNotification:), didReceiveRemoteNotification, "v@:@@");
|
||||
#endif
|
||||
|
||||
registerClass();
|
||||
}
|
||||
|
||||
private:
|
||||
static void applicationWillFinishLaunching (id self, SEL, NSNotification*)
|
||||
{
|
||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wundeclared-selector")
|
||||
[[NSAppleEventManager sharedAppleEventManager] setEventHandler: self
|
||||
andSelector: @selector (getUrl:withReplyEvent:)
|
||||
forEventClass: kInternetEventClass
|
||||
andEventID: kAEGetURL];
|
||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
|
||||
}
|
||||
|
||||
#if JUCE_PUSH_NOTIFICATIONS
|
||||
static void applicationDidFinishLaunching (id self, SEL, NSNotification* notification)
|
||||
{
|
||||
if (notification.userInfo != nil)
|
||||
{
|
||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations")
|
||||
// NSUserNotification is deprecated from macOS 11, but there doesn't seem to be a
|
||||
// replacement for NSApplicationLaunchUserNotificationKey returning a non-deprecated type
|
||||
NSUserNotification* userNotification = notification.userInfo[NSApplicationLaunchUserNotificationKey];
|
||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
|
||||
|
||||
if (userNotification != nil && userNotification.userInfo != nil)
|
||||
didReceiveRemoteNotification (self, nil, [NSApplication sharedApplication], userNotification.userInfo);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static NSApplicationTerminateReply applicationShouldTerminate (id /*self*/, SEL, NSApplication*)
|
||||
{
|
||||
if (auto* app = JUCEApplicationBase::getInstance())
|
||||
{
|
||||
app->systemRequestedQuit();
|
||||
|
||||
if (! MessageManager::getInstance()->hasStopMessageBeenSent())
|
||||
return NSTerminateCancel;
|
||||
}
|
||||
|
||||
return NSTerminateNow;
|
||||
}
|
||||
|
||||
static void applicationWillTerminate (id /*self*/, SEL, NSNotification*)
|
||||
{
|
||||
JUCEApplicationBase::appWillTerminateByForce();
|
||||
}
|
||||
|
||||
static BOOL application_openFile (id /*self*/, SEL, NSApplication*, NSString* filename)
|
||||
{
|
||||
if (auto* app = JUCEApplicationBase::getInstance())
|
||||
{
|
||||
app->anotherInstanceStarted (quotedIfContainsSpaces (filename));
|
||||
return YES;
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
static void application_openFiles (id /*self*/, SEL, NSApplication*, NSArray* filenames)
|
||||
{
|
||||
if (auto* app = JUCEApplicationBase::getInstance())
|
||||
{
|
||||
StringArray files;
|
||||
|
||||
for (NSString* f in filenames)
|
||||
files.add (quotedIfContainsSpaces (f));
|
||||
|
||||
if (files.size() > 0)
|
||||
app->anotherInstanceStarted (files.joinIntoString (" "));
|
||||
}
|
||||
}
|
||||
|
||||
static void applicationDidBecomeActive (id /*self*/, SEL, NSNotification*) { focusChanged(); }
|
||||
static void applicationDidResignActive (id /*self*/, SEL, NSNotification*) { focusChanged(); }
|
||||
static void applicationWillUnhide (id /*self*/, SEL, NSNotification*) { focusChanged(); }
|
||||
|
||||
static void broadcastMessageCallback (id /*self*/, SEL, NSNotification* n)
|
||||
{
|
||||
NSDictionary* dict = (NSDictionary*) [n userInfo];
|
||||
auto messageString = nsStringToJuce ((NSString*) [dict valueForKey: nsStringLiteral ("message")]);
|
||||
MessageManager::getInstance()->deliverBroadcastMessage (messageString);
|
||||
}
|
||||
|
||||
static void mainMenuTrackingBegan (id /*self*/, SEL, NSNotification*)
|
||||
{
|
||||
if (menuTrackingChangedCallback != nullptr)
|
||||
menuTrackingChangedCallback (true);
|
||||
}
|
||||
|
||||
static void mainMenuTrackingEnded (id /*self*/, SEL, NSNotification*)
|
||||
{
|
||||
if (menuTrackingChangedCallback != nullptr)
|
||||
menuTrackingChangedCallback (false);
|
||||
}
|
||||
|
||||
static void dummyMethod (id /*self*/, SEL) {} // (used as a way of running a dummy thread)
|
||||
|
||||
static void focusChanged()
|
||||
{
|
||||
if (appFocusChangeCallback != nullptr)
|
||||
(*appFocusChangeCallback)();
|
||||
}
|
||||
|
||||
static void getUrl_withReplyEvent (id /*self*/, SEL, NSAppleEventDescriptor* event, NSAppleEventDescriptor*)
|
||||
{
|
||||
if (auto* app = JUCEApplicationBase::getInstance())
|
||||
app->anotherInstanceStarted (quotedIfContainsSpaces ([[event paramDescriptorForKeyword: keyDirectObject] stringValue]));
|
||||
}
|
||||
|
||||
static String quotedIfContainsSpaces (NSString* file)
|
||||
{
|
||||
String s (nsStringToJuce (file));
|
||||
s = s.unquoted().replace ("\"", "\\\"");
|
||||
|
||||
if (s.containsChar (' '))
|
||||
s = s.quoted();
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
#if JUCE_PUSH_NOTIFICATIONS
|
||||
//==============================================================================
|
||||
static void setPushNotificationsDelegate (id self, SEL, NSObject<NSApplicationDelegate, NSUserNotificationCenterDelegate>* delegate)
|
||||
{
|
||||
object_setInstanceVariable (self, "pushNotificationsDelegate", delegate);
|
||||
}
|
||||
|
||||
static NSObject<NSApplicationDelegate, NSUserNotificationCenterDelegate>* getPushNotificationsDelegate (id self)
|
||||
{
|
||||
return getIvar<NSObject<NSApplicationDelegate, NSUserNotificationCenterDelegate>*> (self, "pushNotificationsDelegate");
|
||||
}
|
||||
|
||||
static void registeredForRemoteNotifications (id self, SEL, NSApplication* application, NSData* deviceToken)
|
||||
{
|
||||
auto* delegate = getPushNotificationsDelegate (self);
|
||||
|
||||
SEL selector = @selector (application:didRegisterForRemoteNotificationsWithDeviceToken:);
|
||||
|
||||
if (delegate != nil && [delegate respondsToSelector: selector])
|
||||
{
|
||||
NSInvocation* invocation = [NSInvocation invocationWithMethodSignature: [delegate methodSignatureForSelector: selector]];
|
||||
[invocation setSelector: selector];
|
||||
[invocation setTarget: delegate];
|
||||
[invocation setArgument: &application atIndex:2];
|
||||
[invocation setArgument: &deviceToken atIndex:3];
|
||||
|
||||
[invocation invoke];
|
||||
}
|
||||
}
|
||||
|
||||
static void failedToRegisterForRemoteNotifications (id self, SEL, NSApplication* application, NSError* error)
|
||||
{
|
||||
auto* delegate = getPushNotificationsDelegate (self);
|
||||
|
||||
SEL selector = @selector (application:didFailToRegisterForRemoteNotificationsWithError:);
|
||||
|
||||
if (delegate != nil && [delegate respondsToSelector: selector])
|
||||
{
|
||||
NSInvocation* invocation = [NSInvocation invocationWithMethodSignature: [delegate methodSignatureForSelector: selector]];
|
||||
[invocation setSelector: selector];
|
||||
[invocation setTarget: delegate];
|
||||
[invocation setArgument: &application atIndex:2];
|
||||
[invocation setArgument: &error atIndex:3];
|
||||
|
||||
[invocation invoke];
|
||||
}
|
||||
}
|
||||
|
||||
static void didReceiveRemoteNotification (id self, SEL, NSApplication* application, NSDictionary* userInfo)
|
||||
{
|
||||
auto* delegate = getPushNotificationsDelegate (self);
|
||||
|
||||
SEL selector = @selector (application:didReceiveRemoteNotification:);
|
||||
|
||||
if (delegate != nil && [delegate respondsToSelector: selector])
|
||||
{
|
||||
NSInvocation* invocation = [NSInvocation invocationWithMethodSignature: [delegate methodSignatureForSelector: selector]];
|
||||
[invocation setSelector: selector];
|
||||
[invocation setTarget: delegate];
|
||||
[invocation setArgument: &application atIndex:2];
|
||||
[invocation setArgument: &userInfo atIndex:3];
|
||||
|
||||
[invocation invoke];
|
||||
}
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
// This is declared at file scope, so that it's guaranteed to be
|
||||
// constructed before and destructed after `appDelegate` (below)
|
||||
static AppDelegateClass appDelegateClass;
|
||||
|
||||
//==============================================================================
|
||||
struct AppDelegate
|
||||
{
|
||||
public:
|
||||
AppDelegate()
|
||||
{
|
||||
delegate = [appDelegateClass.createInstance() init];
|
||||
|
||||
NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
|
||||
|
||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wundeclared-selector")
|
||||
[center addObserver: delegate selector: @selector (mainMenuTrackingBegan:)
|
||||
name: NSMenuDidBeginTrackingNotification object: nil];
|
||||
[center addObserver: delegate selector: @selector (mainMenuTrackingEnded:)
|
||||
name: NSMenuDidEndTrackingNotification object: nil];
|
||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
|
||||
|
||||
if (JUCEApplicationBase::isStandaloneApp())
|
||||
{
|
||||
[NSApp setDelegate: delegate];
|
||||
|
||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wundeclared-selector")
|
||||
[[NSDistributedNotificationCenter defaultCenter] addObserver: delegate
|
||||
selector: @selector (broadcastMessageCallback:)
|
||||
name: getBroadcastEventName()
|
||||
object: nil
|
||||
suspensionBehavior: NSNotificationSuspensionBehaviorDeliverImmediately];
|
||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
|
||||
}
|
||||
else
|
||||
{
|
||||
[center addObserver: delegate selector: @selector (applicationDidResignActive:)
|
||||
name: NSApplicationDidResignActiveNotification object: NSApp];
|
||||
|
||||
[center addObserver: delegate selector: @selector (applicationDidBecomeActive:)
|
||||
name: NSApplicationDidBecomeActiveNotification object: NSApp];
|
||||
|
||||
[center addObserver: delegate selector: @selector (applicationWillUnhide:)
|
||||
name: NSApplicationWillUnhideNotification object: NSApp];
|
||||
}
|
||||
}
|
||||
|
||||
~AppDelegate()
|
||||
{
|
||||
[[NSRunLoop currentRunLoop] cancelPerformSelectorsWithTarget: delegate];
|
||||
[[NSNotificationCenter defaultCenter] removeObserver: delegate];
|
||||
|
||||
if (JUCEApplicationBase::isStandaloneApp())
|
||||
{
|
||||
[NSApp setDelegate: nil];
|
||||
|
||||
[[NSDistributedNotificationCenter defaultCenter] removeObserver: delegate
|
||||
name: getBroadcastEventName()
|
||||
object: nil];
|
||||
}
|
||||
|
||||
[delegate release];
|
||||
}
|
||||
|
||||
static NSString* getBroadcastEventName()
|
||||
{
|
||||
return juceStringToNS ("juce_" + String::toHexString (File::getSpecialLocation (File::currentExecutableFile).hashCode64()));
|
||||
}
|
||||
|
||||
MessageQueue messageQueue;
|
||||
id delegate;
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
void MessageManager::runDispatchLoop()
|
||||
{
|
||||
if (quitMessagePosted.get() == 0) // check that the quit message wasn't already posted..
|
||||
{
|
||||
JUCE_AUTORELEASEPOOL
|
||||
{
|
||||
// must only be called by the message thread!
|
||||
jassert (isThisTheMessageThread());
|
||||
|
||||
#if JUCE_CATCH_UNHANDLED_EXCEPTIONS
|
||||
@try
|
||||
{
|
||||
[NSApp run];
|
||||
}
|
||||
@catch (NSException* e)
|
||||
{
|
||||
// An AppKit exception will kill the app, but at least this provides a chance to log it.,
|
||||
std::runtime_error ex (std::string ("NSException: ") + [[e name] UTF8String] + ", Reason:" + [[e reason] UTF8String]);
|
||||
JUCEApplicationBase::sendUnhandledException (&ex, __FILE__, __LINE__);
|
||||
}
|
||||
@finally
|
||||
{
|
||||
}
|
||||
#else
|
||||
[NSApp run];
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void shutdownNSApp()
|
||||
{
|
||||
[NSApp stop: nil];
|
||||
[NSEvent startPeriodicEventsAfterDelay: 0 withPeriod: 0.1];
|
||||
}
|
||||
|
||||
void MessageManager::stopDispatchLoop()
|
||||
{
|
||||
if (isThisTheMessageThread())
|
||||
{
|
||||
quitMessagePosted = true;
|
||||
shutdownNSApp();
|
||||
}
|
||||
else
|
||||
{
|
||||
struct QuitCallback : public CallbackMessage
|
||||
{
|
||||
QuitCallback() {}
|
||||
void messageCallback() override { MessageManager::getInstance()->stopDispatchLoop(); }
|
||||
};
|
||||
|
||||
(new QuitCallback())->post();
|
||||
}
|
||||
}
|
||||
|
||||
#if JUCE_MODAL_LOOPS_PERMITTED
|
||||
bool MessageManager::runDispatchLoopUntil (int millisecondsToRunFor)
|
||||
{
|
||||
jassert (millisecondsToRunFor >= 0);
|
||||
jassert (isThisTheMessageThread()); // must only be called by the message thread
|
||||
|
||||
auto endTime = Time::currentTimeMillis() + millisecondsToRunFor;
|
||||
|
||||
while (quitMessagePosted.get() == 0)
|
||||
{
|
||||
JUCE_AUTORELEASEPOOL
|
||||
{
|
||||
auto msRemaining = endTime - Time::currentTimeMillis();
|
||||
|
||||
if (msRemaining <= 0)
|
||||
break;
|
||||
|
||||
CFRunLoopRunInMode (kCFRunLoopDefaultMode, jmin (1.0, msRemaining * 0.001), true);
|
||||
|
||||
if (NSEvent* e = [NSApp nextEventMatchingMask: NSEventMaskAny
|
||||
untilDate: [NSDate dateWithTimeIntervalSinceNow: 0.001]
|
||||
inMode: NSDefaultRunLoopMode
|
||||
dequeue: YES])
|
||||
if (isEventBlockedByModalComps == nullptr || ! (*isEventBlockedByModalComps) (e))
|
||||
[NSApp sendEvent: e];
|
||||
}
|
||||
}
|
||||
|
||||
return quitMessagePosted.get() == 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
void initialiseNSApplication();
|
||||
void initialiseNSApplication()
|
||||
{
|
||||
JUCE_AUTORELEASEPOOL
|
||||
{
|
||||
[NSApplication sharedApplication];
|
||||
}
|
||||
}
|
||||
|
||||
static std::unique_ptr<AppDelegate> appDelegate;
|
||||
|
||||
void MessageManager::doPlatformSpecificInitialisation()
|
||||
{
|
||||
if (appDelegate == nil)
|
||||
appDelegate.reset (new AppDelegate());
|
||||
}
|
||||
|
||||
void MessageManager::doPlatformSpecificShutdown()
|
||||
{
|
||||
appDelegate = nullptr;
|
||||
}
|
||||
|
||||
bool MessageManager::postMessageToSystemQueue (MessageBase* message)
|
||||
{
|
||||
jassert (appDelegate != nil);
|
||||
appDelegate->messageQueue.post (message);
|
||||
return true;
|
||||
}
|
||||
|
||||
void MessageManager::broadcastMessage (const String& message)
|
||||
{
|
||||
NSDictionary* info = [NSDictionary dictionaryWithObject: juceStringToNS (message)
|
||||
forKey: nsStringLiteral ("message")];
|
||||
|
||||
[[NSDistributedNotificationCenter defaultCenter] postNotificationName: AppDelegate::getBroadcastEventName()
|
||||
object: nil
|
||||
userInfo: info];
|
||||
}
|
||||
|
||||
// Special function used by some plugin classes to re-post carbon events
|
||||
void __attribute__ ((visibility("default"))) repostCurrentNSEvent();
|
||||
void __attribute__ ((visibility("default"))) repostCurrentNSEvent()
|
||||
{
|
||||
struct EventReposter : public CallbackMessage
|
||||
{
|
||||
EventReposter() : e ([[NSApp currentEvent] retain]) {}
|
||||
~EventReposter() override { [e release]; }
|
||||
|
||||
void messageCallback() override
|
||||
{
|
||||
[NSApp postEvent: e atStart: YES];
|
||||
}
|
||||
|
||||
NSEvent* e;
|
||||
};
|
||||
|
||||
(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];
|
||||
|
||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wundeclared-selector")
|
||||
[nc addObserver: delegate selector: @selector (changed:) name: NSWorkspaceDidMountNotification object: nil];
|
||||
[nc addObserver: delegate selector: @selector (changed:) name: NSWorkspaceDidUnmountNotification object: nil];
|
||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
|
||||
}
|
||||
|
||||
~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");
|
||||
|
||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wundeclared-selector")
|
||||
addMethod (@selector (changed:), changed, "v@:@");
|
||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
|
||||
|
||||
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.reset (new Pimpl (*this)); }
|
||||
MountedVolumeListChangeDetector::~MountedVolumeListChangeDetector() {}
|
||||
#endif
|
||||
|
||||
} // namespace juce
|
104
deps/juce/modules/juce_events/native/juce_osx_MessageQueue.h
vendored
Normal file
104
deps/juce/modules/juce_events/native/juce_osx_MessageQueue.h
vendored
Normal file
@ -0,0 +1,104 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2020 - Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
|
||||
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.
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
namespace juce
|
||||
{
|
||||
|
||||
//==============================================================================
|
||||
/* An internal message pump class used in OSX and iOS. */
|
||||
class MessageQueue
|
||||
{
|
||||
public:
|
||||
MessageQueue()
|
||||
{
|
||||
#if JUCE_IOS
|
||||
runLoop = CFRunLoopGetCurrent();
|
||||
#else
|
||||
runLoop = CFRunLoopGetMain();
|
||||
#endif
|
||||
|
||||
CFRunLoopSourceContext sourceContext;
|
||||
zerostruct (sourceContext); // (can't use "= { 0 }" on this object because it's typedef'ed as a C struct)
|
||||
sourceContext.info = this;
|
||||
sourceContext.perform = runLoopSourceCallback;
|
||||
runLoopSource.reset (CFRunLoopSourceCreate (kCFAllocatorDefault, 1, &sourceContext));
|
||||
CFRunLoopAddSource (runLoop, runLoopSource.get(), kCFRunLoopCommonModes);
|
||||
}
|
||||
|
||||
~MessageQueue() noexcept
|
||||
{
|
||||
CFRunLoopRemoveSource (runLoop, runLoopSource.get(), kCFRunLoopCommonModes);
|
||||
CFRunLoopSourceInvalidate (runLoopSource.get());
|
||||
}
|
||||
|
||||
void post (MessageManager::MessageBase* const message)
|
||||
{
|
||||
messages.add (message);
|
||||
wakeUp();
|
||||
}
|
||||
|
||||
private:
|
||||
ReferenceCountedArray<MessageManager::MessageBase, CriticalSection> messages;
|
||||
CFRunLoopRef runLoop;
|
||||
CFUniquePtr<CFRunLoopSourceRef> runLoopSource;
|
||||
|
||||
void wakeUp() noexcept
|
||||
{
|
||||
CFRunLoopSourceSignal (runLoopSource.get());
|
||||
CFRunLoopWakeUp (runLoop);
|
||||
}
|
||||
|
||||
bool deliverNextMessage()
|
||||
{
|
||||
const MessageManager::MessageBase::Ptr nextMessage (messages.removeAndReturn (0));
|
||||
|
||||
if (nextMessage == nullptr)
|
||||
return false;
|
||||
|
||||
JUCE_AUTORELEASEPOOL
|
||||
{
|
||||
JUCE_TRY
|
||||
{
|
||||
nextMessage->messageCallback();
|
||||
}
|
||||
JUCE_CATCH_EXCEPTION
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void runLoopCallback() noexcept
|
||||
{
|
||||
for (int i = 4; --i >= 0;)
|
||||
if (! deliverNextMessage())
|
||||
return;
|
||||
|
||||
wakeUp();
|
||||
}
|
||||
|
||||
static void runLoopSourceCallback (void* info) noexcept
|
||||
{
|
||||
static_cast<MessageQueue*> (info)->runLoopCallback();
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace juce
|
134
deps/juce/modules/juce_events/native/juce_win32_HiddenMessageWindow.h
vendored
Normal file
134
deps/juce/modules/juce_events/native/juce_win32_HiddenMessageWindow.h
vendored
Normal file
@ -0,0 +1,134 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2020 - Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
|
||||
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.
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
namespace juce
|
||||
{
|
||||
|
||||
//==============================================================================
|
||||
class HiddenMessageWindow
|
||||
{
|
||||
public:
|
||||
HiddenMessageWindow (const TCHAR* const messageWindowName, WNDPROC wndProc)
|
||||
{
|
||||
String className ("JUCE_");
|
||||
className << String::toHexString (Time::getHighResolutionTicks());
|
||||
|
||||
HMODULE moduleHandle = (HMODULE) Process::getCurrentModuleInstanceHandle();
|
||||
|
||||
WNDCLASSEX wc = {};
|
||||
wc.cbSize = sizeof (wc);
|
||||
wc.lpfnWndProc = wndProc;
|
||||
wc.cbWndExtra = 4;
|
||||
wc.hInstance = moduleHandle;
|
||||
wc.lpszClassName = className.toWideCharPointer();
|
||||
|
||||
atom = RegisterClassEx (&wc);
|
||||
jassert (atom != 0);
|
||||
|
||||
hwnd = CreateWindow (getClassNameFromAtom(), messageWindowName,
|
||||
0, 0, 0, 0, 0,
|
||||
nullptr, nullptr, moduleHandle, nullptr);
|
||||
jassert (hwnd != nullptr);
|
||||
}
|
||||
|
||||
~HiddenMessageWindow()
|
||||
{
|
||||
DestroyWindow (hwnd);
|
||||
UnregisterClass (getClassNameFromAtom(), nullptr);
|
||||
}
|
||||
|
||||
inline HWND getHWND() const noexcept { return hwnd; }
|
||||
|
||||
private:
|
||||
ATOM atom;
|
||||
HWND hwnd;
|
||||
|
||||
LPCTSTR getClassNameFromAtom() noexcept { return (LPCTSTR) (pointer_sized_uint) atom; }
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class JuceWindowIdentifier
|
||||
{
|
||||
public:
|
||||
static bool isJUCEWindow (HWND hwnd) noexcept
|
||||
{
|
||||
return GetWindowLongPtr (hwnd, GWLP_USERDATA) == getImprobableWindowNumber();
|
||||
}
|
||||
|
||||
static void setAsJUCEWindow (HWND hwnd, bool isJuceWindow) noexcept
|
||||
{
|
||||
SetWindowLongPtr (hwnd, GWLP_USERDATA, isJuceWindow ? getImprobableWindowNumber() : 0);
|
||||
}
|
||||
|
||||
private:
|
||||
static LONG_PTR getImprobableWindowNumber() noexcept
|
||||
{
|
||||
static auto number = (LONG_PTR) Random().nextInt64();
|
||||
return number;
|
||||
}
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class DeviceChangeDetector : private Timer
|
||||
{
|
||||
public:
|
||||
DeviceChangeDetector (const wchar_t* const name)
|
||||
: messageWindow (name, (WNDPROC) deviceChangeEventCallback)
|
||||
{
|
||||
SetWindowLongPtr (messageWindow.getHWND(), GWLP_USERDATA, (LONG_PTR) this);
|
||||
}
|
||||
|
||||
virtual void systemDeviceChanged() = 0;
|
||||
|
||||
void triggerAsyncDeviceChangeCallback()
|
||||
{
|
||||
// We'll pause before sending a message, because on device removal, the OS hasn't always updated
|
||||
// its device lists correctly at this point. This also helps avoid repeated callbacks.
|
||||
startTimer (500);
|
||||
}
|
||||
|
||||
private:
|
||||
HiddenMessageWindow messageWindow;
|
||||
|
||||
static LRESULT CALLBACK deviceChangeEventCallback (HWND h, const UINT message,
|
||||
const WPARAM wParam, const LPARAM lParam)
|
||||
{
|
||||
if (message == WM_DEVICECHANGE
|
||||
&& (wParam == 0x8000 /*DBT_DEVICEARRIVAL*/
|
||||
|| wParam == 0x8004 /*DBT_DEVICEREMOVECOMPLETE*/
|
||||
|| wParam == 0x0007 /*DBT_DEVNODES_CHANGED*/))
|
||||
{
|
||||
((DeviceChangeDetector*) GetWindowLongPtr (h, GWLP_USERDATA))
|
||||
->triggerAsyncDeviceChangeCallback();
|
||||
}
|
||||
|
||||
return DefWindowProc (h, message, wParam, lParam);
|
||||
}
|
||||
|
||||
void timerCallback() override
|
||||
{
|
||||
stopTimer();
|
||||
systemDeviceChanged();
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace juce
|
328
deps/juce/modules/juce_events/native/juce_win32_Messaging.cpp
vendored
Normal file
328
deps/juce/modules/juce_events/native/juce_win32_Messaging.cpp
vendored
Normal file
@ -0,0 +1,328 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2020 - Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
|
||||
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.
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
namespace juce
|
||||
{
|
||||
|
||||
extern HWND juce_messageWindowHandle;
|
||||
|
||||
#if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client && JucePlugin_Build_Unity
|
||||
bool juce_isRunningInUnity();
|
||||
#endif
|
||||
|
||||
#if JUCE_MODULE_AVAILABLE_juce_gui_extra
|
||||
LRESULT juce_offerEventToActiveXControl (::MSG&);
|
||||
#endif
|
||||
|
||||
using CheckEventBlockedByModalComps = bool (*)(const MSG&);
|
||||
CheckEventBlockedByModalComps isEventBlockedByModalComps = nullptr;
|
||||
|
||||
using SettingChangeCallbackFunc = void (*)(void);
|
||||
SettingChangeCallbackFunc settingChangeCallback = nullptr;
|
||||
|
||||
//==============================================================================
|
||||
class InternalMessageQueue
|
||||
{
|
||||
public:
|
||||
InternalMessageQueue()
|
||||
{
|
||||
messageWindow = std::make_unique<HiddenMessageWindow> (messageWindowName, (WNDPROC) messageWndProc);
|
||||
juce_messageWindowHandle = messageWindow->getHWND();
|
||||
}
|
||||
|
||||
~InternalMessageQueue()
|
||||
{
|
||||
juce_messageWindowHandle = nullptr;
|
||||
clearSingletonInstance();
|
||||
}
|
||||
|
||||
JUCE_DECLARE_SINGLETON (InternalMessageQueue, false)
|
||||
|
||||
//==============================================================================
|
||||
void broadcastMessage (const String& message)
|
||||
{
|
||||
auto localCopy = message;
|
||||
|
||||
Array<HWND> windows;
|
||||
EnumWindows (&broadcastEnumWindowProc, (LPARAM) &windows);
|
||||
|
||||
for (int i = windows.size(); --i >= 0;)
|
||||
{
|
||||
COPYDATASTRUCT data;
|
||||
data.dwData = broadcastMessageMagicNumber;
|
||||
data.cbData = (DWORD) (((size_t) localCopy.length() + 1) * sizeof (CharPointer_UTF32::CharType));
|
||||
data.lpData = (void*) localCopy.toUTF32().getAddress();
|
||||
|
||||
DWORD_PTR result;
|
||||
SendMessageTimeout (windows.getUnchecked (i), WM_COPYDATA,
|
||||
(WPARAM) juce_messageWindowHandle,
|
||||
(LPARAM) &data,
|
||||
SMTO_BLOCK | SMTO_ABORTIFHUNG, 8000, &result);
|
||||
}
|
||||
}
|
||||
|
||||
void postMessage (MessageManager::MessageBase* message)
|
||||
{
|
||||
bool shouldTriggerMessageQueueDispatch = false;
|
||||
|
||||
{
|
||||
const ScopedLock sl (lock);
|
||||
|
||||
shouldTriggerMessageQueueDispatch = messageQueue.isEmpty();
|
||||
messageQueue.add (message);
|
||||
}
|
||||
|
||||
if (! shouldTriggerMessageQueueDispatch)
|
||||
return;
|
||||
|
||||
#if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client && JucePlugin_Build_Unity
|
||||
if (juce_isRunningInUnity())
|
||||
{
|
||||
SendNotifyMessage (juce_messageWindowHandle, customMessageID, 0, 0);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
PostMessage (juce_messageWindowHandle, customMessageID, 0, 0);
|
||||
}
|
||||
|
||||
bool dispatchNextMessage (bool returnIfNoPendingMessages)
|
||||
{
|
||||
MSG m;
|
||||
|
||||
if (returnIfNoPendingMessages && ! PeekMessage (&m, nullptr, 0, 0, PM_NOREMOVE))
|
||||
return false;
|
||||
|
||||
if (GetMessage (&m, nullptr, 0, 0) >= 0)
|
||||
{
|
||||
#if JUCE_MODULE_AVAILABLE_juce_gui_extra
|
||||
if (juce_offerEventToActiveXControl (m) != S_FALSE)
|
||||
return true;
|
||||
#endif
|
||||
|
||||
if (m.message == customMessageID && m.hwnd == juce_messageWindowHandle)
|
||||
{
|
||||
dispatchMessages();
|
||||
}
|
||||
else if (m.message == WM_QUIT)
|
||||
{
|
||||
if (auto* app = JUCEApplicationBase::getInstance())
|
||||
app->systemRequestedQuit();
|
||||
}
|
||||
else if (isEventBlockedByModalComps == nullptr || ! isEventBlockedByModalComps (m))
|
||||
{
|
||||
if ((m.message == WM_LBUTTONDOWN || m.message == WM_RBUTTONDOWN)
|
||||
&& ! JuceWindowIdentifier::isJUCEWindow (m.hwnd))
|
||||
{
|
||||
// if it's someone else's window being clicked on, and the focus is
|
||||
// currently on a juce window, pass the kb focus over..
|
||||
auto currentFocus = GetFocus();
|
||||
|
||||
if (currentFocus == nullptr || JuceWindowIdentifier::isJUCEWindow (currentFocus))
|
||||
SetFocus (m.hwnd);
|
||||
}
|
||||
|
||||
TranslateMessage (&m);
|
||||
DispatchMessage (&m);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
//==============================================================================
|
||||
static LRESULT CALLBACK messageWndProc (HWND h, UINT message, WPARAM wParam, LPARAM lParam) noexcept
|
||||
{
|
||||
if (h == juce_messageWindowHandle)
|
||||
{
|
||||
if (message == customMessageID)
|
||||
{
|
||||
if (auto* queue = InternalMessageQueue::getInstanceWithoutCreating())
|
||||
queue->dispatchMessages();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (message == WM_COPYDATA)
|
||||
{
|
||||
handleBroadcastMessage (reinterpret_cast<const COPYDATASTRUCT*> (lParam));
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (message == WM_SETTINGCHANGE)
|
||||
if (settingChangeCallback != nullptr)
|
||||
settingChangeCallback();
|
||||
}
|
||||
|
||||
return DefWindowProc (h, message, wParam, lParam);
|
||||
}
|
||||
|
||||
static BOOL CALLBACK broadcastEnumWindowProc (HWND hwnd, LPARAM lParam)
|
||||
{
|
||||
if (hwnd != juce_messageWindowHandle)
|
||||
{
|
||||
TCHAR windowName[64] = { 0 }; // no need to read longer strings than this
|
||||
GetWindowText (hwnd, windowName, 63);
|
||||
|
||||
if (String (windowName) == messageWindowName)
|
||||
reinterpret_cast<Array<HWND>*> (lParam)->add (hwnd);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void dispatchMessage (MessageManager::MessageBase* message)
|
||||
{
|
||||
JUCE_TRY
|
||||
{
|
||||
message->messageCallback();
|
||||
}
|
||||
JUCE_CATCH_EXCEPTION
|
||||
|
||||
message->decReferenceCount();
|
||||
}
|
||||
|
||||
static void handleBroadcastMessage (const COPYDATASTRUCT* data)
|
||||
{
|
||||
if (data != nullptr && data->dwData == broadcastMessageMagicNumber)
|
||||
{
|
||||
struct BroadcastMessage : public CallbackMessage
|
||||
{
|
||||
BroadcastMessage (CharPointer_UTF32 text, size_t length) : message (text, length) {}
|
||||
void messageCallback() override { MessageManager::getInstance()->deliverBroadcastMessage (message); }
|
||||
|
||||
String message;
|
||||
};
|
||||
|
||||
(new BroadcastMessage (CharPointer_UTF32 ((const CharPointer_UTF32::CharType*) data->lpData),
|
||||
data->cbData / sizeof (CharPointer_UTF32::CharType)))
|
||||
->post();
|
||||
}
|
||||
}
|
||||
|
||||
void dispatchMessages()
|
||||
{
|
||||
ReferenceCountedArray<MessageManager::MessageBase> messagesToDispatch;
|
||||
|
||||
{
|
||||
const ScopedLock sl (lock);
|
||||
|
||||
if (messageQueue.isEmpty())
|
||||
return;
|
||||
|
||||
messagesToDispatch.swapWith (messageQueue);
|
||||
}
|
||||
|
||||
for (int i = 0; i < messagesToDispatch.size(); ++i)
|
||||
{
|
||||
auto message = messagesToDispatch.getUnchecked (i);
|
||||
message->incReferenceCount();
|
||||
dispatchMessage (message.get());
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
static constexpr unsigned int customMessageID = WM_USER + 123;
|
||||
static constexpr unsigned int broadcastMessageMagicNumber = 0xc403;
|
||||
static const TCHAR messageWindowName[];
|
||||
|
||||
std::unique_ptr<HiddenMessageWindow> messageWindow;
|
||||
|
||||
CriticalSection lock;
|
||||
ReferenceCountedArray<MessageManager::MessageBase> messageQueue;
|
||||
|
||||
//==============================================================================
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (InternalMessageQueue)
|
||||
};
|
||||
|
||||
JUCE_IMPLEMENT_SINGLETON (InternalMessageQueue)
|
||||
|
||||
const TCHAR InternalMessageQueue::messageWindowName[] = _T("JUCEWindow");
|
||||
|
||||
//==============================================================================
|
||||
bool dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages)
|
||||
{
|
||||
if (auto* queue = InternalMessageQueue::getInstanceWithoutCreating())
|
||||
return queue->dispatchNextMessage (returnIfNoPendingMessages);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool MessageManager::postMessageToSystemQueue (MessageManager::MessageBase* const message)
|
||||
{
|
||||
if (auto* queue = InternalMessageQueue::getInstanceWithoutCreating())
|
||||
{
|
||||
queue->postMessage (message);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void MessageManager::broadcastMessage (const String& value)
|
||||
{
|
||||
if (auto* queue = InternalMessageQueue::getInstanceWithoutCreating())
|
||||
queue->broadcastMessage (value);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void MessageManager::doPlatformSpecificInitialisation()
|
||||
{
|
||||
ignoreUnused (OleInitialize (nullptr));
|
||||
InternalMessageQueue::getInstance();
|
||||
}
|
||||
|
||||
void MessageManager::doPlatformSpecificShutdown()
|
||||
{
|
||||
InternalMessageQueue::deleteInstance();
|
||||
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.reset (new Pimpl (*this)); }
|
||||
MountedVolumeListChangeDetector::~MountedVolumeListChangeDetector() {}
|
||||
|
||||
} // namespace juce
|
82
deps/juce/modules/juce_events/native/juce_win32_WinRTWrapper.cpp
vendored
Normal file
82
deps/juce/modules/juce_events/native/juce_win32_WinRTWrapper.cpp
vendored
Normal file
@ -0,0 +1,82 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2020 - Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
|
||||
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.
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
namespace juce
|
||||
{
|
||||
|
||||
WinRTWrapper::WinRTWrapper()
|
||||
{
|
||||
winRTHandle = ::LoadLibraryA ("api-ms-win-core-winrt-l1-1-0");
|
||||
|
||||
if (winRTHandle == nullptr)
|
||||
return;
|
||||
|
||||
roInitialize = (RoInitializeFuncPtr) ::GetProcAddress (winRTHandle, "RoInitialize");
|
||||
createHString = (WindowsCreateStringFuncPtr) ::GetProcAddress (winRTHandle, "WindowsCreateString");
|
||||
deleteHString = (WindowsDeleteStringFuncPtr) ::GetProcAddress (winRTHandle, "WindowsDeleteString");
|
||||
getHStringRawBuffer = (WindowsGetStringRawBufferFuncPtr) ::GetProcAddress (winRTHandle, "WindowsGetStringRawBuffer");
|
||||
roActivateInstance = (RoActivateInstanceFuncPtr) ::GetProcAddress (winRTHandle, "RoActivateInstance");
|
||||
roGetActivationFactory = (RoGetActivationFactoryFuncPtr) ::GetProcAddress (winRTHandle, "RoGetActivationFactory");
|
||||
|
||||
if (roInitialize == nullptr || createHString == nullptr || deleteHString == nullptr
|
||||
|| getHStringRawBuffer == nullptr || roActivateInstance == nullptr || roGetActivationFactory == nullptr)
|
||||
return;
|
||||
|
||||
HRESULT status = roInitialize (1);
|
||||
initialised = ! (status != S_OK && status != S_FALSE && status != 0x80010106L);
|
||||
}
|
||||
|
||||
WinRTWrapper::~WinRTWrapper()
|
||||
{
|
||||
if (winRTHandle != nullptr)
|
||||
::FreeLibrary (winRTHandle);
|
||||
|
||||
clearSingletonInstance();
|
||||
}
|
||||
|
||||
WinRTWrapper::ScopedHString::ScopedHString (String str)
|
||||
{
|
||||
if (WinRTWrapper::getInstance()->isInitialised())
|
||||
WinRTWrapper::getInstance()->createHString (str.toWideCharPointer(),
|
||||
static_cast<uint32_t> (str.length()),
|
||||
&hstr);
|
||||
}
|
||||
|
||||
WinRTWrapper::ScopedHString::~ScopedHString()
|
||||
{
|
||||
if (WinRTWrapper::getInstance()->isInitialised() && hstr != nullptr)
|
||||
WinRTWrapper::getInstance()->deleteHString (hstr);
|
||||
}
|
||||
|
||||
String WinRTWrapper::hStringToString (HSTRING hstr)
|
||||
{
|
||||
if (isInitialised())
|
||||
if (const wchar_t* str = getHStringRawBuffer (hstr, nullptr))
|
||||
return String (str);
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
|
||||
JUCE_IMPLEMENT_SINGLETON (WinRTWrapper)
|
||||
|
||||
}
|
112
deps/juce/modules/juce_events/native/juce_win32_WinRTWrapper.h
vendored
Normal file
112
deps/juce/modules/juce_events/native/juce_win32_WinRTWrapper.h
vendored
Normal file
@ -0,0 +1,112 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2020 - Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
|
||||
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.
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
namespace juce
|
||||
{
|
||||
|
||||
class WinRTWrapper : public DeletedAtShutdown
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
~WinRTWrapper();
|
||||
bool isInitialised() const noexcept { return initialised; }
|
||||
|
||||
JUCE_DECLARE_SINGLETON (WinRTWrapper, true)
|
||||
|
||||
//==============================================================================
|
||||
template <class ComClass>
|
||||
ComSmartPtr<ComClass> activateInstance (const wchar_t* runtimeClassID, REFCLSID classUUID)
|
||||
{
|
||||
ComSmartPtr<ComClass> result;
|
||||
|
||||
if (isInitialised())
|
||||
{
|
||||
ComSmartPtr<IInspectable> inspectable;
|
||||
ScopedHString runtimeClass (runtimeClassID);
|
||||
auto hr = roActivateInstance (runtimeClass.get(), inspectable.resetAndGetPointerAddress());
|
||||
|
||||
if (SUCCEEDED (hr))
|
||||
inspectable->QueryInterface (classUUID, (void**) result.resetAndGetPointerAddress());
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
template <class ComClass>
|
||||
ComSmartPtr<ComClass> getWRLFactory (const wchar_t* runtimeClassID)
|
||||
{
|
||||
ComSmartPtr<ComClass> comPtr;
|
||||
|
||||
if (isInitialised())
|
||||
{
|
||||
ScopedHString classID (runtimeClassID);
|
||||
|
||||
if (classID.get() != nullptr)
|
||||
roGetActivationFactory (classID.get(), __uuidof (ComClass), (void**) comPtr.resetAndGetPointerAddress());
|
||||
}
|
||||
|
||||
return comPtr;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
class ScopedHString
|
||||
{
|
||||
public:
|
||||
ScopedHString (String);
|
||||
~ScopedHString();
|
||||
|
||||
HSTRING get() const noexcept { return hstr; }
|
||||
|
||||
private:
|
||||
HSTRING hstr = nullptr;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ScopedHString)
|
||||
};
|
||||
|
||||
String hStringToString (HSTRING);
|
||||
|
||||
private:
|
||||
WinRTWrapper();
|
||||
|
||||
//==============================================================================
|
||||
HMODULE winRTHandle = nullptr;
|
||||
bool initialised = false;
|
||||
|
||||
typedef HRESULT (WINAPI* RoInitializeFuncPtr) (int);
|
||||
typedef HRESULT (WINAPI* WindowsCreateStringFuncPtr) (LPCWSTR, UINT32, HSTRING*);
|
||||
typedef HRESULT (WINAPI* WindowsDeleteStringFuncPtr) (HSTRING);
|
||||
typedef PCWSTR (WINAPI* WindowsGetStringRawBufferFuncPtr) (HSTRING, UINT32*);
|
||||
typedef HRESULT (WINAPI* RoActivateInstanceFuncPtr) (HSTRING, IInspectable**);
|
||||
typedef HRESULT (WINAPI* RoGetActivationFactoryFuncPtr) (HSTRING, REFIID, void**);
|
||||
|
||||
RoInitializeFuncPtr roInitialize = nullptr;
|
||||
WindowsCreateStringFuncPtr createHString = nullptr;
|
||||
WindowsDeleteStringFuncPtr deleteHString = nullptr;
|
||||
WindowsGetStringRawBufferFuncPtr getHStringRawBuffer = nullptr;
|
||||
RoActivateInstanceFuncPtr roActivateInstance = nullptr;
|
||||
RoGetActivationFactoryFuncPtr roGetActivationFactory = nullptr;
|
||||
|
||||
//==============================================================================
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WinRTWrapper)
|
||||
};
|
||||
|
||||
} // namespace juce
|
Reference in New Issue
Block a user