Android: make Android_PumpEvents() more readable No behavior change in this commit.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
diff --git a/src/video/android/SDL_androidevents.c b/src/video/android/SDL_androidevents.c
index c95750c..8e8ecd6 100644
--- a/src/video/android/SDL_androidevents.c
+++ b/src/video/android/SDL_androidevents.c
@@ -63,35 +63,37 @@ android_egl_context_backup(SDL_Window *window)
SDL_GL_MakeCurrent(window, NULL);
}
+
+/*
+ * 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.
+ *
+ * No polling necessary
+ */
+
+#if SDL_ANDROID_BLOCK_ON_PAUSE
+
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
- * 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.
- */
-#if SDL_ANDROID_BLOCK_ON_PAUSE
if (isPaused && !isPausing) {
+
/* Make sure this is the last thing we do before pausing */
SDL_LockMutex(Android_ActivityMutex);
android_egl_context_backup(Android_Window);
SDL_UnlockMutex(Android_ActivityMutex);
ANDROIDAUDIO_PauseDevices();
+
if (SDL_SemWait(Android_ResumeSem) == 0) {
-#else
- if (isPaused) {
- if (SDL_SemTryWait(Android_ResumeSem) == 0) {
-#endif
+
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);
@@ -99,11 +101,9 @@ Android_PumpEvents(_THIS)
SDL_UnlockMutex(Android_ActivityMutex);
}
}
- }
- else {
-#if SDL_ANDROID_BLOCK_ON_PAUSE
+ } else {
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 */
if (SDL_HasEvent(SDL_WINDOWEVENT) || SDL_HasEvent(SDL_APP_WILLENTERBACKGROUND) || SDL_HasEvent(SDL_APP_DIDENTERBACKGROUND) ) {
isPausing = 1;
@@ -113,19 +113,46 @@ Android_PumpEvents(_THIS)
isPaused = 1;
}
}
+ }
+}
+
#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) {
+
SDL_LockMutex(Android_ActivityMutex);
android_egl_context_backup(Android_Window);
SDL_UnlockMutex(Android_ActivityMutex);
ANDROIDAUDIO_PauseDevices();
+
isPaused = 1;
}
-#endif
}
}
+#endif
+
#endif /* SDL_VIDEO_DRIVER_ANDROID */
/* vi: set ts=4 sw=4 expandtab: */