treewars/mainevent.cpp

109 lines
2.6 KiB
C++

#include "mainevent.h"
void MainEvent::handle_event(SDL_Event* event)
{
switch(event->type)
{
// Interactions with the WM
case SDL_ACTIVEEVENT:
switch (event->active.state)
{
case SDL_APPMOUSEFOCUS:
if (event->active.gain) on_mouse_focus();
else on_mouse_blur();
break;
case SDL_APPINPUTFOCUS:
if (event->active.gain) on_input_focus();
else on_input_blur();
break;
case SDL_APPACTIVE:
if (event->active.gain) on_restore();
else on_minimize();
break;
}
break;
// keyboard keypresses
case SDL_KEYDOWN:
on_key_down(event->key.keysym.sym, event->key.keysym.mod,
event->key.keysym.unicode);
break;
case SDL_KEYUP:
on_key_up(event->key.keysym.sym, event->key.keysym.mod,
event->key.keysym.unicode);
break;
// mouse events
case SDL_MOUSEMOTION:
on_mouse_move(event->motion.x, event->motion.y, event->motion.xrel,
event->motion.yrel,
event->motion.state & SDL_BUTTON(SDL_BUTTON_LEFT),
event->motion.state & SDL_BUTTON(SDL_BUTTON_RIGHT),
event->motion.state & SDL_BUTTON(SDL_BUTTON_MIDDLE));
break;
case SDL_MOUSEBUTTONDOWN:
switch(event->button.button)
{
case SDL_BUTTON_LEFT:
on_lbutton_down(event->button.x, event->button.y);
break;
case SDL_BUTTON_RIGHT:
on_rbutton_down(event->button.x, event->button.y);
break;
case SDL_BUTTON_MIDDLE:
on_mbutton_down(event->button.x, event->button.y);
break;
}
break;
case SDL_MOUSEBUTTONUP:
switch(event->button.button)
{
case SDL_BUTTON_LEFT:
on_lbutton_up(event->button.x, event->button.y);
break;
case SDL_BUTTON_RIGHT:
on_rbutton_up(event->button.x, event->button.y);
break;
case SDL_BUTTON_MIDDLE:
on_mbutton_up(event->button.x, event->button.y);
break;
}
break;
// joystick events
case SDL_JOYAXISMOTION:
on_joy_axis(event->jaxis.which, event->jaxis.axis, event->jaxis.value);
break;
case SDL_JOYBALLMOTION:
on_joy_ball(event->jball.which, event->jball.ball, event->jball.xrel,
event->jball.yrel);
break;
case SDL_JOYHATMOTION:
on_joy_hat(event->jhat.which, event->jhat.hat, event->jhat.value);
break;
case SDL_JOYBUTTONDOWN:
on_joy_button_down(event->jbutton.which, event->jbutton.button);
break;
case SDL_JOYBUTTONUP:
on_joy_button_up(event->jbutton.which, event->jbutton.button);
break;
// Other events
case SDL_QUIT:
on_exit();
break;
case SDL_VIDEORESIZE:
on_resize(event->resize.w, event->resize.h);
break;
case SDL_VIDEOEXPOSE:
on_expose();
break;
default:
on_user(event->user.type, event->user.code, event->user.data1,
event->user.data2);
}
} // handle_event