#define DEBUG_EVENTS_BUTTON (DEBUG_EVENTS * 0)
#define DEBUG_EVENTS_MOTION (DEBUG_EVENTS * 0)
+#define DEBUG_EVENTS_WHEEL (DEBUG_EVENTS * 1)
#define DEBUG_EVENTS_WINDOW (DEBUG_EVENTS * 0)
#define DEBUG_EVENTS_FINGER (DEBUG_EVENTS * 0)
#define DEBUG_EVENTS_TEXT (DEBUG_EVENTS * 1)
break;
#if defined(TARGET_SDL2)
+ case EVENT_WHEELMOTION:
+ HandleWheelEvent((WheelEvent *) &event);
+ break;
+
case SDL_WINDOWEVENT:
HandleWindowEvent((WindowEvent *) &event);
break;
#if defined(TARGET_SDL2)
+void HandleWheelEvent(WheelEvent *event)
+{
+ int button_nr;
+
+#if DEBUG_EVENTS_WHEEL
+#if 1
+ Error(ERR_DEBUG, "WHEEL EVENT: mouse == %d, x/y == %d/%d\n",
+ event->which, event->x, event->y);
+#else
+ // (SDL_MOUSEWHEEL_NORMAL/SDL_MOUSEWHEEL_FLIPPED needs SDL 2.0.4 or newer)
+ Error(ERR_DEBUG, "WHEEL EVENT: mouse == %d, x/y == %d/%d, direction == %s\n",
+ event->which, event->x, event->y,
+ (event->direction == SDL_MOUSEWHEEL_NORMAL ? "SDL_MOUSEWHEEL_NORMAL" :
+ "SDL_MOUSEWHEEL_FLIPPED"));
+#endif
+#endif
+
+ button_nr = (event->x < 0 ? MB_WHEEL_LEFT :
+ event->x > 0 ? MB_WHEEL_RIGHT :
+ event->y < 0 ? MB_WHEEL_DOWN :
+ event->y > 0 ? MB_WHEEL_UP : 0);
+
+#if defined(PLATFORM_WIN32) || defined(PLATFORM_MACOSX)
+ // accelerated mouse wheel available on Mac and Windows
+ wheel_steps = (event->x ? ABS(event->x) : ABS(event->y));
+#else
+ // no accelerated mouse wheel available on Unix/Linux
+ wheel_steps = DEFAULT_WHEEL_STEPS;
+#endif
+
+ motion_status = FALSE;
+
+ button_status = button_nr;
+ HandleButton(0, 0, button_status, -button_nr);
+
+ button_status = MB_RELEASED;
+ HandleButton(0, 0, button_status, -button_nr);
+}
+
void HandleWindowEvent(WindowEvent *event)
{
#if DEBUG_EVENTS_WINDOW
static int old_mx = 0, old_my = 0;
boolean button_hold = FALSE;
- if (button < 0)
+ if (button_nr < 0)
{
mx = old_mx;
my = old_my;
- button = -button;
+ button_nr = -button_nr;
button_hold = TRUE;
}
else
}
}
+void HandleKeysDebug(Key key)
+{
+#ifdef DEBUG
+ int i;
+
+ if (game_status == GAME_MODE_PLAYING || !setup.debug.frame_delay_game_only)
+ {
+ boolean mod_key_pressed = ((GetKeyModState() & KMOD_Control) ||
+ (GetKeyModState() & KMOD_Alt) ||
+ (GetKeyModState() & KMOD_Meta));
+
+ for (i = 0; i < NUM_DEBUG_FRAME_DELAY_KEYS; i++)
+ {
+ if (key == setup.debug.frame_delay_key[i] &&
+ (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);
+
+ if (!setup.debug.frame_delay_game_only)
+ MenuFrameDelay = GameFrameDelay;
+
+ SetVideoFrameDelay(GameFrameDelay);
+
+ if (GameFrameDelay > ONE_SECOND_DELAY)
+ Error(ERR_DEBUG, "frame delay == %d ms", GameFrameDelay);
+ else if (GameFrameDelay != 0)
+ Error(ERR_DEBUG, "frame delay == %d ms (max. %d fps / %d %%)",
+ GameFrameDelay, ONE_SECOND_DELAY / GameFrameDelay,
+ GAME_FRAME_DELAY * 100 / GameFrameDelay);
+ else
+ Error(ERR_DEBUG, "frame delay == 0 ms (maximum speed)");
+
+ break;
+ }
+ }
+ }
+
+ if (game_status == GAME_MODE_PLAYING)
+ {
+ if (key == KSYM_d)
+ {
+ options.debug = !options.debug;
+
+ Error(ERR_DEBUG, "debug mode %s",
+ (options.debug ? "enabled" : "disabled"));
+ }
+ else if (key == KSYM_v)
+ {
+ Error(ERR_DEBUG, "currently using game engine version %d",
+ game.engine_version);
+ }
+ }
+#endif
+}
+
void HandleKey(Key key, int key_status)
{
boolean anyTextGadgetActiveOrJustFinished = anyTextGadgetActive();
else if (key == setup.shortcut.load_game)
TapeQuickLoad();
else if (key == setup.shortcut.toggle_pause)
- TapeTogglePause(TAPE_TOGGLE_MANUAL);
+ TapeTogglePause(TAPE_TOGGLE_MANUAL | TAPE_TOGGLE_PLAY_PAUSE);
HandleTapeButtonKeys(key);
HandleSoundButtonKeys(key);
HandleHallOfFame(0, 0, 0, +1 * SCROLL_PAGE, MB_MENU_MARK);
break;
-#ifdef DEBUG
- case KSYM_b:
- setup.sp_show_border_elements = !setup.sp_show_border_elements;
- printf("Supaplex border elements %s\n",
- setup.sp_show_border_elements ? "enabled" : "disabled");
- break;
-#endif
-
default:
break;
}
RequestQuitGame(setup.ask_on_escape);
break;
-#ifdef DEBUG
- case KSYM_d:
- if (options.debug)
- {
- options.debug = FALSE;
- printf("debug mode disabled\n");
- }
- else
- {
- options.debug = TRUE;
- printf("debug mode enabled\n");
- }
- break;
-
- case KSYM_v:
- printf("::: currently using game engine version %d\n",
- game.engine_version);
- break;
-#endif
-
default:
break;
}
}
}
-#ifdef DEBUG
- if (game_status == GAME_MODE_PLAYING || !setup.debug.frame_delay_game_only)
- {
- boolean mod_key_pressed = ((GetKeyModState() & KMOD_Control) ||
- (GetKeyModState() & KMOD_Alt) ||
- (GetKeyModState() & KMOD_Meta));
-
- for (i = 0; i < NUM_DEBUG_FRAME_DELAY_KEYS; i++)
- {
- if (key == setup.debug.frame_delay_key[i] &&
- (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);
-
- if (!setup.debug.frame_delay_game_only)
- MenuFrameDelay = GameFrameDelay;
-
- SetVideoFrameDelay(GameFrameDelay);
-
- if (GameFrameDelay > ONE_SECOND_DELAY)
- Error(ERR_DEBUG, "frame delay == %d ms", GameFrameDelay);
- else if (GameFrameDelay != 0)
- Error(ERR_DEBUG, "frame delay == %d ms (max. %d fps / %d %%)",
- GameFrameDelay, ONE_SECOND_DELAY / GameFrameDelay,
- GAME_FRAME_DELAY * 100 / GameFrameDelay);
- else
- Error(ERR_DEBUG, "frame delay == 0 ms (maximum speed)");
-
- break;
- }
- }
- }
-#endif
+ HandleKeysDebug(key);
}
void HandleNoEvent()
// if (button_status && game_status != GAME_MODE_PLAYING)
if (button_status && (game_status != GAME_MODE_PLAYING || tape.pausing))
{
- HandleButton(0, 0, -button_status, button_status);
+ HandleButton(0, 0, button_status, -button_status);
}
else
{