/***************************************************************************** Global code *****************************************************************************/ static int32_t handle_input(struct android_app* app, AInputEvent* event) { PVRShellInit* init = (PVRShellInit*) app->userData; if(init) { switch(AInputEvent_getType(event)) { case AINPUT_EVENT_TYPE_KEY: // Handle keyboard events { switch(AKeyEvent_getAction(event)) { case AKEY_EVENT_ACTION_DOWN: { switch(AKeyEvent_getKeyCode(event)) { case AKEYCODE_Q: init->KeyPressed(PVRShellKeyNameQUIT); break; case AKEYCODE_BACK: init->KeyPressed(PVRShellKeyNameQUIT); break; case AKEYCODE_DPAD_CENTER: init->KeyPressed(PVRShellKeyNameSELECT); break; case AKEYCODE_SPACE: init->KeyPressed(PVRShellKeyNameACTION1); break; case AKEYCODE_SHIFT_LEFT: init->KeyPressed(PVRShellKeyNameACTION2); break; case AKEYCODE_DPAD_UP: init->KeyPressed(init->m_eKeyMapUP); break; case AKEYCODE_DPAD_DOWN: init->KeyPressed(init->m_eKeyMapDOWN); break; case AKEYCODE_DPAD_LEFT: init->KeyPressed(init->m_eKeyMapLEFT); break; case AKEYCODE_DPAD_RIGHT: init->KeyPressed(init->m_eKeyMapRIGHT); break; case AKEYCODE_S: init->KeyPressed(PVRShellKeyNameScreenshot);break; default: break; } } return 1; default: break; } return 1; } case AINPUT_EVENT_TYPE_MOTION: // Handle touch events { switch(AMotionEvent_getAction(event)) { case AMOTION_EVENT_ACTION_DOWN: { PVRShell *pShell = init->m_pShell; if(pShell) { float vec2TouchPosition[2] = { AMotionEvent_getX(event, 0) / pShell->PVRShellGet(prefWidth), AMotionEvent_getY(event, 0) / pShell->PVRShellGet(prefHeight) }; init->TouchBegan(vec2TouchPosition); } break; } case AMOTION_EVENT_ACTION_MOVE: { PVRShell *pShell = init->m_pShell; if(pShell) { float vec2TouchPosition[2] = { AMotionEvent_getX(event, 0) / pShell->PVRShellGet(prefWidth), AMotionEvent_getY(event, 0) / pShell->PVRShellGet(prefHeight) }; init->TouchMoved(vec2TouchPosition); } break; } case AMOTION_EVENT_ACTION_UP: { PVRShell *pShell = init->m_pShell; if(pShell) { float vec2TouchPosition[2] = { AMotionEvent_getX(event, 0) / pShell->PVRShellGet(prefWidth), AMotionEvent_getY(event, 0) / pShell->PVRShellGet(prefHeight) }; init->TouchEnded(vec2TouchPosition); } break; } } return 1; } } } return 1; }