X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fevents.c;h=843fb1972f2005871c0eab401a157b6ccd260be1;hb=0f93b05731f58802973324200cfd8aecb11a4786;hp=564f647d396ff52c1f8d230a848fba4b1a2c9ae9;hpb=f1f974498c1691431a5755d917f674c7cf56eb53;p=rocksndiamonds.git diff --git a/src/events.c b/src/events.c index 564f647d..843fb197 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 @@ -1357,9 +1401,11 @@ 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)) && + (GetKeyModState() & KMOD_Alt) || + (GetKeyModState() & KMOD_Meta)) && video.window_scaling_available && !video.fullscreen_enabled) { @@ -1405,7 +1451,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); @@ -1520,18 +1566,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,20 +1585,6 @@ void HandleKey(Key key, int key_status) 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) { @@ -1600,6 +1620,41 @@ void HandleKey(Key key, int key_status) return; } } + +#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 } void HandleNoEvent() @@ -1607,7 +1662,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 {