void SDL_ANDROID_DeferredTextInput() { if( !deferredTextMutex ) deferredTextMutex = SDL_CreateMutex(); SDL_mutexP(deferredTextMutex); if( deferredTextIdx1 != deferredTextIdx2 ) { SDL_keysym keysym; deferredTextIdx1++; if( deferredTextIdx1 >= DEFERRED_TEXT_COUNT ) deferredTextIdx1 = 0; keysym = asciiToKeysym( deferredText[deferredTextIdx1].scancode, deferredText[deferredTextIdx1].unicode ); if( deferredText[deferredTextIdx1].down == SDL_RELEASED ) keysym.unicode = 0; SDL_SendKeyboardKey( deferredText[deferredTextIdx1].down, &keysym ); if( SDL_ANDROID_isMouseUsed ) SDL_ANDROID_MainThreadPushMouseMotion(SDL_ANDROID_currentMouseX + (SDL_ANDROID_currentMouseX % 2 ? -1 : 1), SDL_ANDROID_currentMouseY); // Force screen redraw } else { if( SDL_ANDROID_TextInputFinished ) { SDL_ANDROID_TextInputFinished = 0; SDL_ANDROID_IsScreenKeyboardShownFlag = 0; } } SDL_mutexV(deferredTextMutex); }
void SDL_ANDROID_DeferredTextInput() { if( !deferredTextMutex ) deferredTextMutex = SDL_CreateMutex(); SDL_mutexP(deferredTextMutex); if( deferredTextIdx1 != deferredTextIdx2 ) { int nextEvent = getNextEventAndLock(); if( nextEvent == -1 ) { SDL_mutexV(deferredTextMutex); return; } SDL_Event * ev = &BufferedEvents[BufferedEventsEnd]; deferredTextIdx1++; if( deferredTextIdx1 >= DEFERRED_TEXT_COUNT ) deferredTextIdx1 = 0; ev->type = SDL_KEYDOWN; ev->key.state = deferredText[deferredTextIdx1].down; ev->key.keysym = asciiToKeysym( deferredText[deferredTextIdx1].scancode, deferredText[deferredTextIdx1].unicode ); BufferedEventsEnd = nextEvent; SDL_mutexV(BufferedEventsMutex); if( SDL_ANDROID_isMouseUsed ) SDL_ANDROID_MainThreadPushMouseMotion(SDL_ANDROID_currentMouseX + (SDL_ANDROID_currentMouseX % 2 ? -1 : 1), SDL_ANDROID_currentMouseY); // Force screen redraw } else { if( SDL_ANDROID_TextInputFinished ) { SDL_ANDROID_TextInputFinished = 0; SDL_ANDROID_IsScreenKeyboardShownFlag = 0; } } SDL_mutexV(deferredTextMutex); };