X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fevents.c;h=647446226abd3a975acf79ffe6c047209c03f5bd;hb=19b0eb2d9f297c73cae1e57fc7774ae5ce97daf7;hp=79821e98825ac7bc4b1bfa933d49b97952fd6b8e;hpb=5e4083a987541a748724ea21569758d512e0e770;p=rocksndiamonds.git diff --git a/src/events.c b/src/events.c index 79821e98..64744622 100644 --- a/src/events.c +++ b/src/events.c @@ -46,7 +46,7 @@ static unsigned int special_cursor_delay_value = 1000; /* event filter addition for SDL2: as SDL2 does not have a function to enable or disable keyboard auto-repeat, filter repeated keyboard events instead */ -static int FilterEventsExt(const Event *event) +static int FilterEvents(const Event *event) { MotionEvent *motion; @@ -88,23 +88,11 @@ static int FilterEventsExt(const Event *event) return 1; } -#if defined(TARGET_SDL2) -int FilterEvents(void *userdata, Event *event) -{ - return FilterEventsExt(event); -} -#else -int FilterEvents(const Event *event) -{ - return FilterEventsExt(event); -} -#endif - /* to prevent delay problems, skip mouse motion events if the very next event is also a mouse motion event (and therefore effectively only handling the last of a row of mouse motion events in the event queue) */ -boolean SkipPressedMouseMotionEvent(const Event *event) +static boolean SkipPressedMouseMotionEvent(const Event *event) { /* nothing to do if the current event is not a mouse motion event */ if (event->type != EVENT_MOTIONNOTIFY) @@ -128,9 +116,13 @@ boolean SkipPressedMouseMotionEvent(const Event *event) return FALSE; } -/* this is only really needed for non-SDL targets to filter unwanted events; - when using SDL with properly installed event filter, this function can be - replaced with a simple "NextEvent()" call, but it doesn't hurt either */ +/* this is especially needed for event modifications for the Android target: + if mouse coordinates should be modified in the event filter function, + using a properly installed SDL event filter does not work, because in + the event filter, mouse coordinates in the event structure are still + physical pixel positions, not logical (scaled) screen positions, so this + has to be handled at a later stage in the event processing functions + (when device pixel positions are already converted to screen positions) */ boolean NextValidEvent(Event *event) { @@ -140,7 +132,7 @@ boolean NextValidEvent(Event *event) NextEvent(event); - if (FilterEventsExt(event)) + if (FilterEvents(event)) handle_this_event = TRUE; if (SkipPressedMouseMotionEvent(event)) @@ -1239,8 +1231,10 @@ void HandleButton(int mx, int my, int button, int button_nr) HandleSetupScreen(mx, my, 0, 0, button); break; +#if defined(TARGET_SDL2) case GAME_MODE_PLAYING: HandleFollowFinger(mx, my, button); +#endif #ifdef DEBUG if (button == MB_PRESSED && !motion_status && IN_GFX_FIELD_PLAY(mx, my) && @@ -1859,9 +1853,11 @@ void HandleNoEvent() HandleLevelEditorIdle(); break; +#if defined(TARGET_SDL2) case GAME_MODE_PLAYING: HandleFollowFinger(-1, -1, -1); break; +#endif default: break;