mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-22 01:34:21 +00:00
Tweaked the ScopedJuceInitialiser_GUI to use reference-counting internally, and used it to replace/simplify some similar objects in the plugin wrapper classes.
This commit is contained in:
parent
412c86a167
commit
619716751e
6 changed files with 23 additions and 54 deletions
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue