bool EventsManager::Update() { static SDL_Event event; while (SDL_PollEvent(&event)) { switch(event.type) { case SDL_FINGERDOWN: case SDL_FINGERUP: case SDL_FINGERMOTION: pEventQueue->Raise(CreateTouchEvent(event)); return true; case SDL_KEYDOWN: pEventQueue->Raise(CreateKeyboardEvent(event)); return true; case SDL_MOUSEBUTTONUP: case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEMOTION: pEventQueue->Raise(CreateMouseEvent(event)); return true; case SDL_QUIT: pEventQueue->Raise(std::static_pointer_cast<IEventData>(std::make_shared<AppQuit_Event>())); return false; } } return true; }
void CorePlatformAndroid::OnTouch(int32 action, int32 id, float32 x, float32 y, float64 time) { // Logger::Debug("[CorePlatformAndroid::OnTouch] IN totalTouches.size = %d", totalTouches.size()); // Logger::Debug("[CorePlatformAndroid::OnTouch] action is %d, id is %d, x is %f, y is %f, time is %lf", action, id, x, y, time); UIEvent touchEvent = CreateTouchEvent(action, id, x, y, time); Vector<DAVA::UIEvent> activeTouches; activeTouches.push_back(touchEvent); bool isFound = false; for(Vector<DAVA::UIEvent>::iterator it = totalTouches.begin(); it != totalTouches.end(); ++it) { if((*it).tid == touchEvent.tid) { (*it).physPoint.x = touchEvent.physPoint.x; (*it).physPoint.y = touchEvent.physPoint.y; (*it).phase = touchEvent.phase; (*it).tapCount = touchEvent.tapCount; isFound = true; } } if(!isFound) { totalTouches.push_back(touchEvent); } UIControlSystem::Instance()->OnInput(touchEvent.phase, activeTouches, totalTouches); for(Vector<DAVA::UIEvent>::iterator it = totalTouches.begin(); it != totalTouches.end(); ) { if((DAVA::UIEvent::PHASE_ENDED == (*it).phase) || (DAVA::UIEvent::PHASE_CANCELLED == (*it).phase)) { it = totalTouches.erase(it); } else { ++it; } } // Logger::Debug("[CorePlatformAndroid::OnTouch] OUT totalTouches.size = %d", totalTouches.size()); }