break;
#if defined(TARGET_SDL)
+#if defined(TARGET_SDL2)
+ case SDL_CONTROLLERDEVICEADDED:
+ case SDL_CONTROLLERDEVICEREMOVED:
+ case SDL_CONTROLLERAXISMOTION:
+ case SDL_CONTROLLERBUTTONDOWN:
+ case SDL_CONTROLLERBUTTONUP:
+#endif
case SDL_JOYAXISMOTION:
case SDL_JOYBUTTONDOWN:
case SDL_JOYBUTTONUP:
if (new_window_width != video.window_width ||
new_window_height != video.window_height)
{
- int new_xpercent = (100 * new_window_width / video.screen_width);
- int new_ypercent = (100 * new_window_height / video.screen_height);
+ int new_xpercent = 100.0 * new_window_width / video.screen_width + .5;
+ int new_ypercent = 100.0 * new_window_height / video.screen_height + .5;
// (extreme window scaling allowed, but cannot be saved permanently)
video.window_scaling_percent = MIN(new_xpercent, new_ypercent);
{
int key_status = (event->type == EVENT_FINGERRELEASE ? KEY_RELEASED :
KEY_PRESSED);
- Key key = (event->x < 1.0 / 3.0 ?
- (event->y < 1.0 / 2.0 ? setup.input[0].key.snap :
- setup.input[0].key.drop) :
- event->x > 2.0 / 3.0 ?
- (event->y < 1.0 / 3.0 ? setup.input[0].key.up :
- event->y > 2.0 / 3.0 ? setup.input[0].key.down :
- event->x < 5.0 / 6.0 ? setup.input[0].key.left :
- setup.input[0].key.right) :
+ float ypos = 1.0 - 1.0 / 3.0 * video.display_width / video.display_height;
+
+ event_y = (event_y - ypos) / (1 - ypos);
+
+ Key key = (event_x > 0 && event_x < 1.0 / 6.0 &&
+ event_y > 2.0 / 3.0 && event_y < 1 ?
+ setup.input[0].key.snap :
+ event_x > 1.0 / 6.0 && event_x < 1.0 / 3.0 &&
+ event_y > 2.0 / 3.0 && event_y < 1 ?
+ setup.input[0].key.drop :
+ event_x > 7.0 / 9.0 && event_x < 8.0 / 9.0 &&
+ event_y > 0 && event_y < 1.0 / 3.0 ?
+ setup.input[0].key.up :
+ event_x > 6.0 / 9.0 && event_x < 7.0 / 9.0 &&
+ event_y > 1.0 / 3.0 && event_y < 2.0 / 3.0 ?
+ setup.input[0].key.left :
+ event_x > 8.0 / 9.0 && event_x < 1 &&
+ event_y > 1.0 / 3.0 && event_y < 2.0 / 3.0 ?
+ setup.input[0].key.right :
+ event_x > 7.0 / 9.0 && event_x < 8.0 / 9.0 &&
+ event_y > 2.0 / 3.0 && event_y < 1 ?
+ setup.input[0].key.down :
KSYM_UNDEFINED);
+
char *key_status_name = (key_status == KEY_RELEASED ? "KEY_RELEASED" :
"KEY_PRESSED");
int i;
}
#endif
+ if (HandleGlobalAnimClicks(mx, my, button))
+ {
+ /* do not handle this button event anymore */
+ mx = my = -32; /* force mouse event to be outside screen tiles */
+ }
+
if (button_hold && game_status == GAME_MODE_PLAYING && tape.pausing)
return;
(mod_key_pressed == setup.debug.frame_delay_use_mod_key))
{
GameFrameDelay = (GameFrameDelay != setup.debug.frame_delay[i] ?
- setup.debug.frame_delay[i] : GAME_FRAME_DELAY);
+ setup.debug.frame_delay[i] : setup.game_frame_delay);
if (!setup.debug.frame_delay_game_only)
MenuFrameDelay = GameFrameDelay;
return;
}
+ if (HandleGlobalAnimClicks(-1, -1, (key == KSYM_space ||
+ key == KSYM_Return ||
+ key == KSYM_Escape)))
+ {
+ /* do not handle this key event anymore */
+ if (key != KSYM_Escape) /* always allow ESC key to be handled */
+ return;
+ }
+
if (game_status == GAME_MODE_PLAYING && AllPlayersGone &&
(key == KSYM_Return || key == setup.shortcut.toggle_pause))
{
{
int i;
int result = 0;
+ boolean no_joysticks_configured = TRUE;
+ boolean use_as_joystick_nr = (game_status != GAME_MODE_PLAYING);
+ static byte joy_action_last[MAX_PLAYERS];
+
+ for (i = 0; i < MAX_PLAYERS; i++)
+ if (setup.input[i].use_joystick)
+ no_joysticks_configured = FALSE;
+
+ /* if no joysticks configured, map connected joysticks to players */
+ if (no_joysticks_configured)
+ use_as_joystick_nr = TRUE;
for (i = 0; i < MAX_PLAYERS; i++)
{
byte joy_action = 0;
- /*
- if (!setup.input[i].use_joystick)
- continue;
- */
-
- joy_action = Joystick(i);
+ joy_action = JoystickExt(i, use_as_joystick_nr);
result |= joy_action;
- if (!setup.input[i].use_joystick)
- continue;
+ if ((setup.input[i].use_joystick || no_joysticks_configured) &&
+ joy_action != joy_action_last[i])
+ stored_player[i].action = joy_action;
- stored_player[i].action = joy_action;
+ joy_action_last[i] = joy_action;
}
return result;
int dx = (left ? -1 : right ? 1 : 0);
int dy = (up ? -1 : down ? 1 : 0);
+ if (HandleGlobalAnimClicks(-1, -1, newbutton))
+ {
+ /* do not handle this button event anymore */
+ return;
+ }
+
switch (game_status)
{
case GAME_MODE_TITLE: