| @@ -177,30 +177,6 @@ struct AAXClasses | |||
| return nullptr; | |||
| } | |||
| //============================================================================== | |||
| struct JUCELibraryRefCount | |||
| { | |||
| JUCELibraryRefCount() { if (getCount()++ == 0) initialise(); } | |||
| ~JUCELibraryRefCount() { if (--getCount() == 0) shutdown(); } | |||
| private: | |||
| static void initialise() | |||
| { | |||
| initialiseJuce_GUI(); | |||
| } | |||
| static void shutdown() | |||
| { | |||
| shutdownJuce_GUI(); | |||
| } | |||
| int& getCount() noexcept | |||
| { | |||
| static int count = 0; | |||
| return count; | |||
| } | |||
| }; | |||
| //============================================================================== | |||
| class JuceAAX_Processor; | |||
| @@ -389,7 +365,7 @@ struct AAXClasses | |||
| ScopedPointer<ContentWrapperComponent> component; | |||
| JUCELibraryRefCount juceCount; | |||
| ScopedJuceInitialiser_GUI libraryInitialiser; | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceAAX_GUI) | |||
| }; | |||
| @@ -896,7 +872,7 @@ struct AAXClasses | |||
| check (Controller()->SetSignalLatency (audioProcessor.getLatencySamples())); | |||
| } | |||
| JUCELibraryRefCount juceCount; | |||
| ScopedJuceInitialiser_GUI libraryInitialiser; | |||
| ScopedPointer<AudioProcessor> pluginInstance; | |||
| MidiBuffer midiBuffer; | |||
| @@ -1020,7 +996,7 @@ struct AAXClasses | |||
| AAX_Result JUCE_CDECL GetEffectDescriptions (AAX_ICollection*); | |||
| AAX_Result JUCE_CDECL GetEffectDescriptions (AAX_ICollection* collection) | |||
| { | |||
| AAXClasses::JUCELibraryRefCount libraryRefCount; | |||
| ScopedJuceInitialiser_GUI libraryInitialiser; | |||
| if (AAX_IEffectDescriptor* const descriptor = collection->NewDescriptor()) | |||
| { | |||
| @@ -60,23 +60,6 @@ namespace juce | |||
| using namespace Steinberg; | |||
| //============================================================================== | |||
| class JuceLibraryRefCount | |||
| { | |||
| public: | |||
| JuceLibraryRefCount() { if ((getCount()++) == 0) initialiseJuce_GUI(); } | |||
| ~JuceLibraryRefCount() { if ((--getCount()) == 0) shutdownJuce_GUI(); } | |||
| private: | |||
| int& getCount() noexcept | |||
| { | |||
| static int count = 0; | |||
| return count; | |||
| } | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceLibraryRefCount) | |||
| }; | |||
| //============================================================================== | |||
| #if JUCE_MAC | |||
| extern void initialiseMac(); | |||
| @@ -104,6 +87,7 @@ public: | |||
| private: | |||
| Atomic<int> refCount; | |||
| ScopedPointer<AudioProcessor> audioProcessor; | |||
| ScopedJuceInitialiser_GUI libraryInitialiser; | |||
| JuceAudioProcessor() JUCE_DELETED_FUNCTION; | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceAudioProcessor) | |||
| @@ -301,7 +285,7 @@ public: | |||
| private: | |||
| //============================================================================== | |||
| ComSmartPtr<JuceAudioProcessor> audioProcessor; | |||
| const JuceLibraryRefCount juceCount; | |||
| ScopedJuceInitialiser_GUI libraryInitialiser; | |||
| //============================================================================== | |||
| void setupParameters() | |||
| @@ -539,6 +523,8 @@ private: | |||
| WindowsHooks hooks; | |||
| #endif | |||
| ScopedJuceInitialiser_GUI libraryInitialiser; | |||
| //============================================================================== | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceVST3Editor) | |||
| }; | |||
| @@ -1338,7 +1324,7 @@ private: | |||
| MidiBuffer midiBuffer; | |||
| Array<float*> channelList; | |||
| const JuceLibraryRefCount juceCount; | |||
| ScopedJuceInitialiser_GUI libraryInitialiser; | |||
| //============================================================================== | |||
| void addBusTo (Vst::BusList& busList, Vst::Bus* newBus) | |||
| @@ -1696,7 +1682,7 @@ public: | |||
| private: | |||
| //============================================================================== | |||
| const JuceLibraryRefCount juceCount; | |||
| ScopedJuceInitialiser_GUI libraryInitialiser; | |||
| Atomic<int> refCount; | |||
| const PFactoryInfo factoryInfo; | |||
| ComSmartPtr<Vst::IHostApplication> host; | |||
| @@ -55,13 +55,17 @@ JUCE_API void JUCE_CALLTYPE shutdownJuce_GUI(); | |||
| /** A utility object that helps you initialise and shutdown Juce correctly | |||
| using an RAII pattern. | |||
| When an instance of this class is created, it calls initialiseJuce_GUI(), | |||
| and when it's deleted, it calls shutdownJuce_GUI(), which lets you easily | |||
| make sure that these functions are matched correctly. | |||
| When the first instance of this class is created, it calls initialiseJuce_GUI(), | |||
| and when the last instance is deleted, it calls shutdownJuce_GUI(), so that you | |||
| can easily be sure that as long as at least one instance of the class exists, the | |||
| library will be initialised. | |||
| This class is particularly handy to use at the beginning of a console app's | |||
| main() function, because it'll take care of shutting down whenever you return | |||
| from the main() call. | |||
| Be careful with your threading though - to be safe, you should always make sure | |||
| that these objects are created and deleted on the message thread. | |||
| */ | |||
| class JUCE_API ScopedJuceInitialiser_GUI | |||
| { | |||
| @@ -334,5 +334,7 @@ JUCE_API void JUCE_CALLTYPE shutdownJuce_GUI() | |||
| } | |||
| } | |||
| ScopedJuceInitialiser_GUI::ScopedJuceInitialiser_GUI() { initialiseJuce_GUI(); } | |||
| ScopedJuceInitialiser_GUI::~ScopedJuceInitialiser_GUI() { shutdownJuce_GUI(); } | |||
| static int numScopedInitInstances = 0; | |||
| ScopedJuceInitialiser_GUI::ScopedJuceInitialiser_GUI() { if (numScopedInitInstances++ == 0) initialiseJuce_GUI(); } | |||
| ScopedJuceInitialiser_GUI::~ScopedJuceInitialiser_GUI() { if (--numScopedInitInstances == 0) shutdownJuce_GUI(); } | |||
| @@ -39,7 +39,7 @@ JUCE_JNI_CALLBACK (JUCE_ANDROID_ACTIVITY_CLASSNAME, launchApp, void, (JNIEnv* en | |||
| JUCEApplicationBase::createInstance = &juce_CreateApplication; | |||
| initialiseJuce_GUI(); | |||
| ScopedJuceInitialiser_GUI libraryInitialiser; | |||
| JUCEApplicationBase* app = JUCEApplicationBase::createInstance(); | |||
| if (! app->initialiseApp()) | |||
| @@ -44,7 +44,8 @@ extern bool isIOSAppActive; | |||
| - (void) applicationDidFinishLaunching: (UIApplication*) application | |||
| { | |||
| (void) application; | |||
| initialiseJuce_GUI(); | |||
| ScopedJuceInitialiser_GUI libraryInitialiser; | |||
| JUCEApplicationBase* app = JUCEApplicationBase::createInstance(); | |||