Browse Source

Thread-local value fix for plugins on XP. Android startup tweaks. Minor component changes.

tags/2021-05-28
jules 13 years ago
parent
commit
59669e8bec
9 changed files with 51 additions and 16 deletions
  1. +5
    -0
      modules/juce_core/native/juce_android_JNIHelpers.h
  2. +28
    -0
      modules/juce_core/native/juce_android_SystemStats.cpp
  3. +4
    -2
      modules/juce_core/threads/juce_ThreadLocalValue.h
  4. +0
    -5
      modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp
  5. +2
    -4
      modules/juce_events/messages/juce_MessageManager.cpp
  6. +5
    -1
      modules/juce_gui_basics/components/juce_Component.cpp
  7. +3
    -0
      modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h
  8. +3
    -4
      modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm
  9. +1
    -0
      modules/juce_opengl/opengl/juce_OpenGLHelpers.cpp

+ 5
- 0
modules/juce_core/native/juce_android_JNIHelpers.h View File

@@ -258,6 +258,11 @@ public:
void initialise (JNIEnv* env)
{
// NB: the DLL can be left loaded by the JVM, so the same static
// objects can end up being reused by subsequent runs of the app
zeromem (threads, sizeof (threads));
zeromem (envs, sizeof (envs));
env->GetJavaVM (&jvm);
addEnv (env);
}


+ 28
- 0
modules/juce_core/native/juce_android_SystemStats.cpp View File

@@ -98,11 +98,29 @@ jfieldID JNIClassBase::resolveStaticField (JNIEnv* env, const char* fieldName, c
//==============================================================================
ThreadLocalJNIEnvHolder threadLocalJNIEnvHolder;
#if JUCE_DEBUG
static bool systemInitialised = false;
#endif
JNIEnv* getEnv() noexcept
{
#if JUCE_DEBUG
if (! systemInitialised)
{
DBG ("*** Call to getEnv() when system not initialised");
jassertfalse;
exit (0);
}
#endif
return threadLocalJNIEnvHolder.getOrAttach();
}
extern "C" jint JNI_OnLoad (JavaVM*, void*)
{
return JNI_VERSION_1_2;
}
//==============================================================================
AndroidSystem::AndroidSystem() : screenWidth (0), screenHeight (0)
{
@@ -111,9 +129,14 @@ AndroidSystem::AndroidSystem() : screenWidth (0), screenHeight (0)
void AndroidSystem::initialise (JNIEnv* env, jobject activity_,
jstring appFile_, jstring appDataDir_)
{
screenWidth = screenHeight = 0;
JNIClassBase::initialiseAllClasses (env);
threadLocalJNIEnvHolder.initialise (env);
#if JUCE_DEBUG
systemInitialised = true;
#endif
activity = GlobalRef (activity_);
appFile = juceString (env, appFile_);
appDataDir = juceString (env, appDataDir_);
@@ -122,6 +145,11 @@ void AndroidSystem::initialise (JNIEnv* env, jobject activity_,
void AndroidSystem::shutdown (JNIEnv* env)
{
activity.clear();
#if JUCE_DEBUG
systemInitialised = false;
#endif
JNIClassBase::releaseAllClasses (env);
}


+ 4
- 2
modules/juce_core/threads/juce_ThreadLocalValue.h View File

@@ -26,8 +26,10 @@
#ifndef __JUCE_THREADLOCALVALUE_JUCEHEADER__
#define __JUCE_THREADLOCALVALUE_JUCEHEADER__
#if ! (JUCE_MSVC || (JUCE_MAC && defined (__clang__) && defined (MAC_OS_X_VERSION_10_7) \
&& MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_7))
// (NB: on win32, native thread-locals aren't possible in a dynamically loaded DLL in XP).
#if ! ((JUCE_MSVC && (defined (_WIN64) || ! defined (JucePlugin_PluginCode))) \
|| (JUCE_MAC && defined (__clang__) && defined (MAC_OS_X_VERSION_10_7) \
&& MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_7))
#define JUCE_NO_COMPILER_THREAD_LOCAL 1
#endif


+ 0
- 5
modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp View File

@@ -25,16 +25,11 @@
ChangeBroadcaster::ChangeBroadcaster() noexcept
{
// are you trying to create this object before or after juce has been intialised??
jassert (MessageManager::getInstanceWithoutCreating() != nullptr);
callback.owner = this;
}
ChangeBroadcaster::~ChangeBroadcaster()
{
// all event-based objects must be deleted BEFORE juce is shut down!
jassert (MessageManager::getInstanceWithoutCreating() != nullptr);
}
void ChangeBroadcaster::addChangeListener (ChangeListener* const listener)


+ 2
- 4
modules/juce_events/messages/juce_MessageManager.cpp View File

@@ -35,8 +35,7 @@ public:
mm->quitMessageReceived = true;
}
private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (QuitMessage);
JUCE_DECLARE_NON_COPYABLE (QuitMessage);
};
//==============================================================================
@@ -239,8 +238,7 @@ public:
WaitableEvent lockedEvent, releaseEvent;
private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (BlockingMessage);
JUCE_DECLARE_NON_COPYABLE (BlockingMessage);
};
//==============================================================================


+ 5
- 1
modules/juce_gui_basics/components/juce_Component.cpp View File

@@ -750,7 +750,11 @@ private:
void Component::setCachedComponentImage (CachedComponentImage* newCachedImage)
{
cachedImage = newCachedImage;
if (cachedImage != newCachedImage)
{
cachedImage = newCachedImage;
repaint();
}
}
void Component::setBufferedToImage (const bool shouldBeBuffered)


+ 3
- 0
modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h View File

@@ -67,6 +67,9 @@ public:
*/
virtual void componentVisibilityChanged() = 0;
/** Returns the component that's being watched. */
Component* getComponent() const noexcept { return component; }
//==============================================================================
/** @internal */
void componentParentHierarchyChanged (Component& component);


+ 3
- 4
modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm View File

@@ -63,11 +63,10 @@ public:
if (topComp->getPeer() != nullptr)
{
const Point<int> pos (topComp->getLocalPoint (&owner, Point<int>()));
const Rectangle<int> area (topComp->getLocalArea (&owner, owner.getLocalBounds()));
NSRect r = NSMakeRect ((float) pos.getX(), (float) pos.getY(), (float) owner.getWidth(), (float) owner.getHeight());
NSRect r = NSMakeRect ((float) area.getX(), (float) area.getY(), (float) area.getWidth(), (float) area.getHeight());
r.origin.y = [[view superview] frame].size.height - (r.origin.y + r.size.height);
[view setFrame: r];
}
}
@@ -83,7 +82,7 @@ public:
if (peer != nullptr)
{
NSView* peerView = (NSView*) peer->getNativeHandle();
NSView* const peerView = (NSView*) peer->getNativeHandle();
[peerView addSubview: view];
componentMovedOrResized (false, false);
}


+ 1
- 0
modules/juce_opengl/opengl/juce_OpenGLHelpers.cpp View File

@@ -189,6 +189,7 @@ void OpenGLHelpers::drawTriangleStrip (const GLfloat* const vertices, const GLfl
{
#if ! JUCE_ANDROID
glEnable (GL_TEXTURE_2D);
clearGLError();
#endif
glDisableClientState (GL_COLOR_ARRAY);
glDisableClientState (GL_NORMAL_ARRAY);


Loading…
Cancel
Save