void BaseScene::HandleEvents() { SDL_Event event; while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_QUIT: QuitEvent(); break; case SDL_VIDEORESIZE: SetScreen(event.resize.w, event.resize.h, 0, screen->flags); break; case SDL_MOUSEMOTION: MouseMotion(event.motion); break; case SDL_MOUSEBUTTONDOWN: MouseButtonDown(event.button); break; case SDL_MOUSEBUTTONUP: MouseButtonUp(event.button); break; case SDL_KEYDOWN: KeyDown(event.key); break; case SDL_KEYUP: KeyUp(event.key); break; #ifdef USE_EVENT_JOYSTICK //TODO: joystick/gamepad support #endif #ifdef USE_EVENT_UNKNOWN default: UnknownEvent(event); break; #endif }//switch }//while }
void FURYSDL::EventProducer:: feed_event(const SDL_Event *ev) { if(ev==NULL) { return; } FURYEvent::handle h; switch(ev->type) { default: if(st(m_state).m_capture_all) { h=WRATHNew UnknownEvent(*ev); } break; /* TODO: SDL_TEXTINPUT/SDL_TEXTEDITING */ case SDL_KEYUP: case SDL_KEYDOWN: { if(!ev->key.repeat || st(m_state).m_repeat_enabled) { h=WRATHNew FURYKeyEvent(FURYKey(ev->key.keysym.sym), ev->key.type==SDL_KEYDOWN, ev->key.keysym.scancode, ev->key.keysym.scancode, compute_modifier(ev->key.keysym.mod)); } } break; case SDL_MOUSEMOTION: { h=WRATHNew FURYMouseMotionEvent(ivec2(ev->motion.x, ev->motion.y), ivec2(ev->motion.xrel, ev->motion.yrel), FURYMouse(ev->motion.which)); } break; case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: { h=WRATHNew FURYMouseButtonEvent(ev->button.button, ivec2(ev->button.x, ev->button.y), ev->button.state==SDL_PRESSED, FURYMouse(ev->button.which)); } break; case SDL_JOYAXISMOTION: { h=WRATHNew FURYJoystickAxisEvent(ev->jaxis.value, FURYJoystickAxis(ev->jaxis.axis), FURYJoystick(ev->jaxis.which)); } break; case SDL_JOYHATMOTION: { h=WRATHNew FURYJoystickHatMotion(create_hat_code(ev->jhat.value), FURYJoyHat(ev->jhat.hat), FURYJoystick(ev->jhat.which)); } break; case SDL_JOYBALLMOTION: { h=WRATHNew FURYJoystickBallMotionEvent(ivec2(ev->jball.xrel, ev->jball.yrel), FURYJoyBall(ev->jball.ball), FURYJoystick(ev->jball.which)); } break; case SDL_JOYBUTTONDOWN: case SDL_JOYBUTTONUP: { h=WRATHNew FURYJoystickButtonEvent(ev->jbutton.type==SDL_JOYBUTTONDOWN, FURYJoystickButton(ev->jbutton.button), FURYJoystick(ev->jbutton.which)); } break; case SDL_WINDOWEVENT: { switch(ev->window.event) { case SDL_WINDOWEVENT_RESIZED: { ivec2 new_size(ev->window.data1, ev->window.data2); h=WRATHNew FURYResizeEvent(st(m_state).m_last_size, new_size); st(m_state).m_last_size=new_size; } break; case SDL_WINDOWEVENT_CLOSE: { h=WRATHNew FURYEvent(FURYEvent::Quit); } break; } } break; case SDL_QUIT: { h=WRATHNew FURYEvent(FURYEvent::Quit); } break; } if(h.valid()) { st(m_state).m_sig(h); } }