Пример #1
0
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
}
Пример #2
0
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);
    }
}