X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;ds=sidebyside;f=src%2Fandroid%2Ffg_main_android.c;fp=src%2Fandroid%2Ffg_main_android.c;h=52700fe074b1315d724e042ed40a52e64826550c;hb=1756bdee48e0b2fdc7bdbe0b6f4e11062eecd412;hp=1e30b1061b82a0d241fc4fc7e092e872ab8fe56f;hpb=329ff5a3e911e6a0e6cf4d75f25f9ccedd3b7693;p=freeglut diff --git a/src/android/fg_main_android.c b/src/android/fg_main_android.c index 1e30b10..52700fe 100644 --- a/src/android/fg_main_android.c +++ b/src/android/fg_main_android.c @@ -303,43 +303,75 @@ int32_t handle_input(struct android_app* app, AInputEvent* event) { */ void handle_cmd(struct android_app* app, int32_t cmd) { switch (cmd) { - case APP_CMD_SAVE_STATE: - /* The system has asked us to save our current state. Do so. */ - LOGI("handle_cmd: APP_CMD_SAVE_STATE"); + /* App life cycle, in that order: */ + case APP_CMD_START: + LOGI("handle_cmd: APP_CMD_START"); + break; + case APP_CMD_RESUME: + LOGI("handle_cmd: APP_CMD_RESUME"); + /* If coming back from a pause: */ + /* - Recreate window context and surface */ + /* - Call user-defined hook to restore resources (textures...) */ + /* - Unpause GLUT callbacks */ break; - case APP_CMD_INIT_WINDOW: + case APP_CMD_INIT_WINDOW: /* surfaceCreated */ /* The window is being shown, get it ready. */ LOGI("handle_cmd: APP_CMD_INIT_WINDOW"); fgDisplay.pDisplay.single_window->Window.Handle = app->window; /* glPlatformOpenWindow was waiting for Handle to be defined and will now return from fgPlatformProcessSingleEvent() */ break; - case APP_CMD_TERM_WINDOW: - /* The window is being hidden or closed, clean it up. */ - LOGI("handle_cmd: APP_CMD_TERM_WINDOW"); - fgDestroyWindow(fgDisplay.pDisplay.single_window); - fgDisplay.pDisplay.single_window = NULL; - break; - case APP_CMD_DESTROY: - LOGI("handle_cmd: APP_CMD_DESTROY"); - /* glue has already set android_app->destroyRequested=1 */ - break; case APP_CMD_GAINED_FOCUS: LOGI("handle_cmd: APP_CMD_GAINED_FOCUS"); break; + case APP_CMD_WINDOW_RESIZED: + LOGI("handle_cmd: APP_CMD_WINDOW_RESIZED"); + if (fgDisplay.pDisplay.single_window->Window.pContext.egl.Surface != EGL_NO_SURFACE) + /* Make ProcessSingleEvent detect the new size, only available + after the next SwapBuffer */ + glutPostRedisplay(); + break; + + case APP_CMD_SAVE_STATE: /* onSaveInstanceState */ + /* The system has asked us to save our current state, when it + pauses the application without destroying it right after. */ + /* app->savedState = ... */ + /* app->savedStateSize = ... */ + LOGI("handle_cmd: APP_CMD_SAVE_STATE"); + break; + case APP_CMD_PAUSE: + LOGI("handle_cmd: APP_CMD_PAUSE"); + /* - Pause GLUT callbacks */ + break; case APP_CMD_LOST_FOCUS: LOGI("handle_cmd: APP_CMD_LOST_FOCUS"); break; + case APP_CMD_TERM_WINDOW: /* surfaceDestroyed */ + /* The application is being hidden, but may be restored */ + /* TODO: Pausing/resuming windows not ready yet, so killing it now */ + fgDestroyWindow(fgDisplay.pDisplay.single_window); + fgDisplay.pDisplay.single_window = NULL; + LOGI("handle_cmd: APP_CMD_TERM_WINDOW"); + break; + case APP_CMD_STOP: + LOGI("handle_cmd: APP_CMD_STOP"); + break; + case APP_CMD_DESTROY: /* Activity.onDestroy */ + LOGI("handle_cmd: APP_CMD_DESTROY"); + /* User closed the application for good, let's kill the window */ + if (fgDisplay.pDisplay.single_window != NULL) { + fgDestroyWindow(fgDisplay.pDisplay.single_window); + fgDisplay.pDisplay.single_window = NULL; + } + /* glue has already set android_app->destroyRequested=1 */ + break; + case APP_CMD_CONFIG_CHANGED: /* Handle rotation / orientation change */ LOGI("handle_cmd: APP_CMD_CONFIG_CHANGED"); break; - case APP_CMD_WINDOW_RESIZED: - LOGI("handle_cmd: APP_CMD_WINDOW_RESIZED"); - if (fgDisplay.pDisplay.single_window->Window.pContext.egl.Surface != EGL_NO_SURFACE) - /* Make ProcessSingleEvent detect the new size, only available - after the next SwapBuffer */ - glutPostRedisplay(); + case APP_CMD_LOW_MEMORY: + LOGI("handle_cmd: APP_CMD_LOW_MEMORY"); break; default: LOGI("handle_cmd: unhandled cmd=%d", cmd);