int SDL_ANDROID_CallJavaSwapBuffers() { #ifndef BROOV_PLAYER_NO_DEBUG_LOG __android_log_print(ANDROID_LOG_INFO, "SDLLOG", "Inside SDL_ANDROID_CallJavaSwapBuffers"); #endif if( !glContextLost ) { SDL_ANDROID_drawTouchscreenKeyboard(); SDL_ANDROID_processAndroidTrackballDampening(); } if( glContextLost ) { glContextLost = 0; __android_log_print(ANDROID_LOG_INFO, "libSDL", "OpenGL context recreated, refreshing textures"); SDL_ANDROID_VideoContextRecreated(); appRestoredCallback(); } if( ! (*JavaEnv)->CallIntMethod( JavaEnv, JavaRenderer, JavaSwapBuffers ) ) return 0; return 1; }
extern void SDL_ANDROID_PumpEvents() { joystickEventsCount = 0; SDL_ANDROID_processAndroidTrackballDampening(); SDL_ANDROID_processMoveMouseWithKeyboard(); };
/* We need our own event queue, because Free Heroes 2 game uses * SDL_SetEventFilter(), and it calls SDL_Flip() from inside * it's custom filter function, and SDL_Flip() does not work * when it's not called from the main() thread. * So we, like, push the events into our own queue, * read each event from that queue inside SDL_ANDROID_PumpEvents(), * unlock the mutex, and push the event to SDL queue, * which is then immediately read by SDL from the same thread, * and then SDL invokes event filter function from FHeroes2. * FHeroes2 call SDL_Flip() from inside that event filter function, * and it works, because it is called from the main() thread. */ extern void SDL_ANDROID_PumpEvents() { static int oldMouseButtons = 0; SDL_Event ev; SDL_ANDROID_processAndroidTrackballDampening(); SDL_ANDROID_processMoveMouseWithKeyboard(); #if SDL_VERSION_ATLEAST(1,3,0) SDL_Window * window = SDL_GetFocusWindow(); if( !window ) return; #endif if( !BufferedEventsMutex ) BufferedEventsMutex = SDL_CreateMutex(); SDL_mutexP(BufferedEventsMutex); while( BufferedEventsStart != BufferedEventsEnd ) { ev = BufferedEvents[BufferedEventsStart]; BufferedEvents[BufferedEventsStart].type = 0; BufferedEventsStart++; if( BufferedEventsStart >= MAX_BUFFERED_EVENTS ) BufferedEventsStart = 0; SDL_mutexV(BufferedEventsMutex); switch( ev.type ) { case SDL_MOUSEMOTION: SDL_SendMouseMotion( ANDROID_CurrentWindow, 0, ev.motion.x, ev.motion.y ); break; case SDL_MOUSEBUTTONDOWN: if( ((oldMouseButtons & SDL_BUTTON(ev.button.button)) != 0) != ev.button.state ) { oldMouseButtons = (oldMouseButtons & ~SDL_BUTTON(ev.button.button)) | (ev.button.state ? SDL_BUTTON(ev.button.button) : 0); SDL_SendMouseButton( ANDROID_CurrentWindow, ev.button.state, ev.button.button ); } break; case SDL_KEYDOWN: //__android_log_print(ANDROID_LOG_INFO, "libSDL", "SDL_KEYDOWN: %i %i", ev->key.keysym.sym, ev->key.state); SDL_SendKeyboardKey( ev.key.state, &ev.key.keysym ); break; case SDL_JOYAXISMOTION: if( ev.jaxis.which < MAX_MULTITOUCH_POINTERS+1 && SDL_ANDROID_CurrentJoysticks[ev.jaxis.which] ) SDL_PrivateJoystickAxis( SDL_ANDROID_CurrentJoysticks[ev.jaxis.which], ev.jaxis.axis, ev.jaxis.value ); break; case SDL_JOYBUTTONDOWN: if( ev.jbutton.which < MAX_MULTITOUCH_POINTERS+1 && SDL_ANDROID_CurrentJoysticks[ev.jbutton.which] ) SDL_PrivateJoystickButton( SDL_ANDROID_CurrentJoysticks[ev.jbutton.which], ev.jbutton.button, ev.jbutton.state ); break; case SDL_JOYBALLMOTION: if( ev.jball.which < MAX_MULTITOUCH_POINTERS+1 && SDL_ANDROID_CurrentJoysticks[ev.jbutton.which] ) SDL_PrivateJoystickBall( SDL_ANDROID_CurrentJoysticks[ev.jball.which], ev.jball.ball, ev.jball.xrel, ev.jball.yrel ); break; #if SDL_VERSION_ATLEAST(1,3,0) //if( ANDROID_CurrentWindow ) // SDL_SendWindowEvent(ANDROID_CurrentWindow, SDL_WINDOWEVENT_MINIMIZED, 0, 0); #else case SDL_ACTIVEEVENT: SDL_PrivateAppActive(ev.active.gain, ev.active.state); break; #endif #if SDL_VERSION_ATLEAST(1,3,0) case SDL_FINGERMOTION: SDL_SendTouchMotion(0, ev.tfinger.fingerId, 0, (float)ev.tfinger.x / (float)window->w, (float)ev.tfinger.y / (float)window->h, ev.tfinger.pressure); break; case SDL_FINGERDOWN: SDL_SendFingerDown(0, ev.tfinger.fingerId, ev.tfinger.state ? 1 : 0, (float)ev.tfinger.x / (float)window->w, (float)ev.tfinger.y / (float)window->h, ev.tfinger.pressure); break; case SDL_TEXTINPUT: SDL_SendKeyboardText(ev.text.text); break; case SDL_MOUSEWHEEL: SDL_SendMouseWheel( ANDROID_CurrentWindow, ev.wheel.x, ev.wheel.y ); break; #endif } SDL_mutexP(BufferedEventsMutex); } SDL_mutexV(BufferedEventsMutex); };