Android: make Android_PumpEvents() more readable

No behavior change in this commit.
This commit is contained in:
Sylvain Becker 2019-01-04 23:11:21 +01:00
parent ca184ac386
commit cf12234454
1 changed files with 45 additions and 18 deletions

View File

@ -63,35 +63,37 @@ android_egl_context_backup(SDL_Window *window)
SDL_GL_MakeCurrent(window, NULL); SDL_GL_MakeCurrent(window, NULL);
} }
void
Android_PumpEvents(_THIS)
{
static int isPaused = 0;
#if SDL_ANDROID_BLOCK_ON_PAUSE
static int isPausing = 0;
#endif
/* No polling necessary */
/* /*
* Android_ResumeSem and Android_PauseSem are signaled from Java_org_libsdl_app_SDLActivity_nativePause and Java_org_libsdl_app_SDLActivity_nativeResume * Android_ResumeSem and Android_PauseSem are signaled from Java_org_libsdl_app_SDLActivity_nativePause and Java_org_libsdl_app_SDLActivity_nativeResume
* When the pause semaphore is signaled, if SDL_ANDROID_BLOCK_ON_PAUSE is defined the event loop will block until the resume signal is emitted. * When the pause semaphore is signaled, if SDL_ANDROID_BLOCK_ON_PAUSE is defined the event loop will block until the resume signal is emitted.
*
* No polling necessary
*/ */
#if SDL_ANDROID_BLOCK_ON_PAUSE #if SDL_ANDROID_BLOCK_ON_PAUSE
void
Android_PumpEvents(_THIS)
{
static int isPaused = 0;
static int isPausing = 0;
if (isPaused && !isPausing) { if (isPaused && !isPausing) {
/* Make sure this is the last thing we do before pausing */ /* Make sure this is the last thing we do before pausing */
SDL_LockMutex(Android_ActivityMutex); SDL_LockMutex(Android_ActivityMutex);
android_egl_context_backup(Android_Window); android_egl_context_backup(Android_Window);
SDL_UnlockMutex(Android_ActivityMutex); SDL_UnlockMutex(Android_ActivityMutex);
ANDROIDAUDIO_PauseDevices(); ANDROIDAUDIO_PauseDevices();
if (SDL_SemWait(Android_ResumeSem) == 0) { if (SDL_SemWait(Android_ResumeSem) == 0) {
#else
if (isPaused) {
if (SDL_SemTryWait(Android_ResumeSem) == 0) {
#endif
isPaused = 0; isPaused = 0;
ANDROIDAUDIO_ResumeDevices(); ANDROIDAUDIO_ResumeDevices();
/* Restore the GL Context from here, as this operation is thread dependent */ /* Restore the GL Context from here, as this operation is thread dependent */
if (!SDL_HasEvent(SDL_QUIT)) { if (!SDL_HasEvent(SDL_QUIT)) {
SDL_LockMutex(Android_ActivityMutex); SDL_LockMutex(Android_ActivityMutex);
@ -99,9 +101,7 @@ Android_PumpEvents(_THIS)
SDL_UnlockMutex(Android_ActivityMutex); SDL_UnlockMutex(Android_ActivityMutex);
} }
} }
} } else {
else {
#if SDL_ANDROID_BLOCK_ON_PAUSE
if (isPausing || SDL_SemTryWait(Android_PauseSem) == 0) { if (isPausing || SDL_SemTryWait(Android_PauseSem) == 0) {
/* We've been signaled to pause, but before we block ourselves, /* We've been signaled to pause, but before we block ourselves,
we need to make sure that certain key events have reached the app */ we need to make sure that certain key events have reached the app */
@ -113,18 +113,45 @@ Android_PumpEvents(_THIS)
isPaused = 1; isPaused = 1;
} }
} }
}
}
#else #else
void
Android_PumpEvents(_THIS)
{
static int isPaused = 0;
if (isPaused) {
if (SDL_SemTryWait(Android_ResumeSem) == 0) {
isPaused = 0;
ANDROIDAUDIO_ResumeDevices();
/* Restore the GL Context from here, as this operation is thread dependent */
if (!SDL_HasEvent(SDL_QUIT)) {
SDL_LockMutex(Android_ActivityMutex);
android_egl_context_restore(Android_Window);
SDL_UnlockMutex(Android_ActivityMutex);
}
}
} else {
if (SDL_SemTryWait(Android_PauseSem) == 0) { if (SDL_SemTryWait(Android_PauseSem) == 0) {
SDL_LockMutex(Android_ActivityMutex); SDL_LockMutex(Android_ActivityMutex);
android_egl_context_backup(Android_Window); android_egl_context_backup(Android_Window);
SDL_UnlockMutex(Android_ActivityMutex); SDL_UnlockMutex(Android_ActivityMutex);
ANDROIDAUDIO_PauseDevices(); ANDROIDAUDIO_PauseDevices();
isPaused = 1; isPaused = 1;
} }
}
}
#endif #endif
}
}
#endif /* SDL_VIDEO_DRIVER_ANDROID */ #endif /* SDL_VIDEO_DRIVER_ANDROID */