X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fevents.c;h=d749ad3dca9ccc27e5cdbef86d90e6640fd71ed9;hp=bad68898754e4249cdc09113095de3dc57728356;hb=8a383c7596b43a99276cbd82d0b21cbf12588a33;hpb=887ef75d8d48c7279d4ea0897350070782f2c457 diff --git a/src/events.c b/src/events.c index bad68898..d749ad3d 100644 --- a/src/events.c +++ b/src/events.c @@ -27,6 +27,7 @@ #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) @@ -174,6 +175,10 @@ void HandleEvents() break; #if defined(TARGET_SDL2) + case EVENT_WHEELMOTION: + HandleWheelEvent((WheelEvent *) &event); + break; + case SDL_WINDOWEVENT: HandleWindowEvent((WindowEvent *) &event); break; @@ -309,7 +314,7 @@ void EventLoop(void) BackToFront(); /* reset video frame delay to default (may change again while playing) */ - SetVideoFrameDelay(GAME_FRAME_DELAY); + SetVideoFrameDelay(MenuFrameDelay); if (game_status == GAME_MODE_QUIT) return; @@ -434,6 +439,45 @@ void HandleMotionEvent(MotionEvent *event) #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 @@ -948,11 +992,11 @@ void HandleButton(int mx, int my, int button, int button_nr) 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 @@ -1158,6 +1202,60 @@ static void HandleKeysSpecial(Key key) } } +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_None); + + 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(); @@ -1357,6 +1455,7 @@ void HandleKey(Key key, int key_status) if ((key == KSYM_minus || key == KSYM_plus || + key == KSYM_equal || // ("Shift-=" is "+" on US keyboards) key == KSYM_0) && ((GetKeyModState() & KMOD_Control) || (GetKeyModState() & KMOD_Alt) || @@ -1406,7 +1505,7 @@ void HandleKey(Key key, int key_status) 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); @@ -1521,18 +1620,6 @@ void HandleKey(Key key, int key_status) HandleHallOfFame(0, 0, 0, +1 * SCROLL_PAGE, MB_MENU_MARK); break; -#ifdef DEBUG - case KSYM_0: - GameFrameDelay = (GameFrameDelay == 500 ? GAME_FRAME_DELAY : 500); - break; - - 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; } @@ -1551,40 +1638,6 @@ void HandleKey(Key key, int key_status) RequestQuitGame(setup.ask_on_escape); break; -#ifdef DEBUG - case KSYM_0: - if (key == KSYM_0) - { - if (GameFrameDelay == 500) - GameFrameDelay = GAME_FRAME_DELAY; - else - GameFrameDelay = 500; - } - else - GameFrameDelay = (key - KSYM_0) * 10; - printf("Game speed == %d%% (%d ms delay between two frames)\n", - GAME_FRAME_DELAY * 100 / GameFrameDelay, GameFrameDelay); - break; - - 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; } @@ -1601,6 +1654,8 @@ void HandleKey(Key key, int key_status) return; } } + + HandleKeysDebug(key); } void HandleNoEvent() @@ -1608,7 +1663,7 @@ 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 {